ZGlmZiAtLWdpdCBhLy5idWNrY29uZmlnIGIvLmJ1Y2tjb25maWcKaW5kZXggYjJlMDdhYy4uOGQyNTcyYiAxMDA2NDQKLS0tIGEvLmJ1Y2tjb25maWcKKysrIGIvLmJ1Y2tjb25maWcKQEAgLTEsMyArMSwxMiBAQAorW2FsaWFzXQorICBhbGwgPSAvLzphbGwKKyAgamdpdCA9IC8vb3JnLmVjbGlwc2UuamdpdDpqZ2l0CisgIGpnaXQtYXJjaGl2ZSA9IC8vb3JnLmVjbGlwc2UuamdpdC5hcmNoaXZlOmpnaXQtYXJjaGl2ZQorICBqZ2l0X2JpbiA9IC8vOmpnaXRfYmluCisgIGpnaXQtbGZzID0gLy9vcmcuZWNsaXBzZS5qZ2l0LmxmczpqZ2l0LWxmcworICBqZ2l0LWxmcy1zZXJ2ZXIgPSAvL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlcjpqZ2l0LWxmcy1zZXJ2ZXIKKyAgamdpdC1zZXJ2bGV0ID0gLy9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuc2VydmVyOmpnaXQtc2VydmxldAorCiBbYnVpbGRmaWxlXQogICBpbmNsdWRlcyA9IC8vdG9vbHMvZGVmYXVsdC5kZWZzCiAKZGlmZiAtLWdpdCBhLy5idWNrdmVyc2lvbiBiLy5idWNrdmVyc2lvbgppbmRleCA5ZGFhYzJjLi41NjFhNzY5IDEwMDY0NAotLS0gYS8uYnVja3ZlcnNpb24KKysrIGIvLmJ1Y2t2ZXJzaW9uCkBAIC0xICsxIEBACi0xYjAzYjQzMTNiOTFiNjM0YmQ2MDRmYzM0ODdhMDVmODc3ZTU5ZGVlCitjYThkNmNiYWMzNzNhNjkwZjU0M2M1MTU5ZWVjMDExNmU3NjE4N2E5CmRpZmYgLS1naXQgYS9CVUNLIGIvQlVDSwppbmRleCBmMTliN2JkLi40NTc4ZTE3IDEwMDY0NAotLS0gYS9CVUNLCisrKyBiL0JVQ0sKQEAgLTEsNDUgKzEsMTggQEAKLWphdmFfbGlicmFyeSgKLSAgbmFtZSA9ICdqZ2l0JywKLSAgZXhwb3J0ZWRfZGVwcyA9IFsnLy9vcmcuZWNsaXBzZS5qZ2l0OmpnaXQnXSwKLSAgdmlzaWJpbGl0eSA9IFsnUFVCTElDJ10sCitERVBTID0gWworICAnLy9vcmcuZWNsaXBzZS5qZ2l0OmpnaXQnLAorICAnLy9vcmcuZWNsaXBzZS5qZ2l0LmFyY2hpdmU6amdpdC1hcmNoaXZlJywKKyAgJy8vb3JnLmVjbGlwc2UuamdpdC5odHRwLnNlcnZlcjpqZ2l0LXNlcnZsZXQnLAorICAnLy9vcmcuZWNsaXBzZS5qZ2l0LmxmczpqZ2l0LWxmcycsCisgICcvL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlcjpqZ2l0LWxmcy1zZXJ2ZXInLAorICAnLy9vcmcuZWNsaXBzZS5qZ2l0LnBnbTpqZ2l0JywKK10KKworemlwX2ZpbGUoCisgIG5hbWUgPSAnYWxsJywKKyAgc3JjcyA9IERFUFMsCiApCiAKLWdlbnJ1bGUoCi0gIG5hbWUgPSAnamdpdF9zcmMnLAotICBjbWQgPSAnbG4gLXMgJChsb2NhdGlvbiAvL29yZy5lY2xpcHNlLmpnaXQ6amdpdF9zcmMpICRPVVQnLAotICBvdXQgPSAnamdpdF9zcmMuemlwJywKLSAgdmlzaWJpbGl0eSA9IFsnUFVCTElDJ10sCi0pCi0KLWphdmFfbGlicmFyeSgKLSAgbmFtZSA9ICdqZ2l0LXNlcnZsZXQnLAotICBleHBvcnRlZF9kZXBzID0gWwotICAgICc6amdpdCcsCi0gICAgJy8vb3JnLmVjbGlwc2UuamdpdC5odHRwLnNlcnZlcjpqZ2l0LXNlcnZsZXQnCi0gIF0sCi0gIHZpc2liaWxpdHkgPSBbJ1BVQkxJQyddLAotKQotCi1qYXZhX2xpYnJhcnkoCi0gIG5hbWUgPSAnamdpdC1hcmNoaXZlJywKLSAgZXhwb3J0ZWRfZGVwcyA9IFsKLSAgICAnOmpnaXQnLAotICAgICcvL29yZy5lY2xpcHNlLmpnaXQuYXJjaGl2ZTpqZ2l0LWFyY2hpdmUnCi0gIF0sCi0gIHZpc2liaWxpdHkgPSBbJ1BVQkxJQyddLAotKQotCi1qYXZhX2xpYnJhcnkoCi0gIG5hbWUgPSAnanVuaXQnLAotICBleHBvcnRlZF9kZXBzID0gWwotICAgICc6amdpdCcsCi0gICAgJy8vb3JnLmVjbGlwc2UuamdpdC5qdW5pdDpqdW5pdCcKLSAgXSwKLSAgdmlzaWJpbGl0eSA9IFsnUFVCTElDJ10sCi0pCi0KLWdlbnJ1bGUoCitzaF9iaW5hcnkoCiAgIG5hbWUgPSAnamdpdF9iaW4nLAotICBjbWQgPSAnbG4gLXMgJChsb2NhdGlvbiAvL29yZy5lY2xpcHNlLmpnaXQucGdtOmpnaXQpICRPVVQnLAotICBvdXQgPSAnamdpdF9iaW4nLAorICBtYWluID0gJy8vb3JnLmVjbGlwc2UuamdpdC5wZ206amdpdCcsCiApCmRpZmYgLS1naXQgYS9saWIvQlVDSyBiL2xpYi9CVUNLCmluZGV4IDUyNDYxMmIuLjI0MjFiNDAgMTAwNjQ0Ci0tLSBhL2xpYi9CVUNLCisrKyBiL2xpYi9CVUNLCkBAIC0xMjMsMyArMTIzLDEyIEBACiAgIGFydGlmYWN0ID0gJ2hhbWNyZXN0LWNvcmUnLAogICB2ZXJzaW9uID0gJzEuMycsCiApCisKK21hdmVuX2phcigKKyAgbmFtZSA9ICdnc29uJywKKyAgYmluX3NoYTEgPSAnYTYwYTVlOTkzYzk4Yzg2NDAxMDA1M2NiOTAxYjdlYWIyNTMwNjU2OCcsCisgIHNyY19zaGExID0gJ2E2ZGM1ZGI4YTEyOTI4ZTU4M2JkM2YyM2U3MmQzYWI2MTFlY2Q1OGYnLAorICBncm91cCA9ICdjb20uZ29vZ2xlLmNvZGUuZ3NvbicsCisgIGFydGlmYWN0ID0gJ2dzb24nLAorICB2ZXJzaW9uID0gJzIuMi40JywKKykKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQuYW50LnRlc3QvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9vcmcuZWNsaXBzZS5qZ2l0LmFudC50ZXN0L01FVEEtSU5GL01BTklGRVNULk1GCmluZGV4IGNmYWVmY2QuLmQ0M2RjZWUgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQuYW50LnRlc3QvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5hbnQudGVzdC9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMywxNCArMywxNCBAQAogQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgogQnVuZGxlLU5hbWU6ICVwbHVnaW5fbmFtZQogQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuamdpdC5hbnQudGVzdAotQnVuZGxlLVZlcnNpb246IDQuMi4xLnF1YWxpZmllcgorQnVuZGxlLVZlcnNpb246IDQuMy4wLnF1YWxpZmllcgogQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKIEJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKYXZhU0UtMS43CiBJbXBvcnQtUGFja2FnZTogb3JnLmFwYWNoZS50b29scy5hbnQsCi0gb3JnLmVjbGlwc2UuamdpdC5hbnQudGFza3M7dmVyc2lvbj0iWzQuMi4xLDQuMy4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLmZpbGU7dmVyc2lvbj0iWzQuMi4xLDQuMy4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5qdW5pdDt2ZXJzaW9uPSJbNC4yLjEsNC4zLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmxpYjt2ZXJzaW9uPSJbNC4yLjEsNC4zLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnV0aWw7dmVyc2lvbj0iWzQuMi4xLDQuMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5hbnQudGFza3M7dmVyc2lvbj0iWzQuMy4wLDQuNC4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLmZpbGU7dmVyc2lvbj0iWzQuMy4wLDQuNC4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5qdW5pdDt2ZXJzaW9uPSJbNC4zLjAsNC40LjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmxpYjt2ZXJzaW9uPSJbNC4zLjAsNC40LjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnV0aWw7dmVyc2lvbj0iWzQuMy4wLDQuNC4wKSIsCiAgb3JnLmhhbWNyZXN0O3ZlcnNpb249IlsxLjEuMCwyLjAuMCkiLAogIG9yZy5qdW5pdDt2ZXJzaW9uPSJbNC4wLjAsNS4wLjApIgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5hbnQudGVzdC9wb20ueG1sIGIvb3JnLmVjbGlwc2UuamdpdC5hbnQudGVzdC9wb20ueG1sCmluZGV4IGYxZTdlMzYuLjhlNzAyYTIgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQuYW50LnRlc3QvcG9tLnhtbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LmFudC50ZXN0L3BvbS54bWwKQEAgLTUwLDcgKzUwLDcgQEAKICAgPHBhcmVudD4KICAgICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5qZ2l0PC9ncm91cElkPgogICAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQtcGFyZW50PC9hcnRpZmFjdElkPgotICAgIDx2ZXJzaW9uPjQuMi4xLVNOQVBTSE9UPC92ZXJzaW9uPgorICAgIDx2ZXJzaW9uPjQuMy4wLVNOQVBTSE9UPC92ZXJzaW9uPgogICA8L3BhcmVudD4KIAogICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0LmFudC50ZXN0PC9hcnRpZmFjdElkPgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5hbnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9vcmcuZWNsaXBzZS5qZ2l0LmFudC9NRVRBLUlORi9NQU5JRkVTVC5NRgppbmRleCA3NDcyMGZlLi42ZTJhZDE5IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LmFudC9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LmFudC9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMiwxMSArMiwxMSBAQAogQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgogQnVuZGxlLU5hbWU6ICVCdW5kbGUtTmFtZQogQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuamdpdC5hbnQKLUJ1bmRsZS1WZXJzaW9uOiA0LjIuMS5xdWFsaWZpZXIKK0J1bmRsZS1WZXJzaW9uOiA0LjMuMC5xdWFsaWZpZXIKIEJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKYXZhU0UtMS43CiBJbXBvcnQtUGFja2FnZTogb3JnLmFwYWNoZS50b29scy5hbnQsCi0gIG9yZy5lY2xpcHNlLmpnaXQuc3RvcmFnZS5maWxlO3ZlcnNpb249Ils0LjIuMSw0LjMuMCkiCisgIG9yZy5lY2xpcHNlLmpnaXQuc3RvcmFnZS5maWxlO3ZlcnNpb249Ils0LjMuMCw0LjQuMCkiCiBCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KIEJ1bmRsZS1WZW5kb3I6ICVQcm92aWRlci1OYW1lCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuamdpdC5hbnQudGFza3M7dmVyc2lvbj0iNC4yLjEiOworRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmpnaXQuYW50LnRhc2tzO3ZlcnNpb249IjQuMy4wIjsKICB1c2VzOj0ib3JnLmFwYWNoZS50b29scy5hbnQudHlwZXMsb3JnLmFwYWNoZS50b29scy5hbnQiCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LmFudC9wb20ueG1sIGIvb3JnLmVjbGlwc2UuamdpdC5hbnQvcG9tLnhtbAppbmRleCAwZTY5NDU3Li40YmZhYmEwIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LmFudC9wb20ueG1sCisrKyBiL29yZy5lY2xpcHNlLmpnaXQuYW50L3BvbS54bWwKQEAgLTQ4LDcgKzQ4LDcgQEAKIAk8cGFyZW50PgogCQk8Z3JvdXBJZD5vcmcuZWNsaXBzZS5qZ2l0PC9ncm91cElkPgogCQk8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0LXBhcmVudDwvYXJ0aWZhY3RJZD4KLQkJPHZlcnNpb24+NC4yLjEtU05BUFNIT1Q8L3ZlcnNpb24+CisJCTx2ZXJzaW9uPjQuMy4wLVNOQVBTSE9UPC92ZXJzaW9uPgogCTwvcGFyZW50PgogCiAJPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC5hbnQ8L2FydGlmYWN0SWQ+CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LmFyY2hpdmUvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9vcmcuZWNsaXBzZS5qZ2l0LmFyY2hpdmUvTUVUQS1JTkYvTUFOSUZFU1QuTUYKaW5kZXggNGYzYTYxZi4uZTZiNzE5MSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5hcmNoaXZlL01FVEEtSU5GL01BTklGRVNULk1GCisrKyBiL29yZy5lY2xpcHNlLmpnaXQuYXJjaGl2ZS9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMiw3ICsyLDcgQEAKIEJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKIEJ1bmRsZS1OYW1lOiAlcGx1Z2luX25hbWUKIEJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpnaXQuYXJjaGl2ZQotQnVuZGxlLVZlcnNpb246IDQuMi4xLnF1YWxpZmllcgorQnVuZGxlLVZlcnNpb246IDQuMy4wLnF1YWxpZmllcgogQnVuZGxlLVZlbmRvcjogJXByb3ZpZGVyX25hbWUKIEJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgogQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEphdmFTRS0xLjcKQEAgLTEyLDE0ICsxMiwxNCBAQAogIG9yZy5hcGFjaGUuY29tbW9ucy5jb21wcmVzcy5jb21wcmVzc29ycy5iemlwMjt2ZXJzaW9uPSJbMS40LDIuMCkiLAogIG9yZy5hcGFjaGUuY29tbW9ucy5jb21wcmVzcy5jb21wcmVzc29ycy5nemlwO3ZlcnNpb249IlsxLjQsMi4wKSIsCiAgb3JnLmFwYWNoZS5jb21tb25zLmNvbXByZXNzLmNvbXByZXNzb3JzLnh6O3ZlcnNpb249IlsxLjQsMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5hcGk7dmVyc2lvbj0iWzQuMi4xLDQuMy4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5saWI7dmVyc2lvbj0iWzQuMi4xLDQuMy4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5ubHM7dmVyc2lvbj0iWzQuMi4xLDQuMy4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC51dGlsO3ZlcnNpb249Ils0LjIuMSw0LjMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuYXBpO3ZlcnNpb249Ils0LjMuMCw0LjQuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQubGliO3ZlcnNpb249Ils0LjMuMCw0LjQuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQubmxzO3ZlcnNpb249Ils0LjMuMCw0LjQuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudXRpbDt2ZXJzaW9uPSJbNC4zLjAsNC40LjApIiwKICBvcmcub3NnaS5mcmFtZXdvcms7dmVyc2lvbj0iWzEuMy4wLDIuMC4wKSIKIEJ1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5CiBCdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS5qZ2l0LmFyY2hpdmUuRm9ybWF0QWN0aXZhdG9yCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuamdpdC5hcmNoaXZlO3ZlcnNpb249IjQuMi4xIjsKK0V4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5qZ2l0LmFyY2hpdmU7dmVyc2lvbj0iNC4zLjAiOwogICB1c2VzOj0ib3JnLmVjbGlwc2UuamdpdC5saWIsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LmFwaSwKICAgIG9yZy5hcGFjaGUuY29tbW9ucy5jb21wcmVzcy5hcmNoaXZlcnMsCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LmFyY2hpdmUvTUVUQS1JTkYvU09VUkNFLU1BTklGRVNULk1GIGIvb3JnLmVjbGlwc2UuamdpdC5hcmNoaXZlL01FVEEtSU5GL1NPVVJDRS1NQU5JRkVTVC5NRgppbmRleCA2MWZiYjdlLi5jM2QwNGY2IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LmFyY2hpdmUvTUVUQS1JTkYvU09VUkNFLU1BTklGRVNULk1GCisrKyBiL29yZy5lY2xpcHNlLmpnaXQuYXJjaGl2ZS9NRVRBLUlORi9TT1VSQ0UtTUFOSUZFU1QuTUYKQEAgLTMsNSArMyw1IEBACiBCdW5kbGUtTmFtZTogb3JnLmVjbGlwc2UuamdpdC5hcmNoaXZlIC0gU291cmNlcwogQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuamdpdC5hcmNoaXZlLnNvdXJjZQogQnVuZGxlLVZlbmRvcjogRWNsaXBzZS5vcmcgLSBKR2l0Ci1CdW5kbGUtVmVyc2lvbjogNC4yLjEucXVhbGlmaWVyCi1FY2xpcHNlLVNvdXJjZUJ1bmRsZTogb3JnLmVjbGlwc2UuamdpdC5hcmNoaXZlO3ZlcnNpb249IjQuMi4xLnF1YWxpZmllciI7cm9vdHM9Ii4iCitCdW5kbGUtVmVyc2lvbjogNC4zLjAucXVhbGlmaWVyCitFY2xpcHNlLVNvdXJjZUJ1bmRsZTogb3JnLmVjbGlwc2UuamdpdC5hcmNoaXZlO3ZlcnNpb249IjQuMy4wLnF1YWxpZmllciI7cm9vdHM9Ii4iCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LmFyY2hpdmUvcG9tLnhtbCBiL29yZy5lY2xpcHNlLmpnaXQuYXJjaGl2ZS9wb20ueG1sCmluZGV4IGI5YzUwOWYuLmQ4MzcxYmMgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQuYXJjaGl2ZS9wb20ueG1sCisrKyBiL29yZy5lY2xpcHNlLmpnaXQuYXJjaGl2ZS9wb20ueG1sCkBAIC01MCw3ICs1MCw3IEBACiAgIDxwYXJlbnQ+CiAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KICAgICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0LXBhcmVudDwvYXJ0aWZhY3RJZD4KLSAgICA8dmVyc2lvbj40LjIuMS1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICA8dmVyc2lvbj40LjMuMC1TTkFQU0hPVDwvdmVyc2lvbj4KICAgPC9wYXJlbnQ+CiAKICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC5hcmNoaXZlPC9hcnRpZmFjdElkPgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5odHRwLmFwYWNoZS9CVUNLIGIvb3JnLmVjbGlwc2UuamdpdC5odHRwLmFwYWNoZS9CVUNLCmluZGV4IGY0OGYzM2EuLjNiN2E4MjMgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQuaHR0cC5hcGFjaGUvQlVDSworKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuYXBhY2hlL0JVQ0sKQEAgLTQsNyArNCw2IEBACiAgIHJlc291cmNlcyA9IGdsb2IoWydyZXNvdXJjZXMvKionXSksCiAgIGRlcHMgPSBbCiAgICAgJy8vb3JnLmVjbGlwc2UuamdpdDpqZ2l0JywKLSAgICAnLy9saWI6Y29tbW9ucy1sb2dnaW5nJywKICAgICAnLy9saWI6aHR0cGNvbXBvbmVudHMnLAogICAgICcvL2xpYjpodHRwY29yZScsCiAgIF0sCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuYXBhY2hlL01FVEEtSU5GL01BTklGRVNULk1GIGIvb3JnLmVjbGlwc2UuamdpdC5odHRwLmFwYWNoZS9NRVRBLUlORi9NQU5JRkVTVC5NRgppbmRleCBiNzc1NTQ5Li4yNjE2NTI2IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuYXBhY2hlL01FVEEtSU5GL01BTklGRVNULk1GCisrKyBiL29yZy5lY2xpcHNlLmpnaXQuaHR0cC5hcGFjaGUvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTIsMTMgKzIsMTIgQEAKIEJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKIEJ1bmRsZS1OYW1lOiAlQnVuZGxlLU5hbWUKIEJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpnaXQuaHR0cC5hcGFjaGUKLUJ1bmRsZS1WZXJzaW9uOiA0LjIuMS5xdWFsaWZpZXIKK0J1bmRsZS1WZXJzaW9uOiA0LjMuMC5xdWFsaWZpZXIKIEJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKYXZhU0UtMS43CiBCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KIEJ1bmRsZS1WZW5kb3I6ICVQcm92aWRlci1OYW1lCiBCdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQotSW1wb3J0LVBhY2thZ2U6IG9yZy5hcGFjaGUuY29tbW9ucy5sb2dnaW5nO3ZlcnNpb249IlsxLjEuMSwyLjAuMCkiLAotIG9yZy5hcGFjaGUuaHR0cDt2ZXJzaW9uPSJbNC4xLjAsNS4wLjApIiwKK0ltcG9ydC1QYWNrYWdlOiBvcmcuYXBhY2hlLmh0dHA7dmVyc2lvbj0iWzQuMS4wLDUuMC4wKSIsCiAgb3JnLmFwYWNoZS5odHRwLmNsaWVudDt2ZXJzaW9uPSJbNC4xLjAsNS4wLjApIiwKICBvcmcuYXBhY2hlLmh0dHAuY2xpZW50Lm1ldGhvZHM7dmVyc2lvbj0iWzQuMS4wLDUuMC4wKSIsCiAgb3JnLmFwYWNoZS5odHRwLmNsaWVudC5wYXJhbXM7dmVyc2lvbj0iWzQuMS4wLDUuMC4wKSIsCkBAIC0yMCwxMCArMTksMTAgQEAKICBvcmcuYXBhY2hlLmh0dHAuaW1wbC5jbGllbnQ7dmVyc2lvbj0iWzQuMS4wLDUuMC4wKSIsCiAgb3JnLmFwYWNoZS5odHRwLmltcGwuY2xpZW50LmNhY2hlO3ZlcnNpb249Ils0LjEuMCw1LjAuMCkiLAogIG9yZy5hcGFjaGUuaHR0cC5wYXJhbXM7dmVyc2lvbj0iWzQuMS4wLDUuMC4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5ubHM7dmVyc2lvbj0iWzQuMi4xLDQuMy4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuaHR0cDt2ZXJzaW9uPSJbNC4yLjEsNC4zLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnV0aWw7dmVyc2lvbj0iWzQuMi4xLDQuMy4wKSIKLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5odHRwLmFwYWNoZTt2ZXJzaW9uPSI0LjIuMSI7Cisgb3JnLmVjbGlwc2UuamdpdC5ubHM7dmVyc2lvbj0iWzQuMy4wLDQuNC4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuaHR0cDt2ZXJzaW9uPSJbNC4zLjAsNC40LjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnV0aWw7dmVyc2lvbj0iWzQuMy4wLDQuNC4wKSIKK0V4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5odHRwLmFwYWNoZTt2ZXJzaW9uPSI0LjMuMCI7CiAgIHVzZXM6PSJvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5odHRwLAogICAgamF2YXgubmV0LnNzbCwKICAgIG9yZy5hcGFjaGUuaHR0cC5jbGllbnQsCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuYXBhY2hlL3BvbS54bWwgYi9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuYXBhY2hlL3BvbS54bWwKaW5kZXggZTJkZjY1Yi4uYWU1YmNlYiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5odHRwLmFwYWNoZS9wb20ueG1sCisrKyBiL29yZy5lY2xpcHNlLmpnaXQuaHR0cC5hcGFjaGUvcG9tLnhtbApAQCAtNDgsNyArNDgsNyBAQAogCTxwYXJlbnQ+CiAJCTxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAJCTxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQtcGFyZW50PC9hcnRpZmFjdElkPgotCQk8dmVyc2lvbj40LjIuMS1TTkFQU0hPVDwvdmVyc2lvbj4KKwkJPHZlcnNpb24+NC4zLjAtU05BUFNIT1Q8L3ZlcnNpb24+CiAJPC9wYXJlbnQ+CiAKIAk8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuYXBhY2hlPC9hcnRpZmFjdElkPgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5odHRwLmFwYWNoZS9zcmMvb3JnL2VjbGlwc2UvamdpdC90cmFuc3BvcnQvaHR0cC9hcGFjaGUvSHR0cENsaWVudENvbm5lY3Rpb24uamF2YSBiL29yZy5lY2xpcHNlLmpnaXQuaHR0cC5hcGFjaGUvc3JjL29yZy9lY2xpcHNlL2pnaXQvdHJhbnNwb3J0L2h0dHAvYXBhY2hlL0h0dHBDbGllbnRDb25uZWN0aW9uLmphdmEKaW5kZXggZGU4MWJmOC4uYTBlZWVmOCAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5odHRwLmFwYWNoZS9zcmMvb3JnL2VjbGlwc2UvamdpdC90cmFuc3BvcnQvaHR0cC9hcGFjaGUvSHR0cENsaWVudENvbm5lY3Rpb24uamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuYXBhY2hlL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3RyYW5zcG9ydC9odHRwL2FwYWNoZS9IdHRwQ2xpZW50Q29ubmVjdGlvbi5qYXZhCkBAIC00Miw2ICs0MiwxMSBAQAogICovCiBwYWNrYWdlIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0Lmh0dHAuYXBhY2hlOwogCitpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQudXRpbC5IdHRwU3VwcG9ydC5NRVRIT0RfR0VUOworaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuSHR0cFN1cHBvcnQuTUVUSE9EX0hFQUQ7CitpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQudXRpbC5IdHRwU3VwcG9ydC5NRVRIT0RfUE9TVDsKK2ltcG9ydCBzdGF0aWMgb3JnLmVjbGlwc2UuamdpdC51dGlsLkh0dHBTdXBwb3J0Lk1FVEhPRF9QVVQ7CisKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwogaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CiBpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07CkBAIC03Niw2ICs4MSw3IEBACiBpbXBvcnQgb3JnLmFwYWNoZS5odHRwLmNsaWVudC5DbGllbnRQcm90b2NvbEV4Y2VwdGlvbjsKIGltcG9ydCBvcmcuYXBhY2hlLmh0dHAuY2xpZW50Lkh0dHBDbGllbnQ7CiBpbXBvcnQgb3JnLmFwYWNoZS5odHRwLmNsaWVudC5tZXRob2RzLkh0dHBHZXQ7CitpbXBvcnQgb3JnLmFwYWNoZS5odHRwLmNsaWVudC5tZXRob2RzLkh0dHBIZWFkOwogaW1wb3J0IG9yZy5hcGFjaGUuaHR0cC5jbGllbnQubWV0aG9kcy5IdHRwUG9zdDsKIGltcG9ydCBvcmcuYXBhY2hlLmh0dHAuY2xpZW50Lm1ldGhvZHMuSHR0cFB1dDsKIGltcG9ydCBvcmcuYXBhY2hlLmh0dHAuY2xpZW50Lm1ldGhvZHMuSHR0cFVyaVJlcXVlc3Q7CkBAIC0yNTAsMTMgKzI1NiwxNSBAQCBwdWJsaWMgdm9pZCBzZXRSZXF1ZXN0UHJvcGVydHkoU3RyaW5nIG5hbWUsIFN0cmluZyB2YWx1ZSkgewogCiAJcHVibGljIHZvaWQgc2V0UmVxdWVzdE1ldGhvZChTdHJpbmcgbWV0aG9kKSB0aHJvd3MgUHJvdG9jb2xFeGNlcHRpb24gewogCQl0aGlzLm1ldGhvZCA9IG1ldGhvZDsKLQkJaWYgKCJHRVQiLmVxdWFsc0lnbm9yZUNhc2UobWV0aG9kKSkgLy8kTk9OLU5MUy0xJAorCQlpZiAoTUVUSE9EX0dFVC5lcXVhbHNJZ25vcmVDYXNlKG1ldGhvZCkpIHsKIAkJCXJlcSA9IG5ldyBIdHRwR2V0KHVybC50b1N0cmluZygpKTsKLQkJZWxzZSBpZiAoIlBVVCIuZXF1YWxzSWdub3JlQ2FzZShtZXRob2QpKSAvLyROT04tTkxTLTEkCisJCX0gZWxzZSBpZiAoTUVUSE9EX0hFQUQuZXF1YWxzSWdub3JlQ2FzZShtZXRob2QpKSB7CisJCQlyZXEgPSBuZXcgSHR0cEhlYWQodXJsLnRvU3RyaW5nKCkpOworCQl9IGVsc2UgaWYgKE1FVEhPRF9QVVQuZXF1YWxzSWdub3JlQ2FzZShtZXRob2QpKSB7CiAJCQlyZXEgPSBuZXcgSHR0cFB1dCh1cmwudG9TdHJpbmcoKSk7Ci0JCWVsc2UgaWYgKCJQT1NUIi5lcXVhbHNJZ25vcmVDYXNlKG1ldGhvZCkpIC8vJE5PTi1OTFMtMSQKKwkJfSBlbHNlIGlmIChNRVRIT0RfUE9TVC5lcXVhbHNJZ25vcmVDYXNlKG1ldGhvZCkpIHsKIAkJCXJlcSA9IG5ldyBIdHRwUG9zdCh1cmwudG9TdHJpbmcoKSk7Ci0JCWVsc2UgeworCQl9IGVsc2UgewogCQkJdGhpcy5tZXRob2QgPSBudWxsOwogCQkJdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7CiAJCX0KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQuaHR0cC5zZXJ2ZXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuc2VydmVyL01FVEEtSU5GL01BTklGRVNULk1GCmluZGV4IDlmODdhYWIuLjI4ODM1ZjYgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQuaHR0cC5zZXJ2ZXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5odHRwLnNlcnZlci9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMiwxMyArMiwxMyBAQAogQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgogQnVuZGxlLU5hbWU6ICVwbHVnaW5fbmFtZQogQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuamdpdC5odHRwLnNlcnZlcgotQnVuZGxlLVZlcnNpb246IDQuMi4xLnF1YWxpZmllcgorQnVuZGxlLVZlcnNpb246IDQuMy4wLnF1YWxpZmllcgogQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCiBCdW5kbGUtVmVuZG9yOiAlcHJvdmlkZXJfbmFtZQotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmpnaXQuaHR0cC5zZXJ2ZXI7dmVyc2lvbj0iNC4yLjEiLAotIG9yZy5lY2xpcHNlLmpnaXQuaHR0cC5zZXJ2ZXIuZ2x1ZTt2ZXJzaW9uPSI0LjIuMSI7CitFeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuamdpdC5odHRwLnNlcnZlcjt2ZXJzaW9uPSI0LjMuMCIsCisgb3JnLmVjbGlwc2UuamdpdC5odHRwLnNlcnZlci5nbHVlO3ZlcnNpb249IjQuMy4wIjsKICAgdXNlczo9ImphdmF4LnNlcnZsZXQsamF2YXguc2VydmxldC5odHRwIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuc2VydmVyLnJlc29sdmVyO3ZlcnNpb249IjQuMi4xIjsKKyBvcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuc2VydmVyLnJlc29sdmVyO3ZlcnNpb249IjQuMy4wIjsKICAgdXNlczo9Im9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LnJlc29sdmVyLAogICAgb3JnLmVjbGlwc2UuamdpdC5saWIsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydCwKQEAgLTE3LDEyICsxNywxMiBAQAogQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEphdmFTRS0xLjcKIEltcG9ydC1QYWNrYWdlOiBqYXZheC5zZXJ2bGV0O3ZlcnNpb249IlsyLjUuMCwzLjIuMCkiLAogIGphdmF4LnNlcnZsZXQuaHR0cDt2ZXJzaW9uPSJbMi41LjAsMy4yLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmVycm9yczt2ZXJzaW9uPSJbNC4yLjEsNC4zLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UuZGZzO3ZlcnNpb249Ils0LjIuMSw0LjMuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5maWxlO3ZlcnNpb249Ils0LjIuMSw0LjMuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQubGliO3ZlcnNpb249Ils0LjIuMSw0LjMuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQubmxzO3ZlcnNpb249Ils0LjIuMSw0LjMuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQucmV2d2Fsazt2ZXJzaW9uPSJbNC4yLjEsNC4zLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydDt2ZXJzaW9uPSJbNC4yLjEsNC4zLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5yZXNvbHZlcjt2ZXJzaW9uPSJbNC4yLjEsNC4zLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnV0aWw7dmVyc2lvbj0iWzQuMi4xLDQuMy4wKSIKKyBvcmcuZWNsaXBzZS5qZ2l0LmVycm9yczt2ZXJzaW9uPSJbNC4zLjAsNC40LjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UuZGZzO3ZlcnNpb249Ils0LjMuMCw0LjQuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5maWxlO3ZlcnNpb249Ils0LjMuMCw0LjQuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQubGliO3ZlcnNpb249Ils0LjMuMCw0LjQuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQubmxzO3ZlcnNpb249Ils0LjMuMCw0LjQuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQucmV2d2Fsazt2ZXJzaW9uPSJbNC4zLjAsNC40LjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydDt2ZXJzaW9uPSJbNC4zLjAsNC40LjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5yZXNvbHZlcjt2ZXJzaW9uPSJbNC4zLjAsNC40LjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnV0aWw7dmVyc2lvbj0iWzQuMy4wLDQuNC4wKSIKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQuaHR0cC5zZXJ2ZXIvcG9tLnhtbCBiL29yZy5lY2xpcHNlLmpnaXQuaHR0cC5zZXJ2ZXIvcG9tLnhtbAppbmRleCBlMTNlOWZhLi4zZDM1MWE3IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuc2VydmVyL3BvbS54bWwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5odHRwLnNlcnZlci9wb20ueG1sCkBAIC01Miw3ICs1Miw3IEBACiAgIDxwYXJlbnQ+CiAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KICAgICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0LXBhcmVudDwvYXJ0aWZhY3RJZD4KLSAgICA8dmVyc2lvbj40LjIuMS1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICA8dmVyc2lvbj40LjMuMC1TTkFQU0hPVDwvdmVyc2lvbj4KICAgPC9wYXJlbnQ+CiAKICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC5odHRwLnNlcnZlcjwvYXJ0aWZhY3RJZD4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQuaHR0cC50ZXN0L0JVQ0sgYi9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAudGVzdC9CVUNLCmluZGV4IGQyY2VkN2EuLmQ2NWNkYWQgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQuaHR0cC50ZXN0L0JVQ0sKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5odHRwLnRlc3QvQlVDSwpAQCAtMjMsNiArMjMsNyBAQAogICAgICAgJy8vbGliL2pldHR5OnNlcnZsZXQnLAogICAgICAgJy8vbGliL2pldHR5OnNlY3VyaXR5JywKICAgICAgICcvL2xpYi9qZXR0eTp1dGlsJywKKyAgICAgICcvL2xpYjpjb21tb25zLWxvZ2dpbmcnLAogICAgIF0sCiAgICAgc291cmNlX3VuZGVyX3Rlc3QgPSBbJy8vb3JnLmVjbGlwc2UuamdpdC5odHRwLnNlcnZlcjpqZ2l0LXNlcnZsZXQnXSwKICAgKQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5odHRwLnRlc3QvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAudGVzdC9NRVRBLUlORi9NQU5JRkVTVC5NRgppbmRleCAwNWU0ZjgxLi4wNTZlZjM5IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAudGVzdC9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAudGVzdC9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMiw3ICsyLDcgQEAKIEJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKIEJ1bmRsZS1OYW1lOiAlcGx1Z2luX25hbWUKIEJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpnaXQuaHR0cC50ZXN0Ci1CdW5kbGUtVmVyc2lvbjogNC4yLjEucXVhbGlmaWVyCitCdW5kbGUtVmVyc2lvbjogNC4zLjAucXVhbGlmaWVyCiBCdW5kbGUtVmVuZG9yOiAlcHJvdmlkZXJfbmFtZQogQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCiBCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSmF2YVNFLTEuNwpAQCAtMjIsMjMgKzIyLDIzIEBACiAgb3JnLmVjbGlwc2UuamV0dHkudXRpbC5sb2c7dmVyc2lvbj0iWzkuMC4wLDEwLjAuMCkiLAogIG9yZy5lY2xpcHNlLmpldHR5LnV0aWwuc2VjdXJpdHk7dmVyc2lvbj0iWzkuMC4wLDEwLjAuMCkiLAogIG9yZy5lY2xpcHNlLmpldHR5LnV0aWwudGhyZWFkO3ZlcnNpb249Ils5LjAuMCwxMC4wLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmVycm9yczt2ZXJzaW9uPSJbNC4yLjEsNC4zLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuc2VydmVyO3ZlcnNpb249Ils0LjIuMSw0LjMuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuaHR0cC5zZXJ2ZXIuZ2x1ZTt2ZXJzaW9uPSJbNC4yLjEsNC4zLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuc2VydmVyLnJlc29sdmVyO3ZlcnNpb249Ils0LjIuMSw0LjMuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWw7dmVyc2lvbj0iWzQuMi4xLDQuMy4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLmZpbGU7dmVyc2lvbj0iWzQuMi4xLDQuMy4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5qdW5pdDt2ZXJzaW9uPSJbNC4yLjEsNC4zLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0Lmh0dHA7dmVyc2lvbj0iWzQuMi4xLDQuMy4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5saWI7dmVyc2lvbj0iWzQuMi4xLDQuMy4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5ubHM7dmVyc2lvbj0iWzQuMi4xLDQuMy4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrO3ZlcnNpb249Ils0LjIuMSw0LjMuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuc3RvcmFnZS5maWxlO3ZlcnNpb249Ils0LjIuMSw0LjMuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0O3ZlcnNpb249Ils0LjIuMSw0LjMuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0Lmh0dHA7dmVyc2lvbj0iWzQuMi4xLDQuMy4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuaHR0cC5hcGFjaGU7dmVyc2lvbj0iWzQuMi4xLDQuMy4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQucmVzb2x2ZXI7dmVyc2lvbj0iWzQuMi4xLDQuMy4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC51dGlsO3ZlcnNpb249Ils0LjIuMSw0LjMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuZXJyb3JzO3ZlcnNpb249Ils0LjMuMCw0LjQuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuaHR0cC5zZXJ2ZXI7dmVyc2lvbj0iWzQuMy4wLDQuNC4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5odHRwLnNlcnZlci5nbHVlO3ZlcnNpb249Ils0LjMuMCw0LjQuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuaHR0cC5zZXJ2ZXIucmVzb2x2ZXI7dmVyc2lvbj0iWzQuMy4wLDQuNC4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbDt2ZXJzaW9uPSJbNC4zLjAsNC40LjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UuZmlsZTt2ZXJzaW9uPSJbNC4zLjAsNC40LjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0O3ZlcnNpb249Ils0LjMuMCw0LjQuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuanVuaXQuaHR0cDt2ZXJzaW9uPSJbNC4zLjAsNC40LjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmxpYjt2ZXJzaW9uPSJbNC4zLjAsNC40LjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lm5sczt2ZXJzaW9uPSJbNC4zLjAsNC40LjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGs7dmVyc2lvbj0iWzQuMy4wLDQuNC4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5zdG9yYWdlLmZpbGU7dmVyc2lvbj0iWzQuMy4wLDQuNC4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQ7dmVyc2lvbj0iWzQuMy4wLDQuNC4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuaHR0cDt2ZXJzaW9uPSJbNC4zLjAsNC40LjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5odHRwLmFwYWNoZTt2ZXJzaW9uPSJbNC4zLjAsNC40LjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5yZXNvbHZlcjt2ZXJzaW9uPSJbNC4zLjAsNC40LjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnV0aWw7dmVyc2lvbj0iWzQuMy4wLDQuNC4wKSIsCiAgb3JnLmhhbWNyZXN0LmNvcmU7dmVyc2lvbj0iWzEuMS4wLDIuMC4wKSIsCiAgb3JnLmp1bml0O3ZlcnNpb249Ils0LjAuMCw1LjAuMCkiLAogIG9yZy5qdW5pdC5ydW5uZXI7dmVyc2lvbj0iWzQuMC4wLDUuMC4wKSIsCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAudGVzdC9wb20ueG1sIGIvb3JnLmVjbGlwc2UuamdpdC5odHRwLnRlc3QvcG9tLnhtbAppbmRleCA0NGY3YTM4Li5lMDEzNjdmIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAudGVzdC9wb20ueG1sCisrKyBiL29yZy5lY2xpcHNlLmpnaXQuaHR0cC50ZXN0L3BvbS54bWwKQEAgLTUxLDcgKzUxLDcgQEAKICAgPHBhcmVudD4KICAgICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5qZ2l0PC9ncm91cElkPgogICAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQtcGFyZW50PC9hcnRpZmFjdElkPgotICAgIDx2ZXJzaW9uPjQuMi4xLVNOQVBTSE9UPC92ZXJzaW9uPgorICAgIDx2ZXJzaW9uPjQuMy4wLVNOQVBTSE9UPC92ZXJzaW9uPgogICA8L3BhcmVudD4KIAogICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAudGVzdDwvYXJ0aWZhY3RJZD4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQuanVuaXQuaHR0cC9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL29yZy5lY2xpcHNlLmpnaXQuanVuaXQuaHR0cC9NRVRBLUlORi9NQU5JRkVTVC5NRgppbmRleCBiZWM0MTc4Li5mMDVjYjMwIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0Lmh0dHAvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5odHRwL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0yLDcgKzIsNyBAQAogQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgogQnVuZGxlLU5hbWU6ICVwbHVnaW5fbmFtZQogQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5odHRwCi1CdW5kbGUtVmVyc2lvbjogNC4yLjEucXVhbGlmaWVyCitCdW5kbGUtVmVyc2lvbjogNC4zLjAucXVhbGlmaWVyCiBCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KIEJ1bmRsZS1WZW5kb3I6ICVwcm92aWRlcl9uYW1lCiBCdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQpAQCAtMjAsMTYgKzIwLDE2IEBACiAgb3JnLmVjbGlwc2UuamV0dHkudXRpbC5jb21wb25lbnQ7dmVyc2lvbj0iWzkuMC4wLDEwLjAuMCkiLAogIG9yZy5lY2xpcHNlLmpldHR5LnV0aWwubG9nO3ZlcnNpb249Ils5LjAuMCwxMC4wLjApIiwKICBvcmcuZWNsaXBzZS5qZXR0eS51dGlsLnNlY3VyaXR5O3ZlcnNpb249Ils5LjAuMCwxMC4wLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmVycm9yczt2ZXJzaW9uPSJbNC4yLjEsNC4zLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuc2VydmVyO3ZlcnNpb249Ils0LjIuMSw0LjMuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5maWxlO3ZlcnNpb249Ils0LjIuMSw0LjMuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuanVuaXQ7dmVyc2lvbj0iWzQuMi4xLDQuMy4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5saWI7dmVyc2lvbj0iWzQuMi4xLDQuMy4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrO3ZlcnNpb249Ils0LjIuMSw0LjMuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0O3ZlcnNpb249Ils0LjIuMSw0LjMuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LnJlc29sdmVyO3ZlcnNpb249Ils0LjIuMSw0LjMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuZXJyb3JzO3ZlcnNpb249Ils0LjMuMCw0LjQuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuaHR0cC5zZXJ2ZXI7dmVyc2lvbj0iWzQuMy4wLDQuNC4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLmZpbGU7dmVyc2lvbj0iWzQuMy4wLDQuNC4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5qdW5pdDt2ZXJzaW9uPSJbNC4zLjAsNC40LjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmxpYjt2ZXJzaW9uPSJbNC4zLjAsNC40LjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGs7dmVyc2lvbj0iWzQuMy4wLDQuNC4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQ7dmVyc2lvbj0iWzQuMy4wLDQuNC4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQucmVzb2x2ZXI7dmVyc2lvbj0iWzQuMy4wLDQuNC4wKSIsCiAgb3JnLmp1bml0O3ZlcnNpb249Ils0LjAuMCw1LjAuMCkiCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5odHRwO3ZlcnNpb249IjQuMi4xIjsKK0V4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0Lmh0dHA7dmVyc2lvbj0iNC4zLjAiOwogICB1c2VzOj0ib3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQsCiAgICBvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0LAogICAgamF2YXguc2VydmxldC5odHRwLApkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5odHRwL3BvbS54bWwgYi9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0Lmh0dHAvcG9tLnhtbAppbmRleCA0N2JlNzZiLi5kMGE3YmUxIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0Lmh0dHAvcG9tLnhtbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0Lmh0dHAvcG9tLnhtbApAQCAtNTAsNyArNTAsNyBAQAogICA8cGFyZW50PgogICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC1wYXJlbnQ8L2FydGlmYWN0SWQ+Ci0gICAgPHZlcnNpb24+NC4yLjEtU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgPHZlcnNpb24+NC4zLjAtU05BUFNIT1Q8L3ZlcnNpb24+CiAgIDwvcGFyZW50PgogCiAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQuanVuaXQuaHR0cDwvYXJ0aWZhY3RJZD4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQuanVuaXQuaHR0cC9zcmMvb3JnL2VjbGlwc2UvamdpdC9qdW5pdC9odHRwL0FwcFNlcnZlci5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5odHRwL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2p1bml0L2h0dHAvQXBwU2VydmVyLmphdmEKaW5kZXggY2UwNGJkZi4uYzM2YzI5NyAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5odHRwL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2p1bml0L2h0dHAvQXBwU2VydmVyLmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5odHRwL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2p1bml0L2h0dHAvQXBwU2VydmVyLmphdmEKQEAgLTEwNCw2ICsxMDQsMTUgQEAgcHVibGljIGNsYXNzIEFwcFNlcnZlciB7CiAJcHJpdmF0ZSBmaW5hbCBUZXN0UmVxdWVzdExvZyBsb2c7CiAKIAlwdWJsaWMgQXBwU2VydmVyKCkgeworCQl0aGlzKDApOworCX0KKworCS8qKgorCSAqIEBwYXJhbSBwb3J0CisJICogICAgICAgICAgICB0aGUgaHR0cCBwb3J0IG51bWJlcgorCSAqIEBzaW5jZSA0LjIKKwkgKi8KKwlwdWJsaWMgQXBwU2VydmVyKGludCBwb3J0KSB7CiAJCXNlcnZlciA9IG5ldyBTZXJ2ZXIoKTsKIAogCQlIdHRwQ29uZmlndXJhdGlvbiBodHRwX2NvbmZpZyA9IG5ldyBIdHRwQ29uZmlndXJhdGlvbigpOwpAQCAtMTEzLDcgKzEyMiw3IEBAIHB1YmxpYyBBcHBTZXJ2ZXIoKSB7CiAKIAkJY29ubmVjdG9yID0gbmV3IFNlcnZlckNvbm5lY3RvcihzZXJ2ZXIsCiAJCQkJbmV3IEh0dHBDb25uZWN0aW9uRmFjdG9yeShodHRwX2NvbmZpZykpOwotCQljb25uZWN0b3Iuc2V0UG9ydCgwKTsKKwkJY29ubmVjdG9yLnNldFBvcnQocG9ydCk7CiAJCXRyeSB7CiAJCQlmaW5hbCBJbmV0QWRkcmVzcyBtZSA9IEluZXRBZGRyZXNzLmdldEJ5TmFtZSgibG9jYWxob3N0Iik7CiAJCQljb25uZWN0b3Iuc2V0SG9zdChtZS5nZXRIb3N0QWRkcmVzcygpKTsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQuanVuaXQvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0L01FVEEtSU5GL01BTklGRVNULk1GCmluZGV4IDc5NGUzZDMuLjhmNTA3ODIgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQuanVuaXQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5qdW5pdC9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMiwyNyArMiwyNyBAQAogQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgogQnVuZGxlLU5hbWU6ICVwbHVnaW5fbmFtZQogQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuamdpdC5qdW5pdAotQnVuZGxlLVZlcnNpb246IDQuMi4xLnF1YWxpZmllcgorQnVuZGxlLVZlcnNpb246IDQuMy4wLnF1YWxpZmllcgogQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCiBCdW5kbGUtVmVuZG9yOiAlcHJvdmlkZXJfbmFtZQogQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKIEJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKYXZhU0UtMS43Ci1JbXBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuamdpdC5hcGk7dmVyc2lvbj0iWzQuMi4xLDQuMy4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5hcGkuZXJyb3JzO3ZlcnNpb249Ils0LjIuMSw0LjMuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuZGlyY2FjaGU7dmVyc2lvbj0iWzQuMi4xLDQuMy4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5lcnJvcnM7dmVyc2lvbj0iWzQuMi4xLDQuMy4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLmZpbGU7dmVyc2lvbj0iWzQuMi4xLDQuMy4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLnBhY2s7dmVyc2lvbj0iWzQuMi4xLDQuMy4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5saWI7dmVyc2lvbj0iWzQuMi4xLDQuMy4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5tZXJnZTt2ZXJzaW9uPSJbNC4yLjEsNC4zLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGs7dmVyc2lvbj0iWzQuMi4xLDQuMy4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5zdG9yYWdlLmZpbGU7dmVyc2lvbj0iWzQuMi4xLDQuMy4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC50cmVld2Fsazt2ZXJzaW9uPSJbNC4yLjEsNC4zLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrLmZpbHRlcjt2ZXJzaW9uPSJbNC4yLjEsNC4zLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnV0aWw7dmVyc2lvbj0iWzQuMi4xLDQuMy4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC51dGlsLmlvO3ZlcnNpb249Ils0LjIuMSw0LjMuMCkiLAorSW1wb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmpnaXQuYXBpO3ZlcnNpb249Ils0LjMuMCw0LjQuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuYXBpLmVycm9yczt2ZXJzaW9uPSJbNC4zLjAsNC40LjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmRpcmNhY2hlO3ZlcnNpb249Ils0LjMuMCw0LjQuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuZXJyb3JzO3ZlcnNpb249Ils0LjMuMCw0LjQuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5maWxlO3ZlcnNpb249Ils0LjMuMCw0LjQuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5wYWNrO3ZlcnNpb249Ils0LjMuMCw0LjQuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQubGliO3ZlcnNpb249Ils0LjMuMCw0LjQuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQubWVyZ2U7dmVyc2lvbj0iWzQuMy4wLDQuNC4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrO3ZlcnNpb249Ils0LjMuMCw0LjQuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuc3RvcmFnZS5maWxlO3ZlcnNpb249Ils0LjMuMCw0LjQuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudHJlZXdhbGs7dmVyc2lvbj0iWzQuMy4wLDQuNC4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC50cmVld2Fsay5maWx0ZXI7dmVyc2lvbj0iWzQuMy4wLDQuNC4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC51dGlsO3ZlcnNpb249Ils0LjMuMCw0LjQuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudXRpbC5pbzt2ZXJzaW9uPSJbNC4zLjAsNC40LjApIiwKICBvcmcuanVuaXQ7dmVyc2lvbj0iWzQuMC4wLDUuMC4wKSIKLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0O3ZlcnNpb249IjQuMi4xIjsKK0V4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0O3ZlcnNpb249IjQuMy4wIjsKICAgdXNlczo9Im9yZy5lY2xpcHNlLmpnaXQuZGlyY2FjaGUsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LmxpYiwKICAgIG9yZy5lY2xpcHNlLmpnaXQucmV2d2FsaywKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQuanVuaXQvcG9tLnhtbCBiL29yZy5lY2xpcHNlLmpnaXQuanVuaXQvcG9tLnhtbAppbmRleCA0YzdhODViLi5mYmY1NWI5IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0L3BvbS54bWwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5qdW5pdC9wb20ueG1sCkBAIC01Miw3ICs1Miw3IEBACiAgIDxwYXJlbnQ+CiAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KICAgICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0LXBhcmVudDwvYXJ0aWZhY3RJZD4KLSAgICA8dmVyc2lvbj40LjIuMS1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICA8dmVyc2lvbj40LjMuMC1TTkFQU0hPVDwvdmVyc2lvbj4KICAgPC9wYXJlbnQ+CiAKICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC5qdW5pdDwvYXJ0aWZhY3RJZD4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci50ZXN0Ly5jbGFzc3BhdGggYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIudGVzdC8uY2xhc3NwYXRoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmZGNjOTQKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIudGVzdC8uY2xhc3NwYXRoCkBAIC0wLDAgKzEsNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxjbGFzc3BhdGg+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KYXZhU0UtMS43Ii8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0idHN0Ii8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Cis8L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci50ZXN0Ly5naXRpZ25vcmUgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIudGVzdC8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkYzAwOTEKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIudGVzdC8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMiBAQAorL3RhcmdldAorL2JpbgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLnRlc3QvLnByb2plY3QgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIudGVzdC8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lM2E0NzQ4Ci0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLnRlc3QvLnByb2plY3QKQEAgLTAsMCArMSwzNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0RGVzY3JpcHRpb24+CisJPG5hbWU+b3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLnRlc3Q8L25hbWU+CisJPGNvbW1lbnQ+PC9jb21tZW50PgorCTxwcm9qZWN0cz4KKwk8L3Byb2plY3RzPgorCTxidWlsZFNwZWM+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5hcGkudG9vbHMuYXBpQW5hbHlzaXNCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwk8L2J1aWxkU3BlYz4KKwk8bmF0dXJlcz4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5hcGkudG9vbHMuYXBpQW5hbHlzaXNOYXR1cmU8L25hdHVyZT4KKwk8L25hdHVyZXM+Cis8L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci50ZXN0Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci50ZXN0Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODI0YjgwCi0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLnRlc3QvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCkBAIC0wLDAgKzEsMiBAQAorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTENCitlbmNvZGluZy88cHJvamVjdD49VVRGLTgNCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIudGVzdC8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZzIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLnRlc3QvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTBhZDIyCi0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLnRlc3QvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmcwpAQCAtMCwwICsxLDIgQEAKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCitsaW5lLnNlcGFyYXRvcj1cbgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLnRlc3QvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLnRlc3QvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjYzBkM2EKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIudGVzdC8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKQEAgLTAsMCArMSwzOTggQEAKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5hbm5vdGF0aW9uLmluaGVyaXROdWxsQW5ub3RhdGlvbnM9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmFubm90YXRpb24ubWlzc2luZ05vbk51bGxCeURlZmF1bHRBbm5vdGF0aW9uPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuYW5ub3RhdGlvbi5ub25udWxsPW9yZy5lY2xpcHNlLmpkdC5hbm5vdGF0aW9uLk5vbk51bGwKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmFubm90YXRpb24ubm9ubnVsbGJ5ZGVmYXVsdD1vcmcuZWNsaXBzZS5qZHQuYW5ub3RhdGlvbi5Ob25OdWxsQnlEZWZhdWx0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5hbm5vdGF0aW9uLm51bGxhYmxlPW9yZy5lY2xpcHNlLmpkdC5hbm5vdGF0aW9uLk51bGxhYmxlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5hbm5vdGF0aW9uLm51bGxhbmFseXNpcz1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLm1ldGhvZFBhcmFtZXRlcnM9ZG8gbm90IGdlbmVyYXRlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRvYy5jb21tZW50LnN1cHBvcnQ9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5jb21wYXJpbmdJZGVudGljYWw9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVhZENvZGU9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmV4cGxpY2l0bHlDbG9zZWRBdXRvQ2xvc2VhYmxlPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mYWxsdGhyb3VnaENhc2U9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mYXRhbE9wdGlvbmFsRXJyb3I9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY2x1ZGVOdWxsSW5mb0Zyb21Bc3NlcnRzPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvYz1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3M9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NEZXByZWNhdGVkUmVmPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzTm90VmlzaWJsZVJlZj1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHJpdmF0ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVmYXVsdENhc2U9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0VudW1DYXNlRGVzcGl0ZURlZmF1bHQ9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0hhc2hDb2RlTWV0aG9kPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHM9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNPdmVycmlkaW5nPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNWaXNpYmlsaXR5PXByb3RlY3RlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ0Rlc2NyaXB0aW9uPXJldHVybl90YWcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc01ldGhvZFR5cGVQYXJhbWV0ZXJzPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc092ZXJyaWRpbmc9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzVmlzaWJpbGl0eT1wcml2YXRlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb25Gb3JJbnRlcmZhY2VNZXRob2RJbXBsZW1lbnRhdGlvbj1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1N5bmNocm9uaXplZE9uSW5oZXJpdGVkTWV0aG9kPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9uRXh0ZXJuYWxpemVkU3RyaW5nTGl0ZXJhbD1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9ubnVsbFBhcmFtZXRlckFubm90YXRpb25Ecm9wcGVkPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubnVsbEFubm90YXRpb25JbmZlcmVuY2VDb25mbGljdD1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5udWxsUmVmZXJlbmNlPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm51bGxTcGVjVmlvbGF0aW9uPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm51bGxVbmNoZWNrZWRDb252ZXJzaW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucGFyYW1ldGVyQXNzaWdubWVudD1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG90ZW50aWFsTnVsbFJlZmVyZW5jZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvdGVudGlhbGx5VW5jbG9zZWRDbG9zZWFibGU9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnJhd1R5cGVSZWZlcmVuY2U9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnJlZHVuZGFudE51bGxBbm5vdGF0aW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucmVkdW5kYW50TnVsbENoZWNrPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucmVkdW5kYW50U3BlY2lmaWNhdGlvbk9mVHlwZUFyZ3VtZW50cz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucmVkdW5kYW50U3VwZXJpbnRlcmZhY2U9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucmVwb3J0TWV0aG9kQ2FuQmVQb3RlbnRpYWxseVN0YXRpYz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucmVwb3J0TWV0aG9kQ2FuQmVTdGF0aWM9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdGF0aWNBY2Nlc3NSZWNlaXZlcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc09wdGlvbmFsRXJyb3JzPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50YWN0aWNOdWxsQW5hbHlzaXNGb3JGaWVsZHM9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5hdm9pZGFibGVHZW5lcmljVHlwZVByb2JsZW1zPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2xvc2VkQ2xvc2VhYmxlPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25FeGVtcHRFeGNlcHRpb25BbmRUaHJvd2FibGU9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbkluY2x1ZGVEb2NDb21tZW50UmVmZXJlbmNlPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTGFiZWw9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTG9jYWw9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkT2JqZWN0QWxsb2NhdGlvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlckluY2x1ZGVEb2NDb21tZW50UmVmZXJlbmNlPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUHJpdmF0ZU1lbWJlcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRUeXBlUGFyYW1ldGVyPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRXYXJuaW5nVG9rZW49d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuNworb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWduX3R5cGVfbWVtYmVyc19vbl9jb2x1bW5zPWZhbHNlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9hcmd1bWVudHNfaW5fYWxsb2NhdGlvbl9leHByZXNzaW9uPTE2CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9hcmd1bWVudHNfaW5fYW5ub3RhdGlvbj0wCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9hcmd1bWVudHNfaW5fZW51bV9jb25zdGFudD0xNgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfYXJndW1lbnRzX2luX2V4cGxpY2l0X2NvbnN0cnVjdG9yX2NhbGw9MTYKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2FyZ3VtZW50c19pbl9tZXRob2RfaW52b2NhdGlvbj0xNgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfYXJndW1lbnRzX2luX3F1YWxpZmllZF9hbGxvY2F0aW9uX2V4cHJlc3Npb249MTYKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2Fzc2lnbm1lbnQ9MAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfYmluYXJ5X2V4cHJlc3Npb249MTYKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2NvbXBhY3RfaWY9MTYKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2NvbmRpdGlvbmFsX2V4cHJlc3Npb249ODAKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2VudW1fY29uc3RhbnRzPTAKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2V4cHJlc3Npb25zX2luX2FycmF5X2luaXRpYWxpemVyPTE2CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9tZXRob2RfZGVjbGFyYXRpb249MAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfbXVsdGlwbGVfZmllbGRzPTE2CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9wYXJhbWV0ZXJzX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uPTE2CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9wYXJhbWV0ZXJzX2luX21ldGhvZF9kZWNsYXJhdGlvbj0xNgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfcmVzb3VyY2VzX2luX3RyeT04MAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3Jfc2VsZWN0b3JfaW5fbWV0aG9kX2ludm9jYXRpb249MTYKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX3N1cGVyY2xhc3NfaW5fdHlwZV9kZWNsYXJhdGlvbj0xNgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3Jfc3VwZXJpbnRlcmZhY2VzX2luX2VudW1fZGVjbGFyYXRpb249MTYKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX3N1cGVyaW50ZXJmYWNlc19pbl90eXBlX2RlY2xhcmF0aW9uPTE2CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl90aHJvd3NfY2xhdXNlX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uPTE2CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl90aHJvd3NfY2xhdXNlX2luX21ldGhvZF9kZWNsYXJhdGlvbj0xNgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfdW5pb25fdHlwZV9pbl9tdWx0aWNhdGNoPTE2CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYWZ0ZXJfaW1wb3J0cz0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYWZ0ZXJfcGFja2FnZT0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYmVmb3JlX2ZpZWxkPTEKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5ibGFua19saW5lc19iZWZvcmVfZmlyc3RfY2xhc3NfYm9keV9kZWNsYXJhdGlvbj0wCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYmVmb3JlX2ltcG9ydHM9MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2JlZm9yZV9tZW1iZXJfdHlwZT0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYmVmb3JlX21ldGhvZD0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYmVmb3JlX25ld19jaHVuaz0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYmVmb3JlX3BhY2thZ2U9MAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2JldHdlZW5faW1wb3J0X2dyb3Vwcz0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYmV0d2Vlbl90eXBlX2RlY2xhcmF0aW9ucz0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYnJhY2VfcG9zaXRpb25fZm9yX2Fubm90YXRpb25fdHlwZV9kZWNsYXJhdGlvbj1lbmRfb2ZfbGluZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9hbm9ueW1vdXNfdHlwZV9kZWNsYXJhdGlvbj1lbmRfb2ZfbGluZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9hcnJheV9pbml0aWFsaXplcj1lbmRfb2ZfbGluZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9ibG9jaz1lbmRfb2ZfbGluZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9ibG9ja19pbl9jYXNlPWVuZF9vZl9saW5lCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYnJhY2VfcG9zaXRpb25fZm9yX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uPWVuZF9vZl9saW5lCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYnJhY2VfcG9zaXRpb25fZm9yX2VudW1fY29uc3RhbnQ9ZW5kX29mX2xpbmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5icmFjZV9wb3NpdGlvbl9mb3JfZW51bV9kZWNsYXJhdGlvbj1lbmRfb2ZfbGluZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9tZXRob2RfZGVjbGFyYXRpb249ZW5kX29mX2xpbmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5icmFjZV9wb3NpdGlvbl9mb3Jfc3dpdGNoPWVuZF9vZl9saW5lCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYnJhY2VfcG9zaXRpb25fZm9yX3R5cGVfZGVjbGFyYXRpb249ZW5kX29mX2xpbmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmNsZWFyX2JsYW5rX2xpbmVzPWZhbHNlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5jbGVhcl9ibGFua19saW5lc19pbl9ibG9ja19jb21tZW50PWZhbHNlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5jbGVhcl9ibGFua19saW5lc19pbl9qYXZhZG9jX2NvbW1lbnQ9ZmFsc2UKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmZvcm1hdF9ibG9ja19jb21tZW50cz10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5mb3JtYXRfY29tbWVudHM9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuZm9ybWF0X2hlYWRlcj1mYWxzZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuZm9ybWF0X2h0bWw9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuZm9ybWF0X2phdmFkb2NfY29tbWVudHM9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuZm9ybWF0X2xpbmVfY29tbWVudHM9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuZm9ybWF0X3NvdXJjZV9jb2RlPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmluZGVudF9wYXJhbWV0ZXJfZGVzY3JpcHRpb249dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuaW5kZW50X3Jvb3RfdGFncz10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5pbnNlcnRfbmV3X2xpbmVfYmVmb3JlX3Jvb3RfdGFncz1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50Lmluc2VydF9uZXdfbGluZV9mb3JfcGFyYW1ldGVyPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQubGluZV9sZW5ndGg9ODAKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50Lm5ld19saW5lc19hdF9ibG9ja19ib3VuZGFyaWVzPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50Lm5ld19saW5lc19hdF9qYXZhZG9jX2JvdW5kYXJpZXM9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQucHJlc2VydmVfd2hpdGVfc3BhY2VfYmV0d2Vlbl9jb2RlX2FuZF9saW5lX2NvbW1lbnRzPWZhbHNlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tcGFjdF9lbHNlX2lmPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb250aW51YXRpb25faW5kZW50YXRpb249Mgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbnRpbnVhdGlvbl9pbmRlbnRhdGlvbl9mb3JfYXJyYXlfaW5pdGlhbGl6ZXI9Mgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmRpc2FibGluZ190YWc9QGZvcm1hdHRlclw6b2ZmCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuZW5hYmxpbmdfdGFnPUBmb3JtYXR0ZXJcOm9uCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuZm9ybWF0X2d1YXJkaWFuX2NsYXVzZV9vbl9vbmVfbGluZT1mYWxzZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmZvcm1hdF9saW5lX2NvbW1lbnRfc3RhcnRpbmdfb25fZmlyc3RfY29sdW1uPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfYm9keV9kZWNsYXJhdGlvbnNfY29tcGFyZV90b19hbm5vdGF0aW9uX2RlY2xhcmF0aW9uX2hlYWRlcj10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50X2JvZHlfZGVjbGFyYXRpb25zX2NvbXBhcmVfdG9fZW51bV9jb25zdGFudF9oZWFkZXI9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluZGVudF9ib2R5X2RlY2xhcmF0aW9uc19jb21wYXJlX3RvX2VudW1fZGVjbGFyYXRpb25faGVhZGVyPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfYm9keV9kZWNsYXJhdGlvbnNfY29tcGFyZV90b190eXBlX2hlYWRlcj10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50X2JyZWFrc19jb21wYXJlX3RvX2Nhc2VzPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfZW1wdHlfbGluZXM9ZmFsc2UKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfc3RhdGVtZW50c19jb21wYXJlX3RvX2Jsb2NrPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfc3RhdGVtZW50c19jb21wYXJlX3RvX2JvZHk9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluZGVudF9zd2l0Y2hzdGF0ZW1lbnRzX2NvbXBhcmVfdG9fY2FzZXM9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluZGVudF9zd2l0Y2hzdGF0ZW1lbnRzX2NvbXBhcmVfdG9fc3dpdGNoPWZhbHNlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50YXRpb24uc2l6ZT00CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2FmdGVyX2Fubm90YXRpb249aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2FmdGVyX2Fubm90YXRpb25fb25fZmllbGQ9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2FmdGVyX2Fubm90YXRpb25fb25fbG9jYWxfdmFyaWFibGU9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2FmdGVyX2Fubm90YXRpb25fb25fbWVtYmVyPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9hZnRlcl9hbm5vdGF0aW9uX29uX21ldGhvZD1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYWZ0ZXJfYW5ub3RhdGlvbl9vbl9wYWNrYWdlPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9hZnRlcl9hbm5vdGF0aW9uX29uX3BhcmFtZXRlcj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYWZ0ZXJfYW5ub3RhdGlvbl9vbl90eXBlPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9hZnRlcl9sYWJlbD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2FmdGVyX29wZW5pbmdfYnJhY2VfaW5fYXJyYXlfaW5pdGlhbGl6ZXI9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9hdF9lbmRfb2ZfZmlsZV9pZl9taXNzaW5nPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYmVmb3JlX2NhdGNoX2luX3RyeV9zdGF0ZW1lbnQ9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9iZWZvcmVfY2xvc2luZ19icmFjZV9pbl9hcnJheV9pbml0aWFsaXplcj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2JlZm9yZV9lbHNlX2luX2lmX3N0YXRlbWVudD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2JlZm9yZV9maW5hbGx5X2luX3RyeV9zdGF0ZW1lbnQ9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9iZWZvcmVfd2hpbGVfaW5fZG9fc3RhdGVtZW50PWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfaW5fZW1wdHlfYW5ub3RhdGlvbl9kZWNsYXJhdGlvbj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfaW5fZW1wdHlfYW5vbnltb3VzX3R5cGVfZGVjbGFyYXRpb249aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2luX2VtcHR5X2Jsb2NrPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9pbl9lbXB0eV9lbnVtX2NvbnN0YW50PWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9pbl9lbXB0eV9lbnVtX2RlY2xhcmF0aW9uPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9pbl9lbXB0eV9tZXRob2RfYm9keT1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfaW5fZW1wdHlfdHlwZV9kZWNsYXJhdGlvbj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfYW5kX2luX3R5cGVfcGFyYW1ldGVyPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9hc3NpZ25tZW50X29wZXJhdG9yPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9hdF9pbl9hbm5vdGF0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfYXRfaW5fYW5ub3RhdGlvbl90eXBlX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfYmluYXJ5X29wZXJhdG9yPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jbG9zaW5nX2FuZ2xlX2JyYWNrZXRfaW5fdHlwZV9hcmd1bWVudHM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2Nsb3NpbmdfYW5nbGVfYnJhY2tldF9pbl90eXBlX3BhcmFtZXRlcnM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2Nsb3NpbmdfYnJhY2VfaW5fYmxvY2s9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2Nsb3NpbmdfcGFyZW5faW5fY2FzdD1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29sb25faW5fYXNzZXJ0PWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb2xvbl9pbl9jYXNlPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb2xvbl9pbl9jb25kaXRpb25hbD1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29sb25faW5fZm9yPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb2xvbl9pbl9sYWJlbGVkX3N0YXRlbWVudD1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fYWxsb2NhdGlvbl9leHByZXNzaW9uPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9hbm5vdGF0aW9uPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9hcnJheV9pbml0aWFsaXplcj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fY29uc3RydWN0b3JfZGVjbGFyYXRpb25fcGFyYW1ldGVycz1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fY29uc3RydWN0b3JfZGVjbGFyYXRpb25fdGhyb3dzPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9lbnVtX2NvbnN0YW50X2FyZ3VtZW50cz1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fZW51bV9kZWNsYXJhdGlvbnM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX2V4cGxpY2l0Y29uc3RydWN0b3JjYWxsX2FyZ3VtZW50cz1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fZm9yX2luY3JlbWVudHM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX2Zvcl9pbml0cz1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fbWV0aG9kX2RlY2xhcmF0aW9uX3BhcmFtZXRlcnM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX21ldGhvZF9kZWNsYXJhdGlvbl90aHJvd3M9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX21ldGhvZF9pbnZvY2F0aW9uX2FyZ3VtZW50cz1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fbXVsdGlwbGVfZmllbGRfZGVjbGFyYXRpb25zPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9tdWx0aXBsZV9sb2NhbF9kZWNsYXJhdGlvbnM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX3BhcmFtZXRlcml6ZWRfdHlwZV9yZWZlcmVuY2U9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX3N1cGVyaW50ZXJmYWNlcz1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fdHlwZV9hcmd1bWVudHM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX3R5cGVfcGFyYW1ldGVycz1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfZWxsaXBzaXM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfYW5nbGVfYnJhY2tldF9pbl9wYXJhbWV0ZXJpemVkX3R5cGVfcmVmZXJlbmNlPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19hbmdsZV9icmFja2V0X2luX3R5cGVfYXJndW1lbnRzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19hbmdsZV9icmFja2V0X2luX3R5cGVfcGFyYW1ldGVycz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfYnJhY2VfaW5fYXJyYXlfaW5pdGlhbGl6ZXI9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfYnJhY2tldF9pbl9hcnJheV9hbGxvY2F0aW9uX2V4cHJlc3Npb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX2JyYWNrZXRfaW5fYXJyYXlfcmVmZXJlbmNlPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9hbm5vdGF0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9jYXN0PWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9jYXRjaD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fY29uc3RydWN0b3JfZGVjbGFyYXRpb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX2VudW1fY29uc3RhbnQ9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX2Zvcj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5faWY9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX21ldGhvZF9kZWNsYXJhdGlvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fbWV0aG9kX2ludm9jYXRpb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX3BhcmVudGhlc2l6ZWRfZXhwcmVzc2lvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fc3dpdGNoPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9zeW5jaHJvbml6ZWQ9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX3RyeT1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fd2hpbGU9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9wb3N0Zml4X29wZXJhdG9yPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfcHJlZml4X29wZXJhdG9yPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfcXVlc3Rpb25faW5fY29uZGl0aW9uYWw9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX3F1ZXN0aW9uX2luX3dpbGRjYXJkPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfc2VtaWNvbG9uX2luX2Zvcj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfc2VtaWNvbG9uX2luX3RyeV9yZXNvdXJjZXM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX3VuYXJ5X29wZXJhdG9yPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2FuZF9pbl90eXBlX3BhcmFtZXRlcj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Fzc2lnbm1lbnRfb3BlcmF0b3I9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9hdF9pbl9hbm5vdGF0aW9uX3R5cGVfZGVjbGFyYXRpb249aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9iaW5hcnlfb3BlcmF0b3I9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX2FuZ2xlX2JyYWNrZXRfaW5fcGFyYW1ldGVyaXplZF90eXBlX3JlZmVyZW5jZT1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX2FuZ2xlX2JyYWNrZXRfaW5fdHlwZV9hcmd1bWVudHM9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19hbmdsZV9icmFja2V0X2luX3R5cGVfcGFyYW1ldGVycz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX2JyYWNlX2luX2FycmF5X2luaXRpYWxpemVyPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19icmFja2V0X2luX2FycmF5X2FsbG9jYXRpb25fZXhwcmVzc2lvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX2JyYWNrZXRfaW5fYXJyYXlfcmVmZXJlbmNlPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fYW5ub3RhdGlvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX2Nhc3Q9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9jYXRjaD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fZW51bV9jb25zdGFudD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX2Zvcj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX2lmPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fbWV0aG9kX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fbWV0aG9kX2ludm9jYXRpb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9wYXJlbnRoZXNpemVkX2V4cHJlc3Npb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9zd2l0Y2g9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9zeW5jaHJvbml6ZWQ9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl90cnk9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl93aGlsZT1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb2xvbl9pbl9hc3NlcnQ9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb2xvbl9pbl9jYXNlPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbG9uX2luX2NvbmRpdGlvbmFsPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29sb25faW5fZGVmYXVsdD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb2xvbl9pbl9mb3I9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb2xvbl9pbl9sYWJlbGVkX3N0YXRlbWVudD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9hbGxvY2F0aW9uX2V4cHJlc3Npb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fYW5ub3RhdGlvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9hcnJheV9pbml0aWFsaXplcj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbl9wYXJhbWV0ZXJzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uX3Rocm93cz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9lbnVtX2NvbnN0YW50X2FyZ3VtZW50cz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9lbnVtX2RlY2xhcmF0aW9ucz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9leHBsaWNpdGNvbnN0cnVjdG9yY2FsbF9hcmd1bWVudHM9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fZm9yX2luY3JlbWVudHM9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fZm9yX2luaXRzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX21ldGhvZF9kZWNsYXJhdGlvbl9wYXJhbWV0ZXJzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX21ldGhvZF9kZWNsYXJhdGlvbl90aHJvd3M9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fbWV0aG9kX2ludm9jYXRpb25fYXJndW1lbnRzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX211bHRpcGxlX2ZpZWxkX2RlY2xhcmF0aW9ucz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9tdWx0aXBsZV9sb2NhbF9kZWNsYXJhdGlvbnM9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fcGFyYW1ldGVyaXplZF90eXBlX3JlZmVyZW5jZT1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9zdXBlcmludGVyZmFjZXM9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fdHlwZV9hcmd1bWVudHM9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fdHlwZV9wYXJhbWV0ZXJzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2VsbGlwc2lzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYW5nbGVfYnJhY2tldF9pbl9wYXJhbWV0ZXJpemVkX3R5cGVfcmVmZXJlbmNlPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYW5nbGVfYnJhY2tldF9pbl90eXBlX2FyZ3VtZW50cz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2FuZ2xlX2JyYWNrZXRfaW5fdHlwZV9wYXJhbWV0ZXJzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fYW5ub3RhdGlvbl90eXBlX2RlY2xhcmF0aW9uPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFjZV9pbl9hbm9ueW1vdXNfdHlwZV9kZWNsYXJhdGlvbj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fYXJyYXlfaW5pdGlhbGl6ZXI9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNlX2luX2Jsb2NrPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFjZV9pbl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fZW51bV9jb25zdGFudD1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fZW51bV9kZWNsYXJhdGlvbj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fbWV0aG9kX2RlY2xhcmF0aW9uPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFjZV9pbl9zd2l0Y2g9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNlX2luX3R5cGVfZGVjbGFyYXRpb249aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNrZXRfaW5fYXJyYXlfYWxsb2NhdGlvbl9leHByZXNzaW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2tldF9pbl9hcnJheV9yZWZlcmVuY2U9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFja2V0X2luX2FycmF5X3R5cGVfcmVmZXJlbmNlPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fYW5ub3RhdGlvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX2Fubm90YXRpb25fdHlwZV9tZW1iZXJfZGVjbGFyYXRpb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9jYXRjaD1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fY29uc3RydWN0b3JfZGVjbGFyYXRpb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9lbnVtX2NvbnN0YW50PWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fZm9yPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9pZj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fbWV0aG9kX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fbWV0aG9kX2ludm9jYXRpb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9wYXJlbnRoZXNpemVkX2V4cHJlc3Npb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9zd2l0Y2g9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX3N5bmNocm9uaXplZD1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fdHJ5PWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl93aGlsZT1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX3BhcmVudGhlc2l6ZWRfZXhwcmVzc2lvbl9pbl9yZXR1cm49aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9wYXJlbnRoZXNpemVkX2V4cHJlc3Npb25faW5fdGhyb3c9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9wb3N0Zml4X29wZXJhdG9yPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX3ByZWZpeF9vcGVyYXRvcj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9xdWVzdGlvbl9pbl9jb25kaXRpb25hbD1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX3F1ZXN0aW9uX2luX3dpbGRjYXJkPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX3NlbWljb2xvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9zZW1pY29sb25faW5fZm9yPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX3NlbWljb2xvbl9pbl90cnlfcmVzb3VyY2VzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX3VuYXJ5X29wZXJhdG9yPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmV0d2Vlbl9icmFja2V0c19pbl9hcnJheV90eXBlX3JlZmVyZW5jZT1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JldHdlZW5fZW1wdHlfYnJhY2VzX2luX2FycmF5X2luaXRpYWxpemVyPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmV0d2Vlbl9lbXB0eV9icmFja2V0c19pbl9hcnJheV9hbGxvY2F0aW9uX2V4cHJlc3Npb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZXR3ZWVuX2VtcHR5X3BhcmVuc19pbl9hbm5vdGF0aW9uX3R5cGVfbWVtYmVyX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmV0d2Vlbl9lbXB0eV9wYXJlbnNfaW5fY29uc3RydWN0b3JfZGVjbGFyYXRpb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZXR3ZWVuX2VtcHR5X3BhcmVuc19pbl9lbnVtX2NvbnN0YW50PWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmV0d2Vlbl9lbXB0eV9wYXJlbnNfaW5fbWV0aG9kX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmV0d2Vlbl9lbXB0eV9wYXJlbnNfaW5fbWV0aG9kX2ludm9jYXRpb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmpvaW5fbGluZXNfaW5fY29tbWVudHM9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmpvaW5fd3JhcHBlZF9saW5lcz10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIua2VlcF9lbHNlX3N0YXRlbWVudF9vbl9zYW1lX2xpbmU9ZmFsc2UKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5rZWVwX2VtcHR5X2FycmF5X2luaXRpYWxpemVyX29uX29uZV9saW5lPWZhbHNlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIua2VlcF9pbXBsZV9pZl9vbl9vbmVfbGluZT1mYWxzZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmtlZXBfdGhlbl9zdGF0ZW1lbnRfb25fc2FtZV9saW5lPWZhbHNlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIubGluZVNwbGl0PTgwCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIubmV2ZXJfaW5kZW50X2Jsb2NrX2NvbW1lbnRzX29uX2ZpcnN0X2NvbHVtbj1mYWxzZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLm5ldmVyX2luZGVudF9saW5lX2NvbW1lbnRzX29uX2ZpcnN0X2NvbHVtbj1mYWxzZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLm51bWJlcl9vZl9ibGFua19saW5lc19hdF9iZWdpbm5pbmdfb2ZfbWV0aG9kX2JvZHk9MAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLm51bWJlcl9vZl9lbXB0eV9saW5lc190b19wcmVzZXJ2ZT0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIucHV0X2VtcHR5X3N0YXRlbWVudF9vbl9uZXdfbGluZT10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIudGFidWxhdGlvbi5jaGFyPXRhYgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLnRhYnVsYXRpb24uc2l6ZT00CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIudXNlX29uX29mZl90YWdzPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci51c2VfdGFic19vbmx5X2Zvcl9sZWFkaW5nX2luZGVudGF0aW9ucz1mYWxzZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLndyYXBfYmVmb3JlX2JpbmFyeV9vcGVyYXRvcj10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIud3JhcF9iZWZvcmVfb3Jfb3BlcmF0b3JfbXVsdGljYXRjaD10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIud3JhcF9vdXRlcl9leHByZXNzaW9uc193aGVuX25lc3RlZD10cnVlCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIudGVzdC8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLnRlc3QvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzM2Y2NlCi0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLnRlc3QvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcwpAQCAtMCwwICsxLDYxIEBACitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorZWRpdG9yX3NhdmVfcGFydGljaXBhbnRfb3JnLmVjbGlwc2UuamR0LnVpLnBvc3RzYXZlbGlzdGVuZXIuY2xlYW51cD10cnVlCitmb3JtYXR0ZXJfcHJvZmlsZT1fSkdpdCBGb3JtYXQKK2Zvcm1hdHRlcl9zZXR0aW5nc192ZXJzaW9uPTEyCitvcmcuZWNsaXBzZS5qZHQudWkuaWdub3JlbG93ZXJjYXNlbmFtZXM9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LnVpLmltcG9ydG9yZGVyPWphdmE7amF2YXg7b3JnO2NvbTsKK29yZy5lY2xpcHNlLmpkdC51aS5vbmRlbWFuZHRocmVzaG9sZD05OQorb3JnLmVjbGlwc2UuamR0LnVpLnN0YXRpY29uZGVtYW5kdGhyZXNob2xkPTk5CitvcmcuZWNsaXBzZS5qZHQudWkudGV4dC5jdXN0b21fY29kZV90ZW1wbGF0ZXM9PD94bWwgdmVyc2lvblw9IjEuMCIgZW5jb2RpbmdcPSJVVEYtOCI/Pjx0ZW1wbGF0ZXMvPgorc3BfY2xlYW51cC5hZGRfZGVmYXVsdF9zZXJpYWxfdmVyc2lvbl9pZD10cnVlCitzcF9jbGVhbnVwLmFkZF9nZW5lcmF0ZWRfc2VyaWFsX3ZlcnNpb25faWQ9ZmFsc2UKK3NwX2NsZWFudXAuYWRkX21pc3NpbmdfYW5ub3RhdGlvbnM9ZmFsc2UKK3NwX2NsZWFudXAuYWRkX21pc3NpbmdfZGVwcmVjYXRlZF9hbm5vdGF0aW9ucz10cnVlCitzcF9jbGVhbnVwLmFkZF9taXNzaW5nX21ldGhvZHM9ZmFsc2UKK3NwX2NsZWFudXAuYWRkX21pc3NpbmdfbmxzX3RhZ3M9ZmFsc2UKK3NwX2NsZWFudXAuYWRkX21pc3Npbmdfb3ZlcnJpZGVfYW5ub3RhdGlvbnM9dHJ1ZQorc3BfY2xlYW51cC5hZGRfbWlzc2luZ19vdmVycmlkZV9hbm5vdGF0aW9uc19pbnRlcmZhY2VfbWV0aG9kcz1mYWxzZQorc3BfY2xlYW51cC5hZGRfc2VyaWFsX3ZlcnNpb25faWQ9ZmFsc2UKK3NwX2NsZWFudXAuYWx3YXlzX3VzZV9ibG9ja3M9dHJ1ZQorc3BfY2xlYW51cC5hbHdheXNfdXNlX3BhcmVudGhlc2VzX2luX2V4cHJlc3Npb25zPWZhbHNlCitzcF9jbGVhbnVwLmFsd2F5c191c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19maWVsZF9hY2Nlc3M9ZmFsc2UKK3NwX2NsZWFudXAuYWx3YXlzX3VzZV90aGlzX2Zvcl9ub25fc3RhdGljX21ldGhvZF9hY2Nlc3M9ZmFsc2UKK3NwX2NsZWFudXAuY29udmVydF90b19lbmhhbmNlZF9mb3JfbG9vcD1mYWxzZQorc3BfY2xlYW51cC5jb3JyZWN0X2luZGVudGF0aW9uPWZhbHNlCitzcF9jbGVhbnVwLmZvcm1hdF9zb3VyY2VfY29kZT10cnVlCitzcF9jbGVhbnVwLmZvcm1hdF9zb3VyY2VfY29kZV9jaGFuZ2VzX29ubHk9dHJ1ZQorc3BfY2xlYW51cC5tYWtlX2xvY2FsX3ZhcmlhYmxlX2ZpbmFsPWZhbHNlCitzcF9jbGVhbnVwLm1ha2VfcGFyYW1ldGVyc19maW5hbD1mYWxzZQorc3BfY2xlYW51cC5tYWtlX3ByaXZhdGVfZmllbGRzX2ZpbmFsPXRydWUKK3NwX2NsZWFudXAubWFrZV90eXBlX2Fic3RyYWN0X2lmX21pc3NpbmdfbWV0aG9kPWZhbHNlCitzcF9jbGVhbnVwLm1ha2VfdmFyaWFibGVfZGVjbGFyYXRpb25zX2ZpbmFsPWZhbHNlCitzcF9jbGVhbnVwLm5ldmVyX3VzZV9ibG9ja3M9ZmFsc2UKK3NwX2NsZWFudXAubmV2ZXJfdXNlX3BhcmVudGhlc2VzX2luX2V4cHJlc3Npb25zPXRydWUKK3NwX2NsZWFudXAub25fc2F2ZV91c2VfYWRkaXRpb25hbF9hY3Rpb25zPXRydWUKK3NwX2NsZWFudXAub3JnYW5pemVfaW1wb3J0cz1mYWxzZQorc3BfY2xlYW51cC5xdWFsaWZ5X3N0YXRpY19maWVsZF9hY2Nlc3Nlc193aXRoX2RlY2xhcmluZ19jbGFzcz1mYWxzZQorc3BfY2xlYW51cC5xdWFsaWZ5X3N0YXRpY19tZW1iZXJfYWNjZXNzZXNfdGhyb3VnaF9pbnN0YW5jZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3M9dHJ1ZQorc3BfY2xlYW51cC5xdWFsaWZ5X3N0YXRpY19tZW1iZXJfYWNjZXNzZXNfdGhyb3VnaF9zdWJ0eXBlc193aXRoX2RlY2xhcmluZ19jbGFzcz10cnVlCitzcF9jbGVhbnVwLnF1YWxpZnlfc3RhdGljX21lbWJlcl9hY2Nlc3Nlc193aXRoX2RlY2xhcmluZ19jbGFzcz1mYWxzZQorc3BfY2xlYW51cC5xdWFsaWZ5X3N0YXRpY19tZXRob2RfYWNjZXNzZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3M9ZmFsc2UKK3NwX2NsZWFudXAucmVtb3ZlX3ByaXZhdGVfY29uc3RydWN0b3JzPXRydWUKK3NwX2NsZWFudXAucmVtb3ZlX3RyYWlsaW5nX3doaXRlc3BhY2VzPXRydWUKK3NwX2NsZWFudXAucmVtb3ZlX3RyYWlsaW5nX3doaXRlc3BhY2VzX2FsbD10cnVlCitzcF9jbGVhbnVwLnJlbW92ZV90cmFpbGluZ193aGl0ZXNwYWNlc19pZ25vcmVfZW1wdHk9ZmFsc2UKK3NwX2NsZWFudXAucmVtb3ZlX3VubmVjZXNzYXJ5X2Nhc3RzPWZhbHNlCitzcF9jbGVhbnVwLnJlbW92ZV91bm5lY2Vzc2FyeV9ubHNfdGFncz1mYWxzZQorc3BfY2xlYW51cC5yZW1vdmVfdW51c2VkX2ltcG9ydHM9ZmFsc2UKK3NwX2NsZWFudXAucmVtb3ZlX3VudXNlZF9sb2NhbF92YXJpYWJsZXM9ZmFsc2UKK3NwX2NsZWFudXAucmVtb3ZlX3VudXNlZF9wcml2YXRlX2ZpZWxkcz10cnVlCitzcF9jbGVhbnVwLnJlbW92ZV91bnVzZWRfcHJpdmF0ZV9tZW1iZXJzPWZhbHNlCitzcF9jbGVhbnVwLnJlbW92ZV91bnVzZWRfcHJpdmF0ZV9tZXRob2RzPXRydWUKK3NwX2NsZWFudXAucmVtb3ZlX3VudXNlZF9wcml2YXRlX3R5cGVzPXRydWUKK3NwX2NsZWFudXAuc29ydF9tZW1iZXJzPWZhbHNlCitzcF9jbGVhbnVwLnNvcnRfbWVtYmVyc19hbGw9ZmFsc2UKK3NwX2NsZWFudXAudXNlX2Jsb2Nrcz1mYWxzZQorc3BfY2xlYW51cC51c2VfYmxvY2tzX29ubHlfZm9yX3JldHVybl9hbmRfdGhyb3c9ZmFsc2UKK3NwX2NsZWFudXAudXNlX3BhcmVudGhlc2VzX2luX2V4cHJlc3Npb25zPWZhbHNlCitzcF9jbGVhbnVwLnVzZV90aGlzX2Zvcl9ub25fc3RhdGljX2ZpZWxkX2FjY2Vzcz1mYWxzZQorc3BfY2xlYW51cC51c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19maWVsZF9hY2Nlc3Nfb25seV9pZl9uZWNlc3Nhcnk9dHJ1ZQorc3BfY2xlYW51cC51c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19tZXRob2RfYWNjZXNzPWZhbHNlCitzcF9jbGVhbnVwLnVzZV90aGlzX2Zvcl9ub25fc3RhdGljX21ldGhvZF9hY2Nlc3Nfb25seV9pZl9uZWNlc3Nhcnk9dHJ1ZQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLnRlc3QvLnNldHRpbmdzL29yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLnByZWZzIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLnRlc3QvLnNldHRpbmdzL29yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkZWM0ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIudGVzdC8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubXlseW4udGFza3MudWkucHJlZnMKQEAgLTAsMCArMSwzIEBACitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorcHJvamVjdC5yZXBvc2l0b3J5LmtpbmQ9YnVnemlsbGEKK3Byb2plY3QucmVwb3NpdG9yeS51cmw9aHR0cHNcOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIudGVzdC8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubXlseW4udGVhbS51aS5wcmVmcyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci50ZXN0Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5teWx5bi50ZWFtLnVpLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlN2EwZjAKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIudGVzdC8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubXlseW4udGVhbS51aS5wcmVmcwpAQCAtMCwwICsxLDIgQEAKK2NvbW1pdC5jb21tZW50LnRlbXBsYXRlPSR7dGFzay5kZXNjcmlwdGlvbn0gXG5cbkJ1Z1w6ICR7dGFzay5rZXl9CitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLnRlc3QvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5hcGkudG9vbHMucHJlZnMgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIudGVzdC8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLmFwaS50b29scy5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTg1Njg3Ci0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLnRlc3QvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5hcGkudG9vbHMucHJlZnMKQEAgLTAsMCArMSw5MyBAQAorQU5OT1RBVElPTl9FTEVNRU5UX1RZUEVfQURERURfTUVUSE9EX1dJVEhPVVRfREVGQVVMVF9WQUxVRT1FcnJvcgorQU5OT1RBVElPTl9FTEVNRU5UX1RZUEVfQ0hBTkdFRF9UWVBFX0NPTlZFUlNJT049RXJyb3IKK0FOTk9UQVRJT05fRUxFTUVOVF9UWVBFX1JFTU9WRURfRklFTEQ9RXJyb3IKK0FOTk9UQVRJT05fRUxFTUVOVF9UWVBFX1JFTU9WRURfTUVUSE9EPUVycm9yCitBTk5PVEFUSU9OX0VMRU1FTlRfVFlQRV9SRU1PVkVEX1RZUEVfTUVNQkVSPUVycm9yCitBUElfQ09NUE9ORU5UX0VMRU1FTlRfVFlQRV9SRU1PVkVEX0FQSV9UWVBFPUVycm9yCitBUElfQ09NUE9ORU5UX0VMRU1FTlRfVFlQRV9SRU1PVkVEX1JFRVhQT1JURURfQVBJX1RZUEU9RXJyb3IKK0FQSV9DT01QT05FTlRfRUxFTUVOVF9UWVBFX1JFTU9WRURfUkVFWFBPUlRFRF9UWVBFPUVycm9yCitBUElfQ09NUE9ORU5UX0VMRU1FTlRfVFlQRV9SRU1PVkVEX1RZUEU9RXJyb3IKK0NMQVNTX0VMRU1FTlRfVFlQRV9BRERFRF9NRVRIT0Q9RXJyb3IKK0NMQVNTX0VMRU1FTlRfVFlQRV9BRERFRF9SRVNUUklDVElPTlM9RXJyb3IKK0NMQVNTX0VMRU1FTlRfVFlQRV9BRERFRF9UWVBFX1BBUkFNRVRFUj1FcnJvcgorQ0xBU1NfRUxFTUVOVF9UWVBFX0NIQU5HRURfQ09OVFJBQ1RFRF9TVVBFUklOVEVSRkFDRVNfU0VUPUVycm9yCitDTEFTU19FTEVNRU5UX1RZUEVfQ0hBTkdFRF9ERUNSRUFTRV9BQ0NFU1M9RXJyb3IKK0NMQVNTX0VMRU1FTlRfVFlQRV9DSEFOR0VEX05PTl9BQlNUUkFDVF9UT19BQlNUUkFDVD1FcnJvcgorQ0xBU1NfRUxFTUVOVF9UWVBFX0NIQU5HRURfTk9OX0ZJTkFMX1RPX0ZJTkFMPUVycm9yCitDTEFTU19FTEVNRU5UX1RZUEVfQ0hBTkdFRF9UWVBFX0NPTlZFUlNJT049RXJyb3IKK0NMQVNTX0VMRU1FTlRfVFlQRV9SRU1PVkVEX0NPTlNUUlVDVE9SPUVycm9yCitDTEFTU19FTEVNRU5UX1RZUEVfUkVNT1ZFRF9GSUVMRD1FcnJvcgorQ0xBU1NfRUxFTUVOVF9UWVBFX1JFTU9WRURfTUVUSE9EPUVycm9yCitDTEFTU19FTEVNRU5UX1RZUEVfUkVNT1ZFRF9TVVBFUkNMQVNTPUVycm9yCitDTEFTU19FTEVNRU5UX1RZUEVfUkVNT1ZFRF9UWVBFX01FTUJFUj1FcnJvcgorQ0xBU1NfRUxFTUVOVF9UWVBFX1JFTU9WRURfVFlQRV9QQVJBTUVURVI9RXJyb3IKK0NPTlNUUlVDVE9SX0VMRU1FTlRfVFlQRV9BRERFRF9UWVBFX1BBUkFNRVRFUj1FcnJvcgorQ09OU1RSVUNUT1JfRUxFTUVOVF9UWVBFX0NIQU5HRURfREVDUkVBU0VfQUNDRVNTPUVycm9yCitDT05TVFJVQ1RPUl9FTEVNRU5UX1RZUEVfQ0hBTkdFRF9WQVJBUkdTX1RPX0FSUkFZPUVycm9yCitDT05TVFJVQ1RPUl9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9UWVBFX1BBUkFNRVRFUj1FcnJvcgorRU5VTV9FTEVNRU5UX1RZUEVfQ0hBTkdFRF9DT05UUkFDVEVEX1NVUEVSSU5URVJGQUNFU19TRVQ9RXJyb3IKK0VOVU1fRUxFTUVOVF9UWVBFX0NIQU5HRURfVFlQRV9DT05WRVJTSU9OPUVycm9yCitFTlVNX0VMRU1FTlRfVFlQRV9SRU1PVkVEX0VOVU1fQ09OU1RBTlQ9RXJyb3IKK0VOVU1fRUxFTUVOVF9UWVBFX1JFTU9WRURfRklFTEQ9RXJyb3IKK0VOVU1fRUxFTUVOVF9UWVBFX1JFTU9WRURfTUVUSE9EPUVycm9yCitFTlVNX0VMRU1FTlRfVFlQRV9SRU1PVkVEX1RZUEVfTUVNQkVSPUVycm9yCitGSUVMRF9FTEVNRU5UX1RZUEVfQURERURfVkFMVUU9RXJyb3IKK0ZJRUxEX0VMRU1FTlRfVFlQRV9DSEFOR0VEX0RFQ1JFQVNFX0FDQ0VTUz1FcnJvcgorRklFTERfRUxFTUVOVF9UWVBFX0NIQU5HRURfRklOQUxfVE9fTk9OX0ZJTkFMX1NUQVRJQ19DT05TVEFOVD1FcnJvcgorRklFTERfRUxFTUVOVF9UWVBFX0NIQU5HRURfTk9OX0ZJTkFMX1RPX0ZJTkFMPUVycm9yCitGSUVMRF9FTEVNRU5UX1RZUEVfQ0hBTkdFRF9OT05fU1RBVElDX1RPX1NUQVRJQz1FcnJvcgorRklFTERfRUxFTUVOVF9UWVBFX0NIQU5HRURfU1RBVElDX1RPX05PTl9TVEFUSUM9RXJyb3IKK0ZJRUxEX0VMRU1FTlRfVFlQRV9DSEFOR0VEX1RZUEU9RXJyb3IKK0ZJRUxEX0VMRU1FTlRfVFlQRV9DSEFOR0VEX1ZBTFVFPUVycm9yCitGSUVMRF9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9UWVBFX0FSR1VNRU5UPUVycm9yCitGSUVMRF9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9WQUxVRT1FcnJvcgorSUxMRUdBTF9FWFRFTkQ9V2FybmluZworSUxMRUdBTF9JTVBMRU1FTlQ9V2FybmluZworSUxMRUdBTF9JTlNUQU5USUFURT1XYXJuaW5nCitJTExFR0FMX09WRVJSSURFPVdhcm5pbmcKK0lMTEVHQUxfUkVGRVJFTkNFPVdhcm5pbmcKK0lOVEVSRkFDRV9FTEVNRU5UX1RZUEVfQURERURfRklFTEQ9RXJyb3IKK0lOVEVSRkFDRV9FTEVNRU5UX1RZUEVfQURERURfTUVUSE9EPUVycm9yCitJTlRFUkZBQ0VfRUxFTUVOVF9UWVBFX0FEREVEX1JFU1RSSUNUSU9OUz1FcnJvcgorSU5URVJGQUNFX0VMRU1FTlRfVFlQRV9BRERFRF9TVVBFUl9JTlRFUkZBQ0VfV0lUSF9NRVRIT0RTPUVycm9yCitJTlRFUkZBQ0VfRUxFTUVOVF9UWVBFX0FEREVEX1RZUEVfUEFSQU1FVEVSPUVycm9yCitJTlRFUkZBQ0VfRUxFTUVOVF9UWVBFX0NIQU5HRURfQ09OVFJBQ1RFRF9TVVBFUklOVEVSRkFDRVNfU0VUPUVycm9yCitJTlRFUkZBQ0VfRUxFTUVOVF9UWVBFX0NIQU5HRURfVFlQRV9DT05WRVJTSU9OPUVycm9yCitJTlRFUkZBQ0VfRUxFTUVOVF9UWVBFX1JFTU9WRURfRklFTEQ9RXJyb3IKK0lOVEVSRkFDRV9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9NRVRIT0Q9RXJyb3IKK0lOVEVSRkFDRV9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9UWVBFX01FTUJFUj1FcnJvcgorSU5URVJGQUNFX0VMRU1FTlRfVFlQRV9SRU1PVkVEX1RZUEVfUEFSQU1FVEVSPUVycm9yCitJTlZBTElEX0pBVkFET0NfVEFHPUlnbm9yZQorSU5WQUxJRF9SRUZFUkVOQ0VfSU5fU1lTVEVNX0xJQlJBUklFUz1FcnJvcgorTEVBS19FWFRFTkQ9V2FybmluZworTEVBS19GSUVMRF9ERUNMPVdhcm5pbmcKK0xFQUtfSU1QTEVNRU5UPVdhcm5pbmcKK0xFQUtfTUVUSE9EX1BBUkFNPVdhcm5pbmcKK0xFQUtfTUVUSE9EX1JFVFVSTl9UWVBFPVdhcm5pbmcKK01FVEhPRF9FTEVNRU5UX1RZUEVfQURERURfUkVTVFJJQ1RJT05TPUVycm9yCitNRVRIT0RfRUxFTUVOVF9UWVBFX0FEREVEX1RZUEVfUEFSQU1FVEVSPUVycm9yCitNRVRIT0RfRUxFTUVOVF9UWVBFX0NIQU5HRURfREVDUkVBU0VfQUNDRVNTPUVycm9yCitNRVRIT0RfRUxFTUVOVF9UWVBFX0NIQU5HRURfTk9OX0FCU1RSQUNUX1RPX0FCU1RSQUNUPUVycm9yCitNRVRIT0RfRUxFTUVOVF9UWVBFX0NIQU5HRURfTk9OX0ZJTkFMX1RPX0ZJTkFMPUVycm9yCitNRVRIT0RfRUxFTUVOVF9UWVBFX0NIQU5HRURfTk9OX1NUQVRJQ19UT19TVEFUSUM9RXJyb3IKK01FVEhPRF9FTEVNRU5UX1RZUEVfQ0hBTkdFRF9TVEFUSUNfVE9fTk9OX1NUQVRJQz1FcnJvcgorTUVUSE9EX0VMRU1FTlRfVFlQRV9DSEFOR0VEX1ZBUkFSR1NfVE9fQVJSQVk9RXJyb3IKK01FVEhPRF9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9BTk5PVEFUSU9OX0RFRkFVTFRfVkFMVUU9RXJyb3IKK01FVEhPRF9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9UWVBFX1BBUkFNRVRFUj1FcnJvcgorVFlQRV9QQVJBTUVURVJfRUxFTUVOVF9UWVBFX0FEREVEX0NMQVNTX0JPVU5EPUVycm9yCitUWVBFX1BBUkFNRVRFUl9FTEVNRU5UX1RZUEVfQURERURfSU5URVJGQUNFX0JPVU5EPUVycm9yCitUWVBFX1BBUkFNRVRFUl9FTEVNRU5UX1RZUEVfQ0hBTkdFRF9DTEFTU19CT1VORD1FcnJvcgorVFlQRV9QQVJBTUVURVJfRUxFTUVOVF9UWVBFX0NIQU5HRURfSU5URVJGQUNFX0JPVU5EPUVycm9yCitUWVBFX1BBUkFNRVRFUl9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9DTEFTU19CT1VORD1FcnJvcgorVFlQRV9QQVJBTUVURVJfRUxFTUVOVF9UWVBFX1JFTU9WRURfSU5URVJGQUNFX0JPVU5EPUVycm9yCitVTlVTRURfUFJPQkxFTV9GSUxURVJTPVdhcm5pbmcKK2F1dG9tYXRpY2FsbHlfcmVtb3ZlZF91bnVzZWRfcHJvYmxlbV9maWx0ZXJzPWZhbHNlCitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQoraW5jb21wYXRpYmxlX2FwaV9jb21wb25lbnRfdmVyc2lvbj1FcnJvcgoraW5jb21wYXRpYmxlX2FwaV9jb21wb25lbnRfdmVyc2lvbl9pbmNsdWRlX21ham9yX3dpdGhvdXRfYnJlYWtpbmdfY2hhbmdlPURpc2FibGVkCitpbmNvbXBhdGlibGVfYXBpX2NvbXBvbmVudF92ZXJzaW9uX2luY2x1ZGVfbWlub3Jfd2l0aG91dF9hcGlfY2hhbmdlPURpc2FibGVkCitpbnZhbGlkX3NpbmNlX3RhZ192ZXJzaW9uPUVycm9yCittYWxmb3JtZWRfc2luY2VfdGFnPUVycm9yCittaXNzaW5nX3NpbmNlX3RhZz1FcnJvcgorcmVwb3J0X2FwaV9icmVha2FnZV93aGVuX21ham9yX3ZlcnNpb25faW5jcmVtZW50ZWQ9RGlzYWJsZWQKK3JlcG9ydF9yZXNvbHV0aW9uX2Vycm9yc19hcGlfY29tcG9uZW50PVdhcm5pbmcKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci50ZXN0Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUuY29yZS5wcmVmcyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci50ZXN0Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUuY29yZS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjNjMzdmCi0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLnRlc3QvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5jb3JlLnByZWZzCkBAIC0wLDAgKzEsMiBAQAorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK3Jlc29sdmUucmVxdWlyZWJ1bmRsZT1mYWxzZQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLnRlc3QvQlVDSyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci50ZXN0L0JVQ0sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ2ZTcyZgotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci50ZXN0L0JVQ0sKQEAgLTAsMCArMSwzNSBAQAorVEVTVF9CQVNFID0gWyd0c3Qvb3JnL2VjbGlwc2UvamdpdC9sZnMvc2VydmVyL2ZzL0xmc1NlcnZlclRlc3QuamF2YSddCitURVNUUyA9IGdsb2IoWyd0c3QvKiovKi5qYXZhJ10sCisgICAgZXhjbHVkZXMgPSBURVNUX0JBU0UKKykKKworZm9yIHQgaW4gVEVTVFM6CisgIG4gPSB0W2xlbigndHN0LycpOmxlbih0KS1sZW4oJy5qYXZhJyldLnJlcGxhY2UoJy8nLCAnLicpCisgIGphdmFfdGVzdCgKKyAgICBuYW1lID0gbiwKKyAgICBsYWJlbHMgPSBbJ2xmcy1zZXJ2ZXInXSwKKyAgICBzcmNzID0gW3RdICsgVEVTVF9CQVNFLAorICAgIGRlcHMgPSBbCisgICAgICAnLy9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0OmhlbHBlcnMnLAorICAgICAgJy8vb3JnLmVjbGlwc2UuamdpdDpqZ2l0JywKKyAgICAgICcvL29yZy5lY2xpcHNlLmpnaXQuanVuaXQ6anVuaXQnLAorICAgICAgJy8vb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5odHRwOmp1bml0LWh0dHAnLAorICAgICAgJy8vb3JnLmVjbGlwc2UuamdpdC5sZnM6amdpdC1sZnMnLAorICAgICAgJy8vb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyOmpnaXQtbGZzLXNlcnZlcicsCisgICAgICAnLy9saWI6aGFtY3Jlc3QtY29yZScsCisgICAgICAnLy9saWI6aGFtY3Jlc3QtbGlicmFyeScsCisgICAgICAnLy9saWI6aHR0cGNvcmUnLAorICAgICAgJy8vbGliOmh0dHBjb21wb25lbnRzJywKKyAgICAgICcvL2xpYjpqdW5pdCcsCisgICAgICAnLy9saWIvamV0dHk6aHR0cCcsCisgICAgICAnLy9saWIvamV0dHk6aW8nLAorICAgICAgJy8vbGliL2pldHR5OnNlcnZlcicsCisgICAgICAnLy9saWIvamV0dHk6c2VydmxldCcsCisgICAgICAnLy9saWIvamV0dHk6c2VjdXJpdHknLAorICAgICAgJy8vbGliL2pldHR5OnV0aWwnLAorICAgICAgJy8vbGliOnNlcnZsZXQtYXBpJywKKyAgICAgICcvL2xpYjpjb21tb25zLWxvZ2dpbmcnLAorICAgIF0sCisgICAgc291cmNlX3VuZGVyX3Rlc3QgPSBbJy8vb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyOmpnaXQtbGZzLXNlcnZlciddLAorICAgIHZtX2FyZ3MgPSBbJy1YbXgyNTZtJywgJy1EZmlsZS5lbmNvZGluZz1VVEYtOCddLAorICApCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIudGVzdC9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci50ZXN0L01FVEEtSU5GL01BTklGRVNULk1GCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyNjNjM2EKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIudGVzdC9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMCwwICsxLDM4IEBACitNYW5pZmVzdC1WZXJzaW9uOiAxLjAKK0J1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKK0J1bmRsZS1OYW1lOiAlcGx1Z2luX25hbWUKK0J1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci50ZXN0CitCdW5kbGUtVmVyc2lvbjogNC4zLjAucXVhbGlmaWVyCitCdW5kbGUtVmVuZG9yOiAlcHJvdmlkZXJfbmFtZQorQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCitCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSmF2YVNFLTEuNworSW1wb3J0LVBhY2thZ2U6IGphdmF4LnNlcnZsZXQ7dmVyc2lvbj0iWzMuMS4wLDQuMC4wKSIsCisgamF2YXguc2VydmxldC5odHRwO3ZlcnNpb249IlszLjEuMCw0LjAuMCkiLAorIG9yZy5hcGFjaGUuaHR0cDt2ZXJzaW9uPSJbNC4zLjAsNS4wLjApIiwKKyBvcmcuYXBhY2hlLmh0dHAuY2xpZW50O3ZlcnNpb249Ils0LjMuMCw1LjAuMCkiLAorIG9yZy5hcGFjaGUuaHR0cC5jbGllbnQubWV0aG9kczt2ZXJzaW9uPSJbNC4zLjAsNS4wLjApIiwKKyBvcmcuYXBhY2hlLmh0dHAuZW50aXR5O3ZlcnNpb249Ils0LjMuMCw1LjAuMCkiLAorIG9yZy5hcGFjaGUuaHR0cC5pbXBsLmNsaWVudDt2ZXJzaW9uPSJbNC4zLjAsNS4wLjApIiwKKyBvcmcuZWNsaXBzZS5qZXR0eS5jb250aW51YXRpb247dmVyc2lvbj0iWzkuMC4wLDEwLjAuMCkiLAorIG9yZy5lY2xpcHNlLmpldHR5Lmh0dHA7dmVyc2lvbj0iWzkuMC4wLDEwLjAuMCkiLAorIG9yZy5lY2xpcHNlLmpldHR5LmlvO3ZlcnNpb249Ils5LjAuMCwxMC4wLjApIiwKKyBvcmcuZWNsaXBzZS5qZXR0eS5zZWN1cml0eTt2ZXJzaW9uPSJbOS4wLjAsMTAuMC4wKSIsCisgb3JnLmVjbGlwc2UuamV0dHkuc2VjdXJpdHkuYXV0aGVudGljYXRpb247dmVyc2lvbj0iWzkuMC4wLDEwLjAuMCkiLAorIG9yZy5lY2xpcHNlLmpldHR5LnNlcnZlcjt2ZXJzaW9uPSJbOS4wLjAsMTAuMC4wKSIsCisgb3JnLmVjbGlwc2UuamV0dHkuc2VydmVyLmhhbmRsZXI7dmVyc2lvbj0iWzkuMC4wLDEwLjAuMCkiLAorIG9yZy5lY2xpcHNlLmpldHR5LnNlcnZlci5uaW87dmVyc2lvbj0iWzkuMC4wLDEwLjAuMCkiLAorIG9yZy5lY2xpcHNlLmpldHR5LnNlcnZsZXQ7dmVyc2lvbj0iWzkuMC4wLDEwLjAuMCkiLAorIG9yZy5lY2xpcHNlLmpldHR5LnV0aWw7dmVyc2lvbj0iWzkuMC4wLDEwLjAuMCkiLAorIG9yZy5lY2xpcHNlLmpldHR5LnV0aWwuY29tcG9uZW50O3ZlcnNpb249Ils5LjAuMCwxMC4wLjApIiwKKyBvcmcuZWNsaXBzZS5qZXR0eS51dGlsLmxvZzt2ZXJzaW9uPSJbOS4wLjAsMTAuMC4wKSIsCisgb3JnLmVjbGlwc2UuamV0dHkudXRpbC5zZWN1cml0eTt2ZXJzaW9uPSJbOS4wLjAsMTAuMC4wKSIsCisgb3JnLmVjbGlwc2UuamV0dHkudXRpbC50aHJlYWQ7dmVyc2lvbj0iWzkuMC4wLDEwLjAuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuanVuaXQuaHR0cDt2ZXJzaW9uPSJbNC4zLjAsNC40LjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5saWI7dmVyc2lvbj0iWzQuMy4wLDQuNC4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLmZzO3ZlcnNpb249Ils0LjMuMCw0LjQuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQubGZzLnRlc3Q7dmVyc2lvbj0iWzQuMy4wLDQuNC4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC51dGlsO3ZlcnNpb249Ils0LjMuMCw0LjQuMCkiLAorIG9yZy5oYW1jcmVzdC5jb3JlO3ZlcnNpb249IlsxLjEuMCwyLjAuMCkiLAorIG9yZy5qdW5pdDt2ZXJzaW9uPSJbNC4wLjAsNS4wLjApIiwKKyBvcmcuanVuaXQucnVubmVyO3ZlcnNpb249Ils0LjAuMCw1LjAuMCkiLAorIG9yZy5qdW5pdC5ydW5uZXJzO3ZlcnNpb249Ils0LjAuMCw1LjAuMCkiCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIudGVzdC9idWlsZC5wcm9wZXJ0aWVzIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLnRlc3QvYnVpbGQucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmZhMGNhCi0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLnRlc3QvYnVpbGQucHJvcGVydGllcwpAQCAtMCwwICsxLDUgQEAKK3NvdXJjZS4uID0gdHN0Lworb3V0cHV0Li4gPSBiaW4vCitiaW4uaW5jbHVkZXMgPSBNRVRBLUlORi8sXAorICAgICAgICAgICAgICAgLixcCisgICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcwpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLnRlc3QvcGx1Z2luLnByb3BlcnRpZXMgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIudGVzdC9wbHVnaW4ucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YThlNjQyCi0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLnRlc3QvcGx1Z2luLnByb3BlcnRpZXMKQEAgLTAsMCArMSwyIEBACitwbHVnaW5fbmFtZT1KR2l0IExGUyBTZXJ2ZXIgVGVzdHMKK3Byb3ZpZGVyX25hbWU9RWNsaXBzZSBKR2l0CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIudGVzdC9wb20ueG1sIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLnRlc3QvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTQ2MWFhCi0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLnRlc3QvcG9tLnhtbApAQCAtMCwwICsxLDE0NiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0KKyAgIENvcHlyaWdodCAoQykgMjAxNSBNYXR0aGlhcyBTb2huIDxtYXR0aGlhcy5zb2huQHNhcC5jb20+CisgICBhbmQgb3RoZXIgY29weXJpZ2h0IG93bmVycyBhcyBkb2N1bWVudGVkIGluIHRoZSBwcm9qZWN0J3MgSVAgbG9nLgorCisgICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZQorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYxLjAgd2hpY2gKKyAgIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBpcyByZXByb2R1Y2VkIGJlbG93LCBhbmQgaXMKKyAgIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZWRsLXYxMC5waHAKKworICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgICBjb25kaXRpb25zIGFyZSBtZXQ6CisKKyAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCisgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICAgLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIEluYy4gbm9yIHRoZQorICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorICAgICBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCisgICAgIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5ECisgICBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAorICAgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAgIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCisgICBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAgIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICAgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgICBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgICBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICAgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYKKyAgIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorLS0+CisKKzxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9tYXZlbi12NF8wXzAueHNkIj4KKyAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorCisgIDxwYXJlbnQ+CisgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KKyAgICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0LXBhcmVudDwvYXJ0aWZhY3RJZD4KKyAgICA8dmVyc2lvbj40LjMuMC1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgPC9wYXJlbnQ+CisKKyAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLnRlc3Q8L2FydGlmYWN0SWQ+CisgIDxuYW1lPkpHaXQgLSBMRlMgU2VydmVyIFRlc3RzPC9uYW1lPgorCisgIDxkZXNjcmlwdGlvbj4KKyAgICBUZXN0cyBmb3IgdGhlIExGUyBzZXJ2ZXIuCisgIDwvZGVzY3JpcHRpb24+CisKKyAgPGRlcGVuZGVuY2llcz4KKyAgICA8ZGVwZW5kZW5jeT4KKyAgICAgIDxncm91cElkPmp1bml0PC9ncm91cElkPgorICAgICAgPGFydGlmYWN0SWQ+anVuaXQ8L2FydGlmYWN0SWQ+CisgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CisgICAgPC9kZXBlbmRlbmN5PgorCisgICAgPGRlcGVuZGVuY3k+CisgICAgICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5qZ2l0PC9ncm91cElkPgorICAgICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdDwvYXJ0aWZhY3RJZD4KKyAgICAgIDx2ZXJzaW9uPiR7cHJvamVjdC52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KKyAgICA8L2RlcGVuZGVuY3k+CisKKyAgICA8ZGVwZW5kZW5jeT4KKyAgICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CisgICAgICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXI8L2FydGlmYWN0SWQ+CisgICAgICA8dmVyc2lvbj4ke3Byb2plY3QudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CisgICAgPC9kZXBlbmRlbmN5PgorCisgICAgPGRlcGVuZGVuY3k+CisgICAgICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5qZ2l0PC9ncm91cElkPgorICAgICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC5sZnMudGVzdDwvYXJ0aWZhY3RJZD4KKyAgICAgIDx2ZXJzaW9uPiR7cHJvamVjdC52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KKyAgICA8L2RlcGVuZGVuY3k+CisKKyAgICA8ZGVwZW5kZW5jeT4KKyAgICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CisgICAgICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0Lmh0dHA8L2FydGlmYWN0SWQ+CisgICAgICA8dmVyc2lvbj4ke3Byb2plY3QudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CisgICAgPC9kZXBlbmRlbmN5PgorCisgICAgPGRlcGVuZGVuY3k+CisgICAgICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5qZ2l0PC9ncm91cElkPgorICAgICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC5qdW5pdDwvYXJ0aWZhY3RJZD4KKyAgICAgIDx2ZXJzaW9uPiR7cHJvamVjdC52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KKyAgICA8L2RlcGVuZGVuY3k+CisKKyAgICA8ZGVwZW5kZW5jeT4KKyAgICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpldHR5PC9ncm91cElkPgorICAgICAgPGFydGlmYWN0SWQ+amV0dHktc2VydmxldDwvYXJ0aWZhY3RJZD4KKyAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KKyAgICA8L2RlcGVuZGVuY3k+CisKKyAgICA8ZGVwZW5kZW5jeT4KKyAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuaHR0cGNvbXBvbmVudHM8L2dyb3VwSWQ+CisgICAgICA8YXJ0aWZhY3RJZD5odHRwY2xpZW50PC9hcnRpZmFjdElkPgorICAgICAgPHZlcnNpb24+NC4zLjY8L3ZlcnNpb24+CisgICAgPC9kZXBlbmRlbmN5PgorICA8L2RlcGVuZGVuY2llcz4KKworICA8YnVpbGQ+CisgICAgPHRlc3RTb3VyY2VEaXJlY3Rvcnk+dHN0LzwvdGVzdFNvdXJjZURpcmVjdG9yeT4KKworICAgIDx0ZXN0UmVzb3VyY2VzPgorICAgICAgPHRlc3RSZXNvdXJjZT4KKyAgICAgICAgPGRpcmVjdG9yeT50c3QtcnNyYy88L2RpcmVjdG9yeT4KKyAgICAgIDwvdGVzdFJlc291cmNlPgorICAgIDwvdGVzdFJlc291cmNlcz4KKyAgICA8cGx1Z2lucz4KKyAgICAgIDxwbHVnaW4+CisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4KKyAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tamFyLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPGV4ZWN1dGlvbnM+CisgICAgICAgICAgPGV4ZWN1dGlvbj4KKyAgICAgICAgICAgIDxnb2Fscz4KKyAgICAgICAgICAgICAgPGdvYWw+dGVzdC1qYXI8L2dvYWw+CisgICAgICAgICAgICA8L2dvYWxzPgorICAgICAgICAgIDwvZXhlY3V0aW9uPgorICAgICAgICA8L2V4ZWN1dGlvbnM+CisgICAgICA8L3BsdWdpbj4KKyAgICAgIDxwbHVnaW4+CisgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXN1cmVmaXJlLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgPGFyZ0xpbmU+LURqYXZhLmlvLnRtcGRpcj0ke3Byb2plY3QuYnVpbGQuZGlyZWN0b3J5fSAgLVhteDMwMG08L2FyZ0xpbmU+CisgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgIDwvcGx1Z2luPgorICAgIDwvcGx1Z2lucz4KKyAgPC9idWlsZD4KKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2xmcy9zZXJ2ZXIvZnMvRG93bmxvYWRUZXN0LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9sZnMvc2VydmVyL2ZzL0Rvd25sb2FkVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjNGYzY2IKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9sZnMvc2VydmVyL2ZzL0Rvd25sb2FkVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1LCBNYXR0aGlhcyBTb2huIDxtYXR0aGlhcy5zb2hua0BzYXAuY29tPgorICogYW5kIG90aGVyIGNvcHlyaWdodCBvd25lcnMgYXMgZG9jdW1lbnRlZCBpbiB0aGUgcHJvamVjdCdzIElQIGxvZy4KKyAqCisgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZQorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYxLjAgd2hpY2gKKyAqIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBpcyByZXByb2R1Y2VkIGJlbG93LCBhbmQgaXMKKyAqIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZWRsLXYxMC5waHAKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAqICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCBJbmMuIG5vciB0aGUKKyAqICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKKyAqICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgorICogICB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5ECisgKiBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAorICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYKKyAqIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCitwYWNrYWdlIG9yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci5mczsKKworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5mYWlsOworCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLm5pby5maWxlLlBhdGg7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5QYXRoczsKK2ltcG9ydCBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdDsKKworaW1wb3J0IG9yZy5hcGFjaGUuaHR0cC5jbGllbnQuQ2xpZW50UHJvdG9jb2xFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5sZnMubGliLkFueUxvbmdPYmplY3RJZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0LkxvbmdPYmplY3RJZFRlc3RVdGlsczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuRmlsZVV0aWxzOworaW1wb3J0IG9yZy5qdW5pdC5UZXN0OworCitwdWJsaWMgY2xhc3MgRG93bmxvYWRUZXN0IGV4dGVuZHMgTGZzU2VydmVyVGVzdCB7CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3REb3dubG9hZCgpIHRocm93cyBFeGNlcHRpb24geworCQlTdHJpbmcgVEVYVCA9ICJ0ZXN0IjsKKwkJQW55TG9uZ09iamVjdElkIGlkID0gcHV0Q29udGVudChURVhUKTsKKwkJUGF0aCBmID0gUGF0aHMuZ2V0KGdldFRlbXBEaXJlY3RvcnkoKS50b1N0cmluZygpLCAiZG93bmxvYWQiKTsKKwkJbG9uZyBsZW4gPSBnZXRDb250ZW50KGlkLCBmKTsKKwkJYXNzZXJ0RXF1YWxzKFRFWFQubGVuZ3RoKCksIGxlbik7CisJCUZpbGVVdGlscy5kZWxldGUoZi50b0ZpbGUoKSwgRmlsZVV0aWxzLlJFVFJZKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3REb3dubG9hZEludmFsaWRQYXRoSW5mbygpCisJCQl0aHJvd3MgQ2xpZW50UHJvdG9jb2xFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKKwkJU3RyaW5nIFRFWFQgPSAidGVzdCI7CisJCUFueUxvbmdPYmplY3RJZCBpZCA9IHB1dENvbnRlbnQoVEVYVCk7CisJCVBhdGggZiA9IFBhdGhzLmdldChnZXRUZW1wRGlyZWN0b3J5KCkudG9TdHJpbmcoKSwgImRvd25sb2FkIik7CisJCXRyeSB7CisJCQlnZXRDb250ZW50KGlkLm5hbWUoKS5zdWJzdHJpbmcoMCwgNjApLCBmKTsKKwkJCWZhaWwoImV4cGVjdGVkIFJ1bnRpbWVFeGNlcHRpb24iKTsKKwkJfSBjYXRjaCAoUnVudGltZUV4Y2VwdGlvbiBlKSB7CisJCQlhc3NlcnRFcXVhbHMoIlN0YXR1czogNDAwIEJhZCBSZXF1ZXN0IiwKKwkJCQkJZS5nZXRNZXNzYWdlKCkpOworCQl9CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0RG93bmxvYWRJbnZhbGlkSWQoKQorCQkJdGhyb3dzIENsaWVudFByb3RvY29sRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CisJCVN0cmluZyBURVhUID0gInRlc3QiOworCQlBbnlMb25nT2JqZWN0SWQgaWQgPSBwdXRDb250ZW50KFRFWFQpOworCQlQYXRoIGYgPSBQYXRocy5nZXQoZ2V0VGVtcERpcmVjdG9yeSgpLnRvU3RyaW5nKCksICJkb3dubG9hZCIpOworCQl0cnkgeworCQkJZ2V0Q29udGVudChpZC5uYW1lKCkucmVwbGFjZSgnZicsICd6JyksIGYpOworCQkJZmFpbCgiZXhwZWN0ZWQgUnVudGltZUV4Y2VwdGlvbiIpOworCQl9IGNhdGNoIChSdW50aW1lRXhjZXB0aW9uIGUpIHsKKwkJCWFzc2VydEVxdWFscygiU3RhdHVzOiA0MDAgQmFkIFJlcXVlc3QiLAorCQkJCQllLmdldE1lc3NhZ2UoKSk7CisJCX0KKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3REb3dubG9hZE5vdEZvdW5kKCkKKwkJCXRocm93cyBDbGllbnRQcm90b2NvbEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geworCQlTdHJpbmcgVEVYVCA9ICJ0ZXN0IjsKKwkJQW55TG9uZ09iamVjdElkIGlkID0gTG9uZ09iamVjdElkVGVzdFV0aWxzLmhhc2goVEVYVCk7CisJCVBhdGggZiA9IFBhdGhzLmdldChnZXRUZW1wRGlyZWN0b3J5KCkudG9TdHJpbmcoKSwgImRvd25sb2FkIik7CisJCXRyeSB7CisJCQlnZXRDb250ZW50KGlkLCBmKTsKKwkJCWZhaWwoImV4cGVjdGVkIFJ1bnRpbWVFeGNlcHRpb24iKTsKKwkJfSBjYXRjaCAoUnVudGltZUV4Y2VwdGlvbiBlKSB7CisJCQlhc3NlcnRFcXVhbHMoIlN0YXR1czogNDA0IE5vdCBGb3VuZCIsCisJCQkJCWUuZ2V0TWVzc2FnZSgpKTsKKwkJfQorCX0KKworCUBTdXBwcmVzc1dhcm5pbmdzKCJib3hpbmciKQorCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdExhcmdlRmlsZURvd25sb2FkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCVBhdGggZiA9IFBhdGhzLmdldChnZXRUZW1wRGlyZWN0b3J5KCkudG9TdHJpbmcoKSwgImxhcmdlUmFuZG9tRmlsZSIpOworCQlsb25nIGV4cGVjdGVkTGVuID0gY3JlYXRlUHNldWRvUmFuZG9tQ29udGVudEZpbGUoZiwgNSAqIE1pQik7CisJCUFueUxvbmdPYmplY3RJZCBpZCA9IHB1dENvbnRlbnQoZik7CisJCVBhdGggZjIgPSBQYXRocy5nZXQoZ2V0VGVtcERpcmVjdG9yeSgpLnRvU3RyaW5nKCksICJkb3dubG9hZCIpOworCQlsb25nIHN0YXJ0ID0gU3lzdGVtLm5hbm9UaW1lKCk7CisJCWxvbmcgbGVuID0gZ2V0Q29udGVudChpZCwgZjIpOworCQlTeXN0ZW0ub3V0LnByaW50bG4oCisJCQkJTWVzc2FnZUZvcm1hdC5mb3JtYXQoImRvd2xvYWRlZCAxMCBNaUIgcmFuZG9tIGRhdGEgaW4gezB9bXMiLAorCQkJCQkJKFN5c3RlbS5uYW5vVGltZSgpIC0gc3RhcnQpIC8gMWU2KSk7CisJCWFzc2VydEVxdWFscyhleHBlY3RlZExlbiwgbGVuKTsKKwkJRmlsZVV0aWxzLmRlbGV0ZShmLnRvRmlsZSgpLCBGaWxlVXRpbHMuUkVUUlkpOworCisJfQorfQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvbGZzL3NlcnZlci9mcy9MZnNTZXJ2ZXJUZXN0LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9sZnMvc2VydmVyL2ZzL0xmc1NlcnZlclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzI2NmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvbGZzL3NlcnZlci9mcy9MZnNTZXJ2ZXJUZXN0LmphdmEKQEAgLTAsMCArMSwyNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUsIE1hdHRoaWFzIFNvaG4gPG1hdHRoaWFzLnNvaG5rQHNhcC5jb20+CisgKiBhbmQgb3RoZXIgY29weXJpZ2h0IG93bmVycyBhcyBkb2N1bWVudGVkIGluIHRoZSBwcm9qZWN0J3MgSVAgbG9nLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlCisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgRGlzdHJpYnV0aW9uIExpY2Vuc2UgdjEuMCB3aGljaAorICogYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGlzIHJlcHJvZHVjZWQgYmVsb3csIGFuZCBpcworICogYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lZGwtdjEwLnBocAorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIEluYy4gbm9yIHRoZQorICogICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorICogICBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCisgKiAgIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQKKyAqIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCisgKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRgorICogQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLmZzOworCitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOworCitpbXBvcnQgamF2YS5pby5CdWZmZXJlZElucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOworaW1wb3J0IGphdmEubmlvLmNoYW5uZWxzLkNoYW5uZWxzOworaW1wb3J0IGphdmEubmlvLmNoYW5uZWxzLkZpbGVDaGFubmVsOworaW1wb3J0IGphdmEubmlvLmNoYW5uZWxzLlJlYWRhYmxlQnl0ZUNoYW5uZWw7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlczsKK2ltcG9ydCBqYXZhLm5pby5maWxlLlBhdGg7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5QYXRoczsKK2ltcG9ydCBqYXZhLm5pby5maWxlLlN0YW5kYXJkT3Blbk9wdGlvbjsKK2ltcG9ydCBqYXZhLnNlY3VyaXR5LkRpZ2VzdElucHV0U3RyZWFtOworaW1wb3J0IGphdmEuc2VjdXJpdHkuU2VjdXJlUmFuZG9tOworCitpbXBvcnQgb3JnLmFwYWNoZS5odHRwLkh0dHBFbnRpdHk7CitpbXBvcnQgb3JnLmFwYWNoZS5odHRwLkh0dHBSZXNwb25zZTsKK2ltcG9ydCBvcmcuYXBhY2hlLmh0dHAuU3RhdHVzTGluZTsKK2ltcG9ydCBvcmcuYXBhY2hlLmh0dHAuY2xpZW50LkNsaWVudFByb3RvY29sRXhjZXB0aW9uOworaW1wb3J0IG9yZy5hcGFjaGUuaHR0cC5jbGllbnQubWV0aG9kcy5DbG9zZWFibGVIdHRwUmVzcG9uc2U7CitpbXBvcnQgb3JnLmFwYWNoZS5odHRwLmNsaWVudC5tZXRob2RzLkh0dHBHZXQ7CitpbXBvcnQgb3JnLmFwYWNoZS5odHRwLmNsaWVudC5tZXRob2RzLkh0dHBQdXQ7CitpbXBvcnQgb3JnLmFwYWNoZS5odHRwLmVudGl0eS5Db250ZW50VHlwZTsKK2ltcG9ydCBvcmcuYXBhY2hlLmh0dHAuZW50aXR5LklucHV0U3RyZWFtRW50aXR5OworaW1wb3J0IG9yZy5hcGFjaGUuaHR0cC5lbnRpdHkuU3RyaW5nRW50aXR5OworaW1wb3J0IG9yZy5hcGFjaGUuaHR0cC5pbXBsLmNsaWVudC5DbG9zZWFibGVIdHRwQ2xpZW50OworaW1wb3J0IG9yZy5hcGFjaGUuaHR0cC5pbXBsLmNsaWVudC5IdHRwQ2xpZW50QnVpbGRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZXR0eS5zZXJ2bGV0LlNlcnZsZXRDb250ZXh0SGFuZGxlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZXR0eS5zZXJ2bGV0LlNlcnZsZXRIb2xkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5odHRwLkFwcFNlcnZlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5saWIuQW55TG9uZ09iamVjdElkOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGZzLmxpYi5Db25zdGFudHM7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5sZnMubGliLkxvbmdPYmplY3RJZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0LkxvbmdPYmplY3RJZFRlc3RVdGlsczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuRmlsZVV0aWxzOworaW1wb3J0IG9yZy5qdW5pdC5BZnRlcjsKK2ltcG9ydCBvcmcuanVuaXQuQmVmb3JlOworCitAU3VwcHJlc3NXYXJuaW5ncygicmVzdHJpY3Rpb24iKQorcHVibGljIGFic3RyYWN0IGNsYXNzIExmc1NlcnZlclRlc3QgeworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyB0aW1lb3V0ID0gLyogMTAgc2VjICovIDEwICogMTAwMDsKKworCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IE1pQiA9IDEwMjQgKiAxMDI0OworCisJLyoqIEluLW1lbW9yeSBhcHBsaWNhdGlvbiBzZXJ2ZXI7IHN1YmNsYXNzIG11c3Qgc3RhcnQuICovCisJcHJvdGVjdGVkIEFwcFNlcnZlciBzZXJ2ZXI7CisKKwlwcml2YXRlIFBhdGggdG1wOworCisJcHJpdmF0ZSBQYXRoIGRpcjsKKworCXByb3RlY3RlZCBGaWxlTGZzUmVwb3NpdG9yeSByZXBvc2l0b3J5OworCisJcHJvdGVjdGVkIEZpbGVMZnNTZXJ2bGV0IHNlcnZsZXQ7CisKKwlwdWJsaWMgTGZzU2VydmVyVGVzdCgpIHsKKwkJc3VwZXIoKTsKKwl9CisKKwlwdWJsaWMgUGF0aCBnZXRUZW1wRGlyZWN0b3J5KCkgeworCQlyZXR1cm4gdG1wOworCX0KKworCXB1YmxpYyBQYXRoIGdldERpcigpIHsKKwkJcmV0dXJuIGRpcjsKKwl9CisKKwlAQmVmb3JlCisJcHVibGljIHZvaWQgc2V0dXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJdG1wID0gRmlsZXMuY3JlYXRlVGVtcERpcmVjdG9yeSgiamdpdF90ZXN0XyIpOworCQlzZXJ2ZXIgPSBuZXcgQXBwU2VydmVyKCk7CisJCVNlcnZsZXRDb250ZXh0SGFuZGxlciBhcHAgPSBzZXJ2ZXIuYWRkQ29udGV4dCgiL2xmcyIpOworCQlkaXIgPSBQYXRocy5nZXQodG1wLnRvU3RyaW5nKCksICJsZnMiKTsKKwkJdGhpcy5yZXBvc2l0b3J5ID0gbmV3IEZpbGVMZnNSZXBvc2l0b3J5KG51bGwsIGRpcik7CisJCXNlcnZsZXQgPSBuZXcgRmlsZUxmc1NlcnZsZXQocmVwb3NpdG9yeSwgdGltZW91dCk7CisJCWFwcC5hZGRTZXJ2bGV0KG5ldyBTZXJ2bGV0SG9sZGVyKHNlcnZsZXQpLCAiL29iamVjdHMvKiIpOworCQlzZXJ2ZXIuc2V0VXAoKTsKKwl9CisKKwlAQWZ0ZXIKKwlwdWJsaWMgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlzZXJ2ZXIudGVhckRvd24oKTsKKwkJRmlsZVV0aWxzLmRlbGV0ZSh0bXAudG9GaWxlKCksIEZpbGVVdGlscy5SRUNVUlNJVkUgfCBGaWxlVXRpbHMuUkVUUlkpOworCX0KKworCXByb3RlY3RlZCBBbnlMb25nT2JqZWN0SWQgcHV0Q29udGVudChTdHJpbmcgcykKKwkJCXRocm93cyBJT0V4Y2VwdGlvbiwgQ2xpZW50UHJvdG9jb2xFeGNlcHRpb24geworCQlBbnlMb25nT2JqZWN0SWQgaWQgPSBMb25nT2JqZWN0SWRUZXN0VXRpbHMuaGFzaChzKTsKKwkJcmV0dXJuIHB1dENvbnRlbnQoaWQsIHMpOworCX0KKworCXByb3RlY3RlZCBBbnlMb25nT2JqZWN0SWQgcHV0Q29udGVudChBbnlMb25nT2JqZWN0SWQgaWQsIFN0cmluZyBzKQorCQkJdGhyb3dzIENsaWVudFByb3RvY29sRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CisJCXRyeSAoQ2xvc2VhYmxlSHR0cENsaWVudCBjbGllbnQgPSBIdHRwQ2xpZW50QnVpbGRlci5jcmVhdGUoKS5idWlsZCgpKSB7CisJCQlIdHRwRW50aXR5IGVudGl0eSA9IG5ldyBTdHJpbmdFbnRpdHkocywKKwkJCQkJQ29udGVudFR5cGUuQVBQTElDQVRJT05fT0NURVRfU1RSRUFNKTsKKwkJCVN0cmluZyBoZXhJZCA9IGlkLm5hbWUoKTsKKwkJCUh0dHBQdXQgcmVxdWVzdCA9IG5ldyBIdHRwUHV0KAorCQkJCQlzZXJ2ZXIuZ2V0VVJJKCkgKyAiL2xmcy9vYmplY3RzLyIgKyBoZXhJZCk7CisJCQlyZXF1ZXN0LnNldEVudGl0eShlbnRpdHkpOworCQkJdHJ5IChDbG9zZWFibGVIdHRwUmVzcG9uc2UgcmVzcG9uc2UgPSBjbGllbnQuZXhlY3V0ZShyZXF1ZXN0KSkgeworCQkJCVN0YXR1c0xpbmUgc3RhdHVzTGluZSA9IHJlc3BvbnNlLmdldFN0YXR1c0xpbmUoKTsKKwkJCQlpbnQgc3RhdHVzID0gc3RhdHVzTGluZS5nZXRTdGF0dXNDb2RlKCk7CisJCQkJaWYgKHN0YXR1cyA+PSA0MDApIHsKKwkJCQkJdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlN0YXR1czogIiArIHN0YXR1cyArICIuICIKKwkJCQkJCQkrIHN0YXR1c0xpbmUuZ2V0UmVhc29uUGhyYXNlKCkpOworCQkJCX0KKwkJCX0KKwkJCXJldHVybiBpZDsKKwkJfQorCX0KKworCXByb3RlY3RlZCBMb25nT2JqZWN0SWQgcHV0Q29udGVudChQYXRoIGYpCisJCQl0aHJvd3MgRmlsZU5vdEZvdW5kRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CisJCXRyeSAoQ2xvc2VhYmxlSHR0cENsaWVudCBjbGllbnQgPSBIdHRwQ2xpZW50QnVpbGRlci5jcmVhdGUoKS5idWlsZCgpKSB7CisJCQlMb25nT2JqZWN0SWQgaWQxLCBpZDI7CisJCQlTdHJpbmcgaGV4SWQxLCBoZXhJZDI7CisJCQl0cnkgKERpZ2VzdElucHV0U3RyZWFtIGluID0gbmV3IERpZ2VzdElucHV0U3RyZWFtKAorCQkJCQluZXcgQnVmZmVyZWRJbnB1dFN0cmVhbShGaWxlcy5uZXdJbnB1dFN0cmVhbShmKSksCisJCQkJCUNvbnN0YW50cy5uZXdNZXNzYWdlRGlnZXN0KCkpKSB7CisJCQkJSW5wdXRTdHJlYW1FbnRpdHkgZW50aXR5ID0gbmV3IElucHV0U3RyZWFtRW50aXR5KGluLAorCQkJCQkJRmlsZXMuc2l6ZShmKSwgQ29udGVudFR5cGUuQVBQTElDQVRJT05fT0NURVRfU1RSRUFNKTsKKwkJCQlpZDEgPSBMb25nT2JqZWN0SWRUZXN0VXRpbHMuaGFzaChmKTsKKwkJCQloZXhJZDEgPSBpZDEubmFtZSgpOworCQkJCUh0dHBQdXQgcmVxdWVzdCA9IG5ldyBIdHRwUHV0KAorCQkJCQkJc2VydmVyLmdldFVSSSgpICsgIi9sZnMvb2JqZWN0cy8iICsgaGV4SWQxKTsKKwkJCQlyZXF1ZXN0LnNldEVudGl0eShlbnRpdHkpOworCQkJCUh0dHBSZXNwb25zZSByZXNwb25zZSA9IGNsaWVudC5leGVjdXRlKHJlcXVlc3QpOworCQkJCWNoZWNrUmVzcG9uc2VTdGF0dXMocmVzcG9uc2UpOworCQkJCWlkMiA9IExvbmdPYmplY3RJZC5mcm9tUmF3KGluLmdldE1lc3NhZ2VEaWdlc3QoKS5kaWdlc3QoKSk7CisJCQkJaGV4SWQyID0gaWQyLm5hbWUoKTsKKwkJCQlhc3NlcnRFcXVhbHMoaGV4SWQxLCBoZXhJZDIpOworCQkJfQorCQkJcmV0dXJuIGlkMTsKKwkJfQorCX0KKworCXByaXZhdGUgdm9pZCBjaGVja1Jlc3BvbnNlU3RhdHVzKEh0dHBSZXNwb25zZSByZXNwb25zZSkgeworCQlTdGF0dXNMaW5lIHN0YXR1c0xpbmUgPSByZXNwb25zZS5nZXRTdGF0dXNMaW5lKCk7CisJCWludCBzdGF0dXMgPSBzdGF0dXNMaW5lLmdldFN0YXR1c0NvZGUoKTsKKwkJaWYgKHN0YXR1c0xpbmUuZ2V0U3RhdHVzQ29kZSgpID49IDQwMCkgeworCQkJdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlN0YXR1czogIiArIHN0YXR1cyArICIgIgorCQkJCQkrIHN0YXR1c0xpbmUuZ2V0UmVhc29uUGhyYXNlKCkpOworCQl9CisJCWFzc2VydEVxdWFscygyMDAsIHN0YXR1cyk7CisJfQorCisJcHJvdGVjdGVkIGxvbmcgZ2V0Q29udGVudChBbnlMb25nT2JqZWN0SWQgaWQsIFBhdGggZikgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJU3RyaW5nIGhleElkID0gaWQubmFtZSgpOworCQlyZXR1cm4gZ2V0Q29udGVudChoZXhJZCwgZik7CisJfQorCisJcHJvdGVjdGVkIGxvbmcgZ2V0Q29udGVudChTdHJpbmcgaGV4SWQsIFBhdGggZikgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJdHJ5IChDbG9zZWFibGVIdHRwQ2xpZW50IGNsaWVudCA9IEh0dHBDbGllbnRCdWlsZGVyLmNyZWF0ZSgpLmJ1aWxkKCkpIHsKKwkJCUh0dHBHZXQgcmVxdWVzdCA9IG5ldyBIdHRwR2V0KAorCQkJCQlzZXJ2ZXIuZ2V0VVJJKCkgKyAiL2xmcy9vYmplY3RzLyIgKyBoZXhJZCk7CisJCQlIdHRwUmVzcG9uc2UgcmVzcG9uc2UgPSBjbGllbnQuZXhlY3V0ZShyZXF1ZXN0KTsKKwkJCWNoZWNrUmVzcG9uc2VTdGF0dXMocmVzcG9uc2UpOworCQkJSHR0cEVudGl0eSBlbnRpdHkgPSByZXNwb25zZS5nZXRFbnRpdHkoKTsKKwkJCWxvbmcgcG9zID0gMDsKKwkJCXRyeSAoSW5wdXRTdHJlYW0gaW4gPSBlbnRpdHkuZ2V0Q29udGVudCgpOworCQkJCQlSZWFkYWJsZUJ5dGVDaGFubmVsIGluQ2hhbm5lbCA9IENoYW5uZWxzLm5ld0NoYW5uZWwoaW4pOworCQkJCQlGaWxlQ2hhbm5lbCBvdXRDaGFubmVsID0gRmlsZUNoYW5uZWwub3BlbihmLAorCQkJCQkJCVN0YW5kYXJkT3Blbk9wdGlvbi5DUkVBVEVfTkVXLAorCQkJCQkJCVN0YW5kYXJkT3Blbk9wdGlvbi5XUklURSkpIHsKKwkJCQlsb25nIHRyYW5zZmVycmVkOworCQkJCWRvIHsKKwkJCQkJdHJhbnNmZXJyZWQgPSBvdXRDaGFubmVsLnRyYW5zZmVyRnJvbShpbkNoYW5uZWwsIHBvcywgTWlCKTsKKwkJCQkJcG9zICs9IHRyYW5zZmVycmVkOworCQkJCX0gd2hpbGUgKHRyYW5zZmVycmVkID4gMCk7CisJCQl9CisJCQlyZXR1cm4gcG9zOworCQl9CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhIGZpbGUgd2l0aCByYW5kb20gY29udGVudCwgcmVwZWF0ZWRseSB3cml0aW5nIGEgcmFuZG9tIHN0cmluZyBvZgorCSAqIDRrIGxlbmd0aCB0byB0aGUgZmlsZSB1bnRpbCB0aGUgZmlsZSBoYXMgYXQgbGVhc3QgdGhlIHNwZWNpZmllZCBsZW5ndGguCisJICoKKwkgKiBAcGFyYW0gZgorCSAqICAgICAgICAgICAgZmlsZSB0byBmaWxsCisJICogQHBhcmFtIHNpemUKKwkgKiAgICAgICAgICAgIHNpemUgb2YgdGhlIGZpbGUgdG8gZ2VuZXJhdGUKKwkgKiBAcmV0dXJuIGxlbmd0aCBvZiB0aGUgZ2VuZXJhdGVkIGZpbGUgaW4gYnl0ZXMKKwkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCisJICovCisJcHJvdGVjdGVkIGxvbmcgY3JlYXRlUHNldWRvUmFuZG9tQ29udGVudEZpbGUoUGF0aCBmLCBsb25nIHNpemUpCisJCQl0aHJvd3MgSU9FeGNlcHRpb24geworCQlTZWN1cmVSYW5kb20gcm5kID0gbmV3IFNlY3VyZVJhbmRvbSgpOworCQlieXRlW10gYnVmID0gbmV3IGJ5dGVbNDA5Nl07CisJCXJuZC5uZXh0Qnl0ZXMoYnVmKTsKKwkJQnl0ZUJ1ZmZlciBieXRlYnVmID0gQnl0ZUJ1ZmZlci53cmFwKGJ1Zik7CisJCXRyeSAoRmlsZUNoYW5uZWwgb3V0Q2hhbm5lbCA9IEZpbGVDaGFubmVsLm9wZW4oZiwKKwkJCQlTdGFuZGFyZE9wZW5PcHRpb24uQ1JFQVRFX05FVywgU3RhbmRhcmRPcGVuT3B0aW9uLldSSVRFKSkgeworCQkJbG9uZyBsZW4gPSAwOworCQkJZG8geworCQkJCWxlbiArPSBvdXRDaGFubmVsLndyaXRlKGJ5dGVidWYpOworCQkJCWlmIChieXRlYnVmLnBvc2l0aW9uKCkgPT0gNDA5NikgeworCQkJCQlieXRlYnVmLnJld2luZCgpOworCQkJCX0KKwkJCX0gd2hpbGUgKGxlbiA8IHNpemUpOworCQl9CisJCXJldHVybiBGaWxlcy5zaXplKGYpOworCX0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9sZnMvc2VydmVyL2ZzL1VwbG9hZFRlc3QuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2xmcy9zZXJ2ZXIvZnMvVXBsb2FkVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1YmYwOWIKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9sZnMvc2VydmVyL2ZzL1VwbG9hZFRlc3QuamF2YQpAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSwgTWF0dGhpYXMgU29obiA8bWF0dGhpYXMuc29obmtAc2FwLmNvbT4KKyAqIGFuZCBvdGhlciBjb3B5cmlnaHQgb3duZXJzIGFzIGRvY3VtZW50ZWQgaW4gdGhlIHByb2plY3QncyBJUCBsb2cuCisgKgorICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2MS4wIHdoaWNoCisgKiBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgaXMgcmVwcm9kdWNlZCBiZWxvdywgYW5kIGlzCisgKiBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VkbC12MTAucGhwCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgSW5jLiBub3IgdGhlCisgKiAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCisgKiAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3IKKyAqICAgd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORAorICogQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKyAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGCisgKiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIuZnM7CisKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RmFsc2U7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VHJ1ZTsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5mYWlsOworCitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlczsKK2ltcG9ydCBqYXZhLm5pby5maWxlLlBhdGg7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5QYXRoczsKK2ltcG9ydCBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGZzLmxpYi5BbnlMb25nT2JqZWN0SWQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5sZnMubGliLkxvbmdPYmplY3RJZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0LkxvbmdPYmplY3RJZFRlc3RVdGlsczsKK2ltcG9ydCBvcmcuanVuaXQuVGVzdDsKKworcHVibGljIGNsYXNzIFVwbG9hZFRlc3QgZXh0ZW5kcyBMZnNTZXJ2ZXJUZXN0IHsKKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdFVwbG9hZCgpIHRocm93cyBFeGNlcHRpb24geworCQlTdHJpbmcgVEVYVCA9ICJ0ZXN0IjsKKwkJQW55TG9uZ09iamVjdElkIGlkID0gcHV0Q29udGVudChURVhUKTsKKwkJYXNzZXJ0VHJ1ZSgiZXhwZWN0IG9iamVjdCAiICsgaWQubmFtZSgpICsgIiB0byBleGlzdCIsCisJCQkJcmVwb3NpdG9yeS5nZXRTaXplKGlkKSA+PSAwKTsKKwkJYXNzZXJ0RXF1YWxzKCJleHBlY3RlZCBvYmplY3QgbGVuZ3RoICIgKyBURVhULmxlbmd0aCgpLCBURVhULmxlbmd0aCgpLAorCQkJCXJlcG9zaXRvcnkuZ2V0U2l6ZShpZCkpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdENvcnJ1cHRVcGxvYWQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJU3RyaW5nIFRFWFQgPSAidGVzdCI7CisJCUFueUxvbmdPYmplY3RJZCBpZCA9IExvbmdPYmplY3RJZFRlc3RVdGlscy5oYXNoKCJ3cm9uZ0hhc2giKTsKKwkJdHJ5IHsKKwkJCXB1dENvbnRlbnQoaWQsIFRFWFQpOworCQkJZmFpbCgiZXhwZWN0ZWQgUnVudGltZUV4Y2VwdGlvbihcIlN0YXR1cyA0MDBcIikiKTsKKwkJfSBjYXRjaCAoUnVudGltZUV4Y2VwdGlvbiBlKSB7CisJCQlhc3NlcnRFcXVhbHMoIlN0YXR1czogNDAwLiBCYWQgUmVxdWVzdCIsIGUuZ2V0TWVzc2FnZSgpKTsKKwkJfQorCQlhc3NlcnRGYWxzZSgiZXhwZWN0IG9iamVjdCAiICsgaWQubmFtZSgpICsgIiBub3QgdG8gZXhpc3QiLAorCQkJCXJlcG9zaXRvcnkuZ2V0U2l6ZShpZCkgPj0gMCk7CisJfQorCisJQFN1cHByZXNzV2FybmluZ3MoImJveGluZyIpCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0TGFyZ2VGaWxlVXBsb2FkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCVBhdGggZiA9IFBhdGhzLmdldChnZXRUZW1wRGlyZWN0b3J5KCkudG9TdHJpbmcoKSwgImxhcmdlUmFuZG9tRmlsZSIpOworCQljcmVhdGVQc2V1ZG9SYW5kb21Db250ZW50RmlsZShmLCA1ICogTWlCKTsKKwkJbG9uZyBzdGFydCA9IFN5c3RlbS5uYW5vVGltZSgpOworCQlMb25nT2JqZWN0SWQgaWQgPSBwdXRDb250ZW50KGYpOworCQlTeXN0ZW0ub3V0LnByaW50bG4oCisJCQkJTWVzc2FnZUZvcm1hdC5mb3JtYXQoInVwbG9hZGVkIDEwIE1pQiByYW5kb20gZGF0YSBpbiB7MH1tcyIsCisJCQkJCQkoU3lzdGVtLm5hbm9UaW1lKCkgLSBzdGFydCkgLyAxZTYpKTsKKwkJYXNzZXJ0VHJ1ZSgiZXhwZWN0IG9iamVjdCAiICsgaWQubmFtZSgpICsgIiB0byBleGlzdCIsCisJCQkJcmVwb3NpdG9yeS5nZXRTaXplKGlkKSA+PSAwKTsKKwkJYXNzZXJ0RXF1YWxzKCJleHBlY3RlZCBvYmplY3QgbGVuZ3RoICIgKyBGaWxlcy5zaXplKGYpLCBGaWxlcy5zaXplKGYpLAorCQkJCXJlcG9zaXRvcnkuZ2V0U2l6ZShpZCkpOworCX0KK30KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci8uY2xhc3NwYXRoIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLy5jbGFzc3BhdGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRhMmJlNwotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci8uY2xhc3NwYXRoCkBAIC0wLDAgKzEsOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxjbGFzc3BhdGg+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0icmVzb3VyY2VzIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KYXZhU0UtMS43Ii8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Cis8L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci8uZmJwcmVmcyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci8uZmJwcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWEwNzY3Ci0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLy5mYnByZWZzCkBAIC0wLDAgKzEsMTI1IEBACisjRmluZEJ1Z3MgVXNlciBQcmVmZXJlbmNlcworI01vbiBNYXkgMDQgMTY6MjQ6MTMgUERUIDIwMDkKK2RldGVjdG9yQXBwZW5kaW5nVG9Bbk9iamVjdE91dHB1dFN0cmVhbT1BcHBlbmRpbmdUb0FuT2JqZWN0T3V0cHV0U3RyZWFtfHRydWUKK2RldGVjdG9yQmFkQXBwbGV0Q29uc3RydWN0b3I9QmFkQXBwbGV0Q29uc3RydWN0b3J8ZmFsc2UKK2RldGVjdG9yQmFkUmVzdWx0U2V0QWNjZXNzPUJhZFJlc3VsdFNldEFjY2Vzc3x0cnVlCitkZXRlY3RvckJhZFN5bnRheEZvclJlZ3VsYXJFeHByZXNzaW9uPUJhZFN5bnRheEZvclJlZ3VsYXJFeHByZXNzaW9ufHRydWUKK2RldGVjdG9yQmFkVXNlT2ZSZXR1cm5WYWx1ZT1CYWRVc2VPZlJldHVyblZhbHVlfHRydWUKK2RldGVjdG9yQmFkbHlPdmVycmlkZGVuQWRhcHRlcj1CYWRseU92ZXJyaWRkZW5BZGFwdGVyfHRydWUKK2RldGVjdG9yQm9vbGVhblJldHVybk51bGw9Qm9vbGVhblJldHVybk51bGx8dHJ1ZQorZGV0ZWN0b3JDYWxsVG9VbnN1cHBvcnRlZE1ldGhvZD1DYWxsVG9VbnN1cHBvcnRlZE1ldGhvZHx0cnVlCitkZXRlY3RvckNoZWNrSW1tdXRhYmxlQW5ub3RhdGlvbj1DaGVja0ltbXV0YWJsZUFubm90YXRpb258dHJ1ZQorZGV0ZWN0b3JDaGVja1R5cGVRdWFsaWZpZXJzPUNoZWNrVHlwZVF1YWxpZmllcnN8dHJ1ZQorZGV0ZWN0b3JDbG9uZUlkaW9tPUNsb25lSWRpb218ZmFsc2UKK2RldGVjdG9yQ29tcGFyYXRvcklkaW9tPUNvbXBhcmF0b3JJZGlvbXx0cnVlCitkZXRlY3RvckNvbmZ1c2VkSW5oZXJpdGFuY2U9Q29uZnVzZWRJbmhlcml0YW5jZXx0cnVlCitkZXRlY3RvckNvbmZ1c2lvbkJldHdlZW5Jbmhlcml0ZWRBbmRPdXRlck1ldGhvZD1Db25mdXNpb25CZXR3ZWVuSW5oZXJpdGVkQW5kT3V0ZXJNZXRob2R8dHJ1ZQorZGV0ZWN0b3JDcm9zc1NpdGVTY3JpcHRpbmc9Q3Jvc3NTaXRlU2NyaXB0aW5nfHRydWUKK2RldGVjdG9yRG9JbnNpZGVEb1ByaXZpbGVnZWQ9RG9JbnNpZGVEb1ByaXZpbGVnZWR8dHJ1ZQorZGV0ZWN0b3JEb250Q2F0Y2hJbGxlZ2FsTW9uaXRvclN0YXRlRXhjZXB0aW9uPURvbnRDYXRjaElsbGVnYWxNb25pdG9yU3RhdGVFeGNlcHRpb258dHJ1ZQorZGV0ZWN0b3JEb250VXNlRW51bT1Eb250VXNlRW51bXx0cnVlCitkZXRlY3RvckRyb3BwZWRFeGNlcHRpb249RHJvcHBlZEV4Y2VwdGlvbnx0cnVlCitkZXRlY3RvckR1bWJNZXRob2RJbnZvY2F0aW9ucz1EdW1iTWV0aG9kSW52b2NhdGlvbnN8dHJ1ZQorZGV0ZWN0b3JEdW1iTWV0aG9kcz1EdW1iTWV0aG9kc3x0cnVlCitkZXRlY3RvckR1cGxpY2F0ZUJyYW5jaGVzPUR1cGxpY2F0ZUJyYW5jaGVzfHRydWUKK2RldGVjdG9yRW1wdHlaaXBGaWxlRW50cnk9RW1wdHlaaXBGaWxlRW50cnl8dHJ1ZQorZGV0ZWN0b3JFcXVhbHNPcGVyYW5kU2hvdWxkSGF2ZUNsYXNzQ29tcGF0aWJsZVdpdGhUaGlzPUVxdWFsc09wZXJhbmRTaG91bGRIYXZlQ2xhc3NDb21wYXRpYmxlV2l0aFRoaXN8dHJ1ZQorZGV0ZWN0b3JGaW5hbGl6ZXJOdWxsc0ZpZWxkcz1GaW5hbGl6ZXJOdWxsc0ZpZWxkc3x0cnVlCitkZXRlY3RvckZpbmRCYWRDYXN0Mj1GaW5kQmFkQ2FzdDJ8dHJ1ZQorZGV0ZWN0b3JGaW5kQmFkRm9yTG9vcD1GaW5kQmFkRm9yTG9vcHx0cnVlCitkZXRlY3RvckZpbmRDaXJjdWxhckRlcGVuZGVuY2llcz1GaW5kQ2lyY3VsYXJEZXBlbmRlbmNpZXN8ZmFsc2UKK2RldGVjdG9yRmluZERlYWRMb2NhbFN0b3Jlcz1GaW5kRGVhZExvY2FsU3RvcmVzfHRydWUKK2RldGVjdG9yRmluZERvdWJsZUNoZWNrPUZpbmREb3VibGVDaGVja3x0cnVlCitkZXRlY3RvckZpbmRFbXB0eVN5bmNocm9uaXplZEJsb2NrPUZpbmRFbXB0eVN5bmNocm9uaXplZEJsb2NrfHRydWUKK2RldGVjdG9yRmluZEZpZWxkU2VsZkFzc2lnbm1lbnQ9RmluZEZpZWxkU2VsZkFzc2lnbm1lbnR8dHJ1ZQorZGV0ZWN0b3JGaW5kRmluYWxpemVJbnZvY2F0aW9ucz1GaW5kRmluYWxpemVJbnZvY2F0aW9uc3x0cnVlCitkZXRlY3RvckZpbmRGbG9hdEVxdWFsaXR5PUZpbmRGbG9hdEVxdWFsaXR5fHRydWUKK2RldGVjdG9yRmluZEhFbWlzbWF0Y2g9RmluZEhFbWlzbWF0Y2h8dHJ1ZQorZGV0ZWN0b3JGaW5kSW5jb25zaXN0ZW50U3luYzI9RmluZEluY29uc2lzdGVudFN5bmMyfHRydWUKK2RldGVjdG9yRmluZEpTUjE2NkxvY2tNb25pdG9yZW50ZXI9RmluZEpTUjE2NkxvY2tNb25pdG9yZW50ZXJ8dHJ1ZQorZGV0ZWN0b3JGaW5kTG9jYWxTZWxmQXNzaWdubWVudDI9RmluZExvY2FsU2VsZkFzc2lnbm1lbnQyfHRydWUKK2RldGVjdG9yRmluZE1hc2tlZEZpZWxkcz1GaW5kTWFza2VkRmllbGRzfHRydWUKK2RldGVjdG9yRmluZE1pc21hdGNoZWRXYWl0T3JOb3RpZnk9RmluZE1pc21hdGNoZWRXYWl0T3JOb3RpZnl8dHJ1ZQorZGV0ZWN0b3JGaW5kTmFrZWROb3RpZnk9RmluZE5ha2VkTm90aWZ5fHRydWUKK2RldGVjdG9yRmluZE5vblNlcmlhbGl6YWJsZVN0b3JlSW50b1Nlc3Npb249RmluZE5vblNlcmlhbGl6YWJsZVN0b3JlSW50b1Nlc3Npb258dHJ1ZQorZGV0ZWN0b3JGaW5kTm9uU2VyaWFsaXphYmxlVmFsdWVQYXNzZWRUb1dyaXRlT2JqZWN0PUZpbmROb25TZXJpYWxpemFibGVWYWx1ZVBhc3NlZFRvV3JpdGVPYmplY3R8dHJ1ZQorZGV0ZWN0b3JGaW5kTm9uU2hvcnRDaXJjdWl0PUZpbmROb25TaG9ydENpcmN1aXR8dHJ1ZQorZGV0ZWN0b3JGaW5kTnVsbERlcmVmPUZpbmROdWxsRGVyZWZ8dHJ1ZQorZGV0ZWN0b3JGaW5kTnVsbERlcmVmc0ludm9sdmluZ05vblNob3J0Q2lyY3VpdEV2YWx1YXRpb249RmluZE51bGxEZXJlZnNJbnZvbHZpbmdOb25TaG9ydENpcmN1aXRFdmFsdWF0aW9ufHRydWUKK2RldGVjdG9yRmluZE9wZW5TdHJlYW09RmluZE9wZW5TdHJlYW18dHJ1ZQorZGV0ZWN0b3JGaW5kUHV6emxlcnM9RmluZFB1enpsZXJzfHRydWUKK2RldGVjdG9yRmluZFJlZkNvbXBhcmlzb249RmluZFJlZkNvbXBhcmlzb258dHJ1ZQorZGV0ZWN0b3JGaW5kUmV0dXJuUmVmPUZpbmRSZXR1cm5SZWZ8dHJ1ZQorZGV0ZWN0b3JGaW5kUnVuSW52b2NhdGlvbnM9RmluZFJ1bkludm9jYXRpb25zfHRydWUKK2RldGVjdG9yRmluZFNlbGZDb21wYXJpc29uPUZpbmRTZWxmQ29tcGFyaXNvbnx0cnVlCitkZXRlY3RvckZpbmRTZWxmQ29tcGFyaXNvbjI9RmluZFNlbGZDb21wYXJpc29uMnx0cnVlCitkZXRlY3RvckZpbmRTbGVlcFdpdGhMb2NrSGVsZD1GaW5kU2xlZXBXaXRoTG9ja0hlbGR8dHJ1ZQorZGV0ZWN0b3JGaW5kU3Bpbkxvb3A9RmluZFNwaW5Mb29wfHRydWUKK2RldGVjdG9yRmluZFNxbEluamVjdGlvbj1GaW5kU3FsSW5qZWN0aW9ufHRydWUKK2RldGVjdG9yRmluZFR3b0xvY2tXYWl0PUZpbmRUd29Mb2NrV2FpdHx0cnVlCitkZXRlY3RvckZpbmRVbmNhbGxlZFByaXZhdGVNZXRob2RzPUZpbmRVbmNhbGxlZFByaXZhdGVNZXRob2RzfHRydWUKK2RldGVjdG9yRmluZFVuY29uZGl0aW9uYWxXYWl0PUZpbmRVbmNvbmRpdGlvbmFsV2FpdHx0cnVlCitkZXRlY3RvckZpbmRVbmluaXRpYWxpemVkR2V0PUZpbmRVbmluaXRpYWxpemVkR2V0fHRydWUKK2RldGVjdG9yRmluZFVucmVsYXRlZFR5cGVzSW5HZW5lcmljQ29udGFpbmVyPUZpbmRVbnJlbGF0ZWRUeXBlc0luR2VuZXJpY0NvbnRhaW5lcnx0cnVlCitkZXRlY3RvckZpbmRVbnJlbGVhc2VkTG9jaz1GaW5kVW5yZWxlYXNlZExvY2t8dHJ1ZQorZGV0ZWN0b3JGaW5kVW5zYXRpc2ZpZWRPYmxpZ2F0aW9uPUZpbmRVbnNhdGlzZmllZE9ibGlnYXRpb258dHJ1ZQorZGV0ZWN0b3JGaW5kVW5zeW5jR2V0PUZpbmRVbnN5bmNHZXR8dHJ1ZQorZGV0ZWN0b3JGaW5kVXNlbGVzc0NvbnRyb2xGbG93PUZpbmRVc2VsZXNzQ29udHJvbEZsb3d8dHJ1ZQorZGV0ZWN0b3JGb3JtYXRTdHJpbmdDaGVja2VyPUZvcm1hdFN0cmluZ0NoZWNrZXJ8dHJ1ZQorZGV0ZWN0b3JIdWdlU2hhcmVkU3RyaW5nQ29uc3RhbnRzPUh1Z2VTaGFyZWRTdHJpbmdDb25zdGFudHN8dHJ1ZQorZGV0ZWN0b3JJRGl2UmVzdWx0Q2FzdFRvRG91YmxlPUlEaXZSZXN1bHRDYXN0VG9Eb3VibGV8dHJ1ZQorZGV0ZWN0b3JJbmNvbXBhdE1hc2s9SW5jb21wYXRNYXNrfHRydWUKK2RldGVjdG9ySW5jb25zaXN0ZW50QW5ub3RhdGlvbnM9SW5jb25zaXN0ZW50QW5ub3RhdGlvbnN8dHJ1ZQorZGV0ZWN0b3JJbmVmZmljaWVudE1lbWJlckFjY2Vzcz1JbmVmZmljaWVudE1lbWJlckFjY2Vzc3xmYWxzZQorZGV0ZWN0b3JJbmVmZmljaWVudFRvQXJyYXk9SW5lZmZpY2llbnRUb0FycmF5fHRydWUKK2RldGVjdG9ySW5maW5pdGVMb29wPUluZmluaXRlTG9vcHx0cnVlCitkZXRlY3RvckluZmluaXRlUmVjdXJzaXZlTG9vcD1JbmZpbml0ZVJlY3Vyc2l2ZUxvb3B8dHJ1ZQorZGV0ZWN0b3JJbmZpbml0ZVJlY3Vyc2l2ZUxvb3AyPUluZmluaXRlUmVjdXJzaXZlTG9vcDJ8ZmFsc2UKK2RldGVjdG9ySW5oZXJpdGFuY2VVbnNhZmVHZXRSZXNvdXJjZT1Jbmhlcml0YW5jZVVuc2FmZUdldFJlc291cmNlfHRydWUKK2RldGVjdG9ySW5pdGlhbGl6YXRpb25DaGFpbj1Jbml0aWFsaXphdGlvbkNoYWlufHRydWUKK2RldGVjdG9ySW5zdGFudGlhdGVTdGF0aWNDbGFzcz1JbnN0YW50aWF0ZVN0YXRpY0NsYXNzfHRydWUKK2RldGVjdG9ySW52YWxpZEpVbml0VGVzdD1JbnZhbGlkSlVuaXRUZXN0fHRydWUKK2RldGVjdG9ySXRlcmF0b3JJZGlvbXM9SXRlcmF0b3JJZGlvbXN8dHJ1ZQorZGV0ZWN0b3JMYXp5SW5pdD1MYXp5SW5pdHx0cnVlCitkZXRlY3RvckxvYWRPZktub3duTnVsbFZhbHVlPUxvYWRPZktub3duTnVsbFZhbHVlfHRydWUKK2RldGVjdG9yTWV0aG9kUmV0dXJuQ2hlY2s9TWV0aG9kUmV0dXJuQ2hlY2t8dHJ1ZQorZGV0ZWN0b3JNdWx0aXRocmVhZGVkSW5zdGFuY2VBY2Nlc3M9TXVsdGl0aHJlYWRlZEluc3RhbmNlQWNjZXNzfHRydWUKK2RldGVjdG9yTXV0YWJsZUxvY2s9TXV0YWJsZUxvY2t8dHJ1ZQorZGV0ZWN0b3JNdXRhYmxlU3RhdGljRmllbGRzPU11dGFibGVTdGF0aWNGaWVsZHN8dHJ1ZQorZGV0ZWN0b3JOYW1pbmc9TmFtaW5nfHRydWUKK2RldGVjdG9yTnVtYmVyQ29uc3RydWN0b3I9TnVtYmVyQ29uc3RydWN0b3J8dHJ1ZQorZGV0ZWN0b3JPdmVycmlkaW5nRXF1YWxzTm90U3ltbWV0cmljYWw9T3ZlcnJpZGluZ0VxdWFsc05vdFN5bW1ldHJpY2FsfHRydWUKK2RldGVjdG9yUHJlZmVyWmVyb0xlbmd0aEFycmF5cz1QcmVmZXJaZXJvTGVuZ3RoQXJyYXlzfHRydWUKK2RldGVjdG9yUHVibGljU2VtYXBob3Jlcz1QdWJsaWNTZW1hcGhvcmVzfGZhbHNlCitkZXRlY3RvclF1ZXN0aW9uYWJsZUJvb2xlYW5Bc3NpZ25tZW50PVF1ZXN0aW9uYWJsZUJvb2xlYW5Bc3NpZ25tZW50fHRydWUKK2RldGVjdG9yUmVhZFJldHVyblNob3VsZEJlQ2hlY2tlZD1SZWFkUmV0dXJuU2hvdWxkQmVDaGVja2VkfHRydWUKK2RldGVjdG9yUmVkdW5kYW50SW50ZXJmYWNlcz1SZWR1bmRhbnRJbnRlcmZhY2VzfHRydWUKK2RldGVjdG9yUmVwZWF0ZWRDb25kaXRpb25hbHM9UmVwZWF0ZWRDb25kaXRpb25hbHN8dHJ1ZQorZGV0ZWN0b3JSdW50aW1lRXhjZXB0aW9uQ2FwdHVyZT1SdW50aW1lRXhjZXB0aW9uQ2FwdHVyZXx0cnVlCitkZXRlY3RvclNlcmlhbGl6YWJsZUlkaW9tPVNlcmlhbGl6YWJsZUlkaW9tfHRydWUKK2RldGVjdG9yU3RhcnRJbkNvbnN0cnVjdG9yPVN0YXJ0SW5Db25zdHJ1Y3Rvcnx0cnVlCitkZXRlY3RvclN0YXRpY0NhbGVuZGFyRGV0ZWN0b3I9U3RhdGljQ2FsZW5kYXJEZXRlY3Rvcnx0cnVlCitkZXRlY3RvclN0cmluZ0NvbmNhdGVuYXRpb249U3RyaW5nQ29uY2F0ZW5hdGlvbnx0cnVlCitkZXRlY3RvclN1cGVyZmx1b3VzSW5zdGFuY2VPZj1TdXBlcmZsdW91c0luc3RhbmNlT2Z8dHJ1ZQorZGV0ZWN0b3JTdXNwaWNpb3VzVGhyZWFkSW50ZXJydXB0ZWQ9U3VzcGljaW91c1RocmVhZEludGVycnVwdGVkfHRydWUKK2RldGVjdG9yU3dpdGNoRmFsbHRocm91Z2g9U3dpdGNoRmFsbHRocm91Z2h8dHJ1ZQorZGV0ZWN0b3JTeW5jaHJvbml6ZUFuZE51bGxDaGVja0ZpZWxkPVN5bmNocm9uaXplQW5kTnVsbENoZWNrRmllbGR8dHJ1ZQorZGV0ZWN0b3JTeW5jaHJvbml6ZU9uQ2xhc3NMaXRlcmFsTm90R2V0Q2xhc3M9U3luY2hyb25pemVPbkNsYXNzTGl0ZXJhbE5vdEdldENsYXNzfHRydWUKK2RldGVjdG9yU3luY2hyb25pemluZ09uQ29udGVudHNPZkZpZWxkVG9Qcm90ZWN0RmllbGQ9U3luY2hyb25pemluZ09uQ29udGVudHNPZkZpZWxkVG9Qcm90ZWN0RmllbGR8dHJ1ZQorZGV0ZWN0b3JVUkxQcm9ibGVtcz1VUkxQcm9ibGVtc3x0cnVlCitkZXRlY3RvclVuY2FsbGFibGVNZXRob2RPZkFub255bW91c0NsYXNzPVVuY2FsbGFibGVNZXRob2RPZkFub255bW91c0NsYXNzfHRydWUKK2RldGVjdG9yVW5uZWNlc3NhcnlNYXRoPVVubmVjZXNzYXJ5TWF0aHx0cnVlCitkZXRlY3RvclVucmVhZEZpZWxkcz1VbnJlYWRGaWVsZHN8dHJ1ZQorZGV0ZWN0b3JVc2VPYmplY3RFcXVhbHM9VXNlT2JqZWN0RXF1YWxzfGZhbHNlCitkZXRlY3RvclVzZWxlc3NTdWJjbGFzc01ldGhvZD1Vc2VsZXNzU3ViY2xhc3NNZXRob2R8ZmFsc2UKK2RldGVjdG9yVmFyQXJnc1Byb2JsZW1zPVZhckFyZ3NQcm9ibGVtc3x0cnVlCitkZXRlY3RvclZvbGF0aWxlVXNhZ2U9Vm9sYXRpbGVVc2FnZXx0cnVlCitkZXRlY3RvcldhaXRJbkxvb3A9V2FpdEluTG9vcHx0cnVlCitkZXRlY3Rvcldyb25nTWFwSXRlcmF0b3I9V3JvbmdNYXBJdGVyYXRvcnx0cnVlCitkZXRlY3RvclhNTEZhY3RvcnlCeXBhc3M9WE1MRmFjdG9yeUJ5cGFzc3x0cnVlCitkZXRlY3Rvcl90aHJlc2hvbGQ9MgorZWZmb3J0PWRlZmF1bHQKK2V4Y2x1ZGVmaWx0ZXIwPWZpbmRCdWdzL0ZpbmRCdWdzRXhjbHVkZUZpbHRlci54bWwKK2ZpbHRlcl9zZXR0aW5ncz1NZWRpdW18QkFEX1BSQUNUSUNFLENPUlJFQ1RORVNTLE1UX0NPUlJFQ1RORVNTLFBFUkZPUk1BTkNFLFNUWUxFfGZhbHNlCitmaWx0ZXJfc2V0dGluZ3NfbmVnPU1BTElDSU9VU19DT0RFLE5PSVNFLEkxOE4sU0VDVVJJVFksRVhQRVJJTUVOVEFMfAorcnVuX2F0X2Z1bGxfYnVpbGQ9dHJ1ZQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLy5naXRpZ25vcmUgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzRlMGUwCi0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLy5naXRpZ25vcmUKQEAgLTAsMCArMSwyIEBACisvYmluCisvdGFyZ2V0CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIvLnByb2plY3QgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIvLnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM3OWZlYQotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci8ucHJvamVjdApAQCAtMCwwICsxLDM0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3REZXNjcmlwdGlvbj4KKwk8bmFtZT5vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXI8L25hbWU+CisJPGNvbW1lbnQ+PC9jb21tZW50PgorCTxwcm9qZWN0cz4KKwk8L3Byb2plY3RzPgorCTxidWlsZFNwZWM+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5hcGkudG9vbHMuYXBpQW5hbHlzaXNCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwk8L2J1aWxkU3BlYz4KKwk8bmF0dXJlcz4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5hcGkudG9vbHMuYXBpQW5hbHlzaXNOYXR1cmU8L25hdHVyZT4KKwk8L25hdHVyZXM+Cis8L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5ZjI2YzAKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCkBAIC0wLDAgKzEsMiBAQAorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK2VuY29kaW5nLzxwcm9qZWN0Pj1VVEYtOApkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZnMgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTBhZDIyCi0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZnMKQEAgLTAsMCArMSwyIEBACitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorbGluZS5zZXBhcmF0b3I9XG4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmMzlkMTYKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCkBAIC0wLDAgKzEsMzk4IEBACitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuYW5ub3RhdGlvbi5pbmhlcml0TnVsbEFubm90YXRpb25zPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5hbm5vdGF0aW9uLm1pc3NpbmdOb25OdWxsQnlEZWZhdWx0QW5ub3RhdGlvbj1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmFubm90YXRpb24ubm9ubnVsbD1vcmcuZWNsaXBzZS5qZHQuYW5ub3RhdGlvbi5Ob25OdWxsCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5hbm5vdGF0aW9uLm5vbm51bGxieWRlZmF1bHQ9b3JnLmVjbGlwc2UuamR0LmFubm90YXRpb24uTm9uTnVsbEJ5RGVmYXVsdAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuYW5ub3RhdGlvbi5udWxsYWJsZT1vcmcuZWNsaXBzZS5qZHQuYW5ub3RhdGlvbi5OdWxsYWJsZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuYW5ub3RhdGlvbi5udWxsYW5hbHlzaXM9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5tZXRob2RQYXJhbWV0ZXJzPWRvIG5vdCBnZW5lcmF0ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS43CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5saW5lTnVtYmVyPWdlbmVyYXRlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5sb2NhbFZhcmlhYmxlPWdlbmVyYXRlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5zb3VyY2VGaWxlPWdlbmVyYXRlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kb2MuY29tbWVudC5zdXBwb3J0PWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hdXRvYm94aW5nPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uY29tcGFyaW5nSWRlbnRpY2FsPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlYWRDb2RlPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5leHBsaWNpdGx5Q2xvc2VkQXV0b0Nsb3NlYWJsZT1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmFsbHRocm91Z2hDYXNlPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmF0YWxPcHRpb25hbEVycm9yPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNsdWRlTnVsbEluZm9Gcm9tQXNzZXJ0cz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2M9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzRGVwcmVjYXRlZFJlZj1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc05vdFZpc2libGVSZWY9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXByaXZhdGUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlZmF1bHRDYXNlPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdFbnVtQ2FzZURlc3BpdGVEZWZhdWx0PWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdIYXNoQ29kZU1ldGhvZD1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNPdmVycmlkaW5nPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNWaXNpYmlsaXR5PXByb3RlY3RlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ0Rlc2NyaXB0aW9uPXJldHVybl90YWcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc01ldGhvZFR5cGVQYXJhbWV0ZXJzPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc092ZXJyaWRpbmc9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzVmlzaWJpbGl0eT1wcml2YXRlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb25Gb3JJbnRlcmZhY2VNZXRob2RJbXBsZW1lbnRhdGlvbj1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1N5bmNocm9uaXplZE9uSW5oZXJpdGVkTWV0aG9kPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9uRXh0ZXJuYWxpemVkU3RyaW5nTGl0ZXJhbD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbm51bGxQYXJhbWV0ZXJBbm5vdGF0aW9uRHJvcHBlZD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm51bGxBbm5vdGF0aW9uSW5mZXJlbmNlQ29uZmxpY3Q9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubnVsbFJlZmVyZW5jZT1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5udWxsU3BlY1Zpb2xhdGlvbj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5udWxsVW5jaGVja2VkQ29udmVyc2lvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBhcmFtZXRlckFzc2lnbm1lbnQ9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvdGVudGlhbE51bGxSZWZlcmVuY2U9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3RlbnRpYWxseVVuY2xvc2VkQ2xvc2VhYmxlPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5yYXdUeXBlUmVmZXJlbmNlPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5yZWR1bmRhbnROdWxsQW5ub3RhdGlvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnJlZHVuZGFudE51bGxDaGVjaz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnJlZHVuZGFudFNwZWNpZmljYXRpb25PZlR5cGVBcmd1bWVudHM9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnJlZHVuZGFudFN1cGVyaW50ZXJmYWNlPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnJlcG9ydE1ldGhvZENhbkJlUG90ZW50aWFsbHlTdGF0aWM9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnJlcG9ydE1ldGhvZENhbkJlU3RhdGljPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NPcHRpb25hbEVycm9ycz1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGFjdGljTnVsbEFuYWx5c2lzRm9yRmllbGRzPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuYXZvaWRhYmxlR2VuZXJpY1R5cGVQcm9ibGVtcz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNsb3NlZENsb3NlYWJsZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25FeGVtcHRFeGNlcHRpb25BbmRUaHJvd2FibGU9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbkluY2x1ZGVEb2NDb21tZW50UmVmZXJlbmNlPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTGFiZWw9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTG9jYWw9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkT2JqZWN0QWxsb2NhdGlvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlckluY2x1ZGVEb2NDb21tZW50UmVmZXJlbmNlPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUHJpdmF0ZU1lbWJlcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRUeXBlUGFyYW1ldGVyPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRXYXJuaW5nVG9rZW49d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuNworb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWduX3R5cGVfbWVtYmVyc19vbl9jb2x1bW5zPWZhbHNlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9hcmd1bWVudHNfaW5fYWxsb2NhdGlvbl9leHByZXNzaW9uPTE2CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9hcmd1bWVudHNfaW5fYW5ub3RhdGlvbj0wCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9hcmd1bWVudHNfaW5fZW51bV9jb25zdGFudD0xNgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfYXJndW1lbnRzX2luX2V4cGxpY2l0X2NvbnN0cnVjdG9yX2NhbGw9MTYKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2FyZ3VtZW50c19pbl9tZXRob2RfaW52b2NhdGlvbj0xNgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfYXJndW1lbnRzX2luX3F1YWxpZmllZF9hbGxvY2F0aW9uX2V4cHJlc3Npb249MTYKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2Fzc2lnbm1lbnQ9MAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfYmluYXJ5X2V4cHJlc3Npb249MTYKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2NvbXBhY3RfaWY9MTYKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2NvbmRpdGlvbmFsX2V4cHJlc3Npb249ODAKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2VudW1fY29uc3RhbnRzPTAKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2V4cHJlc3Npb25zX2luX2FycmF5X2luaXRpYWxpemVyPTE2CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9tZXRob2RfZGVjbGFyYXRpb249MAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfbXVsdGlwbGVfZmllbGRzPTE2CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9wYXJhbWV0ZXJzX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uPTE2CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9wYXJhbWV0ZXJzX2luX21ldGhvZF9kZWNsYXJhdGlvbj0xNgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfcmVzb3VyY2VzX2luX3RyeT04MAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3Jfc2VsZWN0b3JfaW5fbWV0aG9kX2ludm9jYXRpb249MTYKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX3N1cGVyY2xhc3NfaW5fdHlwZV9kZWNsYXJhdGlvbj0xNgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3Jfc3VwZXJpbnRlcmZhY2VzX2luX2VudW1fZGVjbGFyYXRpb249MTYKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX3N1cGVyaW50ZXJmYWNlc19pbl90eXBlX2RlY2xhcmF0aW9uPTE2CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl90aHJvd3NfY2xhdXNlX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uPTE2CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl90aHJvd3NfY2xhdXNlX2luX21ldGhvZF9kZWNsYXJhdGlvbj0xNgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfdW5pb25fdHlwZV9pbl9tdWx0aWNhdGNoPTE2CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYWZ0ZXJfaW1wb3J0cz0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYWZ0ZXJfcGFja2FnZT0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYmVmb3JlX2ZpZWxkPTEKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5ibGFua19saW5lc19iZWZvcmVfZmlyc3RfY2xhc3NfYm9keV9kZWNsYXJhdGlvbj0wCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYmVmb3JlX2ltcG9ydHM9MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2JlZm9yZV9tZW1iZXJfdHlwZT0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYmVmb3JlX21ldGhvZD0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYmVmb3JlX25ld19jaHVuaz0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYmVmb3JlX3BhY2thZ2U9MAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2JldHdlZW5faW1wb3J0X2dyb3Vwcz0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYmV0d2Vlbl90eXBlX2RlY2xhcmF0aW9ucz0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYnJhY2VfcG9zaXRpb25fZm9yX2Fubm90YXRpb25fdHlwZV9kZWNsYXJhdGlvbj1lbmRfb2ZfbGluZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9hbm9ueW1vdXNfdHlwZV9kZWNsYXJhdGlvbj1lbmRfb2ZfbGluZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9hcnJheV9pbml0aWFsaXplcj1lbmRfb2ZfbGluZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9ibG9jaz1lbmRfb2ZfbGluZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9ibG9ja19pbl9jYXNlPWVuZF9vZl9saW5lCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYnJhY2VfcG9zaXRpb25fZm9yX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uPWVuZF9vZl9saW5lCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYnJhY2VfcG9zaXRpb25fZm9yX2VudW1fY29uc3RhbnQ9ZW5kX29mX2xpbmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5icmFjZV9wb3NpdGlvbl9mb3JfZW51bV9kZWNsYXJhdGlvbj1lbmRfb2ZfbGluZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9tZXRob2RfZGVjbGFyYXRpb249ZW5kX29mX2xpbmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5icmFjZV9wb3NpdGlvbl9mb3Jfc3dpdGNoPWVuZF9vZl9saW5lCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYnJhY2VfcG9zaXRpb25fZm9yX3R5cGVfZGVjbGFyYXRpb249ZW5kX29mX2xpbmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmNsZWFyX2JsYW5rX2xpbmVzPWZhbHNlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5jbGVhcl9ibGFua19saW5lc19pbl9ibG9ja19jb21tZW50PWZhbHNlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5jbGVhcl9ibGFua19saW5lc19pbl9qYXZhZG9jX2NvbW1lbnQ9ZmFsc2UKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmZvcm1hdF9ibG9ja19jb21tZW50cz10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5mb3JtYXRfY29tbWVudHM9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuZm9ybWF0X2hlYWRlcj1mYWxzZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuZm9ybWF0X2h0bWw9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuZm9ybWF0X2phdmFkb2NfY29tbWVudHM9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuZm9ybWF0X2xpbmVfY29tbWVudHM9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuZm9ybWF0X3NvdXJjZV9jb2RlPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmluZGVudF9wYXJhbWV0ZXJfZGVzY3JpcHRpb249dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuaW5kZW50X3Jvb3RfdGFncz10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5pbnNlcnRfbmV3X2xpbmVfYmVmb3JlX3Jvb3RfdGFncz1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50Lmluc2VydF9uZXdfbGluZV9mb3JfcGFyYW1ldGVyPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQubGluZV9sZW5ndGg9ODAKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50Lm5ld19saW5lc19hdF9ibG9ja19ib3VuZGFyaWVzPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50Lm5ld19saW5lc19hdF9qYXZhZG9jX2JvdW5kYXJpZXM9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQucHJlc2VydmVfd2hpdGVfc3BhY2VfYmV0d2Vlbl9jb2RlX2FuZF9saW5lX2NvbW1lbnRzPWZhbHNlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tcGFjdF9lbHNlX2lmPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb250aW51YXRpb25faW5kZW50YXRpb249Mgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbnRpbnVhdGlvbl9pbmRlbnRhdGlvbl9mb3JfYXJyYXlfaW5pdGlhbGl6ZXI9Mgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmRpc2FibGluZ190YWc9QGZvcm1hdHRlclw6b2ZmCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuZW5hYmxpbmdfdGFnPUBmb3JtYXR0ZXJcOm9uCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuZm9ybWF0X2d1YXJkaWFuX2NsYXVzZV9vbl9vbmVfbGluZT1mYWxzZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmZvcm1hdF9saW5lX2NvbW1lbnRfc3RhcnRpbmdfb25fZmlyc3RfY29sdW1uPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfYm9keV9kZWNsYXJhdGlvbnNfY29tcGFyZV90b19hbm5vdGF0aW9uX2RlY2xhcmF0aW9uX2hlYWRlcj10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50X2JvZHlfZGVjbGFyYXRpb25zX2NvbXBhcmVfdG9fZW51bV9jb25zdGFudF9oZWFkZXI9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluZGVudF9ib2R5X2RlY2xhcmF0aW9uc19jb21wYXJlX3RvX2VudW1fZGVjbGFyYXRpb25faGVhZGVyPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfYm9keV9kZWNsYXJhdGlvbnNfY29tcGFyZV90b190eXBlX2hlYWRlcj10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50X2JyZWFrc19jb21wYXJlX3RvX2Nhc2VzPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfZW1wdHlfbGluZXM9ZmFsc2UKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfc3RhdGVtZW50c19jb21wYXJlX3RvX2Jsb2NrPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfc3RhdGVtZW50c19jb21wYXJlX3RvX2JvZHk9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluZGVudF9zd2l0Y2hzdGF0ZW1lbnRzX2NvbXBhcmVfdG9fY2FzZXM9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluZGVudF9zd2l0Y2hzdGF0ZW1lbnRzX2NvbXBhcmVfdG9fc3dpdGNoPWZhbHNlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50YXRpb24uc2l6ZT00CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2FmdGVyX2Fubm90YXRpb249aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2FmdGVyX2Fubm90YXRpb25fb25fZmllbGQ9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2FmdGVyX2Fubm90YXRpb25fb25fbG9jYWxfdmFyaWFibGU9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2FmdGVyX2Fubm90YXRpb25fb25fbWVtYmVyPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9hZnRlcl9hbm5vdGF0aW9uX29uX21ldGhvZD1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYWZ0ZXJfYW5ub3RhdGlvbl9vbl9wYWNrYWdlPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9hZnRlcl9hbm5vdGF0aW9uX29uX3BhcmFtZXRlcj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYWZ0ZXJfYW5ub3RhdGlvbl9vbl90eXBlPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9hZnRlcl9sYWJlbD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2FmdGVyX29wZW5pbmdfYnJhY2VfaW5fYXJyYXlfaW5pdGlhbGl6ZXI9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9hdF9lbmRfb2ZfZmlsZV9pZl9taXNzaW5nPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYmVmb3JlX2NhdGNoX2luX3RyeV9zdGF0ZW1lbnQ9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9iZWZvcmVfY2xvc2luZ19icmFjZV9pbl9hcnJheV9pbml0aWFsaXplcj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2JlZm9yZV9lbHNlX2luX2lmX3N0YXRlbWVudD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2JlZm9yZV9maW5hbGx5X2luX3RyeV9zdGF0ZW1lbnQ9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9iZWZvcmVfd2hpbGVfaW5fZG9fc3RhdGVtZW50PWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfaW5fZW1wdHlfYW5ub3RhdGlvbl9kZWNsYXJhdGlvbj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfaW5fZW1wdHlfYW5vbnltb3VzX3R5cGVfZGVjbGFyYXRpb249aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2luX2VtcHR5X2Jsb2NrPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9pbl9lbXB0eV9lbnVtX2NvbnN0YW50PWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9pbl9lbXB0eV9lbnVtX2RlY2xhcmF0aW9uPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9pbl9lbXB0eV9tZXRob2RfYm9keT1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfaW5fZW1wdHlfdHlwZV9kZWNsYXJhdGlvbj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfYW5kX2luX3R5cGVfcGFyYW1ldGVyPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9hc3NpZ25tZW50X29wZXJhdG9yPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9hdF9pbl9hbm5vdGF0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfYXRfaW5fYW5ub3RhdGlvbl90eXBlX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfYmluYXJ5X29wZXJhdG9yPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jbG9zaW5nX2FuZ2xlX2JyYWNrZXRfaW5fdHlwZV9hcmd1bWVudHM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2Nsb3NpbmdfYW5nbGVfYnJhY2tldF9pbl90eXBlX3BhcmFtZXRlcnM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2Nsb3NpbmdfYnJhY2VfaW5fYmxvY2s9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2Nsb3NpbmdfcGFyZW5faW5fY2FzdD1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29sb25faW5fYXNzZXJ0PWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb2xvbl9pbl9jYXNlPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb2xvbl9pbl9jb25kaXRpb25hbD1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29sb25faW5fZm9yPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb2xvbl9pbl9sYWJlbGVkX3N0YXRlbWVudD1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fYWxsb2NhdGlvbl9leHByZXNzaW9uPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9hbm5vdGF0aW9uPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9hcnJheV9pbml0aWFsaXplcj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fY29uc3RydWN0b3JfZGVjbGFyYXRpb25fcGFyYW1ldGVycz1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fY29uc3RydWN0b3JfZGVjbGFyYXRpb25fdGhyb3dzPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9lbnVtX2NvbnN0YW50X2FyZ3VtZW50cz1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fZW51bV9kZWNsYXJhdGlvbnM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX2V4cGxpY2l0Y29uc3RydWN0b3JjYWxsX2FyZ3VtZW50cz1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fZm9yX2luY3JlbWVudHM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX2Zvcl9pbml0cz1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fbWV0aG9kX2RlY2xhcmF0aW9uX3BhcmFtZXRlcnM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX21ldGhvZF9kZWNsYXJhdGlvbl90aHJvd3M9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX21ldGhvZF9pbnZvY2F0aW9uX2FyZ3VtZW50cz1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fbXVsdGlwbGVfZmllbGRfZGVjbGFyYXRpb25zPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9tdWx0aXBsZV9sb2NhbF9kZWNsYXJhdGlvbnM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX3BhcmFtZXRlcml6ZWRfdHlwZV9yZWZlcmVuY2U9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX3N1cGVyaW50ZXJmYWNlcz1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fdHlwZV9hcmd1bWVudHM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX3R5cGVfcGFyYW1ldGVycz1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfZWxsaXBzaXM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfYW5nbGVfYnJhY2tldF9pbl9wYXJhbWV0ZXJpemVkX3R5cGVfcmVmZXJlbmNlPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19hbmdsZV9icmFja2V0X2luX3R5cGVfYXJndW1lbnRzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19hbmdsZV9icmFja2V0X2luX3R5cGVfcGFyYW1ldGVycz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfYnJhY2VfaW5fYXJyYXlfaW5pdGlhbGl6ZXI9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfYnJhY2tldF9pbl9hcnJheV9hbGxvY2F0aW9uX2V4cHJlc3Npb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX2JyYWNrZXRfaW5fYXJyYXlfcmVmZXJlbmNlPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9hbm5vdGF0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9jYXN0PWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9jYXRjaD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fY29uc3RydWN0b3JfZGVjbGFyYXRpb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX2VudW1fY29uc3RhbnQ9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX2Zvcj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5faWY9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX21ldGhvZF9kZWNsYXJhdGlvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fbWV0aG9kX2ludm9jYXRpb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX3BhcmVudGhlc2l6ZWRfZXhwcmVzc2lvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fc3dpdGNoPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9zeW5jaHJvbml6ZWQ9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX3RyeT1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fd2hpbGU9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9wb3N0Zml4X29wZXJhdG9yPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfcHJlZml4X29wZXJhdG9yPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfcXVlc3Rpb25faW5fY29uZGl0aW9uYWw9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX3F1ZXN0aW9uX2luX3dpbGRjYXJkPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfc2VtaWNvbG9uX2luX2Zvcj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfc2VtaWNvbG9uX2luX3RyeV9yZXNvdXJjZXM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX3VuYXJ5X29wZXJhdG9yPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2FuZF9pbl90eXBlX3BhcmFtZXRlcj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Fzc2lnbm1lbnRfb3BlcmF0b3I9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9hdF9pbl9hbm5vdGF0aW9uX3R5cGVfZGVjbGFyYXRpb249aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9iaW5hcnlfb3BlcmF0b3I9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX2FuZ2xlX2JyYWNrZXRfaW5fcGFyYW1ldGVyaXplZF90eXBlX3JlZmVyZW5jZT1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX2FuZ2xlX2JyYWNrZXRfaW5fdHlwZV9hcmd1bWVudHM9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19hbmdsZV9icmFja2V0X2luX3R5cGVfcGFyYW1ldGVycz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX2JyYWNlX2luX2FycmF5X2luaXRpYWxpemVyPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19icmFja2V0X2luX2FycmF5X2FsbG9jYXRpb25fZXhwcmVzc2lvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX2JyYWNrZXRfaW5fYXJyYXlfcmVmZXJlbmNlPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fYW5ub3RhdGlvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX2Nhc3Q9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9jYXRjaD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fZW51bV9jb25zdGFudD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX2Zvcj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX2lmPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fbWV0aG9kX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fbWV0aG9kX2ludm9jYXRpb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9wYXJlbnRoZXNpemVkX2V4cHJlc3Npb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9zd2l0Y2g9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9zeW5jaHJvbml6ZWQ9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl90cnk9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl93aGlsZT1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb2xvbl9pbl9hc3NlcnQ9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb2xvbl9pbl9jYXNlPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbG9uX2luX2NvbmRpdGlvbmFsPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29sb25faW5fZGVmYXVsdD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb2xvbl9pbl9mb3I9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb2xvbl9pbl9sYWJlbGVkX3N0YXRlbWVudD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9hbGxvY2F0aW9uX2V4cHJlc3Npb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fYW5ub3RhdGlvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9hcnJheV9pbml0aWFsaXplcj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbl9wYXJhbWV0ZXJzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uX3Rocm93cz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9lbnVtX2NvbnN0YW50X2FyZ3VtZW50cz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9lbnVtX2RlY2xhcmF0aW9ucz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9leHBsaWNpdGNvbnN0cnVjdG9yY2FsbF9hcmd1bWVudHM9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fZm9yX2luY3JlbWVudHM9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fZm9yX2luaXRzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX21ldGhvZF9kZWNsYXJhdGlvbl9wYXJhbWV0ZXJzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX21ldGhvZF9kZWNsYXJhdGlvbl90aHJvd3M9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fbWV0aG9kX2ludm9jYXRpb25fYXJndW1lbnRzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX211bHRpcGxlX2ZpZWxkX2RlY2xhcmF0aW9ucz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9tdWx0aXBsZV9sb2NhbF9kZWNsYXJhdGlvbnM9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fcGFyYW1ldGVyaXplZF90eXBlX3JlZmVyZW5jZT1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9zdXBlcmludGVyZmFjZXM9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fdHlwZV9hcmd1bWVudHM9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fdHlwZV9wYXJhbWV0ZXJzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2VsbGlwc2lzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYW5nbGVfYnJhY2tldF9pbl9wYXJhbWV0ZXJpemVkX3R5cGVfcmVmZXJlbmNlPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYW5nbGVfYnJhY2tldF9pbl90eXBlX2FyZ3VtZW50cz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2FuZ2xlX2JyYWNrZXRfaW5fdHlwZV9wYXJhbWV0ZXJzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fYW5ub3RhdGlvbl90eXBlX2RlY2xhcmF0aW9uPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFjZV9pbl9hbm9ueW1vdXNfdHlwZV9kZWNsYXJhdGlvbj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fYXJyYXlfaW5pdGlhbGl6ZXI9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNlX2luX2Jsb2NrPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFjZV9pbl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fZW51bV9jb25zdGFudD1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fZW51bV9kZWNsYXJhdGlvbj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fbWV0aG9kX2RlY2xhcmF0aW9uPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFjZV9pbl9zd2l0Y2g9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNlX2luX3R5cGVfZGVjbGFyYXRpb249aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNrZXRfaW5fYXJyYXlfYWxsb2NhdGlvbl9leHByZXNzaW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2tldF9pbl9hcnJheV9yZWZlcmVuY2U9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFja2V0X2luX2FycmF5X3R5cGVfcmVmZXJlbmNlPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fYW5ub3RhdGlvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX2Fubm90YXRpb25fdHlwZV9tZW1iZXJfZGVjbGFyYXRpb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9jYXRjaD1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fY29uc3RydWN0b3JfZGVjbGFyYXRpb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9lbnVtX2NvbnN0YW50PWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fZm9yPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9pZj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fbWV0aG9kX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fbWV0aG9kX2ludm9jYXRpb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9wYXJlbnRoZXNpemVkX2V4cHJlc3Npb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9zd2l0Y2g9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX3N5bmNocm9uaXplZD1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fdHJ5PWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl93aGlsZT1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX3BhcmVudGhlc2l6ZWRfZXhwcmVzc2lvbl9pbl9yZXR1cm49aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9wYXJlbnRoZXNpemVkX2V4cHJlc3Npb25faW5fdGhyb3c9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9wb3N0Zml4X29wZXJhdG9yPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX3ByZWZpeF9vcGVyYXRvcj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9xdWVzdGlvbl9pbl9jb25kaXRpb25hbD1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX3F1ZXN0aW9uX2luX3dpbGRjYXJkPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX3NlbWljb2xvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9zZW1pY29sb25faW5fZm9yPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX3NlbWljb2xvbl9pbl90cnlfcmVzb3VyY2VzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX3VuYXJ5X29wZXJhdG9yPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmV0d2Vlbl9icmFja2V0c19pbl9hcnJheV90eXBlX3JlZmVyZW5jZT1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JldHdlZW5fZW1wdHlfYnJhY2VzX2luX2FycmF5X2luaXRpYWxpemVyPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmV0d2Vlbl9lbXB0eV9icmFja2V0c19pbl9hcnJheV9hbGxvY2F0aW9uX2V4cHJlc3Npb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZXR3ZWVuX2VtcHR5X3BhcmVuc19pbl9hbm5vdGF0aW9uX3R5cGVfbWVtYmVyX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmV0d2Vlbl9lbXB0eV9wYXJlbnNfaW5fY29uc3RydWN0b3JfZGVjbGFyYXRpb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZXR3ZWVuX2VtcHR5X3BhcmVuc19pbl9lbnVtX2NvbnN0YW50PWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmV0d2Vlbl9lbXB0eV9wYXJlbnNfaW5fbWV0aG9kX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmV0d2Vlbl9lbXB0eV9wYXJlbnNfaW5fbWV0aG9kX2ludm9jYXRpb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmpvaW5fbGluZXNfaW5fY29tbWVudHM9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmpvaW5fd3JhcHBlZF9saW5lcz10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIua2VlcF9lbHNlX3N0YXRlbWVudF9vbl9zYW1lX2xpbmU9ZmFsc2UKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5rZWVwX2VtcHR5X2FycmF5X2luaXRpYWxpemVyX29uX29uZV9saW5lPWZhbHNlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIua2VlcF9pbXBsZV9pZl9vbl9vbmVfbGluZT1mYWxzZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmtlZXBfdGhlbl9zdGF0ZW1lbnRfb25fc2FtZV9saW5lPWZhbHNlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIubGluZVNwbGl0PTgwCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIubmV2ZXJfaW5kZW50X2Jsb2NrX2NvbW1lbnRzX29uX2ZpcnN0X2NvbHVtbj1mYWxzZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLm5ldmVyX2luZGVudF9saW5lX2NvbW1lbnRzX29uX2ZpcnN0X2NvbHVtbj1mYWxzZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLm51bWJlcl9vZl9ibGFua19saW5lc19hdF9iZWdpbm5pbmdfb2ZfbWV0aG9kX2JvZHk9MAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLm51bWJlcl9vZl9lbXB0eV9saW5lc190b19wcmVzZXJ2ZT0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIucHV0X2VtcHR5X3N0YXRlbWVudF9vbl9uZXdfbGluZT10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIudGFidWxhdGlvbi5jaGFyPXRhYgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLnRhYnVsYXRpb24uc2l6ZT00CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIudXNlX29uX29mZl90YWdzPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci51c2VfdGFic19vbmx5X2Zvcl9sZWFkaW5nX2luZGVudGF0aW9ucz1mYWxzZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLndyYXBfYmVmb3JlX2JpbmFyeV9vcGVyYXRvcj10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIud3JhcF9iZWZvcmVfb3Jfb3BlcmF0b3JfbXVsdGljYXRjaD10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIud3JhcF9vdXRlcl9leHByZXNzaW9uc193aGVuX25lc3RlZD10cnVlCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzMzZjY2UKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcwpAQCAtMCwwICsxLDYxIEBACitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorZWRpdG9yX3NhdmVfcGFydGljaXBhbnRfb3JnLmVjbGlwc2UuamR0LnVpLnBvc3RzYXZlbGlzdGVuZXIuY2xlYW51cD10cnVlCitmb3JtYXR0ZXJfcHJvZmlsZT1fSkdpdCBGb3JtYXQKK2Zvcm1hdHRlcl9zZXR0aW5nc192ZXJzaW9uPTEyCitvcmcuZWNsaXBzZS5qZHQudWkuaWdub3JlbG93ZXJjYXNlbmFtZXM9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LnVpLmltcG9ydG9yZGVyPWphdmE7amF2YXg7b3JnO2NvbTsKK29yZy5lY2xpcHNlLmpkdC51aS5vbmRlbWFuZHRocmVzaG9sZD05OQorb3JnLmVjbGlwc2UuamR0LnVpLnN0YXRpY29uZGVtYW5kdGhyZXNob2xkPTk5CitvcmcuZWNsaXBzZS5qZHQudWkudGV4dC5jdXN0b21fY29kZV90ZW1wbGF0ZXM9PD94bWwgdmVyc2lvblw9IjEuMCIgZW5jb2RpbmdcPSJVVEYtOCI/Pjx0ZW1wbGF0ZXMvPgorc3BfY2xlYW51cC5hZGRfZGVmYXVsdF9zZXJpYWxfdmVyc2lvbl9pZD10cnVlCitzcF9jbGVhbnVwLmFkZF9nZW5lcmF0ZWRfc2VyaWFsX3ZlcnNpb25faWQ9ZmFsc2UKK3NwX2NsZWFudXAuYWRkX21pc3NpbmdfYW5ub3RhdGlvbnM9ZmFsc2UKK3NwX2NsZWFudXAuYWRkX21pc3NpbmdfZGVwcmVjYXRlZF9hbm5vdGF0aW9ucz10cnVlCitzcF9jbGVhbnVwLmFkZF9taXNzaW5nX21ldGhvZHM9ZmFsc2UKK3NwX2NsZWFudXAuYWRkX21pc3NpbmdfbmxzX3RhZ3M9ZmFsc2UKK3NwX2NsZWFudXAuYWRkX21pc3Npbmdfb3ZlcnJpZGVfYW5ub3RhdGlvbnM9dHJ1ZQorc3BfY2xlYW51cC5hZGRfbWlzc2luZ19vdmVycmlkZV9hbm5vdGF0aW9uc19pbnRlcmZhY2VfbWV0aG9kcz1mYWxzZQorc3BfY2xlYW51cC5hZGRfc2VyaWFsX3ZlcnNpb25faWQ9ZmFsc2UKK3NwX2NsZWFudXAuYWx3YXlzX3VzZV9ibG9ja3M9dHJ1ZQorc3BfY2xlYW51cC5hbHdheXNfdXNlX3BhcmVudGhlc2VzX2luX2V4cHJlc3Npb25zPWZhbHNlCitzcF9jbGVhbnVwLmFsd2F5c191c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19maWVsZF9hY2Nlc3M9ZmFsc2UKK3NwX2NsZWFudXAuYWx3YXlzX3VzZV90aGlzX2Zvcl9ub25fc3RhdGljX21ldGhvZF9hY2Nlc3M9ZmFsc2UKK3NwX2NsZWFudXAuY29udmVydF90b19lbmhhbmNlZF9mb3JfbG9vcD1mYWxzZQorc3BfY2xlYW51cC5jb3JyZWN0X2luZGVudGF0aW9uPWZhbHNlCitzcF9jbGVhbnVwLmZvcm1hdF9zb3VyY2VfY29kZT10cnVlCitzcF9jbGVhbnVwLmZvcm1hdF9zb3VyY2VfY29kZV9jaGFuZ2VzX29ubHk9dHJ1ZQorc3BfY2xlYW51cC5tYWtlX2xvY2FsX3ZhcmlhYmxlX2ZpbmFsPWZhbHNlCitzcF9jbGVhbnVwLm1ha2VfcGFyYW1ldGVyc19maW5hbD1mYWxzZQorc3BfY2xlYW51cC5tYWtlX3ByaXZhdGVfZmllbGRzX2ZpbmFsPXRydWUKK3NwX2NsZWFudXAubWFrZV90eXBlX2Fic3RyYWN0X2lmX21pc3NpbmdfbWV0aG9kPWZhbHNlCitzcF9jbGVhbnVwLm1ha2VfdmFyaWFibGVfZGVjbGFyYXRpb25zX2ZpbmFsPWZhbHNlCitzcF9jbGVhbnVwLm5ldmVyX3VzZV9ibG9ja3M9ZmFsc2UKK3NwX2NsZWFudXAubmV2ZXJfdXNlX3BhcmVudGhlc2VzX2luX2V4cHJlc3Npb25zPXRydWUKK3NwX2NsZWFudXAub25fc2F2ZV91c2VfYWRkaXRpb25hbF9hY3Rpb25zPXRydWUKK3NwX2NsZWFudXAub3JnYW5pemVfaW1wb3J0cz1mYWxzZQorc3BfY2xlYW51cC5xdWFsaWZ5X3N0YXRpY19maWVsZF9hY2Nlc3Nlc193aXRoX2RlY2xhcmluZ19jbGFzcz1mYWxzZQorc3BfY2xlYW51cC5xdWFsaWZ5X3N0YXRpY19tZW1iZXJfYWNjZXNzZXNfdGhyb3VnaF9pbnN0YW5jZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3M9dHJ1ZQorc3BfY2xlYW51cC5xdWFsaWZ5X3N0YXRpY19tZW1iZXJfYWNjZXNzZXNfdGhyb3VnaF9zdWJ0eXBlc193aXRoX2RlY2xhcmluZ19jbGFzcz10cnVlCitzcF9jbGVhbnVwLnF1YWxpZnlfc3RhdGljX21lbWJlcl9hY2Nlc3Nlc193aXRoX2RlY2xhcmluZ19jbGFzcz1mYWxzZQorc3BfY2xlYW51cC5xdWFsaWZ5X3N0YXRpY19tZXRob2RfYWNjZXNzZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3M9ZmFsc2UKK3NwX2NsZWFudXAucmVtb3ZlX3ByaXZhdGVfY29uc3RydWN0b3JzPXRydWUKK3NwX2NsZWFudXAucmVtb3ZlX3RyYWlsaW5nX3doaXRlc3BhY2VzPXRydWUKK3NwX2NsZWFudXAucmVtb3ZlX3RyYWlsaW5nX3doaXRlc3BhY2VzX2FsbD10cnVlCitzcF9jbGVhbnVwLnJlbW92ZV90cmFpbGluZ193aGl0ZXNwYWNlc19pZ25vcmVfZW1wdHk9ZmFsc2UKK3NwX2NsZWFudXAucmVtb3ZlX3VubmVjZXNzYXJ5X2Nhc3RzPWZhbHNlCitzcF9jbGVhbnVwLnJlbW92ZV91bm5lY2Vzc2FyeV9ubHNfdGFncz1mYWxzZQorc3BfY2xlYW51cC5yZW1vdmVfdW51c2VkX2ltcG9ydHM9ZmFsc2UKK3NwX2NsZWFudXAucmVtb3ZlX3VudXNlZF9sb2NhbF92YXJpYWJsZXM9ZmFsc2UKK3NwX2NsZWFudXAucmVtb3ZlX3VudXNlZF9wcml2YXRlX2ZpZWxkcz10cnVlCitzcF9jbGVhbnVwLnJlbW92ZV91bnVzZWRfcHJpdmF0ZV9tZW1iZXJzPWZhbHNlCitzcF9jbGVhbnVwLnJlbW92ZV91bnVzZWRfcHJpdmF0ZV9tZXRob2RzPXRydWUKK3NwX2NsZWFudXAucmVtb3ZlX3VudXNlZF9wcml2YXRlX3R5cGVzPXRydWUKK3NwX2NsZWFudXAuc29ydF9tZW1iZXJzPWZhbHNlCitzcF9jbGVhbnVwLnNvcnRfbWVtYmVyc19hbGw9ZmFsc2UKK3NwX2NsZWFudXAudXNlX2Jsb2Nrcz1mYWxzZQorc3BfY2xlYW51cC51c2VfYmxvY2tzX29ubHlfZm9yX3JldHVybl9hbmRfdGhyb3c9ZmFsc2UKK3NwX2NsZWFudXAudXNlX3BhcmVudGhlc2VzX2luX2V4cHJlc3Npb25zPWZhbHNlCitzcF9jbGVhbnVwLnVzZV90aGlzX2Zvcl9ub25fc3RhdGljX2ZpZWxkX2FjY2Vzcz1mYWxzZQorc3BfY2xlYW51cC51c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19maWVsZF9hY2Nlc3Nfb25seV9pZl9uZWNlc3Nhcnk9dHJ1ZQorc3BfY2xlYW51cC51c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19tZXRob2RfYWNjZXNzPWZhbHNlCitzcF9jbGVhbnVwLnVzZV90aGlzX2Zvcl9ub25fc3RhdGljX21ldGhvZF9hY2Nlc3Nfb25seV9pZl9uZWNlc3Nhcnk9dHJ1ZQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS5wcmVmcyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubXlseW4udGFza3MudWkucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2RlYzRkOQotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubXlseW4udGFza3MudWkucHJlZnMKQEAgLTAsMCArMSwzIEBACitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorcHJvamVjdC5yZXBvc2l0b3J5LmtpbmQ9YnVnemlsbGEKK3Byb2plY3QucmVwb3NpdG9yeS51cmw9aHR0cHNcOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIvLnNldHRpbmdzL29yZy5lY2xpcHNlLm15bHluLnRlYW0udWkucHJlZnMgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIvLnNldHRpbmdzL29yZy5lY2xpcHNlLm15bHluLnRlYW0udWkucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2U3YTBmMAotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubXlseW4udGVhbS51aS5wcmVmcwpAQCAtMCwwICsxLDIgQEAKK2NvbW1pdC5jb21tZW50LnRlbXBsYXRlPSR7dGFzay5kZXNjcmlwdGlvbn0gXG5cbkJ1Z1w6ICR7dGFzay5rZXl9CitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUuYXBpLnRvb2xzLnByZWZzIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUuYXBpLnRvb2xzLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyOTRkNGYKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5hcGkudG9vbHMucHJlZnMKQEAgLTAsMCArMSw5OCBAQAorQU5OT1RBVElPTl9FTEVNRU5UX1RZUEVfQURERURfTUVUSE9EX1dJVEhPVVRfREVGQVVMVF9WQUxVRT1FcnJvcgorQU5OT1RBVElPTl9FTEVNRU5UX1RZUEVfQ0hBTkdFRF9UWVBFX0NPTlZFUlNJT049RXJyb3IKK0FOTk9UQVRJT05fRUxFTUVOVF9UWVBFX1JFTU9WRURfRklFTEQ9RXJyb3IKK0FOTk9UQVRJT05fRUxFTUVOVF9UWVBFX1JFTU9WRURfTUVUSE9EPUVycm9yCitBTk5PVEFUSU9OX0VMRU1FTlRfVFlQRV9SRU1PVkVEX1RZUEVfTUVNQkVSPUVycm9yCitBUElfQ09NUE9ORU5UX0VMRU1FTlRfVFlQRV9SRU1PVkVEX0FQSV9UWVBFPUVycm9yCitBUElfQ09NUE9ORU5UX0VMRU1FTlRfVFlQRV9SRU1PVkVEX1JFRVhQT1JURURfQVBJX1RZUEU9RXJyb3IKK0FQSV9DT01QT05FTlRfRUxFTUVOVF9UWVBFX1JFTU9WRURfUkVFWFBPUlRFRF9UWVBFPUVycm9yCitBUElfQ09NUE9ORU5UX0VMRU1FTlRfVFlQRV9SRU1PVkVEX1RZUEU9RXJyb3IKK0FQSV9VU0VfU0NBTl9GSUVMRF9TRVZFUklUWT1FcnJvcgorQVBJX1VTRV9TQ0FOX01FVEhPRF9TRVZFUklUWT1FcnJvcgorQVBJX1VTRV9TQ0FOX1RZUEVfU0VWRVJJVFk9RXJyb3IKK0NMQVNTX0VMRU1FTlRfVFlQRV9BRERFRF9NRVRIT0Q9RXJyb3IKK0NMQVNTX0VMRU1FTlRfVFlQRV9BRERFRF9SRVNUUklDVElPTlM9RXJyb3IKK0NMQVNTX0VMRU1FTlRfVFlQRV9BRERFRF9UWVBFX1BBUkFNRVRFUj1FcnJvcgorQ0xBU1NfRUxFTUVOVF9UWVBFX0NIQU5HRURfQ09OVFJBQ1RFRF9TVVBFUklOVEVSRkFDRVNfU0VUPUVycm9yCitDTEFTU19FTEVNRU5UX1RZUEVfQ0hBTkdFRF9ERUNSRUFTRV9BQ0NFU1M9RXJyb3IKK0NMQVNTX0VMRU1FTlRfVFlQRV9DSEFOR0VEX05PTl9BQlNUUkFDVF9UT19BQlNUUkFDVD1FcnJvcgorQ0xBU1NfRUxFTUVOVF9UWVBFX0NIQU5HRURfTk9OX0ZJTkFMX1RPX0ZJTkFMPUVycm9yCitDTEFTU19FTEVNRU5UX1RZUEVfQ0hBTkdFRF9UWVBFX0NPTlZFUlNJT049RXJyb3IKK0NMQVNTX0VMRU1FTlRfVFlQRV9SRU1PVkVEX0NPTlNUUlVDVE9SPUVycm9yCitDTEFTU19FTEVNRU5UX1RZUEVfUkVNT1ZFRF9GSUVMRD1FcnJvcgorQ0xBU1NfRUxFTUVOVF9UWVBFX1JFTU9WRURfTUVUSE9EPUVycm9yCitDTEFTU19FTEVNRU5UX1RZUEVfUkVNT1ZFRF9TVVBFUkNMQVNTPUVycm9yCitDTEFTU19FTEVNRU5UX1RZUEVfUkVNT1ZFRF9UWVBFX01FTUJFUj1FcnJvcgorQ0xBU1NfRUxFTUVOVF9UWVBFX1JFTU9WRURfVFlQRV9QQVJBTUVURVI9RXJyb3IKK0NPTlNUUlVDVE9SX0VMRU1FTlRfVFlQRV9BRERFRF9UWVBFX1BBUkFNRVRFUj1FcnJvcgorQ09OU1RSVUNUT1JfRUxFTUVOVF9UWVBFX0NIQU5HRURfREVDUkVBU0VfQUNDRVNTPUVycm9yCitDT05TVFJVQ1RPUl9FTEVNRU5UX1RZUEVfQ0hBTkdFRF9WQVJBUkdTX1RPX0FSUkFZPUVycm9yCitDT05TVFJVQ1RPUl9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9UWVBFX1BBUkFNRVRFUj1FcnJvcgorRU5VTV9FTEVNRU5UX1RZUEVfQ0hBTkdFRF9DT05UUkFDVEVEX1NVUEVSSU5URVJGQUNFU19TRVQ9RXJyb3IKK0VOVU1fRUxFTUVOVF9UWVBFX0NIQU5HRURfVFlQRV9DT05WRVJTSU9OPUVycm9yCitFTlVNX0VMRU1FTlRfVFlQRV9SRU1PVkVEX0VOVU1fQ09OU1RBTlQ9RXJyb3IKK0VOVU1fRUxFTUVOVF9UWVBFX1JFTU9WRURfRklFTEQ9RXJyb3IKK0VOVU1fRUxFTUVOVF9UWVBFX1JFTU9WRURfTUVUSE9EPUVycm9yCitFTlVNX0VMRU1FTlRfVFlQRV9SRU1PVkVEX1RZUEVfTUVNQkVSPUVycm9yCitGSUVMRF9FTEVNRU5UX1RZUEVfQURERURfVkFMVUU9RXJyb3IKK0ZJRUxEX0VMRU1FTlRfVFlQRV9DSEFOR0VEX0RFQ1JFQVNFX0FDQ0VTUz1FcnJvcgorRklFTERfRUxFTUVOVF9UWVBFX0NIQU5HRURfRklOQUxfVE9fTk9OX0ZJTkFMX1NUQVRJQ19DT05TVEFOVD1FcnJvcgorRklFTERfRUxFTUVOVF9UWVBFX0NIQU5HRURfTk9OX0ZJTkFMX1RPX0ZJTkFMPUVycm9yCitGSUVMRF9FTEVNRU5UX1RZUEVfQ0hBTkdFRF9OT05fU1RBVElDX1RPX1NUQVRJQz1FcnJvcgorRklFTERfRUxFTUVOVF9UWVBFX0NIQU5HRURfU1RBVElDX1RPX05PTl9TVEFUSUM9RXJyb3IKK0ZJRUxEX0VMRU1FTlRfVFlQRV9DSEFOR0VEX1RZUEU9RXJyb3IKK0ZJRUxEX0VMRU1FTlRfVFlQRV9DSEFOR0VEX1ZBTFVFPUVycm9yCitGSUVMRF9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9UWVBFX0FSR1VNRU5UPUVycm9yCitGSUVMRF9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9WQUxVRT1FcnJvcgorSUxMRUdBTF9FWFRFTkQ9V2FybmluZworSUxMRUdBTF9JTVBMRU1FTlQ9V2FybmluZworSUxMRUdBTF9JTlNUQU5USUFURT1XYXJuaW5nCitJTExFR0FMX09WRVJSSURFPVdhcm5pbmcKK0lMTEVHQUxfUkVGRVJFTkNFPVdhcm5pbmcKK0lOVEVSRkFDRV9FTEVNRU5UX1RZUEVfQURERURfRklFTEQ9RXJyb3IKK0lOVEVSRkFDRV9FTEVNRU5UX1RZUEVfQURERURfTUVUSE9EPUVycm9yCitJTlRFUkZBQ0VfRUxFTUVOVF9UWVBFX0FEREVEX1JFU1RSSUNUSU9OUz1FcnJvcgorSU5URVJGQUNFX0VMRU1FTlRfVFlQRV9BRERFRF9TVVBFUl9JTlRFUkZBQ0VfV0lUSF9NRVRIT0RTPUVycm9yCitJTlRFUkZBQ0VfRUxFTUVOVF9UWVBFX0FEREVEX1RZUEVfUEFSQU1FVEVSPUVycm9yCitJTlRFUkZBQ0VfRUxFTUVOVF9UWVBFX0NIQU5HRURfQ09OVFJBQ1RFRF9TVVBFUklOVEVSRkFDRVNfU0VUPUVycm9yCitJTlRFUkZBQ0VfRUxFTUVOVF9UWVBFX0NIQU5HRURfVFlQRV9DT05WRVJTSU9OPUVycm9yCitJTlRFUkZBQ0VfRUxFTUVOVF9UWVBFX1JFTU9WRURfRklFTEQ9RXJyb3IKK0lOVEVSRkFDRV9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9NRVRIT0Q9RXJyb3IKK0lOVEVSRkFDRV9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9UWVBFX01FTUJFUj1FcnJvcgorSU5URVJGQUNFX0VMRU1FTlRfVFlQRV9SRU1PVkVEX1RZUEVfUEFSQU1FVEVSPUVycm9yCitJTlZBTElEX0FOTk9UQVRJT049SWdub3JlCitJTlZBTElEX0pBVkFET0NfVEFHPUlnbm9yZQorSU5WQUxJRF9SRUZFUkVOQ0VfSU5fU1lTVEVNX0xJQlJBUklFUz1FcnJvcgorTEVBS19FWFRFTkQ9V2FybmluZworTEVBS19GSUVMRF9ERUNMPVdhcm5pbmcKK0xFQUtfSU1QTEVNRU5UPVdhcm5pbmcKK0xFQUtfTUVUSE9EX1BBUkFNPVdhcm5pbmcKK0xFQUtfTUVUSE9EX1JFVFVSTl9UWVBFPVdhcm5pbmcKK01FVEhPRF9FTEVNRU5UX1RZUEVfQURERURfUkVTVFJJQ1RJT05TPUVycm9yCitNRVRIT0RfRUxFTUVOVF9UWVBFX0FEREVEX1RZUEVfUEFSQU1FVEVSPUVycm9yCitNRVRIT0RfRUxFTUVOVF9UWVBFX0NIQU5HRURfREVDUkVBU0VfQUNDRVNTPUVycm9yCitNRVRIT0RfRUxFTUVOVF9UWVBFX0NIQU5HRURfTk9OX0FCU1RSQUNUX1RPX0FCU1RSQUNUPUVycm9yCitNRVRIT0RfRUxFTUVOVF9UWVBFX0NIQU5HRURfTk9OX0ZJTkFMX1RPX0ZJTkFMPUVycm9yCitNRVRIT0RfRUxFTUVOVF9UWVBFX0NIQU5HRURfTk9OX1NUQVRJQ19UT19TVEFUSUM9RXJyb3IKK01FVEhPRF9FTEVNRU5UX1RZUEVfQ0hBTkdFRF9TVEFUSUNfVE9fTk9OX1NUQVRJQz1FcnJvcgorTUVUSE9EX0VMRU1FTlRfVFlQRV9DSEFOR0VEX1ZBUkFSR1NfVE9fQVJSQVk9RXJyb3IKK01FVEhPRF9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9BTk5PVEFUSU9OX0RFRkFVTFRfVkFMVUU9RXJyb3IKK01FVEhPRF9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9UWVBFX1BBUkFNRVRFUj1FcnJvcgorTUlTU0lOR19FRV9ERVNDUklQVElPTlM9RXJyb3IKK1RZUEVfUEFSQU1FVEVSX0VMRU1FTlRfVFlQRV9BRERFRF9DTEFTU19CT1VORD1FcnJvcgorVFlQRV9QQVJBTUVURVJfRUxFTUVOVF9UWVBFX0FEREVEX0lOVEVSRkFDRV9CT1VORD1FcnJvcgorVFlQRV9QQVJBTUVURVJfRUxFTUVOVF9UWVBFX0NIQU5HRURfQ0xBU1NfQk9VTkQ9RXJyb3IKK1RZUEVfUEFSQU1FVEVSX0VMRU1FTlRfVFlQRV9DSEFOR0VEX0lOVEVSRkFDRV9CT1VORD1FcnJvcgorVFlQRV9QQVJBTUVURVJfRUxFTUVOVF9UWVBFX1JFTU9WRURfQ0xBU1NfQk9VTkQ9RXJyb3IKK1RZUEVfUEFSQU1FVEVSX0VMRU1FTlRfVFlQRV9SRU1PVkVEX0lOVEVSRkFDRV9CT1VORD1FcnJvcgorVU5VU0VEX1BST0JMRU1fRklMVEVSUz1XYXJuaW5nCithdXRvbWF0aWNhbGx5X3JlbW92ZWRfdW51c2VkX3Byb2JsZW1fZmlsdGVycz1mYWxzZQorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK2luY29tcGF0aWJsZV9hcGlfY29tcG9uZW50X3ZlcnNpb249RXJyb3IKK2luY29tcGF0aWJsZV9hcGlfY29tcG9uZW50X3ZlcnNpb25faW5jbHVkZV9tYWpvcl93aXRob3V0X2JyZWFraW5nX2NoYW5nZT1EaXNhYmxlZAoraW5jb21wYXRpYmxlX2FwaV9jb21wb25lbnRfdmVyc2lvbl9pbmNsdWRlX21pbm9yX3dpdGhvdXRfYXBpX2NoYW5nZT1EaXNhYmxlZAoraW52YWxpZF9zaW5jZV90YWdfdmVyc2lvbj1FcnJvcgorbWFsZm9ybWVkX3NpbmNlX3RhZz1FcnJvcgorbWlzc2luZ19zaW5jZV90YWc9RXJyb3IKK3JlcG9ydF9hcGlfYnJlYWthZ2Vfd2hlbl9tYWpvcl92ZXJzaW9uX2luY3JlbWVudGVkPURpc2FibGVkCityZXBvcnRfcmVzb2x1dGlvbl9lcnJvcnNfYXBpX2NvbXBvbmVudD1XYXJuaW5nCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5jb3JlLnByZWZzIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUuY29yZS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjNjMzdmCi0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUuY29yZS5wcmVmcwpAQCAtMCwwICsxLDIgQEAKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCityZXNvbHZlLnJlcXVpcmVidW5kbGU9ZmFsc2UKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci9CVUNLIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyL0JVQ0sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmI0MGI3YwotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci9CVUNLCkBAIC0wLDAgKzEsMjIgQEAKK1NSQ1MgPSBnbG9iKFsnc3JjLyoqJ10pCitSRVNPVVJDRVMgPSBnbG9iKFsncmVzb3VyY2VzLyoqJ10pCisKK2phdmFfbGlicmFyeSgKKyAgbmFtZSA9ICdqZ2l0LWxmcy1zZXJ2ZXInLAorICBzcmNzID0gU1JDUywKKyAgcmVzb3VyY2VzID0gUkVTT1VSQ0VTLAorICBkZXBzID0gWworICAgICcvL29yZy5lY2xpcHNlLmpnaXQuaHR0cC5hcGFjaGU6aHR0cC1hcGFjaGUnLAorICAgICcvL29yZy5lY2xpcHNlLmpnaXQ6amdpdCcsCisgICAgJy8vb3JnLmVjbGlwc2UuamdpdC5sZnM6amdpdC1sZnMnLAorICAgICcvL2xpYjpnc29uJywKKyAgICAnLy9saWI6aHR0cGNvcmUnLAorICAgICcvL2xpYjpzZXJ2bGV0LWFwaScKKyAgXSwKKyAgdmlzaWJpbGl0eSA9IFsnUFVCTElDJ10sCispCisKK2phdmFfc291cmNlcygKKyAgbmFtZSA9ICdqZ2l0LWxmcy1zZXJ2ZXJfc3JjJywKKyAgc3JjcyA9IFNSQ1MgKyBSRVNPVVJDRVMsCispCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBmZjc0MAotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMCwwICsxLDI4IEBACitNYW5pZmVzdC1WZXJzaW9uOiAxLjAKK0J1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKK0J1bmRsZS1OYW1lOiAlcGx1Z2luX25hbWUKK0J1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlcgorQnVuZGxlLVZlcnNpb246IDQuMy4wLnF1YWxpZmllcgorQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCitCdW5kbGUtVmVuZG9yOiAlcHJvdmlkZXJfbmFtZQorRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlcjt2ZXJzaW9uPSI0LjMuMCI7CisgIHVzZXM6PSJqYXZheC5zZXJ2bGV0Lmh0dHAsCisgICBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5saWIiLAorIG9yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci5mczt2ZXJzaW9uPSI0LjMuMCI7CisgIHVzZXM6PSJqYXZheC5zZXJ2bGV0LAorICAgamF2YXguc2VydmxldC5odHRwLAorICAgb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLAorICAgb3JnLmVjbGlwc2UuamdpdC5sZnMubGliIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIuaW50ZXJuYWw7dmVyc2lvbj0iNC4zLjAiO3gtaW50ZXJuYWw6PXRydWUKK0J1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKYXZhU0UtMS43CitJbXBvcnQtUGFja2FnZTogY29tLmdvb2dsZS5nc29uO3ZlcnNpb249IlsyLjIuNCwzLjAuMCkiLAorIGphdmF4LnNlcnZsZXQ7dmVyc2lvbj0iWzMuMS4wLDQuMC4wKSIsCisgamF2YXguc2VydmxldC5hbm5vdGF0aW9uO3ZlcnNpb249IlszLjEuMCw0LjAuMCkiLAorIGphdmF4LnNlcnZsZXQuaHR0cDt2ZXJzaW9uPSJbMy4xLjAsNC4wLjApIiwKKyBvcmcuYXBhY2hlLmh0dHA7dmVyc2lvbj0iWzQuMy4wLDUuMC4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5hbm5vdGF0aW9uczt2ZXJzaW9uPSJbNC4zLjAsNC40LjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UuZmlsZTt2ZXJzaW9uPSJbNC4zLjAsNC40LjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5lcnJvcnM7dmVyc2lvbj0iWzQuMy4wLDQuNC4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5sZnMubGliO3ZlcnNpb249Ils0LjMuMCw0LjQuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQubmxzO3ZlcnNpb249Ils0LjMuMCw0LjQuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudXRpbDt2ZXJzaW9uPSJbNC4zLjAsNC40LjApIgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyL2Fib3V0Lmh0bWwgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIvYWJvdXQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWEyNjcxCi0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyL2Fib3V0Lmh0bWwKQEAgLTAsMCArMSw1OSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSIgPz4KKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KKzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KKworPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIiAvPgorPHRpdGxlPkVjbGlwc2UgRGlzdHJpYnV0aW9uIExpY2Vuc2UgLSBWZXJzaW9uIDEuMDwvdGl0bGU+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgorICBib2R5IHsKKyAgICBzaXplOiA4LjVpbiAxMS4waW47CisgICAgbWFyZ2luOiAwLjI1aW4gMC41aW4gMC4yNWluIDAuNWluOworICAgIHRhYi1pbnRlcnZhbDogMC41aW47CisgICAgfQorICBwIHsgIAkKKyAgICBtYXJnaW4tbGVmdDogYXV0bzsKKyAgICBtYXJnaW4tdG9wOiAgMC41ZW07CisgICAgbWFyZ2luLWJvdHRvbTogMC41ZW07CisgICAgfQorICBwLmxpc3QgeworICAJbWFyZ2luLWxlZnQ6IDAuNWluOworICAgIG1hcmdpbi10b3A6ICAwLjA1ZW07CisgICAgbWFyZ2luLWJvdHRvbTogMC4wNWVtOworICAgIH0KKyAgPC9zdHlsZT4KKworPC9oZWFkPgorCis8Ym9keSBsYW5nPSJFTi1VUyI+CisKKzxwPjxiPkVjbGlwc2UgRGlzdHJpYnV0aW9uIExpY2Vuc2UgLSB2IDEuMDwvYj48L3A+CisKKzxwPkNvcHlyaWdodCAoYykgMjAwNywgRWNsaXBzZSBGb3VuZGF0aW9uLCBJbmMuIGFuZCBpdHMgbGljZW5zb3JzLiA8L3A+CisKKzxwPkFsbCByaWdodHMgcmVzZXJ2ZWQuPC9wPgorPHA+UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgCisJYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorPHVsPjxsaT5SZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIAorCXRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIDwvbGk+Cis8bGk+UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCAKKwl0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIAorCWFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiA8L2xpPgorPGxpPk5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cyAKKwljb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSAKKwl0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiA8L2xpPjwvdWw+Cis8L3A+Cis8cD5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgCitBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgCitXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIAorSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCAKK0lORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgCitOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIAorUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIAorV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSAKK0FSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIAorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuPC9wPgorCis8L2JvZHk+CisKKzwvaHRtbD4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci9idWlsZC5wcm9wZXJ0aWVzIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyL2J1aWxkLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE0ODI3MQotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNyBAQAorc291cmNlLi4gPSBzcmMvLFwKKyAgICAgICAgICAgcmVzb3VyY2VzLworb3V0cHV0Li4gPSBiaW4vCitiaW4uaW5jbHVkZXMgPSBNRVRBLUlORi8sXAorICAgICAgICAgICAgICAgLixcCisgICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBhYm91dC5odG1sCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIvcGx1Z2luLnByb3BlcnRpZXMgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIvcGx1Z2luLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTlmMDEzOQotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci9wbHVnaW4ucHJvcGVydGllcwpAQCAtMCwwICsxLDIgQEAKK3BsdWdpbl9uYW1lPUpHaXQgTGFyZ2UgRmlsZSBTdG9yYWdlIFNlcnZlcgorcHJvdmlkZXJfbmFtZT1FY2xpcHNlIEpHaXQKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci9wb20ueG1sIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGNmZGYzYgotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci9wb20ueG1sCkBAIC0wLDAgKzEsMTU4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLQorICAgQ29weXJpZ2h0IChDKSAyMDE1LCBNYXR0aGlhcyBTb2huIDxtYXR0aGlhcy5zb2huQHNhcC5jb20+CisgICBhbmQgb3RoZXIgY29weXJpZ2h0IG93bmVycyBhcyBkb2N1bWVudGVkIGluIHRoZSBwcm9qZWN0J3MgSVAgbG9nLgorCisgICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZQorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYxLjAgd2hpY2gKKyAgIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBpcyByZXByb2R1Y2VkIGJlbG93LCBhbmQgaXMKKyAgIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZWRsLXYxMC5waHAKKworICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgICBjb25kaXRpb25zIGFyZSBtZXQ6CisKKyAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCisgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICAgLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIEluYy4gbm9yIHRoZQorICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorICAgICBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCisgICAgIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5ECisgICBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAorICAgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAgIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCisgICBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAgIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICAgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgICBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgICBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICAgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYKKyAgIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorLS0+CisKKzxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9tYXZlbi12NF8wXzAueHNkIj4KKyAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorCisgIDxwYXJlbnQ+CisgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KKyAgICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0LXBhcmVudDwvYXJ0aWZhY3RJZD4KKyAgICA8dmVyc2lvbj40LjMuMC1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgPC9wYXJlbnQ+CisKKyAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyPC9hcnRpZmFjdElkPgorICA8bmFtZT5KR2l0IC0gTGFyZ2UgRmlsZSBTdG9yYWdlIFNlcnZlcjwvbmFtZT4KKworICA8ZGVzY3JpcHRpb24+CisgICAgSkdpdCBMYXJnZSBGaWxlIFN0b3JhZ2UgU2VydmVyIGltcGxlbWVudGF0aW9uLgorICA8L2Rlc2NyaXB0aW9uPgorCisgIDxwcm9wZXJ0aWVzPgorICAgIDx0cmFuc2xhdGUtcXVhbGlmaWVyLz4KKyAgPC9wcm9wZXJ0aWVzPgorCisgIDxkZXBlbmRlbmNpZXM+CisgICAgPGRlcGVuZGVuY3k+CisgICAgICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5qZ2l0PC9ncm91cElkPgorICAgICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdDwvYXJ0aWZhY3RJZD4KKyAgICAgIDx2ZXJzaW9uPiR7cHJvamVjdC52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICA8L2RlcGVuZGVuY3k+CisKKyAgICA8ZGVwZW5kZW5jeT4KKyAgICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CisgICAgICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0LmxmczwvYXJ0aWZhY3RJZD4KKyAgICAgIDx2ZXJzaW9uPiR7cHJvamVjdC52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICA8L2RlcGVuZGVuY3k+CisKKyAgICA8ZGVwZW5kZW5jeT4KKyAgICAgIDxncm91cElkPmphdmF4LnNlcnZsZXQ8L2dyb3VwSWQ+CisgICAgICA8YXJ0aWZhY3RJZD5qYXZheC5zZXJ2bGV0LWFwaTwvYXJ0aWZhY3RJZD4KKyAgICAgIDxzY29wZT5wcm92aWRlZDwvc2NvcGU+CisgICAgPC9kZXBlbmRlbmN5PgorCisgICAgPGRlcGVuZGVuY3k+CisgICAgICA8Z3JvdXBJZD5jb20uZ29vZ2xlLmNvZGUuZ3NvbjwvZ3JvdXBJZD4KKyAgICAgIDxhcnRpZmFjdElkPmdzb248L2FydGlmYWN0SWQ+CisgICAgPC9kZXBlbmRlbmN5PgorICA8L2RlcGVuZGVuY2llcz4KKworICA8YnVpbGQ+CisgICAgPHNvdXJjZURpcmVjdG9yeT5zcmMvPC9zb3VyY2VEaXJlY3Rvcnk+CisKKyAgICA8cmVzb3VyY2VzPgorICAgICAgPHJlc291cmNlPgorICAgICAgICA8ZGlyZWN0b3J5Pi48L2RpcmVjdG9yeT4KKyAgICAgICAgPGluY2x1ZGVzPgorICAgICAgICAgIDxpbmNsdWRlPnBsdWdpbi5wcm9wZXJ0aWVzPC9pbmNsdWRlPgorICAgICAgICAgIDxpbmNsdWRlPmFib3V0Lmh0bWw8L2luY2x1ZGU+CisgICAgICAgIDwvaW5jbHVkZXM+CisgICAgICA8L3Jlc291cmNlPgorICAgICAgPHJlc291cmNlPgorICAgICAgICA8ZGlyZWN0b3J5PnJlc291cmNlcy88L2RpcmVjdG9yeT4KKyAgICAgIDwvcmVzb3VyY2U+CisgICAgPC9yZXNvdXJjZXM+CisKKyAgICA8cGx1Z2lucz4KKyAgICAgIDxwbHVnaW4+CisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4KKyAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tc291cmNlLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPGluaGVyaXRlZD50cnVlPC9pbmhlcml0ZWQ+CisgICAgICAgIDxleGVjdXRpb25zPgorICAgICAgICAgIDxleGVjdXRpb24+CisgICAgICAgICAgICA8aWQ+YXR0YWNoLXNvdXJjZXM8L2lkPgorICAgICAgICAgICAgPHBoYXNlPnByb2Nlc3MtY2xhc3NlczwvcGhhc2U+CisgICAgICAgICAgICA8Z29hbHM+CisgICAgICAgICAgICAgIDxnb2FsPmphcjwvZ29hbD4KKyAgICAgICAgICAgIDwvZ29hbHM+CisgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgPGFyY2hpdmU+CisgICAgICAgICAgICAgICAgPG1hbmlmZXN0RmlsZT4ke3NvdXJjZS1idW5kbGUtbWFuaWZlc3R9PC9tYW5pZmVzdEZpbGU+CisgICAgICAgICAgICAgIDwvYXJjaGl2ZT4KKyAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgICAgICA8L2V4ZWN1dGlvbj4KKyAgICAgICAgPC9leGVjdXRpb25zPgorICAgICAgPC9wbHVnaW4+CisKKyAgICAgIDxwbHVnaW4+CisgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWphci1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgIDxhcmNoaXZlPgorICAgICAgICAgICAgPG1hbmlmZXN0RmlsZT4ke2J1bmRsZS1tYW5pZmVzdH08L21hbmlmZXN0RmlsZT4KKyAgICAgICAgICA8L2FyY2hpdmU+CisgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgIDwvcGx1Z2luPgorCisgICAgICA8cGx1Z2luPgorICAgICAgICA8Z3JvdXBJZD5vcmcuY29kZWhhdXMubW9qbzwvZ3JvdXBJZD4KKyAgICAgICAgPGFydGlmYWN0SWQ+Y2xpcnItbWF2ZW4tcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgPC9wbHVnaW4+CisgICAgPC9wbHVnaW5zPgorICA8L2J1aWxkPgorCisgIDxyZXBvcnRpbmc+CisgICAgPHBsdWdpbnM+CisgICAgICA8cGx1Z2luPgorICAgICAgICA8Z3JvdXBJZD5vcmcuY29kZWhhdXMubW9qbzwvZ3JvdXBJZD4KKyAgICAgICAgPGFydGlmYWN0SWQ+Y2xpcnItbWF2ZW4tcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICA8dmVyc2lvbj4ke2NsaXJyLXZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICA8Y29tcGFyaXNvblZlcnNpb24+JHtqZ2l0LWxhc3QtcmVsZWFzZS12ZXJzaW9ufTwvY29tcGFyaXNvblZlcnNpb24+CisgICAgICAgICAgPG1pblNldmVyaXR5PmluZm88L21pblNldmVyaXR5PgorICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICA8L3BsdWdpbj4KKyAgICA8L3BsdWdpbnM+CisgIDwvcmVwb3J0aW5nPgorPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyL3Jlc291cmNlcy9vcmcvZWNsaXBzZS9qZ2l0L2xmcy9zZXJ2ZXIvaW50ZXJuYWwvTGZzU2VydmVyVGV4dC5wcm9wZXJ0aWVzIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyL3Jlc291cmNlcy9vcmcvZWNsaXBzZS9qZ2l0L2xmcy9zZXJ2ZXIvaW50ZXJuYWwvTGZzU2VydmVyVGV4dC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1MmE3NzQKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIvcmVzb3VyY2VzL29yZy9lY2xpcHNlL2pnaXQvbGZzL3NlcnZlci9pbnRlcm5hbC9MZnNTZXJ2ZXJUZXh0LnByb3BlcnRpZXMKQEAgLTAsMCArMSw0IEBACitjb3JydXB0TG9uZ09iamVjdD1UaGUgY29udGVudCBoYXNoICcnezB9Jycgb2YgdGhlIGxvbmcgb2JqZWN0ICcnezF9JycgZG9lc24nJ3QgbWF0Y2ggaXRzIGlkLCB0aGUgY29ycnVwdCBvYmplY3Qgd2lsbCBiZSBkZWxldGVkLgoraW52YWxpZFBhdGhJbmZvPUludmFsaWQgcGF0aEluZm8gJyd7MH0nJyBkb2VzIG5vdCBtYXRjaCAnJy8neydTSEEtMjU2J30nJycKK29iamVjdE5vdEZvdW5kPU9iamVjdCAnJ3swfScnIG5vdCBmb3VuZAordW5zdXBwb3J0ZWRPcGVyYXRpb249T3BlcmF0aW9uICcnezB9JycgaXMgbm90IHN1cHBvcnRlZApkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xmcy9zZXJ2ZXIvTGFyZ2VGaWxlUmVwb3NpdG9yeS5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xmcy9zZXJ2ZXIvTGFyZ2VGaWxlUmVwb3NpdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiZGY4ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGZzL3NlcnZlci9MYXJnZUZpbGVSZXBvc2l0b3J5LmphdmEKQEAgLTAsMCArMSw4OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSwgTWF0dGhpYXMgU29obiA8bWF0dGhpYXMuc29obkBzYXAuY29tPgorICogYW5kIG90aGVyIGNvcHlyaWdodCBvd25lcnMgYXMgZG9jdW1lbnRlZCBpbiB0aGUgcHJvamVjdCdzIElQIGxvZy4KKyAqCisgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZQorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYxLjAgd2hpY2gKKyAqIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBpcyByZXByb2R1Y2VkIGJlbG93LCBhbmQgaXMKKyAqIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZWRsLXYxMC5waHAKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAqICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCBJbmMuIG5vciB0aGUKKyAqICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKKyAqICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgorICogICB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5ECisgKiBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAorICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYKKyAqIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCitwYWNrYWdlIG9yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlcjsKKworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmFubm90YXRpb25zLk51bGxhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGZzLmxpYi5BbnlMb25nT2JqZWN0SWQ7CisKKy8qKgorICogQWJzdHJhY3Rpb24gb2YgYSByZXBvc2l0b3J5IGZvciBzdG9yaW5nIGxhcmdlIG9iamVjdHMKKyAqCisgKiBAc2luY2UgNC4zCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgTGFyZ2VGaWxlUmVwb3NpdG9yeSB7CisKKwkvKioKKwkgKiBAcGFyYW0gaWQKKwkgKiAgICAgICAgICAgIGlkIG9mIHRoZSBvYmplY3QgdG8gZG93bmxvYWQKKwkgKiBAcmV0dXJuIEFjdGlvbiBmb3IgZG93bmxvYWRpbmcgdGhlIG9iamVjdAorCSAqLworCXB1YmxpYyBSZXNwb25zZS5BY3Rpb24gZ2V0RG93bmxvYWRBY3Rpb24oQW55TG9uZ09iamVjdElkIGlkKTsKKworCS8qKgorCSAqIEBwYXJhbSBpZAorCSAqICAgICAgICAgICAgaWQgb2YgdGhlIG9iamVjdCB0byB1cGxvYWQKKwkgKiBAcGFyYW0gc2l6ZQorCSAqICAgICAgICAgICAgc2l6ZSBvZiB0aGUgb2JqZWN0IHRvIGJlIHVwbG9hZGVkCisJICogQHJldHVybiBBY3Rpb24gZm9yIHVwbG9hZGluZyB0aGUgb2JqZWN0CisJICovCisJcHVibGljIFJlc3BvbnNlLkFjdGlvbiBnZXRVcGxvYWRBY3Rpb24oQW55TG9uZ09iamVjdElkIGlkLCBsb25nIHNpemUpOworCisJLyoqCisJICogQHBhcmFtIGlkCisJICogICAgICAgICAgICBpZCBvZiB0aGUgb2JqZWN0IHRvIGJlIHZlcmlmaWVkCisJICogQHJldHVybiBBY3Rpb24gZm9yIHZlcmlmeWluZyB0aGUgb2JqZWN0LCBvciB7QGNvZGUgbnVsbH0gaWYgdGhlIHNlcnZlcgorCSAqICAgICAgICAgZG9lc24ndCBzdXBwb3J0IG9yIHJlcXVpcmUgdmVyaWZpY2F0aW9uCisJICovCisJcHVibGljIEBOdWxsYWJsZSBSZXNwb25zZS5BY3Rpb24gZ2V0VmVyaWZ5QWN0aW9uKEFueUxvbmdPYmplY3RJZCBpZCk7CisKKwkvKioKKwkgKiBAcGFyYW0gaWQKKwkgKiAgICAgICAgICAgIGlkIG9mIHRoZSBvYmplY3QKKwkgKiBAcmV0dXJuIGxlbmd0aCBvZiB0aGUgb2JqZWN0IGNvbnRlbnQgaW4gYnl0ZXMsIC0xIGlmIHRoZSBvYmplY3QgZG9lc24ndAorCSAqICAgICAgICAgZXhpc3QKKwkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCisJICovCisJcHVibGljIGxvbmcgZ2V0U2l6ZShBbnlMb25nT2JqZWN0SWQgaWQpIHRocm93cyBJT0V4Y2VwdGlvbjsKK30KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci9zcmMvb3JnL2VjbGlwc2UvamdpdC9sZnMvc2VydmVyL0xmc09iamVjdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xmcy9zZXJ2ZXIvTGZzT2JqZWN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzBiYTIyZQotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci9zcmMvb3JnL2VjbGlwc2UvamdpdC9sZnMvc2VydmVyL0xmc09iamVjdC5qYXZhCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUsIFNhc2EgWml2a292IDxzYXNhLnppdmtvdkBzYXAuY29tPgorICogYW5kIG90aGVyIGNvcHlyaWdodCBvd25lcnMgYXMgZG9jdW1lbnRlZCBpbiB0aGUgcHJvamVjdCdzIElQIGxvZy4KKyAqCisgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZQorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYxLjAgd2hpY2gKKyAqIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBpcyByZXByb2R1Y2VkIGJlbG93LCBhbmQgaXMKKyAqIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZWRsLXYxMC5waHAKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAqICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCBJbmMuIG5vciB0aGUKKyAqICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKKyAqICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgorICogICB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5ECisgKiBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAorICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYKKyAqIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCitwYWNrYWdlIG9yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlcjsKKworY2xhc3MgTGZzT2JqZWN0IHsKKwlTdHJpbmcgb2lkOworCWxvbmcgc2l6ZTsKK30KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci9zcmMvb3JnL2VjbGlwc2UvamdpdC9sZnMvc2VydmVyL0xmc1Byb3RvY29sU2VydmxldC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xmcy9zZXJ2ZXIvTGZzUHJvdG9jb2xTZXJ2bGV0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk0MTM3YwotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci9zcmMvb3JnL2VjbGlwc2UvamdpdC9sZnMvc2VydmVyL0xmc1Byb3RvY29sU2VydmxldC5qYXZhCkBAIC0wLDAgKzEsMTI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1LCBTYXNhIFppdmtvdiA8c2FzYS56aXZrb3ZAc2FwLmNvbT4KKyAqIGFuZCBvdGhlciBjb3B5cmlnaHQgb3duZXJzIGFzIGRvY3VtZW50ZWQgaW4gdGhlIHByb2plY3QncyBJUCBsb2cuCisgKgorICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2MS4wIHdoaWNoCisgKiBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgaXMgcmVwcm9kdWNlZCBiZWxvdywgYW5kIGlzCisgKiBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VkbC12MTAucGhwCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgSW5jLiBub3IgdGhlCisgKiAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCisgKiAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3IKKyAqICAgd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORAorICogQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKyAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGCisgKiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXI7CisKK2ltcG9ydCBzdGF0aWMgamF2YS5uaW8uY2hhcnNldC5TdGFuZGFyZENoYXJzZXRzLlVURl84OworaW1wb3J0IHN0YXRpYyBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZS5TQ19PSzsKK2ltcG9ydCBzdGF0aWMgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UuU0NfU0VSVklDRV9VTkFWQUlMQUJMRTsKKworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CitpbXBvcnQgamF2YS5pby5CdWZmZXJlZFdyaXRlcjsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXI7CitpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW1Xcml0ZXI7CitpbXBvcnQgamF2YS5pby5SZWFkZXI7CitpbXBvcnQgamF2YS5pby5Xcml0ZXI7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb247CitpbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0OworaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7CitpbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2U7CisKK2ltcG9ydCBjb20uZ29vZ2xlLmdzb24uRmllbGROYW1pbmdQb2xpY3k7CitpbXBvcnQgY29tLmdvb2dsZS5nc29uLkdzb247CitpbXBvcnQgY29tLmdvb2dsZS5nc29uLkdzb25CdWlsZGVyOworCisvKioKKyAqIExGUyBwcm90b2NvbCBoYW5kbGVyIGltcGxlbWVudGluZyB0aGUgTEZTIGJhdGNoIEFQSSBbMV0KKyAqCisgKiBbMV0gaHR0cHM6Ly9naXRodWIuY29tL2dpdGh1Yi9naXQtbGZzL2Jsb2IvbWFzdGVyL2RvY3MvYXBpL2h0dHAtdjEtYmF0Y2gubWQKKyAqCisgKiBAc2luY2UgNC4zCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBMZnNQcm90b2NvbFNlcnZsZXQgZXh0ZW5kcyBIdHRwU2VydmxldCB7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBDT05URU5UVFlQRV9WTkRfR0lUX0xGU19KU09OID0gImFwcGxpY2F0aW9uL3ZuZC5naXQtbGZzK2pzb24iOyAvLyROT04tTkxTLTEkCisKKwlwcml2YXRlIEdzb24gZ3NvbiA9IGNyZWF0ZUdzb24oKTsKKworCS8qKgorCSAqIEdldCB0aGUgbGFyZ2UgZmlsZSByZXBvc2l0b3J5CisJICoKKwkgKiBAcmV0dXJuIHRoZSBsYXJnZSBmaWxlIHJlcG9zaXRvcnkgc3RvcmluZyBsYXJnZSBmaWxlcworCSAqLworCXByb3RlY3RlZCBhYnN0cmFjdCBMYXJnZUZpbGVSZXBvc2l0b3J5IGdldExhcmdlRmlsZVJlcG9zaXRvcnkoKTsKKworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJlcykKKwkJCXRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CisJCXJlcy5zZXRTdGF0dXMoU0NfT0spOworCQlyZXMuc2V0Q29udGVudFR5cGUoQ09OVEVOVFRZUEVfVk5EX0dJVF9MRlNfSlNPTik7CisKKwkJV3JpdGVyIHcgPSBuZXcgQnVmZmVyZWRXcml0ZXIoCisJCQkJbmV3IE91dHB1dFN0cmVhbVdyaXRlcihyZXMuZ2V0T3V0cHV0U3RyZWFtKCksIFVURl84KSk7CisKKwkJUmVhZGVyIHIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKHJlcS5nZXRJbnB1dFN0cmVhbSgpLCBVVEZfOCkpOworCQlMZnNSZXF1ZXN0IHJlcXVlc3QgPSBnc29uLmZyb21Kc29uKHIsIExmc1JlcXVlc3QuY2xhc3MpOworCisJCUxhcmdlRmlsZVJlcG9zaXRvcnkgcmVwbyA9IGdldExhcmdlRmlsZVJlcG9zaXRvcnkoKTsKKwkJaWYgKHJlcG8gPT0gbnVsbCkgeworCQkJcmVzLnNldFN0YXR1cyhTQ19TRVJWSUNFX1VOQVZBSUxBQkxFKTsKKwkJCXJldHVybjsKKwkJfQorCisJCVRyYW5zZmVySGFuZGxlciBoYW5kbGVyID0gVHJhbnNmZXJIYW5kbGVyCisJCQkJLmZvck9wZXJhdGlvbihyZXF1ZXN0Lm9wZXJhdGlvbiwgcmVwbywgcmVxdWVzdC5vYmplY3RzKTsKKwkJZ3Nvbi50b0pzb24oaGFuZGxlci5wcm9jZXNzKCksIHcpOworCQl3LmZsdXNoKCk7CisJfQorCisJcHJpdmF0ZSBzdGF0aWMgY2xhc3MgTGZzUmVxdWVzdCB7CisJCVN0cmluZyBvcGVyYXRpb247CisKKwkJTGlzdDxMZnNPYmplY3Q+IG9iamVjdHM7CisJfQorCisJcHJpdmF0ZSBzdGF0aWMgR3NvbiBjcmVhdGVHc29uKCkgeworCQlHc29uQnVpbGRlciBnYiA9IG5ldyBHc29uQnVpbGRlcigpCisJCQkJLnNldEZpZWxkTmFtaW5nUG9saWN5KAorCQkJCQkJRmllbGROYW1pbmdQb2xpY3kuTE9XRVJfQ0FTRV9XSVRIX1VOREVSU0NPUkVTKQorCQkJCS5zZXRQcmV0dHlQcmludGluZygpLmRpc2FibGVIdG1sRXNjYXBpbmcoKTsKKwkJcmV0dXJuIGdiLmNyZWF0ZSgpOworCX0KK30KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci9zcmMvb3JnL2VjbGlwc2UvamdpdC9sZnMvc2VydmVyL1Jlc3BvbnNlLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGZzL3NlcnZlci9SZXNwb25zZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjOTcyZTAKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGZzL3NlcnZlci9SZXNwb25zZS5qYXZhCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUsIFNhc2EgWml2a292IDxzYXNhLnppdmtvdkBzYXAuY29tPgorICogYW5kIG90aGVyIGNvcHlyaWdodCBvd25lcnMgYXMgZG9jdW1lbnRlZCBpbiB0aGUgcHJvamVjdCdzIElQIGxvZy4KKyAqCisgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZQorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYxLjAgd2hpY2gKKyAqIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBpcyByZXByb2R1Y2VkIGJlbG93LCBhbmQgaXMKKyAqIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZWRsLXYxMC5waHAKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAqICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCBJbmMuIG5vciB0aGUKKyAqICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKKyAqICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgorICogICB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5ECisgKiBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAorICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYKKyAqIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCitwYWNrYWdlIG9yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlcjsKKworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKKy8qKgorICogUE9KT3MgZm9yIEdzb24gc2VyaWFsaXphdGlvbi9kZXNlcmlhbGl6YXRpb24KKyAqCisgKiBTZWUKKyAqIHtAbGluayA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vZ2l0aHViL2dpdC1sZnMvdHJlZS9tYXN0ZXIvZG9jcy9hcGkiPkxGUworICogQVBJIHNwZWNpZmljYXRpb248L2E+fQorICoKKyAqIEBzaW5jZSA0LjMKKyAqLworcHVibGljIGludGVyZmFjZSBSZXNwb25zZSB7CisJLyoqIERlc2NyaWJlcyBhbiBhY3Rpb24gdGhlIGNsaWVudCBjYW4gZXhlY3V0ZSBvbiBhIHNpbmdsZSBvYmplY3QgKi8KKwljbGFzcyBBY3Rpb24geworCQlwdWJsaWMgU3RyaW5nIGhyZWY7CisJCXB1YmxpYyBNYXA8U3RyaW5nLCBTdHJpbmc+IGhlYWRlcjsKKwl9CisKKwkvKiogRGVzY3JpYmVzIGFuIGVycm9yIHRvIGJlIHJldHVybmVkIGJ5IHRoZSBMRlMgYmF0Y2ggQVBJICovCisJY2xhc3MgRXJyb3IgeworCQlwdWJsaWMgaW50IGNvZGU7CisJCXB1YmxpYyBTdHJpbmcgbWVzc2FnZTsKKwl9CisKKwkvKiogRGVzY3JpYmVzIHRoZSBhY3Rpb25zIHRoZSBMRlMgc2VydmVyIG9mZmVycyBmb3IgYSBzaW5nbGUgb2JqZWN0ICovCisJY2xhc3MgT2JqZWN0SW5mbyB7CisJCXB1YmxpYyBTdHJpbmcgb2lkOworCQlwdWJsaWMgbG9uZyBzaXplOworCQlwdWJsaWMgTWFwPFN0cmluZywgQWN0aW9uPiBhY3Rpb25zOworCQlwdWJsaWMgRXJyb3IgZXJyb3I7CisJfQorCisJLyoqIERlc2NyaWJlcyB0aGUgYm9keSBvZiBhIExGUyBiYXRjaCBBUEkgcmVzcG9uc2UgKi8KKwljbGFzcyBCb2R5IHsKKwkJcHVibGljIExpc3Q8T2JqZWN0SW5mbz4gb2JqZWN0czsKKwl9Cit9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGZzL3NlcnZlci9UcmFuc2ZlckhhbmRsZXIuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci9zcmMvb3JnL2VjbGlwc2UvamdpdC9sZnMvc2VydmVyL1RyYW5zZmVySGFuZGxlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmNWI2MWMKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGZzL3NlcnZlci9UcmFuc2ZlckhhbmRsZXIuamF2YQpAQCAtMCwwICsxLDE2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSwgU2FzYSBaaXZrb3YgPHNhc2Eueml2a292QHNhcC5jb20+CisgKiBhbmQgb3RoZXIgY29weXJpZ2h0IG93bmVycyBhcyBkb2N1bWVudGVkIGluIHRoZSBwcm9qZWN0J3MgSVAgbG9nLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlCisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgRGlzdHJpYnV0aW9uIExpY2Vuc2UgdjEuMCB3aGljaAorICogYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGlzIHJlcHJvZHVjZWQgYmVsb3csIGFuZCBpcworICogYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lZGwtdjEwLnBocAorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIEluYy4gbm9yIHRoZQorICogICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorICogICBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCisgKiAgIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQKKyAqIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCisgKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRgorICogQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworcGFja2FnZSBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXI7CisKK2ltcG9ydCBzdGF0aWMgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UuU0NfTk9UX0ZPVU5EOworCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdDsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5sZnMubGliLkxvbmdPYmplY3RJZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIuUmVzcG9uc2UuQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci5SZXNwb25zZS5Cb2R5OworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci5pbnRlcm5hbC5MZnNTZXJ2ZXJUZXh0OworCithYnN0cmFjdCBjbGFzcyBUcmFuc2ZlckhhbmRsZXIgeworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERPV05MT0FEID0gImRvd25sb2FkIjsgLy8kTk9OLU5MUy0xJAorCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBVUExPQUQgPSAidXBsb2FkIjsgLy8kTk9OLU5MUy0xJAorCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBWRVJJRlkgPSAidmVyaWZ5IjsgLy8kTk9OLU5MUy0xJAorCisJc3RhdGljIFRyYW5zZmVySGFuZGxlciBmb3JPcGVyYXRpb24oU3RyaW5nIG9wZXJhdGlvbiwKKwkJCUxhcmdlRmlsZVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgTGlzdDxMZnNPYmplY3Q+IG9iamVjdHMpIHsKKwkJc3dpdGNoIChvcGVyYXRpb24pIHsKKwkJY2FzZSBUcmFuc2ZlckhhbmRsZXIuVVBMT0FEOgorCQkJcmV0dXJuIG5ldyBVcGxvYWQocmVwb3NpdG9yeSwgb2JqZWN0cyk7CisJCWNhc2UgVHJhbnNmZXJIYW5kbGVyLkRPV05MT0FEOgorCQkJcmV0dXJuIG5ldyBEb3dubG9hZChyZXBvc2l0b3J5LCBvYmplY3RzKTsKKwkJY2FzZSBUcmFuc2ZlckhhbmRsZXIuVkVSSUZZOgorCQlkZWZhdWx0OgorCQkJdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKE1lc3NhZ2VGb3JtYXQuZm9ybWF0KAorCQkJCQlMZnNTZXJ2ZXJUZXh0LmdldCgpLnVuc3VwcG9ydGVkT3BlcmF0aW9uLCBvcGVyYXRpb24pKTsKKwkJfQorCX0KKworCXByaXZhdGUgc3RhdGljIGNsYXNzIFVwbG9hZCBleHRlbmRzIFRyYW5zZmVySGFuZGxlciB7CisJCVVwbG9hZChMYXJnZUZpbGVSZXBvc2l0b3J5IHJlcG9zaXRvcnksCisJCQkJTGlzdDxMZnNPYmplY3Q+IG9iamVjdHMpIHsKKwkJCXN1cGVyKHJlcG9zaXRvcnksIG9iamVjdHMpOworCQl9CisKKwkJQE92ZXJyaWRlCisJCUJvZHkgcHJvY2VzcygpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCQlSZXNwb25zZS5Cb2R5IGJvZHkgPSBuZXcgUmVzcG9uc2UuQm9keSgpOworCQkJaWYgKG9iamVjdHMuc2l6ZSgpID4gMCkgeworCQkJCWJvZHkub2JqZWN0cyA9IG5ldyBBcnJheUxpc3Q8PigpOworCQkJCWZvciAoTGZzT2JqZWN0IG8gOiBvYmplY3RzKSB7CisJCQkJCWFkZE9iamVjdEluZm8oYm9keSwgbyk7CisJCQkJfQorCQkJfQorCQkJcmV0dXJuIGJvZHk7CisJCX0KKworCQlwcml2YXRlIHZvaWQgYWRkT2JqZWN0SW5mbyhSZXNwb25zZS5Cb2R5IGJvZHksIExmc09iamVjdCBvKQorCQkJCXRocm93cyBJT0V4Y2VwdGlvbiB7CisJCQlSZXNwb25zZS5PYmplY3RJbmZvIGluZm8gPSBuZXcgUmVzcG9uc2UuT2JqZWN0SW5mbygpOworCQkJYm9keS5vYmplY3RzLmFkZChpbmZvKTsKKwkJCWluZm8ub2lkID0gby5vaWQ7CisJCQlpbmZvLnNpemUgPSBvLnNpemU7CisKKwkJCUxvbmdPYmplY3RJZCBvaWQgPSBMb25nT2JqZWN0SWQuZnJvbVN0cmluZyhvLm9pZCk7CisJCQlpZiAocmVwb3NpdG9yeS5nZXRTaXplKG9pZCkgPT0gLTEpIHsKKwkJCQlpbmZvLmFjdGlvbnMgPSBuZXcgSGFzaE1hcDw+KCk7CisJCQkJaW5mby5hY3Rpb25zLnB1dChVUExPQUQsCisJCQkJCQlyZXBvc2l0b3J5LmdldFVwbG9hZEFjdGlvbihvaWQsIG8uc2l6ZSkpOworCQkJCUFjdGlvbiB2ZXJpZnkgPSByZXBvc2l0b3J5LmdldFZlcmlmeUFjdGlvbihvaWQpOworCQkJCWlmICh2ZXJpZnkgIT0gbnVsbCkgeworCQkJCQlpbmZvLmFjdGlvbnMucHV0KFZFUklGWSwgdmVyaWZ5KTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwlwcml2YXRlIHN0YXRpYyBjbGFzcyBEb3dubG9hZCBleHRlbmRzIFRyYW5zZmVySGFuZGxlciB7CisJCURvd25sb2FkKExhcmdlRmlsZVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwKKwkJCQlMaXN0PExmc09iamVjdD4gb2JqZWN0cykgeworCQkJc3VwZXIocmVwb3NpdG9yeSwgb2JqZWN0cyk7CisJCX0KKworCQlAT3ZlcnJpZGUKKwkJQm9keSBwcm9jZXNzKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJCVJlc3BvbnNlLkJvZHkgYm9keSA9IG5ldyBSZXNwb25zZS5Cb2R5KCk7CisJCQlpZiAob2JqZWN0cy5zaXplKCkgPiAwKSB7CisJCQkJYm9keS5vYmplY3RzID0gbmV3IEFycmF5TGlzdDw+KCk7CisJCQkJZm9yIChMZnNPYmplY3QgbyA6IG9iamVjdHMpIHsKKwkJCQkJYWRkT2JqZWN0SW5mbyhib2R5LCBvKTsKKwkJCQl9CisJCQl9CisJCQlyZXR1cm4gYm9keTsKKwkJfQorCisJCXByaXZhdGUgdm9pZCBhZGRPYmplY3RJbmZvKFJlc3BvbnNlLkJvZHkgYm9keSwgTGZzT2JqZWN0IG8pCisJCQkJdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJCVJlc3BvbnNlLk9iamVjdEluZm8gaW5mbyA9IG5ldyBSZXNwb25zZS5PYmplY3RJbmZvKCk7CisJCQlib2R5Lm9iamVjdHMuYWRkKGluZm8pOworCQkJaW5mby5vaWQgPSBvLm9pZDsKKwkJCWluZm8uc2l6ZSA9IG8uc2l6ZTsKKworCQkJTG9uZ09iamVjdElkIG9pZCA9IExvbmdPYmplY3RJZC5mcm9tU3RyaW5nKG8ub2lkKTsKKwkJCWlmIChyZXBvc2l0b3J5LmdldFNpemUob2lkKSA+PSAwKSB7CisJCQkJaW5mby5hY3Rpb25zID0gbmV3IEhhc2hNYXA8PigpOworCQkJCWluZm8uYWN0aW9ucy5wdXQoRE9XTkxPQUQsCisJCQkJCQlyZXBvc2l0b3J5LmdldERvd25sb2FkQWN0aW9uKG9pZCkpOworCQkJfSBlbHNlIHsKKwkJCQlpbmZvLmVycm9yID0gbmV3IFJlc3BvbnNlLkVycm9yKCk7CisJCQkJaW5mby5lcnJvci5jb2RlID0gU0NfTk9UX0ZPVU5EOworCQkJCWluZm8uZXJyb3IubWVzc2FnZSA9IE1lc3NhZ2VGb3JtYXQuZm9ybWF0KAorCQkJCQkJTGZzU2VydmVyVGV4dC5nZXQoKS5vYmplY3ROb3RGb3VuZCwKKwkJCQkJCW9pZC5nZXROYW1lKCkpOworCQkJfQorCQl9CisJfQorCisJZmluYWwgTGFyZ2VGaWxlUmVwb3NpdG9yeSByZXBvc2l0b3J5OworCisJZmluYWwgTGlzdDxMZnNPYmplY3Q+IG9iamVjdHM7CisKKwlUcmFuc2ZlckhhbmRsZXIoTGFyZ2VGaWxlUmVwb3NpdG9yeSByZXBvc2l0b3J5LAorCQkJTGlzdDxMZnNPYmplY3Q+IG9iamVjdHMpIHsKKwkJdGhpcy5yZXBvc2l0b3J5ID0gcmVwb3NpdG9yeTsKKwkJdGhpcy5vYmplY3RzID0gb2JqZWN0czsKKwl9CisKKwlhYnN0cmFjdCBSZXNwb25zZS5Cb2R5IHByb2Nlc3MoKSB0aHJvd3MgSU9FeGNlcHRpb247Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xmcy9zZXJ2ZXIvZnMvQXRvbWljT2JqZWN0T3V0cHV0U3RyZWFtLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGZzL3NlcnZlci9mcy9BdG9taWNPYmplY3RPdXRwdXRTdHJlYW0uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lY2M3YzFmCi0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xmcy9zZXJ2ZXIvZnMvQXRvbWljT2JqZWN0T3V0cHV0U3RyZWFtLmphdmEKQEAgLTAsMCArMSwxMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUsIE1hdHRoaWFzIFNvaG4gPG1hdHRoaWFzLnNvaG5Ac2FwLmNvbT4KKyAqIGFuZCBvdGhlciBjb3B5cmlnaHQgb3duZXJzIGFzIGRvY3VtZW50ZWQgaW4gdGhlIHByb2plY3QncyBJUCBsb2cuCisgKgorICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2MS4wIHdoaWNoCisgKiBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgaXMgcmVwcm9kdWNlZCBiZWxvdywgYW5kIGlzCisgKiBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VkbC12MTAucGhwCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgSW5jLiBub3IgdGhlCisgKiAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCisgKiAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3IKKyAqICAgd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORAorICogQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKyAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGCisgKiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIuZnM7CisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEubmlvLmZpbGUuUGF0aDsKK2ltcG9ydCBqYXZhLnNlY3VyaXR5LkRpZ2VzdE91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5maWxlLkxvY2tGaWxlOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGZzLmVycm9ycy5Db3JydXB0TG9uZ09iamVjdEV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5saWIuQW55TG9uZ09iamVjdElkOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGZzLmxpYi5Db25zdGFudHM7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5sZnMubGliLkxvbmdPYmplY3RJZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIuaW50ZXJuYWwuTGZzU2VydmVyVGV4dDsKKworLyoqCisgKiBPdXRwdXQgc3RyZWFtIHdyaXRpbmcgY29udGVudCB0byBhIHtAbGluayBMb2NrRmlsZX0gd2hpY2ggaXMgY29tbWl0dGVkIG9uCisgKiBjbG9zZSgpLiBUaGUgc3RyZWFtIGNoZWNrcyBpZiB0aGUgaGFzaCBvZiB0aGUgc3RyZWFtIGNvbnRlbnQgbWF0Y2hlcyB0aGUKKyAqIGlkLgorICovCitjbGFzcyBBdG9taWNPYmplY3RPdXRwdXRTdHJlYW0gZXh0ZW5kcyBPdXRwdXRTdHJlYW0geworCisJcHJpdmF0ZSBMb2NrRmlsZSBsb2NrZWQ7CisKKwlwcml2YXRlIERpZ2VzdE91dHB1dFN0cmVhbSBvdXQ7CisKKwlwcml2YXRlIGJvb2xlYW4gYWJvcnRlZDsKKworCXByaXZhdGUgQW55TG9uZ09iamVjdElkIGlkOworCisJQXRvbWljT2JqZWN0T3V0cHV0U3RyZWFtKFBhdGggcGF0aCwgQW55TG9uZ09iamVjdElkIGlkKQorCQkJdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJbG9ja2VkID0gbmV3IExvY2tGaWxlKHBhdGgudG9GaWxlKCkpOworCQlsb2NrZWQubG9jaygpOworCQl0aGlzLmlkID0gaWQ7CisJCW91dCA9IG5ldyBEaWdlc3RPdXRwdXRTdHJlYW0obG9ja2VkLmdldE91dHB1dFN0cmVhbSgpLAorCQkJCUNvbnN0YW50cy5uZXdNZXNzYWdlRGlnZXN0KCkpOworCX0KKworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHdyaXRlKGludCBiKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQlvdXQud3JpdGUoYik7CisJfQorCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgd3JpdGUoYnl0ZVtdIGIpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCW91dC53cml0ZShiKTsKKwl9CisKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCB3cml0ZShieXRlW10gYiwgaW50IG9mZiwgaW50IGxlbikgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJb3V0LndyaXRlKGIsIG9mZiwgbGVuKTsKKwl9CisKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBjbG9zZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCW91dC5jbG9zZSgpOworCQlpZiAoIWFib3J0ZWQpIHsKKwkJCXZlcmlmeUhhc2goKTsKKwkJCWxvY2tlZC5jb21taXQoKTsKKwkJfQorCX0KKworCXByaXZhdGUgdm9pZCB2ZXJpZnlIYXNoKCkgeworCQlBbnlMb25nT2JqZWN0SWQgY29udGVudEhhc2ggPSBMb25nT2JqZWN0SWQKKwkJCQkuZnJvbVJhdyhvdXQuZ2V0TWVzc2FnZURpZ2VzdCgpLmRpZ2VzdCgpKTsKKwkJaWYgKCFjb250ZW50SGFzaC5lcXVhbHMoaWQpKSB7CisJCQlhYm9ydCgpOworCQkJdGhyb3cgbmV3IENvcnJ1cHRMb25nT2JqZWN0RXhjZXB0aW9uKGlkLCBjb250ZW50SGFzaCwKKwkJCQkJTWVzc2FnZUZvcm1hdC5mb3JtYXQoTGZzU2VydmVyVGV4dC5nZXQoKS5jb3JydXB0TG9uZ09iamVjdCwKKwkJCQkJCQljb250ZW50SGFzaCwgaWQpKTsKKwkJfQorCX0KKworCXZvaWQgYWJvcnQoKSB7CisJCWxvY2tlZC51bmxvY2soKTsKKwkJYWJvcnRlZCA9IHRydWU7CisJfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci9zcmMvb3JnL2VjbGlwc2UvamdpdC9sZnMvc2VydmVyL2ZzL0ZpbGVMZnNSZXBvc2l0b3J5LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGZzL3NlcnZlci9mcy9GaWxlTGZzUmVwb3NpdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyZGEyNzEKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGZzL3NlcnZlci9mcy9GaWxlTGZzUmVwb3NpdG9yeS5qYXZhCkBAIC0wLDAgKzEsMTg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1LCBNYXR0aGlhcyBTb2huIDxtYXR0aGlhcy5zb2huQHNhcC5jb20+CisgKiBhbmQgb3RoZXIgY29weXJpZ2h0IG93bmVycyBhcyBkb2N1bWVudGVkIGluIHRoZSBwcm9qZWN0J3MgSVAgbG9nLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlCisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgRGlzdHJpYnV0aW9uIExpY2Vuc2UgdjEuMCB3aGljaAorICogYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGlzIHJlcHJvZHVjZWQgYmVsb3csIGFuZCBpcworICogYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lZGwtdjEwLnBocAorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIEluYy4gbm9yIHRoZQorICogICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorICogICBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCisgKiAgIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQKKyAqIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCisgKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRgorICogQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLmZzOworCitpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQudXRpbC5IdHRwU3VwcG9ydC5IRFJfQVVUSE9SSVpBVElPTjsKKworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5uaW8uY2hhbm5lbHMuQ2hhbm5lbHM7CitpbXBvcnQgamF2YS5uaW8uY2hhbm5lbHMuRmlsZUNoYW5uZWw7CitpbXBvcnQgamF2YS5uaW8uY2hhbm5lbHMuUmVhZGFibGVCeXRlQ2hhbm5lbDsKK2ltcG9ydCBqYXZhLm5pby5jaGFubmVscy5Xcml0YWJsZUJ5dGVDaGFubmVsOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZXM7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5QYXRoOworaW1wb3J0IGphdmEubmlvLmZpbGUuU3RhbmRhcmRPcGVuT3B0aW9uOworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuYW5ub3RhdGlvbnMuTnVsbGFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5sZnMubGliLkFueUxvbmdPYmplY3RJZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5saWIuQ29uc3RhbnRzOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci5MYXJnZUZpbGVSZXBvc2l0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci5SZXNwb25zZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIuUmVzcG9uc2UuQWN0aW9uOworCisvKioKKyAqIFJlcG9zaXRvcnkgc3RvcmluZyBsYXJnZSBvYmplY3RzIGluIHRoZSBmaWxlIHN5c3RlbQorICoKKyAqIEBzaW5jZSA0LjMKKyAqLworcHVibGljIGNsYXNzIEZpbGVMZnNSZXBvc2l0b3J5IGltcGxlbWVudHMgTGFyZ2VGaWxlUmVwb3NpdG9yeSB7CisKKwlwcml2YXRlIGZpbmFsIFN0cmluZyB1cmw7CisJcHJpdmF0ZSBmaW5hbCBQYXRoIGRpcjsKKwlwcml2YXRlIEF0b21pY09iamVjdE91dHB1dFN0cmVhbSBvdXQ7CisKKwkvKioKKwkgKiBAcGFyYW0gdXJsCisJICogICAgICAgICAgICBleHRlcm5hbCBVUkwgb2YgdGhpcyByZXBvc2l0b3J5CisJICogQHBhcmFtIGRpcgorCSAqICAgICAgICAgICAgc3RvcmFnZSBkaXJlY3RvcnkKKwkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCisJICovCisJcHVibGljIEZpbGVMZnNSZXBvc2l0b3J5KFN0cmluZyB1cmwsIFBhdGggZGlyKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQl0aGlzLnVybCA9IHVybDsKKwkJdGhpcy5kaXIgPSBkaXI7CisJCUZpbGVzLmNyZWF0ZURpcmVjdG9yaWVzKGRpcik7CisJfQorCisJQE92ZXJyaWRlCisJcHVibGljIFJlc3BvbnNlLkFjdGlvbiBnZXREb3dubG9hZEFjdGlvbihBbnlMb25nT2JqZWN0SWQgaWQpIHsKKwkJcmV0dXJuIGdldEFjdGlvbihpZCk7CisJfQorCisJQE92ZXJyaWRlCisJcHVibGljIEFjdGlvbiBnZXRVcGxvYWRBY3Rpb24oQW55TG9uZ09iamVjdElkIGlkLCBsb25nIHNpemUpIHsKKwkJcmV0dXJuIGdldEFjdGlvbihpZCk7CisJfQorCisJQE92ZXJyaWRlCisJcHVibGljIEBOdWxsYWJsZSBBY3Rpb24gZ2V0VmVyaWZ5QWN0aW9uKEFueUxvbmdPYmplY3RJZCBpZCkgeworCQlyZXR1cm4gbnVsbDsKKwl9CisKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgbG9uZyBnZXRTaXplKEFueUxvbmdPYmplY3RJZCBpZCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJUGF0aCBwID0gZ2V0UGF0aChpZCk7CisJCWlmIChGaWxlcy5leGlzdHMocCkpIHsKKwkJCXJldHVybiBGaWxlcy5zaXplKHApOworCQl9IGVsc2UgeworCQkJcmV0dXJuIC0xOworCQl9CisJfQorCisJLyoqCisJICogR2V0IHRoZSBzdG9yYWdlIGRpcmVjdG9yeQorCSAqCisJICogQHJldHVybiB0aGUgcGF0aCBvZiB0aGUgc3RvcmFnZSBkaXJlY3RvcnkKKwkgKi8KKwlwdWJsaWMgUGF0aCBnZXREaXIoKSB7CisJCXJldHVybiBkaXI7CisJfQorCisJLyoqCisJICogR2V0IHRoZSBwYXRoIHdoZXJlIHRoZSBnaXZlbiBvYmplY3QgaXMgc3RvcmVkCisJICoKKwkgKiBAcGFyYW0gaWQKKwkgKiAgICAgICAgICAgIGlkIG9mIGEgbGFyZ2Ugb2JqZWN0CisJICogQHJldHVybiBwYXRoIHRoZSBvYmplY3QncyBzdG9yYWdlIHBhdGgKKwkgKi8KKwlwcm90ZWN0ZWQgUGF0aCBnZXRQYXRoKEFueUxvbmdPYmplY3RJZCBpZCkgeworCQlTdHJpbmdCdWlsZGVyIHMgPSBuZXcgU3RyaW5nQnVpbGRlcigKKwkJCQlDb25zdGFudHMuTE9OR19PQkpFQ1RfSURfU1RSSU5HX0xFTkdUSCArIDYpOworCQlzLmFwcGVuZCh0b0hleENoYXJBcnJheShpZC5nZXRGaXJzdEJ5dGUoKSkpLmFwcGVuZCgnLycpOworCQlzLmFwcGVuZCh0b0hleENoYXJBcnJheShpZC5nZXRTZWNvbmRCeXRlKCkpKS5hcHBlbmQoJy8nKTsKKwkJcy5hcHBlbmQoaWQubmFtZSgpKTsKKwkJcmV0dXJuIGRpci5yZXNvbHZlKHMudG9TdHJpbmcoKSk7CisJfQorCisJcHJpdmF0ZSBSZXNwb25zZS5BY3Rpb24gZ2V0QWN0aW9uKEFueUxvbmdPYmplY3RJZCBpZCkgeworCQlSZXNwb25zZS5BY3Rpb24gYSA9IG5ldyBSZXNwb25zZS5BY3Rpb24oKTsKKwkJYS5ocmVmID0gdXJsICsgaWQuZ2V0TmFtZSgpOworCQlhLmhlYWRlciA9IENvbGxlY3Rpb25zLnNpbmdsZXRvbk1hcChIRFJfQVVUSE9SSVpBVElPTiwgIm5vdDpyZXF1aXJlZCIpOyAvLyROT04tTkxTLTEkCisJCXJldHVybiBhOworCX0KKworCVJlYWRhYmxlQnl0ZUNoYW5uZWwgZ2V0UmVhZENoYW5uZWwoQW55TG9uZ09iamVjdElkIGlkKQorCQkJdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJcmV0dXJuIEZpbGVDaGFubmVsLm9wZW4oZ2V0UGF0aChpZCksIFN0YW5kYXJkT3Blbk9wdGlvbi5SRUFEKTsKKwl9CisKKwlXcml0YWJsZUJ5dGVDaGFubmVsIGdldFdyaXRlQ2hhbm5lbChBbnlMb25nT2JqZWN0SWQgaWQpCisJCQl0aHJvd3MgSU9FeGNlcHRpb24geworCQlQYXRoIHBhdGggPSBnZXRQYXRoKGlkKTsKKwkJRmlsZXMuY3JlYXRlRGlyZWN0b3JpZXMocGF0aC5nZXRQYXJlbnQoKSk7CisJCW91dCA9IG5ldyBBdG9taWNPYmplY3RPdXRwdXRTdHJlYW0ocGF0aCwgaWQpOworCQlyZXR1cm4gQ2hhbm5lbHMubmV3Q2hhbm5lbChvdXQpOworCX0KKworCS8qKgorCSAqIEFib3J0IHRoZSBvdXRwdXQgc3RyZWFtCisJICovCisJdm9pZCBhYm9ydFdyaXRlKCkgeworCQlpZiAob3V0ICE9IG51bGwpIHsKKwkJCW91dC5hYm9ydCgpOworCQl9CisJfQorCisJcHJpdmF0ZSBzdGF0aWMgY2hhcltdIHRvSGV4Q2hhckFycmF5KGludCBiKSB7CisJCWZpbmFsIGNoYXJbXSBkc3QgPSBuZXcgY2hhclsyXTsKKwkJZm9ybWF0SGV4Q2hhcihkc3QsIDAsIGIpOworCQlyZXR1cm4gZHN0OworCX0KKworCXByaXZhdGUgc3RhdGljIGZpbmFsIGNoYXJbXSBoZXhjaGFyID0geyAnMCcsICcxJywgJzInLCAnMycsICc0JywgJzUnLCAnNicsCisJCQknNycsICc4JywgJzknLCAnYScsICdiJywgJ2MnLCAnZCcsICdlJywgJ2YnIH07CisKKwlwcml2YXRlIHN0YXRpYyB2b2lkIGZvcm1hdEhleENoYXIoZmluYWwgY2hhcltdIGRzdCwgZmluYWwgaW50IHAsIGludCBiKSB7CisJCWludCBvID0gcCArIDE7CisJCXdoaWxlIChvID49IHAgJiYgYiAhPSAwKSB7CisJCQlkc3Rbby0tXSA9IGhleGNoYXJbYiAmIDB4Zl07CisJCQliID4+Pj0gNDsKKwkJfQorCQl3aGlsZSAobyA+PSBwKQorCQkJZHN0W28tLV0gPSAnMCc7CisJfQorfQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xmcy9zZXJ2ZXIvZnMvRmlsZUxmc1NlcnZsZXQuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci9zcmMvb3JnL2VjbGlwc2UvamdpdC9sZnMvc2VydmVyL2ZzL0ZpbGVMZnNTZXJ2bGV0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg2NGFmOAotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci9zcmMvb3JnL2VjbGlwc2UvamdpdC9sZnMvc2VydmVyL2ZzL0ZpbGVMZnNTZXJ2bGV0LmphdmEKQEAgLTAsMCArMSwxNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUsIE1hdHRoaWFzIFNvaG4gPG1hdHRoaWFzLnNvaG5Ac2FwLmNvbT4KKyAqIGFuZCBvdGhlciBjb3B5cmlnaHQgb3duZXJzIGFzIGRvY3VtZW50ZWQgaW4gdGhlIHByb2plY3QncyBJUCBsb2cuCisgKgorICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2MS4wIHdoaWNoCisgKiBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgaXMgcmVwcm9kdWNlZCBiZWxvdywgYW5kIGlzCisgKiBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VkbC12MTAucGhwCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgSW5jLiBub3IgdGhlCisgKiAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCisgKiAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3IKKyAqICAgd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORAorICogQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKyAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGCisgKiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIuZnM7CisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEudGV4dC5NZXNzYWdlRm9ybWF0OworCitpbXBvcnQgamF2YXguc2VydmxldC5Bc3luY0NvbnRleHQ7CitpbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uOworaW1wb3J0IGphdmF4LnNlcnZsZXQuYW5ub3RhdGlvbi5XZWJTZXJ2bGV0OworaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldDsKK2ltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OworaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlOworCitpbXBvcnQgb3JnLmFwYWNoZS5odHRwLkh0dHBTdGF0dXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5sZnMuZXJyb3JzLkludmFsaWRMb25nT2JqZWN0SWRFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5sZnMubGliLkFueUxvbmdPYmplY3RJZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5saWIuQ29uc3RhbnRzOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGZzLmxpYi5Mb25nT2JqZWN0SWQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLmludGVybmFsLkxmc1NlcnZlclRleHQ7CisKKy8qKgorICogU2VydmxldCBzdXBwb3J0aW5nIHVwbG9hZCBhbmQgZG93bmxvYWQgb2YgbGFyZ2Ugb2JqZWN0cyBhcyBkZWZpbmVkIGJ5IHRoZQorICogR2l0SHViIExhcmdlIEZpbGUgU3RvcmFnZSBleHRlbnNpb24gQVBJIGV4dGVuZGluZyBnaXQgdG8gYWxsb3cgc2VwYXJhdGUKKyAqIHN0b3JhZ2Ugb2YgbGFyZ2UgZmlsZXMKKyAqIChodHRwczovL2dpdGh1Yi5jb20vZ2l0aHViL2dpdC1sZnMvdHJlZS9tYXN0ZXIvZG9jcy9hcGkpLgorICoKKyAqIEBzaW5jZSA0LjMKKyAqLworQFdlYlNlcnZsZXQoYXN5bmNTdXBwb3J0ZWQgPSB0cnVlKQorcHVibGljIGNsYXNzIEZpbGVMZnNTZXJ2bGV0IGV4dGVuZHMgSHR0cFNlcnZsZXQgeworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7CisKKwlwcml2YXRlIGZpbmFsIEZpbGVMZnNSZXBvc2l0b3J5IHJlcG9zaXRvcnk7CisKKwlwcml2YXRlIGZpbmFsIGxvbmcgdGltZW91dDsKKworCS8qKgorCSAqIEBwYXJhbSByZXBvc2l0b3J5CisJICogICAgICAgICAgICB0aGUgcmVwb3NpdG9yeSBzdG9yaW5nIHRoZSBsYXJnZSBvYmplY3RzCisJICogQHBhcmFtIHRpbWVvdXQKKwkgKiAgICAgICAgICAgIHRpbWVvdXQgZm9yIG9iamVjdCB1cGxvYWQgLyBkb3dubG9hZCBpbiBtaWxsaXNlY29uZHMKKwkgKi8KKwlwdWJsaWMgRmlsZUxmc1NlcnZsZXQoRmlsZUxmc1JlcG9zaXRvcnkgcmVwb3NpdG9yeSwgbG9uZyB0aW1lb3V0KSB7CisJCXRoaXMucmVwb3NpdG9yeSA9IHJlcG9zaXRvcnk7CisJCXRoaXMudGltZW91dCA9IHRpbWVvdXQ7CisJfQorCisJLyoqCisJICogSGFuZGxlcyBvYmplY3QgZG93bmxvYWRzCisJICoKKwkgKiBAcGFyYW0gcmVxCisJICogICAgICAgICAgICBzZXJ2bGV0IHJlcXVlc3QKKwkgKiBAcGFyYW0gcnNwCisJICogICAgICAgICAgICBzZXJ2bGV0IHJlc3BvbnNlCisJICogQHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uCisJICogICAgICAgICAgICAgaWYgYSBzZXJ2bGV0LXNwZWNpZmljIGVycm9yIG9jY3VycworCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KKwkgKiAgICAgICAgICAgICBpZiBhbiBJL08gZXJyb3Igb2NjdXJzCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwKKwkJCUh0dHBTZXJ2bGV0UmVzcG9uc2UgcnNwKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geworCQlBbnlMb25nT2JqZWN0SWQgb2JqID0gZ2V0T2JqZWN0VG9UcmFuc2ZlcihyZXEsIHJzcCk7CisJCWlmIChvYmogIT0gbnVsbCkgeworCQkJaWYgKHJlcG9zaXRvcnkuZ2V0U2l6ZShvYmopID09IC0xKSB7CisJCQkJc2VuZEVycm9yKHJzcCwgSHR0cFN0YXR1cy5TQ19OT1RfRk9VTkQsIE1lc3NhZ2VGb3JtYXQKKwkJCQkJCS5mb3JtYXQoTGZzU2VydmVyVGV4dC5nZXQoKS5vYmplY3ROb3RGb3VuZCwgb2JqKSk7CisJCQkJcmV0dXJuOworCQkJfQorCQkJQXN5bmNDb250ZXh0IGNvbnRleHQgPSByZXEuc3RhcnRBc3luYygpOworCQkJY29udGV4dC5zZXRUaW1lb3V0KHRpbWVvdXQpOworCQkJcnNwLmdldE91dHB1dFN0cmVhbSgpCisJCQkJCS5zZXRXcml0ZUxpc3RlbmVyKG5ldyBPYmplY3REb3dubG9hZExpc3RlbmVyKHJlcG9zaXRvcnksCisJCQkJCQkJY29udGV4dCwgcnNwLCBvYmopKTsKKwkJfQorCX0KKworCXByaXZhdGUgQW55TG9uZ09iamVjdElkIGdldE9iamVjdFRvVHJhbnNmZXIoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwKKwkJCUh0dHBTZXJ2bGV0UmVzcG9uc2UgcnNwKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQlTdHJpbmcgaW5mbyA9IHJlcS5nZXRQYXRoSW5mbygpOworCQlpZiAoaW5mby5sZW5ndGgoKSAhPSAxICsgQ29uc3RhbnRzLkxPTkdfT0JKRUNUX0lEX1NUUklOR19MRU5HVEgpIHsKKwkJCXNlbmRFcnJvcihyc3AsIEh0dHBTdGF0dXMuU0NfQkFEX1JFUVVFU1QsIE1lc3NhZ2VGb3JtYXQKKwkJCQkJLmZvcm1hdChMZnNTZXJ2ZXJUZXh0LmdldCgpLmludmFsaWRQYXRoSW5mbywgaW5mbykpOworCQkJcmV0dXJuIG51bGw7CisJCX0KKwkJdHJ5IHsKKwkJCXJldHVybiBMb25nT2JqZWN0SWQuZnJvbVN0cmluZyhpbmZvLnN1YnN0cmluZygxLCA2NSkpOworCQl9IGNhdGNoIChJbnZhbGlkTG9uZ09iamVjdElkRXhjZXB0aW9uIGUpIHsKKwkJCXNlbmRFcnJvcihyc3AsIEh0dHBTdGF0dXMuU0NfQkFEX1JFUVVFU1QsIGUuZ2V0TWVzc2FnZSgpKTsKKwkJCXJldHVybiBudWxsOworCQl9CisJfQorCisJLyoqCisJICogSGFuZGxlIG9iamVjdCB1cGxvYWRzCisJICoKKwkgKiBAcGFyYW0gcmVxCisJICogICAgICAgICAgICBzZXJ2bGV0IHJlcXVlc3QKKwkgKiBAcGFyYW0gcnNwCisJICogICAgICAgICAgICBzZXJ2bGV0IHJlc3BvbnNlCisJICogQHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uCisJICogICAgICAgICAgICAgaWYgYSBzZXJ2bGV0LXNwZWNpZmljIGVycm9yIG9jY3VycworCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KKwkgKiAgICAgICAgICAgICBpZiBhbiBJL08gZXJyb3Igb2NjdXJzCisJICovCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgZG9QdXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwKKwkJCUh0dHBTZXJ2bGV0UmVzcG9uc2UgcnNwKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geworCQlBbnlMb25nT2JqZWN0SWQgaWQgPSBnZXRPYmplY3RUb1RyYW5zZmVyKHJlcSwgcnNwKTsKKwkJaWYgKGlkICE9IG51bGwpIHsKKwkJCUFzeW5jQ29udGV4dCBjb250ZXh0ID0gcmVxLnN0YXJ0QXN5bmMoKTsKKwkJCWNvbnRleHQuc2V0VGltZW91dCh0aW1lb3V0KTsKKwkJCXJlcS5nZXRJbnB1dFN0cmVhbSgpLnNldFJlYWRMaXN0ZW5lcihuZXcgT2JqZWN0VXBsb2FkTGlzdGVuZXIoCisJCQkJCXJlcG9zaXRvcnksIGNvbnRleHQsIHJlcSwgcnNwLCBpZCkpOworCQl9CisJfQorCisJc3RhdGljIHZvaWQgc2VuZEVycm9yKEh0dHBTZXJ2bGV0UmVzcG9uc2UgcnNwLCBpbnQgc3RhdHVzLCBTdHJpbmcgbWVzc2FnZSkKKwkJCXRocm93cyBJT0V4Y2VwdGlvbiB7CisJCXJzcC5zZXRTdGF0dXMoc3RhdHVzKTsKKwkJLy8gVE9ETyByZXR1cm4gbWVzc2FnZSBpbiByZXNwb25zZSBib2R5IGluIGpzb24gZm9ybWF0IGFzIHNwZWNpZmllZCBpbgorCQkvLyBodHRwczovL2dpdGh1Yi5jb20vZ2l0aHViL2dpdC1sZnMvYmxvYi9tYXN0ZXIvZG9jcy9hcGkvaHR0cC12MS1iYXRjaC5tZAorCQlyc3AuZmx1c2hCdWZmZXIoKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGZzL3NlcnZlci9mcy9PYmplY3REb3dubG9hZExpc3RlbmVyLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGZzL3NlcnZlci9mcy9PYmplY3REb3dubG9hZExpc3RlbmVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZkZWE0ZgotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci9zcmMvb3JnL2VjbGlwc2UvamdpdC9sZnMvc2VydmVyL2ZzL09iamVjdERvd25sb2FkTGlzdGVuZXIuamF2YQpAQCAtMCwwICsxLDE1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSwgTWF0dGhpYXMgU29obiA8bWF0dGhpYXMuc29obmtAc2FwLmNvbT4KKyAqIGFuZCBvdGhlciBjb3B5cmlnaHQgb3duZXJzIGFzIGRvY3VtZW50ZWQgaW4gdGhlIHByb2plY3QncyBJUCBsb2cuCisgKgorICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2MS4wIHdoaWNoCisgKiBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgaXMgcmVwcm9kdWNlZCBiZWxvdywgYW5kIGlzCisgKiBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VkbC12MTAucGhwCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgSW5jLiBub3IgdGhlCisgKiAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCisgKiAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3IKKyAqICAgd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORAorICogQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKyAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGCisgKiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIuZnM7CisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEubmlvLkJ5dGVCdWZmZXI7CitpbXBvcnQgamF2YS5uaW8uY2hhbm5lbHMuQ2hhbm5lbHM7CitpbXBvcnQgamF2YS5uaW8uY2hhbm5lbHMuUmVhZGFibGVCeXRlQ2hhbm5lbDsKK2ltcG9ydCBqYXZhLm5pby5jaGFubmVscy5Xcml0YWJsZUJ5dGVDaGFubmVsOworaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOworaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlcjsKKworaW1wb3J0IGphdmF4LnNlcnZsZXQuQXN5bmNDb250ZXh0OworaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldE91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZheC5zZXJ2bGV0LldyaXRlTGlzdGVuZXI7CitpbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2U7CisKK2ltcG9ydCBvcmcuYXBhY2hlLmh0dHAuSHR0cFN0YXR1czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5saWIuQW55TG9uZ09iamVjdElkOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGZzLmxpYi5Db25zdGFudHM7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC51dGlsLkh0dHBTdXBwb3J0OworCisvKioKKyAqIEhhbmRsZSBhc3luY2hyb25vdXMgbGFyZ2Ugb2JqZWN0IGRvd25sb2FkCisgKi8KK2NsYXNzIE9iamVjdERvd25sb2FkTGlzdGVuZXIgaW1wbGVtZW50cyBXcml0ZUxpc3RlbmVyIHsKKworCXByaXZhdGUgc3RhdGljIExvZ2dlciBMT0cgPSBMb2dnZXIKKwkJCS5nZXRMb2dnZXIoT2JqZWN0RG93bmxvYWRMaXN0ZW5lci5jbGFzcy5nZXROYW1lKCkpOworCisJcHJpdmF0ZSBmaW5hbCBBc3luY0NvbnRleHQgY29udGV4dDsKKworCXByaXZhdGUgZmluYWwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZTsKKworCXByaXZhdGUgZmluYWwgU2VydmxldE91dHB1dFN0cmVhbSBvdXQ7CisKKwlwcml2YXRlIGZpbmFsIFJlYWRhYmxlQnl0ZUNoYW5uZWwgaW47CisKKwlwcml2YXRlIGZpbmFsIFdyaXRhYmxlQnl0ZUNoYW5uZWwgb3V0Q2hhbm5lbDsKKworCXByaXZhdGUgZmluYWwgQnl0ZUJ1ZmZlciBidWZmZXIgPSBCeXRlQnVmZmVyLmFsbG9jYXRlRGlyZWN0KDgxOTIpOworCisJLyoqCisJICogQHBhcmFtIHJlcG9zaXRvcnkKKwkgKiAgICAgICAgICAgIHRoZSByZXBvc2l0b3J5IHN0b3JpbmcgbGFyZ2Ugb2JqZWN0cworCSAqIEBwYXJhbSBjb250ZXh0CisJICogICAgICAgICAgICB0aGUgc2VydmxldCBhc3luY2hyb25vdXMgY29udGV4dAorCSAqIEBwYXJhbSByZXNwb25zZQorCSAqICAgICAgICAgICAgdGhlIHNlcnZsZXQgcmVzcG9uc2UKKwkgKiBAcGFyYW0gaWQKKwkgKiAgICAgICAgICAgIGlkIG9mIHRoZSBvYmplY3QgdG8gYmUgZG93bmxvYWRlZAorCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KKwkgKi8KKwlwdWJsaWMgT2JqZWN0RG93bmxvYWRMaXN0ZW5lcihGaWxlTGZzUmVwb3NpdG9yeSByZXBvc2l0b3J5LAorCQkJQXN5bmNDb250ZXh0IGNvbnRleHQsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UsCisJCQlBbnlMb25nT2JqZWN0SWQgaWQpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCXRoaXMuY29udGV4dCA9IGNvbnRleHQ7CisJCXRoaXMucmVzcG9uc2UgPSByZXNwb25zZTsKKwkJdGhpcy5pbiA9IHJlcG9zaXRvcnkuZ2V0UmVhZENoYW5uZWwoaWQpOworCQl0aGlzLm91dCA9IHJlc3BvbnNlLmdldE91dHB1dFN0cmVhbSgpOworCQl0aGlzLm91dENoYW5uZWwgPSBDaGFubmVscy5uZXdDaGFubmVsKG91dCk7CisKKwkJcmVzcG9uc2UuYWRkSGVhZGVyKEh0dHBTdXBwb3J0LkhEUl9DT05URU5UX0xFTkdUSCwKKwkJCQlTdHJpbmcudmFsdWVPZihyZXBvc2l0b3J5LmdldFNpemUoaWQpKSk7CisJCXJlc3BvbnNlLnNldENvbnRlbnRUeXBlKENvbnN0YW50cy5IRFJfQVBQTElDQVRJT05fT0NURVRfU1RSRUFNKTsKKwl9CisKKwkvKioKKwkgKiBXcml0ZSBmaWxlIGNvbnRlbnQKKwkgKgorCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBvbldyaXRlUG9zc2libGUoKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQl3aGlsZSAob3V0LmlzUmVhZHkoKSkgeworCQkJaWYgKGluLnJlYWQoYnVmZmVyKSAhPSAtMSkgeworCQkJCWJ1ZmZlci5mbGlwKCk7CisJCQkJb3V0Q2hhbm5lbC53cml0ZShidWZmZXIpOworCQkJCWJ1ZmZlci5jb21wYWN0KCk7CisJCQl9IGVsc2UgeworCQkJCWluLmNsb3NlKCk7CisJCQkJYnVmZmVyLmZsaXAoKTsKKwkJCQl3aGlsZSAob3V0LmlzUmVhZHkoKSkgeworCQkJCQlpZiAoYnVmZmVyLmhhc1JlbWFpbmluZygpKSB7CisJCQkJCQlvdXRDaGFubmVsLndyaXRlKGJ1ZmZlcik7CisJCQkJCX0gZWxzZSB7CisJCQkJCQljb250ZXh0LmNvbXBsZXRlKCk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBIYW5kbGUgZXJyb3JzCisJICoKKwkgKiBAcGFyYW0gZQorCSAqICAgICAgICAgICAgdGhlIGNhdXNlCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgb25FcnJvcihUaHJvd2FibGUgZSkgeworCQl0cnkgeworCQkJRmlsZUxmc1NlcnZsZXQuc2VuZEVycm9yKHJlc3BvbnNlLAorCQkJCQlIdHRwU3RhdHVzLlNDX0lOVEVSTkFMX1NFUlZFUl9FUlJPUiwgZS5nZXRNZXNzYWdlKCkpOworCQkJY29udGV4dC5jb21wbGV0ZSgpOworCQkJaW4uY2xvc2UoKTsKKwkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZXgpIHsKKwkJCUxPRy5sb2coTGV2ZWwuU0VWRVJFLCBleC5nZXRNZXNzYWdlKCksIGV4KTsKKwkJfQorCX0KK30KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci9zcmMvb3JnL2VjbGlwc2UvamdpdC9sZnMvc2VydmVyL2ZzL09iamVjdFVwbG9hZExpc3RlbmVyLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGZzL3NlcnZlci9mcy9PYmplY3RVcGxvYWRMaXN0ZW5lci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1OTcwYWQKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGZzL3NlcnZlci9mcy9PYmplY3RVcGxvYWRMaXN0ZW5lci5qYXZhCkBAIC0wLDAgKzEsMTc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1LCBNYXR0aGlhcyBTb2huIDxtYXR0aGlhcy5zb2hua0BzYXAuY29tPgorICogYW5kIG90aGVyIGNvcHlyaWdodCBvd25lcnMgYXMgZG9jdW1lbnRlZCBpbiB0aGUgcHJvamVjdCdzIElQIGxvZy4KKyAqCisgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZQorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYxLjAgd2hpY2gKKyAqIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBpcyByZXByb2R1Y2VkIGJlbG93LCBhbmQgaXMKKyAqIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZWRsLXYxMC5waHAKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAqICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCBJbmMuIG5vciB0aGUKKyAqICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKKyAqICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgorICogICB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5ECisgKiBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAorICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYKKyAqIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCitwYWNrYWdlIG9yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci5mczsKKworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5uaW8uQnl0ZUJ1ZmZlcjsKK2ltcG9ydCBqYXZhLm5pby5jaGFubmVscy5DaGFubmVsczsKK2ltcG9ydCBqYXZhLm5pby5jaGFubmVscy5SZWFkYWJsZUJ5dGVDaGFubmVsOworaW1wb3J0IGphdmEubmlvLmNoYW5uZWxzLldyaXRhYmxlQnl0ZUNoYW5uZWw7CitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTGV2ZWw7CitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTG9nZ2VyOworCitpbXBvcnQgamF2YXguc2VydmxldC5Bc3luY0NvbnRleHQ7CitpbXBvcnQgamF2YXguc2VydmxldC5SZWFkTGlzdGVuZXI7CitpbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0SW5wdXRTdHJlYW07CitpbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKK2ltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZTsKKworaW1wb3J0IG9yZy5hcGFjaGUuaHR0cC5IdHRwU3RhdHVzOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGZzLmVycm9ycy5Db3JydXB0TG9uZ09iamVjdEV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5saWIuQW55TG9uZ09iamVjdElkOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGZzLmxpYi5Db25zdGFudHM7CisKKy8qKgorICogSGFuZGxlIGFzeW5jaHJvbm91cyBvYmplY3QgdXBsb2FkCisgKi8KK2NsYXNzIE9iamVjdFVwbG9hZExpc3RlbmVyIGltcGxlbWVudHMgUmVhZExpc3RlbmVyIHsKKworCXByaXZhdGUgc3RhdGljIExvZ2dlciBMT0cgPSBMb2dnZXIKKwkJCS5nZXRMb2dnZXIoT2JqZWN0VXBsb2FkTGlzdGVuZXIuY2xhc3MuZ2V0TmFtZSgpKTsKKworCXByaXZhdGUgZmluYWwgQXN5bmNDb250ZXh0IGNvbnRleHQ7CisKKwlwcml2YXRlIGZpbmFsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2U7CisKKwlwcml2YXRlIEZpbGVMZnNSZXBvc2l0b3J5IHJlcG9zaXRvcnk7CisKKwlwcml2YXRlIGZpbmFsIFNlcnZsZXRJbnB1dFN0cmVhbSBpbjsKKworCXByaXZhdGUgZmluYWwgUmVhZGFibGVCeXRlQ2hhbm5lbCBpbkNoYW5uZWw7CisKKwlwcml2YXRlIFdyaXRhYmxlQnl0ZUNoYW5uZWwgb3V0OworCisJcHJpdmF0ZSBmaW5hbCBCeXRlQnVmZmVyIGJ1ZmZlciA9IEJ5dGVCdWZmZXIuYWxsb2NhdGVEaXJlY3QoODE5Mik7CisKKwkvKioKKwkgKiBAcGFyYW0gcmVwb3NpdG9yeQorCSAqICAgICAgICAgICAgdGhlIHJlcG9zaXRvcnkgc3RvcmluZyBsYXJnZSBvYmplY3RzCisJICogQHBhcmFtIGNvbnRleHQKKwkgKiBAcGFyYW0gcmVxdWVzdAorCSAqIEBwYXJhbSByZXNwb25zZQorCSAqIEBwYXJhbSBpZAorCSAqIEB0aHJvd3MgRmlsZU5vdEZvdW5kRXhjZXB0aW9uCisJICogQHRocm93cyBJT0V4Y2VwdGlvbgorCSAqLworCXB1YmxpYyBPYmplY3RVcGxvYWRMaXN0ZW5lcihGaWxlTGZzUmVwb3NpdG9yeSByZXBvc2l0b3J5LAorCQkJQXN5bmNDb250ZXh0IGNvbnRleHQsIEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LAorCQkJSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSwgQW55TG9uZ09iamVjdElkIGlkKQorCQkJCQl0aHJvd3MgRmlsZU5vdEZvdW5kRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CisJCXRoaXMucmVwb3NpdG9yeSA9IHJlcG9zaXRvcnk7CisJCXRoaXMuY29udGV4dCA9IGNvbnRleHQ7CisJCXRoaXMucmVzcG9uc2UgPSByZXNwb25zZTsKKwkJdGhpcy5pbiA9IHJlcXVlc3QuZ2V0SW5wdXRTdHJlYW0oKTsKKwkJdGhpcy5pbkNoYW5uZWwgPSBDaGFubmVscy5uZXdDaGFubmVsKGluKTsKKwkJdGhpcy5vdXQgPSByZXBvc2l0b3J5LmdldFdyaXRlQ2hhbm5lbChpZCk7CisJCXJlc3BvbnNlLnNldENvbnRlbnRUeXBlKENvbnN0YW50cy5DT05URU5UX1RZUEVfR0lUX0xGU19KU09OKTsKKwl9CisKKwkvKioKKwkgKiBXcml0ZXMgYWxsIHRoZSByZWNlaXZlZCBkYXRhIHRvIHRoZSBvdXRwdXQgY2hhbm5lbAorCSAqCisJICogQHRocm93cyBJT0V4Y2VwdGlvbgorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG9uRGF0YUF2YWlsYWJsZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCXdoaWxlIChpbi5pc1JlYWR5KCkpIHsKKwkJCWlmIChpbkNoYW5uZWwucmVhZChidWZmZXIpID4gMCkgeworCQkJCWJ1ZmZlci5mbGlwKCk7CisJCQkJb3V0LndyaXRlKGJ1ZmZlcik7CisJCQkJYnVmZmVyLmNvbXBhY3QoKTsKKwkJCX0gZWxzZSB7CisJCQkJYnVmZmVyLmZsaXAoKTsKKwkJCQl3aGlsZSAoYnVmZmVyLmhhc1JlbWFpbmluZygpKSB7CisJCQkJCW91dC53cml0ZShidWZmZXIpOworCQkJCX0KKwkJCQljbG9zZSgpOworCQkJCXJldHVybjsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBvbkFsbERhdGFSZWFkKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJY2xvc2UoKTsKKwl9CisKKwlwcm90ZWN0ZWQgdm9pZCBjbG9zZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCXRyeSB7CisJCQlpbkNoYW5uZWwuY2xvc2UoKTsKKwkJCW91dC5jbG9zZSgpOworCQkJLy8gVE9ETyBjaGVjayBpZiBzdGF0dXMgMjAwIGlzIG9rIGZvciBQVVQgcmVxdWVzdCwgSFRUUCBmb3Jlc2VlcyAyMDQKKwkJCS8vIGZvciBzdWNjZXNzZnVsIFBVVCB3aXRob3V0IHJlc3BvbnNlIGJvZHkKKwkJCXJlc3BvbnNlLnNldFN0YXR1cyhIdHRwU2VydmxldFJlc3BvbnNlLlNDX09LKTsKKwkJfSBmaW5hbGx5IHsKKwkJCWNvbnRleHQuY29tcGxldGUoKTsKKwkJfQorCX0KKworCS8qKgorCSAqIEBwYXJhbSBlCisJICogICAgICAgICAgICB0aGUgZXhjZXB0aW9uIHRoYXQgY2F1c2VkIHRoZSBwcm9ibGVtCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgb25FcnJvcihUaHJvd2FibGUgZSkgeworCQl0cnkgeworCQkJcmVwb3NpdG9yeS5hYm9ydFdyaXRlKCk7CisJCQlpbkNoYW5uZWwuY2xvc2UoKTsKKwkJCW91dC5jbG9zZSgpOworCQkJaW50IHN0YXR1czsKKwkJCWlmIChlIGluc3RhbmNlb2YgQ29ycnVwdExvbmdPYmplY3RFeGNlcHRpb24pIHsKKwkJCQlzdGF0dXMgPSBIdHRwU3RhdHVzLlNDX0JBRF9SRVFVRVNUOworCQkJCUxPRy5sb2coTGV2ZWwuV0FSTklORywgZS5nZXRNZXNzYWdlKCksIGUpOworCQkJfSBlbHNlIHsKKwkJCQlzdGF0dXMgPSBIdHRwU3RhdHVzLlNDX0lOVEVSTkFMX1NFUlZFUl9FUlJPUjsKKwkJCQlMT0cubG9nKExldmVsLlNFVkVSRSwgZS5nZXRNZXNzYWdlKCksIGUpOworCQkJfQorCQkJRmlsZUxmc1NlcnZsZXQuc2VuZEVycm9yKHJlc3BvbnNlLCBzdGF0dXMsIGUuZ2V0TWVzc2FnZSgpKTsKKwkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZXgpIHsKKwkJCUxPRy5sb2coTGV2ZWwuU0VWRVJFLCBleC5nZXRNZXNzYWdlKCksIGV4KTsKKwkJfQorCX0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGZzL3NlcnZlci9pbnRlcm5hbC9MZnNTZXJ2ZXJUZXh0LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGZzL3NlcnZlci9pbnRlcm5hbC9MZnNTZXJ2ZXJUZXh0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGUxYzRjNgotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci9zcmMvb3JnL2VjbGlwc2UvamdpdC9sZnMvc2VydmVyL2ludGVybmFsL0xmc1NlcnZlclRleHQuamF2YQpAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1LCBNYXR0aGlhcyBTb2huIDxtYXR0aGlhcy5zb2huQHNhcC5jb20+CisgKiBhbmQgb3RoZXIgY29weXJpZ2h0IG93bmVycyBhcyBkb2N1bWVudGVkIGluIHRoZSBwcm9qZWN0J3MgSVAgbG9nLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlCisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgRGlzdHJpYnV0aW9uIExpY2Vuc2UgdjEuMCB3aGljaAorICogYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGlzIHJlcHJvZHVjZWQgYmVsb3csIGFuZCBpcworICogYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lZGwtdjEwLnBocAorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIEluYy4gbm9yIHRoZQorICogICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorICogICBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCisgKiAgIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQKKyAqIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCisgKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRgorICogQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLmludGVybmFsOworCitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5ubHMuTkxTOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubmxzLlRyYW5zbGF0aW9uQnVuZGxlOworCisvKioKKyAqIFRyYW5zbGF0aW9uIGJ1bmRsZSBmb3IgSkdpdCBMRlMgc2VydmVyCisgKi8KK3B1YmxpYyBjbGFzcyBMZnNTZXJ2ZXJUZXh0IGV4dGVuZHMgVHJhbnNsYXRpb25CdW5kbGUgeworCisJLyoqCisJICogQHJldHVybiBhbiBpbnN0YW5jZSBvZiB0aGlzIHRyYW5zbGF0aW9uIGJ1bmRsZQorCSAqLworCXB1YmxpYyBzdGF0aWMgTGZzU2VydmVyVGV4dCBnZXQoKSB7CisJCXJldHVybiBOTFMuZ2V0QnVuZGxlRm9yKExmc1NlcnZlclRleHQuY2xhc3MpOworCX0KKworCS8vIEBmb3JtYXR0ZXI6b2ZmCisJLyoqKi8gcHVibGljIFN0cmluZyBjb3JydXB0TG9uZ09iamVjdDsKKwkvKioqLyBwdWJsaWMgU3RyaW5nIGludmFsaWRQYXRoSW5mbzsKKwkvKioqLyBwdWJsaWMgU3RyaW5nIG9iamVjdE5vdEZvdW5kOworCS8qKiovIHB1YmxpYyBTdHJpbmcgdW5zdXBwb3J0ZWRPcGVyYXRpb247Cit9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0Ly5jbGFzc3BhdGggYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0Ly5jbGFzc3BhdGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZjNzgxZAotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnRlc3QvLmNsYXNzcGF0aApAQCAtMCwwICsxLDggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8Y2xhc3NwYXRoPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSmF2YVNFLTEuNyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InRzdCIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgorPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0Ly5naXRpZ25vcmUgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0Ly5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRjMDA5MQotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnRlc3QvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDIgQEAKKy90YXJnZXQKKy9iaW4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzLnRlc3QvLnByb2plY3QgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0Ly5wcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1ZGRkYjAKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0Ly5wcm9qZWN0CkBAIC0wLDAgKzEsMzQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdERlc2NyaXB0aW9uPgorCTxuYW1lPm9yZy5lY2xpcHNlLmpnaXQubGZzLnRlc3Q8L25hbWU+CisJPGNvbW1lbnQ+PC9jb21tZW50PgorCTxwcm9qZWN0cz4KKwk8L3Byb2plY3RzPgorCTxidWlsZFNwZWM+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5hcGkudG9vbHMuYXBpQW5hbHlzaXNCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwk8L2J1aWxkU3BlYz4KKwk8bmF0dXJlcz4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5hcGkudG9vbHMuYXBpQW5hbHlzaXNOYXR1cmU8L25hdHVyZT4KKwk8L25hdHVyZXM+Cis8L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzLnRlc3QvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMudGVzdC8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDgyNGI4MAotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnRlc3QvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCkBAIC0wLDAgKzEsMiBAQAorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTENCitlbmNvZGluZy88cHJvamVjdD49VVRGLTgNCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZnMgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWEwYWQyMgotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnRlc3QvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmcwpAQCAtMCwwICsxLDIgQEAKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCitsaW5lLnNlcGFyYXRvcj1cbgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMudGVzdC8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2MwZDNhCi0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMudGVzdC8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKQEAgLTAsMCArMSwzOTggQEAKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5hbm5vdGF0aW9uLmluaGVyaXROdWxsQW5ub3RhdGlvbnM9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmFubm90YXRpb24ubWlzc2luZ05vbk51bGxCeURlZmF1bHRBbm5vdGF0aW9uPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuYW5ub3RhdGlvbi5ub25udWxsPW9yZy5lY2xpcHNlLmpkdC5hbm5vdGF0aW9uLk5vbk51bGwKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmFubm90YXRpb24ubm9ubnVsbGJ5ZGVmYXVsdD1vcmcuZWNsaXBzZS5qZHQuYW5ub3RhdGlvbi5Ob25OdWxsQnlEZWZhdWx0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5hbm5vdGF0aW9uLm51bGxhYmxlPW9yZy5lY2xpcHNlLmpkdC5hbm5vdGF0aW9uLk51bGxhYmxlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5hbm5vdGF0aW9uLm51bGxhbmFseXNpcz1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLm1ldGhvZFBhcmFtZXRlcnM9ZG8gbm90IGdlbmVyYXRlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRvYy5jb21tZW50LnN1cHBvcnQ9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5jb21wYXJpbmdJZGVudGljYWw9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVhZENvZGU9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmV4cGxpY2l0bHlDbG9zZWRBdXRvQ2xvc2VhYmxlPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mYWxsdGhyb3VnaENhc2U9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mYXRhbE9wdGlvbmFsRXJyb3I9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY2x1ZGVOdWxsSW5mb0Zyb21Bc3NlcnRzPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvYz1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3M9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NEZXByZWNhdGVkUmVmPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzTm90VmlzaWJsZVJlZj1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHJpdmF0ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVmYXVsdENhc2U9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0VudW1DYXNlRGVzcGl0ZURlZmF1bHQ9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0hhc2hDb2RlTWV0aG9kPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHM9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNPdmVycmlkaW5nPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNWaXNpYmlsaXR5PXByb3RlY3RlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ0Rlc2NyaXB0aW9uPXJldHVybl90YWcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc01ldGhvZFR5cGVQYXJhbWV0ZXJzPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc092ZXJyaWRpbmc9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzVmlzaWJpbGl0eT1wcml2YXRlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb25Gb3JJbnRlcmZhY2VNZXRob2RJbXBsZW1lbnRhdGlvbj1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1N5bmNocm9uaXplZE9uSW5oZXJpdGVkTWV0aG9kPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9uRXh0ZXJuYWxpemVkU3RyaW5nTGl0ZXJhbD1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9ubnVsbFBhcmFtZXRlckFubm90YXRpb25Ecm9wcGVkPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubnVsbEFubm90YXRpb25JbmZlcmVuY2VDb25mbGljdD1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5udWxsUmVmZXJlbmNlPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm51bGxTcGVjVmlvbGF0aW9uPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm51bGxVbmNoZWNrZWRDb252ZXJzaW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucGFyYW1ldGVyQXNzaWdubWVudD1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG90ZW50aWFsTnVsbFJlZmVyZW5jZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvdGVudGlhbGx5VW5jbG9zZWRDbG9zZWFibGU9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnJhd1R5cGVSZWZlcmVuY2U9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnJlZHVuZGFudE51bGxBbm5vdGF0aW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucmVkdW5kYW50TnVsbENoZWNrPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucmVkdW5kYW50U3BlY2lmaWNhdGlvbk9mVHlwZUFyZ3VtZW50cz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucmVkdW5kYW50U3VwZXJpbnRlcmZhY2U9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucmVwb3J0TWV0aG9kQ2FuQmVQb3RlbnRpYWxseVN0YXRpYz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucmVwb3J0TWV0aG9kQ2FuQmVTdGF0aWM9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdGF0aWNBY2Nlc3NSZWNlaXZlcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc09wdGlvbmFsRXJyb3JzPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50YWN0aWNOdWxsQW5hbHlzaXNGb3JGaWVsZHM9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5hdm9pZGFibGVHZW5lcmljVHlwZVByb2JsZW1zPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2xvc2VkQ2xvc2VhYmxlPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25FeGVtcHRFeGNlcHRpb25BbmRUaHJvd2FibGU9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbkluY2x1ZGVEb2NDb21tZW50UmVmZXJlbmNlPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTGFiZWw9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTG9jYWw9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkT2JqZWN0QWxsb2NhdGlvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlckluY2x1ZGVEb2NDb21tZW50UmVmZXJlbmNlPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUHJpdmF0ZU1lbWJlcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRUeXBlUGFyYW1ldGVyPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRXYXJuaW5nVG9rZW49d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuNworb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWduX3R5cGVfbWVtYmVyc19vbl9jb2x1bW5zPWZhbHNlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9hcmd1bWVudHNfaW5fYWxsb2NhdGlvbl9leHByZXNzaW9uPTE2CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9hcmd1bWVudHNfaW5fYW5ub3RhdGlvbj0wCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9hcmd1bWVudHNfaW5fZW51bV9jb25zdGFudD0xNgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfYXJndW1lbnRzX2luX2V4cGxpY2l0X2NvbnN0cnVjdG9yX2NhbGw9MTYKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2FyZ3VtZW50c19pbl9tZXRob2RfaW52b2NhdGlvbj0xNgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfYXJndW1lbnRzX2luX3F1YWxpZmllZF9hbGxvY2F0aW9uX2V4cHJlc3Npb249MTYKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2Fzc2lnbm1lbnQ9MAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfYmluYXJ5X2V4cHJlc3Npb249MTYKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2NvbXBhY3RfaWY9MTYKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2NvbmRpdGlvbmFsX2V4cHJlc3Npb249ODAKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2VudW1fY29uc3RhbnRzPTAKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2V4cHJlc3Npb25zX2luX2FycmF5X2luaXRpYWxpemVyPTE2CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9tZXRob2RfZGVjbGFyYXRpb249MAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfbXVsdGlwbGVfZmllbGRzPTE2CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9wYXJhbWV0ZXJzX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uPTE2CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9wYXJhbWV0ZXJzX2luX21ldGhvZF9kZWNsYXJhdGlvbj0xNgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfcmVzb3VyY2VzX2luX3RyeT04MAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3Jfc2VsZWN0b3JfaW5fbWV0aG9kX2ludm9jYXRpb249MTYKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX3N1cGVyY2xhc3NfaW5fdHlwZV9kZWNsYXJhdGlvbj0xNgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3Jfc3VwZXJpbnRlcmZhY2VzX2luX2VudW1fZGVjbGFyYXRpb249MTYKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX3N1cGVyaW50ZXJmYWNlc19pbl90eXBlX2RlY2xhcmF0aW9uPTE2CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl90aHJvd3NfY2xhdXNlX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uPTE2CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl90aHJvd3NfY2xhdXNlX2luX21ldGhvZF9kZWNsYXJhdGlvbj0xNgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfdW5pb25fdHlwZV9pbl9tdWx0aWNhdGNoPTE2CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYWZ0ZXJfaW1wb3J0cz0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYWZ0ZXJfcGFja2FnZT0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYmVmb3JlX2ZpZWxkPTEKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5ibGFua19saW5lc19iZWZvcmVfZmlyc3RfY2xhc3NfYm9keV9kZWNsYXJhdGlvbj0wCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYmVmb3JlX2ltcG9ydHM9MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2JlZm9yZV9tZW1iZXJfdHlwZT0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYmVmb3JlX21ldGhvZD0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYmVmb3JlX25ld19jaHVuaz0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYmVmb3JlX3BhY2thZ2U9MAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2JldHdlZW5faW1wb3J0X2dyb3Vwcz0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYmV0d2Vlbl90eXBlX2RlY2xhcmF0aW9ucz0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYnJhY2VfcG9zaXRpb25fZm9yX2Fubm90YXRpb25fdHlwZV9kZWNsYXJhdGlvbj1lbmRfb2ZfbGluZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9hbm9ueW1vdXNfdHlwZV9kZWNsYXJhdGlvbj1lbmRfb2ZfbGluZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9hcnJheV9pbml0aWFsaXplcj1lbmRfb2ZfbGluZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9ibG9jaz1lbmRfb2ZfbGluZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9ibG9ja19pbl9jYXNlPWVuZF9vZl9saW5lCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYnJhY2VfcG9zaXRpb25fZm9yX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uPWVuZF9vZl9saW5lCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYnJhY2VfcG9zaXRpb25fZm9yX2VudW1fY29uc3RhbnQ9ZW5kX29mX2xpbmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5icmFjZV9wb3NpdGlvbl9mb3JfZW51bV9kZWNsYXJhdGlvbj1lbmRfb2ZfbGluZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9tZXRob2RfZGVjbGFyYXRpb249ZW5kX29mX2xpbmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5icmFjZV9wb3NpdGlvbl9mb3Jfc3dpdGNoPWVuZF9vZl9saW5lCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYnJhY2VfcG9zaXRpb25fZm9yX3R5cGVfZGVjbGFyYXRpb249ZW5kX29mX2xpbmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmNsZWFyX2JsYW5rX2xpbmVzPWZhbHNlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5jbGVhcl9ibGFua19saW5lc19pbl9ibG9ja19jb21tZW50PWZhbHNlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5jbGVhcl9ibGFua19saW5lc19pbl9qYXZhZG9jX2NvbW1lbnQ9ZmFsc2UKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmZvcm1hdF9ibG9ja19jb21tZW50cz10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5mb3JtYXRfY29tbWVudHM9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuZm9ybWF0X2hlYWRlcj1mYWxzZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuZm9ybWF0X2h0bWw9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuZm9ybWF0X2phdmFkb2NfY29tbWVudHM9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuZm9ybWF0X2xpbmVfY29tbWVudHM9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuZm9ybWF0X3NvdXJjZV9jb2RlPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmluZGVudF9wYXJhbWV0ZXJfZGVzY3JpcHRpb249dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuaW5kZW50X3Jvb3RfdGFncz10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5pbnNlcnRfbmV3X2xpbmVfYmVmb3JlX3Jvb3RfdGFncz1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50Lmluc2VydF9uZXdfbGluZV9mb3JfcGFyYW1ldGVyPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQubGluZV9sZW5ndGg9ODAKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50Lm5ld19saW5lc19hdF9ibG9ja19ib3VuZGFyaWVzPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50Lm5ld19saW5lc19hdF9qYXZhZG9jX2JvdW5kYXJpZXM9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQucHJlc2VydmVfd2hpdGVfc3BhY2VfYmV0d2Vlbl9jb2RlX2FuZF9saW5lX2NvbW1lbnRzPWZhbHNlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tcGFjdF9lbHNlX2lmPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb250aW51YXRpb25faW5kZW50YXRpb249Mgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbnRpbnVhdGlvbl9pbmRlbnRhdGlvbl9mb3JfYXJyYXlfaW5pdGlhbGl6ZXI9Mgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmRpc2FibGluZ190YWc9QGZvcm1hdHRlclw6b2ZmCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuZW5hYmxpbmdfdGFnPUBmb3JtYXR0ZXJcOm9uCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuZm9ybWF0X2d1YXJkaWFuX2NsYXVzZV9vbl9vbmVfbGluZT1mYWxzZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmZvcm1hdF9saW5lX2NvbW1lbnRfc3RhcnRpbmdfb25fZmlyc3RfY29sdW1uPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfYm9keV9kZWNsYXJhdGlvbnNfY29tcGFyZV90b19hbm5vdGF0aW9uX2RlY2xhcmF0aW9uX2hlYWRlcj10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50X2JvZHlfZGVjbGFyYXRpb25zX2NvbXBhcmVfdG9fZW51bV9jb25zdGFudF9oZWFkZXI9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluZGVudF9ib2R5X2RlY2xhcmF0aW9uc19jb21wYXJlX3RvX2VudW1fZGVjbGFyYXRpb25faGVhZGVyPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfYm9keV9kZWNsYXJhdGlvbnNfY29tcGFyZV90b190eXBlX2hlYWRlcj10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50X2JyZWFrc19jb21wYXJlX3RvX2Nhc2VzPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfZW1wdHlfbGluZXM9ZmFsc2UKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfc3RhdGVtZW50c19jb21wYXJlX3RvX2Jsb2NrPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfc3RhdGVtZW50c19jb21wYXJlX3RvX2JvZHk9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluZGVudF9zd2l0Y2hzdGF0ZW1lbnRzX2NvbXBhcmVfdG9fY2FzZXM9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluZGVudF9zd2l0Y2hzdGF0ZW1lbnRzX2NvbXBhcmVfdG9fc3dpdGNoPWZhbHNlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50YXRpb24uc2l6ZT00CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2FmdGVyX2Fubm90YXRpb249aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2FmdGVyX2Fubm90YXRpb25fb25fZmllbGQ9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2FmdGVyX2Fubm90YXRpb25fb25fbG9jYWxfdmFyaWFibGU9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2FmdGVyX2Fubm90YXRpb25fb25fbWVtYmVyPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9hZnRlcl9hbm5vdGF0aW9uX29uX21ldGhvZD1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYWZ0ZXJfYW5ub3RhdGlvbl9vbl9wYWNrYWdlPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9hZnRlcl9hbm5vdGF0aW9uX29uX3BhcmFtZXRlcj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYWZ0ZXJfYW5ub3RhdGlvbl9vbl90eXBlPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9hZnRlcl9sYWJlbD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2FmdGVyX29wZW5pbmdfYnJhY2VfaW5fYXJyYXlfaW5pdGlhbGl6ZXI9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9hdF9lbmRfb2ZfZmlsZV9pZl9taXNzaW5nPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYmVmb3JlX2NhdGNoX2luX3RyeV9zdGF0ZW1lbnQ9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9iZWZvcmVfY2xvc2luZ19icmFjZV9pbl9hcnJheV9pbml0aWFsaXplcj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2JlZm9yZV9lbHNlX2luX2lmX3N0YXRlbWVudD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2JlZm9yZV9maW5hbGx5X2luX3RyeV9zdGF0ZW1lbnQ9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9iZWZvcmVfd2hpbGVfaW5fZG9fc3RhdGVtZW50PWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfaW5fZW1wdHlfYW5ub3RhdGlvbl9kZWNsYXJhdGlvbj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfaW5fZW1wdHlfYW5vbnltb3VzX3R5cGVfZGVjbGFyYXRpb249aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2luX2VtcHR5X2Jsb2NrPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9pbl9lbXB0eV9lbnVtX2NvbnN0YW50PWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9pbl9lbXB0eV9lbnVtX2RlY2xhcmF0aW9uPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9pbl9lbXB0eV9tZXRob2RfYm9keT1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfaW5fZW1wdHlfdHlwZV9kZWNsYXJhdGlvbj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfYW5kX2luX3R5cGVfcGFyYW1ldGVyPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9hc3NpZ25tZW50X29wZXJhdG9yPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9hdF9pbl9hbm5vdGF0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfYXRfaW5fYW5ub3RhdGlvbl90eXBlX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfYmluYXJ5X29wZXJhdG9yPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jbG9zaW5nX2FuZ2xlX2JyYWNrZXRfaW5fdHlwZV9hcmd1bWVudHM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2Nsb3NpbmdfYW5nbGVfYnJhY2tldF9pbl90eXBlX3BhcmFtZXRlcnM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2Nsb3NpbmdfYnJhY2VfaW5fYmxvY2s9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2Nsb3NpbmdfcGFyZW5faW5fY2FzdD1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29sb25faW5fYXNzZXJ0PWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb2xvbl9pbl9jYXNlPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb2xvbl9pbl9jb25kaXRpb25hbD1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29sb25faW5fZm9yPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb2xvbl9pbl9sYWJlbGVkX3N0YXRlbWVudD1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fYWxsb2NhdGlvbl9leHByZXNzaW9uPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9hbm5vdGF0aW9uPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9hcnJheV9pbml0aWFsaXplcj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fY29uc3RydWN0b3JfZGVjbGFyYXRpb25fcGFyYW1ldGVycz1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fY29uc3RydWN0b3JfZGVjbGFyYXRpb25fdGhyb3dzPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9lbnVtX2NvbnN0YW50X2FyZ3VtZW50cz1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fZW51bV9kZWNsYXJhdGlvbnM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX2V4cGxpY2l0Y29uc3RydWN0b3JjYWxsX2FyZ3VtZW50cz1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fZm9yX2luY3JlbWVudHM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX2Zvcl9pbml0cz1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fbWV0aG9kX2RlY2xhcmF0aW9uX3BhcmFtZXRlcnM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX21ldGhvZF9kZWNsYXJhdGlvbl90aHJvd3M9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX21ldGhvZF9pbnZvY2F0aW9uX2FyZ3VtZW50cz1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fbXVsdGlwbGVfZmllbGRfZGVjbGFyYXRpb25zPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9tdWx0aXBsZV9sb2NhbF9kZWNsYXJhdGlvbnM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX3BhcmFtZXRlcml6ZWRfdHlwZV9yZWZlcmVuY2U9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX3N1cGVyaW50ZXJmYWNlcz1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fdHlwZV9hcmd1bWVudHM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX3R5cGVfcGFyYW1ldGVycz1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfZWxsaXBzaXM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfYW5nbGVfYnJhY2tldF9pbl9wYXJhbWV0ZXJpemVkX3R5cGVfcmVmZXJlbmNlPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19hbmdsZV9icmFja2V0X2luX3R5cGVfYXJndW1lbnRzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19hbmdsZV9icmFja2V0X2luX3R5cGVfcGFyYW1ldGVycz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfYnJhY2VfaW5fYXJyYXlfaW5pdGlhbGl6ZXI9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfYnJhY2tldF9pbl9hcnJheV9hbGxvY2F0aW9uX2V4cHJlc3Npb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX2JyYWNrZXRfaW5fYXJyYXlfcmVmZXJlbmNlPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9hbm5vdGF0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9jYXN0PWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9jYXRjaD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fY29uc3RydWN0b3JfZGVjbGFyYXRpb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX2VudW1fY29uc3RhbnQ9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX2Zvcj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5faWY9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX21ldGhvZF9kZWNsYXJhdGlvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fbWV0aG9kX2ludm9jYXRpb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX3BhcmVudGhlc2l6ZWRfZXhwcmVzc2lvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fc3dpdGNoPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9zeW5jaHJvbml6ZWQ9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX3RyeT1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fd2hpbGU9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9wb3N0Zml4X29wZXJhdG9yPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfcHJlZml4X29wZXJhdG9yPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfcXVlc3Rpb25faW5fY29uZGl0aW9uYWw9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX3F1ZXN0aW9uX2luX3dpbGRjYXJkPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfc2VtaWNvbG9uX2luX2Zvcj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfc2VtaWNvbG9uX2luX3RyeV9yZXNvdXJjZXM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX3VuYXJ5X29wZXJhdG9yPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2FuZF9pbl90eXBlX3BhcmFtZXRlcj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Fzc2lnbm1lbnRfb3BlcmF0b3I9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9hdF9pbl9hbm5vdGF0aW9uX3R5cGVfZGVjbGFyYXRpb249aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9iaW5hcnlfb3BlcmF0b3I9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX2FuZ2xlX2JyYWNrZXRfaW5fcGFyYW1ldGVyaXplZF90eXBlX3JlZmVyZW5jZT1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX2FuZ2xlX2JyYWNrZXRfaW5fdHlwZV9hcmd1bWVudHM9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19hbmdsZV9icmFja2V0X2luX3R5cGVfcGFyYW1ldGVycz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX2JyYWNlX2luX2FycmF5X2luaXRpYWxpemVyPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19icmFja2V0X2luX2FycmF5X2FsbG9jYXRpb25fZXhwcmVzc2lvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX2JyYWNrZXRfaW5fYXJyYXlfcmVmZXJlbmNlPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fYW5ub3RhdGlvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX2Nhc3Q9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9jYXRjaD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fZW51bV9jb25zdGFudD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX2Zvcj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX2lmPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fbWV0aG9kX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fbWV0aG9kX2ludm9jYXRpb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9wYXJlbnRoZXNpemVkX2V4cHJlc3Npb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9zd2l0Y2g9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9zeW5jaHJvbml6ZWQ9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl90cnk9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl93aGlsZT1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb2xvbl9pbl9hc3NlcnQ9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb2xvbl9pbl9jYXNlPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbG9uX2luX2NvbmRpdGlvbmFsPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29sb25faW5fZGVmYXVsdD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb2xvbl9pbl9mb3I9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb2xvbl9pbl9sYWJlbGVkX3N0YXRlbWVudD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9hbGxvY2F0aW9uX2V4cHJlc3Npb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fYW5ub3RhdGlvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9hcnJheV9pbml0aWFsaXplcj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbl9wYXJhbWV0ZXJzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uX3Rocm93cz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9lbnVtX2NvbnN0YW50X2FyZ3VtZW50cz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9lbnVtX2RlY2xhcmF0aW9ucz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9leHBsaWNpdGNvbnN0cnVjdG9yY2FsbF9hcmd1bWVudHM9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fZm9yX2luY3JlbWVudHM9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fZm9yX2luaXRzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX21ldGhvZF9kZWNsYXJhdGlvbl9wYXJhbWV0ZXJzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX21ldGhvZF9kZWNsYXJhdGlvbl90aHJvd3M9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fbWV0aG9kX2ludm9jYXRpb25fYXJndW1lbnRzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX211bHRpcGxlX2ZpZWxkX2RlY2xhcmF0aW9ucz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9tdWx0aXBsZV9sb2NhbF9kZWNsYXJhdGlvbnM9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fcGFyYW1ldGVyaXplZF90eXBlX3JlZmVyZW5jZT1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9zdXBlcmludGVyZmFjZXM9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fdHlwZV9hcmd1bWVudHM9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fdHlwZV9wYXJhbWV0ZXJzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2VsbGlwc2lzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYW5nbGVfYnJhY2tldF9pbl9wYXJhbWV0ZXJpemVkX3R5cGVfcmVmZXJlbmNlPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYW5nbGVfYnJhY2tldF9pbl90eXBlX2FyZ3VtZW50cz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2FuZ2xlX2JyYWNrZXRfaW5fdHlwZV9wYXJhbWV0ZXJzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fYW5ub3RhdGlvbl90eXBlX2RlY2xhcmF0aW9uPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFjZV9pbl9hbm9ueW1vdXNfdHlwZV9kZWNsYXJhdGlvbj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fYXJyYXlfaW5pdGlhbGl6ZXI9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNlX2luX2Jsb2NrPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFjZV9pbl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fZW51bV9jb25zdGFudD1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fZW51bV9kZWNsYXJhdGlvbj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fbWV0aG9kX2RlY2xhcmF0aW9uPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFjZV9pbl9zd2l0Y2g9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNlX2luX3R5cGVfZGVjbGFyYXRpb249aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNrZXRfaW5fYXJyYXlfYWxsb2NhdGlvbl9leHByZXNzaW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2tldF9pbl9hcnJheV9yZWZlcmVuY2U9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFja2V0X2luX2FycmF5X3R5cGVfcmVmZXJlbmNlPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fYW5ub3RhdGlvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX2Fubm90YXRpb25fdHlwZV9tZW1iZXJfZGVjbGFyYXRpb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9jYXRjaD1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fY29uc3RydWN0b3JfZGVjbGFyYXRpb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9lbnVtX2NvbnN0YW50PWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fZm9yPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9pZj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fbWV0aG9kX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fbWV0aG9kX2ludm9jYXRpb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9wYXJlbnRoZXNpemVkX2V4cHJlc3Npb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9zd2l0Y2g9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX3N5bmNocm9uaXplZD1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fdHJ5PWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl93aGlsZT1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX3BhcmVudGhlc2l6ZWRfZXhwcmVzc2lvbl9pbl9yZXR1cm49aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9wYXJlbnRoZXNpemVkX2V4cHJlc3Npb25faW5fdGhyb3c9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9wb3N0Zml4X29wZXJhdG9yPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX3ByZWZpeF9vcGVyYXRvcj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9xdWVzdGlvbl9pbl9jb25kaXRpb25hbD1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX3F1ZXN0aW9uX2luX3dpbGRjYXJkPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX3NlbWljb2xvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9zZW1pY29sb25faW5fZm9yPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX3NlbWljb2xvbl9pbl90cnlfcmVzb3VyY2VzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX3VuYXJ5X29wZXJhdG9yPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmV0d2Vlbl9icmFja2V0c19pbl9hcnJheV90eXBlX3JlZmVyZW5jZT1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JldHdlZW5fZW1wdHlfYnJhY2VzX2luX2FycmF5X2luaXRpYWxpemVyPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmV0d2Vlbl9lbXB0eV9icmFja2V0c19pbl9hcnJheV9hbGxvY2F0aW9uX2V4cHJlc3Npb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZXR3ZWVuX2VtcHR5X3BhcmVuc19pbl9hbm5vdGF0aW9uX3R5cGVfbWVtYmVyX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmV0d2Vlbl9lbXB0eV9wYXJlbnNfaW5fY29uc3RydWN0b3JfZGVjbGFyYXRpb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZXR3ZWVuX2VtcHR5X3BhcmVuc19pbl9lbnVtX2NvbnN0YW50PWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmV0d2Vlbl9lbXB0eV9wYXJlbnNfaW5fbWV0aG9kX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmV0d2Vlbl9lbXB0eV9wYXJlbnNfaW5fbWV0aG9kX2ludm9jYXRpb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmpvaW5fbGluZXNfaW5fY29tbWVudHM9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmpvaW5fd3JhcHBlZF9saW5lcz10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIua2VlcF9lbHNlX3N0YXRlbWVudF9vbl9zYW1lX2xpbmU9ZmFsc2UKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5rZWVwX2VtcHR5X2FycmF5X2luaXRpYWxpemVyX29uX29uZV9saW5lPWZhbHNlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIua2VlcF9pbXBsZV9pZl9vbl9vbmVfbGluZT1mYWxzZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmtlZXBfdGhlbl9zdGF0ZW1lbnRfb25fc2FtZV9saW5lPWZhbHNlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIubGluZVNwbGl0PTgwCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIubmV2ZXJfaW5kZW50X2Jsb2NrX2NvbW1lbnRzX29uX2ZpcnN0X2NvbHVtbj1mYWxzZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLm5ldmVyX2luZGVudF9saW5lX2NvbW1lbnRzX29uX2ZpcnN0X2NvbHVtbj1mYWxzZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLm51bWJlcl9vZl9ibGFua19saW5lc19hdF9iZWdpbm5pbmdfb2ZfbWV0aG9kX2JvZHk9MAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLm51bWJlcl9vZl9lbXB0eV9saW5lc190b19wcmVzZXJ2ZT0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIucHV0X2VtcHR5X3N0YXRlbWVudF9vbl9uZXdfbGluZT10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIudGFidWxhdGlvbi5jaGFyPXRhYgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLnRhYnVsYXRpb24uc2l6ZT00CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIudXNlX29uX29mZl90YWdzPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci51c2VfdGFic19vbmx5X2Zvcl9sZWFkaW5nX2luZGVudGF0aW9ucz1mYWxzZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLndyYXBfYmVmb3JlX2JpbmFyeV9vcGVyYXRvcj10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIud3JhcF9iZWZvcmVfb3Jfb3BlcmF0b3JfbXVsdGljYXRjaD10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIud3JhcF9vdXRlcl9leHByZXNzaW9uc193aGVuX25lc3RlZD10cnVlCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzMzNmNjZQotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnRlc3QvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcwpAQCAtMCwwICsxLDYxIEBACitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorZWRpdG9yX3NhdmVfcGFydGljaXBhbnRfb3JnLmVjbGlwc2UuamR0LnVpLnBvc3RzYXZlbGlzdGVuZXIuY2xlYW51cD10cnVlCitmb3JtYXR0ZXJfcHJvZmlsZT1fSkdpdCBGb3JtYXQKK2Zvcm1hdHRlcl9zZXR0aW5nc192ZXJzaW9uPTEyCitvcmcuZWNsaXBzZS5qZHQudWkuaWdub3JlbG93ZXJjYXNlbmFtZXM9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LnVpLmltcG9ydG9yZGVyPWphdmE7amF2YXg7b3JnO2NvbTsKK29yZy5lY2xpcHNlLmpkdC51aS5vbmRlbWFuZHRocmVzaG9sZD05OQorb3JnLmVjbGlwc2UuamR0LnVpLnN0YXRpY29uZGVtYW5kdGhyZXNob2xkPTk5CitvcmcuZWNsaXBzZS5qZHQudWkudGV4dC5jdXN0b21fY29kZV90ZW1wbGF0ZXM9PD94bWwgdmVyc2lvblw9IjEuMCIgZW5jb2RpbmdcPSJVVEYtOCI/Pjx0ZW1wbGF0ZXMvPgorc3BfY2xlYW51cC5hZGRfZGVmYXVsdF9zZXJpYWxfdmVyc2lvbl9pZD10cnVlCitzcF9jbGVhbnVwLmFkZF9nZW5lcmF0ZWRfc2VyaWFsX3ZlcnNpb25faWQ9ZmFsc2UKK3NwX2NsZWFudXAuYWRkX21pc3NpbmdfYW5ub3RhdGlvbnM9ZmFsc2UKK3NwX2NsZWFudXAuYWRkX21pc3NpbmdfZGVwcmVjYXRlZF9hbm5vdGF0aW9ucz10cnVlCitzcF9jbGVhbnVwLmFkZF9taXNzaW5nX21ldGhvZHM9ZmFsc2UKK3NwX2NsZWFudXAuYWRkX21pc3NpbmdfbmxzX3RhZ3M9ZmFsc2UKK3NwX2NsZWFudXAuYWRkX21pc3Npbmdfb3ZlcnJpZGVfYW5ub3RhdGlvbnM9dHJ1ZQorc3BfY2xlYW51cC5hZGRfbWlzc2luZ19vdmVycmlkZV9hbm5vdGF0aW9uc19pbnRlcmZhY2VfbWV0aG9kcz1mYWxzZQorc3BfY2xlYW51cC5hZGRfc2VyaWFsX3ZlcnNpb25faWQ9ZmFsc2UKK3NwX2NsZWFudXAuYWx3YXlzX3VzZV9ibG9ja3M9dHJ1ZQorc3BfY2xlYW51cC5hbHdheXNfdXNlX3BhcmVudGhlc2VzX2luX2V4cHJlc3Npb25zPWZhbHNlCitzcF9jbGVhbnVwLmFsd2F5c191c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19maWVsZF9hY2Nlc3M9ZmFsc2UKK3NwX2NsZWFudXAuYWx3YXlzX3VzZV90aGlzX2Zvcl9ub25fc3RhdGljX21ldGhvZF9hY2Nlc3M9ZmFsc2UKK3NwX2NsZWFudXAuY29udmVydF90b19lbmhhbmNlZF9mb3JfbG9vcD1mYWxzZQorc3BfY2xlYW51cC5jb3JyZWN0X2luZGVudGF0aW9uPWZhbHNlCitzcF9jbGVhbnVwLmZvcm1hdF9zb3VyY2VfY29kZT10cnVlCitzcF9jbGVhbnVwLmZvcm1hdF9zb3VyY2VfY29kZV9jaGFuZ2VzX29ubHk9dHJ1ZQorc3BfY2xlYW51cC5tYWtlX2xvY2FsX3ZhcmlhYmxlX2ZpbmFsPWZhbHNlCitzcF9jbGVhbnVwLm1ha2VfcGFyYW1ldGVyc19maW5hbD1mYWxzZQorc3BfY2xlYW51cC5tYWtlX3ByaXZhdGVfZmllbGRzX2ZpbmFsPXRydWUKK3NwX2NsZWFudXAubWFrZV90eXBlX2Fic3RyYWN0X2lmX21pc3NpbmdfbWV0aG9kPWZhbHNlCitzcF9jbGVhbnVwLm1ha2VfdmFyaWFibGVfZGVjbGFyYXRpb25zX2ZpbmFsPWZhbHNlCitzcF9jbGVhbnVwLm5ldmVyX3VzZV9ibG9ja3M9ZmFsc2UKK3NwX2NsZWFudXAubmV2ZXJfdXNlX3BhcmVudGhlc2VzX2luX2V4cHJlc3Npb25zPXRydWUKK3NwX2NsZWFudXAub25fc2F2ZV91c2VfYWRkaXRpb25hbF9hY3Rpb25zPXRydWUKK3NwX2NsZWFudXAub3JnYW5pemVfaW1wb3J0cz1mYWxzZQorc3BfY2xlYW51cC5xdWFsaWZ5X3N0YXRpY19maWVsZF9hY2Nlc3Nlc193aXRoX2RlY2xhcmluZ19jbGFzcz1mYWxzZQorc3BfY2xlYW51cC5xdWFsaWZ5X3N0YXRpY19tZW1iZXJfYWNjZXNzZXNfdGhyb3VnaF9pbnN0YW5jZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3M9dHJ1ZQorc3BfY2xlYW51cC5xdWFsaWZ5X3N0YXRpY19tZW1iZXJfYWNjZXNzZXNfdGhyb3VnaF9zdWJ0eXBlc193aXRoX2RlY2xhcmluZ19jbGFzcz10cnVlCitzcF9jbGVhbnVwLnF1YWxpZnlfc3RhdGljX21lbWJlcl9hY2Nlc3Nlc193aXRoX2RlY2xhcmluZ19jbGFzcz1mYWxzZQorc3BfY2xlYW51cC5xdWFsaWZ5X3N0YXRpY19tZXRob2RfYWNjZXNzZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3M9ZmFsc2UKK3NwX2NsZWFudXAucmVtb3ZlX3ByaXZhdGVfY29uc3RydWN0b3JzPXRydWUKK3NwX2NsZWFudXAucmVtb3ZlX3RyYWlsaW5nX3doaXRlc3BhY2VzPXRydWUKK3NwX2NsZWFudXAucmVtb3ZlX3RyYWlsaW5nX3doaXRlc3BhY2VzX2FsbD10cnVlCitzcF9jbGVhbnVwLnJlbW92ZV90cmFpbGluZ193aGl0ZXNwYWNlc19pZ25vcmVfZW1wdHk9ZmFsc2UKK3NwX2NsZWFudXAucmVtb3ZlX3VubmVjZXNzYXJ5X2Nhc3RzPWZhbHNlCitzcF9jbGVhbnVwLnJlbW92ZV91bm5lY2Vzc2FyeV9ubHNfdGFncz1mYWxzZQorc3BfY2xlYW51cC5yZW1vdmVfdW51c2VkX2ltcG9ydHM9ZmFsc2UKK3NwX2NsZWFudXAucmVtb3ZlX3VudXNlZF9sb2NhbF92YXJpYWJsZXM9ZmFsc2UKK3NwX2NsZWFudXAucmVtb3ZlX3VudXNlZF9wcml2YXRlX2ZpZWxkcz10cnVlCitzcF9jbGVhbnVwLnJlbW92ZV91bnVzZWRfcHJpdmF0ZV9tZW1iZXJzPWZhbHNlCitzcF9jbGVhbnVwLnJlbW92ZV91bnVzZWRfcHJpdmF0ZV9tZXRob2RzPXRydWUKK3NwX2NsZWFudXAucmVtb3ZlX3VudXNlZF9wcml2YXRlX3R5cGVzPXRydWUKK3NwX2NsZWFudXAuc29ydF9tZW1iZXJzPWZhbHNlCitzcF9jbGVhbnVwLnNvcnRfbWVtYmVyc19hbGw9ZmFsc2UKK3NwX2NsZWFudXAudXNlX2Jsb2Nrcz1mYWxzZQorc3BfY2xlYW51cC51c2VfYmxvY2tzX29ubHlfZm9yX3JldHVybl9hbmRfdGhyb3c9ZmFsc2UKK3NwX2NsZWFudXAudXNlX3BhcmVudGhlc2VzX2luX2V4cHJlc3Npb25zPWZhbHNlCitzcF9jbGVhbnVwLnVzZV90aGlzX2Zvcl9ub25fc3RhdGljX2ZpZWxkX2FjY2Vzcz1mYWxzZQorc3BfY2xlYW51cC51c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19maWVsZF9hY2Nlc3Nfb25seV9pZl9uZWNlc3Nhcnk9dHJ1ZQorc3BfY2xlYW51cC51c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19tZXRob2RfYWNjZXNzPWZhbHNlCitzcF9jbGVhbnVwLnVzZV90aGlzX2Zvcl9ub25fc3RhdGljX21ldGhvZF9hY2Nlc3Nfb25seV9pZl9uZWNlc3Nhcnk9dHJ1ZQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMudGVzdC8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubXlseW4udGFza3MudWkucHJlZnMgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGVjNGQ5Ci0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMudGVzdC8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubXlseW4udGFza3MudWkucHJlZnMKQEAgLTAsMCArMSwzIEBACitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorcHJvamVjdC5yZXBvc2l0b3J5LmtpbmQ9YnVnemlsbGEKK3Byb2plY3QucmVwb3NpdG9yeS51cmw9aHR0cHNcOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5teWx5bi50ZWFtLnVpLnByZWZzIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMudGVzdC8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubXlseW4udGVhbS51aS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTdhMGYwCi0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMudGVzdC8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubXlseW4udGVhbS51aS5wcmVmcwpAQCAtMCwwICsxLDIgQEAKK2NvbW1pdC5jb21tZW50LnRlbXBsYXRlPSR7dGFzay5kZXNjcmlwdGlvbn0gXG5cbkJ1Z1w6ICR7dGFzay5rZXl9CitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMudGVzdC8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLmFwaS50b29scy5wcmVmcyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnRlc3QvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5hcGkudG9vbHMucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU4NTY4NwotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnRlc3QvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5hcGkudG9vbHMucHJlZnMKQEAgLTAsMCArMSw5MyBAQAorQU5OT1RBVElPTl9FTEVNRU5UX1RZUEVfQURERURfTUVUSE9EX1dJVEhPVVRfREVGQVVMVF9WQUxVRT1FcnJvcgorQU5OT1RBVElPTl9FTEVNRU5UX1RZUEVfQ0hBTkdFRF9UWVBFX0NPTlZFUlNJT049RXJyb3IKK0FOTk9UQVRJT05fRUxFTUVOVF9UWVBFX1JFTU9WRURfRklFTEQ9RXJyb3IKK0FOTk9UQVRJT05fRUxFTUVOVF9UWVBFX1JFTU9WRURfTUVUSE9EPUVycm9yCitBTk5PVEFUSU9OX0VMRU1FTlRfVFlQRV9SRU1PVkVEX1RZUEVfTUVNQkVSPUVycm9yCitBUElfQ09NUE9ORU5UX0VMRU1FTlRfVFlQRV9SRU1PVkVEX0FQSV9UWVBFPUVycm9yCitBUElfQ09NUE9ORU5UX0VMRU1FTlRfVFlQRV9SRU1PVkVEX1JFRVhQT1JURURfQVBJX1RZUEU9RXJyb3IKK0FQSV9DT01QT05FTlRfRUxFTUVOVF9UWVBFX1JFTU9WRURfUkVFWFBPUlRFRF9UWVBFPUVycm9yCitBUElfQ09NUE9ORU5UX0VMRU1FTlRfVFlQRV9SRU1PVkVEX1RZUEU9RXJyb3IKK0NMQVNTX0VMRU1FTlRfVFlQRV9BRERFRF9NRVRIT0Q9RXJyb3IKK0NMQVNTX0VMRU1FTlRfVFlQRV9BRERFRF9SRVNUUklDVElPTlM9RXJyb3IKK0NMQVNTX0VMRU1FTlRfVFlQRV9BRERFRF9UWVBFX1BBUkFNRVRFUj1FcnJvcgorQ0xBU1NfRUxFTUVOVF9UWVBFX0NIQU5HRURfQ09OVFJBQ1RFRF9TVVBFUklOVEVSRkFDRVNfU0VUPUVycm9yCitDTEFTU19FTEVNRU5UX1RZUEVfQ0hBTkdFRF9ERUNSRUFTRV9BQ0NFU1M9RXJyb3IKK0NMQVNTX0VMRU1FTlRfVFlQRV9DSEFOR0VEX05PTl9BQlNUUkFDVF9UT19BQlNUUkFDVD1FcnJvcgorQ0xBU1NfRUxFTUVOVF9UWVBFX0NIQU5HRURfTk9OX0ZJTkFMX1RPX0ZJTkFMPUVycm9yCitDTEFTU19FTEVNRU5UX1RZUEVfQ0hBTkdFRF9UWVBFX0NPTlZFUlNJT049RXJyb3IKK0NMQVNTX0VMRU1FTlRfVFlQRV9SRU1PVkVEX0NPTlNUUlVDVE9SPUVycm9yCitDTEFTU19FTEVNRU5UX1RZUEVfUkVNT1ZFRF9GSUVMRD1FcnJvcgorQ0xBU1NfRUxFTUVOVF9UWVBFX1JFTU9WRURfTUVUSE9EPUVycm9yCitDTEFTU19FTEVNRU5UX1RZUEVfUkVNT1ZFRF9TVVBFUkNMQVNTPUVycm9yCitDTEFTU19FTEVNRU5UX1RZUEVfUkVNT1ZFRF9UWVBFX01FTUJFUj1FcnJvcgorQ0xBU1NfRUxFTUVOVF9UWVBFX1JFTU9WRURfVFlQRV9QQVJBTUVURVI9RXJyb3IKK0NPTlNUUlVDVE9SX0VMRU1FTlRfVFlQRV9BRERFRF9UWVBFX1BBUkFNRVRFUj1FcnJvcgorQ09OU1RSVUNUT1JfRUxFTUVOVF9UWVBFX0NIQU5HRURfREVDUkVBU0VfQUNDRVNTPUVycm9yCitDT05TVFJVQ1RPUl9FTEVNRU5UX1RZUEVfQ0hBTkdFRF9WQVJBUkdTX1RPX0FSUkFZPUVycm9yCitDT05TVFJVQ1RPUl9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9UWVBFX1BBUkFNRVRFUj1FcnJvcgorRU5VTV9FTEVNRU5UX1RZUEVfQ0hBTkdFRF9DT05UUkFDVEVEX1NVUEVSSU5URVJGQUNFU19TRVQ9RXJyb3IKK0VOVU1fRUxFTUVOVF9UWVBFX0NIQU5HRURfVFlQRV9DT05WRVJTSU9OPUVycm9yCitFTlVNX0VMRU1FTlRfVFlQRV9SRU1PVkVEX0VOVU1fQ09OU1RBTlQ9RXJyb3IKK0VOVU1fRUxFTUVOVF9UWVBFX1JFTU9WRURfRklFTEQ9RXJyb3IKK0VOVU1fRUxFTUVOVF9UWVBFX1JFTU9WRURfTUVUSE9EPUVycm9yCitFTlVNX0VMRU1FTlRfVFlQRV9SRU1PVkVEX1RZUEVfTUVNQkVSPUVycm9yCitGSUVMRF9FTEVNRU5UX1RZUEVfQURERURfVkFMVUU9RXJyb3IKK0ZJRUxEX0VMRU1FTlRfVFlQRV9DSEFOR0VEX0RFQ1JFQVNFX0FDQ0VTUz1FcnJvcgorRklFTERfRUxFTUVOVF9UWVBFX0NIQU5HRURfRklOQUxfVE9fTk9OX0ZJTkFMX1NUQVRJQ19DT05TVEFOVD1FcnJvcgorRklFTERfRUxFTUVOVF9UWVBFX0NIQU5HRURfTk9OX0ZJTkFMX1RPX0ZJTkFMPUVycm9yCitGSUVMRF9FTEVNRU5UX1RZUEVfQ0hBTkdFRF9OT05fU1RBVElDX1RPX1NUQVRJQz1FcnJvcgorRklFTERfRUxFTUVOVF9UWVBFX0NIQU5HRURfU1RBVElDX1RPX05PTl9TVEFUSUM9RXJyb3IKK0ZJRUxEX0VMRU1FTlRfVFlQRV9DSEFOR0VEX1RZUEU9RXJyb3IKK0ZJRUxEX0VMRU1FTlRfVFlQRV9DSEFOR0VEX1ZBTFVFPUVycm9yCitGSUVMRF9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9UWVBFX0FSR1VNRU5UPUVycm9yCitGSUVMRF9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9WQUxVRT1FcnJvcgorSUxMRUdBTF9FWFRFTkQ9V2FybmluZworSUxMRUdBTF9JTVBMRU1FTlQ9V2FybmluZworSUxMRUdBTF9JTlNUQU5USUFURT1XYXJuaW5nCitJTExFR0FMX09WRVJSSURFPVdhcm5pbmcKK0lMTEVHQUxfUkVGRVJFTkNFPVdhcm5pbmcKK0lOVEVSRkFDRV9FTEVNRU5UX1RZUEVfQURERURfRklFTEQ9RXJyb3IKK0lOVEVSRkFDRV9FTEVNRU5UX1RZUEVfQURERURfTUVUSE9EPUVycm9yCitJTlRFUkZBQ0VfRUxFTUVOVF9UWVBFX0FEREVEX1JFU1RSSUNUSU9OUz1FcnJvcgorSU5URVJGQUNFX0VMRU1FTlRfVFlQRV9BRERFRF9TVVBFUl9JTlRFUkZBQ0VfV0lUSF9NRVRIT0RTPUVycm9yCitJTlRFUkZBQ0VfRUxFTUVOVF9UWVBFX0FEREVEX1RZUEVfUEFSQU1FVEVSPUVycm9yCitJTlRFUkZBQ0VfRUxFTUVOVF9UWVBFX0NIQU5HRURfQ09OVFJBQ1RFRF9TVVBFUklOVEVSRkFDRVNfU0VUPUVycm9yCitJTlRFUkZBQ0VfRUxFTUVOVF9UWVBFX0NIQU5HRURfVFlQRV9DT05WRVJTSU9OPUVycm9yCitJTlRFUkZBQ0VfRUxFTUVOVF9UWVBFX1JFTU9WRURfRklFTEQ9RXJyb3IKK0lOVEVSRkFDRV9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9NRVRIT0Q9RXJyb3IKK0lOVEVSRkFDRV9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9UWVBFX01FTUJFUj1FcnJvcgorSU5URVJGQUNFX0VMRU1FTlRfVFlQRV9SRU1PVkVEX1RZUEVfUEFSQU1FVEVSPUVycm9yCitJTlZBTElEX0pBVkFET0NfVEFHPUlnbm9yZQorSU5WQUxJRF9SRUZFUkVOQ0VfSU5fU1lTVEVNX0xJQlJBUklFUz1FcnJvcgorTEVBS19FWFRFTkQ9V2FybmluZworTEVBS19GSUVMRF9ERUNMPVdhcm5pbmcKK0xFQUtfSU1QTEVNRU5UPVdhcm5pbmcKK0xFQUtfTUVUSE9EX1BBUkFNPVdhcm5pbmcKK0xFQUtfTUVUSE9EX1JFVFVSTl9UWVBFPVdhcm5pbmcKK01FVEhPRF9FTEVNRU5UX1RZUEVfQURERURfUkVTVFJJQ1RJT05TPUVycm9yCitNRVRIT0RfRUxFTUVOVF9UWVBFX0FEREVEX1RZUEVfUEFSQU1FVEVSPUVycm9yCitNRVRIT0RfRUxFTUVOVF9UWVBFX0NIQU5HRURfREVDUkVBU0VfQUNDRVNTPUVycm9yCitNRVRIT0RfRUxFTUVOVF9UWVBFX0NIQU5HRURfTk9OX0FCU1RSQUNUX1RPX0FCU1RSQUNUPUVycm9yCitNRVRIT0RfRUxFTUVOVF9UWVBFX0NIQU5HRURfTk9OX0ZJTkFMX1RPX0ZJTkFMPUVycm9yCitNRVRIT0RfRUxFTUVOVF9UWVBFX0NIQU5HRURfTk9OX1NUQVRJQ19UT19TVEFUSUM9RXJyb3IKK01FVEhPRF9FTEVNRU5UX1RZUEVfQ0hBTkdFRF9TVEFUSUNfVE9fTk9OX1NUQVRJQz1FcnJvcgorTUVUSE9EX0VMRU1FTlRfVFlQRV9DSEFOR0VEX1ZBUkFSR1NfVE9fQVJSQVk9RXJyb3IKK01FVEhPRF9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9BTk5PVEFUSU9OX0RFRkFVTFRfVkFMVUU9RXJyb3IKK01FVEhPRF9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9UWVBFX1BBUkFNRVRFUj1FcnJvcgorVFlQRV9QQVJBTUVURVJfRUxFTUVOVF9UWVBFX0FEREVEX0NMQVNTX0JPVU5EPUVycm9yCitUWVBFX1BBUkFNRVRFUl9FTEVNRU5UX1RZUEVfQURERURfSU5URVJGQUNFX0JPVU5EPUVycm9yCitUWVBFX1BBUkFNRVRFUl9FTEVNRU5UX1RZUEVfQ0hBTkdFRF9DTEFTU19CT1VORD1FcnJvcgorVFlQRV9QQVJBTUVURVJfRUxFTUVOVF9UWVBFX0NIQU5HRURfSU5URVJGQUNFX0JPVU5EPUVycm9yCitUWVBFX1BBUkFNRVRFUl9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9DTEFTU19CT1VORD1FcnJvcgorVFlQRV9QQVJBTUVURVJfRUxFTUVOVF9UWVBFX1JFTU9WRURfSU5URVJGQUNFX0JPVU5EPUVycm9yCitVTlVTRURfUFJPQkxFTV9GSUxURVJTPVdhcm5pbmcKK2F1dG9tYXRpY2FsbHlfcmVtb3ZlZF91bnVzZWRfcHJvYmxlbV9maWx0ZXJzPWZhbHNlCitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQoraW5jb21wYXRpYmxlX2FwaV9jb21wb25lbnRfdmVyc2lvbj1FcnJvcgoraW5jb21wYXRpYmxlX2FwaV9jb21wb25lbnRfdmVyc2lvbl9pbmNsdWRlX21ham9yX3dpdGhvdXRfYnJlYWtpbmdfY2hhbmdlPURpc2FibGVkCitpbmNvbXBhdGlibGVfYXBpX2NvbXBvbmVudF92ZXJzaW9uX2luY2x1ZGVfbWlub3Jfd2l0aG91dF9hcGlfY2hhbmdlPURpc2FibGVkCitpbnZhbGlkX3NpbmNlX3RhZ192ZXJzaW9uPUVycm9yCittYWxmb3JtZWRfc2luY2VfdGFnPUVycm9yCittaXNzaW5nX3NpbmNlX3RhZz1FcnJvcgorcmVwb3J0X2FwaV9icmVha2FnZV93aGVuX21ham9yX3ZlcnNpb25faW5jcmVtZW50ZWQ9RGlzYWJsZWQKK3JlcG9ydF9yZXNvbHV0aW9uX2Vycm9yc19hcGlfY29tcG9uZW50PVdhcm5pbmcKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzLnRlc3QvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5jb3JlLnByZWZzIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMudGVzdC8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLmNvcmUucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTIzYzM3ZgotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnRlc3QvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5jb3JlLnByZWZzCkBAIC0wLDAgKzEsMiBAQAorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK3Jlc29sdmUucmVxdWlyZWJ1bmRsZT1mYWxzZQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMudGVzdC9CVUNLIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMudGVzdC9CVUNLCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwZmI5NmYKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0L0JVQ0sKQEAgLTAsMCArMSwzMSBAQAorVEVTVFMgPSBnbG9iKFsndHN0LyoqLyouamF2YSddKQorCitmb3IgdCBpbiBURVNUUzoKKyAgbiA9IHRbbGVuKCd0c3QvJyk6bGVuKHQpLWxlbignLmphdmEnKV0ucmVwbGFjZSgnLycsICcuJykKKyAgamF2YV90ZXN0KAorICAgIG5hbWUgPSBuLAorICAgIGxhYmVscyA9IFsnbGZzJ10sCisgICAgc3JjcyA9IFt0XSwKKyAgICBkZXBzID0gWworICAgICAgJzpoZWxwZXJzJywKKyAgICAgICcvL29yZy5lY2xpcHNlLmpnaXQuanVuaXQ6anVuaXQnLAorICAgICAgJy8vb3JnLmVjbGlwc2UuamdpdC5sZnM6amdpdC1sZnMnLAorICAgICAgJy8vb3JnLmVjbGlwc2UuamdpdDpqZ2l0JywKKyAgICAgICcvL2xpYjpoYW1jcmVzdC1jb3JlJywKKyAgICAgICcvL2xpYjpoYW1jcmVzdC1saWJyYXJ5JywKKyAgICAgICcvL2xpYjpqdW5pdCcsCisgICAgXSwKKyAgICBzb3VyY2VfdW5kZXJfdGVzdCA9IFsnLy9vcmcuZWNsaXBzZS5qZ2l0LmxmczpqZ2l0LWxmcyddLAorICApCisKK2phdmFfbGlicmFyeSgKKyAgbmFtZSA9ICdoZWxwZXJzJywKKyAgc3JjcyA9IGdsb2IoWydzcmMvKiovKi5qYXZhJ10pLAorICBkZXBzID0gWworICAgICcvL29yZy5lY2xpcHNlLmpnaXQ6amdpdCcsCisgICAgJy8vb3JnLmVjbGlwc2UuamdpdC5sZnM6amdpdC1sZnMnLAorICAgICcvL29yZy5lY2xpcHNlLmpnaXQuanVuaXQ6anVuaXQnLAorICAgICcvL2xpYjpqdW5pdCcsCisgIF0sCisgIHZpc2liaWxpdHkgPSBbJ1BVQkxJQyddCispCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0L01FVEEtSU5GL01BTklGRVNULk1GIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMudGVzdC9NRVRBLUlORi9NQU5JRkVTVC5NRgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTQ1NmYxCi0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMudGVzdC9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMCwwICsxLDIwIEBACitNYW5pZmVzdC1WZXJzaW9uOiAxLjAKK0J1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKK0J1bmRsZS1OYW1lOiAlcGx1Z2luX25hbWUKK0J1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpnaXQubGZzLnRlc3QKK0J1bmRsZS1WZXJzaW9uOiA0LjMuMC5xdWFsaWZpZXIKK0J1bmRsZS1WZW5kb3I6ICVwcm92aWRlcl9uYW1lCitCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KK0J1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKYXZhU0UtMS43CitJbXBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuamdpdC5qdW5pdDt2ZXJzaW9uPSJbNC4zLjAsNC40LjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5lcnJvcnM7dmVyc2lvbj0iWzQuMy4wLDQuNC4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5sZnMubGliO3ZlcnNpb249Ils0LjMuMCw0LjQuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQubGliO3ZlcnNpb249Ils0LjMuMCw0LjQuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudXRpbDt2ZXJzaW9uPSJbNC4zLjAsNC40LjApIiwKKyBvcmcuaGFtY3Jlc3QuY29yZTt2ZXJzaW9uPSJbMS4xLjAsMi4wLjApIiwKKyBvcmcuanVuaXQ7dmVyc2lvbj0iWzQuMC4wLDUuMC4wKSIsCisgb3JnLmp1bml0LnJ1bm5lcjt2ZXJzaW9uPSJbNC4wLjAsNS4wLjApIiwKKyBvcmcuanVuaXQucnVubmVyczt2ZXJzaW9uPSJbNC4wLjAsNS4wLjApIgorRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmpnaXQubGZzLmxpYjt2ZXJzaW9uPSI0LjMuMCI7eC1pbnRlcm5hbDo9dHJ1ZSwKKyBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0O3ZlcnNpb249IjQuMy4wIjt4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIudGVzdCIKKwpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMudGVzdC9idWlsZC5wcm9wZXJ0aWVzIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMudGVzdC9idWlsZC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3YWUwOTEKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0L2J1aWxkLnByb3BlcnRpZXMKQEAgLTAsMCArMSw1IEBACitzb3VyY2UuLiA9IHRzdC8sIHNyYy8KK291dHB1dC4uID0gYmluLworYmluLmluY2x1ZGVzID0gTUVUQS1JTkYvLFwKKyAgICAgICAgICAgICAgIC4sXAorICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzLnRlc3QvcGx1Z2luLnByb3BlcnRpZXMgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0L3BsdWdpbi5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5MDA3ODAKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0L3BsdWdpbi5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMiBAQAorcGx1Z2luX25hbWU9SkdpdCBMRlMgVGVzdHMKK3Byb3ZpZGVyX25hbWU9RWNsaXBzZSBKR2l0CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0L3BvbS54bWwgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0L3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU3MmE4MAotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnRlc3QvcG9tLnhtbApAQCAtMCwwICsxLDExOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0KKyAgIENvcHlyaWdodCAoQykgMjAxNSBNYXR0aGlhcyBTb2huIDxtYXR0aGlhcy5zb2huQHNhcC5jb20+CisgICBhbmQgb3RoZXIgY29weXJpZ2h0IG93bmVycyBhcyBkb2N1bWVudGVkIGluIHRoZSBwcm9qZWN0J3MgSVAgbG9nLgorCisgICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZQorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYxLjAgd2hpY2gKKyAgIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBpcyByZXByb2R1Y2VkIGJlbG93LCBhbmQgaXMKKyAgIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZWRsLXYxMC5waHAKKworICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgICBjb25kaXRpb25zIGFyZSBtZXQ6CisKKyAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCisgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICAgLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIEluYy4gbm9yIHRoZQorICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorICAgICBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCisgICAgIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5ECisgICBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAorICAgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAgIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCisgICBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAgIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICAgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgICBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgICBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICAgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYKKyAgIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorLS0+CisKKzxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9tYXZlbi12NF8wXzAueHNkIj4KKyAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorCisgIDxwYXJlbnQ+CisgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KKyAgICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0LXBhcmVudDwvYXJ0aWZhY3RJZD4KKyAgICA8dmVyc2lvbj40LjMuMC1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgPC9wYXJlbnQ+CisKKyAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC5sZnMudGVzdDwvYXJ0aWZhY3RJZD4KKyAgPG5hbWU+SkdpdCAtIExhcmdlIEZpbGUgU3RvcmFnZSBUZXN0czwvbmFtZT4KKworICA8ZGVzY3JpcHRpb24+CisgICAgVGVzdHMgZm9yIHRoZSBMYXJnZSBGaWxlIEV4dGVuc2lvbiAoTEZTKS4KKyAgPC9kZXNjcmlwdGlvbj4KKworICA8ZGVwZW5kZW5jaWVzPgorICAgIDxkZXBlbmRlbmN5PgorICAgICAgPGdyb3VwSWQ+anVuaXQ8L2dyb3VwSWQ+CisgICAgICA8YXJ0aWZhY3RJZD5qdW5pdDwvYXJ0aWZhY3RJZD4KKyAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KKyAgICA8L2RlcGVuZGVuY3k+CisKKyAgICA8ZGVwZW5kZW5jeT4KKyAgICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CisgICAgICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0PC9hcnRpZmFjdElkPgorICAgICAgPHZlcnNpb24+JHtwcm9qZWN0LnZlcnNpb259PC92ZXJzaW9uPgorICAgIDwvZGVwZW5kZW5jeT4KKworICAgIDxkZXBlbmRlbmN5PgorICAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KKyAgICAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQubGZzPC9hcnRpZmFjdElkPgorICAgICAgPHZlcnNpb24+JHtwcm9qZWN0LnZlcnNpb259PC92ZXJzaW9uPgorICAgIDwvZGVwZW5kZW5jeT4KKworICAgIDxkZXBlbmRlbmN5PgorICAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KKyAgICAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQuanVuaXQ8L2FydGlmYWN0SWQ+CisgICAgICA8dmVyc2lvbj4ke3Byb2plY3QudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CisgICAgPC9kZXBlbmRlbmN5PgorICA8L2RlcGVuZGVuY2llcz4KKworICA8YnVpbGQ+CisgICAgPHRlc3RTb3VyY2VEaXJlY3Rvcnk+dHN0LzwvdGVzdFNvdXJjZURpcmVjdG9yeT4KKyAgICA8c291cmNlRGlyZWN0b3J5PnNyYy88L3NvdXJjZURpcmVjdG9yeT4KKworICAgIDx0ZXN0UmVzb3VyY2VzPgorICAgICAgPHRlc3RSZXNvdXJjZT4KKyAgICAgICAgPGRpcmVjdG9yeT50c3QtcnNyYy88L2RpcmVjdG9yeT4KKyAgICAgIDwvdGVzdFJlc291cmNlPgorICAgIDwvdGVzdFJlc291cmNlcz4KKyAgICA8cGx1Z2lucz4KKyAgICAgIDxwbHVnaW4+CisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4KKyAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tamFyLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPGV4ZWN1dGlvbnM+CisgICAgICAgICAgPGV4ZWN1dGlvbj4KKyAgICAgICAgICAgIDxnb2Fscz4KKyAgICAgICAgICAgICAgPGdvYWw+dGVzdC1qYXI8L2dvYWw+CisgICAgICAgICAgICA8L2dvYWxzPgorICAgICAgICAgIDwvZXhlY3V0aW9uPgorICAgICAgICA8L2V4ZWN1dGlvbnM+CisgICAgICA8L3BsdWdpbj4KKyAgICAgIDxwbHVnaW4+CisgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXN1cmVmaXJlLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgPGFyZ0xpbmU+LURqYXZhLmlvLnRtcGRpcj0ke3Byb2plY3QuYnVpbGQuZGlyZWN0b3J5fSAgLVhteDMwMG08L2FyZ0xpbmU+CisgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgIDwvcGx1Z2luPgorICAgIDwvcGx1Z2lucz4KKyAgPC9idWlsZD4KKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzLnRlc3Qvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGZzL3Rlc3QvTG9uZ09iamVjdElkVGVzdFV0aWxzLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xmcy90ZXN0L0xvbmdPYmplY3RJZFRlc3RVdGlscy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjNjQwMGYKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xmcy90ZXN0L0xvbmdPYmplY3RJZFRlc3RVdGlscy5qYXZhCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUsIE1hdHRoaWFzIFNvaG4gPG1hdHRoaWFzLnNvaG5Ac2FwLmNvbT4KKyAqIGFuZCBvdGhlciBjb3B5cmlnaHQgb3duZXJzIGFzIGRvY3VtZW50ZWQgaW4gdGhlIHByb2plY3QncyBJUCBsb2cuCisgKgorICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2MS4wIHdoaWNoCisgKiBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgaXMgcmVwcm9kdWNlZCBiZWxvdywgYW5kIGlzCisgKiBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VkbC12MTAucGhwCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgSW5jLiBub3IgdGhlCisgKiAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCisgKiAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3IKKyAqICAgd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORAorICogQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKyAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGCisgKiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0OworCitpbXBvcnQgamF2YS5pby5CdWZmZXJlZElucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLm5pby5jaGFyc2V0LlN0YW5kYXJkQ2hhcnNldHM7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlczsKK2ltcG9ydCBqYXZhLm5pby5maWxlLlBhdGg7CitpbXBvcnQgamF2YS5zZWN1cml0eS5NZXNzYWdlRGlnZXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5sZnMubGliLkNvbnN0YW50czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5saWIuTG9uZ09iamVjdElkOworCitwdWJsaWMgY2xhc3MgTG9uZ09iamVjdElkVGVzdFV0aWxzIHsKKworCS8qKgorCSAqIENyZWF0ZSBpZCBhcyBoYXNoIG9mIHRoZSBnaXZlbiBzdHJpbmcuCisJICoKKwkgKiBAcGFyYW0gcworCSAqICAgICAgICAgICAgdGhlIHN0cmluZyB0byBoYXNoCisJICogQHJldHVybiBpZCBjYWxjdWxhdGVkIGJ5IGhhc2hpbmcgc3RyaW5nCisJICovCisJcHVibGljIHN0YXRpYyBMb25nT2JqZWN0SWQgaGFzaChTdHJpbmcgcykgeworCQlNZXNzYWdlRGlnZXN0IG1kID0gQ29uc3RhbnRzLm5ld01lc3NhZ2VEaWdlc3QoKTsKKwkJbWQudXBkYXRlKHMuZ2V0Qnl0ZXMoU3RhbmRhcmRDaGFyc2V0cy5VVEZfOCkpOworCQlyZXR1cm4gTG9uZ09iamVjdElkLmZyb21SYXcobWQuZGlnZXN0KCkpOworCX0KKworCS8qKgorCSAqIENyZWF0ZSBpZCBhcyBoYXNoIG9mIGEgZmlsZSBjb250ZW50CisJICoKKwkgKiBAcGFyYW0gZmlsZQorCSAqICAgICAgICAgICAgdGhlIGZpbGUgdG8gaGFzaAorCSAqIEByZXR1cm4gaWQgY2FsY3VsYXRlZCBieSBoYXNoaW5nIGZpbGUgY29udGVudAorCSAqIEB0aHJvd3MgRmlsZU5vdEZvdW5kRXhjZXB0aW9uCisJICogICAgICAgICAgICAgaWYgZmlsZSBkb2Vzbid0IGV4aXN0CisJICogQHRocm93cyBJT0V4Y2VwdGlvbgorCSAqLworCXB1YmxpYyBzdGF0aWMgTG9uZ09iamVjdElkIGhhc2goUGF0aCBmaWxlKQorCQkJdGhyb3dzIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geworCQlNZXNzYWdlRGlnZXN0IG1kID0gQ29uc3RhbnRzLm5ld01lc3NhZ2VEaWdlc3QoKTsKKwkJdHJ5IChJbnB1dFN0cmVhbSBpcyA9IG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKAorCQkJCUZpbGVzLm5ld0lucHV0U3RyZWFtKGZpbGUpKSkgeworCQkJZmluYWwgYnl0ZVtdIGJ1ZmZlciA9IG5ldyBieXRlWzQwOTZdOworCQkJZm9yIChpbnQgcmVhZCA9IDA7IChyZWFkID0gaXMucmVhZChidWZmZXIpKSAhPSAtMTspIHsKKwkJCQltZC51cGRhdGUoYnVmZmVyLCAwLCByZWFkKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gTG9uZ09iamVjdElkLmZyb21SYXcobWQuZGlnZXN0KCkpOworCX0KK30KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzLnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvbGZzL2xpYi9BYmJyZXZpYXRlZExvbmdPYmplY3RJZFRlc3QuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvbGZzL2xpYi9BYmJyZXZpYXRlZExvbmdPYmplY3RJZFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTM4YTc4Ci0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9sZnMvbGliL0FiYnJldmlhdGVkTG9uZ09iamVjdElkVGVzdC5qYXZhCkBAIC0wLDAgKzEsNTk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1LCBNYXR0aGlhcyBTb2huIDxtYXR0aGlhcy5zb2huQHNhcC5jb20+CisgKiBhbmQgb3RoZXIgY29weXJpZ2h0IG93bmVycyBhcyBkb2N1bWVudGVkIGluIHRoZSBwcm9qZWN0J3MgSVAgbG9nLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlCisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgRGlzdHJpYnV0aW9uIExpY2Vuc2UgdjEuMCB3aGljaAorICogYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGlzIHJlcHJvZHVjZWQgYmVsb3csIGFuZCBpcworICogYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lZGwtdjEwLnBocAorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIEluYy4gbm9yIHRoZQorICogICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorICogICBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCisgKiAgIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQKKyAqIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCisgKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRgorICogQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworcGFja2FnZSBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5saWI7CisKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RmFsc2U7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0Tm90TnVsbDsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnROb3RTYW1lOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydE51bGw7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VHJ1ZTsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5mYWlsOworCitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5sZnMudGVzdC5Mb25nT2JqZWN0SWRUZXN0VXRpbHM7CitpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CisKKy8qCisgKiBQb3J0ZWQgdG8gU0hBLTI1NiBmcm9tIG9yZy5lY2xpcHNlLmpnaXQubGliLkFiYnJldmlhdGVkT2JqZWN0SWRUZXN0CisgKi8KK3B1YmxpYyBjbGFzcyBBYmJyZXZpYXRlZExvbmdPYmplY3RJZFRlc3QgeworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdEVtcHR5X0Zyb21CeXRlQXJyYXkoKSB7CisJCWZpbmFsIEFiYnJldmlhdGVkTG9uZ09iamVjdElkIGk7CisJCWkgPSBBYmJyZXZpYXRlZExvbmdPYmplY3RJZC5mcm9tU3RyaW5nKG5ldyBieXRlW10ge30sIDAsIDApOworCQlhc3NlcnROb3ROdWxsKGkpOworCQlhc3NlcnRFcXVhbHMoMCwgaS5sZW5ndGgoKSk7CisJCWFzc2VydEZhbHNlKGkuaXNDb21wbGV0ZSgpKTsKKwkJYXNzZXJ0RXF1YWxzKCIiLCBpLm5hbWUoKSk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0RW1wdHlfRnJvbVN0cmluZygpIHsKKwkJZmluYWwgQWJicmV2aWF0ZWRMb25nT2JqZWN0SWQgaSA9IEFiYnJldmlhdGVkTG9uZ09iamVjdElkCisJCQkJLmZyb21TdHJpbmcoIiIpOworCQlhc3NlcnROb3ROdWxsKGkpOworCQlhc3NlcnRFcXVhbHMoMCwgaS5sZW5ndGgoKSk7CisJCWFzc2VydEZhbHNlKGkuaXNDb21wbGV0ZSgpKTsKKwkJYXNzZXJ0RXF1YWxzKCIiLCBpLm5hbWUoKSk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0RnVsbF9Gcm9tQnl0ZUFycmF5KCkgeworCQlmaW5hbCBTdHJpbmcgcyA9ICIyN2UxNWI3MjkzN2ZjOGY1NThkYTI0YWMzZDUwZWMyMDMwMmE0Y2YyMWUzM2I4N2FlOGU0Y2U5MGU4OWM0YjEwIjsKKwkJZmluYWwgYnl0ZVtdIGIgPSBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25zdGFudHMuZW5jb2RlQVNDSUkocyk7CisJCWZpbmFsIEFiYnJldmlhdGVkTG9uZ09iamVjdElkIGkgPSBBYmJyZXZpYXRlZExvbmdPYmplY3RJZC5mcm9tU3RyaW5nKGIsCisJCQkJMCwgYi5sZW5ndGgpOworCQlhc3NlcnROb3ROdWxsKGkpOworCQlhc3NlcnRFcXVhbHMocy5sZW5ndGgoKSwgaS5sZW5ndGgoKSk7CisJCWFzc2VydFRydWUoaS5pc0NvbXBsZXRlKCkpOworCQlhc3NlcnRFcXVhbHMocywgaS5uYW1lKCkpOworCisJCWZpbmFsIExvbmdPYmplY3RJZCBmID0gaS50b0xvbmdPYmplY3RJZCgpOworCQlhc3NlcnROb3ROdWxsKGYpOworCQlhc3NlcnRFcXVhbHMoTG9uZ09iamVjdElkLmZyb21TdHJpbmcocyksIGYpOworCQlhc3NlcnRFcXVhbHMoZi5oYXNoQ29kZSgpLCBpLmhhc2hDb2RlKCkpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdEZ1bGxfRnJvbVN0cmluZygpIHsKKwkJZmluYWwgU3RyaW5nIHMgPSAiMjdlMTViNzI5MzdmYzhmNTU4ZGEyNGFjM2Q1MGVjMjAzMDJhNGNmMjFlMzNiODdhZThlNGNlOTBlODljNGIxMCI7CisJCWZpbmFsIEFiYnJldmlhdGVkTG9uZ09iamVjdElkIGkgPSBBYmJyZXZpYXRlZExvbmdPYmplY3RJZC5mcm9tU3RyaW5nKHMpOworCQlhc3NlcnROb3ROdWxsKGkpOworCQlhc3NlcnRFcXVhbHMocy5sZW5ndGgoKSwgaS5sZW5ndGgoKSk7CisJCWFzc2VydFRydWUoaS5pc0NvbXBsZXRlKCkpOworCQlhc3NlcnRFcXVhbHMocywgaS5uYW1lKCkpOworCisJCWZpbmFsIExvbmdPYmplY3RJZCBmID0gaS50b0xvbmdPYmplY3RJZCgpOworCQlhc3NlcnROb3ROdWxsKGYpOworCQlhc3NlcnRFcXVhbHMoTG9uZ09iamVjdElkLmZyb21TdHJpbmcocyksIGYpOworCQlhc3NlcnRFcXVhbHMoZi5oYXNoQ29kZSgpLCBpLmhhc2hDb2RlKCkpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdDFfRnJvbVN0cmluZygpIHsKKwkJZmluYWwgU3RyaW5nIHMgPSAiMiI7CisJCWZpbmFsIEFiYnJldmlhdGVkTG9uZ09iamVjdElkIGkgPSBBYmJyZXZpYXRlZExvbmdPYmplY3RJZC5mcm9tU3RyaW5nKHMpOworCQlhc3NlcnROb3ROdWxsKGkpOworCQlhc3NlcnRFcXVhbHMocy5sZW5ndGgoKSwgaS5sZW5ndGgoKSk7CisJCWFzc2VydEZhbHNlKGkuaXNDb21wbGV0ZSgpKTsKKwkJYXNzZXJ0RXF1YWxzKHMsIGkubmFtZSgpKTsKKwkJYXNzZXJ0TnVsbChpLnRvTG9uZ09iamVjdElkKCkpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdDJfRnJvbVN0cmluZygpIHsKKwkJZmluYWwgU3RyaW5nIHMgPSAiMjciOworCQlmaW5hbCBBYmJyZXZpYXRlZExvbmdPYmplY3RJZCBpID0gQWJicmV2aWF0ZWRMb25nT2JqZWN0SWQuZnJvbVN0cmluZyhzKTsKKwkJYXNzZXJ0Tm90TnVsbChpKTsKKwkJYXNzZXJ0RXF1YWxzKHMubGVuZ3RoKCksIGkubGVuZ3RoKCkpOworCQlhc3NlcnRGYWxzZShpLmlzQ29tcGxldGUoKSk7CisJCWFzc2VydEVxdWFscyhzLCBpLm5hbWUoKSk7CisJCWFzc2VydE51bGwoaS50b0xvbmdPYmplY3RJZCgpKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3QzX0Zyb21TdHJpbmcoKSB7CisJCWZpbmFsIFN0cmluZyBzID0gIjI3ZSI7CisJCWZpbmFsIEFiYnJldmlhdGVkTG9uZ09iamVjdElkIGkgPSBBYmJyZXZpYXRlZExvbmdPYmplY3RJZC5mcm9tU3RyaW5nKHMpOworCQlhc3NlcnROb3ROdWxsKGkpOworCQlhc3NlcnRFcXVhbHMocy5sZW5ndGgoKSwgaS5sZW5ndGgoKSk7CisJCWFzc2VydEZhbHNlKGkuaXNDb21wbGV0ZSgpKTsKKwkJYXNzZXJ0RXF1YWxzKHMsIGkubmFtZSgpKTsKKwkJYXNzZXJ0TnVsbChpLnRvTG9uZ09iamVjdElkKCkpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdDRfRnJvbVN0cmluZygpIHsKKwkJZmluYWwgU3RyaW5nIHMgPSAiMjdlMSI7CisJCWZpbmFsIEFiYnJldmlhdGVkTG9uZ09iamVjdElkIGkgPSBBYmJyZXZpYXRlZExvbmdPYmplY3RJZC5mcm9tU3RyaW5nKHMpOworCQlhc3NlcnROb3ROdWxsKGkpOworCQlhc3NlcnRFcXVhbHMocy5sZW5ndGgoKSwgaS5sZW5ndGgoKSk7CisJCWFzc2VydEZhbHNlKGkuaXNDb21wbGV0ZSgpKTsKKwkJYXNzZXJ0RXF1YWxzKHMsIGkubmFtZSgpKTsKKwkJYXNzZXJ0TnVsbChpLnRvTG9uZ09iamVjdElkKCkpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdDVfRnJvbVN0cmluZygpIHsKKwkJZmluYWwgU3RyaW5nIHMgPSAiMjdlMTUiOworCQlmaW5hbCBBYmJyZXZpYXRlZExvbmdPYmplY3RJZCBpID0gQWJicmV2aWF0ZWRMb25nT2JqZWN0SWQuZnJvbVN0cmluZyhzKTsKKwkJYXNzZXJ0Tm90TnVsbChpKTsKKwkJYXNzZXJ0RXF1YWxzKHMubGVuZ3RoKCksIGkubGVuZ3RoKCkpOworCQlhc3NlcnRGYWxzZShpLmlzQ29tcGxldGUoKSk7CisJCWFzc2VydEVxdWFscyhzLCBpLm5hbWUoKSk7CisJCWFzc2VydE51bGwoaS50b0xvbmdPYmplY3RJZCgpKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3Q2X0Zyb21TdHJpbmcoKSB7CisJCWZpbmFsIFN0cmluZyBzID0gIjI3ZTE1YiI7CisJCWZpbmFsIEFiYnJldmlhdGVkTG9uZ09iamVjdElkIGkgPSBBYmJyZXZpYXRlZExvbmdPYmplY3RJZC5mcm9tU3RyaW5nKHMpOworCQlhc3NlcnROb3ROdWxsKGkpOworCQlhc3NlcnRFcXVhbHMocy5sZW5ndGgoKSwgaS5sZW5ndGgoKSk7CisJCWFzc2VydEZhbHNlKGkuaXNDb21wbGV0ZSgpKTsKKwkJYXNzZXJ0RXF1YWxzKHMsIGkubmFtZSgpKTsKKwkJYXNzZXJ0TnVsbChpLnRvTG9uZ09iamVjdElkKCkpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdDdfRnJvbVN0cmluZygpIHsKKwkJZmluYWwgU3RyaW5nIHMgPSAiMjdlMTViNyI7CisJCWZpbmFsIEFiYnJldmlhdGVkTG9uZ09iamVjdElkIGkgPSBBYmJyZXZpYXRlZExvbmdPYmplY3RJZC5mcm9tU3RyaW5nKHMpOworCQlhc3NlcnROb3ROdWxsKGkpOworCQlhc3NlcnRFcXVhbHMocy5sZW5ndGgoKSwgaS5sZW5ndGgoKSk7CisJCWFzc2VydEZhbHNlKGkuaXNDb21wbGV0ZSgpKTsKKwkJYXNzZXJ0RXF1YWxzKHMsIGkubmFtZSgpKTsKKwkJYXNzZXJ0TnVsbChpLnRvTG9uZ09iamVjdElkKCkpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdDhfRnJvbVN0cmluZygpIHsKKwkJZmluYWwgU3RyaW5nIHMgPSAiMjdlMTViNzIiOworCQlmaW5hbCBBYmJyZXZpYXRlZExvbmdPYmplY3RJZCBpID0gQWJicmV2aWF0ZWRMb25nT2JqZWN0SWQuZnJvbVN0cmluZyhzKTsKKwkJYXNzZXJ0Tm90TnVsbChpKTsKKwkJYXNzZXJ0RXF1YWxzKHMubGVuZ3RoKCksIGkubGVuZ3RoKCkpOworCQlhc3NlcnRGYWxzZShpLmlzQ29tcGxldGUoKSk7CisJCWFzc2VydEVxdWFscyhzLCBpLm5hbWUoKSk7CisJCWFzc2VydE51bGwoaS50b0xvbmdPYmplY3RJZCgpKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3Q5X0Zyb21TdHJpbmcoKSB7CisJCWZpbmFsIFN0cmluZyBzID0gIjI3ZTE1YjcyOSI7CisJCWZpbmFsIEFiYnJldmlhdGVkTG9uZ09iamVjdElkIGkgPSBBYmJyZXZpYXRlZExvbmdPYmplY3RJZC5mcm9tU3RyaW5nKHMpOworCQlhc3NlcnROb3ROdWxsKGkpOworCQlhc3NlcnRFcXVhbHMocy5sZW5ndGgoKSwgaS5sZW5ndGgoKSk7CisJCWFzc2VydEZhbHNlKGkuaXNDb21wbGV0ZSgpKTsKKwkJYXNzZXJ0RXF1YWxzKHMsIGkubmFtZSgpKTsKKwkJYXNzZXJ0TnVsbChpLnRvTG9uZ09iamVjdElkKCkpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdDE1X0Zyb21TdHJpbmcoKSB7CisJCWZpbmFsIFN0cmluZyBzID0gIjI3ZTE1YjcyOTM3ZmM4ZiI7CisJCWZpbmFsIEFiYnJldmlhdGVkTG9uZ09iamVjdElkIGkgPSBBYmJyZXZpYXRlZExvbmdPYmplY3RJZC5mcm9tU3RyaW5nKHMpOworCQlhc3NlcnROb3ROdWxsKGkpOworCQlhc3NlcnRFcXVhbHMocy5sZW5ndGgoKSwgaS5sZW5ndGgoKSk7CisJCWFzc2VydEZhbHNlKGkuaXNDb21wbGV0ZSgpKTsKKwkJYXNzZXJ0RXF1YWxzKHMsIGkubmFtZSgpKTsKKwkJYXNzZXJ0TnVsbChpLnRvTG9uZ09iamVjdElkKCkpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdDE2X0Zyb21TdHJpbmcoKSB7CisJCWZpbmFsIFN0cmluZyBzID0gIjI3ZTE1YjcyOTM3ZmM4ZjUiOworCQlmaW5hbCBBYmJyZXZpYXRlZExvbmdPYmplY3RJZCBpID0gQWJicmV2aWF0ZWRMb25nT2JqZWN0SWQuZnJvbVN0cmluZyhzKTsKKwkJYXNzZXJ0Tm90TnVsbChpKTsKKwkJYXNzZXJ0RXF1YWxzKHMubGVuZ3RoKCksIGkubGVuZ3RoKCkpOworCQlhc3NlcnRGYWxzZShpLmlzQ29tcGxldGUoKSk7CisJCWFzc2VydEVxdWFscyhzLCBpLm5hbWUoKSk7CisJCWFzc2VydE51bGwoaS50b0xvbmdPYmplY3RJZCgpKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3QxN19Gcm9tU3RyaW5nKCkgeworCQlmaW5hbCBTdHJpbmcgcyA9ICIyN2UxNWI3MjkzN2ZjOGY1NSI7CisJCWZpbmFsIEFiYnJldmlhdGVkTG9uZ09iamVjdElkIGkgPSBBYmJyZXZpYXRlZExvbmdPYmplY3RJZC5mcm9tU3RyaW5nKHMpOworCQlhc3NlcnROb3ROdWxsKGkpOworCQlhc3NlcnRFcXVhbHMocy5sZW5ndGgoKSwgaS5sZW5ndGgoKSk7CisJCWFzc2VydEZhbHNlKGkuaXNDb21wbGV0ZSgpKTsKKwkJYXNzZXJ0RXF1YWxzKHMsIGkubmFtZSgpKTsKKwkJYXNzZXJ0TnVsbChpLnRvTG9uZ09iamVjdElkKCkpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdDMzX0Zyb21TdHJpbmcoKSB7CisJCWZpbmFsIFN0cmluZyBzID0gIjI3ZTE1YjcyOTM3ZmM4ZjU1OGRhMjRhYzNkNTBlYzIwMyI7CisJCWZpbmFsIEFiYnJldmlhdGVkTG9uZ09iamVjdElkIGkgPSBBYmJyZXZpYXRlZExvbmdPYmplY3RJZC5mcm9tU3RyaW5nKHMpOworCQlhc3NlcnROb3ROdWxsKGkpOworCQlhc3NlcnRFcXVhbHMocy5sZW5ndGgoKSwgaS5sZW5ndGgoKSk7CisJCWFzc2VydEZhbHNlKGkuaXNDb21wbGV0ZSgpKTsKKwkJYXNzZXJ0RXF1YWxzKHMsIGkubmFtZSgpKTsKKwkJYXNzZXJ0TnVsbChpLnRvTG9uZ09iamVjdElkKCkpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdEVxdWFsc19TaG9ydCgpIHsKKwkJZmluYWwgU3RyaW5nIHMgPSAiMjdlMTViNzIiOworCQlmaW5hbCBBYmJyZXZpYXRlZExvbmdPYmplY3RJZCBhID0gQWJicmV2aWF0ZWRMb25nT2JqZWN0SWQuZnJvbVN0cmluZyhzKTsKKwkJZmluYWwgQWJicmV2aWF0ZWRMb25nT2JqZWN0SWQgYiA9IEFiYnJldmlhdGVkTG9uZ09iamVjdElkLmZyb21TdHJpbmcocyk7CisJCWFzc2VydE5vdFNhbWUoYSwgYik7CisJCWFzc2VydFRydWUoYS5oYXNoQ29kZSgpID09IGIuaGFzaENvZGUoKSk7CisJCWFzc2VydEVxdWFscyhiLCBhKTsKKwkJYXNzZXJ0RXF1YWxzKGEsIGIpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdEVxdWFsc19GdWxsKCkgeworCQlmaW5hbCBTdHJpbmcgcyA9ICIyN2UxNWI3MjkzN2ZjOGY1NThkYTI0YWMzZDUwZWMyMDMwMmE0Y2YyMWUzM2I4N2FlOGU0Y2U5MGU4OWM0YjEwIjsKKwkJZmluYWwgQWJicmV2aWF0ZWRMb25nT2JqZWN0SWQgYSA9IEFiYnJldmlhdGVkTG9uZ09iamVjdElkLmZyb21TdHJpbmcocyk7CisJCWZpbmFsIEFiYnJldmlhdGVkTG9uZ09iamVjdElkIGIgPSBBYmJyZXZpYXRlZExvbmdPYmplY3RJZC5mcm9tU3RyaW5nKHMpOworCQlhc3NlcnROb3RTYW1lKGEsIGIpOworCQlhc3NlcnRUcnVlKGEuaGFzaENvZGUoKSA9PSBiLmhhc2hDb2RlKCkpOworCQlhc3NlcnRFcXVhbHMoYiwgYSk7CisJCWFzc2VydEVxdWFscyhhLCBiKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3ROb3RFcXVhbHNfU2FtZUxlbmd0aCgpIHsKKwkJZmluYWwgU3RyaW5nIHNhID0gIjI3ZTE1YjcyIjsKKwkJZmluYWwgU3RyaW5nIHNiID0gIjI3ZTE1YjdmIjsKKwkJZmluYWwgQWJicmV2aWF0ZWRMb25nT2JqZWN0SWQgYSA9IEFiYnJldmlhdGVkTG9uZ09iamVjdElkCisJCQkJLmZyb21TdHJpbmcoc2EpOworCQlmaW5hbCBBYmJyZXZpYXRlZExvbmdPYmplY3RJZCBiID0gQWJicmV2aWF0ZWRMb25nT2JqZWN0SWQKKwkJCQkuZnJvbVN0cmluZyhzYik7CisJCWFzc2VydEZhbHNlKGEuZXF1YWxzKGIpKTsKKwkJYXNzZXJ0RmFsc2UoYi5lcXVhbHMoYSkpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdE5vdEVxdWFsc19EaWZmTGVuZ3RoKCkgeworCQlmaW5hbCBTdHJpbmcgc2EgPSAiMjdlMTViNzJhYmNkIjsKKwkJZmluYWwgU3RyaW5nIHNiID0gIjI3ZTE1YjcyIjsKKwkJZmluYWwgQWJicmV2aWF0ZWRMb25nT2JqZWN0SWQgYSA9IEFiYnJldmlhdGVkTG9uZ09iamVjdElkCisJCQkJLmZyb21TdHJpbmcoc2EpOworCQlmaW5hbCBBYmJyZXZpYXRlZExvbmdPYmplY3RJZCBiID0gQWJicmV2aWF0ZWRMb25nT2JqZWN0SWQKKwkJCQkuZnJvbVN0cmluZyhzYik7CisJCWFzc2VydEZhbHNlKGEuZXF1YWxzKGIpKTsKKwkJYXNzZXJ0RmFsc2UoYi5lcXVhbHMoYSkpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdFByZWZpeENvbXBhcmVfRnVsbCgpIHsKKwkJZmluYWwgU3RyaW5nIHMxID0gIjI3ZTE1YjcyOTM3ZmM4ZjU1OGRhMjRhYzNkNTBlYzIwMzAyYTRjZjIxZTMzYjg3YWU4ZTRjZTkwZTg5YzRiMTAiOworCQlmaW5hbCBBYmJyZXZpYXRlZExvbmdPYmplY3RJZCBhID0gQWJicmV2aWF0ZWRMb25nT2JqZWN0SWQKKwkJCQkuZnJvbVN0cmluZyhzMSk7CisJCWZpbmFsIExvbmdPYmplY3RJZCBpMSA9IExvbmdPYmplY3RJZC5mcm9tU3RyaW5nKHMxKTsKKwkJYXNzZXJ0RXF1YWxzKDAsIGEucHJlZml4Q29tcGFyZShpMSkpOworCQlhc3NlcnRUcnVlKGkxLnN0YXJ0c1dpdGgoYSkpOworCisJCWZpbmFsIFN0cmluZyBzMiA9ICIyN2UxNWI3MjkzN2ZjOGY1NThkYTI0YWMzZDUwZWMyMDMwMmE0Y2YyMWUzM2I4N2FlOGU0Y2U5MGU4OWM0YjExIjsKKwkJZmluYWwgTG9uZ09iamVjdElkIGkyID0gTG9uZ09iamVjdElkLmZyb21TdHJpbmcoczIpOworCQlhc3NlcnRUcnVlKGEucHJlZml4Q29tcGFyZShpMikgPCAwKTsKKwkJYXNzZXJ0RmFsc2UoaTIuc3RhcnRzV2l0aChhKSk7CisKKwkJZmluYWwgU3RyaW5nIHMzID0gIjI3ZTE1YjcyOTM3ZmM4ZjU1OGRhMjRhYzNkNTBlYzIwMzAyYTRjZjIxZTMzYjg3YWU4ZTRjZTkwZTg5YzRiMGYiOworCQlmaW5hbCBMb25nT2JqZWN0SWQgaTMgPSBMb25nT2JqZWN0SWQuZnJvbVN0cmluZyhzMyk7CisJCWFzc2VydFRydWUoYS5wcmVmaXhDb21wYXJlKGkzKSA+IDApOworCQlhc3NlcnRGYWxzZShpMy5zdGFydHNXaXRoKGEpKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RQcmVmaXhDb21wYXJlXzEoKSB7CisJCWZpbmFsIFN0cmluZyBzYSA9ICIyIjsKKwkJZmluYWwgQWJicmV2aWF0ZWRMb25nT2JqZWN0SWQgYSA9IEFiYnJldmlhdGVkTG9uZ09iamVjdElkCisJCQkJLmZyb21TdHJpbmcoc2EpOworCisJCWZpbmFsIFN0cmluZyBzMSA9ICIyN2UxNWI3MjkzN2ZjOGY1NThkYTI0YWMzZDUwZWMyMDMwMmE0Y2YyMWUzM2I4N2FlOGU0Y2U5MGU4OWM0YjEwIjsKKwkJZmluYWwgTG9uZ09iamVjdElkIGkxID0gTG9uZ09iamVjdElkLmZyb21TdHJpbmcoczEpOworCQlhc3NlcnRFcXVhbHMoMCwgYS5wcmVmaXhDb21wYXJlKGkxKSk7CisJCWFzc2VydFRydWUoaTEuc3RhcnRzV2l0aChhKSk7CisKKwkJZmluYWwgU3RyaW5nIHMyID0gIjM3ZTE1YjcyOTM3ZmM4ZjU1OGRhMjRhYzNkNTBlYzIwMzAyYTRjZjIxZTMzYjg3YWU4ZTRjZTkwZTg5YzRiMTAiOworCQlmaW5hbCBMb25nT2JqZWN0SWQgaTIgPSBMb25nT2JqZWN0SWQuZnJvbVN0cmluZyhzMik7CisJCWFzc2VydFRydWUoYS5wcmVmaXhDb21wYXJlKGkyKSA8IDApOworCQlhc3NlcnRGYWxzZShpMi5zdGFydHNXaXRoKGEpKTsKKworCQlmaW5hbCBTdHJpbmcgczMgPSAiMTdlMTViNzI5MzdmYzhmNTU4ZGEyNGFjM2Q1MGVjMjAzMDJhNGNmMjFlMzNiODdhZThlNGNlOTBlODljNGIxMCI7CisJCWZpbmFsIExvbmdPYmplY3RJZCBpMyA9IExvbmdPYmplY3RJZC5mcm9tU3RyaW5nKHMzKTsKKwkJYXNzZXJ0VHJ1ZShhLnByZWZpeENvbXBhcmUoaTMpID4gMCk7CisJCWFzc2VydEZhbHNlKGkzLnN0YXJ0c1dpdGgoYSkpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdFByZWZpeENvbXBhcmVfMTUoKSB7CisJCWZpbmFsIFN0cmluZyBzYSA9ICIyN2UxNWI3MjkzN2ZjOGYiOworCQlmaW5hbCBBYmJyZXZpYXRlZExvbmdPYmplY3RJZCBhID0gQWJicmV2aWF0ZWRMb25nT2JqZWN0SWQKKwkJCQkuZnJvbVN0cmluZyhzYSk7CisKKwkJZmluYWwgU3RyaW5nIHMxID0gIjI3ZTE1YjcyOTM3ZmM4ZjU1OGRhMjRhYzNkNTBlYzIwMzAyYTRjZjIxZTMzYjg3YWU4ZTRjZTkwZTg5YzRiMTAiOworCQlmaW5hbCBMb25nT2JqZWN0SWQgaTEgPSBMb25nT2JqZWN0SWQuZnJvbVN0cmluZyhzMSk7CisJCWFzc2VydEVxdWFscygwLCBhLnByZWZpeENvbXBhcmUoaTEpKTsKKwkJYXNzZXJ0VHJ1ZShpMS5zdGFydHNXaXRoKGEpKTsKKworCQlmaW5hbCBTdHJpbmcgczIgPSAiMjdlMTViNzI5MzdmYzkwNTU4ZGEyNGFjM2Q1MGVjMjAzMDJhNGNmMjFlMzNiODdhZThlNGNlOTBlODljNGIxMCI7CisJCWZpbmFsIExvbmdPYmplY3RJZCBpMiA9IExvbmdPYmplY3RJZC5mcm9tU3RyaW5nKHMyKTsKKwkJYXNzZXJ0VHJ1ZShhLnByZWZpeENvbXBhcmUoaTIpIDwgMCk7CisJCWFzc2VydEZhbHNlKGkyLnN0YXJ0c1dpdGgoYSkpOworCisJCWZpbmFsIFN0cmluZyBzMyA9ICIyN2UxNWI3MjkzN2ZjOGU1NThkYTI0YWMzZDUwZWMyMDMwMmE0Y2YyMWUzM2I4N2FlOGU0Y2U5MGU4OWM0YjEwIjsKKwkJZmluYWwgTG9uZ09iamVjdElkIGkzID0gTG9uZ09iamVjdElkLmZyb21TdHJpbmcoczMpOworCQlhc3NlcnRUcnVlKGEucHJlZml4Q29tcGFyZShpMykgPiAwKTsKKwkJYXNzZXJ0RmFsc2UoaTMuc3RhcnRzV2l0aChhKSk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0UHJlZml4Q29tcGFyZV8xNigpIHsKKwkJZmluYWwgU3RyaW5nIHNhID0gIjI3ZTE1YjcyOTM3ZmM4ZjUiOworCQlmaW5hbCBBYmJyZXZpYXRlZExvbmdPYmplY3RJZCBhID0gQWJicmV2aWF0ZWRMb25nT2JqZWN0SWQKKwkJCQkuZnJvbVN0cmluZyhzYSk7CisKKwkJZmluYWwgU3RyaW5nIHMxID0gIjI3ZTE1YjcyOTM3ZmM4ZjU1OGRhMjRhYzNkNTBlYzIwMzAyYTRjZjIxZTMzYjg3YWU4ZTRjZTkwZTg5YzRiMTAiOworCQlmaW5hbCBMb25nT2JqZWN0SWQgaTEgPSBMb25nT2JqZWN0SWQuZnJvbVN0cmluZyhzMSk7CisJCWFzc2VydEVxdWFscygwLCBhLnByZWZpeENvbXBhcmUoaTEpKTsKKwkJYXNzZXJ0VHJ1ZShpMS5zdGFydHNXaXRoKGEpKTsKKworCQlmaW5hbCBTdHJpbmcgczIgPSAiMjdlMTViNzI5MzdmYzhmNjU4ZGEyNGFjM2Q1MGVjMjAzMDJhNGNmMjFlMzNiODdhZThlNGNlOTBlODljNGIxMCI7CisJCWZpbmFsIExvbmdPYmplY3RJZCBpMiA9IExvbmdPYmplY3RJZC5mcm9tU3RyaW5nKHMyKTsKKwkJYXNzZXJ0VHJ1ZShhLnByZWZpeENvbXBhcmUoaTIpIDwgMCk7CisJCWFzc2VydEZhbHNlKGkyLnN0YXJ0c1dpdGgoYSkpOworCisJCWZpbmFsIFN0cmluZyBzMyA9ICIyN2UxNWI3MjkzN2ZjOGY0NThkYTI0YWMzZDUwZWMyMDMwMmE0Y2YyMWUzM2I4N2FlOGU0Y2U5MGU4OWM0YjEwIjsKKwkJZmluYWwgTG9uZ09iamVjdElkIGkzID0gTG9uZ09iamVjdElkLmZyb21TdHJpbmcoczMpOworCQlhc3NlcnRUcnVlKGEucHJlZml4Q29tcGFyZShpMykgPiAwKTsKKwkJYXNzZXJ0RmFsc2UoaTMuc3RhcnRzV2l0aChhKSk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0UHJlZml4Q29tcGFyZV8xNygpIHsKKwkJZmluYWwgU3RyaW5nIHNhID0gIjI3ZTE1YjcyOTM3ZmM4ZjU1IjsKKwkJZmluYWwgQWJicmV2aWF0ZWRMb25nT2JqZWN0SWQgYSA9IEFiYnJldmlhdGVkTG9uZ09iamVjdElkCisJCQkJLmZyb21TdHJpbmcoc2EpOworCisJCWZpbmFsIFN0cmluZyBzMSA9ICIyN2UxNWI3MjkzN2ZjOGY1NThkYTI0YWMzZDUwZWMyMDMwMmE0Y2YyMWUzM2I4N2FlOGU0Y2U5MGU4OWM0YjEwIjsKKwkJZmluYWwgTG9uZ09iamVjdElkIGkxID0gTG9uZ09iamVjdElkLmZyb21TdHJpbmcoczEpOworCQlhc3NlcnRFcXVhbHMoMCwgYS5wcmVmaXhDb21wYXJlKGkxKSk7CisJCWFzc2VydFRydWUoaTEuc3RhcnRzV2l0aChhKSk7CisKKwkJZmluYWwgU3RyaW5nIHMyID0gIjI3ZTE1YjcyOTM3ZmM4ZjU2OGRhMjRhYzNkNTBlYzIwMzAyYTRjZjIxZTMzYjg3YWU4ZTRjZTkwZTg5YzRiMTAiOworCQlmaW5hbCBMb25nT2JqZWN0SWQgaTIgPSBMb25nT2JqZWN0SWQuZnJvbVN0cmluZyhzMik7CisJCWFzc2VydFRydWUoYS5wcmVmaXhDb21wYXJlKGkyKSA8IDApOworCQlhc3NlcnRGYWxzZShpMi5zdGFydHNXaXRoKGEpKTsKKworCQlmaW5hbCBTdHJpbmcgczMgPSAiMjdlMTViNzI5MzdmYzhmNTQ4ZGEyNGFjM2Q1MGVjMjAzMDJhNGNmMjFlMzNiODdhZThlNGNlOTBlODljNGIxMCI7CisJCWZpbmFsIExvbmdPYmplY3RJZCBpMyA9IExvbmdPYmplY3RJZC5mcm9tU3RyaW5nKHMzKTsKKwkJYXNzZXJ0VHJ1ZShhLnByZWZpeENvbXBhcmUoaTMpID4gMCk7CisJCWFzc2VydEZhbHNlKGkzLnN0YXJ0c1dpdGgoYSkpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdFByZWZpeENvbXBhcmVfMzMoKSB7CisJCWZpbmFsIFN0cmluZyBzYSA9ICIyN2UxNWI3MjkzN2ZjOGY1NThkYTI0YWMzZDUwZWMyMDMiOworCQlmaW5hbCBBYmJyZXZpYXRlZExvbmdPYmplY3RJZCBhID0gQWJicmV2aWF0ZWRMb25nT2JqZWN0SWQKKwkJCQkuZnJvbVN0cmluZyhzYSk7CisKKwkJZmluYWwgU3RyaW5nIHMxID0gIjI3ZTE1YjcyOTM3ZmM4ZjU1OGRhMjRhYzNkNTBlYzIwMzAyYTRjZjIxZTMzYjg3YWU4ZTRjZTkwZTg5YzRiMTAiOworCQlmaW5hbCBMb25nT2JqZWN0SWQgaTEgPSBMb25nT2JqZWN0SWQuZnJvbVN0cmluZyhzMSk7CisJCWFzc2VydEVxdWFscygwLCBhLnByZWZpeENvbXBhcmUoaTEpKTsKKwkJYXNzZXJ0VHJ1ZShpMS5zdGFydHNXaXRoKGEpKTsKKworCQlmaW5hbCBTdHJpbmcgczIgPSAiMjdlMTViNzI5MzdmYzhmNTU4ZGEyNGFjM2Q1MGVjMjA0MDJhNGNmMjFlMzNiODdhZThlNGNlOTBlODljNGIxMCI7CisJCWZpbmFsIExvbmdPYmplY3RJZCBpMiA9IExvbmdPYmplY3RJZC5mcm9tU3RyaW5nKHMyKTsKKwkJYXNzZXJ0VHJ1ZShhLnByZWZpeENvbXBhcmUoaTIpIDwgMCk7CisJCWFzc2VydEZhbHNlKGkyLnN0YXJ0c1dpdGgoYSkpOworCisJCWZpbmFsIFN0cmluZyBzMyA9ICIyN2UxNWI3MjkzN2ZjOGY1NThkYTI0YWMzZDUwZWMyMDIwMmE0Y2YyMWUzM2I4N2FlOGU0Y2U5MGU4OWM0YjEwIjsKKwkJZmluYWwgTG9uZ09iamVjdElkIGkzID0gTG9uZ09iamVjdElkLmZyb21TdHJpbmcoczMpOworCQlhc3NlcnRUcnVlKGEucHJlZml4Q29tcGFyZShpMykgPiAwKTsKKwkJYXNzZXJ0RmFsc2UoaTMuc3RhcnRzV2l0aChhKSk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0SXNJZCgpIHsKKwkJLy8gVGhlc2UgYXJlIGFsbCB0b28gc2hvcnQuCisJCWFzc2VydEZhbHNlKEFiYnJldmlhdGVkTG9uZ09iamVjdElkLmlzSWQoIiIpKTsKKwkJYXNzZXJ0RmFsc2UoQWJicmV2aWF0ZWRMb25nT2JqZWN0SWQuaXNJZCgiYSIpKTsKKworCQkvLyBUaGVzZSBhcmUgdG9vIGxvbmcuCisJCWFzc2VydEZhbHNlKEFiYnJldmlhdGVkTG9uZ09iamVjdElkLmlzSWQoTG9uZ09iamVjdElkCisJCQkJLmZyb21TdHJpbmcoCisJCQkJCQkiMjdlMTViNzI5MzdmYzhmNTU4ZGEyNGFjM2Q1MGVjMjAzMDJhNGNmMjFlMzNiODdhZThlNGNlOTBlODljNGIxMCIpCisJCQkJLm5hbWUoKSArICIwIikpOworCQlhc3NlcnRGYWxzZShBYmJyZXZpYXRlZExvbmdPYmplY3RJZC5pc0lkKExvbmdPYmplY3RJZAorCQkJCS5mcm9tU3RyaW5nKAorCQkJCQkJIjI3ZTE1YjcyOTM3ZmM4ZjU1OGRhMjRhYzNkNTBlYzIwMzAyYTRjZjIxZTMzYjg3YWU4ZTRjZTkwZTg5YzRiMTAiKQorCQkJCS5uYW1lKCkgKyAiYzBmZmVlIikpOworCisJCS8vIFRoZXNlIGNvbnRhaW4gbm9uLWhleCBjaGFyYWN0ZXJzLgorCQlhc3NlcnRGYWxzZShBYmJyZXZpYXRlZExvbmdPYmplY3RJZC5pc0lkKCIwMW5vdGFoZXhzdHJpbmciKSk7CisKKwkJLy8gVGhlc2Ugc2hvdWxkIGFsbCB3b3JrLgorCQlhc3NlcnRUcnVlKEFiYnJldmlhdGVkTG9uZ09iamVjdElkLmlzSWQoImFiIikpOworCQlhc3NlcnRUcnVlKEFiYnJldmlhdGVkTG9uZ09iamVjdElkLmlzSWQoImFiYyIpKTsKKwkJYXNzZXJ0VHJ1ZShBYmJyZXZpYXRlZExvbmdPYmplY3RJZC5pc0lkKCJhYmNkIikpOworCQlhc3NlcnRUcnVlKEFiYnJldmlhdGVkTG9uZ09iamVjdElkLmlzSWQoImFiY2QwIikpOworCQlhc3NlcnRUcnVlKEFiYnJldmlhdGVkTG9uZ09iamVjdElkLmlzSWQoImFiY2QwOSIpKTsKKwkJYXNzZXJ0VHJ1ZShBYmJyZXZpYXRlZExvbmdPYmplY3RJZC5pc0lkKExvbmdPYmplY3RJZAorCQkJCS5mcm9tU3RyaW5nKAorCQkJCQkJIjI3ZTE1YjcyOTM3ZmM4ZjU1OGRhMjRhYzNkNTBlYzIwMzAyYTRjZjIxZTMzYjg3YWU4ZTRjZTkwZTg5YzRiMTAiKQorCQkJCS5uYW1lKCkpKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RBYmJyZXZpYXRlKCkgeworCQlBbnlMb25nT2JqZWN0SWQgaWQgPSBMb25nT2JqZWN0SWRUZXN0VXRpbHMuaGFzaCgidGVzdCIpOworCQlhc3NlcnRFcXVhbHMoCisJCQkJImFiYnJldmlhdGVkIGlkIHNob3VsZCBtYXRjaCB0aGUgaWQgaXQgd2FzIGFiYnJldmlhdGVkIGZyb20iLCAwLAorCQkJCWlkLmFiYnJldmlhdGUoMTApLnByZWZpeENvbXBhcmUoaWQpKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RGcm9tU3RyaW5nQnl0ZVdyb25nTGVuZ3RoKCkgeworCQlieXRlW10gYnVmID0gbmV3IGJ5dGVbNjVdOworCQl0cnkgeworCQkJQWJicmV2aWF0ZWRMb25nT2JqZWN0SWQuZnJvbVN0cmluZyhidWYsIDAsIDY1KTsKKwkJCWZhaWwoImV4cGVjdGVkIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBmb3IgdG9vIGxvbmcgQWJicmV2aWF0ZWRMb25nT2JqZWN0SWQiKTsKKwkJfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKKwkJCS8vIGV4cGVjdGVkCisJCX0KKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RGcm9tU3RyaW5nV3JvbmdMZW5ndGgoKSB7CisJCUFueUxvbmdPYmplY3RJZCBpZCA9IExvbmdPYmplY3RJZFRlc3RVdGlscy5oYXNoKCJ0ZXN0Iik7CisJCXRyeSB7CisJCQlBYmJyZXZpYXRlZExvbmdPYmplY3RJZC5mcm9tU3RyaW5nKGlkLm5hbWUoKSArICJjMGZmZWUiKTsKKwkJCWZhaWwoImV4cGVjdGVkIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBmb3IgdG9vIGxvbmcgQWJicmV2aWF0ZWRMb25nT2JqZWN0SWQiKTsKKwkJfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKKwkJCS8vIGV4cGVjdGVkCisJCX0KKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RGcm9tTG9uZ09iamVjdElkKCkgeworCQlBbnlMb25nT2JqZWN0SWQgaWQgPSBMb25nT2JqZWN0SWRUZXN0VXRpbHMuaGFzaCgidGVzdCIpOworCQlhc3NlcnRFcXVhbHMoMCwKKwkJCQlBYmJyZXZpYXRlZExvbmdPYmplY3RJZC5mcm9tTG9uZ09iamVjdElkKGlkKS5wcmVmaXhDb21wYXJlKGlkKSk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0UHJlZml4Q29tcGFyZUJ5dGUoKSB7CisJCUFueUxvbmdPYmplY3RJZCBpZCA9IExvbmdPYmplY3RJZC5mcm9tU3RyaW5nKAorCQkJCSIwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmIik7CisJCWJ5dGVbXSBidWYgPSBuZXcgYnl0ZVszMl07CisJCWlkLmNvcHlSYXdUbyhidWYsIDApOworCisJCUFiYnJldmlhdGVkTG9uZ09iamVjdElkIGEgPSBpZC5hYmJyZXZpYXRlKDYyKTsKKwkJYXNzZXJ0RXF1YWxzKDAsIGEucHJlZml4Q29tcGFyZShidWYsIDApKTsKKworCQlhID0gTG9uZ09iamVjdElkCisJCQkJLmZyb21TdHJpbmcoCisJCQkJCQkiMDAyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZiIpCisJCQkJLmFiYnJldmlhdGUoMTYpOworCQlhc3NlcnRFcXVhbHMoLTEsIGEucHJlZml4Q29tcGFyZShidWYsIDApKTsKKwkJYSA9IExvbmdPYmplY3RJZAorCQkJCS5mcm9tU3RyaW5nKAorCQkJCQkJIjAxMjM0NTY3ODlhYmNkZWYwMDIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYiKQorCQkJCS5hYmJyZXZpYXRlKDMyKTsKKwkJYXNzZXJ0RXF1YWxzKC0xLCBhLnByZWZpeENvbXBhcmUoYnVmLCAwKSk7CisJCWEgPSBMb25nT2JqZWN0SWQKKwkJCQkuZnJvbVN0cmluZygKKwkJCQkJCSIwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZjAwMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmIikKKwkJCQkuYWJicmV2aWF0ZSg0OCk7CisJCWFzc2VydEVxdWFscygtMSwgYS5wcmVmaXhDb21wYXJlKGJ1ZiwgMCkpOworCQlhID0gTG9uZ09iamVjdElkCisJCQkJLmZyb21TdHJpbmcoCisJCQkJCQkiMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmMDAyMzQ1Njc4OWFiY2RlZiIpCisJCQkJLmFiYnJldmlhdGUoNjQpOworCQlhc3NlcnRFcXVhbHMoLTEsIGEucHJlZml4Q29tcGFyZShidWYsIDApKTsKKworCQlhID0gTG9uZ09iamVjdElkCisJCQkJLmZyb21TdHJpbmcoCisJCQkJCQkiMTEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZiIpCisJCQkJLmFiYnJldmlhdGUoMTYpOworCQlhc3NlcnRFcXVhbHMoMSwgYS5wcmVmaXhDb21wYXJlKGJ1ZiwgMCkpOworCQlhID0gTG9uZ09iamVjdElkCisJCQkJLmZyb21TdHJpbmcoCisJCQkJCQkiMDEyMzQ1Njc4OWFiY2RlZjExMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZiIpCisJCQkJLmFiYnJldmlhdGUoMzIpOworCQlhc3NlcnRFcXVhbHMoMSwgYS5wcmVmaXhDb21wYXJlKGJ1ZiwgMCkpOworCQlhID0gTG9uZ09iamVjdElkCisJCQkJLmZyb21TdHJpbmcoCisJCQkJCQkiMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYxMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZiIpCisJCQkJLmFiYnJldmlhdGUoNDgpOworCQlhc3NlcnRFcXVhbHMoMSwgYS5wcmVmaXhDb21wYXJlKGJ1ZiwgMCkpOworCQlhID0gTG9uZ09iamVjdElkCisJCQkJLmZyb21TdHJpbmcoCisJCQkJCQkiMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmMTEyMzQ1Njc4OWFiY2RlZiIpCisJCQkJLmFiYnJldmlhdGUoNjQpOworCQlhc3NlcnRFcXVhbHMoMSwgYS5wcmVmaXhDb21wYXJlKGJ1ZiwgMCkpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdFByZWZpeENvbXBhcmVMb25nKCkgeworCQlBbnlMb25nT2JqZWN0SWQgaWQgPSBuZXcgTG9uZ09iamVjdElkKDFMLCAyTCwgM0wsIDRMKTsKKwkJbG9uZ1tdIGJ1ZiA9IG5ldyBsb25nWzRdOworCQlpZC5jb3B5UmF3VG8oYnVmLCAwKTsKKworCQlBYmJyZXZpYXRlZExvbmdPYmplY3RJZCBhID0gaWQuYWJicmV2aWF0ZSg2Mik7CisJCWFzc2VydEVxdWFscygwLCBhLnByZWZpeENvbXBhcmUoYnVmLCAwKSk7CisKKwkJYSA9IG5ldyBMb25nT2JqZWN0SWQoMEwsIDJMLCAzTCwgNEwpLmFiYnJldmlhdGUoMTYpOworCQlhc3NlcnRFcXVhbHMoLTEsIGEucHJlZml4Q29tcGFyZShidWYsIDApKTsKKwkJYSA9IG5ldyBMb25nT2JqZWN0SWQoMUwsIDFMLCAzTCwgNEwpLmFiYnJldmlhdGUoMzIpOworCQlhc3NlcnRFcXVhbHMoLTEsIGEucHJlZml4Q29tcGFyZShidWYsIDApKTsKKwkJYSA9IG5ldyBMb25nT2JqZWN0SWQoMUwsIDJMLCAyTCwgNEwpLmFiYnJldmlhdGUoNDgpOworCQlhc3NlcnRFcXVhbHMoLTEsIGEucHJlZml4Q29tcGFyZShidWYsIDApKTsKKwkJYSA9IG5ldyBMb25nT2JqZWN0SWQoMUwsIDJMLCAzTCwgM0wpLmFiYnJldmlhdGUoNjQpOworCQlhc3NlcnRFcXVhbHMoLTEsIGEucHJlZml4Q29tcGFyZShidWYsIDApKTsKKworCQlhID0gbmV3IExvbmdPYmplY3RJZCgyTCwgMkwsIDNMLCA0TCkuYWJicmV2aWF0ZSgxNik7CisJCWFzc2VydEVxdWFscygxLCBhLnByZWZpeENvbXBhcmUoYnVmLCAwKSk7CisJCWEgPSBuZXcgTG9uZ09iamVjdElkKDFMLCAzTCwgM0wsIDRMKS5hYmJyZXZpYXRlKDMyKTsKKwkJYXNzZXJ0RXF1YWxzKDEsIGEucHJlZml4Q29tcGFyZShidWYsIDApKTsKKwkJYSA9IG5ldyBMb25nT2JqZWN0SWQoMUwsIDJMLCA0TCwgNEwpLmFiYnJldmlhdGUoNDgpOworCQlhc3NlcnRFcXVhbHMoMSwgYS5wcmVmaXhDb21wYXJlKGJ1ZiwgMCkpOworCQlhID0gbmV3IExvbmdPYmplY3RJZCgxTCwgMkwsIDNMLCA1TCkuYWJicmV2aWF0ZSg2NCk7CisJCWFzc2VydEVxdWFscygxLCBhLnByZWZpeENvbXBhcmUoYnVmLCAwKSk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0R2V0Rmlyc3RCeXRlKCkgeworCQlBbnlMb25nT2JqZWN0SWQgaWQgPSBMb25nT2JqZWN0SWQuZnJvbVN0cmluZygKKwkJCQkiZjQyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmMTEyMzQ1Njc4OWFiY2RlZiIpOworCQlBYmJyZXZpYXRlZExvbmdPYmplY3RJZCBhID0gaWQuYWJicmV2aWF0ZSgxMCk7CisJCWFzc2VydEVxdWFscygweGY0LCBhLmdldEZpcnN0Qnl0ZSgpKTsKKwkJYXNzZXJ0RXF1YWxzKGlkLmdldEZpcnN0Qnl0ZSgpLCBhLmdldEZpcnN0Qnl0ZSgpKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3ROb3RFcXVhbHMoKSB7CisJCUFiYnJldmlhdGVkTG9uZ09iamVjdElkIGEgPSBuZXcgTG9uZ09iamVjdElkKDFMLCAyTCwgM0wsIDRMKQorCQkJCS5hYmJyZXZpYXRlKDEwKTsKKwkJYXNzZXJ0RmFsc2UoYS5lcXVhbHMoImRpZmZlcmVudCIpKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2xmcy9saWIvTG9uZ09iamVjdElkVGVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9sZnMvbGliL0xvbmdPYmplY3RJZFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzVhMmEzCi0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9sZnMvbGliL0xvbmdPYmplY3RJZFRlc3QuamF2YQpAQCAtMCwwICsxLDQyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSwgTWF0dGhpYXMgU29obiA8bWF0dGhpYXMuc29obkBzYXAuY29tPgorICogYW5kIG90aGVyIGNvcHlyaWdodCBvd25lcnMgYXMgZG9jdW1lbnRlZCBpbiB0aGUgcHJvamVjdCdzIElQIGxvZy4KKyAqCisgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZQorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYxLjAgd2hpY2gKKyAqIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBpcyByZXByb2R1Y2VkIGJlbG93LCBhbmQgaXMKKyAqIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZWRsLXYxMC5waHAKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAqICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCBJbmMuIG5vciB0aGUKKyAqICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKKyAqICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgorICogICB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5ECisgKiBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAorICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYKKyAqIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK3BhY2thZ2Ugb3JnLmVjbGlwc2UuamdpdC5sZnMubGliOworCitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEZhbHNlOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydE5vdEVxdWFsczsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUcnVlOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmZhaWw7CisKK2ltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtV3JpdGVyOworaW1wb3J0IGphdmEubmlvLkJ5dGVCdWZmZXI7CitpbXBvcnQgamF2YS5uaW8uY2hhcnNldC5DaGFyc2V0OworaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuU3RhbmRhcmRDaGFyc2V0czsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVzOworaW1wb3J0IGphdmEubmlvLmZpbGUuUGF0aDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuanVuaXQuSkdpdFRlc3RVdGlsOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGZzLmVycm9ycy5JbnZhbGlkTG9uZ09iamVjdElkRXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGZzLnRlc3QuTG9uZ09iamVjdElkVGVzdFV0aWxzOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLkNvbnN0YW50czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuRmlsZVV0aWxzOworaW1wb3J0IG9yZy5qdW5pdC5BZnRlckNsYXNzOworaW1wb3J0IG9yZy5qdW5pdC5CZWZvcmVDbGFzczsKK2ltcG9ydCBvcmcuanVuaXQuVGVzdDsKKworLyoKKyAqIFBvcnRlZCB0byBTSEEtMjU2IGZyb20gb3JnLmVjbGlwc2UuamdpdC5saWIuT2JqZWN0SWRUZXN0CisgKi8KK3B1YmxpYyBjbGFzcyBMb25nT2JqZWN0SWRUZXN0IHsKKwlwcml2YXRlIHN0YXRpYyBQYXRoIHRtcDsKKworCUBCZWZvcmVDbGFzcworCXB1YmxpYyBzdGF0aWMgdm9pZCBzZXR1cCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCXRtcCA9IEZpbGVzLmNyZWF0ZVRlbXBEaXJlY3RvcnkoImpnaXRfdGVzdF8iKTsKKwl9CisKKwlAQWZ0ZXJDbGFzcworCXB1YmxpYyBzdGF0aWMgdm9pZCB0ZWFyRG93bigpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCUZpbGVVdGlscy5kZWxldGUodG1wLnRvRmlsZSgpLCBGaWxlVXRpbHMuUkVDVVJTSVZFIHwgRmlsZVV0aWxzLlJFVFJZKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3QwMDFfdG9TdHJpbmcoKSB7CisJCWZpbmFsIFN0cmluZyB4ID0gIjgzNjdiMGVkYzgxZGY4MGU2YjQyZWIxYjcxZjc4MzExMTIyNGUwNThjYjNkYTM3ODk0ZDA2NWQyZGViN2FiMGEiOworCQlmaW5hbCBMb25nT2JqZWN0SWQgb2lkID0gTG9uZ09iamVjdElkLmZyb21TdHJpbmcoeCk7CisJCWFzc2VydEVxdWFscyh4LCBvaWQubmFtZSgpKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3QwMDJfdG9TdHJpbmcoKSB7CisJCWZpbmFsIFN0cmluZyB4ID0gIjE0MGNlNzFkNjI4Y2NlYjc4ZTM3MDk5NDBiYTUyYTY1MWEwYzRhOWMxNDAwZjJlMTVlOTk4YTFhNDM4ODdlZGYiOworCQlmaW5hbCBMb25nT2JqZWN0SWQgb2lkID0gTG9uZ09iamVjdElkLmZyb21TdHJpbmcoeCk7CisJCWFzc2VydEVxdWFscyh4LCBvaWQubmFtZSgpKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3QwMDNfZXF1YWxzKCkgeworCQlmaW5hbCBTdHJpbmcgeCA9ICI4MzY3YjBlZGM4MWRmODBlNmI0MmViMWI3MWY3ODMxMTEyMjRlMDU4Y2IzZGEzNzg5NGQwNjVkMmRlYjdhYjBhIjsKKwkJZmluYWwgTG9uZ09iamVjdElkIGEgPSBMb25nT2JqZWN0SWQuZnJvbVN0cmluZyh4KTsKKwkJZmluYWwgTG9uZ09iamVjdElkIGIgPSBMb25nT2JqZWN0SWQuZnJvbVN0cmluZyh4KTsKKwkJYXNzZXJ0RXF1YWxzKGEuaGFzaENvZGUoKSwgYi5oYXNoQ29kZSgpKTsKKwkJYXNzZXJ0RXF1YWxzKCJhIGFuZCBiIHNob3VsZCBiZSBlcXVhbCIsIGIsIGEpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdDAwNF9pc0lkKCkgeworCQlhc3NlcnRUcnVlKCJ2YWxpZCBpZCIsIExvbmdPYmplY3RJZC5pc0lkKAorCQkJCSI4MzY3YjBlZGM4MWRmODBlNmI0MmViMWI3MWY3ODMxMTEyMjRlMDU4Y2IzZGEzNzg5NGQwNjVkMmRlYjdhYjBhIikpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdDAwNV9ub3RJc0lkKCkgeworCQlhc3NlcnRGYWxzZSgiYm9iIGlzIG5vdCBhbiBpZCIsIExvbmdPYmplY3RJZC5pc0lkKCJib2IiKSk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0MDA2X25vdElzSWQoKSB7CisJCWFzc2VydEZhbHNlKCI2MyBkaWdpdHMgaXMgbm90IGFuIGlkIiwgTG9uZ09iamVjdElkLmlzSWQoCisJCQkJIjgzNjdiMGVkYzgxZGY4MGU2YjQyZWIxYjcxZjc4MzExMTIyNGUwNThjYjNkYTM3ODk0ZDA2NWQyZGViN2FiMCIpKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3QwMDdfaXNJZCgpIHsKKwkJYXNzZXJ0VHJ1ZSgidXBwZXJjYXNlIGlzIGFjY2VwdGVkIiwgTG9uZ09iamVjdElkLmlzSWQoCisJCQkJIjgzNjdiMGVkYzgxZGY4MGU2YjQyZWIxYjcxZjc4MzExMTIyNGUwNThjYjNkYTM3ODk0ZDA2NWQyZEViN2FiMEEiKSk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0MDA4X25vdElzSWQoKSB7CisJCWFzc2VydEZhbHNlKCJnIGlzIG5vdCBhIHZhbGlkIGhleCBkaWdpdCIsIExvbmdPYmplY3RJZC5pc0lkKAorCQkJCSJnMzY3YjBlZGM4MWRmODBlNmI0MmViMWI3MWY3ODMxMTEyMjRlMDU4Y2IzZGEzNzg5NGQwNjVkMmRlYjdhYjBhIikpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdDAwOV90b1N0cmluZygpIHsKKwkJZmluYWwgU3RyaW5nIHggPSAiMTQwY2U3MWQ2MjhjY2ViNzhlMzcwOTk0MGJhNTJhNjUxYTBjNGE5YzE0MDBmMmUxNWU5OThhMWE0Mzg4N2VkZiI7CisJCWZpbmFsIExvbmdPYmplY3RJZCBvaWQgPSBMb25nT2JqZWN0SWQuZnJvbVN0cmluZyh4KTsKKwkJYXNzZXJ0RXF1YWxzKHgsIExvbmdPYmplY3RJZC50b1N0cmluZyhvaWQpKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3QwMTBfdG9TdHJpbmcoKSB7CisJCWZpbmFsIFN0cmluZyB4ID0gIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiOworCQlhc3NlcnRFcXVhbHMoeCwgTG9uZ09iamVjdElkLnRvU3RyaW5nKG51bGwpKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3QwMTFfdG9TdHJpbmcoKSB7CisJCWZpbmFsIFN0cmluZyB4ID0gIjAxMjM0NTY3ODlBQkNERUZhYmNkZWYwMTIzNDU2Nzg5MDEyMzQ1Njc4OUFCQ0RFRmFiY2RlZjAxMjM0NTY3ODkiOworCQlmaW5hbCBMb25nT2JqZWN0SWQgb2lkID0gTG9uZ09iamVjdElkLmZyb21TdHJpbmcoeCk7CisJCWFzc2VydEVxdWFscyh4LnRvTG93ZXJDYXNlKCksIG9pZC5uYW1lKCkpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdEdldEJ5dGUoKSB7CisJCWJ5dGVbXSByYXcgPSBuZXcgYnl0ZVszMl07CisJCWZvciAoaW50IGkgPSAwOyBpIDwgMzI7IGkrKykKKwkJCXJhd1tpXSA9IChieXRlKSAoMHhhMCArIGkpOworCQlMb25nT2JqZWN0SWQgaWQgPSBMb25nT2JqZWN0SWQuZnJvbVJhdyhyYXcpOworCisJCWFzc2VydEVxdWFscyhyYXdbMF0gJiAweGZmLCBpZC5nZXRGaXJzdEJ5dGUoKSk7CisJCWFzc2VydEVxdWFscyhyYXdbMF0gJiAweGZmLCBpZC5nZXRCeXRlKDApKTsKKwkJYXNzZXJ0RXF1YWxzKHJhd1sxXSAmIDB4ZmYsIGlkLmdldEJ5dGUoMSkpOworCQlhc3NlcnRFcXVhbHMocmF3WzFdICYgMHhmZiwgaWQuZ2V0U2Vjb25kQnl0ZSgpKTsKKworCQlmb3IgKGludCBpID0gMjsgaSA8IDMyOyBpKyspIHsKKwkJCWFzc2VydEVxdWFscygiaW5kZXggIiArIGksIHJhd1tpXSAmIDB4ZmYsIGlkLmdldEJ5dGUoaSkpOworCQl9CisJCXRyeSB7CisJCQlpZC5nZXRCeXRlKDMyKTsKKwkJCWZhaWwoIkxvbmdPYmplY3RJZCBoYXMgMzIgYnl0ZSBvbmx5Iik7CisJCX0gY2F0Y2ggKEFycmF5SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBlKSB7CisJCQkvLyBleHBlY3RlZAorCQl9CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0U2V0Qnl0ZSgpIHsKKwkJYnl0ZVtdIGV4cCA9IG5ldyBieXRlWzMyXTsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCAzMjsgaSsrKSB7CisJCQlleHBbaV0gPSAoYnl0ZSkgKDB4YTAgKyBpKTsKKwkJfQorCisJCU11dGFibGVMb25nT2JqZWN0SWQgaWQgPSBuZXcgTXV0YWJsZUxvbmdPYmplY3RJZCgpOworCQlpZC5mcm9tUmF3KGV4cCk7CisJCWFzc2VydEVxdWFscyhMb25nT2JqZWN0SWQuZnJvbVJhdyhleHApLm5hbWUoKSwgaWQubmFtZSgpKTsKKworCQlpZC5zZXRCeXRlKDAsIDB4MTApOworCQlhc3NlcnRFcXVhbHMoMHgxMCwgaWQuZ2V0Qnl0ZSgwKSk7CisJCWV4cFswXSA9IDB4MTA7CisJCWFzc2VydEVxdWFscyhMb25nT2JqZWN0SWQuZnJvbVJhdyhleHApLm5hbWUoKSwgaWQubmFtZSgpKTsKKworCQlmb3IgKGludCBwID0gMTsgcCA8IDMyOyBwKyspIHsKKwkJCWlkLnNldEJ5dGUocCwgMHgxMCArIHApOworCQkJYXNzZXJ0RXF1YWxzKDB4MTAgKyBwLCBpZC5nZXRCeXRlKHApKTsKKwkJCWV4cFtwXSA9IChieXRlKSAoMHgxMCArIHApOworCQkJYXNzZXJ0RXF1YWxzKExvbmdPYmplY3RJZC5mcm9tUmF3KGV4cCkubmFtZSgpLCBpZC5uYW1lKCkpOworCQl9CisKKwkJZm9yIChpbnQgcCA9IDA7IHAgPCAzMjsgcCsrKSB7CisJCQlpZC5zZXRCeXRlKHAsIDB4ODAgKyBwKTsKKwkJCWFzc2VydEVxdWFscygweDgwICsgcCwgaWQuZ2V0Qnl0ZShwKSk7CisJCQlleHBbcF0gPSAoYnl0ZSkgKDB4ODAgKyBwKTsKKwkJCWFzc2VydEVxdWFscyhMb25nT2JqZWN0SWQuZnJvbVJhdyhleHApLm5hbWUoKSwgaWQubmFtZSgpKTsKKwkJfQorCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdFplcm9JZCgpIHsKKwkJQW55TG9uZ09iamVjdElkIHplcm8gPSBuZXcgTG9uZ09iamVjdElkKDBMLCAwTCwgMEwsIDBMKTsKKwkJYXNzZXJ0RXF1YWxzKHplcm8sIExvbmdPYmplY3RJZC56ZXJvSWQoKSk7CisJCWFzc2VydEVxdWFscygKKwkJCQkiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsCisJCQkJTG9uZ09iamVjdElkLnplcm9JZCgpLm5hbWUoKSk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0RXF1YWxzKCkgeworCQlBbnlMb25nT2JqZWN0SWQgaWQxID0gTG9uZ09iamVjdElkVGVzdFV0aWxzLmhhc2goInRlc3QiKTsKKwkJYXNzZXJ0VHJ1ZSgiaWQgc2hvdWxkIGVxdWFsIGl0c2VsZiIsIGlkMS5lcXVhbHMoaWQxKSk7CisJCUFueUxvbmdPYmplY3RJZCBpZDIgPSBuZXcgTG9uZ09iamVjdElkKGlkMSk7CisJCWFzc2VydEVxdWFscygib2JqZWN0cyBzaG91bGQgYmUgZXF1YWxzIiwgaWQxLCBpZDIpOworCisJCWlkMiA9IExvbmdPYmplY3RJZFRlc3RVdGlscy5oYXNoKCJvdGhlciIpOworCQlhc3NlcnROb3RFcXVhbHMoIm9iamVjdHMgc2hvdWxkIGJlIG5vdCBlcXVhbCIsIGlkMSwgaWQyKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RDb3B5UmF3Qnl0ZXMoKSB7CisJCUFueUxvbmdPYmplY3RJZCBpZDEgPSBMb25nT2JqZWN0SWRUZXN0VXRpbHMuaGFzaCgidGVzdCIpOworCQlBbnlMb25nT2JqZWN0SWQgaWQyID0gbmV3IExvbmdPYmplY3RJZChpZDEpOworCisJCWJ5dGVbXSBidWYgPSBuZXcgYnl0ZVs2NF07CisJCWlkMS5jb3B5UmF3VG8oYnVmLCAwKTsKKwkJaWQyLmNvcHlSYXdUbyhidWYsIDMyKTsKKwkJYXNzZXJ0VHJ1ZSgib2JqZWN0cyBzaG91bGQgYmUgZXF1YWxzIiwKKwkJCQlMb25nT2JqZWN0SWQuZXF1YWxzKGJ1ZiwgMCwgYnVmLCAzMikpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdENvcHlSYXdMb25ncygpIHsKKwkJbG9uZ1tdIGEgPSBuZXcgbG9uZ1s0XTsKKwkJYVswXSA9IDFMOworCQlhWzFdID0gMkw7CisJCWFbMl0gPSAzTDsKKwkJYVszXSA9IDRMOworCQlBbnlMb25nT2JqZWN0SWQgaWQxID0gbmV3IExvbmdPYmplY3RJZChhWzBdLCBhWzFdLCBhWzJdLCBhWzNdKTsKKwkJQW55TG9uZ09iamVjdElkIGlkMiA9IExvbmdPYmplY3RJZC5mcm9tUmF3KGEpOworCQlhc3NlcnRFcXVhbHMoIm9iamVjdHMgc2hvdWxkIGJlIGVxdWFscyIsIGlkMSwgaWQyKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RDb3B5RnJvbVN0cmluZ0ludmFsaWQoKSB7CisJCUFueUxvbmdPYmplY3RJZCBpZDEgPSBMb25nT2JqZWN0SWRUZXN0VXRpbHMuaGFzaCgidGVzdCIpOworCQl0cnkgeworCQkJTG9uZ09iamVjdElkLmZyb21TdHJpbmcoaWQxLm5hbWUoKSArICIwMTIzNCIpOworCQkJZmFpbCgiZXhwZWN0ZWQgSW52YWxpZExvbmdPYmplY3RJZEV4Y2VwdGlvbiIpOworCQl9IGNhdGNoIChJbnZhbGlkTG9uZ09iamVjdElkRXhjZXB0aW9uIGUpIHsKKwkJCWFzc2VydEVxdWFscygiSW52YWxpZCBpZDogIiArIGlkMS5uYW1lKCkgKyAiMDEyMzQiLAorCQkJCQllLmdldE1lc3NhZ2UoKSk7CisJCX0KKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RDb3B5RnJvbVN0cmluZ0J5dGUoKSB7CisJCUFueUxvbmdPYmplY3RJZCBpZDEgPSBMb25nT2JqZWN0SWRUZXN0VXRpbHMuaGFzaCgidGVzdCIpOworCQlieXRlW10gYnVmID0gbmV3IGJ5dGVbNjRdOworCQlDaGFyc2V0IGNzID0gU3RhbmRhcmRDaGFyc2V0cy5VU19BU0NJSTsKKwkJY3MuZW5jb2RlKGlkMS5uYW1lKCkpLmdldChidWYpOworCQlBbnlMb25nT2JqZWN0SWQgaWQyID0gTG9uZ09iamVjdElkLmZyb21TdHJpbmcoYnVmLCAwKTsKKwkJYXNzZXJ0RXF1YWxzKCJvYmplY3RzIHNob3VsZCBiZSBlcXVhbHMiLCBpZDEsIGlkMik7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0SGFzaEZpbGUoKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQlBbnlMb25nT2JqZWN0SWQgaWQxID0gTG9uZ09iamVjdElkVGVzdFV0aWxzLmhhc2goInRlc3QiKTsKKwkJUGF0aCBmID0gdG1wLnJlc29sdmUoInRlc3QiKTsKKwkJSkdpdFRlc3RVdGlsLndyaXRlKGYudG9GaWxlKCksICJ0ZXN0Iik7CisJCUFueUxvbmdPYmplY3RJZCBpZDIgPSBMb25nT2JqZWN0SWRUZXN0VXRpbHMuaGFzaChmKTsKKwkJYXNzZXJ0RXF1YWxzKCJvYmplY3RzIHNob3VsZCBiZSBlcXVhbHMiLCBpZDEsIGlkMik7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0Q29tcGFyZVRvKCkgeworCQlBbnlMb25nT2JqZWN0SWQgaWQxID0gTG9uZ09iamVjdElkLmZyb21TdHJpbmcoCisJCQkJIjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYiKTsKKwkJYXNzZXJ0RXF1YWxzKDAsIGlkMS5jb21wYXJlVG8oTG9uZ09iamVjdElkLmZyb21TdHJpbmcoCisJCQkJIjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYiKSkpOworCQlhc3NlcnRFcXVhbHMoMCwgaWQxLmNvbXBhcmVUbyhpZDEpKTsKKworCQlhc3NlcnRFcXVhbHMoLTEsIGlkMS5jb21wYXJlVG8oTG9uZ09iamVjdElkLmZyb21TdHJpbmcoCisJCQkJIjExMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYiKSkpOworCQlhc3NlcnRFcXVhbHMoLTEsIGlkMS5jb21wYXJlVG8oTG9uZ09iamVjdElkLmZyb21TdHJpbmcoCisJCQkJIjAxMjM0NTY3ODlhYmNkZWYxMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYiKSkpOworCQlhc3NlcnRFcXVhbHMoLTEsIGlkMS5jb21wYXJlVG8oTG9uZ09iamVjdElkLmZyb21TdHJpbmcoCisJCQkJIjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmMTEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYiKSkpOworCQlhc3NlcnRFcXVhbHMoLTEsIGlkMS5jb21wYXJlVG8oTG9uZ09iamVjdElkLmZyb21TdHJpbmcoCisJCQkJIjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZjExMjM0NTY3ODlhYmNkZWYiKSkpOworCisJCWFzc2VydEVxdWFscygxLCBpZDEuY29tcGFyZVRvKExvbmdPYmplY3RJZC5mcm9tU3RyaW5nKAorCQkJCSIwMDIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmIikpKTsKKwkJYXNzZXJ0RXF1YWxzKDEsIGlkMS5jb21wYXJlVG8oTG9uZ09iamVjdElkLmZyb21TdHJpbmcoCisJCQkJIjAxMjM0NTY3ODlhYmNkZWYwMDIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYiKSkpOworCQlhc3NlcnRFcXVhbHMoMSwgaWQxLmNvbXBhcmVUbyhMb25nT2JqZWN0SWQuZnJvbVN0cmluZygKKwkJCQkiMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYwMDIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZiIpKSk7CisJCWFzc2VydEVxdWFscygxLCBpZDEuY29tcGFyZVRvKExvbmdPYmplY3RJZC5mcm9tU3RyaW5nKAorCQkJCSIwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYwMDIzNDU2Nzg5YWJjZGVmIikpKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RDb21wYXJlVG9CeXRlKCkgeworCQlBbnlMb25nT2JqZWN0SWQgaWQxID0gTG9uZ09iamVjdElkLmZyb21TdHJpbmcoCisJCQkJIjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYiKTsKKwkJYnl0ZVtdIGJ1ZiA9IG5ldyBieXRlWzMyXTsKKwkJaWQxLmNvcHlSYXdUbyhidWYsIDApOworCQlhc3NlcnRFcXVhbHMoMCwgaWQxLmNvbXBhcmVUbyhidWYsIDApKTsKKworCQlMb25nT2JqZWN0SWQKKwkJCQkuZnJvbVN0cmluZygKKwkJCQkJCSIxMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmIikKKwkJCQkuY29weVJhd1RvKGJ1ZiwgMCk7CisJCWFzc2VydEVxdWFscygtMSwgaWQxLmNvbXBhcmVUbyhidWYsIDApKTsKKworCQlMb25nT2JqZWN0SWQKKwkJCQkuZnJvbVN0cmluZygKKwkJCQkJCSIwMDIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmIikKKwkJCQkuY29weVJhd1RvKGJ1ZiwgMCk7CisJCWFzc2VydEVxdWFscygxLCBpZDEuY29tcGFyZVRvKGJ1ZiwgMCkpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdENvbXBhcmVUb0xvbmcoKSB7CisJCUFueUxvbmdPYmplY3RJZCBpZDEgPSBuZXcgTG9uZ09iamVjdElkKDFMLCAyTCwgM0wsIDRMKTsKKwkJbG9uZ1tdIGJ1ZiA9IG5ldyBsb25nWzRdOworCQlpZDEuY29weVJhd1RvKGJ1ZiwgMCk7CisJCWFzc2VydEVxdWFscygwLCBpZDEuY29tcGFyZVRvKGJ1ZiwgMCkpOworCisJCW5ldyBMb25nT2JqZWN0SWQoMkwsIDJMLCAzTCwgNEwpLmNvcHlSYXdUbyhidWYsIDApOworCQlhc3NlcnRFcXVhbHMoLTEsIGlkMS5jb21wYXJlVG8oYnVmLCAwKSk7CisKKwkJbmV3IExvbmdPYmplY3RJZCgwTCwgMkwsIDNMLCA0TCkuY29weVJhd1RvKGJ1ZiwgMCk7CisJCWFzc2VydEVxdWFscygxLCBpZDEuY29tcGFyZVRvKGJ1ZiwgMCkpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdENvcHlUb0J5dGUoKSB7CisJCUFueUxvbmdPYmplY3RJZCBpZDEgPSBMb25nT2JqZWN0SWRUZXN0VXRpbHMuaGFzaCgidGVzdCIpOworCQlieXRlW10gYnVmID0gbmV3IGJ5dGVbNjRdOworCQlpZDEuY29weVRvKGJ1ZiwgMCk7CisJCWFzc2VydEVxdWFscyhpZDEsIExvbmdPYmplY3RJZC5mcm9tU3RyaW5nKGJ1ZiwgMCkpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdENvcHlSYXdUb0J5dGVCdWZmZXIoKSB7CisJCUFueUxvbmdPYmplY3RJZCBpZDEgPSBMb25nT2JqZWN0SWRUZXN0VXRpbHMuaGFzaCgidGVzdCIpOworCQlCeXRlQnVmZmVyIGJ1ZiA9IEJ5dGVCdWZmZXIuYWxsb2NhdGUoMzIpOworCQlpZDEuY29weVJhd1RvKGJ1Zik7CisJCWFzc2VydEVxdWFscyhpZDEsIExvbmdPYmplY3RJZC5mcm9tUmF3KGJ1Zi5hcnJheSgpLCAwKSk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0Q29weVRvQnl0ZUJ1ZmZlcigpIHsKKwkJQW55TG9uZ09iamVjdElkIGlkMSA9IExvbmdPYmplY3RJZFRlc3RVdGlscy5oYXNoKCJ0ZXN0Iik7CisJCUJ5dGVCdWZmZXIgYnVmID0gQnl0ZUJ1ZmZlci5hbGxvY2F0ZSg2NCk7CisJCWlkMS5jb3B5VG8oYnVmKTsKKwkJYXNzZXJ0RXF1YWxzKGlkMSwgTG9uZ09iamVjdElkLmZyb21TdHJpbmcoYnVmLmFycmF5KCksIDApKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RDb3B5UmF3VG9PdXRwdXRTdHJlYW0oKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQlBbnlMb25nT2JqZWN0SWQgaWQxID0gTG9uZ09iamVjdElkVGVzdFV0aWxzLmhhc2goInRlc3QiKTsKKwkJQnl0ZUFycmF5T3V0cHV0U3RyZWFtIG9zID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgzMik7CisJCWlkMS5jb3B5UmF3VG8ob3MpOworCQlhc3NlcnRFcXVhbHMoaWQxLCBMb25nT2JqZWN0SWQuZnJvbVJhdyhvcy50b0J5dGVBcnJheSgpLCAwKSk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0Q29weVRvT3V0cHV0U3RyZWFtKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJQW55TG9uZ09iamVjdElkIGlkMSA9IExvbmdPYmplY3RJZFRlc3RVdGlscy5oYXNoKCJ0ZXN0Iik7CisJCUJ5dGVBcnJheU91dHB1dFN0cmVhbSBvcyA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oNjQpOworCQlpZDEuY29weVRvKG9zKTsKKwkJYXNzZXJ0RXF1YWxzKGlkMSwgTG9uZ09iamVjdElkLmZyb21TdHJpbmcob3MudG9CeXRlQXJyYXkoKSwgMCkpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdENvcHlUb1dyaXRlcigpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCUFueUxvbmdPYmplY3RJZCBpZDEgPSBMb25nT2JqZWN0SWRUZXN0VXRpbHMuaGFzaCgidGVzdCIpOworCQlCeXRlQXJyYXlPdXRwdXRTdHJlYW0gb3MgPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKDY0KTsKKwkJT3V0cHV0U3RyZWFtV3JpdGVyIHcgPSBuZXcgT3V0cHV0U3RyZWFtV3JpdGVyKG9zLCBDb25zdGFudHMuQ0hBUlNFVCk7CisJCWlkMS5jb3B5VG8odyk7CisJCXcuY2xvc2UoKTsKKwkJYXNzZXJ0RXF1YWxzKGlkMSwgTG9uZ09iamVjdElkLmZyb21TdHJpbmcob3MudG9CeXRlQXJyYXkoKSwgMCkpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdENvcHlUb1dyaXRlcldpdGhCdWYoKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQlBbnlMb25nT2JqZWN0SWQgaWQxID0gTG9uZ09iamVjdElkVGVzdFV0aWxzLmhhc2goInRlc3QiKTsKKwkJQnl0ZUFycmF5T3V0cHV0U3RyZWFtIG9zID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSg2NCk7CisJCU91dHB1dFN0cmVhbVdyaXRlciB3ID0gbmV3IE91dHB1dFN0cmVhbVdyaXRlcihvcywgQ29uc3RhbnRzLkNIQVJTRVQpOworCQljaGFyW10gYnVmID0gbmV3IGNoYXJbNjRdOworCQlpZDEuY29weVRvKGJ1Ziwgdyk7CisJCXcuY2xvc2UoKTsKKwkJYXNzZXJ0RXF1YWxzKGlkMSwgTG9uZ09iamVjdElkLmZyb21TdHJpbmcob3MudG9CeXRlQXJyYXkoKSwgMCkpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdENvcHlUb1N0cmluZ0J1aWxkZXIoKSB7CisJCUFueUxvbmdPYmplY3RJZCBpZDEgPSBMb25nT2JqZWN0SWRUZXN0VXRpbHMuaGFzaCgidGVzdCIpOworCQlTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwkJY2hhcltdIGJ1ZiA9IG5ldyBjaGFyWzY0XTsKKwkJaWQxLmNvcHlUbyhidWYsIHNiKTsKKwkJYXNzZXJ0RXF1YWxzKGlkMSwgTG9uZ09iamVjdElkLmZyb21TdHJpbmcoc2IudG9TdHJpbmcoKSkpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdENvcHkoKSB7CisJCUFueUxvbmdPYmplY3RJZCBpZDEgPSBMb25nT2JqZWN0SWRUZXN0VXRpbHMuaGFzaCgidGVzdCIpOworCQlhc3NlcnRFcXVhbHMoaWQxLmNvcHkoKSwgaWQxKTsKKwkJTXV0YWJsZUxvbmdPYmplY3RJZCBpZDIgPSBuZXcgTXV0YWJsZUxvbmdPYmplY3RJZCgpOworCQlpZDIuZnJvbU9iamVjdElkKGlkMSk7CisJCWFzc2VydEVxdWFscyhpZDEsIGlkMi5jb3B5KCkpOworCX0KK30KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzLnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvbGZzL2xpYi9NdXRhYmxlTG9uZ09iamVjdElkVGVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9sZnMvbGliL011dGFibGVMb25nT2JqZWN0SWRUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJkYzNhYgotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvbGZzL2xpYi9NdXRhYmxlTG9uZ09iamVjdElkVGVzdC5qYXZhCkBAIC0wLDAgKzEsOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUsIE1hdHRoaWFzIFNvaG4gPG1hdHRoaWFzLnNvaG5Ac2FwLmNvbT4KKyAqIGFuZCBvdGhlciBjb3B5cmlnaHQgb3duZXJzIGFzIGRvY3VtZW50ZWQgaW4gdGhlIHByb2plY3QncyBJUCBsb2cuCisgKgorICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2MS4wIHdoaWNoCisgKiBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgaXMgcmVwcm9kdWNlZCBiZWxvdywgYW5kIGlzCisgKiBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VkbC12MTAucGhwCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgSW5jLiBub3IgdGhlCisgKiAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCisgKiAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3IKKyAqICAgd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORAorICogQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKyAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGCisgKiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5saWI7CisKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7CisKK2ltcG9ydCBvcmcuanVuaXQuVGVzdDsKKworLyoKKyAqIFBvcnRlZCB0byBTSEEtMjU2IGZyb20gb3JnLmVjbGlwc2UuamdpdC5saWIuTXV0YWJsZU9iamVjdElkVGVzdAorICovCitwdWJsaWMgY2xhc3MgTXV0YWJsZUxvbmdPYmplY3RJZFRlc3QgeworCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0RnJvbVJhd0xvbmcoKSB7CisJCU11dGFibGVMb25nT2JqZWN0SWQgbSA9IG5ldyBNdXRhYmxlTG9uZ09iamVjdElkKCk7CisJCW0uZnJvbVJhdyhuZXcgbG9uZ1tdIHsgMUwsIDJMLCAzTCwgNEwgfSk7CisJCWFzc2VydEVxdWFscyhuZXcgTG9uZ09iamVjdElkKDFMLCAyTCwgM0wsIDRMKSwgbSk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0RnJvbVN0cmluZygpIHsKKwkJQW55TG9uZ09iamVjdElkIGlkID0gbmV3IExvbmdPYmplY3RJZCgxTCwgMkwsIDNMLCA0TCk7CisJCU11dGFibGVMb25nT2JqZWN0SWQgbSA9IG5ldyBNdXRhYmxlTG9uZ09iamVjdElkKCk7CisJCW0uZnJvbVN0cmluZyhpZC5uYW1lKCkpOworCQlhc3NlcnRFcXVhbHMoaWQsIG0pOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdEZyb21TdHJpbmdCeXRlKCkgeworCQlBbnlMb25nT2JqZWN0SWQgaWQgPSBuZXcgTG9uZ09iamVjdElkKDFMLCAyTCwgM0wsIDRMKTsKKwkJTXV0YWJsZUxvbmdPYmplY3RJZCBtID0gbmV3IE11dGFibGVMb25nT2JqZWN0SWQoKTsKKwkJYnl0ZVtdIGJ1ZiA9IG5ldyBieXRlWzY0XTsKKwkJaWQuY29weVRvKGJ1ZiwgMCk7CisJCW0uZnJvbVN0cmluZyhidWYsIDApOworCQlhc3NlcnRFcXVhbHMoaWQsIG0pOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdENvcHkoKSB7CisJCU11dGFibGVMb25nT2JqZWN0SWQgbSA9IG5ldyBNdXRhYmxlTG9uZ09iamVjdElkKCk7CisJCW0uZnJvbVJhdyhuZXcgbG9uZ1tdIHsgMUwsIDJMLCAzTCwgNEwgfSk7CisJCWFzc2VydEVxdWFscyhtLCBuZXcgTXV0YWJsZUxvbmdPYmplY3RJZChtKSk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0VG9PYmplY3RJZCgpIHsKKwkJTXV0YWJsZUxvbmdPYmplY3RJZCBtID0gbmV3IE11dGFibGVMb25nT2JqZWN0SWQoKTsKKwkJbS5mcm9tUmF3KG5ldyBsb25nW10geyAxTCwgMkwsIDNMLCA0TCB9KTsKKwkJYXNzZXJ0RXF1YWxzKG0sIG0udG9PYmplY3RJZCgpKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy8uY2xhc3NwYXRoIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMvLmNsYXNzcGF0aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNGEyYmU3Ci0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMvLmNsYXNzcGF0aApAQCAtMCwwICsxLDggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8Y2xhc3NwYXRoPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InJlc291cmNlcyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSmF2YVNFLTEuNyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgorPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy8uZmJwcmVmcyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLy5mYnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxYTA3NjcKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy8uZmJwcmVmcwpAQCAtMCwwICsxLDEyNSBAQAorI0ZpbmRCdWdzIFVzZXIgUHJlZmVyZW5jZXMKKyNNb24gTWF5IDA0IDE2OjI0OjEzIFBEVCAyMDA5CitkZXRlY3RvckFwcGVuZGluZ1RvQW5PYmplY3RPdXRwdXRTdHJlYW09QXBwZW5kaW5nVG9Bbk9iamVjdE91dHB1dFN0cmVhbXx0cnVlCitkZXRlY3RvckJhZEFwcGxldENvbnN0cnVjdG9yPUJhZEFwcGxldENvbnN0cnVjdG9yfGZhbHNlCitkZXRlY3RvckJhZFJlc3VsdFNldEFjY2Vzcz1CYWRSZXN1bHRTZXRBY2Nlc3N8dHJ1ZQorZGV0ZWN0b3JCYWRTeW50YXhGb3JSZWd1bGFyRXhwcmVzc2lvbj1CYWRTeW50YXhGb3JSZWd1bGFyRXhwcmVzc2lvbnx0cnVlCitkZXRlY3RvckJhZFVzZU9mUmV0dXJuVmFsdWU9QmFkVXNlT2ZSZXR1cm5WYWx1ZXx0cnVlCitkZXRlY3RvckJhZGx5T3ZlcnJpZGRlbkFkYXB0ZXI9QmFkbHlPdmVycmlkZGVuQWRhcHRlcnx0cnVlCitkZXRlY3RvckJvb2xlYW5SZXR1cm5OdWxsPUJvb2xlYW5SZXR1cm5OdWxsfHRydWUKK2RldGVjdG9yQ2FsbFRvVW5zdXBwb3J0ZWRNZXRob2Q9Q2FsbFRvVW5zdXBwb3J0ZWRNZXRob2R8dHJ1ZQorZGV0ZWN0b3JDaGVja0ltbXV0YWJsZUFubm90YXRpb249Q2hlY2tJbW11dGFibGVBbm5vdGF0aW9ufHRydWUKK2RldGVjdG9yQ2hlY2tUeXBlUXVhbGlmaWVycz1DaGVja1R5cGVRdWFsaWZpZXJzfHRydWUKK2RldGVjdG9yQ2xvbmVJZGlvbT1DbG9uZUlkaW9tfGZhbHNlCitkZXRlY3RvckNvbXBhcmF0b3JJZGlvbT1Db21wYXJhdG9ySWRpb218dHJ1ZQorZGV0ZWN0b3JDb25mdXNlZEluaGVyaXRhbmNlPUNvbmZ1c2VkSW5oZXJpdGFuY2V8dHJ1ZQorZGV0ZWN0b3JDb25mdXNpb25CZXR3ZWVuSW5oZXJpdGVkQW5kT3V0ZXJNZXRob2Q9Q29uZnVzaW9uQmV0d2VlbkluaGVyaXRlZEFuZE91dGVyTWV0aG9kfHRydWUKK2RldGVjdG9yQ3Jvc3NTaXRlU2NyaXB0aW5nPUNyb3NzU2l0ZVNjcmlwdGluZ3x0cnVlCitkZXRlY3RvckRvSW5zaWRlRG9Qcml2aWxlZ2VkPURvSW5zaWRlRG9Qcml2aWxlZ2VkfHRydWUKK2RldGVjdG9yRG9udENhdGNoSWxsZWdhbE1vbml0b3JTdGF0ZUV4Y2VwdGlvbj1Eb250Q2F0Y2hJbGxlZ2FsTW9uaXRvclN0YXRlRXhjZXB0aW9ufHRydWUKK2RldGVjdG9yRG9udFVzZUVudW09RG9udFVzZUVudW18dHJ1ZQorZGV0ZWN0b3JEcm9wcGVkRXhjZXB0aW9uPURyb3BwZWRFeGNlcHRpb258dHJ1ZQorZGV0ZWN0b3JEdW1iTWV0aG9kSW52b2NhdGlvbnM9RHVtYk1ldGhvZEludm9jYXRpb25zfHRydWUKK2RldGVjdG9yRHVtYk1ldGhvZHM9RHVtYk1ldGhvZHN8dHJ1ZQorZGV0ZWN0b3JEdXBsaWNhdGVCcmFuY2hlcz1EdXBsaWNhdGVCcmFuY2hlc3x0cnVlCitkZXRlY3RvckVtcHR5WmlwRmlsZUVudHJ5PUVtcHR5WmlwRmlsZUVudHJ5fHRydWUKK2RldGVjdG9yRXF1YWxzT3BlcmFuZFNob3VsZEhhdmVDbGFzc0NvbXBhdGlibGVXaXRoVGhpcz1FcXVhbHNPcGVyYW5kU2hvdWxkSGF2ZUNsYXNzQ29tcGF0aWJsZVdpdGhUaGlzfHRydWUKK2RldGVjdG9yRmluYWxpemVyTnVsbHNGaWVsZHM9RmluYWxpemVyTnVsbHNGaWVsZHN8dHJ1ZQorZGV0ZWN0b3JGaW5kQmFkQ2FzdDI9RmluZEJhZENhc3QyfHRydWUKK2RldGVjdG9yRmluZEJhZEZvckxvb3A9RmluZEJhZEZvckxvb3B8dHJ1ZQorZGV0ZWN0b3JGaW5kQ2lyY3VsYXJEZXBlbmRlbmNpZXM9RmluZENpcmN1bGFyRGVwZW5kZW5jaWVzfGZhbHNlCitkZXRlY3RvckZpbmREZWFkTG9jYWxTdG9yZXM9RmluZERlYWRMb2NhbFN0b3Jlc3x0cnVlCitkZXRlY3RvckZpbmREb3VibGVDaGVjaz1GaW5kRG91YmxlQ2hlY2t8dHJ1ZQorZGV0ZWN0b3JGaW5kRW1wdHlTeW5jaHJvbml6ZWRCbG9jaz1GaW5kRW1wdHlTeW5jaHJvbml6ZWRCbG9ja3x0cnVlCitkZXRlY3RvckZpbmRGaWVsZFNlbGZBc3NpZ25tZW50PUZpbmRGaWVsZFNlbGZBc3NpZ25tZW50fHRydWUKK2RldGVjdG9yRmluZEZpbmFsaXplSW52b2NhdGlvbnM9RmluZEZpbmFsaXplSW52b2NhdGlvbnN8dHJ1ZQorZGV0ZWN0b3JGaW5kRmxvYXRFcXVhbGl0eT1GaW5kRmxvYXRFcXVhbGl0eXx0cnVlCitkZXRlY3RvckZpbmRIRW1pc21hdGNoPUZpbmRIRW1pc21hdGNofHRydWUKK2RldGVjdG9yRmluZEluY29uc2lzdGVudFN5bmMyPUZpbmRJbmNvbnNpc3RlbnRTeW5jMnx0cnVlCitkZXRlY3RvckZpbmRKU1IxNjZMb2NrTW9uaXRvcmVudGVyPUZpbmRKU1IxNjZMb2NrTW9uaXRvcmVudGVyfHRydWUKK2RldGVjdG9yRmluZExvY2FsU2VsZkFzc2lnbm1lbnQyPUZpbmRMb2NhbFNlbGZBc3NpZ25tZW50Mnx0cnVlCitkZXRlY3RvckZpbmRNYXNrZWRGaWVsZHM9RmluZE1hc2tlZEZpZWxkc3x0cnVlCitkZXRlY3RvckZpbmRNaXNtYXRjaGVkV2FpdE9yTm90aWZ5PUZpbmRNaXNtYXRjaGVkV2FpdE9yTm90aWZ5fHRydWUKK2RldGVjdG9yRmluZE5ha2VkTm90aWZ5PUZpbmROYWtlZE5vdGlmeXx0cnVlCitkZXRlY3RvckZpbmROb25TZXJpYWxpemFibGVTdG9yZUludG9TZXNzaW9uPUZpbmROb25TZXJpYWxpemFibGVTdG9yZUludG9TZXNzaW9ufHRydWUKK2RldGVjdG9yRmluZE5vblNlcmlhbGl6YWJsZVZhbHVlUGFzc2VkVG9Xcml0ZU9iamVjdD1GaW5kTm9uU2VyaWFsaXphYmxlVmFsdWVQYXNzZWRUb1dyaXRlT2JqZWN0fHRydWUKK2RldGVjdG9yRmluZE5vblNob3J0Q2lyY3VpdD1GaW5kTm9uU2hvcnRDaXJjdWl0fHRydWUKK2RldGVjdG9yRmluZE51bGxEZXJlZj1GaW5kTnVsbERlcmVmfHRydWUKK2RldGVjdG9yRmluZE51bGxEZXJlZnNJbnZvbHZpbmdOb25TaG9ydENpcmN1aXRFdmFsdWF0aW9uPUZpbmROdWxsRGVyZWZzSW52b2x2aW5nTm9uU2hvcnRDaXJjdWl0RXZhbHVhdGlvbnx0cnVlCitkZXRlY3RvckZpbmRPcGVuU3RyZWFtPUZpbmRPcGVuU3RyZWFtfHRydWUKK2RldGVjdG9yRmluZFB1enpsZXJzPUZpbmRQdXp6bGVyc3x0cnVlCitkZXRlY3RvckZpbmRSZWZDb21wYXJpc29uPUZpbmRSZWZDb21wYXJpc29ufHRydWUKK2RldGVjdG9yRmluZFJldHVyblJlZj1GaW5kUmV0dXJuUmVmfHRydWUKK2RldGVjdG9yRmluZFJ1bkludm9jYXRpb25zPUZpbmRSdW5JbnZvY2F0aW9uc3x0cnVlCitkZXRlY3RvckZpbmRTZWxmQ29tcGFyaXNvbj1GaW5kU2VsZkNvbXBhcmlzb258dHJ1ZQorZGV0ZWN0b3JGaW5kU2VsZkNvbXBhcmlzb24yPUZpbmRTZWxmQ29tcGFyaXNvbjJ8dHJ1ZQorZGV0ZWN0b3JGaW5kU2xlZXBXaXRoTG9ja0hlbGQ9RmluZFNsZWVwV2l0aExvY2tIZWxkfHRydWUKK2RldGVjdG9yRmluZFNwaW5Mb29wPUZpbmRTcGluTG9vcHx0cnVlCitkZXRlY3RvckZpbmRTcWxJbmplY3Rpb249RmluZFNxbEluamVjdGlvbnx0cnVlCitkZXRlY3RvckZpbmRUd29Mb2NrV2FpdD1GaW5kVHdvTG9ja1dhaXR8dHJ1ZQorZGV0ZWN0b3JGaW5kVW5jYWxsZWRQcml2YXRlTWV0aG9kcz1GaW5kVW5jYWxsZWRQcml2YXRlTWV0aG9kc3x0cnVlCitkZXRlY3RvckZpbmRVbmNvbmRpdGlvbmFsV2FpdD1GaW5kVW5jb25kaXRpb25hbFdhaXR8dHJ1ZQorZGV0ZWN0b3JGaW5kVW5pbml0aWFsaXplZEdldD1GaW5kVW5pbml0aWFsaXplZEdldHx0cnVlCitkZXRlY3RvckZpbmRVbnJlbGF0ZWRUeXBlc0luR2VuZXJpY0NvbnRhaW5lcj1GaW5kVW5yZWxhdGVkVHlwZXNJbkdlbmVyaWNDb250YWluZXJ8dHJ1ZQorZGV0ZWN0b3JGaW5kVW5yZWxlYXNlZExvY2s9RmluZFVucmVsZWFzZWRMb2NrfHRydWUKK2RldGVjdG9yRmluZFVuc2F0aXNmaWVkT2JsaWdhdGlvbj1GaW5kVW5zYXRpc2ZpZWRPYmxpZ2F0aW9ufHRydWUKK2RldGVjdG9yRmluZFVuc3luY0dldD1GaW5kVW5zeW5jR2V0fHRydWUKK2RldGVjdG9yRmluZFVzZWxlc3NDb250cm9sRmxvdz1GaW5kVXNlbGVzc0NvbnRyb2xGbG93fHRydWUKK2RldGVjdG9yRm9ybWF0U3RyaW5nQ2hlY2tlcj1Gb3JtYXRTdHJpbmdDaGVja2VyfHRydWUKK2RldGVjdG9ySHVnZVNoYXJlZFN0cmluZ0NvbnN0YW50cz1IdWdlU2hhcmVkU3RyaW5nQ29uc3RhbnRzfHRydWUKK2RldGVjdG9ySURpdlJlc3VsdENhc3RUb0RvdWJsZT1JRGl2UmVzdWx0Q2FzdFRvRG91YmxlfHRydWUKK2RldGVjdG9ySW5jb21wYXRNYXNrPUluY29tcGF0TWFza3x0cnVlCitkZXRlY3RvckluY29uc2lzdGVudEFubm90YXRpb25zPUluY29uc2lzdGVudEFubm90YXRpb25zfHRydWUKK2RldGVjdG9ySW5lZmZpY2llbnRNZW1iZXJBY2Nlc3M9SW5lZmZpY2llbnRNZW1iZXJBY2Nlc3N8ZmFsc2UKK2RldGVjdG9ySW5lZmZpY2llbnRUb0FycmF5PUluZWZmaWNpZW50VG9BcnJheXx0cnVlCitkZXRlY3RvckluZmluaXRlTG9vcD1JbmZpbml0ZUxvb3B8dHJ1ZQorZGV0ZWN0b3JJbmZpbml0ZVJlY3Vyc2l2ZUxvb3A9SW5maW5pdGVSZWN1cnNpdmVMb29wfHRydWUKK2RldGVjdG9ySW5maW5pdGVSZWN1cnNpdmVMb29wMj1JbmZpbml0ZVJlY3Vyc2l2ZUxvb3AyfGZhbHNlCitkZXRlY3RvckluaGVyaXRhbmNlVW5zYWZlR2V0UmVzb3VyY2U9SW5oZXJpdGFuY2VVbnNhZmVHZXRSZXNvdXJjZXx0cnVlCitkZXRlY3RvckluaXRpYWxpemF0aW9uQ2hhaW49SW5pdGlhbGl6YXRpb25DaGFpbnx0cnVlCitkZXRlY3Rvckluc3RhbnRpYXRlU3RhdGljQ2xhc3M9SW5zdGFudGlhdGVTdGF0aWNDbGFzc3x0cnVlCitkZXRlY3RvckludmFsaWRKVW5pdFRlc3Q9SW52YWxpZEpVbml0VGVzdHx0cnVlCitkZXRlY3Rvckl0ZXJhdG9ySWRpb21zPUl0ZXJhdG9ySWRpb21zfHRydWUKK2RldGVjdG9yTGF6eUluaXQ9TGF6eUluaXR8dHJ1ZQorZGV0ZWN0b3JMb2FkT2ZLbm93bk51bGxWYWx1ZT1Mb2FkT2ZLbm93bk51bGxWYWx1ZXx0cnVlCitkZXRlY3Rvck1ldGhvZFJldHVybkNoZWNrPU1ldGhvZFJldHVybkNoZWNrfHRydWUKK2RldGVjdG9yTXVsdGl0aHJlYWRlZEluc3RhbmNlQWNjZXNzPU11bHRpdGhyZWFkZWRJbnN0YW5jZUFjY2Vzc3x0cnVlCitkZXRlY3Rvck11dGFibGVMb2NrPU11dGFibGVMb2NrfHRydWUKK2RldGVjdG9yTXV0YWJsZVN0YXRpY0ZpZWxkcz1NdXRhYmxlU3RhdGljRmllbGRzfHRydWUKK2RldGVjdG9yTmFtaW5nPU5hbWluZ3x0cnVlCitkZXRlY3Rvck51bWJlckNvbnN0cnVjdG9yPU51bWJlckNvbnN0cnVjdG9yfHRydWUKK2RldGVjdG9yT3ZlcnJpZGluZ0VxdWFsc05vdFN5bW1ldHJpY2FsPU92ZXJyaWRpbmdFcXVhbHNOb3RTeW1tZXRyaWNhbHx0cnVlCitkZXRlY3RvclByZWZlclplcm9MZW5ndGhBcnJheXM9UHJlZmVyWmVyb0xlbmd0aEFycmF5c3x0cnVlCitkZXRlY3RvclB1YmxpY1NlbWFwaG9yZXM9UHVibGljU2VtYXBob3Jlc3xmYWxzZQorZGV0ZWN0b3JRdWVzdGlvbmFibGVCb29sZWFuQXNzaWdubWVudD1RdWVzdGlvbmFibGVCb29sZWFuQXNzaWdubWVudHx0cnVlCitkZXRlY3RvclJlYWRSZXR1cm5TaG91bGRCZUNoZWNrZWQ9UmVhZFJldHVyblNob3VsZEJlQ2hlY2tlZHx0cnVlCitkZXRlY3RvclJlZHVuZGFudEludGVyZmFjZXM9UmVkdW5kYW50SW50ZXJmYWNlc3x0cnVlCitkZXRlY3RvclJlcGVhdGVkQ29uZGl0aW9uYWxzPVJlcGVhdGVkQ29uZGl0aW9uYWxzfHRydWUKK2RldGVjdG9yUnVudGltZUV4Y2VwdGlvbkNhcHR1cmU9UnVudGltZUV4Y2VwdGlvbkNhcHR1cmV8dHJ1ZQorZGV0ZWN0b3JTZXJpYWxpemFibGVJZGlvbT1TZXJpYWxpemFibGVJZGlvbXx0cnVlCitkZXRlY3RvclN0YXJ0SW5Db25zdHJ1Y3Rvcj1TdGFydEluQ29uc3RydWN0b3J8dHJ1ZQorZGV0ZWN0b3JTdGF0aWNDYWxlbmRhckRldGVjdG9yPVN0YXRpY0NhbGVuZGFyRGV0ZWN0b3J8dHJ1ZQorZGV0ZWN0b3JTdHJpbmdDb25jYXRlbmF0aW9uPVN0cmluZ0NvbmNhdGVuYXRpb258dHJ1ZQorZGV0ZWN0b3JTdXBlcmZsdW91c0luc3RhbmNlT2Y9U3VwZXJmbHVvdXNJbnN0YW5jZU9mfHRydWUKK2RldGVjdG9yU3VzcGljaW91c1RocmVhZEludGVycnVwdGVkPVN1c3BpY2lvdXNUaHJlYWRJbnRlcnJ1cHRlZHx0cnVlCitkZXRlY3RvclN3aXRjaEZhbGx0aHJvdWdoPVN3aXRjaEZhbGx0aHJvdWdofHRydWUKK2RldGVjdG9yU3luY2hyb25pemVBbmROdWxsQ2hlY2tGaWVsZD1TeW5jaHJvbml6ZUFuZE51bGxDaGVja0ZpZWxkfHRydWUKK2RldGVjdG9yU3luY2hyb25pemVPbkNsYXNzTGl0ZXJhbE5vdEdldENsYXNzPVN5bmNocm9uaXplT25DbGFzc0xpdGVyYWxOb3RHZXRDbGFzc3x0cnVlCitkZXRlY3RvclN5bmNocm9uaXppbmdPbkNvbnRlbnRzT2ZGaWVsZFRvUHJvdGVjdEZpZWxkPVN5bmNocm9uaXppbmdPbkNvbnRlbnRzT2ZGaWVsZFRvUHJvdGVjdEZpZWxkfHRydWUKK2RldGVjdG9yVVJMUHJvYmxlbXM9VVJMUHJvYmxlbXN8dHJ1ZQorZGV0ZWN0b3JVbmNhbGxhYmxlTWV0aG9kT2ZBbm9ueW1vdXNDbGFzcz1VbmNhbGxhYmxlTWV0aG9kT2ZBbm9ueW1vdXNDbGFzc3x0cnVlCitkZXRlY3RvclVubmVjZXNzYXJ5TWF0aD1Vbm5lY2Vzc2FyeU1hdGh8dHJ1ZQorZGV0ZWN0b3JVbnJlYWRGaWVsZHM9VW5yZWFkRmllbGRzfHRydWUKK2RldGVjdG9yVXNlT2JqZWN0RXF1YWxzPVVzZU9iamVjdEVxdWFsc3xmYWxzZQorZGV0ZWN0b3JVc2VsZXNzU3ViY2xhc3NNZXRob2Q9VXNlbGVzc1N1YmNsYXNzTWV0aG9kfGZhbHNlCitkZXRlY3RvclZhckFyZ3NQcm9ibGVtcz1WYXJBcmdzUHJvYmxlbXN8dHJ1ZQorZGV0ZWN0b3JWb2xhdGlsZVVzYWdlPVZvbGF0aWxlVXNhZ2V8dHJ1ZQorZGV0ZWN0b3JXYWl0SW5Mb29wPVdhaXRJbkxvb3B8dHJ1ZQorZGV0ZWN0b3JXcm9uZ01hcEl0ZXJhdG9yPVdyb25nTWFwSXRlcmF0b3J8dHJ1ZQorZGV0ZWN0b3JYTUxGYWN0b3J5QnlwYXNzPVhNTEZhY3RvcnlCeXBhc3N8dHJ1ZQorZGV0ZWN0b3JfdGhyZXNob2xkPTIKK2VmZm9ydD1kZWZhdWx0CitleGNsdWRlZmlsdGVyMD1maW5kQnVncy9GaW5kQnVnc0V4Y2x1ZGVGaWx0ZXIueG1sCitmaWx0ZXJfc2V0dGluZ3M9TWVkaXVtfEJBRF9QUkFDVElDRSxDT1JSRUNUTkVTUyxNVF9DT1JSRUNUTkVTUyxQRVJGT1JNQU5DRSxTVFlMRXxmYWxzZQorZmlsdGVyX3NldHRpbmdzX25lZz1NQUxJQ0lPVVNfQ09ERSxOT0lTRSxJMThOLFNFQ1VSSVRZLEVYUEVSSU1FTlRBTHwKK3J1bl9hdF9mdWxsX2J1aWxkPXRydWUKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzLy5naXRpZ25vcmUgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzNGUwZTAKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMiBAQAorL2JpbgorL3RhcmdldApkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMvLnByb2plY3QgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWJlZWMxCi0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMvLnByb2plY3QKQEAgLTAsMCArMSwzNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0RGVzY3JpcHRpb24+CisJPG5hbWU+b3JnLmVjbGlwc2UuamdpdC5sZnM8L25hbWU+CisJPGNvbW1lbnQ+PC9jb21tZW50PgorCTxwcm9qZWN0cz4KKwk8L3Byb2plY3RzPgorCTxidWlsZFNwZWM+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5hcGkudG9vbHMuYXBpQW5hbHlzaXNCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwk8L2J1aWxkU3BlYz4KKwk8bmF0dXJlcz4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5hcGkudG9vbHMuYXBpQW5hbHlzaXNOYXR1cmU8L25hdHVyZT4KKwk8L25hdHVyZXM+Cis8L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWYyNmMwCi0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCkBAIC0wLDAgKzEsMiBAQAorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK2VuY29kaW5nLzxwcm9qZWN0Pj1VVEYtOApkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmcyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWEwYWQyMgotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZnMKQEAgLTAsMCArMSwyIEBACitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorbGluZS5zZXBhcmF0b3I9XG4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjM5ZDE2Ci0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCkBAIC0wLDAgKzEsMzk4IEBACitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuYW5ub3RhdGlvbi5pbmhlcml0TnVsbEFubm90YXRpb25zPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5hbm5vdGF0aW9uLm1pc3NpbmdOb25OdWxsQnlEZWZhdWx0QW5ub3RhdGlvbj1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmFubm90YXRpb24ubm9ubnVsbD1vcmcuZWNsaXBzZS5qZHQuYW5ub3RhdGlvbi5Ob25OdWxsCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5hbm5vdGF0aW9uLm5vbm51bGxieWRlZmF1bHQ9b3JnLmVjbGlwc2UuamR0LmFubm90YXRpb24uTm9uTnVsbEJ5RGVmYXVsdAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuYW5ub3RhdGlvbi5udWxsYWJsZT1vcmcuZWNsaXBzZS5qZHQuYW5ub3RhdGlvbi5OdWxsYWJsZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuYW5ub3RhdGlvbi5udWxsYW5hbHlzaXM9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5tZXRob2RQYXJhbWV0ZXJzPWRvIG5vdCBnZW5lcmF0ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS43CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5saW5lTnVtYmVyPWdlbmVyYXRlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5sb2NhbFZhcmlhYmxlPWdlbmVyYXRlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5zb3VyY2VGaWxlPWdlbmVyYXRlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kb2MuY29tbWVudC5zdXBwb3J0PWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hdXRvYm94aW5nPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uY29tcGFyaW5nSWRlbnRpY2FsPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlYWRDb2RlPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5leHBsaWNpdGx5Q2xvc2VkQXV0b0Nsb3NlYWJsZT1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmFsbHRocm91Z2hDYXNlPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmF0YWxPcHRpb25hbEVycm9yPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNsdWRlTnVsbEluZm9Gcm9tQXNzZXJ0cz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2M9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzRGVwcmVjYXRlZFJlZj1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc05vdFZpc2libGVSZWY9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXByaXZhdGUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlZmF1bHRDYXNlPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdFbnVtQ2FzZURlc3BpdGVEZWZhdWx0PWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdIYXNoQ29kZU1ldGhvZD1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNPdmVycmlkaW5nPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNWaXNpYmlsaXR5PXByb3RlY3RlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ0Rlc2NyaXB0aW9uPXJldHVybl90YWcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc01ldGhvZFR5cGVQYXJhbWV0ZXJzPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc092ZXJyaWRpbmc9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzVmlzaWJpbGl0eT1wcml2YXRlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb25Gb3JJbnRlcmZhY2VNZXRob2RJbXBsZW1lbnRhdGlvbj1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1N5bmNocm9uaXplZE9uSW5oZXJpdGVkTWV0aG9kPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9uRXh0ZXJuYWxpemVkU3RyaW5nTGl0ZXJhbD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbm51bGxQYXJhbWV0ZXJBbm5vdGF0aW9uRHJvcHBlZD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm51bGxBbm5vdGF0aW9uSW5mZXJlbmNlQ29uZmxpY3Q9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubnVsbFJlZmVyZW5jZT1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5udWxsU3BlY1Zpb2xhdGlvbj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5udWxsVW5jaGVja2VkQ29udmVyc2lvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBhcmFtZXRlckFzc2lnbm1lbnQ9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvdGVudGlhbE51bGxSZWZlcmVuY2U9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3RlbnRpYWxseVVuY2xvc2VkQ2xvc2VhYmxlPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5yYXdUeXBlUmVmZXJlbmNlPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5yZWR1bmRhbnROdWxsQW5ub3RhdGlvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnJlZHVuZGFudE51bGxDaGVjaz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnJlZHVuZGFudFNwZWNpZmljYXRpb25PZlR5cGVBcmd1bWVudHM9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnJlZHVuZGFudFN1cGVyaW50ZXJmYWNlPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnJlcG9ydE1ldGhvZENhbkJlUG90ZW50aWFsbHlTdGF0aWM9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnJlcG9ydE1ldGhvZENhbkJlU3RhdGljPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NPcHRpb25hbEVycm9ycz1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGFjdGljTnVsbEFuYWx5c2lzRm9yRmllbGRzPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuYXZvaWRhYmxlR2VuZXJpY1R5cGVQcm9ibGVtcz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNsb3NlZENsb3NlYWJsZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25FeGVtcHRFeGNlcHRpb25BbmRUaHJvd2FibGU9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbkluY2x1ZGVEb2NDb21tZW50UmVmZXJlbmNlPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTGFiZWw9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTG9jYWw9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkT2JqZWN0QWxsb2NhdGlvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlckluY2x1ZGVEb2NDb21tZW50UmVmZXJlbmNlPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUHJpdmF0ZU1lbWJlcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRUeXBlUGFyYW1ldGVyPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRXYXJuaW5nVG9rZW49d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuNworb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWduX3R5cGVfbWVtYmVyc19vbl9jb2x1bW5zPWZhbHNlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9hcmd1bWVudHNfaW5fYWxsb2NhdGlvbl9leHByZXNzaW9uPTE2CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9hcmd1bWVudHNfaW5fYW5ub3RhdGlvbj0wCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9hcmd1bWVudHNfaW5fZW51bV9jb25zdGFudD0xNgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfYXJndW1lbnRzX2luX2V4cGxpY2l0X2NvbnN0cnVjdG9yX2NhbGw9MTYKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2FyZ3VtZW50c19pbl9tZXRob2RfaW52b2NhdGlvbj0xNgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfYXJndW1lbnRzX2luX3F1YWxpZmllZF9hbGxvY2F0aW9uX2V4cHJlc3Npb249MTYKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2Fzc2lnbm1lbnQ9MAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfYmluYXJ5X2V4cHJlc3Npb249MTYKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2NvbXBhY3RfaWY9MTYKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2NvbmRpdGlvbmFsX2V4cHJlc3Npb249ODAKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2VudW1fY29uc3RhbnRzPTAKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2V4cHJlc3Npb25zX2luX2FycmF5X2luaXRpYWxpemVyPTE2CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9tZXRob2RfZGVjbGFyYXRpb249MAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfbXVsdGlwbGVfZmllbGRzPTE2CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9wYXJhbWV0ZXJzX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uPTE2CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9wYXJhbWV0ZXJzX2luX21ldGhvZF9kZWNsYXJhdGlvbj0xNgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfcmVzb3VyY2VzX2luX3RyeT04MAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3Jfc2VsZWN0b3JfaW5fbWV0aG9kX2ludm9jYXRpb249MTYKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX3N1cGVyY2xhc3NfaW5fdHlwZV9kZWNsYXJhdGlvbj0xNgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3Jfc3VwZXJpbnRlcmZhY2VzX2luX2VudW1fZGVjbGFyYXRpb249MTYKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX3N1cGVyaW50ZXJmYWNlc19pbl90eXBlX2RlY2xhcmF0aW9uPTE2CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl90aHJvd3NfY2xhdXNlX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uPTE2CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl90aHJvd3NfY2xhdXNlX2luX21ldGhvZF9kZWNsYXJhdGlvbj0xNgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfdW5pb25fdHlwZV9pbl9tdWx0aWNhdGNoPTE2CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYWZ0ZXJfaW1wb3J0cz0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYWZ0ZXJfcGFja2FnZT0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYmVmb3JlX2ZpZWxkPTEKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5ibGFua19saW5lc19iZWZvcmVfZmlyc3RfY2xhc3NfYm9keV9kZWNsYXJhdGlvbj0wCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYmVmb3JlX2ltcG9ydHM9MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2JlZm9yZV9tZW1iZXJfdHlwZT0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYmVmb3JlX21ldGhvZD0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYmVmb3JlX25ld19jaHVuaz0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYmVmb3JlX3BhY2thZ2U9MAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2JldHdlZW5faW1wb3J0X2dyb3Vwcz0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYmV0d2Vlbl90eXBlX2RlY2xhcmF0aW9ucz0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYnJhY2VfcG9zaXRpb25fZm9yX2Fubm90YXRpb25fdHlwZV9kZWNsYXJhdGlvbj1lbmRfb2ZfbGluZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9hbm9ueW1vdXNfdHlwZV9kZWNsYXJhdGlvbj1lbmRfb2ZfbGluZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9hcnJheV9pbml0aWFsaXplcj1lbmRfb2ZfbGluZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9ibG9jaz1lbmRfb2ZfbGluZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9ibG9ja19pbl9jYXNlPWVuZF9vZl9saW5lCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYnJhY2VfcG9zaXRpb25fZm9yX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uPWVuZF9vZl9saW5lCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYnJhY2VfcG9zaXRpb25fZm9yX2VudW1fY29uc3RhbnQ9ZW5kX29mX2xpbmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5icmFjZV9wb3NpdGlvbl9mb3JfZW51bV9kZWNsYXJhdGlvbj1lbmRfb2ZfbGluZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9tZXRob2RfZGVjbGFyYXRpb249ZW5kX29mX2xpbmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5icmFjZV9wb3NpdGlvbl9mb3Jfc3dpdGNoPWVuZF9vZl9saW5lCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYnJhY2VfcG9zaXRpb25fZm9yX3R5cGVfZGVjbGFyYXRpb249ZW5kX29mX2xpbmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmNsZWFyX2JsYW5rX2xpbmVzPWZhbHNlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5jbGVhcl9ibGFua19saW5lc19pbl9ibG9ja19jb21tZW50PWZhbHNlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5jbGVhcl9ibGFua19saW5lc19pbl9qYXZhZG9jX2NvbW1lbnQ9ZmFsc2UKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmZvcm1hdF9ibG9ja19jb21tZW50cz10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5mb3JtYXRfY29tbWVudHM9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuZm9ybWF0X2hlYWRlcj1mYWxzZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuZm9ybWF0X2h0bWw9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuZm9ybWF0X2phdmFkb2NfY29tbWVudHM9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuZm9ybWF0X2xpbmVfY29tbWVudHM9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuZm9ybWF0X3NvdXJjZV9jb2RlPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmluZGVudF9wYXJhbWV0ZXJfZGVzY3JpcHRpb249dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuaW5kZW50X3Jvb3RfdGFncz10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5pbnNlcnRfbmV3X2xpbmVfYmVmb3JlX3Jvb3RfdGFncz1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50Lmluc2VydF9uZXdfbGluZV9mb3JfcGFyYW1ldGVyPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQubGluZV9sZW5ndGg9ODAKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50Lm5ld19saW5lc19hdF9ibG9ja19ib3VuZGFyaWVzPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50Lm5ld19saW5lc19hdF9qYXZhZG9jX2JvdW5kYXJpZXM9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQucHJlc2VydmVfd2hpdGVfc3BhY2VfYmV0d2Vlbl9jb2RlX2FuZF9saW5lX2NvbW1lbnRzPWZhbHNlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tcGFjdF9lbHNlX2lmPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb250aW51YXRpb25faW5kZW50YXRpb249Mgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbnRpbnVhdGlvbl9pbmRlbnRhdGlvbl9mb3JfYXJyYXlfaW5pdGlhbGl6ZXI9Mgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmRpc2FibGluZ190YWc9QGZvcm1hdHRlclw6b2ZmCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuZW5hYmxpbmdfdGFnPUBmb3JtYXR0ZXJcOm9uCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuZm9ybWF0X2d1YXJkaWFuX2NsYXVzZV9vbl9vbmVfbGluZT1mYWxzZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmZvcm1hdF9saW5lX2NvbW1lbnRfc3RhcnRpbmdfb25fZmlyc3RfY29sdW1uPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfYm9keV9kZWNsYXJhdGlvbnNfY29tcGFyZV90b19hbm5vdGF0aW9uX2RlY2xhcmF0aW9uX2hlYWRlcj10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50X2JvZHlfZGVjbGFyYXRpb25zX2NvbXBhcmVfdG9fZW51bV9jb25zdGFudF9oZWFkZXI9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluZGVudF9ib2R5X2RlY2xhcmF0aW9uc19jb21wYXJlX3RvX2VudW1fZGVjbGFyYXRpb25faGVhZGVyPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfYm9keV9kZWNsYXJhdGlvbnNfY29tcGFyZV90b190eXBlX2hlYWRlcj10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50X2JyZWFrc19jb21wYXJlX3RvX2Nhc2VzPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfZW1wdHlfbGluZXM9ZmFsc2UKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfc3RhdGVtZW50c19jb21wYXJlX3RvX2Jsb2NrPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfc3RhdGVtZW50c19jb21wYXJlX3RvX2JvZHk9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluZGVudF9zd2l0Y2hzdGF0ZW1lbnRzX2NvbXBhcmVfdG9fY2FzZXM9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluZGVudF9zd2l0Y2hzdGF0ZW1lbnRzX2NvbXBhcmVfdG9fc3dpdGNoPWZhbHNlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50YXRpb24uc2l6ZT00CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2FmdGVyX2Fubm90YXRpb249aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2FmdGVyX2Fubm90YXRpb25fb25fZmllbGQ9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2FmdGVyX2Fubm90YXRpb25fb25fbG9jYWxfdmFyaWFibGU9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2FmdGVyX2Fubm90YXRpb25fb25fbWVtYmVyPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9hZnRlcl9hbm5vdGF0aW9uX29uX21ldGhvZD1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYWZ0ZXJfYW5ub3RhdGlvbl9vbl9wYWNrYWdlPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9hZnRlcl9hbm5vdGF0aW9uX29uX3BhcmFtZXRlcj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYWZ0ZXJfYW5ub3RhdGlvbl9vbl90eXBlPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9hZnRlcl9sYWJlbD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2FmdGVyX29wZW5pbmdfYnJhY2VfaW5fYXJyYXlfaW5pdGlhbGl6ZXI9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9hdF9lbmRfb2ZfZmlsZV9pZl9taXNzaW5nPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYmVmb3JlX2NhdGNoX2luX3RyeV9zdGF0ZW1lbnQ9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9iZWZvcmVfY2xvc2luZ19icmFjZV9pbl9hcnJheV9pbml0aWFsaXplcj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2JlZm9yZV9lbHNlX2luX2lmX3N0YXRlbWVudD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2JlZm9yZV9maW5hbGx5X2luX3RyeV9zdGF0ZW1lbnQ9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9iZWZvcmVfd2hpbGVfaW5fZG9fc3RhdGVtZW50PWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfaW5fZW1wdHlfYW5ub3RhdGlvbl9kZWNsYXJhdGlvbj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfaW5fZW1wdHlfYW5vbnltb3VzX3R5cGVfZGVjbGFyYXRpb249aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2luX2VtcHR5X2Jsb2NrPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9pbl9lbXB0eV9lbnVtX2NvbnN0YW50PWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9pbl9lbXB0eV9lbnVtX2RlY2xhcmF0aW9uPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9pbl9lbXB0eV9tZXRob2RfYm9keT1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfaW5fZW1wdHlfdHlwZV9kZWNsYXJhdGlvbj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfYW5kX2luX3R5cGVfcGFyYW1ldGVyPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9hc3NpZ25tZW50X29wZXJhdG9yPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9hdF9pbl9hbm5vdGF0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfYXRfaW5fYW5ub3RhdGlvbl90eXBlX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfYmluYXJ5X29wZXJhdG9yPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jbG9zaW5nX2FuZ2xlX2JyYWNrZXRfaW5fdHlwZV9hcmd1bWVudHM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2Nsb3NpbmdfYW5nbGVfYnJhY2tldF9pbl90eXBlX3BhcmFtZXRlcnM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2Nsb3NpbmdfYnJhY2VfaW5fYmxvY2s9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2Nsb3NpbmdfcGFyZW5faW5fY2FzdD1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29sb25faW5fYXNzZXJ0PWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb2xvbl9pbl9jYXNlPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb2xvbl9pbl9jb25kaXRpb25hbD1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29sb25faW5fZm9yPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb2xvbl9pbl9sYWJlbGVkX3N0YXRlbWVudD1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fYWxsb2NhdGlvbl9leHByZXNzaW9uPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9hbm5vdGF0aW9uPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9hcnJheV9pbml0aWFsaXplcj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fY29uc3RydWN0b3JfZGVjbGFyYXRpb25fcGFyYW1ldGVycz1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fY29uc3RydWN0b3JfZGVjbGFyYXRpb25fdGhyb3dzPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9lbnVtX2NvbnN0YW50X2FyZ3VtZW50cz1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fZW51bV9kZWNsYXJhdGlvbnM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX2V4cGxpY2l0Y29uc3RydWN0b3JjYWxsX2FyZ3VtZW50cz1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fZm9yX2luY3JlbWVudHM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX2Zvcl9pbml0cz1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fbWV0aG9kX2RlY2xhcmF0aW9uX3BhcmFtZXRlcnM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX21ldGhvZF9kZWNsYXJhdGlvbl90aHJvd3M9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX21ldGhvZF9pbnZvY2F0aW9uX2FyZ3VtZW50cz1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fbXVsdGlwbGVfZmllbGRfZGVjbGFyYXRpb25zPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9tdWx0aXBsZV9sb2NhbF9kZWNsYXJhdGlvbnM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX3BhcmFtZXRlcml6ZWRfdHlwZV9yZWZlcmVuY2U9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX3N1cGVyaW50ZXJmYWNlcz1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fdHlwZV9hcmd1bWVudHM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX3R5cGVfcGFyYW1ldGVycz1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfZWxsaXBzaXM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfYW5nbGVfYnJhY2tldF9pbl9wYXJhbWV0ZXJpemVkX3R5cGVfcmVmZXJlbmNlPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19hbmdsZV9icmFja2V0X2luX3R5cGVfYXJndW1lbnRzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19hbmdsZV9icmFja2V0X2luX3R5cGVfcGFyYW1ldGVycz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfYnJhY2VfaW5fYXJyYXlfaW5pdGlhbGl6ZXI9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfYnJhY2tldF9pbl9hcnJheV9hbGxvY2F0aW9uX2V4cHJlc3Npb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX2JyYWNrZXRfaW5fYXJyYXlfcmVmZXJlbmNlPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9hbm5vdGF0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9jYXN0PWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9jYXRjaD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fY29uc3RydWN0b3JfZGVjbGFyYXRpb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX2VudW1fY29uc3RhbnQ9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX2Zvcj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5faWY9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX21ldGhvZF9kZWNsYXJhdGlvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fbWV0aG9kX2ludm9jYXRpb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX3BhcmVudGhlc2l6ZWRfZXhwcmVzc2lvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fc3dpdGNoPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9zeW5jaHJvbml6ZWQ9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX3RyeT1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fd2hpbGU9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9wb3N0Zml4X29wZXJhdG9yPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfcHJlZml4X29wZXJhdG9yPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfcXVlc3Rpb25faW5fY29uZGl0aW9uYWw9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX3F1ZXN0aW9uX2luX3dpbGRjYXJkPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfc2VtaWNvbG9uX2luX2Zvcj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfc2VtaWNvbG9uX2luX3RyeV9yZXNvdXJjZXM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX3VuYXJ5X29wZXJhdG9yPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2FuZF9pbl90eXBlX3BhcmFtZXRlcj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Fzc2lnbm1lbnRfb3BlcmF0b3I9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9hdF9pbl9hbm5vdGF0aW9uX3R5cGVfZGVjbGFyYXRpb249aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9iaW5hcnlfb3BlcmF0b3I9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX2FuZ2xlX2JyYWNrZXRfaW5fcGFyYW1ldGVyaXplZF90eXBlX3JlZmVyZW5jZT1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX2FuZ2xlX2JyYWNrZXRfaW5fdHlwZV9hcmd1bWVudHM9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19hbmdsZV9icmFja2V0X2luX3R5cGVfcGFyYW1ldGVycz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX2JyYWNlX2luX2FycmF5X2luaXRpYWxpemVyPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19icmFja2V0X2luX2FycmF5X2FsbG9jYXRpb25fZXhwcmVzc2lvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX2JyYWNrZXRfaW5fYXJyYXlfcmVmZXJlbmNlPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fYW5ub3RhdGlvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX2Nhc3Q9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9jYXRjaD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fZW51bV9jb25zdGFudD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX2Zvcj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX2lmPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fbWV0aG9kX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fbWV0aG9kX2ludm9jYXRpb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9wYXJlbnRoZXNpemVkX2V4cHJlc3Npb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9zd2l0Y2g9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9zeW5jaHJvbml6ZWQ9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl90cnk9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl93aGlsZT1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb2xvbl9pbl9hc3NlcnQ9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb2xvbl9pbl9jYXNlPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbG9uX2luX2NvbmRpdGlvbmFsPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29sb25faW5fZGVmYXVsdD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb2xvbl9pbl9mb3I9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb2xvbl9pbl9sYWJlbGVkX3N0YXRlbWVudD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9hbGxvY2F0aW9uX2V4cHJlc3Npb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fYW5ub3RhdGlvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9hcnJheV9pbml0aWFsaXplcj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbl9wYXJhbWV0ZXJzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uX3Rocm93cz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9lbnVtX2NvbnN0YW50X2FyZ3VtZW50cz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9lbnVtX2RlY2xhcmF0aW9ucz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9leHBsaWNpdGNvbnN0cnVjdG9yY2FsbF9hcmd1bWVudHM9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fZm9yX2luY3JlbWVudHM9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fZm9yX2luaXRzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX21ldGhvZF9kZWNsYXJhdGlvbl9wYXJhbWV0ZXJzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX21ldGhvZF9kZWNsYXJhdGlvbl90aHJvd3M9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fbWV0aG9kX2ludm9jYXRpb25fYXJndW1lbnRzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX211bHRpcGxlX2ZpZWxkX2RlY2xhcmF0aW9ucz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9tdWx0aXBsZV9sb2NhbF9kZWNsYXJhdGlvbnM9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fcGFyYW1ldGVyaXplZF90eXBlX3JlZmVyZW5jZT1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9zdXBlcmludGVyZmFjZXM9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fdHlwZV9hcmd1bWVudHM9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fdHlwZV9wYXJhbWV0ZXJzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2VsbGlwc2lzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYW5nbGVfYnJhY2tldF9pbl9wYXJhbWV0ZXJpemVkX3R5cGVfcmVmZXJlbmNlPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYW5nbGVfYnJhY2tldF9pbl90eXBlX2FyZ3VtZW50cz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2FuZ2xlX2JyYWNrZXRfaW5fdHlwZV9wYXJhbWV0ZXJzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fYW5ub3RhdGlvbl90eXBlX2RlY2xhcmF0aW9uPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFjZV9pbl9hbm9ueW1vdXNfdHlwZV9kZWNsYXJhdGlvbj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fYXJyYXlfaW5pdGlhbGl6ZXI9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNlX2luX2Jsb2NrPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFjZV9pbl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fZW51bV9jb25zdGFudD1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fZW51bV9kZWNsYXJhdGlvbj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fbWV0aG9kX2RlY2xhcmF0aW9uPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFjZV9pbl9zd2l0Y2g9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNlX2luX3R5cGVfZGVjbGFyYXRpb249aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNrZXRfaW5fYXJyYXlfYWxsb2NhdGlvbl9leHByZXNzaW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2tldF9pbl9hcnJheV9yZWZlcmVuY2U9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFja2V0X2luX2FycmF5X3R5cGVfcmVmZXJlbmNlPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fYW5ub3RhdGlvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX2Fubm90YXRpb25fdHlwZV9tZW1iZXJfZGVjbGFyYXRpb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9jYXRjaD1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fY29uc3RydWN0b3JfZGVjbGFyYXRpb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9lbnVtX2NvbnN0YW50PWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fZm9yPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9pZj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fbWV0aG9kX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fbWV0aG9kX2ludm9jYXRpb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9wYXJlbnRoZXNpemVkX2V4cHJlc3Npb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9zd2l0Y2g9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX3N5bmNocm9uaXplZD1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fdHJ5PWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl93aGlsZT1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX3BhcmVudGhlc2l6ZWRfZXhwcmVzc2lvbl9pbl9yZXR1cm49aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9wYXJlbnRoZXNpemVkX2V4cHJlc3Npb25faW5fdGhyb3c9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9wb3N0Zml4X29wZXJhdG9yPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX3ByZWZpeF9vcGVyYXRvcj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9xdWVzdGlvbl9pbl9jb25kaXRpb25hbD1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX3F1ZXN0aW9uX2luX3dpbGRjYXJkPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX3NlbWljb2xvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9zZW1pY29sb25faW5fZm9yPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX3NlbWljb2xvbl9pbl90cnlfcmVzb3VyY2VzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX3VuYXJ5X29wZXJhdG9yPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmV0d2Vlbl9icmFja2V0c19pbl9hcnJheV90eXBlX3JlZmVyZW5jZT1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JldHdlZW5fZW1wdHlfYnJhY2VzX2luX2FycmF5X2luaXRpYWxpemVyPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmV0d2Vlbl9lbXB0eV9icmFja2V0c19pbl9hcnJheV9hbGxvY2F0aW9uX2V4cHJlc3Npb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZXR3ZWVuX2VtcHR5X3BhcmVuc19pbl9hbm5vdGF0aW9uX3R5cGVfbWVtYmVyX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmV0d2Vlbl9lbXB0eV9wYXJlbnNfaW5fY29uc3RydWN0b3JfZGVjbGFyYXRpb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZXR3ZWVuX2VtcHR5X3BhcmVuc19pbl9lbnVtX2NvbnN0YW50PWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmV0d2Vlbl9lbXB0eV9wYXJlbnNfaW5fbWV0aG9kX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmV0d2Vlbl9lbXB0eV9wYXJlbnNfaW5fbWV0aG9kX2ludm9jYXRpb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmpvaW5fbGluZXNfaW5fY29tbWVudHM9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmpvaW5fd3JhcHBlZF9saW5lcz10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIua2VlcF9lbHNlX3N0YXRlbWVudF9vbl9zYW1lX2xpbmU9ZmFsc2UKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5rZWVwX2VtcHR5X2FycmF5X2luaXRpYWxpemVyX29uX29uZV9saW5lPWZhbHNlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIua2VlcF9pbXBsZV9pZl9vbl9vbmVfbGluZT1mYWxzZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmtlZXBfdGhlbl9zdGF0ZW1lbnRfb25fc2FtZV9saW5lPWZhbHNlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIubGluZVNwbGl0PTgwCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIubmV2ZXJfaW5kZW50X2Jsb2NrX2NvbW1lbnRzX29uX2ZpcnN0X2NvbHVtbj1mYWxzZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLm5ldmVyX2luZGVudF9saW5lX2NvbW1lbnRzX29uX2ZpcnN0X2NvbHVtbj1mYWxzZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLm51bWJlcl9vZl9ibGFua19saW5lc19hdF9iZWdpbm5pbmdfb2ZfbWV0aG9kX2JvZHk9MAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLm51bWJlcl9vZl9lbXB0eV9saW5lc190b19wcmVzZXJ2ZT0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIucHV0X2VtcHR5X3N0YXRlbWVudF9vbl9uZXdfbGluZT10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIudGFidWxhdGlvbi5jaGFyPXRhYgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLnRhYnVsYXRpb24uc2l6ZT00CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIudXNlX29uX29mZl90YWdzPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci51c2VfdGFic19vbmx5X2Zvcl9sZWFkaW5nX2luZGVudGF0aW9ucz1mYWxzZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLndyYXBfYmVmb3JlX2JpbmFyeV9vcGVyYXRvcj10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIud3JhcF9iZWZvcmVfb3Jfb3BlcmF0b3JfbXVsdGljYXRjaD10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIud3JhcF9vdXRlcl9leHByZXNzaW9uc193aGVuX25lc3RlZD10cnVlCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzM2Y2NlCi0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcwpAQCAtMCwwICsxLDYxIEBACitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorZWRpdG9yX3NhdmVfcGFydGljaXBhbnRfb3JnLmVjbGlwc2UuamR0LnVpLnBvc3RzYXZlbGlzdGVuZXIuY2xlYW51cD10cnVlCitmb3JtYXR0ZXJfcHJvZmlsZT1fSkdpdCBGb3JtYXQKK2Zvcm1hdHRlcl9zZXR0aW5nc192ZXJzaW9uPTEyCitvcmcuZWNsaXBzZS5qZHQudWkuaWdub3JlbG93ZXJjYXNlbmFtZXM9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LnVpLmltcG9ydG9yZGVyPWphdmE7amF2YXg7b3JnO2NvbTsKK29yZy5lY2xpcHNlLmpkdC51aS5vbmRlbWFuZHRocmVzaG9sZD05OQorb3JnLmVjbGlwc2UuamR0LnVpLnN0YXRpY29uZGVtYW5kdGhyZXNob2xkPTk5CitvcmcuZWNsaXBzZS5qZHQudWkudGV4dC5jdXN0b21fY29kZV90ZW1wbGF0ZXM9PD94bWwgdmVyc2lvblw9IjEuMCIgZW5jb2RpbmdcPSJVVEYtOCI/Pjx0ZW1wbGF0ZXMvPgorc3BfY2xlYW51cC5hZGRfZGVmYXVsdF9zZXJpYWxfdmVyc2lvbl9pZD10cnVlCitzcF9jbGVhbnVwLmFkZF9nZW5lcmF0ZWRfc2VyaWFsX3ZlcnNpb25faWQ9ZmFsc2UKK3NwX2NsZWFudXAuYWRkX21pc3NpbmdfYW5ub3RhdGlvbnM9ZmFsc2UKK3NwX2NsZWFudXAuYWRkX21pc3NpbmdfZGVwcmVjYXRlZF9hbm5vdGF0aW9ucz10cnVlCitzcF9jbGVhbnVwLmFkZF9taXNzaW5nX21ldGhvZHM9ZmFsc2UKK3NwX2NsZWFudXAuYWRkX21pc3NpbmdfbmxzX3RhZ3M9ZmFsc2UKK3NwX2NsZWFudXAuYWRkX21pc3Npbmdfb3ZlcnJpZGVfYW5ub3RhdGlvbnM9dHJ1ZQorc3BfY2xlYW51cC5hZGRfbWlzc2luZ19vdmVycmlkZV9hbm5vdGF0aW9uc19pbnRlcmZhY2VfbWV0aG9kcz1mYWxzZQorc3BfY2xlYW51cC5hZGRfc2VyaWFsX3ZlcnNpb25faWQ9ZmFsc2UKK3NwX2NsZWFudXAuYWx3YXlzX3VzZV9ibG9ja3M9dHJ1ZQorc3BfY2xlYW51cC5hbHdheXNfdXNlX3BhcmVudGhlc2VzX2luX2V4cHJlc3Npb25zPWZhbHNlCitzcF9jbGVhbnVwLmFsd2F5c191c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19maWVsZF9hY2Nlc3M9ZmFsc2UKK3NwX2NsZWFudXAuYWx3YXlzX3VzZV90aGlzX2Zvcl9ub25fc3RhdGljX21ldGhvZF9hY2Nlc3M9ZmFsc2UKK3NwX2NsZWFudXAuY29udmVydF90b19lbmhhbmNlZF9mb3JfbG9vcD1mYWxzZQorc3BfY2xlYW51cC5jb3JyZWN0X2luZGVudGF0aW9uPWZhbHNlCitzcF9jbGVhbnVwLmZvcm1hdF9zb3VyY2VfY29kZT10cnVlCitzcF9jbGVhbnVwLmZvcm1hdF9zb3VyY2VfY29kZV9jaGFuZ2VzX29ubHk9dHJ1ZQorc3BfY2xlYW51cC5tYWtlX2xvY2FsX3ZhcmlhYmxlX2ZpbmFsPWZhbHNlCitzcF9jbGVhbnVwLm1ha2VfcGFyYW1ldGVyc19maW5hbD1mYWxzZQorc3BfY2xlYW51cC5tYWtlX3ByaXZhdGVfZmllbGRzX2ZpbmFsPXRydWUKK3NwX2NsZWFudXAubWFrZV90eXBlX2Fic3RyYWN0X2lmX21pc3NpbmdfbWV0aG9kPWZhbHNlCitzcF9jbGVhbnVwLm1ha2VfdmFyaWFibGVfZGVjbGFyYXRpb25zX2ZpbmFsPWZhbHNlCitzcF9jbGVhbnVwLm5ldmVyX3VzZV9ibG9ja3M9ZmFsc2UKK3NwX2NsZWFudXAubmV2ZXJfdXNlX3BhcmVudGhlc2VzX2luX2V4cHJlc3Npb25zPXRydWUKK3NwX2NsZWFudXAub25fc2F2ZV91c2VfYWRkaXRpb25hbF9hY3Rpb25zPXRydWUKK3NwX2NsZWFudXAub3JnYW5pemVfaW1wb3J0cz1mYWxzZQorc3BfY2xlYW51cC5xdWFsaWZ5X3N0YXRpY19maWVsZF9hY2Nlc3Nlc193aXRoX2RlY2xhcmluZ19jbGFzcz1mYWxzZQorc3BfY2xlYW51cC5xdWFsaWZ5X3N0YXRpY19tZW1iZXJfYWNjZXNzZXNfdGhyb3VnaF9pbnN0YW5jZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3M9dHJ1ZQorc3BfY2xlYW51cC5xdWFsaWZ5X3N0YXRpY19tZW1iZXJfYWNjZXNzZXNfdGhyb3VnaF9zdWJ0eXBlc193aXRoX2RlY2xhcmluZ19jbGFzcz10cnVlCitzcF9jbGVhbnVwLnF1YWxpZnlfc3RhdGljX21lbWJlcl9hY2Nlc3Nlc193aXRoX2RlY2xhcmluZ19jbGFzcz1mYWxzZQorc3BfY2xlYW51cC5xdWFsaWZ5X3N0YXRpY19tZXRob2RfYWNjZXNzZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3M9ZmFsc2UKK3NwX2NsZWFudXAucmVtb3ZlX3ByaXZhdGVfY29uc3RydWN0b3JzPXRydWUKK3NwX2NsZWFudXAucmVtb3ZlX3RyYWlsaW5nX3doaXRlc3BhY2VzPXRydWUKK3NwX2NsZWFudXAucmVtb3ZlX3RyYWlsaW5nX3doaXRlc3BhY2VzX2FsbD10cnVlCitzcF9jbGVhbnVwLnJlbW92ZV90cmFpbGluZ193aGl0ZXNwYWNlc19pZ25vcmVfZW1wdHk9ZmFsc2UKK3NwX2NsZWFudXAucmVtb3ZlX3VubmVjZXNzYXJ5X2Nhc3RzPWZhbHNlCitzcF9jbGVhbnVwLnJlbW92ZV91bm5lY2Vzc2FyeV9ubHNfdGFncz1mYWxzZQorc3BfY2xlYW51cC5yZW1vdmVfdW51c2VkX2ltcG9ydHM9ZmFsc2UKK3NwX2NsZWFudXAucmVtb3ZlX3VudXNlZF9sb2NhbF92YXJpYWJsZXM9ZmFsc2UKK3NwX2NsZWFudXAucmVtb3ZlX3VudXNlZF9wcml2YXRlX2ZpZWxkcz10cnVlCitzcF9jbGVhbnVwLnJlbW92ZV91bnVzZWRfcHJpdmF0ZV9tZW1iZXJzPWZhbHNlCitzcF9jbGVhbnVwLnJlbW92ZV91bnVzZWRfcHJpdmF0ZV9tZXRob2RzPXRydWUKK3NwX2NsZWFudXAucmVtb3ZlX3VudXNlZF9wcml2YXRlX3R5cGVzPXRydWUKK3NwX2NsZWFudXAuc29ydF9tZW1iZXJzPWZhbHNlCitzcF9jbGVhbnVwLnNvcnRfbWVtYmVyc19hbGw9ZmFsc2UKK3NwX2NsZWFudXAudXNlX2Jsb2Nrcz1mYWxzZQorc3BfY2xlYW51cC51c2VfYmxvY2tzX29ubHlfZm9yX3JldHVybl9hbmRfdGhyb3c9ZmFsc2UKK3NwX2NsZWFudXAudXNlX3BhcmVudGhlc2VzX2luX2V4cHJlc3Npb25zPWZhbHNlCitzcF9jbGVhbnVwLnVzZV90aGlzX2Zvcl9ub25fc3RhdGljX2ZpZWxkX2FjY2Vzcz1mYWxzZQorc3BfY2xlYW51cC51c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19maWVsZF9hY2Nlc3Nfb25seV9pZl9uZWNlc3Nhcnk9dHJ1ZQorc3BfY2xlYW51cC51c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19tZXRob2RfYWNjZXNzPWZhbHNlCitzcF9jbGVhbnVwLnVzZV90aGlzX2Zvcl9ub25fc3RhdGljX21ldGhvZF9hY2Nlc3Nfb25seV9pZl9uZWNlc3Nhcnk9dHJ1ZQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMvLnNldHRpbmdzL29yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLnByZWZzIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMvLnNldHRpbmdzL29yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkZWM0ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubXlseW4udGFza3MudWkucHJlZnMKQEAgLTAsMCArMSwzIEBACitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorcHJvamVjdC5yZXBvc2l0b3J5LmtpbmQ9YnVnemlsbGEKK3Byb2plY3QucmVwb3NpdG9yeS51cmw9aHR0cHNcOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubXlseW4udGVhbS51aS5wcmVmcyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5teWx5bi50ZWFtLnVpLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlN2EwZjAKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubXlseW4udGVhbS51aS5wcmVmcwpAQCAtMCwwICsxLDIgQEAKK2NvbW1pdC5jb21tZW50LnRlbXBsYXRlPSR7dGFzay5kZXNjcmlwdGlvbn0gXG5cbkJ1Z1w6ICR7dGFzay5rZXl9CitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5hcGkudG9vbHMucHJlZnMgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLmFwaS50b29scy5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjk0ZDRmCi0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5hcGkudG9vbHMucHJlZnMKQEAgLTAsMCArMSw5OCBAQAorQU5OT1RBVElPTl9FTEVNRU5UX1RZUEVfQURERURfTUVUSE9EX1dJVEhPVVRfREVGQVVMVF9WQUxVRT1FcnJvcgorQU5OT1RBVElPTl9FTEVNRU5UX1RZUEVfQ0hBTkdFRF9UWVBFX0NPTlZFUlNJT049RXJyb3IKK0FOTk9UQVRJT05fRUxFTUVOVF9UWVBFX1JFTU9WRURfRklFTEQ9RXJyb3IKK0FOTk9UQVRJT05fRUxFTUVOVF9UWVBFX1JFTU9WRURfTUVUSE9EPUVycm9yCitBTk5PVEFUSU9OX0VMRU1FTlRfVFlQRV9SRU1PVkVEX1RZUEVfTUVNQkVSPUVycm9yCitBUElfQ09NUE9ORU5UX0VMRU1FTlRfVFlQRV9SRU1PVkVEX0FQSV9UWVBFPUVycm9yCitBUElfQ09NUE9ORU5UX0VMRU1FTlRfVFlQRV9SRU1PVkVEX1JFRVhQT1JURURfQVBJX1RZUEU9RXJyb3IKK0FQSV9DT01QT05FTlRfRUxFTUVOVF9UWVBFX1JFTU9WRURfUkVFWFBPUlRFRF9UWVBFPUVycm9yCitBUElfQ09NUE9ORU5UX0VMRU1FTlRfVFlQRV9SRU1PVkVEX1RZUEU9RXJyb3IKK0FQSV9VU0VfU0NBTl9GSUVMRF9TRVZFUklUWT1FcnJvcgorQVBJX1VTRV9TQ0FOX01FVEhPRF9TRVZFUklUWT1FcnJvcgorQVBJX1VTRV9TQ0FOX1RZUEVfU0VWRVJJVFk9RXJyb3IKK0NMQVNTX0VMRU1FTlRfVFlQRV9BRERFRF9NRVRIT0Q9RXJyb3IKK0NMQVNTX0VMRU1FTlRfVFlQRV9BRERFRF9SRVNUUklDVElPTlM9RXJyb3IKK0NMQVNTX0VMRU1FTlRfVFlQRV9BRERFRF9UWVBFX1BBUkFNRVRFUj1FcnJvcgorQ0xBU1NfRUxFTUVOVF9UWVBFX0NIQU5HRURfQ09OVFJBQ1RFRF9TVVBFUklOVEVSRkFDRVNfU0VUPUVycm9yCitDTEFTU19FTEVNRU5UX1RZUEVfQ0hBTkdFRF9ERUNSRUFTRV9BQ0NFU1M9RXJyb3IKK0NMQVNTX0VMRU1FTlRfVFlQRV9DSEFOR0VEX05PTl9BQlNUUkFDVF9UT19BQlNUUkFDVD1FcnJvcgorQ0xBU1NfRUxFTUVOVF9UWVBFX0NIQU5HRURfTk9OX0ZJTkFMX1RPX0ZJTkFMPUVycm9yCitDTEFTU19FTEVNRU5UX1RZUEVfQ0hBTkdFRF9UWVBFX0NPTlZFUlNJT049RXJyb3IKK0NMQVNTX0VMRU1FTlRfVFlQRV9SRU1PVkVEX0NPTlNUUlVDVE9SPUVycm9yCitDTEFTU19FTEVNRU5UX1RZUEVfUkVNT1ZFRF9GSUVMRD1FcnJvcgorQ0xBU1NfRUxFTUVOVF9UWVBFX1JFTU9WRURfTUVUSE9EPUVycm9yCitDTEFTU19FTEVNRU5UX1RZUEVfUkVNT1ZFRF9TVVBFUkNMQVNTPUVycm9yCitDTEFTU19FTEVNRU5UX1RZUEVfUkVNT1ZFRF9UWVBFX01FTUJFUj1FcnJvcgorQ0xBU1NfRUxFTUVOVF9UWVBFX1JFTU9WRURfVFlQRV9QQVJBTUVURVI9RXJyb3IKK0NPTlNUUlVDVE9SX0VMRU1FTlRfVFlQRV9BRERFRF9UWVBFX1BBUkFNRVRFUj1FcnJvcgorQ09OU1RSVUNUT1JfRUxFTUVOVF9UWVBFX0NIQU5HRURfREVDUkVBU0VfQUNDRVNTPUVycm9yCitDT05TVFJVQ1RPUl9FTEVNRU5UX1RZUEVfQ0hBTkdFRF9WQVJBUkdTX1RPX0FSUkFZPUVycm9yCitDT05TVFJVQ1RPUl9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9UWVBFX1BBUkFNRVRFUj1FcnJvcgorRU5VTV9FTEVNRU5UX1RZUEVfQ0hBTkdFRF9DT05UUkFDVEVEX1NVUEVSSU5URVJGQUNFU19TRVQ9RXJyb3IKK0VOVU1fRUxFTUVOVF9UWVBFX0NIQU5HRURfVFlQRV9DT05WRVJTSU9OPUVycm9yCitFTlVNX0VMRU1FTlRfVFlQRV9SRU1PVkVEX0VOVU1fQ09OU1RBTlQ9RXJyb3IKK0VOVU1fRUxFTUVOVF9UWVBFX1JFTU9WRURfRklFTEQ9RXJyb3IKK0VOVU1fRUxFTUVOVF9UWVBFX1JFTU9WRURfTUVUSE9EPUVycm9yCitFTlVNX0VMRU1FTlRfVFlQRV9SRU1PVkVEX1RZUEVfTUVNQkVSPUVycm9yCitGSUVMRF9FTEVNRU5UX1RZUEVfQURERURfVkFMVUU9RXJyb3IKK0ZJRUxEX0VMRU1FTlRfVFlQRV9DSEFOR0VEX0RFQ1JFQVNFX0FDQ0VTUz1FcnJvcgorRklFTERfRUxFTUVOVF9UWVBFX0NIQU5HRURfRklOQUxfVE9fTk9OX0ZJTkFMX1NUQVRJQ19DT05TVEFOVD1FcnJvcgorRklFTERfRUxFTUVOVF9UWVBFX0NIQU5HRURfTk9OX0ZJTkFMX1RPX0ZJTkFMPUVycm9yCitGSUVMRF9FTEVNRU5UX1RZUEVfQ0hBTkdFRF9OT05fU1RBVElDX1RPX1NUQVRJQz1FcnJvcgorRklFTERfRUxFTUVOVF9UWVBFX0NIQU5HRURfU1RBVElDX1RPX05PTl9TVEFUSUM9RXJyb3IKK0ZJRUxEX0VMRU1FTlRfVFlQRV9DSEFOR0VEX1RZUEU9RXJyb3IKK0ZJRUxEX0VMRU1FTlRfVFlQRV9DSEFOR0VEX1ZBTFVFPUVycm9yCitGSUVMRF9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9UWVBFX0FSR1VNRU5UPUVycm9yCitGSUVMRF9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9WQUxVRT1FcnJvcgorSUxMRUdBTF9FWFRFTkQ9V2FybmluZworSUxMRUdBTF9JTVBMRU1FTlQ9V2FybmluZworSUxMRUdBTF9JTlNUQU5USUFURT1XYXJuaW5nCitJTExFR0FMX09WRVJSSURFPVdhcm5pbmcKK0lMTEVHQUxfUkVGRVJFTkNFPVdhcm5pbmcKK0lOVEVSRkFDRV9FTEVNRU5UX1RZUEVfQURERURfRklFTEQ9RXJyb3IKK0lOVEVSRkFDRV9FTEVNRU5UX1RZUEVfQURERURfTUVUSE9EPUVycm9yCitJTlRFUkZBQ0VfRUxFTUVOVF9UWVBFX0FEREVEX1JFU1RSSUNUSU9OUz1FcnJvcgorSU5URVJGQUNFX0VMRU1FTlRfVFlQRV9BRERFRF9TVVBFUl9JTlRFUkZBQ0VfV0lUSF9NRVRIT0RTPUVycm9yCitJTlRFUkZBQ0VfRUxFTUVOVF9UWVBFX0FEREVEX1RZUEVfUEFSQU1FVEVSPUVycm9yCitJTlRFUkZBQ0VfRUxFTUVOVF9UWVBFX0NIQU5HRURfQ09OVFJBQ1RFRF9TVVBFUklOVEVSRkFDRVNfU0VUPUVycm9yCitJTlRFUkZBQ0VfRUxFTUVOVF9UWVBFX0NIQU5HRURfVFlQRV9DT05WRVJTSU9OPUVycm9yCitJTlRFUkZBQ0VfRUxFTUVOVF9UWVBFX1JFTU9WRURfRklFTEQ9RXJyb3IKK0lOVEVSRkFDRV9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9NRVRIT0Q9RXJyb3IKK0lOVEVSRkFDRV9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9UWVBFX01FTUJFUj1FcnJvcgorSU5URVJGQUNFX0VMRU1FTlRfVFlQRV9SRU1PVkVEX1RZUEVfUEFSQU1FVEVSPUVycm9yCitJTlZBTElEX0FOTk9UQVRJT049SWdub3JlCitJTlZBTElEX0pBVkFET0NfVEFHPUlnbm9yZQorSU5WQUxJRF9SRUZFUkVOQ0VfSU5fU1lTVEVNX0xJQlJBUklFUz1FcnJvcgorTEVBS19FWFRFTkQ9V2FybmluZworTEVBS19GSUVMRF9ERUNMPVdhcm5pbmcKK0xFQUtfSU1QTEVNRU5UPVdhcm5pbmcKK0xFQUtfTUVUSE9EX1BBUkFNPVdhcm5pbmcKK0xFQUtfTUVUSE9EX1JFVFVSTl9UWVBFPVdhcm5pbmcKK01FVEhPRF9FTEVNRU5UX1RZUEVfQURERURfUkVTVFJJQ1RJT05TPUVycm9yCitNRVRIT0RfRUxFTUVOVF9UWVBFX0FEREVEX1RZUEVfUEFSQU1FVEVSPUVycm9yCitNRVRIT0RfRUxFTUVOVF9UWVBFX0NIQU5HRURfREVDUkVBU0VfQUNDRVNTPUVycm9yCitNRVRIT0RfRUxFTUVOVF9UWVBFX0NIQU5HRURfTk9OX0FCU1RSQUNUX1RPX0FCU1RSQUNUPUVycm9yCitNRVRIT0RfRUxFTUVOVF9UWVBFX0NIQU5HRURfTk9OX0ZJTkFMX1RPX0ZJTkFMPUVycm9yCitNRVRIT0RfRUxFTUVOVF9UWVBFX0NIQU5HRURfTk9OX1NUQVRJQ19UT19TVEFUSUM9RXJyb3IKK01FVEhPRF9FTEVNRU5UX1RZUEVfQ0hBTkdFRF9TVEFUSUNfVE9fTk9OX1NUQVRJQz1FcnJvcgorTUVUSE9EX0VMRU1FTlRfVFlQRV9DSEFOR0VEX1ZBUkFSR1NfVE9fQVJSQVk9RXJyb3IKK01FVEhPRF9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9BTk5PVEFUSU9OX0RFRkFVTFRfVkFMVUU9RXJyb3IKK01FVEhPRF9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9UWVBFX1BBUkFNRVRFUj1FcnJvcgorTUlTU0lOR19FRV9ERVNDUklQVElPTlM9RXJyb3IKK1RZUEVfUEFSQU1FVEVSX0VMRU1FTlRfVFlQRV9BRERFRF9DTEFTU19CT1VORD1FcnJvcgorVFlQRV9QQVJBTUVURVJfRUxFTUVOVF9UWVBFX0FEREVEX0lOVEVSRkFDRV9CT1VORD1FcnJvcgorVFlQRV9QQVJBTUVURVJfRUxFTUVOVF9UWVBFX0NIQU5HRURfQ0xBU1NfQk9VTkQ9RXJyb3IKK1RZUEVfUEFSQU1FVEVSX0VMRU1FTlRfVFlQRV9DSEFOR0VEX0lOVEVSRkFDRV9CT1VORD1FcnJvcgorVFlQRV9QQVJBTUVURVJfRUxFTUVOVF9UWVBFX1JFTU9WRURfQ0xBU1NfQk9VTkQ9RXJyb3IKK1RZUEVfUEFSQU1FVEVSX0VMRU1FTlRfVFlQRV9SRU1PVkVEX0lOVEVSRkFDRV9CT1VORD1FcnJvcgorVU5VU0VEX1BST0JMRU1fRklMVEVSUz1XYXJuaW5nCithdXRvbWF0aWNhbGx5X3JlbW92ZWRfdW51c2VkX3Byb2JsZW1fZmlsdGVycz1mYWxzZQorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK2luY29tcGF0aWJsZV9hcGlfY29tcG9uZW50X3ZlcnNpb249RXJyb3IKK2luY29tcGF0aWJsZV9hcGlfY29tcG9uZW50X3ZlcnNpb25faW5jbHVkZV9tYWpvcl93aXRob3V0X2JyZWFraW5nX2NoYW5nZT1EaXNhYmxlZAoraW5jb21wYXRpYmxlX2FwaV9jb21wb25lbnRfdmVyc2lvbl9pbmNsdWRlX21pbm9yX3dpdGhvdXRfYXBpX2NoYW5nZT1EaXNhYmxlZAoraW52YWxpZF9zaW5jZV90YWdfdmVyc2lvbj1FcnJvcgorbWFsZm9ybWVkX3NpbmNlX3RhZz1FcnJvcgorbWlzc2luZ19zaW5jZV90YWc9RXJyb3IKK3JlcG9ydF9hcGlfYnJlYWthZ2Vfd2hlbl9tYWpvcl92ZXJzaW9uX2luY3JlbWVudGVkPURpc2FibGVkCityZXBvcnRfcmVzb2x1dGlvbl9lcnJvcnNfYXBpX2NvbXBvbmVudD1XYXJuaW5nCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLmNvcmUucHJlZnMgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLmNvcmUucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTIzYzM3ZgotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUuY29yZS5wcmVmcwpAQCAtMCwwICsxLDIgQEAKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCityZXNvbHZlLnJlcXVpcmVidW5kbGU9ZmFsc2UKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzL0JVQ0sgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy9CVUNLCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkYjNhMTAKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy9CVUNLCkBAIC0wLDAgKzEsMTcgQEAKK1NSQ1MgPSBnbG9iKFsnc3JjLyoqJ10pCitSRVNPVVJDRVMgPSBnbG9iKFsncmVzb3VyY2VzLyoqJ10pCisKK2phdmFfbGlicmFyeSgKKyAgbmFtZSA9ICdqZ2l0LWxmcycsCisgIHNyY3MgPSBTUkNTLAorICByZXNvdXJjZXMgPSBSRVNPVVJDRVMsCisgIGRlcHMgPSBbCisgICAgJy8vb3JnLmVjbGlwc2UuamdpdDpqZ2l0JworICBdLAorICB2aXNpYmlsaXR5ID0gWydQVUJMSUMnXSwKKykKKworamF2YV9zb3VyY2VzKAorICBuYW1lID0gJ2pnaXQtbGZzX3NyYycsCisgIHNyY3MgPSBTUkNTICsgUkVTT1VSQ0VTLAorKQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy9NRVRBLUlORi9NQU5JRkVTVC5NRgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTFmZDdiCi0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTAsMCArMSwxNSBAQAorTWFuaWZlc3QtVmVyc2lvbjogMS4wCitCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCitCdW5kbGUtTmFtZTogJXBsdWdpbl9uYW1lCitCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qZ2l0LmxmcworQnVuZGxlLVZlcnNpb246IDQuMy4wLnF1YWxpZmllcgorQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCitCdW5kbGUtVmVuZG9yOiAlcHJvdmlkZXJfbmFtZQorRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmpnaXQubGZzLmVycm9yczt2ZXJzaW9uPSI0LjMuMCIsCisgb3JnLmVjbGlwc2UuamdpdC5sZnMuaW50ZXJuYWw7dmVyc2lvbj0iNC4zLjAiO3gtZnJpZW5kczo9Im9yZy5lY2xpcHNlLmpnaXQubGZzLnRlc3QiLAorIG9yZy5lY2xpcHNlLmpnaXQubGZzLmxpYjt2ZXJzaW9uPSI0LjMuMCIKK0J1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKYXZhU0UtMS43CitJbXBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLmZpbGU7dmVyc2lvbj0iWzQuMy4wLDQuNC4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5saWI7dmVyc2lvbj0iWzQuMy4wLDQuNC4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5ubHM7dmVyc2lvbj0iWzQuMy4wLDQuNC4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC51dGlsO3ZlcnNpb249Ils0LjMuMCw0LjQuMCkiCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy9hYm91dC5odG1sIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMvYWJvdXQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjFlNjJkCi0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMvYWJvdXQuaHRtbApAQCAtMCwwICsxLDU5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0xIiA/PgorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgorPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgorCis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiIC8+Cis8dGl0bGU+RWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSAtIFZlcnNpb24gMS4wPC90aXRsZT4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CisgIGJvZHkgeworICAgIHNpemU6IDguNWluIDExLjBpbjsKKyAgICBtYXJnaW46IDAuMjVpbiAwLjVpbiAwLjI1aW4gMC41aW47CisgICAgdGFiLWludGVydmFsOiAwLjVpbjsKKyAgICB9CisgIHAgeworICAgIG1hcmdpbi1sZWZ0OiBhdXRvOworICAgIG1hcmdpbi10b3A6ICAwLjVlbTsKKyAgICBtYXJnaW4tYm90dG9tOiAwLjVlbTsKKyAgICB9CisgIHAubGlzdCB7CisgIAltYXJnaW4tbGVmdDogMC41aW47CisgICAgbWFyZ2luLXRvcDogIDAuMDVlbTsKKyAgICBtYXJnaW4tYm90dG9tOiAwLjA1ZW07CisgICAgfQorICA8L3N0eWxlPgorCis8L2hlYWQ+CisKKzxib2R5IGxhbmc9IkVOLVVTIj4KKworPHA+PGI+RWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSAtIHYgMS4wPC9iPjwvcD4KKworPHA+Q29weXJpZ2h0IChjKSAyMDA3LCBFY2xpcHNlIEZvdW5kYXRpb24sIEluYy4gYW5kIGl0cyBsaWNlbnNvcnMuIDwvcD4KKworPHA+QWxsIHJpZ2h0cyByZXNlcnZlZC48L3A+Cis8cD5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorCWFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKzx1bD48bGk+UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorCXRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIDwvbGk+Cis8bGk+UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorCXRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKwlhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gPC9saT4KKzxsaT5OZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKwljb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorCXRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIDwvbGk+PC91bD4KKzwvcD4KKzxwPlRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECitXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCitJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCitJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCitOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCitQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKK1dIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKK0FSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCitQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS48L3A+CisKKzwvYm9keT4KKworPC9odG1sPgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMvYnVpbGQucHJvcGVydGllcyBiL29yZy5lY2xpcHNlLmpnaXQubGZzL2J1aWxkLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE0ODI3MQotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQubGZzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTAsMCArMSw3IEBACitzb3VyY2UuLiA9IHNyYy8sXAorICAgICAgICAgICByZXNvdXJjZXMvCitvdXRwdXQuLiA9IGJpbi8KK2Jpbi5pbmNsdWRlcyA9IE1FVEEtSU5GLyxcCisgICAgICAgICAgICAgICAuLFwKKyAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIGFib3V0Lmh0bWwKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzL3BsdWdpbi5wcm9wZXJ0aWVzIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMvcGx1Z2luLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2MyMmRkYgotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQubGZzL3BsdWdpbi5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMiBAQAorcGx1Z2luX25hbWU9SkdpdCBMYXJnZSBGaWxlIFN0b3JhZ2UKK3Byb3ZpZGVyX25hbWU9RWNsaXBzZSBKR2l0CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy9wb20ueG1sIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmVlNGNhCi0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMvcG9tLnhtbApAQCAtMCwwICsxLDE0MCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0KKyAgIENvcHlyaWdodCAoQykgMjAxNSwgTWF0dGhpYXMgU29obiA8bWF0dGhpYXMuc29obkBzYXAuY29tPgorICAgYW5kIG90aGVyIGNvcHlyaWdodCBvd25lcnMgYXMgZG9jdW1lbnRlZCBpbiB0aGUgcHJvamVjdCdzIElQIGxvZy4KKworICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUKKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2MS4wIHdoaWNoCisgICBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgaXMgcmVwcm9kdWNlZCBiZWxvdywgYW5kIGlzCisgICBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VkbC12MTAucGhwCisKKyAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICAgY29uZGl0aW9ucyBhcmUgbWV0OgorCisgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAgIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCBJbmMuIG5vciB0aGUKKyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKKyAgICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgorICAgICB3cml0dGVuIHBlcm1pc3Npb24uCisKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORAorICAgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKyAgIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgICBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgorICAgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgICBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAgIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICAgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAgIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGCisgICBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKy0tPgorCis8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvbWF2ZW4tdjRfMF8wLnhzZCI+CisgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKworICA8cGFyZW50PgorICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CisgICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC1wYXJlbnQ8L2FydGlmYWN0SWQ+CisgICAgPHZlcnNpb24+NC4zLjAtU05BUFNIT1Q8L3ZlcnNpb24+CisgIDwvcGFyZW50PgorCisgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQubGZzPC9hcnRpZmFjdElkPgorICA8bmFtZT5KR2l0IC0gTGFyZ2UgRmlsZSBTdG9yYWdlPC9uYW1lPgorCisgIDxkZXNjcmlwdGlvbj4KKyAgICBKR2l0IExhcmdlIEZpbGUgU3RvcmFnZSAoTEZTKSBpbXBsZW1lbnRhdGlvbi4KKyAgPC9kZXNjcmlwdGlvbj4KKworICA8cHJvcGVydGllcz4KKyAgICA8dHJhbnNsYXRlLXF1YWxpZmllci8+CisgIDwvcHJvcGVydGllcz4KKworICA8ZGVwZW5kZW5jaWVzPgorICAgIDxkZXBlbmRlbmN5PgorICAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KKyAgICAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQ8L2FydGlmYWN0SWQ+CisgICAgICA8dmVyc2lvbj4ke3Byb2plY3QudmVyc2lvbn08L3ZlcnNpb24+CisgICAgPC9kZXBlbmRlbmN5PgorICA8L2RlcGVuZGVuY2llcz4KKyAgPGJ1aWxkPgorICAgIDxzb3VyY2VEaXJlY3Rvcnk+c3JjLzwvc291cmNlRGlyZWN0b3J5PgorCisgICAgPHJlc291cmNlcz4KKyAgICAgIDxyZXNvdXJjZT4KKyAgICAgICAgPGRpcmVjdG9yeT4uPC9kaXJlY3Rvcnk+CisgICAgICAgIDxpbmNsdWRlcz4KKyAgICAgICAgICA8aW5jbHVkZT5wbHVnaW4ucHJvcGVydGllczwvaW5jbHVkZT4KKyAgICAgICAgICA8aW5jbHVkZT5hYm91dC5odG1sPC9pbmNsdWRlPgorICAgICAgICA8L2luY2x1ZGVzPgorICAgICAgPC9yZXNvdXJjZT4KKyAgICAgIDxyZXNvdXJjZT4KKyAgICAgICAgPGRpcmVjdG9yeT5yZXNvdXJjZXMvPC9kaXJlY3Rvcnk+CisgICAgICA8L3Jlc291cmNlPgorICAgIDwvcmVzb3VyY2VzPgorCisgICAgPHBsdWdpbnM+CisgICAgICA8cGx1Z2luPgorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+CisgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXNvdXJjZS1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgIDxpbmhlcml0ZWQ+dHJ1ZTwvaW5oZXJpdGVkPgorICAgICAgICA8ZXhlY3V0aW9ucz4KKyAgICAgICAgICA8ZXhlY3V0aW9uPgorICAgICAgICAgICAgPGlkPmF0dGFjaC1zb3VyY2VzPC9pZD4KKyAgICAgICAgICAgIDxwaGFzZT5wcm9jZXNzLWNsYXNzZXM8L3BoYXNlPgorICAgICAgICAgICAgPGdvYWxzPgorICAgICAgICAgICAgICA8Z29hbD5qYXI8L2dvYWw+CisgICAgICAgICAgICA8L2dvYWxzPgorICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgIDxhcmNoaXZlPgorICAgICAgICAgICAgICAgIDxtYW5pZmVzdEZpbGU+JHtzb3VyY2UtYnVuZGxlLW1hbmlmZXN0fTwvbWFuaWZlc3RGaWxlPgorICAgICAgICAgICAgICA8L2FyY2hpdmU+CisgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgPC9leGVjdXRpb24+CisgICAgICAgIDwvZXhlY3V0aW9ucz4KKyAgICAgIDwvcGx1Z2luPgorCisgICAgICA8cGx1Z2luPgorICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1qYXItcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICA8YXJjaGl2ZT4KKyAgICAgICAgICAgIDxtYW5pZmVzdEZpbGU+JHtidW5kbGUtbWFuaWZlc3R9PC9tYW5pZmVzdEZpbGU+CisgICAgICAgICAgPC9hcmNoaXZlPgorICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICA8L3BsdWdpbj4KKworICAgICAgPHBsdWdpbj4KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmNvZGVoYXVzLm1vam88L2dyb3VwSWQ+CisgICAgICAgIDxhcnRpZmFjdElkPmNsaXJyLW1hdmVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgIDwvcGx1Z2luPgorICAgIDwvcGx1Z2lucz4KKyAgPC9idWlsZD4KKworICA8cmVwb3J0aW5nPgorICAgIDxwbHVnaW5zPgorICAgICAgPHBsdWdpbj4KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmNvZGVoYXVzLm1vam88L2dyb3VwSWQ+CisgICAgICAgIDxhcnRpZmFjdElkPmNsaXJyLW1hdmVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+JHtjbGlyci12ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgPGNvbXBhcmlzb25WZXJzaW9uPiR7amdpdC1sYXN0LXJlbGVhc2UtdmVyc2lvbn08L2NvbXBhcmlzb25WZXJzaW9uPgorICAgICAgICAgIDxtaW5TZXZlcml0eT5pbmZvPC9taW5TZXZlcml0eT4KKyAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgPC9wbHVnaW4+CisgICAgPC9wbHVnaW5zPgorICA8L3JlcG9ydGluZz4KKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzL3Jlc291cmNlcy9vcmcvZWNsaXBzZS9qZ2l0L2xmcy9pbnRlcm5hbC9MZnNUZXh0LnByb3BlcnRpZXMgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy9yZXNvdXJjZXMvb3JnL2VjbGlwc2UvamdpdC9sZnMvaW50ZXJuYWwvTGZzVGV4dC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwMGUyZDUKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy9yZXNvdXJjZXMvb3JnL2VjbGlwc2UvamdpdC9sZnMvaW50ZXJuYWwvTGZzVGV4dC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNCBAQAoraW5jb3JyZWN0TE9OR19PQkpFQ1RfSURfTEVOR1RIPUluY29ycmVjdCBMT05HX09CSkVDVF9JRF9MRU5HVEguCitpbnZhbGlkTG9uZ0lkPUludmFsaWQgaWQ6IHswfQoraW52YWxpZExvbmdJZExlbmd0aD1JbnZhbGlkIGlkIGxlbmd0aCB7MH07IHNob3VsZCBiZSB7MX0KK3JlcXVpcmVkSGFzaEZ1bmN0aW9uTm90QXZhaWxhYmxlPVJlcXVpcmVkIGhhc2ggZnVuY3Rpb24gezB9IG5vdCBhdmFpbGFibGUuClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGZzL2Vycm9ycy9Db3JydXB0TG9uZ09iamVjdEV4Y2VwdGlvbi5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGZzL2Vycm9ycy9Db3JydXB0TG9uZ09iamVjdEV4Y2VwdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlYTE0OGIKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy9zcmMvb3JnL2VjbGlwc2UvamdpdC9sZnMvZXJyb3JzL0NvcnJ1cHRMb25nT2JqZWN0RXhjZXB0aW9uLmphdmEKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSwgTWF0dGhpYXMgU29obiA8bWF0dGhpYXMuc29obkBzYXAuY29tPgorICogYW5kIG90aGVyIGNvcHlyaWdodCBvd25lcnMgYXMgZG9jdW1lbnRlZCBpbiB0aGUgcHJvamVjdCdzIElQIGxvZy4KKyAqCisgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZQorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYxLjAgd2hpY2gKKyAqIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBpcyByZXByb2R1Y2VkIGJlbG93LCBhbmQgaXMKKyAqIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZWRsLXYxMC5waHAKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAqICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCBJbmMuIG5vciB0aGUKKyAqICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKKyAqICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgorICogICB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5ECisgKiBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAorICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYKKyAqIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK3BhY2thZ2Ugb3JnLmVjbGlwc2UuamdpdC5sZnMuZXJyb3JzOworCitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5sZnMubGliLkFueUxvbmdPYmplY3RJZDsKKworLyoqCisgKiBUaHJvd24gd2hlbiBhbiBvYmplY3QgaWQgaXMgZ2l2ZW4gdGhhdCBkb2Vzbid0IG1hdGNoIHRoZSBoYXNoIG9mIHRoZSBvYmplY3QncworICogY29udGVudAorICoKKyAqIEBzaW5jZSA0LjMKKyAqLworcHVibGljIGNsYXNzIENvcnJ1cHRMb25nT2JqZWN0RXhjZXB0aW9uIGV4dGVuZHMgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIHsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOworCisJcHJpdmF0ZSBmaW5hbCBBbnlMb25nT2JqZWN0SWQgaWQ7CisKKwlwcml2YXRlIGZpbmFsIEFueUxvbmdPYmplY3RJZCBjb250ZW50SGFzaDsKKworCS8qKgorCSAqIENvcnJ1cHQgbG9uZyBvYmplY3QgZGV0ZWN0ZWQuCisJICoKKwkgKiBAcGFyYW0gaWQKKwkgKiAgICAgICAgICAgIGlkIG9mIHRoZSBsb25nIG9iamVjdAorCSAqIEBwYXJhbSBjb250ZW50SGFzaAorCSAqICAgICAgICAgICAgaGFzaCBvZiB0aGUgbG9uZyBvYmplY3QncyBjb250ZW50CisJICoKKwkgKiBAcGFyYW0gbWVzc2FnZQorCSAqLworCXB1YmxpYyBDb3JydXB0TG9uZ09iamVjdEV4Y2VwdGlvbihBbnlMb25nT2JqZWN0SWQgaWQsCisJCQlBbnlMb25nT2JqZWN0SWQgY29udGVudEhhc2gsCisJCQlTdHJpbmcgbWVzc2FnZSkgeworCQlzdXBlcihtZXNzYWdlKTsKKwkJdGhpcy5pZCA9IGlkOworCQl0aGlzLmNvbnRlbnRIYXNoID0gY29udGVudEhhc2g7CisJfQorCisJLyoqCisJICogQHJldHVybiB0aGUgaWQgb2YgdGhlIG9iamVjdCwgaS5lLiB0aGUgZXhwZWN0ZWQgaGFzaCBvZiB0aGUgb2JqZWN0J3MKKwkgKiAgICAgICAgIGNvbnRlbnQKKwkgKi8KKwlwdWJsaWMgQW55TG9uZ09iamVjdElkIGdldElkKCkgeworCQlyZXR1cm4gaWQ7CisJfQorCisJLyoqCisJICogQHJldHVybiB0aGUgYWN0dWFsIGhhc2ggb2YgdGhlIG9iamVjdCdzIGNvbnRlbnQgd2hpY2ggZG9lc24ndCBtYXRjaCB0aGUKKwkgKiAgICAgICAgIG9iamVjdCdzIGlkIHdoZW4gdGhpcyBleGNlcHRpb24gaXMgdGhyb3duIHdoaWNoIHNpZ25hbHMgdGhhdCB0aGUKKwkgKiAgICAgICAgIG9iamVjdCBoYXMgYmVlbiBjb3JydXB0ZWQKKwkgKi8KKwlwdWJsaWMgQW55TG9uZ09iamVjdElkIGdldENvbnRlbnRIYXNoKCkgeworCQlyZXR1cm4gY29udGVudEhhc2g7CisJfQorfQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGZzL2Vycm9ycy9JbnZhbGlkTG9uZ09iamVjdElkRXhjZXB0aW9uLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy9zcmMvb3JnL2VjbGlwc2UvamdpdC9sZnMvZXJyb3JzL0ludmFsaWRMb25nT2JqZWN0SWRFeGNlcHRpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjZlMmQxCi0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGZzL2Vycm9ycy9JbnZhbGlkTG9uZ09iamVjdElkRXhjZXB0aW9uLmphdmEKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgSm9uYXMgRm9uc2VjYSA8Zm9uc2VjYUBkaWt1LmRrPgorICogQ29weXJpZ2h0IChDKSAyMDA3LCBSb2JpbiBSb3NlbmJlcmcgPHJvYmluLnJvc2VuYmVyZ0BkZXdpcmUuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA4LCBTaGF3biBPLiBQZWFyY2UgPHNwZWFyY2VAc3BlYXJjZS5vcmc+CisgKiBhbmQgb3RoZXIgY29weXJpZ2h0IG93bmVycyBhcyBkb2N1bWVudGVkIGluIHRoZSBwcm9qZWN0J3MgSVAgbG9nLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlCisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgRGlzdHJpYnV0aW9uIExpY2Vuc2UgdjEuMCB3aGljaAorICogYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGlzIHJlcHJvZHVjZWQgYmVsb3csIGFuZCBpcworICogYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lZGwtdjEwLnBocAorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIEluYy4gbm9yIHRoZQorICogICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorICogICBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCisgKiAgIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQKKyAqIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCisgKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRgorICogQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworcGFja2FnZSBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5lcnJvcnM7CisKK2ltcG9ydCBqYXZhLmlvLlVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb247CitpbXBvcnQgamF2YS50ZXh0Lk1lc3NhZ2VGb3JtYXQ7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5pbnRlcm5hbC5MZnNUZXh0OworCisvKioKKyAqIFRocm93biB3aGVuIGFuIGludmFsaWQgbG9uZyBvYmplY3QgaWQgaXMgcGFzc2VkIGluIGFzIGFuIGFyZ3VtZW50LgorICoKKyAqIEBzaW5jZSA0LjMKKyAqLworcHVibGljIGNsYXNzIEludmFsaWRMb25nT2JqZWN0SWRFeGNlcHRpb24gZXh0ZW5kcyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24geworCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOworCisJLyoqCisJICogQ3JlYXRlIGV4Y2VwdGlvbiB3aXRoIGJ5dGVzIG9mIHRoZSBpbnZhbGlkIG9iamVjdCBpZC4KKwkgKgorCSAqIEBwYXJhbSBieXRlcyBjb250YWluaW5nIHRoZSBpbnZhbGlkIGlkLgorCSAqIEBwYXJhbSBvZmZzZXQgaW4gdGhlIGJ5dGUgYXJyYXkgd2hlcmUgdGhlIGVycm9yIG9jY3VycmVkLgorCSAqIEBwYXJhbSBsZW5ndGggb2YgdGhlIHNlcXVlbmNlIG9mIGludmFsaWQgYnl0ZXMuCisJICovCisJcHVibGljIEludmFsaWRMb25nT2JqZWN0SWRFeGNlcHRpb24oYnl0ZVtdIGJ5dGVzLCBpbnQgb2Zmc2V0LCBpbnQgbGVuZ3RoKSB7CisJCXN1cGVyKE1lc3NhZ2VGb3JtYXQuZm9ybWF0KExmc1RleHQuZ2V0KCkuaW52YWxpZExvbmdJZCwKKwkJCQlhc0FzY2lpKGJ5dGVzLCBvZmZzZXQsIGxlbmd0aCkpKTsKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0gaWRTdHJpbmcKKwkgKiAgICAgICAgICAgIFN0cmluZyBjb250YWluaW5nIHRoZSBpbnZhbGlkIGlkCisJICovCisJcHVibGljIEludmFsaWRMb25nT2JqZWN0SWRFeGNlcHRpb24oU3RyaW5nIGlkU3RyaW5nKSB7CisJCXN1cGVyKE1lc3NhZ2VGb3JtYXQuZm9ybWF0KExmc1RleHQuZ2V0KCkuaW52YWxpZExvbmdJZCwgaWRTdHJpbmcpKTsKKwl9CisKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgYXNBc2NpaShieXRlW10gYnl0ZXMsIGludCBvZmZzZXQsIGludCBsZW5ndGgpIHsKKwkJdHJ5IHsKKwkJCXJldHVybiAiOiAiICsgbmV3IFN0cmluZyhieXRlcywgb2Zmc2V0LCBsZW5ndGgsICJVUy1BU0NJSSIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJfSBjYXRjaCAoVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiBlMikgeworCQkJcmV0dXJuICIiOyAvLyROT04tTkxTLTEkCisJCX0gY2F0Y2ggKFN0cmluZ0luZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gZTIpIHsKKwkJCXJldHVybiAiIjsgLy8kTk9OLU5MUy0xJAorCQl9CisJfQorfQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGZzL2ludGVybmFsL0xmc1RleHQuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQubGZzL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xmcy9pbnRlcm5hbC9MZnNUZXh0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFmZmNjOQotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQubGZzL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xmcy9pbnRlcm5hbC9MZnNUZXh0LmphdmEKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSwgTWF0dGhpYXMgU29obiA8bWF0dGhpYXMuc29obkBzYXAuY29tPgorICogYW5kIG90aGVyIGNvcHlyaWdodCBvd25lcnMgYXMgZG9jdW1lbnRlZCBpbiB0aGUgcHJvamVjdCdzIElQIGxvZy4KKyAqCisgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZQorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYxLjAgd2hpY2gKKyAqIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBpcyByZXByb2R1Y2VkIGJlbG93LCBhbmQgaXMKKyAqIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZWRsLXYxMC5waHAKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAqICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCBJbmMuIG5vciB0aGUKKyAqICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKKyAqICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgorICogICB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5ECisgKiBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAorICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYKKyAqIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCitwYWNrYWdlIG9yZy5lY2xpcHNlLmpnaXQubGZzLmludGVybmFsOworCitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5ubHMuTkxTOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubmxzLlRyYW5zbGF0aW9uQnVuZGxlOworCisvKioKKyAqIFRyYW5zbGF0aW9uIGJ1bmRsZSBmb3IgSkdpdCBMRlMgc2VydmVyCisgKi8KK3B1YmxpYyBjbGFzcyBMZnNUZXh0IGV4dGVuZHMgVHJhbnNsYXRpb25CdW5kbGUgeworCisJLyoqCisJICogQHJldHVybiBhbiBpbnN0YW5jZSBvZiB0aGlzIHRyYW5zbGF0aW9uIGJ1bmRsZQorCSAqLworCXB1YmxpYyBzdGF0aWMgTGZzVGV4dCBnZXQoKSB7CisJCXJldHVybiBOTFMuZ2V0QnVuZGxlRm9yKExmc1RleHQuY2xhc3MpOworCX0KKworCS8vIEBmb3JtYXR0ZXI6b2ZmCisJLyoqKi8gcHVibGljIFN0cmluZyBpbmNvcnJlY3RMT05HX09CSkVDVF9JRF9MRU5HVEg7CisJLyoqKi8gcHVibGljIFN0cmluZyBpbnZhbGlkTG9uZ0lkOworCS8qKiovIHB1YmxpYyBTdHJpbmcgaW52YWxpZExvbmdJZExlbmd0aDsKKwkvKioqLyBwdWJsaWMgU3RyaW5nIHJlcXVpcmVkSGFzaEZ1bmN0aW9uTm90QXZhaWxhYmxlOworfQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGZzL2xpYi9BYmJyZXZpYXRlZExvbmdPYmplY3RJZC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGZzL2xpYi9BYmJyZXZpYXRlZExvbmdPYmplY3RJZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5ZWIwZTMKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy9zcmMvb3JnL2VjbGlwc2UvamdpdC9sZnMvbGliL0FiYnJldmlhdGVkTG9uZ09iamVjdElkLmphdmEKQEAgLTAsMCArMSwzNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUsIE1hdHRoaWFzIFNvaG4gPG1hdHRoaWFzLnNvaG5Ac2FwLmNvbT4KKyAqIGFuZCBvdGhlciBjb3B5cmlnaHQgb3duZXJzIGFzIGRvY3VtZW50ZWQgaW4gdGhlIHByb2plY3QncyBJUCBsb2cuCisgKgorICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2MS4wIHdoaWNoCisgKiBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgaXMgcmVwcm9kdWNlZCBiZWxvdywgYW5kIGlzCisgKiBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VkbC12MTAucGhwCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgSW5jLiBub3IgdGhlCisgKiAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCisgKiAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3IKKyAqICAgd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORAorICogQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKyAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGCisgKiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitwYWNrYWdlIG9yZy5lY2xpcHNlLmpnaXQubGZzLmxpYjsKKworaW1wb3J0IGphdmEuaW8uU2VyaWFsaXphYmxlOworaW1wb3J0IGphdmEudGV4dC5NZXNzYWdlRm9ybWF0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5sZnMuZXJyb3JzLkludmFsaWRMb25nT2JqZWN0SWRFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5sZnMuaW50ZXJuYWwuTGZzVGV4dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5BYmJyZXZpYXRlZE9iamVjdElkOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLkFueU9iamVjdElkOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLk9iamVjdElkOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudXRpbC5OQjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuUmF3UGFyc2VVdGlsczsKKworLyoqCisgKiBBIHByZWZpeCBhYmJyZXZpYXRpb24gb2YgYW4ge0BsaW5rIExvbmdPYmplY3RJZH0uCisgKiA8cD4KKyAqIEVuYWJsZSBhYmJyZXZpYXRpbmcgU0hBLTI1NiBzdHJpbmdzIHVzZWQgYnkgR2l0IExGUywgdXNpbmcgc3VmZmljaWVudCBsZWFkaW5nCisgKiBkaWdpdHMgZnJvbSB0aGUgTG9uZ09iamVjdElkIG5hbWUgdG8gc3RpbGwgYmUgdW5pcXVlIHdpdGhpbiB0aGUgcmVwb3NpdG9yeQorICogdGhlIHN0cmluZyB3YXMgZ2VuZXJhdGVkIGZyb20uIFRoZXNlIGlkcyBhcmUgbGlrZWx5IHRvIGJlIHVuaXF1ZSBmb3IgYSB1c2VmdWwKKyAqIHBlcmlvZCBvZiB0aW1lLCBlc3BlY2lhbGx5IGlmIHRoZXkgY29udGFpbiBhdCBsZWFzdCA2LTEwIGhleCBkaWdpdHMuCisgKiA8cD4KKyAqIFRoaXMgY2xhc3MgY29udmVydHMgdGhlIGhleCBzdHJpbmcgaW50byBhIGJpbmFyeSBmb3JtLCB0byBtYWtlIGl0IG1vcmUKKyAqIGVmZmljaWVudCBmb3IgbWF0Y2hpbmcgYWdhaW5zdCBhbiBvYmplY3QuCisgKgorICogUG9ydGVkIHRvIFNIQS0yNTYgZnJvbSB7QGxpbmsgQWJicmV2aWF0ZWRPYmplY3RJZH0KKyAqCisgKiBAc2luY2UgNC4zCisgKi8KK3B1YmxpYyBmaW5hbCBjbGFzcyBBYmJyZXZpYXRlZExvbmdPYmplY3RJZCBpbXBsZW1lbnRzIFNlcmlhbGl6YWJsZSB7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7CisKKwkvKioKKwkgKiBUZXN0IGEgc3RyaW5nIG9mIGNoYXJhY3RlcnMgdG8gdmVyaWZ5IGl0IGlzIGEgaGV4IGZvcm1hdC4KKwkgKiA8cD4KKwkgKiBJZiB0cnVlIHRoZSBzdHJpbmcgY2FuIGJlIHBhcnNlZCB3aXRoIHtAbGluayAjZnJvbVN0cmluZyhTdHJpbmcpfS4KKwkgKgorCSAqIEBwYXJhbSBpZAorCSAqICAgICAgICAgICAgdGhlIHN0cmluZyB0byB0ZXN0LgorCSAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgc3RyaW5nIGNhbiBjb252ZXJ0ZWQgaW50byBhbiBBYmJyZXZpYXRlZE9iamVjdElkLgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgYm9vbGVhbiBpc0lkKGZpbmFsIFN0cmluZyBpZCkgeworCQlpZiAoaWQubGVuZ3RoKCkgPCAyCisJCQkJfHwgQ29uc3RhbnRzLkxPTkdfT0JKRUNUX0lEX1NUUklOR19MRU5HVEggPCBpZC5sZW5ndGgoKSkKKwkJCXJldHVybiBmYWxzZTsKKwkJdHJ5IHsKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgaWQubGVuZ3RoKCk7IGkrKykKKwkJCQlSYXdQYXJzZVV0aWxzLnBhcnNlSGV4SW50NCgoYnl0ZSkgaWQuY2hhckF0KGkpKTsKKwkJCXJldHVybiB0cnVlOworCQl9IGNhdGNoIChBcnJheUluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gZSkgeworCQkJcmV0dXJuIGZhbHNlOworCQl9CisJfQorCisJLyoqCisJICogQ29udmVydCBhbiBBYmJyZXZpYXRlZE9iamVjdElkIGZyb20gaGV4IGNoYXJhY3RlcnMgKFVTLUFTQ0lJKS4KKwkgKgorCSAqIEBwYXJhbSBidWYKKwkgKiAgICAgICAgICAgIHRoZSBVUy1BU0NJSSBidWZmZXIgdG8gcmVhZCBmcm9tLgorCSAqIEBwYXJhbSBvZmZzZXQKKwkgKiAgICAgICAgICAgIHBvc2l0aW9uIHRvIHJlYWQgdGhlIGZpcnN0IGNoYXJhY3RlciBmcm9tLgorCSAqIEBwYXJhbSBlbmQKKwkgKiAgICAgICAgICAgIG9uZSBwYXN0IHRoZSBsYXN0IHBvc2l0aW9uIHRvIHJlYWQgKDxjb2RlPmVuZC1vZmZzZXQ8L2NvZGU+IGlzCisJICogICAgICAgICAgICB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcpLgorCSAqIEByZXR1cm4gdGhlIGNvbnZlcnRlZCBvYmplY3QgaWQuCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBBYmJyZXZpYXRlZExvbmdPYmplY3RJZCBmcm9tU3RyaW5nKGZpbmFsIGJ5dGVbXSBidWYsCisJCQlmaW5hbCBpbnQgb2Zmc2V0LCBmaW5hbCBpbnQgZW5kKSB7CisJCWlmIChlbmQgLSBvZmZzZXQgPiBDb25zdGFudHMuTE9OR19PQkpFQ1RfSURfU1RSSU5HX0xFTkdUSCkKKwkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oTWVzc2FnZUZvcm1hdC5mb3JtYXQoCisJCQkJCQkJTGZzVGV4dC5nZXQoKS5pbnZhbGlkTG9uZ0lkTGVuZ3RoLAorCQkJCQlJbnRlZ2VyLnZhbHVlT2YoZW5kIC0gb2Zmc2V0KSwKKwkJCQkJSW50ZWdlci52YWx1ZU9mKENvbnN0YW50cy5MT05HX09CSkVDVF9JRF9TVFJJTkdfTEVOR1RIKSkpOworCQlyZXR1cm4gZnJvbUhleFN0cmluZyhidWYsIG9mZnNldCwgZW5kKTsKKwl9CisKKwkvKioKKwkgKiBDb252ZXJ0IGFuIEFiYnJldmlhdGVkT2JqZWN0SWQgZnJvbSBhbiB7QGxpbmsgQW55T2JqZWN0SWR9LgorCSAqIDxwPgorCSAqIFRoaXMgbWV0aG9kIGNvcGllcyBvdmVyIGFsbCBiaXRzIG9mIHRoZSBJZCwgYW5kIGlzIHRoZXJlZm9yZSBjb21wbGV0ZQorCSAqIChzZWUge0BsaW5rICNpc0NvbXBsZXRlKCl9KS4KKwkgKgorCSAqIEBwYXJhbSBpZAorCSAqICAgICAgICAgICAgdGhlIHtAbGluayBPYmplY3RJZH0gdG8gY29udmVydCBmcm9tLgorCSAqIEByZXR1cm4gdGhlIGNvbnZlcnRlZCBvYmplY3QgaWQuCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBBYmJyZXZpYXRlZExvbmdPYmplY3RJZCBmcm9tTG9uZ09iamVjdElkKAorCQkJQW55TG9uZ09iamVjdElkIGlkKSB7CisJCXJldHVybiBuZXcgQWJicmV2aWF0ZWRMb25nT2JqZWN0SWQoCisJCQkJQ29uc3RhbnRzLkxPTkdfT0JKRUNUX0lEX1NUUklOR19MRU5HVEgsIGlkLncxLCBpZC53MiwgaWQudzMsCisJCQkJaWQudzQpOworCX0KKworCS8qKgorCSAqIENvbnZlcnQgYW4gQWJicmV2aWF0ZWRMb25nT2JqZWN0SWQgZnJvbSBoZXggY2hhcmFjdGVycy4KKwkgKgorCSAqIEBwYXJhbSBzdHIKKwkgKiAgICAgICAgICAgIHRoZSBzdHJpbmcgdG8gcmVhZCBmcm9tLiBNdXN0IGJlICZsdDs9IDY0IGNoYXJhY3RlcnMuCisJICogQHJldHVybiB0aGUgY29udmVydGVkIG9iamVjdCBpZC4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIEFiYnJldmlhdGVkTG9uZ09iamVjdElkIGZyb21TdHJpbmcoZmluYWwgU3RyaW5nIHN0cikgeworCQlpZiAoc3RyLmxlbmd0aCgpID4gQ29uc3RhbnRzLkxPTkdfT0JKRUNUX0lEX1NUUklOR19MRU5HVEgpCisJCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAorCQkJCQlNZXNzYWdlRm9ybWF0LmZvcm1hdChMZnNUZXh0LmdldCgpLmludmFsaWRMb25nSWQsIHN0cikpOworCQlmaW5hbCBieXRlW10gYiA9IG9yZy5lY2xpcHNlLmpnaXQubGliLkNvbnN0YW50cy5lbmNvZGVBU0NJSShzdHIpOworCQlyZXR1cm4gZnJvbUhleFN0cmluZyhiLCAwLCBiLmxlbmd0aCk7CisJfQorCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgQWJicmV2aWF0ZWRMb25nT2JqZWN0SWQgZnJvbUhleFN0cmluZyhmaW5hbCBieXRlW10gYnMsCisJCQlpbnQgcHRyLCBmaW5hbCBpbnQgZW5kKSB7CisJCXRyeSB7CisJCQlmaW5hbCBsb25nIGEgPSBoZXhVSW50NjQoYnMsIHB0ciwgZW5kKTsKKwkJCWZpbmFsIGxvbmcgYiA9IGhleFVJbnQ2NChicywgcHRyICsgMTYsIGVuZCk7CisJCQlmaW5hbCBsb25nIGMgPSBoZXhVSW50NjQoYnMsIHB0ciArIDMyLCBlbmQpOworCQkJZmluYWwgbG9uZyBkID0gaGV4VUludDY0KGJzLCBwdHIgKyA0OCwgZW5kKTsKKwkJCXJldHVybiBuZXcgQWJicmV2aWF0ZWRMb25nT2JqZWN0SWQoZW5kIC0gcHRyLCBhLCBiLCBjLCBkKTsKKwkJfSBjYXRjaCAoQXJyYXlJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGUxKSB7CisJCQl0aHJvdyBuZXcgSW52YWxpZExvbmdPYmplY3RJZEV4Y2VwdGlvbihicywgcHRyLCBlbmQgLSBwdHIpOworCQl9CisJfQorCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBoZXhVSW50NjQoZmluYWwgYnl0ZVtdIGJzLCBpbnQgcCwgZmluYWwgaW50IGVuZCkgeworCQlpZiAoMTYgPD0gZW5kIC0gcCkKKwkJCXJldHVybiBSYXdQYXJzZVV0aWxzLnBhcnNlSGV4SW50NjQoYnMsIHApOworCisJCWxvbmcgciA9IDA7CisJCWludCBuID0gMDsKKwkJd2hpbGUgKG4gPCAxNiAmJiBwIDwgZW5kKSB7CisJCQlyIDw8PSA0OworCQkJciB8PSBSYXdQYXJzZVV0aWxzLnBhcnNlSGV4SW50NChic1twKytdKTsKKwkJCW4rKzsKKwkJfQorCQlyZXR1cm4gciA8PCAoMTYgLSBuKSAqIDQ7CisJfQorCisJc3RhdGljIGxvbmcgbWFzayhmaW5hbCBpbnQgbmliYmxlcywgZmluYWwgbG9uZyB3b3JkLCBmaW5hbCBsb25nIHYpIHsKKwkJZmluYWwgbG9uZyBiID0gKHdvcmQgLSAxKSAqIDE2OworCQlpZiAoYiArIDE2IDw9IG5pYmJsZXMpIHsKKwkJCS8vIFdlIGhhdmUgYWxsIG9mIHRoZSBiaXRzIHJlcXVpcmVkIGZvciB0aGlzIHdvcmQuCisJCQkvLworCQkJcmV0dXJuIHY7CisJCX0KKworCQlpZiAobmliYmxlcyA8PSBiKSB7CisJCQkvLyBXZSBoYXZlIG5vbmUgb2YgdGhlIGJpdHMgcmVxdWlyZWQgZm9yIHRoaXMgd29yZC4KKwkJCS8vCisJCQlyZXR1cm4gMDsKKwkJfQorCisJCWZpbmFsIGxvbmcgcyA9IDY0IC0gKG5pYmJsZXMgLSBiKSAqIDQ7CisJCXJldHVybiAodiA+Pj4gcykgPDwgczsKKwl9CisKKwkvKiogTnVtYmVyIG9mIGhhbGYtYnl0ZXMgdXNlZCBieSB0aGlzIGlkLiAqLworCWZpbmFsIGludCBuaWJibGVzOworCisJZmluYWwgbG9uZyB3MTsKKworCWZpbmFsIGxvbmcgdzI7CisKKwlmaW5hbCBsb25nIHczOworCisJZmluYWwgbG9uZyB3NDsKKworCUFiYnJldmlhdGVkTG9uZ09iamVjdElkKGZpbmFsIGludCBuLCBmaW5hbCBsb25nIG5ld18xLCBmaW5hbCBsb25nIG5ld18yLAorCQkJZmluYWwgbG9uZyBuZXdfMywgZmluYWwgbG9uZyBuZXdfNCkgeworCQluaWJibGVzID0gbjsKKwkJdzEgPSBuZXdfMTsKKwkJdzIgPSBuZXdfMjsKKwkJdzMgPSBuZXdfMzsKKwkJdzQgPSBuZXdfNDsKKwl9CisKKwkvKiogQHJldHVybiBudW1iZXIgb2YgaGV4IGRpZ2l0cyBhcHBlYXJpbmcgaW4gdGhpcyBpZCAqLworCXB1YmxpYyBpbnQgbGVuZ3RoKCkgeworCQlyZXR1cm4gbmliYmxlczsKKwl9CisKKwkvKiogQHJldHVybiB0cnVlIGlmIHRoaXMgT2JqZWN0SWQgaXMgYWN0dWFsbHkgYSBjb21wbGV0ZSBpZC4gKi8KKwlwdWJsaWMgYm9vbGVhbiBpc0NvbXBsZXRlKCkgeworCQlyZXR1cm4gbGVuZ3RoKCkgPT0gQ29uc3RhbnRzLkxPTkdfT0JKRUNUX0lEX1NUUklOR19MRU5HVEg7CisJfQorCisJLyoqIEByZXR1cm4gYSBjb21wbGV0ZSBPYmplY3RJZDsgbnVsbCBpZiB7QGxpbmsgI2lzQ29tcGxldGUoKX0gaXMgZmFsc2UgKi8KKwlwdWJsaWMgTG9uZ09iamVjdElkIHRvTG9uZ09iamVjdElkKCkgeworCQlyZXR1cm4gaXNDb21wbGV0ZSgpID8gbmV3IExvbmdPYmplY3RJZCh3MSwgdzIsIHczLCB3NCkgOiBudWxsOworCX0KKworCS8qKgorCSAqIENvbXBhcmVzIHRoaXMgYWJicmV2aWF0aW9uIHRvIGEgZnVsbCBvYmplY3QgaWQuCisJICoKKwkgKiBAcGFyYW0gb3RoZXIKKwkgKiAgICAgICAgICAgIHRoZSBvdGhlciBvYmplY3QgaWQuCisJICogQHJldHVybiAmbHQ7MCBpZiB0aGlzIGFiYnJldmlhdGlvbiBuYW1lcyBhbiBvYmplY3QgdGhhdCBpcyBsZXNzIHRoYW4KKwkgKiAgICAgICAgIDxjb2RlPm90aGVyPC9jb2RlPjsgMCBpZiB0aGlzIGFiYnJldmlhdGlvbiBleGFjdGx5IG1hdGNoZXMgdGhlCisJICogICAgICAgICBmaXJzdCB7QGxpbmsgI2xlbmd0aCgpfSBkaWdpdHMgb2YgPGNvZGU+b3RoZXIubmFtZSgpPC9jb2RlPjsKKwkgKiAgICAgICAgICZndDswIGlmIHRoaXMgYWJicmV2aWF0aW9uIG5hbWVzIGFuIG9iamVjdCB0aGF0IGlzIGFmdGVyCisJICogICAgICAgICA8Y29kZT5vdGhlcjwvY29kZT4uCisJICovCisJcHVibGljIGZpbmFsIGludCBwcmVmaXhDb21wYXJlKGZpbmFsIEFueUxvbmdPYmplY3RJZCBvdGhlcikgeworCQlpbnQgY21wOworCisJCWNtcCA9IE5CLmNvbXBhcmVVSW50NjQodzEsIG1hc2soMSwgb3RoZXIudzEpKTsKKwkJaWYgKGNtcCAhPSAwKQorCQkJcmV0dXJuIGNtcDsKKworCQljbXAgPSBOQi5jb21wYXJlVUludDY0KHcyLCBtYXNrKDIsIG90aGVyLncyKSk7CisJCWlmIChjbXAgIT0gMCkKKwkJCXJldHVybiBjbXA7CisKKwkJY21wID0gTkIuY29tcGFyZVVJbnQ2NCh3MywgbWFzaygzLCBvdGhlci53MykpOworCQlpZiAoY21wICE9IDApCisJCQlyZXR1cm4gY21wOworCisJCXJldHVybiBOQi5jb21wYXJlVUludDY0KHc0LCBtYXNrKDQsIG90aGVyLnc0KSk7CisJfQorCisJLyoqCisJICogQ29tcGFyZSB0aGlzIGFiYnJldmlhdGlvbiB0byBhIG5ldHdvcmstYnl0ZS1vcmRlciBMb25nT2JqZWN0SWQuCisJICoKKwkgKiBAcGFyYW0gYnMKKwkgKiAgICAgICAgICAgIGFycmF5IGNvbnRhaW5pbmcgdGhlIG90aGVyIExvbmdPYmplY3RJZCBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIuCisJICogQHBhcmFtIHAKKwkgKiAgICAgICAgICAgIHBvc2l0aW9uIHdpdGhpbiB7QGNvZGUgYnN9IHRvIHN0YXJ0IHRoZSBjb21wYXJlIGF0LiBBdCBsZWFzdAorCSAqICAgICAgICAgICAgMzIgYnl0ZXMsIHN0YXJ0aW5nIGF0IHRoaXMgcG9zaXRpb24gYXJlIHJlcXVpcmVkLgorCSAqIEByZXR1cm4gJmx0OzAgaWYgdGhpcyBhYmJyZXZpYXRpb24gbmFtZXMgYW4gb2JqZWN0IHRoYXQgaXMgbGVzcyB0aGFuCisJICogICAgICAgICA8Y29kZT5vdGhlcjwvY29kZT47IDAgaWYgdGhpcyBhYmJyZXZpYXRpb24gZXhhY3RseSBtYXRjaGVzIHRoZQorCSAqICAgICAgICAgZmlyc3Qge0BsaW5rICNsZW5ndGgoKX0gZGlnaXRzIG9mIDxjb2RlPm90aGVyLm5hbWUoKTwvY29kZT47CisJICogICAgICAgICAmZ3Q7MCBpZiB0aGlzIGFiYnJldmlhdGlvbiBuYW1lcyBhbiBvYmplY3QgdGhhdCBpcyBhZnRlcgorCSAqICAgICAgICAgPGNvZGU+b3RoZXI8L2NvZGU+LgorCSAqLworCXB1YmxpYyBmaW5hbCBpbnQgcHJlZml4Q29tcGFyZShmaW5hbCBieXRlW10gYnMsIGZpbmFsIGludCBwKSB7CisJCWludCBjbXA7CisKKwkJY21wID0gTkIuY29tcGFyZVVJbnQ2NCh3MSwgbWFzaygxLCBOQi5kZWNvZGVJbnQ2NChicywgcCkpKTsKKwkJaWYgKGNtcCAhPSAwKQorCQkJcmV0dXJuIGNtcDsKKworCQljbXAgPSBOQi5jb21wYXJlVUludDY0KHcyLCBtYXNrKDIsIE5CLmRlY29kZUludDY0KGJzLCBwICsgOCkpKTsKKwkJaWYgKGNtcCAhPSAwKQorCQkJcmV0dXJuIGNtcDsKKworCQljbXAgPSBOQi5jb21wYXJlVUludDY0KHczLCBtYXNrKDMsIE5CLmRlY29kZUludDY0KGJzLCBwICsgMTYpKSk7CisJCWlmIChjbXAgIT0gMCkKKwkJCXJldHVybiBjbXA7CisKKwkJcmV0dXJuIE5CLmNvbXBhcmVVSW50NjQodzQsIG1hc2soNCwgTkIuZGVjb2RlSW50NjQoYnMsIHAgKyAyNCkpKTsKKwl9CisKKwkvKioKKwkgKiBDb21wYXJlIHRoaXMgYWJicmV2aWF0aW9uIHRvIGEgbmV0d29yay1ieXRlLW9yZGVyIExvbmdPYmplY3RJZC4KKwkgKgorCSAqIEBwYXJhbSBicworCSAqICAgICAgICAgICAgYXJyYXkgY29udGFpbmluZyB0aGUgb3RoZXIgTG9uZ09iamVjdElkIGluIG5ldHdvcmsgYnl0ZSBvcmRlci4KKwkgKiBAcGFyYW0gcAorCSAqICAgICAgICAgICAgcG9zaXRpb24gd2l0aGluIHtAY29kZSBic30gdG8gc3RhcnQgdGhlIGNvbXBhcmUgYXQuIEF0IGxlYXN0IDQKKwkgKiAgICAgICAgICAgIGxvbmdzLCBzdGFydGluZyBhdCB0aGlzIHBvc2l0aW9uIGFyZSByZXF1aXJlZC4KKwkgKiBAcmV0dXJuICZsdDswIGlmIHRoaXMgYWJicmV2aWF0aW9uIG5hbWVzIGFuIG9iamVjdCB0aGF0IGlzIGxlc3MgdGhhbgorCSAqICAgICAgICAgPGNvZGU+b3RoZXI8L2NvZGU+OyAwIGlmIHRoaXMgYWJicmV2aWF0aW9uIGV4YWN0bHkgbWF0Y2hlcyB0aGUKKwkgKiAgICAgICAgIGZpcnN0IHtAbGluayAjbGVuZ3RoKCl9IGRpZ2l0cyBvZiA8Y29kZT5vdGhlci5uYW1lKCk8L2NvZGU+OworCSAqICAgICAgICAgJmd0OzAgaWYgdGhpcyBhYmJyZXZpYXRpb24gbmFtZXMgYW4gb2JqZWN0IHRoYXQgaXMgYWZ0ZXIKKwkgKiAgICAgICAgIDxjb2RlPm90aGVyPC9jb2RlPi4KKwkgKi8KKwlwdWJsaWMgZmluYWwgaW50IHByZWZpeENvbXBhcmUoZmluYWwgbG9uZ1tdIGJzLCBmaW5hbCBpbnQgcCkgeworCQlpbnQgY21wOworCisJCWNtcCA9IE5CLmNvbXBhcmVVSW50NjQodzEsIG1hc2soMSwgYnNbcF0pKTsKKwkJaWYgKGNtcCAhPSAwKQorCQkJcmV0dXJuIGNtcDsKKworCQljbXAgPSBOQi5jb21wYXJlVUludDY0KHcyLCBtYXNrKDIsIGJzW3AgKyAxXSkpOworCQlpZiAoY21wICE9IDApCisJCQlyZXR1cm4gY21wOworCisJCWNtcCA9IE5CLmNvbXBhcmVVSW50NjQodzMsIG1hc2soMywgYnNbcCArIDJdKSk7CisJCWlmIChjbXAgIT0gMCkKKwkJCXJldHVybiBjbXA7CisKKwkJcmV0dXJuIE5CLmNvbXBhcmVVSW50NjQodzQsIG1hc2soNCwgYnNbcCArIDNdKSk7CisJfQorCisJLyoqIEByZXR1cm4gdmFsdWUgZm9yIGEgZmFuLW91dCBzdHlsZSBtYXAsIG9ubHkgdmFsaWQgb2YgbGVuZ3RoICZndDs9IDIuICovCisJcHVibGljIGZpbmFsIGludCBnZXRGaXJzdEJ5dGUoKSB7CisJCXJldHVybiAoaW50KSAodzEgPj4+IDU2KTsKKwl9CisKKwlwcml2YXRlIGxvbmcgbWFzayhmaW5hbCBsb25nIHdvcmQsIGZpbmFsIGxvbmcgdikgeworCQlyZXR1cm4gbWFzayhuaWJibGVzLCB3b3JkLCB2KTsKKwl9CisKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgaW50IGhhc2hDb2RlKCkgeworCQlyZXR1cm4gKGludCkgKHcxID4+IDMyKTsKKwl9CisKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBlcXVhbHMoZmluYWwgT2JqZWN0IG8pIHsKKwkJaWYgKG8gaW5zdGFuY2VvZiBBYmJyZXZpYXRlZExvbmdPYmplY3RJZCkgeworCQkJZmluYWwgQWJicmV2aWF0ZWRMb25nT2JqZWN0SWQgYiA9IChBYmJyZXZpYXRlZExvbmdPYmplY3RJZCkgbzsKKwkJCXJldHVybiBuaWJibGVzID09IGIubmliYmxlcyAmJiB3MSA9PSBiLncxICYmIHcyID09IGIudzIKKwkJCQkJJiYgdzMgPT0gYi53MyAmJiB3NCA9PSBiLnc0OworCQl9CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIHN0cmluZyBmb3JtIG9mIHRoZSBhYmJyZXZpYXRpb24sIGluIGxvd2VyIGNhc2UgaGV4YWRlY2ltYWwuCisJICovCisJcHVibGljIGZpbmFsIFN0cmluZyBuYW1lKCkgeworCQlmaW5hbCBjaGFyW10gYiA9IG5ldyBjaGFyW0NvbnN0YW50cy5MT05HX09CSkVDVF9JRF9TVFJJTkdfTEVOR1RIXTsKKworCQlBbnlMb25nT2JqZWN0SWQuZm9ybWF0SGV4Q2hhcihiLCAwLCB3MSk7CisJCWlmIChuaWJibGVzIDw9IDE2KQorCQkJcmV0dXJuIG5ldyBTdHJpbmcoYiwgMCwgbmliYmxlcyk7CisKKwkJQW55TG9uZ09iamVjdElkLmZvcm1hdEhleENoYXIoYiwgMTYsIHcyKTsKKwkJaWYgKG5pYmJsZXMgPD0gMzIpCisJCQlyZXR1cm4gbmV3IFN0cmluZyhiLCAwLCBuaWJibGVzKTsKKworCQlBbnlMb25nT2JqZWN0SWQuZm9ybWF0SGV4Q2hhcihiLCAzMiwgdzMpOworCQlpZiAobmliYmxlcyA8PSA0OCkKKwkJCXJldHVybiBuZXcgU3RyaW5nKGIsIDAsIG5pYmJsZXMpOworCisJCUFueUxvbmdPYmplY3RJZC5mb3JtYXRIZXhDaGFyKGIsIDQ4LCB3NCk7CisJCXJldHVybiBuZXcgU3RyaW5nKGIsIDAsIG5pYmJsZXMpOworCX0KKworCUBTdXBwcmVzc1dhcm5pbmdzKCJubHMiKQorCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCXJldHVybiAiQWJicmV2aWF0ZWRMb25nT2JqZWN0SWRbIiArIG5hbWUoKSArICJdIjsgLy8kTk9OLU5MUy0xJAorCX0KK30KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xmcy9saWIvQW55TG9uZ09iamVjdElkLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy9zcmMvb3JnL2VjbGlwc2UvamdpdC9sZnMvbGliL0FueUxvbmdPYmplY3RJZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmMGRmODgKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy9zcmMvb3JnL2VjbGlwc2UvamdpdC9sZnMvbGliL0FueUxvbmdPYmplY3RJZC5qYXZhCkBAIC0wLDAgKzEsNTU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1LCBNYXR0aGlhcyBTb2huIDxtYXR0aGlhcy5zb2huQHNhcC5jb20+CisgKiBhbmQgb3RoZXIgY29weXJpZ2h0IG93bmVycyBhcyBkb2N1bWVudGVkIGluIHRoZSBwcm9qZWN0J3MgSVAgbG9nLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlCisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgRGlzdHJpYnV0aW9uIExpY2Vuc2UgdjEuMCB3aGljaAorICogYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGlzIHJlcHJvZHVjZWQgYmVsb3csIGFuZCBpcworICogYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lZGwtdjEwLnBocAorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIEluYy4gbm9yIHRoZQorICogICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorICogICBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCisgKiAgIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQKKyAqIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCisgKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRgorICogQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworcGFja2FnZSBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5saWI7CisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uV3JpdGVyOworaW1wb3J0IGphdmEubmlvLkJ5dGVCdWZmZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5BbnlPYmplY3RJZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5PYmplY3RSZWFkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC51dGlsLk5COworCisvKioKKyAqIEEgKHBvc3NpYmx5IG11dGFibGUpIFNIQS0yNTYgYWJzdHJhY3Rpb24uCisgKiA8cD4KKyAqIElmIHRoaXMgaXMgYW4gaW5zdGFuY2Ugb2Yge0BsaW5rIE11dGFibGVMb25nT2JqZWN0SWR9IHRoZSBjb25jZXB0IG9mIGVxdWFsaXR5CisgKiB3aXRoIHRoaXMgaW5zdGFuY2UgY2FuIGFsdGVyIGF0IGFueSB0aW1lLCBpZiB0aGlzIGluc3RhbmNlIGlzIG1vZGlmaWVkIHRvCisgKiByZXByZXNlbnQgYSBkaWZmZXJlbnQgb2JqZWN0IG5hbWUuCisgKgorICogUG9ydGVkIHRvIFNIQS0yNTYgZnJvbSB7QGxpbmsgQW55T2JqZWN0SWR9CisgKgorICogQHNpbmNlIDQuMworICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgQW55TG9uZ09iamVjdElkIGltcGxlbWVudHMgQ29tcGFyYWJsZTxBbnlMb25nT2JqZWN0SWQ+IHsKKworCS8qKgorCSAqIENvbXBhcmUgdHdvIG9iamVjdCBpZGVudGlmaWVyIGJ5dGUgc2VxdWVuY2VzIGZvciBlcXVhbGl0eS4KKwkgKgorCSAqIEBwYXJhbSBmaXJzdE9iamVjdElkCisJICogICAgICAgICAgICB0aGUgZmlyc3QgaWRlbnRpZmllciB0byBjb21wYXJlLiBNdXN0IG5vdCBiZSBudWxsLgorCSAqIEBwYXJhbSBzZWNvbmRPYmplY3RJZAorCSAqICAgICAgICAgICAgdGhlIHNlY29uZCBpZGVudGlmaWVyIHRvIGNvbXBhcmUuIE11c3Qgbm90IGJlIG51bGwuCisJICogQHJldHVybiB0cnVlIGlmIHRoZSB0d28gaWRlbnRpZmllcnMgYXJlIHRoZSBzYW1lLgorCSAqLworCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBlcXVhbHMoZmluYWwgQW55TG9uZ09iamVjdElkIGZpcnN0T2JqZWN0SWQsCisJCQlmaW5hbCBBbnlMb25nT2JqZWN0SWQgc2Vjb25kT2JqZWN0SWQpIHsKKwkJaWYgKGZpcnN0T2JqZWN0SWQgPT0gc2Vjb25kT2JqZWN0SWQpCisJCQlyZXR1cm4gdHJ1ZTsKKworCQkvLyBXZSB0ZXN0IHdvcmQgMiBmaXJzdCBhcyBvZGRzIGFyZSBzb21lb25lIGFscmVhZHkgdXNlZCBvdXIKKwkJLy8gd29yZCAxIGFzIGEgaGFzaCBjb2RlLCBhbmQgYXBwbHlpbmcgdGhhdCBjYW1lIHVwIHdpdGggdGhlc2UKKwkJLy8gdHdvIGluc3RhbmNlcyB3ZSBhcmUgY29tcGFyaW5nIGZvciBlcXVhbGl0eS4gVGhlcmVmb3JlIHRoZQorCQkvLyBmaXJzdCB0d28gd29yZHMgYXJlIHZlcnkgbGlrZWx5IHRvIGJlIGlkZW50aWNhbC4gV2Ugd2FudCB0bworCQkvLyBicmVhayBhd2F5IGZyb20gY29sbGlzaW9ucyBhcyBxdWlja2x5IGFzIHBvc3NpYmxlLgorCQkvLworCQlyZXR1cm4gZmlyc3RPYmplY3RJZC53MiA9PSBzZWNvbmRPYmplY3RJZC53MgorCQkJCSYmIGZpcnN0T2JqZWN0SWQudzMgPT0gc2Vjb25kT2JqZWN0SWQudzMKKwkJCQkmJiBmaXJzdE9iamVjdElkLnc0ID09IHNlY29uZE9iamVjdElkLnc0CisJCQkJJiYgZmlyc3RPYmplY3RJZC53MSA9PSBzZWNvbmRPYmplY3RJZC53MTsKKwl9CisKKwlsb25nIHcxOworCisJbG9uZyB3MjsKKworCWxvbmcgdzM7CisKKwlsb25nIHc0OworCisJLyoqCisJICogR2V0IHRoZSBmaXJzdCA4IGJpdHMgb2YgdGhlIExvbmdPYmplY3RJZC4KKwkgKgorCSAqIFRoaXMgaXMgYSBmYXN0ZXIgdmVyc2lvbiBvZiB7QGNvZGUgZ2V0Qnl0ZSgwKX0uCisJICoKKwkgKiBAcmV0dXJuIGEgZGlzY3JpbWluYXRvciB1c2FibGUgZm9yIGEgZmFuLW91dCBzdHlsZSBtYXAuIFJldHVybmVkIHZhbHVlcworCSAqICAgICAgICAgYXJlIHVuc2lnbmVkIGFuZCB0aHVzIGFyZSBpbiB0aGUgcmFuZ2UgWzAsMjU1XSByYXRoZXIgdGhhbiB0aGUKKwkgKiAgICAgICAgIHNpZ25lZCBieXRlIHJhbmdlIG9mIFstMTI4LCAxMjddLgorCSAqLworCXB1YmxpYyBmaW5hbCBpbnQgZ2V0Rmlyc3RCeXRlKCkgeworCQlyZXR1cm4gKGludCkgKHcxID4+PiA1Nik7CisJfQorCisJLyoqCisJICogR2V0IHRoZSBzZWNvbmQgOCBiaXRzIG9mIHRoZSBMb25nT2JqZWN0SWQuCisJICoKKwkgKiBAcmV0dXJuIGEgZGlzY3JpbWluYXRvciB1c2FibGUgZm9yIGEgZmFuLW91dCBzdHlsZSBtYXAuIFJldHVybmVkIHZhbHVlcworCSAqICAgICAgICAgYXJlIHVuc2lnbmVkIGFuZCB0aHVzIGFyZSBpbiB0aGUgcmFuZ2UgWzAsMjU1XSByYXRoZXIgdGhhbiB0aGUKKwkgKiAgICAgICAgIHNpZ25lZCBieXRlIHJhbmdlIG9mIFstMTI4LCAxMjddLgorCSAqLworCXB1YmxpYyBmaW5hbCBpbnQgZ2V0U2Vjb25kQnl0ZSgpIHsKKwkJcmV0dXJuIChpbnQpICgodzEgPj4+IDQ4KSAmIDB4ZmYpOworCX0KKworCS8qKgorCSAqIEdldCBhbnkgYnl0ZSBmcm9tIHRoZSBMb25nT2JqZWN0SWQuCisJICoKKwkgKiBDYWxsZXJzIGhhcmQtY29kaW5nIHtAY29kZSBnZXRCeXRlKDApfSBzaG91bGQgaW5zdGVhZCB1c2UgdGhlIG11Y2ggZmFzdGVyCisJICogc3BlY2lhbCBjYXNlIHZhcmlhbnQge0BsaW5rICNnZXRGaXJzdEJ5dGUoKX0uCisJICoKKwkgKiBAcGFyYW0gaW5kZXgKKwkgKiAgICAgICAgICAgIGluZGV4IG9mIHRoZSBieXRlIHRvIG9idGFpbiBmcm9tIHRoZSByYXcgZm9ybSBvZiB0aGUKKwkgKiAgICAgICAgICAgIExvbmdPYmplY3RJZC4gTXVzdCBiZSBpbiByYW5nZSBbMCwKKwkgKiAgICAgICAgICAgIHtAbGluayBDb25zdGFudHMjTE9OR19PQkpFQ1RfSURfTEVOR1RIfSkuCisJICogQHJldHVybiB0aGUgdmFsdWUgb2YgdGhlIHJlcXVlc3RlZCBieXRlIGF0IHtAY29kZSBpbmRleH0uIFJldHVybmVkIHZhbHVlcworCSAqICAgICAgICAgYXJlIHVuc2lnbmVkIGFuZCB0aHVzIGFyZSBpbiB0aGUgcmFuZ2UgWzAsMjU1XSByYXRoZXIgdGhhbiB0aGUKKwkgKiAgICAgICAgIHNpZ25lZCBieXRlIHJhbmdlIG9mIFstMTI4LCAxMjddLgorCSAqIEB0aHJvd3MgQXJyYXlJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uCisJICogICAgICAgICAgICAge0Bjb2RlIGluZGV4fSBpcyBsZXNzIHRoYW4gMCwgZXF1YWwgdG8KKwkgKiAgICAgICAgICAgICB7QGxpbmsgQ29uc3RhbnRzI0xPTkdfT0JKRUNUX0lEX0xFTkdUSH0sIG9yIGdyZWF0ZXIgdGhhbgorCSAqICAgICAgICAgICAgIHtAbGluayBDb25zdGFudHMjTE9OR19PQkpFQ1RfSURfTEVOR1RIfS4KKwkgKi8KKwlwdWJsaWMgZmluYWwgaW50IGdldEJ5dGUoaW50IGluZGV4KSB7CisJCWxvbmcgdzsKKwkJc3dpdGNoIChpbmRleCA+PiAzKSB7CisJCWNhc2UgMDoKKwkJCXcgPSB3MTsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQl3ID0gdzI7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJdyA9IHczOworCQkJYnJlYWs7CisJCWNhc2UgMzoKKwkJCXcgPSB3NDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJdGhyb3cgbmV3IEFycmF5SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbihpbmRleCk7CisJCX0KKworCQlyZXR1cm4gKGludCkgKCh3ID4+PiAoOCAqICgxNSAtIChpbmRleCAmIDE1KSkpKSAmIDB4ZmYpOworCX0KKworCS8qKgorCSAqIENvbXBhcmUgdGhpcyBMb25nT2JqZWN0SWQgdG8gYW5vdGhlciBhbmQgb2J0YWluIGEgc29ydCBvcmRlcmluZy4KKwkgKgorCSAqIEBwYXJhbSBvdGhlcgorCSAqICAgICAgICAgICAgdGhlIG90aGVyIGlkIHRvIGNvbXBhcmUgdG8uIE11c3Qgbm90IGJlIG51bGwuCisJICogQHJldHVybiAmbHQ7IDAgaWYgdGhpcyBpZCBjb21lcyBiZWZvcmUgb3RoZXI7IDAgaWYgdGhpcyBpZCBpcyBlcXVhbCB0bworCSAqICAgICAgICAgb3RoZXI7ICZndDsgMCBpZiB0aGlzIGlkIGNvbWVzIGFmdGVyIG90aGVyLgorCSAqLworCXB1YmxpYyBmaW5hbCBpbnQgY29tcGFyZVRvKGZpbmFsIEFueUxvbmdPYmplY3RJZCBvdGhlcikgeworCQlpZiAodGhpcyA9PSBvdGhlcikKKwkJCXJldHVybiAwOworCisJCWludCBjbXA7CisKKwkJY21wID0gTkIuY29tcGFyZVVJbnQ2NCh3MSwgb3RoZXIudzEpOworCQlpZiAoY21wICE9IDApCisJCQlyZXR1cm4gY21wOworCisJCWNtcCA9IE5CLmNvbXBhcmVVSW50NjQodzIsIG90aGVyLncyKTsKKwkJaWYgKGNtcCAhPSAwKQorCQkJcmV0dXJuIGNtcDsKKworCQljbXAgPSBOQi5jb21wYXJlVUludDY0KHczLCBvdGhlci53Myk7CisJCWlmIChjbXAgIT0gMCkKKwkJCXJldHVybiBjbXA7CisKKwkJcmV0dXJuIE5CLmNvbXBhcmVVSW50NjQodzQsIG90aGVyLnc0KTsKKwl9CisKKwkvKioKKwkgKiBDb21wYXJlIHRoaXMgTG9uZ09iamVjdElkIHRvIGEgbmV0d29yay1ieXRlLW9yZGVyIExvbmdPYmplY3RJZC4KKwkgKgorCSAqIEBwYXJhbSBicworCSAqICAgICAgICAgICAgYXJyYXkgY29udGFpbmluZyB0aGUgb3RoZXIgTG9uZ09iamVjdElkIGluIG5ldHdvcmsgYnl0ZSBvcmRlci4KKwkgKiBAcGFyYW0gcAorCSAqICAgICAgICAgICAgcG9zaXRpb24gd2l0aGluIHtAY29kZSBic30gdG8gc3RhcnQgdGhlIGNvbXBhcmUgYXQuIEF0IGxlYXN0CisJICogICAgICAgICAgICAzMiBieXRlcywgc3RhcnRpbmcgYXQgdGhpcyBwb3NpdGlvbiBhcmUgcmVxdWlyZWQuCisJICogQHJldHVybiBhIG5lZ2F0aXZlIGludGVnZXIsIHplcm8sIG9yIGEgcG9zaXRpdmUgaW50ZWdlciBhcyB0aGlzIG9iamVjdCBpcworCSAqICAgICAgICAgbGVzcyB0aGFuLCBlcXVhbCB0bywgb3IgZ3JlYXRlciB0aGFuIHRoZSBzcGVjaWZpZWQgb2JqZWN0LgorCSAqLworCXB1YmxpYyBmaW5hbCBpbnQgY29tcGFyZVRvKGZpbmFsIGJ5dGVbXSBicywgZmluYWwgaW50IHApIHsKKwkJaW50IGNtcDsKKworCQljbXAgPSBOQi5jb21wYXJlVUludDY0KHcxLCBOQi5kZWNvZGVJbnQ2NChicywgcCkpOworCQlpZiAoY21wICE9IDApCisJCQlyZXR1cm4gY21wOworCisJCWNtcCA9IE5CLmNvbXBhcmVVSW50NjQodzIsIE5CLmRlY29kZUludDY0KGJzLCBwICsgOCkpOworCQlpZiAoY21wICE9IDApCisJCQlyZXR1cm4gY21wOworCisJCWNtcCA9IE5CLmNvbXBhcmVVSW50NjQodzMsIE5CLmRlY29kZUludDY0KGJzLCBwICsgMTYpKTsKKwkJaWYgKGNtcCAhPSAwKQorCQkJcmV0dXJuIGNtcDsKKworCQlyZXR1cm4gTkIuY29tcGFyZVVJbnQ2NCh3NCwgTkIuZGVjb2RlSW50NjQoYnMsIHAgKyAyNCkpOworCX0KKworCS8qKgorCSAqIENvbXBhcmUgdGhpcyBMb25nT2JqZWN0SWQgdG8gYSBuZXR3b3JrLWJ5dGUtb3JkZXIgTG9uZ09iamVjdElkLgorCSAqCisJICogQHBhcmFtIGJzCisJICogICAgICAgICAgICBhcnJheSBjb250YWluaW5nIHRoZSBvdGhlciBMb25nT2JqZWN0SWQgaW4gbmV0d29yayBieXRlIG9yZGVyLgorCSAqIEBwYXJhbSBwCisJICogICAgICAgICAgICBwb3NpdGlvbiB3aXRoaW4ge0Bjb2RlIGJzfSB0byBzdGFydCB0aGUgY29tcGFyZSBhdC4gQXQgbGVhc3QgNAorCSAqICAgICAgICAgICAgbG9uZ3MsIHN0YXJ0aW5nIGF0IHRoaXMgcG9zaXRpb24gYXJlIHJlcXVpcmVkLgorCSAqIEByZXR1cm4gYSBuZWdhdGl2ZSBpbnRlZ2VyLCB6ZXJvLCBvciBhIHBvc2l0aXZlIGludGVnZXIgYXMgdGhpcyBvYmplY3QgaXMKKwkgKiAgICAgICAgIGxlc3MgdGhhbiwgZXF1YWwgdG8sIG9yIGdyZWF0ZXIgdGhhbiB0aGUgc3BlY2lmaWVkIG9iamVjdC4KKwkgKi8KKwlwdWJsaWMgZmluYWwgaW50IGNvbXBhcmVUbyhmaW5hbCBsb25nW10gYnMsIGZpbmFsIGludCBwKSB7CisJCWludCBjbXA7CisKKwkJY21wID0gTkIuY29tcGFyZVVJbnQ2NCh3MSwgYnNbcF0pOworCQlpZiAoY21wICE9IDApCisJCQlyZXR1cm4gY21wOworCisJCWNtcCA9IE5CLmNvbXBhcmVVSW50NjQodzIsIGJzW3AgKyAxXSk7CisJCWlmIChjbXAgIT0gMCkKKwkJCXJldHVybiBjbXA7CisKKwkJY21wID0gTkIuY29tcGFyZVVJbnQ2NCh3MywgYnNbcCArIDJdKTsKKwkJaWYgKGNtcCAhPSAwKQorCQkJcmV0dXJuIGNtcDsKKworCQlyZXR1cm4gTkIuY29tcGFyZVVJbnQ2NCh3NCwgYnNbcCArIDNdKTsKKwl9CisKKwkvKioKKwkgKiBUZXN0cyBpZiB0aGlzIExvbmdPYmplY3RJZCBzdGFydHMgd2l0aCB0aGUgZ2l2ZW4gYWJicmV2aWF0aW9uLgorCSAqCisJICogQHBhcmFtIGFiYnIKKwkgKiAgICAgICAgICAgIHRoZSBhYmJyZXZpYXRpb24uCisJICogQHJldHVybiB0cnVlIGlmIHRoaXMgTG9uZ09iamVjdElkIGJlZ2lucyB3aXRoIHRoZSBhYmJyZXZpYXRpb247IGVsc2UKKwkgKiAgICAgICAgIGZhbHNlLgorCSAqLworCXB1YmxpYyBib29sZWFuIHN0YXJ0c1dpdGgoZmluYWwgQWJicmV2aWF0ZWRMb25nT2JqZWN0SWQgYWJicikgeworCQlyZXR1cm4gYWJici5wcmVmaXhDb21wYXJlKHRoaXMpID09IDA7CisJfQorCisJcHVibGljIGZpbmFsIGludCBoYXNoQ29kZSgpIHsKKwkJcmV0dXJuIChpbnQpICh3MSA+PiAzMik7CisJfQorCisJLyoqCisJICogRGV0ZXJtaW5lIGlmIHRoaXMgTG9uZ09iamVjdElkIGhhcyBleGFjdGx5IHRoZSBzYW1lIHZhbHVlIGFzIGFub3RoZXIuCisJICoKKwkgKiBAcGFyYW0gb3RoZXIKKwkgKiAgICAgICAgICAgIHRoZSBvdGhlciBpZCB0byBjb21wYXJlIHRvLiBNYXkgYmUgbnVsbC4KKwkgKiBAcmV0dXJuIHRydWUgb25seSBpZiBib3RoIExvbmdPYmplY3RJZHMgaGF2ZSBpZGVudGljYWwgYml0cy4KKwkgKi8KKwlwdWJsaWMgZmluYWwgYm9vbGVhbiBlcXVhbHMoZmluYWwgQW55TG9uZ09iamVjdElkIG90aGVyKSB7CisJCXJldHVybiBvdGhlciAhPSBudWxsID8gZXF1YWxzKHRoaXMsIG90aGVyKSA6IGZhbHNlOworCX0KKworCXB1YmxpYyBmaW5hbCBib29sZWFuIGVxdWFscyhmaW5hbCBPYmplY3QgbykgeworCQlpZiAobyBpbnN0YW5jZW9mIEFueUxvbmdPYmplY3RJZCkKKwkJCXJldHVybiBlcXVhbHMoKEFueUxvbmdPYmplY3RJZCkgbyk7CisJCWVsc2UKKwkJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKioKKwkgKiBDb3B5IHRoaXMgTG9uZ09iamVjdElkIHRvIGFuIG91dHB1dCB3cml0ZXIgaW4gcmF3IGJpbmFyeS4KKwkgKgorCSAqIEBwYXJhbSB3CisJICogICAgICAgICAgICB0aGUgYnVmZmVyIHRvIGNvcHkgdG8uIE11c3QgYmUgaW4gYmlnIGVuZGlhbiBvcmRlci4KKwkgKi8KKwlwdWJsaWMgdm9pZCBjb3B5UmF3VG8oZmluYWwgQnl0ZUJ1ZmZlciB3KSB7CisJCXcucHV0TG9uZyh3MSk7CisJCXcucHV0TG9uZyh3Mik7CisJCXcucHV0TG9uZyh3Myk7CisJCXcucHV0TG9uZyh3NCk7CisJfQorCisJLyoqCisJICogQ29weSB0aGlzIExvbmdPYmplY3RJZCB0byBhIGJ5dGUgYXJyYXkuCisJICoKKwkgKiBAcGFyYW0gYgorCSAqICAgICAgICAgICAgdGhlIGJ1ZmZlciB0byBjb3B5IHRvLgorCSAqIEBwYXJhbSBvCisJICogICAgICAgICAgICB0aGUgb2Zmc2V0IHdpdGhpbiBiIHRvIHdyaXRlIGF0LgorCSAqLworCXB1YmxpYyB2b2lkIGNvcHlSYXdUbyhmaW5hbCBieXRlW10gYiwgZmluYWwgaW50IG8pIHsKKwkJTkIuZW5jb2RlSW50NjQoYiwgbywgdzEpOworCQlOQi5lbmNvZGVJbnQ2NChiLCBvICsgOCwgdzIpOworCQlOQi5lbmNvZGVJbnQ2NChiLCBvICsgMTYsIHczKTsKKwkJTkIuZW5jb2RlSW50NjQoYiwgbyArIDI0LCB3NCk7CisJfQorCisJLyoqCisJICogQ29weSB0aGlzIExvbmdPYmplY3RJZCB0byBhbiBsb25nIGFycmF5LgorCSAqCisJICogQHBhcmFtIGIKKwkgKiAgICAgICAgICAgIHRoZSBidWZmZXIgdG8gY29weSB0by4KKwkgKiBAcGFyYW0gbworCSAqICAgICAgICAgICAgdGhlIG9mZnNldCB3aXRoaW4gYiB0byB3cml0ZSBhdC4KKwkgKi8KKwlwdWJsaWMgdm9pZCBjb3B5UmF3VG8oZmluYWwgbG9uZ1tdIGIsIGZpbmFsIGludCBvKSB7CisJCWJbb10gPSB3MTsKKwkJYltvICsgMV0gPSB3MjsKKwkJYltvICsgMl0gPSB3MzsKKwkJYltvICsgM10gPSB3NDsKKwl9CisKKwkvKioKKwkgKiBDb3B5IHRoaXMgTG9uZ09iamVjdElkIHRvIGFuIG91dHB1dCB3cml0ZXIgaW4gcmF3IGJpbmFyeS4KKwkgKgorCSAqIEBwYXJhbSB3CisJICogICAgICAgICAgICB0aGUgc3RyZWFtIHRvIHdyaXRlIHRvLgorCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KKwkgKiAgICAgICAgICAgICB0aGUgc3RyZWFtIHdyaXRpbmcgZmFpbGVkLgorCSAqLworCXB1YmxpYyB2b2lkIGNvcHlSYXdUbyhmaW5hbCBPdXRwdXRTdHJlYW0gdykgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJd3JpdGVSYXdMb25nKHcsIHcxKTsKKwkJd3JpdGVSYXdMb25nKHcsIHcyKTsKKwkJd3JpdGVSYXdMb25nKHcsIHczKTsKKwkJd3JpdGVSYXdMb25nKHcsIHc0KTsKKwl9CisKKwlwcml2YXRlIHN0YXRpYyB2b2lkIHdyaXRlUmF3TG9uZyhmaW5hbCBPdXRwdXRTdHJlYW0gdywgbG9uZyB2KQorCQkJdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJdy53cml0ZSgoaW50KSAodiA+Pj4gNTYpKTsKKwkJdy53cml0ZSgoaW50KSAodiA+Pj4gNDgpKTsKKwkJdy53cml0ZSgoaW50KSAodiA+Pj4gNDApKTsKKwkJdy53cml0ZSgoaW50KSAodiA+Pj4gMzIpKTsKKwkJdy53cml0ZSgoaW50KSAodiA+Pj4gMjQpKTsKKwkJdy53cml0ZSgoaW50KSAodiA+Pj4gMTYpKTsKKwkJdy53cml0ZSgoaW50KSAodiA+Pj4gOCkpOworCQl3LndyaXRlKChpbnQpIHYpOworCX0KKworCS8qKgorCSAqIENvcHkgdGhpcyBMb25nT2JqZWN0SWQgdG8gYW4gb3V0cHV0IHdyaXRlciBpbiBoZXggZm9ybWF0LgorCSAqCisJICogQHBhcmFtIHcKKwkgKiAgICAgICAgICAgIHRoZSBzdHJlYW0gdG8gY29weSB0by4KKwkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCisJICogICAgICAgICAgICAgdGhlIHN0cmVhbSB3cml0aW5nIGZhaWxlZC4KKwkgKi8KKwlwdWJsaWMgdm9pZCBjb3B5VG8oZmluYWwgT3V0cHV0U3RyZWFtIHcpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCXcud3JpdGUodG9IZXhCeXRlQXJyYXkoKSk7CisJfQorCisJLyoqCisJICogQ29weSB0aGlzIExvbmdPYmplY3RJZCB0byBhIGJ5dGUgYXJyYXkgaW4gaGV4IGZvcm1hdC4KKwkgKgorCSAqIEBwYXJhbSBiCisJICogICAgICAgICAgICB0aGUgYnVmZmVyIHRvIGNvcHkgdG8uCisJICogQHBhcmFtIG8KKwkgKiAgICAgICAgICAgIHRoZSBvZmZzZXQgd2l0aGluIGIgdG8gd3JpdGUgYXQuCisJICovCisJcHVibGljIHZvaWQgY29weVRvKGJ5dGVbXSBiLCBpbnQgbykgeworCQlmb3JtYXRIZXhCeXRlKGIsIG8gKyAwLCB3MSk7CisJCWZvcm1hdEhleEJ5dGUoYiwgbyArIDE2LCB3Mik7CisJCWZvcm1hdEhleEJ5dGUoYiwgbyArIDMyLCB3Myk7CisJCWZvcm1hdEhleEJ5dGUoYiwgbyArIDQ4LCB3NCk7CisJfQorCisJLyoqCisJICogQ29weSB0aGlzIExvbmdPYmplY3RJZCB0byBhIEJ5dGVCdWZmZXIgaW4gaGV4IGZvcm1hdC4KKwkgKgorCSAqIEBwYXJhbSBiCisJICogICAgICAgICAgICB0aGUgYnVmZmVyIHRvIGNvcHkgdG8uCisJICovCisJcHVibGljIHZvaWQgY29weVRvKEJ5dGVCdWZmZXIgYikgeworCQliLnB1dCh0b0hleEJ5dGVBcnJheSgpKTsKKwl9CisKKwlwcml2YXRlIGJ5dGVbXSB0b0hleEJ5dGVBcnJheSgpIHsKKwkJZmluYWwgYnl0ZVtdIGRzdCA9IG5ldyBieXRlW0NvbnN0YW50cy5MT05HX09CSkVDVF9JRF9TVFJJTkdfTEVOR1RIXTsKKwkJZm9ybWF0SGV4Qnl0ZShkc3QsIDAsIHcxKTsKKwkJZm9ybWF0SGV4Qnl0ZShkc3QsIDE2LCB3Mik7CisJCWZvcm1hdEhleEJ5dGUoZHN0LCAzMiwgdzMpOworCQlmb3JtYXRIZXhCeXRlKGRzdCwgNDgsIHc0KTsKKwkJcmV0dXJuIGRzdDsKKwl9CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBieXRlW10gaGV4Ynl0ZSA9IHsgJzAnLCAnMScsICcyJywgJzMnLCAnNCcsICc1JywgJzYnLAorCQkJJzcnLCAnOCcsICc5JywgJ2EnLCAnYicsICdjJywgJ2QnLCAnZScsICdmJyB9OworCisJcHJpdmF0ZSBzdGF0aWMgdm9pZCBmb3JtYXRIZXhCeXRlKGZpbmFsIGJ5dGVbXSBkc3QsIGZpbmFsIGludCBwLCBsb25nIHcpIHsKKwkJaW50IG8gPSBwICsgMTU7CisJCXdoaWxlIChvID49IHAgJiYgdyAhPSAwKSB7CisJCQlkc3Rbby0tXSA9IGhleGJ5dGVbKGludCkgKHcgJiAweGYpXTsKKwkJCXcgPj4+PSA0OworCQl9CisJCXdoaWxlIChvID49IHApCisJCQlkc3Rbby0tXSA9ICcwJzsKKwl9CisKKwkvKioKKwkgKiBDb3B5IHRoaXMgTG9uZ09iamVjdElkIHRvIGFuIG91dHB1dCB3cml0ZXIgaW4gaGV4IGZvcm1hdC4KKwkgKgorCSAqIEBwYXJhbSB3CisJICogICAgICAgICAgICB0aGUgc3RyZWFtIHRvIGNvcHkgdG8uCisJICogQHRocm93cyBJT0V4Y2VwdGlvbgorCSAqICAgICAgICAgICAgIHRoZSBzdHJlYW0gd3JpdGluZyBmYWlsZWQuCisJICovCisJcHVibGljIHZvaWQgY29weVRvKGZpbmFsIFdyaXRlciB3KSB0aHJvd3MgSU9FeGNlcHRpb24geworCQl3LndyaXRlKHRvSGV4Q2hhckFycmF5KCkpOworCX0KKworCS8qKgorCSAqIENvcHkgdGhpcyBMb25nT2JqZWN0SWQgdG8gYW4gb3V0cHV0IHdyaXRlciBpbiBoZXggZm9ybWF0LgorCSAqCisJICogQHBhcmFtIHRtcAorCSAqICAgICAgICAgICAgdGVtcG9yYXJ5IGNoYXIgYXJyYXkgdG8gYnVmZmVyIGNvbnN0cnVjdCBpbnRvIGJlZm9yZSB3cml0aW5nLgorCSAqICAgICAgICAgICAgTXVzdCBiZSBhdCBsZWFzdCBsYXJnZSBlbm91Z2ggdG8gaG9sZCAyIGRpZ2l0cyBmb3IgZWFjaCBieXRlCisJICogICAgICAgICAgICBvZiBvYmplY3QgaWQgKDY0IGNoYXJhY3RlcnMgb3IgbGFyZ2VyKS4KKwkgKiBAcGFyYW0gdworCSAqICAgICAgICAgICAgdGhlIHN0cmVhbSB0byBjb3B5IHRvLgorCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KKwkgKiAgICAgICAgICAgICB0aGUgc3RyZWFtIHdyaXRpbmcgZmFpbGVkLgorCSAqLworCXB1YmxpYyB2b2lkIGNvcHlUbyhmaW5hbCBjaGFyW10gdG1wLCBmaW5hbCBXcml0ZXIgdykgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJdG9IZXhDaGFyQXJyYXkodG1wKTsKKwkJdy53cml0ZSh0bXAsIDAsIENvbnN0YW50cy5MT05HX09CSkVDVF9JRF9TVFJJTkdfTEVOR1RIKTsKKwl9CisKKwkvKioKKwkgKiBDb3B5IHRoaXMgTG9uZ09iamVjdElkIHRvIGEgU3RyaW5nQnVpbGRlciBpbiBoZXggZm9ybWF0LgorCSAqCisJICogQHBhcmFtIHRtcAorCSAqICAgICAgICAgICAgdGVtcG9yYXJ5IGNoYXIgYXJyYXkgdG8gYnVmZmVyIGNvbnN0cnVjdCBpbnRvIGJlZm9yZSB3cml0aW5nLgorCSAqICAgICAgICAgICAgTXVzdCBiZSBhdCBsZWFzdCBsYXJnZSBlbm91Z2ggdG8gaG9sZCAyIGRpZ2l0cyBmb3IgZWFjaCBieXRlCisJICogICAgICAgICAgICBvZiBvYmplY3QgaWQgKDY0IGNoYXJhY3RlcnMgb3IgbGFyZ2VyKS4KKwkgKiBAcGFyYW0gdworCSAqICAgICAgICAgICAgdGhlIHN0cmluZyB0byBhcHBlbmQgb250by4KKwkgKi8KKwlwdWJsaWMgdm9pZCBjb3B5VG8oZmluYWwgY2hhcltdIHRtcCwgZmluYWwgU3RyaW5nQnVpbGRlciB3KSB7CisJCXRvSGV4Q2hhckFycmF5KHRtcCk7CisJCXcuYXBwZW5kKHRtcCwgMCwgQ29uc3RhbnRzLkxPTkdfT0JKRUNUX0lEX1NUUklOR19MRU5HVEgpOworCX0KKworCWNoYXJbXSB0b0hleENoYXJBcnJheSgpIHsKKwkJZmluYWwgY2hhcltdIGRzdCA9IG5ldyBjaGFyW0NvbnN0YW50cy5MT05HX09CSkVDVF9JRF9TVFJJTkdfTEVOR1RIXTsKKwkJdG9IZXhDaGFyQXJyYXkoZHN0KTsKKwkJcmV0dXJuIGRzdDsKKwl9CisKKwlwcml2YXRlIHZvaWQgdG9IZXhDaGFyQXJyYXkoZmluYWwgY2hhcltdIGRzdCkgeworCQlmb3JtYXRIZXhDaGFyKGRzdCwgMCwgdzEpOworCQlmb3JtYXRIZXhDaGFyKGRzdCwgMTYsIHcyKTsKKwkJZm9ybWF0SGV4Q2hhcihkc3QsIDMyLCB3Myk7CisJCWZvcm1hdEhleENoYXIoZHN0LCA0OCwgdzQpOworCX0KKworCXByaXZhdGUgc3RhdGljIGZpbmFsIGNoYXJbXSBoZXhjaGFyID0geyAnMCcsICcxJywgJzInLCAnMycsICc0JywgJzUnLCAnNicsCisJCQknNycsICc4JywgJzknLCAnYScsICdiJywgJ2MnLCAnZCcsICdlJywgJ2YnIH07CisKKwlzdGF0aWMgdm9pZCBmb3JtYXRIZXhDaGFyKGZpbmFsIGNoYXJbXSBkc3QsIGZpbmFsIGludCBwLCBsb25nIHcpIHsKKwkJaW50IG8gPSBwICsgMTU7CisJCXdoaWxlIChvID49IHAgJiYgdyAhPSAwKSB7CisJCQlkc3Rbby0tXSA9IGhleGNoYXJbKGludCkgKHcgJiAweGYpXTsKKwkJCXcgPj4+PSA0OworCQl9CisJCXdoaWxlIChvID49IHApCisJCQlkc3Rbby0tXSA9ICcwJzsKKwl9CisKKwlAU3VwcHJlc3NXYXJuaW5ncygibmxzIikKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlyZXR1cm4gIkFueUxvbmdPYmplY3RJZFsiICsgbmFtZSgpICsgIl0iOworCX0KKworCS8qKgorCSAqIEByZXR1cm4gc3RyaW5nIGZvcm0gb2YgdGhlIFNIQS0yNTYsIGluIGxvd2VyIGNhc2UgaGV4YWRlY2ltYWwuCisJICovCisJcHVibGljIGZpbmFsIFN0cmluZyBuYW1lKCkgeworCQlyZXR1cm4gbmV3IFN0cmluZyh0b0hleENoYXJBcnJheSgpKTsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIHN0cmluZyBmb3JtIG9mIHRoZSBTSEEtMjU2LCBpbiBsb3dlciBjYXNlIGhleGFkZWNpbWFsLgorCSAqLworCXB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0TmFtZSgpIHsKKwkJcmV0dXJuIG5hbWUoKTsKKwl9CisKKwkvKioKKwkgKiBSZXR1cm4gYW4gYWJicmV2aWF0aW9uIChwcmVmaXgpIG9mIHRoaXMgb2JqZWN0IFNIQS0yNTYuCisJICogPHA+CisJICogVGhpcyBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCBndWFyYW50ZWUgdW5pcXVlbmVzcy4gQ2FsbGVycyBzaG91bGQgaW5zdGVhZAorCSAqIHVzZSB7QGxpbmsgT2JqZWN0UmVhZGVyI2FiYnJldmlhdGUoQW55T2JqZWN0SWQsIGludCl9IHRvIG9idGFpbiBhIHVuaXF1ZQorCSAqIGFiYnJldmlhdGlvbiB3aXRoaW4gdGhlIHNjb3BlIG9mIGEgcGFydGljdWxhciBvYmplY3QgZGF0YWJhc2UuCisJICoKKwkgKiBAcGFyYW0gbGVuCisJICogICAgICAgICAgICBsZW5ndGggb2YgdGhlIGFiYnJldmlhdGVkIHN0cmluZy4KKwkgKiBAcmV0dXJuIFNIQS0yNTYgYWJicmV2aWF0aW9uLgorCSAqLworCXB1YmxpYyBBYmJyZXZpYXRlZExvbmdPYmplY3RJZCBhYmJyZXZpYXRlKGZpbmFsIGludCBsZW4pIHsKKwkJZmluYWwgbG9uZyBhID0gQWJicmV2aWF0ZWRMb25nT2JqZWN0SWQubWFzayhsZW4sIDEsIHcxKTsKKwkJZmluYWwgbG9uZyBiID0gQWJicmV2aWF0ZWRMb25nT2JqZWN0SWQubWFzayhsZW4sIDIsIHcyKTsKKwkJZmluYWwgbG9uZyBjID0gQWJicmV2aWF0ZWRMb25nT2JqZWN0SWQubWFzayhsZW4sIDMsIHczKTsKKwkJZmluYWwgbG9uZyBkID0gQWJicmV2aWF0ZWRMb25nT2JqZWN0SWQubWFzayhsZW4sIDQsIHc0KTsKKwkJcmV0dXJuIG5ldyBBYmJyZXZpYXRlZExvbmdPYmplY3RJZChsZW4sIGEsIGIsIGMsIGQpOworCX0KKworCS8qKgorCSAqIE9idGFpbiBhbiBpbW11dGFibGUgY29weSBvZiB0aGlzIGN1cnJlbnQgb2JqZWN0LgorCSAqIDxwPgorCSAqIE9ubHkgcmV0dXJucyA8Y29kZT50aGlzPC9jb2RlPiBpZiB0aGlzIGluc3RhbmNlIGlzIGFuIHVuc3ViY2xhc3NlZAorCSAqIGluc3RhbmNlIG9mIHtAbGluayBMb25nT2JqZWN0SWR9OyBvdGhlcndpc2UgYSBuZXcgaW5zdGFuY2UgaXMgcmV0dXJuZWQKKwkgKiBob2xkaW5nIHRoZSBzYW1lIHZhbHVlLgorCSAqIDxwPgorCSAqIFRoaXMgbWV0aG9kIGlzIHVzZWZ1bCB0byBzaGVkIGFueSBhZGRpdGlvbmFsIG1lbW9yeSB0aGF0IG1heSBiZSB0aWVkIHRvCisJICogdGhlIHN1YmNsYXNzLCB5ZXQgcmV0YWluIHRoZSB1bmlxdWUgaWRlbnRpdHkgb2YgdGhlIG9iamVjdCBpZCBmb3IgZnV0dXJlCisJICogbG9va3VwcyB3aXRoaW4gbWFwcyBhbmQgcmVwb3NpdG9yaWVzLgorCSAqCisJICogQHJldHVybiBhbiBpbW11dGFibGUgY29weSwgdXNpbmcgdGhlIHNtYWxsZXN0IG1lbW9yeSBmb290cHJpbnQgcG9zc2libGUuCisJICovCisJcHVibGljIGZpbmFsIExvbmdPYmplY3RJZCBjb3B5KCkgeworCQlpZiAoZ2V0Q2xhc3MoKSA9PSBMb25nT2JqZWN0SWQuY2xhc3MpCisJCQlyZXR1cm4gKExvbmdPYmplY3RJZCkgdGhpczsKKwkJcmV0dXJuIG5ldyBMb25nT2JqZWN0SWQodGhpcyk7CisJfQorCisJLyoqCisJICogT2J0YWluIGFuIGltbXV0YWJsZSBjb3B5IG9mIHRoaXMgY3VycmVudCBvYmplY3QuCisJICogPHA+CisJICogU2VlIHtAbGluayAjY29weSgpfSBpZiA8Y29kZT50aGlzPC9jb2RlPiBpcyBhIHBvc3NpYmx5IHN1YmNsYXNzZWQgKGJ1dAorCSAqIGltbXV0YWJsZSkgaWRlbnRpdHkgYW5kIHRoZSBhcHBsaWNhdGlvbiBuZWVkcyBhIGxpZ2h0d2VpZ2h0IGlkZW50aXR5CisJICogPGk+b25seTwvaT4gcmVmZXJlbmNlLgorCSAqCisJICogQHJldHVybiBhbiBpbW11dGFibGUgY29weS4gTWF5IGJlIDxjb2RlPnRoaXM8L2NvZGU+IGlmIHRoaXMgaXMgYWxyZWFkeSBhbgorCSAqICAgICAgICAgaW1tdXRhYmxlIGluc3RhbmNlLgorCSAqLworCXB1YmxpYyBhYnN0cmFjdCBMb25nT2JqZWN0SWQgdG9PYmplY3RJZCgpOworfQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGZzL2xpYi9Db25zdGFudHMuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQubGZzL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xmcy9saWIvQ29uc3RhbnRzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NhZGJmNwotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQubGZzL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xmcy9saWIvQ29uc3RhbnRzLmphdmEKQEAgLTAsMCArMSwxMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUsIE1hdHRoaWFzIFNvaG4gPG1hdHRoaWFzLnNvaG5Ac2FwLmNvbT4KKyAqIGFuZCBvdGhlciBjb3B5cmlnaHQgb3duZXJzIGFzIGRvY3VtZW50ZWQgaW4gdGhlIHByb2plY3QncyBJUCBsb2cuCisgKgorICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2MS4wIHdoaWNoCisgKiBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgaXMgcmVwcm9kdWNlZCBiZWxvdywgYW5kIGlzCisgKiBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VkbC12MTAucGhwCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgSW5jLiBub3IgdGhlCisgKiAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCisgKiAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3IKKyAqICAgd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORAorICogQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKyAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGCisgKiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5saWI7CisKK2ltcG9ydCBqYXZhLnNlY3VyaXR5Lk1lc3NhZ2VEaWdlc3Q7CitpbXBvcnQgamF2YS5zZWN1cml0eS5Ob1N1Y2hBbGdvcml0aG1FeGNlcHRpb247CitpbXBvcnQgamF2YS50ZXh0Lk1lc3NhZ2VGb3JtYXQ7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5pbnRlcm5hbC5MZnNUZXh0OworCisvKioKKyAqIE1pc2MuIGNvbnN0YW50cyB1c2VkIHRocm91Z2hvdXQgSkdpdCBMRlMgZXh0ZW5zaW9uLgorICoKKyAqIEBzaW5jZSA0LjMKKyAqKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJubHMiKQorcHVibGljIGZpbmFsIGNsYXNzIENvbnN0YW50cyB7CisJLyoqIEhhc2ggZnVuY3Rpb24gdXNlZCBuYXRpdmVseSBieSBHaXQgTEZTIGV4dGVuc2lvbiBmb3IgbGFyZ2Ugb2JqZWN0cy4gKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTE9OR19IQVNIX0ZVTkNUSU9OID0gIlNIQS0yNTYiOworCisJLyoqCisJICogQSBHaXQgTEZTIGxhcmdlIG9iamVjdCBoYXNoIGlzIDI1NiBiaXRzLCBpLmUuIDMyIGJ5dGVzLgorCSAqIDxwPgorCSAqIENoYW5naW5nIHRoaXMgYXNzdW1wdGlvbiBpcyBub3QgZ29pbmcgdG8gYmUgYXMgZWFzeSBhcyBjaGFuZ2luZyB0aGlzCisJICogZGVjbGFyYXRpb24uCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTE9OR19PQkpFQ1RfSURfTEVOR1RIID0gMzI7CisKKwkvKioKKwkgKiBBIEdpdCBMRlMgbGFyZ2Ugb2JqZWN0IGNhbiBiZSBleHByZXNzZWQgYXMgYSA2NCBjaGFyYWN0ZXIgc3RyaW5nIG9mCisJICogaGV4YWRlY2ltYWwgZGlnaXRzLgorCSAqCisJICogQHNlZSAjTE9OR19PQkpFQ1RfSURfTEVOR1RICisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTE9OR19PQkpFQ1RfSURfU1RSSU5HX0xFTkdUSCA9IExPTkdfT0JKRUNUX0lEX0xFTkdUSAorCQkJKiAyOworCisJLyoqCisJICogQ3JlYXRlIGEgbmV3IGRpZ2VzdCBmdW5jdGlvbiBmb3Igb2JqZWN0cy4KKwkgKgorCSAqIEByZXR1cm4gYSBuZXcgZGlnZXN0IG9iamVjdC4KKwkgKiBAdGhyb3dzIFJ1bnRpbWVFeGNlcHRpb24KKwkgKiAgICAgICAgICAgICB0aGlzIEphdmEgdmlydHVhbCBtYWNoaW5lIGRvZXMgbm90IHN1cHBvcnQgdGhlIHJlcXVpcmVkIGhhc2gKKwkgKiAgICAgICAgICAgICBmdW5jdGlvbi4gVmVyeSB1bmxpa2VseSBnaXZlbiB0aGF0IEpHaXQgdXNlcyBhIGhhc2ggZnVuY3Rpb24KKwkgKiAgICAgICAgICAgICB0aGF0IGlzIGluIHRoZSBKYXZhIHJlZmVyZW5jZSBzcGVjaWZpY2F0aW9uLgorCSAqLworCXB1YmxpYyBzdGF0aWMgTWVzc2FnZURpZ2VzdCBuZXdNZXNzYWdlRGlnZXN0KCkgeworCQl0cnkgeworCQkJcmV0dXJuIE1lc3NhZ2VEaWdlc3QuZ2V0SW5zdGFuY2UoTE9OR19IQVNIX0ZVTkNUSU9OKTsKKwkJfSBjYXRjaCAoTm9TdWNoQWxnb3JpdGhtRXhjZXB0aW9uIG5zYWUpIHsKKwkJCXRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKE1lc3NhZ2VGb3JtYXQuZm9ybWF0KAorCQkJCQlMZnNUZXh0LmdldCgpLnJlcXVpcmVkSGFzaEZ1bmN0aW9uTm90QXZhaWxhYmxlLAorCQkJCQlMT05HX0hBU0hfRlVOQ1RJT04pLCBuc2FlKTsKKwkJfQorCX0KKworCXN0YXRpYyB7CisJCWlmIChMT05HX09CSkVDVF9JRF9MRU5HVEggIT0gbmV3TWVzc2FnZURpZ2VzdCgpLmdldERpZ2VzdExlbmd0aCgpKQorCQkJdGhyb3cgbmV3IExpbmthZ2VFcnJvcigKKwkJCQkJTGZzVGV4dC5nZXQoKS5pbmNvcnJlY3RMT05HX09CSkVDVF9JRF9MRU5HVEgpOworCX0KKworCS8qKgorCSAqIENvbnRlbnQgdHlwZSB1c2VkIGJ5IExGUyBSRVNUIEFQSSBhcyBkZWZpbmVkIGluCisJICoge0BsaW5rICJodHRwczovL2dpdGh1Yi5jb20vZ2l0aHViL2dpdC1sZnMvYmxvYi9tYXN0ZXIvZG9jcy9hcGkvaHR0cC12MS1iYXRjaC5tZCJ9CisJICovCisJcHVibGljIHN0YXRpYyBTdHJpbmcgQ09OVEVOVF9UWVBFX0dJVF9MRlNfSlNPTiA9ICJhcHBsaWNhdGlvbi92bmQuZ2l0LWxmcytqc29uIjsKKworCS8qKgorCSAqICJhcmJpdHJhcnkgYmluYXJ5IGRhdGEiIGFzIGRlZmluZWQgaW4gUkZDIDIwNDYKKwkgKiB7QGxpbmsgImh0dHBzOi8vd3d3LmlldGYub3JnL3JmYy9yZmMyMDQ2LnR4dCJ9CisJICovCisJcHVibGljIHN0YXRpYyBTdHJpbmcgSERSX0FQUExJQ0FUSU9OX09DVEVUX1NUUkVBTSA9ICJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xmcy9saWIvTG9uZ09iamVjdElkLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy9zcmMvb3JnL2VjbGlwc2UvamdpdC9sZnMvbGliL0xvbmdPYmplY3RJZC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0YTRlNDMKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy9zcmMvb3JnL2VjbGlwc2UvamdpdC9sZnMvbGliL0xvbmdPYmplY3RJZC5qYXZhCkBAIC0wLDAgKzEsMzA5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1LCBNYXR0aGlhcyBTb2huIDxtYXR0aGlhcy5zb2huQHNhcC5jb20+CisgKiBhbmQgb3RoZXIgY29weXJpZ2h0IG93bmVycyBhcyBkb2N1bWVudGVkIGluIHRoZSBwcm9qZWN0J3MgSVAgbG9nLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlCisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgRGlzdHJpYnV0aW9uIExpY2Vuc2UgdjEuMCB3aGljaAorICogYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGlzIHJlcHJvZHVjZWQgYmVsb3csIGFuZCBpcworICogYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lZGwtdjEwLnBocAorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIEluYy4gbm9yIHRoZQorICogICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorICogICBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCisgKiAgIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQKKyAqIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCisgKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRgorICogQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworcGFja2FnZSBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5saWI7CisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uT2JqZWN0SW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5PYmplY3RPdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5TZXJpYWxpemFibGU7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5lcnJvcnMuSW52YWxpZExvbmdPYmplY3RJZEV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5PYmplY3RJZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuTkI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC51dGlsLlJhd1BhcnNlVXRpbHM7CisKKy8qKgorICogQSBTSEEtMjU2IGFic3RyYWN0aW9uLgorICoKKyAqIFBvcnRlZCB0byBTSEEtMjU2IGZyb20ge0BsaW5rIE9iamVjdElkfQorICoKKyAqIEBzaW5jZSA0LjMKKyAqLworcHVibGljIGNsYXNzIExvbmdPYmplY3RJZCBleHRlbmRzIEFueUxvbmdPYmplY3RJZCBpbXBsZW1lbnRzIFNlcmlhbGl6YWJsZSB7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBMb25nT2JqZWN0SWQgWkVST0lEOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFpFUk9JRF9TVFI7CisKKwlzdGF0aWMgeworCQlaRVJPSUQgPSBuZXcgTG9uZ09iamVjdElkKDBMLCAwTCwgMEwsIDBMKTsKKwkJWkVST0lEX1NUUiA9IFpFUk9JRC5uYW1lKCk7CisJfQorCisJLyoqCisJICogR2V0IHRoZSBzcGVjaWFsIGFsbC16ZXJvIExvbmdPYmplY3RJZC4KKwkgKgorCSAqIEByZXR1cm4gdGhlIGFsbC16ZXJvIExvbmdPYmplY3RJZCwgb2Z0ZW4gdXNlZCB0byBzdGFuZC1pbiBmb3Igbm8gb2JqZWN0LgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgTG9uZ09iamVjdElkIHplcm9JZCgpIHsKKwkJcmV0dXJuIFpFUk9JRDsKKwl9CisKKwkvKioKKwkgKiBUZXN0IGEgc3RyaW5nIG9mIGNoYXJhY3RlcnMgdG8gdmVyaWZ5IHRoYXQgaXQgY2FuIGJlIGludGVycHJldGVkIGFzCisJICogTG9uZ09iamVjdElkLgorCSAqIDxwPgorCSAqIElmIHRydWUgdGhlIHN0cmluZyBjYW4gYmUgcGFyc2VkIHdpdGgge0BsaW5rICNmcm9tU3RyaW5nKFN0cmluZyl9LgorCSAqCisJICogQHBhcmFtIGlkCisJICogICAgICAgICAgICB0aGUgc3RyaW5nIHRvIHRlc3QuCisJICogQHJldHVybiB0cnVlIGlmIHRoZSBzdHJpbmcgY2FuIGNvbnZlcnRlZCBpbnRvIGFuIExvbmdPYmplY3RJZC4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGJvb2xlYW4gaXNJZChmaW5hbCBTdHJpbmcgaWQpIHsKKwkJaWYgKGlkLmxlbmd0aCgpICE9IENvbnN0YW50cy5MT05HX09CSkVDVF9JRF9TVFJJTkdfTEVOR1RIKQorCQkJcmV0dXJuIGZhbHNlOworCQl0cnkgeworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBDb25zdGFudHMuTE9OR19PQkpFQ1RfSURfU1RSSU5HX0xFTkdUSDsgaSsrKSB7CisJCQkJUmF3UGFyc2VVdGlscy5wYXJzZUhleEludDQoKGJ5dGUpIGlkLmNoYXJBdChpKSk7CisJCQl9CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfSBjYXRjaCAoQXJyYXlJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGUpIHsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCX0KKworCS8qKgorCSAqIENvbnZlcnQgYSBMb25nT2JqZWN0SWQgaW50byBhIGhleCBzdHJpbmcgcmVwcmVzZW50YXRpb24uCisJICoKKwkgKiBAcGFyYW0gaQorCSAqICAgICAgICAgICAgdGhlIGlkIHRvIGNvbnZlcnQuIE1heSBiZSBudWxsLgorCSAqIEByZXR1cm4gdGhlIGhleCBzdHJpbmcgY29udmVyc2lvbiBvZiB0aGlzIGlkJ3MgY29udGVudC4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyB0b1N0cmluZyhmaW5hbCBMb25nT2JqZWN0SWQgaSkgeworCQlyZXR1cm4gaSAhPSBudWxsID8gaS5uYW1lKCkgOiBaRVJPSURfU1RSOworCX0KKworCS8qKgorCSAqIENvbXBhcmUgdHdvIG9iamVjdCBpZGVudGlmaWVyIGJ5dGUgc2VxdWVuY2VzIGZvciBlcXVhbGl0eS4KKwkgKgorCSAqIEBwYXJhbSBmaXJzdEJ1ZmZlcgorCSAqICAgICAgICAgICAgdGhlIGZpcnN0IGJ1ZmZlciB0byBjb21wYXJlIGFnYWluc3QuIE11c3QgaGF2ZSBhdCBsZWFzdCAzMgorCSAqICAgICAgICAgICAgYnl0ZXMgZnJvbSBwb3NpdGlvbiBmaSB0aHJvdWdoIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4KKwkgKiBAcGFyYW0gZmkKKwkgKiAgICAgICAgICAgIGZpcnN0IG9mZnNldCB3aXRoaW4gZmlyc3RCdWZmZXIgdG8gYmVnaW4gdGVzdGluZy4KKwkgKiBAcGFyYW0gc2Vjb25kQnVmZmVyCisJICogICAgICAgICAgICB0aGUgc2Vjb25kIGJ1ZmZlciB0byBjb21wYXJlIGFnYWluc3QuIE11c3QgaGF2ZSBhdCBsZWFzdCAzMgorCSAqICAgICAgICAgICAgYnl0ZXMgZnJvbSBwb3NpdGlvbiBzaSB0aHJvdWdoIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4KKwkgKiBAcGFyYW0gc2kKKwkgKiAgICAgICAgICAgIGZpcnN0IG9mZnNldCB3aXRoaW4gc2Vjb25kQnVmZmVyIHRvIGJlZ2luIHRlc3RpbmcuCisJICogQHJldHVybiB0cnVlIGlmIHRoZSB0d28gaWRlbnRpZmllcnMgYXJlIHRoZSBzYW1lLgorCSAqLworCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBlcXVhbHMoZmluYWwgYnl0ZVtdIGZpcnN0QnVmZmVyLCBmaW5hbCBpbnQgZmksCisJCQlmaW5hbCBieXRlW10gc2Vjb25kQnVmZmVyLCBmaW5hbCBpbnQgc2kpIHsKKwkJcmV0dXJuIGZpcnN0QnVmZmVyW2ZpXSA9PSBzZWNvbmRCdWZmZXJbc2ldCisJCQkJJiYgZmlyc3RCdWZmZXJbZmkgKyAxXSA9PSBzZWNvbmRCdWZmZXJbc2kgKyAxXQorCQkJCSYmIGZpcnN0QnVmZmVyW2ZpICsgMl0gPT0gc2Vjb25kQnVmZmVyW3NpICsgMl0KKwkJCQkmJiBmaXJzdEJ1ZmZlcltmaSArIDNdID09IHNlY29uZEJ1ZmZlcltzaSArIDNdCisJCQkJJiYgZmlyc3RCdWZmZXJbZmkgKyA0XSA9PSBzZWNvbmRCdWZmZXJbc2kgKyA0XQorCQkJCSYmIGZpcnN0QnVmZmVyW2ZpICsgNV0gPT0gc2Vjb25kQnVmZmVyW3NpICsgNV0KKwkJCQkmJiBmaXJzdEJ1ZmZlcltmaSArIDZdID09IHNlY29uZEJ1ZmZlcltzaSArIDZdCisJCQkJJiYgZmlyc3RCdWZmZXJbZmkgKyA3XSA9PSBzZWNvbmRCdWZmZXJbc2kgKyA3XQorCQkJCSYmIGZpcnN0QnVmZmVyW2ZpICsgOF0gPT0gc2Vjb25kQnVmZmVyW3NpICsgOF0KKwkJCQkmJiBmaXJzdEJ1ZmZlcltmaSArIDldID09IHNlY29uZEJ1ZmZlcltzaSArIDldCisJCQkJJiYgZmlyc3RCdWZmZXJbZmkgKyAxMF0gPT0gc2Vjb25kQnVmZmVyW3NpICsgMTBdCisJCQkJJiYgZmlyc3RCdWZmZXJbZmkgKyAxMV0gPT0gc2Vjb25kQnVmZmVyW3NpICsgMTFdCisJCQkJJiYgZmlyc3RCdWZmZXJbZmkgKyAxMl0gPT0gc2Vjb25kQnVmZmVyW3NpICsgMTJdCisJCQkJJiYgZmlyc3RCdWZmZXJbZmkgKyAxM10gPT0gc2Vjb25kQnVmZmVyW3NpICsgMTNdCisJCQkJJiYgZmlyc3RCdWZmZXJbZmkgKyAxNF0gPT0gc2Vjb25kQnVmZmVyW3NpICsgMTRdCisJCQkJJiYgZmlyc3RCdWZmZXJbZmkgKyAxNV0gPT0gc2Vjb25kQnVmZmVyW3NpICsgMTVdCisJCQkJJiYgZmlyc3RCdWZmZXJbZmkgKyAxNl0gPT0gc2Vjb25kQnVmZmVyW3NpICsgMTZdCisJCQkJJiYgZmlyc3RCdWZmZXJbZmkgKyAxN10gPT0gc2Vjb25kQnVmZmVyW3NpICsgMTddCisJCQkJJiYgZmlyc3RCdWZmZXJbZmkgKyAxOF0gPT0gc2Vjb25kQnVmZmVyW3NpICsgMThdCisJCQkJJiYgZmlyc3RCdWZmZXJbZmkgKyAxOV0gPT0gc2Vjb25kQnVmZmVyW3NpICsgMTldCisJCQkJJiYgZmlyc3RCdWZmZXJbZmkgKyAyMF0gPT0gc2Vjb25kQnVmZmVyW3NpICsgMjBdCisJCQkJJiYgZmlyc3RCdWZmZXJbZmkgKyAyMV0gPT0gc2Vjb25kQnVmZmVyW3NpICsgMjFdCisJCQkJJiYgZmlyc3RCdWZmZXJbZmkgKyAyMl0gPT0gc2Vjb25kQnVmZmVyW3NpICsgMjJdCisJCQkJJiYgZmlyc3RCdWZmZXJbZmkgKyAyM10gPT0gc2Vjb25kQnVmZmVyW3NpICsgMjNdCisJCQkJJiYgZmlyc3RCdWZmZXJbZmkgKyAyNF0gPT0gc2Vjb25kQnVmZmVyW3NpICsgMjRdCisJCQkJJiYgZmlyc3RCdWZmZXJbZmkgKyAyNV0gPT0gc2Vjb25kQnVmZmVyW3NpICsgMjVdCisJCQkJJiYgZmlyc3RCdWZmZXJbZmkgKyAyNl0gPT0gc2Vjb25kQnVmZmVyW3NpICsgMjZdCisJCQkJJiYgZmlyc3RCdWZmZXJbZmkgKyAyN10gPT0gc2Vjb25kQnVmZmVyW3NpICsgMjddCisJCQkJJiYgZmlyc3RCdWZmZXJbZmkgKyAyOF0gPT0gc2Vjb25kQnVmZmVyW3NpICsgMjhdCisJCQkJJiYgZmlyc3RCdWZmZXJbZmkgKyAyOV0gPT0gc2Vjb25kQnVmZmVyW3NpICsgMjldCisJCQkJJiYgZmlyc3RCdWZmZXJbZmkgKyAzMF0gPT0gc2Vjb25kQnVmZmVyW3NpICsgMzBdCisJCQkJJiYgZmlyc3RCdWZmZXJbZmkgKyAzMV0gPT0gc2Vjb25kQnVmZmVyW3NpICsgMzFdOworCX0KKworCS8qKgorCSAqIENvbnZlcnQgYSBMb25nT2JqZWN0SWQgZnJvbSByYXcgYmluYXJ5IHJlcHJlc2VudGF0aW9uLgorCSAqCisJICogQHBhcmFtIGJzCisJICogICAgICAgICAgICB0aGUgcmF3IGJ5dGUgYnVmZmVyIHRvIHJlYWQgZnJvbS4gQXQgbGVhc3QgMzIgYnl0ZXMgbXVzdCBiZQorCSAqICAgICAgICAgICAgYXZhaWxhYmxlIHdpdGhpbiB0aGlzIGJ5dGUgYXJyYXkuCisJICogQHJldHVybiB0aGUgY29udmVydGVkIG9iamVjdCBpZC4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIExvbmdPYmplY3RJZCBmcm9tUmF3KGZpbmFsIGJ5dGVbXSBicykgeworCQlyZXR1cm4gZnJvbVJhdyhicywgMCk7CisJfQorCisJLyoqCisJICogQ29udmVydCBhIExvbmdPYmplY3RJZCBmcm9tIHJhdyBiaW5hcnkgcmVwcmVzZW50YXRpb24uCisJICoKKwkgKiBAcGFyYW0gYnMKKwkgKiAgICAgICAgICAgIHRoZSByYXcgYnl0ZSBidWZmZXIgdG8gcmVhZCBmcm9tLiBBdCBsZWFzdCAzMiBieXRlcyBhZnRlciBwCisJICogICAgICAgICAgICBtdXN0IGJlIGF2YWlsYWJsZSB3aXRoaW4gdGhpcyBieXRlIGFycmF5LgorCSAqIEBwYXJhbSBwCisJICogICAgICAgICAgICBwb3NpdGlvbiB0byByZWFkIHRoZSBmaXJzdCBieXRlIG9mIGRhdGEgZnJvbS4KKwkgKiBAcmV0dXJuIHRoZSBjb252ZXJ0ZWQgb2JqZWN0IGlkLgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgTG9uZ09iamVjdElkIGZyb21SYXcoZmluYWwgYnl0ZVtdIGJzLCBmaW5hbCBpbnQgcCkgeworCQlmaW5hbCBsb25nIGEgPSBOQi5kZWNvZGVJbnQ2NChicywgcCk7CisJCWZpbmFsIGxvbmcgYiA9IE5CLmRlY29kZUludDY0KGJzLCBwICsgOCk7CisJCWZpbmFsIGxvbmcgYyA9IE5CLmRlY29kZUludDY0KGJzLCBwICsgMTYpOworCQlmaW5hbCBsb25nIGQgPSBOQi5kZWNvZGVJbnQ2NChicywgcCArIDI0KTsKKwkJcmV0dXJuIG5ldyBMb25nT2JqZWN0SWQoYSwgYiwgYywgZCk7CisJfQorCisJLyoqCisJICogQ29udmVydCBhIExvbmdPYmplY3RJZCBmcm9tIHJhdyBiaW5hcnkgcmVwcmVzZW50YXRpb24uCisJICoKKwkgKiBAcGFyYW0gaXMKKwkgKiAgICAgICAgICAgIHRoZSByYXcgbG9uZyBidWZmZXIgdG8gcmVhZCBmcm9tLiBBdCBsZWFzdCA0IGxvbmdzIG11c3QgYmUKKwkgKiAgICAgICAgICAgIGF2YWlsYWJsZSB3aXRoaW4gdGhpcyBsb25nIGFycmF5LgorCSAqIEByZXR1cm4gdGhlIGNvbnZlcnRlZCBvYmplY3QgaWQuCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBMb25nT2JqZWN0SWQgZnJvbVJhdyhmaW5hbCBsb25nW10gaXMpIHsKKwkJcmV0dXJuIGZyb21SYXcoaXMsIDApOworCX0KKworCS8qKgorCSAqIENvbnZlcnQgYSBMb25nT2JqZWN0SWQgZnJvbSByYXcgYmluYXJ5IHJlcHJlc2VudGF0aW9uLgorCSAqCisJICogQHBhcmFtIGlzCisJICogICAgICAgICAgICB0aGUgcmF3IGxvbmcgYnVmZmVyIHRvIHJlYWQgZnJvbS4gQXQgbGVhc3QgNCBsb25ncyBhZnRlciBwCisJICogICAgICAgICAgICBtdXN0IGJlIGF2YWlsYWJsZSB3aXRoaW4gdGhpcyBsb25nIGFycmF5LgorCSAqIEBwYXJhbSBwCisJICogICAgICAgICAgICBwb3NpdGlvbiB0byByZWFkIHRoZSBmaXJzdCBsb25nIG9mIGRhdGEgZnJvbS4KKwkgKiBAcmV0dXJuIHRoZSBjb252ZXJ0ZWQgb2JqZWN0IGlkLgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgTG9uZ09iamVjdElkIGZyb21SYXcoZmluYWwgbG9uZ1tdIGlzLCBmaW5hbCBpbnQgcCkgeworCQlyZXR1cm4gbmV3IExvbmdPYmplY3RJZChpc1twXSwgaXNbcCArIDFdLCBpc1twICsgMl0sIGlzW3AgKyAzXSk7CisJfQorCisJLyoqCisJICogQ29udmVydCBhIExvbmdPYmplY3RJZCBmcm9tIGhleCBjaGFyYWN0ZXJzIChVUy1BU0NJSSkuCisJICoKKwkgKiBAcGFyYW0gYnVmCisJICogICAgICAgICAgICB0aGUgVVMtQVNDSUkgYnVmZmVyIHRvIHJlYWQgZnJvbS4gQXQgbGVhc3QgNjQgYnl0ZXMgYWZ0ZXIKKwkgKiAgICAgICAgICAgIG9mZnNldCBtdXN0IGJlIGF2YWlsYWJsZSB3aXRoaW4gdGhpcyBieXRlIGFycmF5LgorCSAqIEBwYXJhbSBvZmZzZXQKKwkgKiAgICAgICAgICAgIHBvc2l0aW9uIHRvIHJlYWQgdGhlIGZpcnN0IGNoYXJhY3RlciBmcm9tLgorCSAqIEByZXR1cm4gdGhlIGNvbnZlcnRlZCBvYmplY3QgaWQuCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBMb25nT2JqZWN0SWQgZnJvbVN0cmluZyhmaW5hbCBieXRlW10gYnVmLCBmaW5hbCBpbnQgb2Zmc2V0KSB7CisJCXJldHVybiBmcm9tSGV4U3RyaW5nKGJ1Ziwgb2Zmc2V0KTsKKwl9CisKKwkvKioKKwkgKiBDb252ZXJ0IGEgTG9uZ09iamVjdElkIGZyb20gaGV4IGNoYXJhY3RlcnMuCisJICoKKwkgKiBAcGFyYW0gc3RyCisJICogICAgICAgICAgICB0aGUgc3RyaW5nIHRvIHJlYWQgZnJvbS4gTXVzdCBiZSA2NCBjaGFyYWN0ZXJzIGxvbmcuCisJICogQHJldHVybiB0aGUgY29udmVydGVkIG9iamVjdCBpZC4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIExvbmdPYmplY3RJZCBmcm9tU3RyaW5nKGZpbmFsIFN0cmluZyBzdHIpIHsKKwkJaWYgKHN0ci5sZW5ndGgoKSAhPSBDb25zdGFudHMuTE9OR19PQkpFQ1RfSURfU1RSSU5HX0xFTkdUSCkKKwkJCXRocm93IG5ldyBJbnZhbGlkTG9uZ09iamVjdElkRXhjZXB0aW9uKHN0cik7CisJCXJldHVybiBmcm9tSGV4U3RyaW5nKG9yZy5lY2xpcHNlLmpnaXQubGliLkNvbnN0YW50cy5lbmNvZGVBU0NJSShzdHIpLAorCQkJCTApOworCX0KKworCXByaXZhdGUgc3RhdGljIGZpbmFsIExvbmdPYmplY3RJZCBmcm9tSGV4U3RyaW5nKGZpbmFsIGJ5dGVbXSBicywgaW50IHApIHsKKwkJdHJ5IHsKKwkJCWZpbmFsIGxvbmcgYSA9IFJhd1BhcnNlVXRpbHMucGFyc2VIZXhJbnQ2NChicywgcCk7CisJCQlmaW5hbCBsb25nIGIgPSBSYXdQYXJzZVV0aWxzLnBhcnNlSGV4SW50NjQoYnMsIHAgKyAxNik7CisJCQlmaW5hbCBsb25nIGMgPSBSYXdQYXJzZVV0aWxzLnBhcnNlSGV4SW50NjQoYnMsIHAgKyAzMik7CisJCQlmaW5hbCBsb25nIGQgPSBSYXdQYXJzZVV0aWxzLnBhcnNlSGV4SW50NjQoYnMsIHAgKyA0OCk7CisJCQlyZXR1cm4gbmV3IExvbmdPYmplY3RJZChhLCBiLCBjLCBkKTsKKwkJfSBjYXRjaCAoQXJyYXlJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGUxKSB7CisJCQl0aHJvdyBuZXcgSW52YWxpZExvbmdPYmplY3RJZEV4Y2VwdGlvbihicywgcCwKKwkJCQkJQ29uc3RhbnRzLkxPTkdfT0JKRUNUX0lEX1NUUklOR19MRU5HVEgpOworCQl9CisJfQorCisJTG9uZ09iamVjdElkKGZpbmFsIGxvbmcgbmV3XzEsIGZpbmFsIGxvbmcgbmV3XzIsIGZpbmFsIGxvbmcgbmV3XzMsCisJCQlmaW5hbCBsb25nIG5ld180KSB7CisJCXcxID0gbmV3XzE7CisJCXcyID0gbmV3XzI7CisJCXczID0gbmV3XzM7CisJCXc0ID0gbmV3XzQ7CisJfQorCisJLyoqCisJICogSW5pdGlhbGl6ZSB0aGlzIGluc3RhbmNlIGJ5IGNvcHlpbmcgYW5vdGhlciBleGlzdGluZyBMb25nT2JqZWN0SWQuCisJICogPHA+CisJICogVGhpcyBjb25zdHJ1Y3RvciBpcyBtb3N0bHkgdXNlZnVsIGZvciBzdWJjbGFzc2VzIHdoaWNoIHdhbnQgdG8gZXh0ZW5kIGEKKwkgKiBMb25nT2JqZWN0SWQgd2l0aCBtb3JlIHByb3BlcnRpZXMsIGJ1dCBpbml0aWFsaXplIGZyb20gYW4gZXhpc3RpbmcKKwkgKiBMb25nT2JqZWN0SWQgaW5zdGFuY2UgYWNxdWlyZWQgYnkgb3RoZXIgbWVhbnMuCisJICoKKwkgKiBAcGFyYW0gc3JjCisJICogICAgICAgICAgICBhbm90aGVyIGFscmVhZHkgcGFyc2VkIExvbmdPYmplY3RJZCB0byBjb3B5IHRoZSB2YWx1ZSBvdXQgb2YuCisJICovCisJcHJvdGVjdGVkIExvbmdPYmplY3RJZChmaW5hbCBBbnlMb25nT2JqZWN0SWQgc3JjKSB7CisJCXcxID0gc3JjLncxOworCQl3MiA9IHNyYy53MjsKKwkJdzMgPSBzcmMudzM7CisJCXc0ID0gc3JjLnc0OworCX0KKworCUBPdmVycmlkZQorCXB1YmxpYyBMb25nT2JqZWN0SWQgdG9PYmplY3RJZCgpIHsKKwkJcmV0dXJuIHRoaXM7CisJfQorCisJcHJpdmF0ZSB2b2lkIHdyaXRlT2JqZWN0KE9iamVjdE91dHB1dFN0cmVhbSBvcykgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJb3Mud3JpdGVMb25nKHcxKTsKKwkJb3Mud3JpdGVMb25nKHcyKTsKKwkJb3Mud3JpdGVMb25nKHczKTsKKwkJb3Mud3JpdGVMb25nKHc0KTsKKwl9CisKKwlwcml2YXRlIHZvaWQgcmVhZE9iamVjdChPYmplY3RJbnB1dFN0cmVhbSBvaXMpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCXcxID0gb2lzLnJlYWRMb25nKCk7CisJCXcyID0gb2lzLnJlYWRMb25nKCk7CisJCXczID0gb2lzLnJlYWRMb25nKCk7CisJCXc0ID0gb2lzLnJlYWRMb25nKCk7CisJfQorfQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGZzL2xpYi9NdXRhYmxlTG9uZ09iamVjdElkLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy9zcmMvb3JnL2VjbGlwc2UvamdpdC9sZnMvbGliL011dGFibGVMb25nT2JqZWN0SWQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzBlOTRlCi0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGZzL2xpYi9NdXRhYmxlTG9uZ09iamVjdElkLmphdmEKQEAgLTAsMCArMSwyNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUsIE1hdHRoaWFzIFNvaG4gPG1hdHRoaWFzLnNvaG5Ac2FwLmNvbT4KKyAqIGFuZCBvdGhlciBjb3B5cmlnaHQgb3duZXJzIGFzIGRvY3VtZW50ZWQgaW4gdGhlIHByb2plY3QncyBJUCBsb2cuCisgKgorICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2MS4wIHdoaWNoCisgKiBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgaXMgcmVwcm9kdWNlZCBiZWxvdywgYW5kIGlzCisgKiBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VkbC12MTAucGhwCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgSW5jLiBub3IgdGhlCisgKiAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCisgKiAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3IKKyAqICAgd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORAorICogQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKyAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGCisgKiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitwYWNrYWdlIG9yZy5lY2xpcHNlLmpnaXQubGZzLmxpYjsKKworaW1wb3J0IGphdmEudGV4dC5NZXNzYWdlRm9ybWF0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5sZnMuZXJyb3JzLkludmFsaWRMb25nT2JqZWN0SWRFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5sZnMuaW50ZXJuYWwuTGZzVGV4dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5NdXRhYmxlT2JqZWN0SWQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC51dGlsLk5COworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudXRpbC5SYXdQYXJzZVV0aWxzOworCisvKioKKyAqIEEgbXV0YWJsZSBTSEEtMjU2IGFic3RyYWN0aW9uLgorICoKKyAqIFBvcnRlZCB0byBTSEEtMjU2IGZyb20ge0BsaW5rIE11dGFibGVPYmplY3RJZH0KKyAqCisgKiBAc2luY2UgNC4zCisgKi8KK3B1YmxpYyBjbGFzcyBNdXRhYmxlTG9uZ09iamVjdElkIGV4dGVuZHMgQW55TG9uZ09iamVjdElkIHsKKwkvKioKKwkgKiBFbXB0eSBjb25zdHJ1Y3Rvci4gSW5pdGlhbGl6ZSBvYmplY3Qgd2l0aCBkZWZhdWx0ICh6ZXJvcykgdmFsdWUuCisJICovCisJcHVibGljIE11dGFibGVMb25nT2JqZWN0SWQoKSB7CisJCXN1cGVyKCk7CisJfQorCisJLyoqCisJICogQ29weWluZyBjb25zdHJ1Y3Rvci4KKwkgKgorCSAqIEBwYXJhbSBzcmMKKwkgKiAgICAgICAgICAgIG9yaWdpbmFsIGVudHJ5LCB0byBjb3B5IGlkIGZyb20KKwkgKi8KKwlNdXRhYmxlTG9uZ09iamVjdElkKE11dGFibGVMb25nT2JqZWN0SWQgc3JjKSB7CisJCWZyb21PYmplY3RJZChzcmMpOworCX0KKworCS8qKgorCSAqIFNldCBhbnkgYnl0ZSBpbiB0aGUgaWQuCisJICoKKwkgKiBAcGFyYW0gaW5kZXgKKwkgKiAgICAgICAgICAgIGluZGV4IG9mIHRoZSBieXRlIHRvIHNldCBpbiB0aGUgcmF3IGZvcm0gb2YgdGhlIE9iamVjdElkLiBNdXN0CisJICogICAgICAgICAgICBiZSBpbiByYW5nZSBbMCwge0BsaW5rIENvbnN0YW50cyNMT05HX09CSkVDVF9JRF9MRU5HVEh9KS4KKwkgKiBAcGFyYW0gdmFsdWUKKwkgKiAgICAgICAgICAgIHRoZSB2YWx1ZSBvZiB0aGUgc3BlY2lmaWVkIGJ5dGUgYXQge0Bjb2RlIGluZGV4fS4gVmFsdWVzIGFyZQorCSAqICAgICAgICAgICAgdW5zaWduZWQgYW5kIHRodXMgYXJlIGluIHRoZSByYW5nZSBbMCwyNTVdIHJhdGhlciB0aGFuIHRoZQorCSAqICAgICAgICAgICAgc2lnbmVkIGJ5dGUgcmFuZ2Ugb2YgWy0xMjgsIDEyN10uCisJICogQHRocm93cyBBcnJheUluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24KKwkgKiAgICAgICAgICAgICB7QGNvZGUgaW5kZXh9IGlzIGxlc3MgdGhhbiAwLCBlcXVhbCB0bworCSAqICAgICAgICAgICAgIHtAbGluayBDb25zdGFudHMjTE9OR19PQkpFQ1RfSURfTEVOR1RIfSwgb3IgZ3JlYXRlciB0aGFuCisJICogICAgICAgICAgICAge0BsaW5rIENvbnN0YW50cyNMT05HX09CSkVDVF9JRF9MRU5HVEh9LgorCSAqLworCXB1YmxpYyB2b2lkIHNldEJ5dGUoaW50IGluZGV4LCBpbnQgdmFsdWUpIHsKKwkJc3dpdGNoIChpbmRleCA+PiAzKSB7CisJCWNhc2UgMDoKKwkJCXcxID0gc2V0KHcxLCBpbmRleCAmIDcsIHZhbHVlKTsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQl3MiA9IHNldCh3MiwgaW5kZXggJiA3LCB2YWx1ZSk7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJdzMgPSBzZXQodzMsIGluZGV4ICYgNywgdmFsdWUpOworCQkJYnJlYWs7CisJCWNhc2UgMzoKKwkJCXc0ID0gc2V0KHc0LCBpbmRleCAmIDcsIHZhbHVlKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJdGhyb3cgbmV3IEFycmF5SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbihpbmRleCk7CisJCX0KKwl9CisKKwlwcml2YXRlIHN0YXRpYyBsb25nIHNldChsb25nIHcsIGludCBpbmRleCwgbG9uZyB2YWx1ZSkgeworCQl2YWx1ZSAmPSAweGZmOworCisJCXN3aXRjaCAoaW5kZXgpIHsKKwkJY2FzZSAwOgorCQkJcmV0dXJuICh3ICYgMHgwMGZmZmZmZmZmZmZmZmZmTCkgfCAodmFsdWUgPDwgNTYpOworCQljYXNlIDE6CisJCQlyZXR1cm4gKHcgJiAweGZmMDBmZmZmZmZmZmZmZmZMKSB8ICh2YWx1ZSA8PCA0OCk7CisJCWNhc2UgMjoKKwkJCXJldHVybiAodyAmIDB4ZmZmZjAwZmZmZmZmZmZmZkwpIHwgKHZhbHVlIDw8IDQwKTsKKwkJY2FzZSAzOgorCQkJcmV0dXJuICh3ICYgMHhmZmZmZmYwMGZmZmZmZmZmTCkgfCAodmFsdWUgPDwgMzIpOworCQljYXNlIDQ6CisJCQlyZXR1cm4gKHcgJiAweGZmZmZmZmZmMDBmZmZmZmZMKSB8ICh2YWx1ZSA8PCAyNCk7CisJCWNhc2UgNToKKwkJCXJldHVybiAodyAmIDB4ZmZmZmZmZmZmZjAwZmZmZkwpIHwgKHZhbHVlIDw8IDE2KTsKKwkJY2FzZSA2OgorCQkJcmV0dXJuICh3ICYgMHhmZmZmZmZmZmZmZmYwMGZmTCkgfCAodmFsdWUgPDwgOCk7CisJCWNhc2UgNzoKKwkJCXJldHVybiAodyAmIDB4ZmZmZmZmZmZmZmZmZmYwMEwpIHwgdmFsdWU7CisJCWRlZmF1bHQ6CisJCQl0aHJvdyBuZXcgQXJyYXlJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uKCk7CisJCX0KKwl9CisKKwkvKiogTWFrZSB0aGlzIGlkIG1hdGNoIHtAbGluayBMb25nT2JqZWN0SWQjemVyb0lkKCl9LiAqLworCXB1YmxpYyB2b2lkIGNsZWFyKCkgeworCQl3MSA9IDA7CisJCXcyID0gMDsKKwkJdzMgPSAwOworCQl3NCA9IDA7CisJfQorCisJLyoqCisJICogQ29weSBhbiBMb25nT2JqZWN0SWQgaW50byB0aGlzIG11dGFibGUgYnVmZmVyLgorCSAqCisJICogQHBhcmFtIHNyYworCSAqICAgICAgICAgICAgdGhlIHNvdXJjZSBpZCB0byBjb3B5IGZyb20uCisJICovCisJcHVibGljIHZvaWQgZnJvbU9iamVjdElkKEFueUxvbmdPYmplY3RJZCBzcmMpIHsKKwkJdGhpcy53MSA9IHNyYy53MTsKKwkJdGhpcy53MiA9IHNyYy53MjsKKwkJdGhpcy53MyA9IHNyYy53MzsKKwkJdGhpcy53NCA9IHNyYy53NDsKKwl9CisKKwkvKioKKwkgKiBDb252ZXJ0IGFuIExvbmdPYmplY3RJZCBmcm9tIHJhdyBiaW5hcnkgcmVwcmVzZW50YXRpb24uCisJICoKKwkgKiBAcGFyYW0gYnMKKwkgKiAgICAgICAgICAgIHRoZSByYXcgYnl0ZSBidWZmZXIgdG8gcmVhZCBmcm9tLiBBdCBsZWFzdCAzMiBieXRlcyBtdXN0IGJlCisJICogICAgICAgICAgICBhdmFpbGFibGUgd2l0aGluIHRoaXMgYnl0ZSBhcnJheS4KKwkgKi8KKwlwdWJsaWMgdm9pZCBmcm9tUmF3KGZpbmFsIGJ5dGVbXSBicykgeworCQlmcm9tUmF3KGJzLCAwKTsKKwl9CisKKwkvKioKKwkgKiBDb252ZXJ0IGFuIExvbmdPYmplY3RJZCBmcm9tIHJhdyBiaW5hcnkgcmVwcmVzZW50YXRpb24uCisJICoKKwkgKiBAcGFyYW0gYnMKKwkgKiAgICAgICAgICAgIHRoZSByYXcgYnl0ZSBidWZmZXIgdG8gcmVhZCBmcm9tLiBBdCBsZWFzdCAzMiBieXRlcyBhZnRlciBwCisJICogICAgICAgICAgICBtdXN0IGJlIGF2YWlsYWJsZSB3aXRoaW4gdGhpcyBieXRlIGFycmF5LgorCSAqIEBwYXJhbSBwCisJICogICAgICAgICAgICBwb3NpdGlvbiB0byByZWFkIHRoZSBmaXJzdCBieXRlIG9mIGRhdGEgZnJvbS4KKwkgKi8KKwlwdWJsaWMgdm9pZCBmcm9tUmF3KGZpbmFsIGJ5dGVbXSBicywgZmluYWwgaW50IHApIHsKKwkJdzEgPSBOQi5kZWNvZGVJbnQ2NChicywgcCk7CisJCXcyID0gTkIuZGVjb2RlSW50NjQoYnMsIHAgKyA4KTsKKwkJdzMgPSBOQi5kZWNvZGVJbnQ2NChicywgcCArIDE2KTsKKwkJdzQgPSBOQi5kZWNvZGVJbnQ2NChicywgcCArIDI0KTsKKwl9CisKKwkvKioKKwkgKiBDb252ZXJ0IGFuIExvbmdPYmplY3RJZCBmcm9tIGJpbmFyeSByZXByZXNlbnRhdGlvbiBleHByZXNzZWQgaW4gaW50ZWdlcnMuCisJICoKKwkgKiBAcGFyYW0gbG9uZ3MKKwkgKiAgICAgICAgICAgIHRoZSByYXcgbG9uZyBidWZmZXIgdG8gcmVhZCBmcm9tLiBBdCBsZWFzdCA0IGxvbmdzIG11c3QgYmUKKwkgKiAgICAgICAgICAgIGF2YWlsYWJsZSB3aXRoaW4gdGhpcyBsb25ncyBhcnJheS4KKwkgKi8KKwlwdWJsaWMgdm9pZCBmcm9tUmF3KGZpbmFsIGxvbmdbXSBsb25ncykgeworCQlmcm9tUmF3KGxvbmdzLCAwKTsKKwl9CisKKwkvKioKKwkgKiBDb252ZXJ0IGFuIExvbmdPYmplY3RJZCBmcm9tIGJpbmFyeSByZXByZXNlbnRhdGlvbiBleHByZXNzZWQgaW4gbG9uZ3MuCisJICoKKwkgKiBAcGFyYW0gbG9uZ3MKKwkgKiAgICAgICAgICAgIHRoZSByYXcgaW50IGJ1ZmZlciB0byByZWFkIGZyb20uIEF0IGxlYXN0IDQgbG9uZ3MgYWZ0ZXIgcCBtdXN0CisJICogICAgICAgICAgICBiZSBhdmFpbGFibGUgd2l0aGluIHRoaXMgbG9uZ3MgYXJyYXkuCisJICogQHBhcmFtIHAKKwkgKiAgICAgICAgICAgIHBvc2l0aW9uIHRvIHJlYWQgdGhlIGZpcnN0IGludGVnZXIgb2YgZGF0YSBmcm9tLgorCSAqCisJICovCisJcHVibGljIHZvaWQgZnJvbVJhdyhmaW5hbCBsb25nW10gbG9uZ3MsIGZpbmFsIGludCBwKSB7CisJCXcxID0gbG9uZ3NbcF07CisJCXcyID0gbG9uZ3NbcCArIDFdOworCQl3MyA9IGxvbmdzW3AgKyAyXTsKKwkJdzQgPSBsb25nc1twICsgM107CisJfQorCisJLyoqCisJICogQ29udmVydCBhbiBMb25nT2JqZWN0SWQgZnJvbSBoZXggY2hhcmFjdGVycyAoVVMtQVNDSUkpLgorCSAqCisJICogQHBhcmFtIGJ1ZgorCSAqICAgICAgICAgICAgdGhlIFVTLUFTQ0lJIGJ1ZmZlciB0byByZWFkIGZyb20uIEF0IGxlYXN0IDMyIGJ5dGVzIGFmdGVyCisJICogICAgICAgICAgICBvZmZzZXQgbXVzdCBiZSBhdmFpbGFibGUgd2l0aGluIHRoaXMgYnl0ZSBhcnJheS4KKwkgKiBAcGFyYW0gb2Zmc2V0CisJICogICAgICAgICAgICBwb3NpdGlvbiB0byByZWFkIHRoZSBmaXJzdCBjaGFyYWN0ZXIgZnJvbS4KKwkgKi8KKwlwdWJsaWMgdm9pZCBmcm9tU3RyaW5nKGZpbmFsIGJ5dGVbXSBidWYsIGZpbmFsIGludCBvZmZzZXQpIHsKKwkJZnJvbUhleFN0cmluZyhidWYsIG9mZnNldCk7CisJfQorCisJLyoqCisJICogQ29udmVydCBhbiBMb25nT2JqZWN0SWQgZnJvbSBoZXggY2hhcmFjdGVycy4KKwkgKgorCSAqIEBwYXJhbSBzdHIKKwkgKiAgICAgICAgICAgIHRoZSBzdHJpbmcgdG8gcmVhZCBmcm9tLiBNdXN0IGJlIDY0IGNoYXJhY3RlcnMgbG9uZy4KKwkgKi8KKwlwdWJsaWMgdm9pZCBmcm9tU3RyaW5nKGZpbmFsIFN0cmluZyBzdHIpIHsKKwkJaWYgKHN0ci5sZW5ndGgoKSAhPSBDb25zdGFudHMuTE9OR19PQkpFQ1RfSURfU1RSSU5HX0xFTkdUSCkKKwkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCisJCQkJCU1lc3NhZ2VGb3JtYXQuZm9ybWF0KExmc1RleHQuZ2V0KCkuaW52YWxpZExvbmdJZCwgc3RyKSk7CisJCWZyb21IZXhTdHJpbmcob3JnLmVjbGlwc2UuamdpdC5saWIuQ29uc3RhbnRzLmVuY29kZUFTQ0lJKHN0ciksIDApOworCX0KKworCXByaXZhdGUgdm9pZCBmcm9tSGV4U3RyaW5nKGZpbmFsIGJ5dGVbXSBicywgaW50IHApIHsKKwkJdHJ5IHsKKwkJCXcxID0gUmF3UGFyc2VVdGlscy5wYXJzZUhleEludDY0KGJzLCBwKTsKKwkJCXcyID0gUmF3UGFyc2VVdGlscy5wYXJzZUhleEludDY0KGJzLCBwICsgMTYpOworCQkJdzMgPSBSYXdQYXJzZVV0aWxzLnBhcnNlSGV4SW50NjQoYnMsIHAgKyAzMik7CisJCQl3NCA9IFJhd1BhcnNlVXRpbHMucGFyc2VIZXhJbnQ2NChicywgcCArIDQ4KTsKKwkJfSBjYXRjaCAoQXJyYXlJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGUxKSB7CisJCQl0aHJvdyBuZXcgSW52YWxpZExvbmdPYmplY3RJZEV4Y2VwdGlvbihicywgcCwKKwkJCQkJQ29uc3RhbnRzLkxPTkdfT0JKRUNUX0lEX1NUUklOR19MRU5HVEgpOworCQl9CisJfQorCisJQE92ZXJyaWRlCisJcHVibGljIExvbmdPYmplY3RJZCB0b09iamVjdElkKCkgeworCQlyZXR1cm4gbmV3IExvbmdPYmplY3RJZCh0aGlzKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LmZlYXR1cmUvZmVhdHVyZS54bWwgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LmZlYXR1cmUvZmVhdHVyZS54bWwKaW5kZXggYzIyYjNiYy4uYmE0MGVmOCAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5mZWF0dXJlL2ZlYXR1cmUueG1sCisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQuZmVhdHVyZS9mZWF0dXJlLnhtbApAQCAtMiw3ICsyLDcgQEAKIDxmZWF0dXJlCiAgICAgICBpZD0ib3JnLmVjbGlwc2UuamdpdCIKICAgICAgIGxhYmVsPSIlZmVhdHVyZU5hbWUiCi0gICAgICB2ZXJzaW9uPSI0LjIuMS5xdWFsaWZpZXIiCisgICAgICB2ZXJzaW9uPSI0LjMuMC5xdWFsaWZpZXIiCiAgICAgICBwcm92aWRlci1uYW1lPSIlcHJvdmlkZXJOYW1lIj4KIAogICAgPGRlc2NyaXB0aW9uIHVybD0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9qZ2l0LyI+CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LmZlYXR1cmUvcG9tLnhtbCBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQuZmVhdHVyZS9wb20ueG1sCmluZGV4IGNiZmE2YjYuLjljZTg5ZTggMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQuZmVhdHVyZS9wb20ueG1sCisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQuZmVhdHVyZS9wb20ueG1sCkBAIC01MCw3ICs1MCw3IEBACiAgIDxwYXJlbnQ+CiAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KICAgICA8YXJ0aWZhY3RJZD5qZ2l0LnR5Y2hvLnBhcmVudDwvYXJ0aWZhY3RJZD4KLSAgICA8dmVyc2lvbj40LjIuMS1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICA8dmVyc2lvbj40LjMuMC1TTkFQU0hPVDwvdmVyc2lvbj4KICAgPC9wYXJlbnQ+CiAKICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdC5mZWF0dXJlPC9ncm91cElkPgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5odHRwLmFwYWNoZS5mZWF0dXJlL2ZlYXR1cmUueG1sIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5odHRwLmFwYWNoZS5mZWF0dXJlL2ZlYXR1cmUueG1sCmluZGV4IDczYjZlYjYuLmRjZjA5ODggMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQuaHR0cC5hcGFjaGUuZmVhdHVyZS9mZWF0dXJlLnhtbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuYXBhY2hlLmZlYXR1cmUvZmVhdHVyZS54bWwKQEAgLTIsNyArMiw3IEBACiA8ZmVhdHVyZQogICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpnaXQuaHR0cC5hcGFjaGUiCiAgICAgICBsYWJlbD0iJWZlYXR1cmVOYW1lIgotICAgICAgdmVyc2lvbj0iNC4yLjEucXVhbGlmaWVyIgorICAgICAgdmVyc2lvbj0iNC4zLjAucXVhbGlmaWVyIgogICAgICAgcHJvdmlkZXItbmFtZT0iJXByb3ZpZGVyTmFtZSI+CiAKICAgIDxkZXNjcmlwdGlvbiB1cmw9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvamdpdC8iPgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5odHRwLmFwYWNoZS5mZWF0dXJlL3BvbS54bWwgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuYXBhY2hlLmZlYXR1cmUvcG9tLnhtbAppbmRleCA4MmRmYjFmLi4yODRkMTI1IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuYXBhY2hlLmZlYXR1cmUvcG9tLnhtbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuYXBhY2hlLmZlYXR1cmUvcG9tLnhtbApAQCAtNTAsNyArNTAsNyBAQAogICA8cGFyZW50PgogICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgICAgPGFydGlmYWN0SWQ+amdpdC50eWNoby5wYXJlbnQ8L2FydGlmYWN0SWQ+Ci0gICAgPHZlcnNpb24+NC4yLjEtU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgPHZlcnNpb24+NC4zLjAtU05BUFNIT1Q8L3ZlcnNpb24+CiAgIDwvcGFyZW50PgogCiAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQuZmVhdHVyZTwvZ3JvdXBJZD4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQuanVuaXQuZmVhdHVyZS9mZWF0dXJlLnhtbCBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQuanVuaXQuZmVhdHVyZS9mZWF0dXJlLnhtbAppbmRleCAxODZiMjYzLi4yYTkxNzAwIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0LmZlYXR1cmUvZmVhdHVyZS54bWwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5mZWF0dXJlL2ZlYXR1cmUueG1sCkBAIC0yLDcgKzIsNyBAQAogPGZlYXR1cmUKICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0IgogICAgICAgbGFiZWw9IiVmZWF0dXJlTmFtZSIKLSAgICAgIHZlcnNpb249IjQuMi4xLnF1YWxpZmllciIKKyAgICAgIHZlcnNpb249IjQuMy4wLnF1YWxpZmllciIKICAgICAgIHByb3ZpZGVyLW5hbWU9IiVwcm92aWRlck5hbWUiPgogCiAgICA8ZGVzY3JpcHRpb24gdXJsPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2pnaXQvIj4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQuanVuaXQuZmVhdHVyZS9wb20ueG1sIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5mZWF0dXJlL3BvbS54bWwKaW5kZXggNGNlZTE3ZS4uYTk2ODUyZSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5mZWF0dXJlL3BvbS54bWwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5mZWF0dXJlL3BvbS54bWwKQEAgLTUwLDcgKzUwLDcgQEAKICAgPHBhcmVudD4KICAgICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5qZ2l0PC9ncm91cElkPgogICAgIDxhcnRpZmFjdElkPmpnaXQudHljaG8ucGFyZW50PC9hcnRpZmFjdElkPgotICAgIDx2ZXJzaW9uPjQuMi4xLVNOQVBTSE9UPC92ZXJzaW9uPgorICAgIDx2ZXJzaW9uPjQuMy4wLVNOQVBTSE9UPC92ZXJzaW9uPgogICA8L3BhcmVudD4KIAogICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5qZ2l0LmZlYXR1cmU8L2dyb3VwSWQ+CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5mZWF0dXJlLy5naXRpZ25vcmUgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5mZWF0dXJlLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY3ODk2ZAotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQubGZzLmZlYXR1cmUvLmdpdGlnbm9yZQpAQCAtMCwwICsxIEBACit0YXJnZXQvCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5mZWF0dXJlLy5wcm9qZWN0IGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5sZnMuZmVhdHVyZS8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjA2MWI5Ci0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5sZnMuZmVhdHVyZS8ucHJvamVjdApAQCAtMCwwICsxLDE3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3REZXNjcmlwdGlvbj4KKwk8bmFtZT5vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5mZWF0dXJlPC9uYW1lPgorCTxjb21tZW50PjwvY29tbWVudD4KKwk8cHJvamVjdHM+CisJPC9wcm9qZWN0cz4KKwk8YnVpbGRTcGVjPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLkZlYXR1cmVCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwk8L2J1aWxkU3BlYz4KKwk8bmF0dXJlcz4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuRmVhdHVyZU5hdHVyZTwvbmF0dXJlPgorCTwvbmF0dXJlcz4KKzwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5sZnMuZmVhdHVyZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5mZWF0dXJlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGJkYzJjCi0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5sZnMuZmVhdHVyZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKQEAgLTAsMCArMSwzIEBACisjRnJpIEp1biAxOCAyMzozMzo0NSBDRVNUIDIwMTAKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCitlbmNvZGluZy88cHJvamVjdD49VVRGLTgKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQubGZzLmZlYXR1cmUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmcyBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQubGZzLmZlYXR1cmUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTgyNTJiCi0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5sZnMuZmVhdHVyZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZzCkBAIC0wLDAgKzEsMyBAQAorI0ZyaSBKdW4gMTggMjM6MzM6NDUgQ0VTVCAyMDEwCitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorbGluZS5zZXBhcmF0b3I9XG4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQubGZzLmZlYXR1cmUvLnNldHRpbmdzL29yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLnByZWZzIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5sZnMuZmVhdHVyZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubXlseW4udGFza3MudWkucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODIzYzBmNQotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQubGZzLmZlYXR1cmUvLnNldHRpbmdzL29yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLnByZWZzCkBAIC0wLDAgKzEsNCBAQAorI1R1ZSBKdWwgMTkgMjA6MTE6MjggQ0VTVCAyMDExCitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorcHJvamVjdC5yZXBvc2l0b3J5LmtpbmQ9YnVnemlsbGEKK3Byb2plY3QucmVwb3NpdG9yeS51cmw9aHR0cHNcOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5mZWF0dXJlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5teWx5bi50ZWFtLnVpLnByZWZzIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5sZnMuZmVhdHVyZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubXlseW4udGVhbS51aS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2JhOTQ5Ci0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5sZnMuZmVhdHVyZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubXlseW4udGVhbS51aS5wcmVmcwpAQCAtMCwwICsxLDMgQEAKKyNUdWUgSnVsIDE5IDIwOjExOjI4IENFU1QgMjAxMQorY29tbWl0LmNvbW1lbnQudGVtcGxhdGU9JHt0YXNrLmRlc2NyaXB0aW9ufSBcblxuQnVnXDogJHt0YXNrLmtleX0KK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjRhOGRkZQotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQubGZzLmZlYXR1cmUvYnVpbGQucHJvcGVydGllcwpAQCAtMCwwICsxLDQgQEAKK2Jpbi5pbmNsdWRlcyA9IGZlYXR1cmUueG1sLFwKKyAgICAgICAgICAgICAgIGVkbC12MTAuaHRtbCxcCisgICAgICAgICAgICAgICBmZWF0dXJlLnByb3BlcnRpZXMsXAorICAgICAgICAgICAgICAgbGljZW5zZS5odG1sCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5mZWF0dXJlL2VkbC12MTAuaHRtbCBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQubGZzLmZlYXR1cmUvZWRsLXYxMC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4MjZiNDcKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5mZWF0dXJlL2VkbC12MTAuaHRtbApAQCAtMCwwICsxLDU5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0xIiA/PgorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgorPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgorCis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiIC8+Cis8dGl0bGU+RWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSAtIFZlcnNpb24gMS4wPC90aXRsZT4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CisgIGJvZHkgeworICAgIHNpemU6IDguNWluIDExLjBpbjsKKyAgICBtYXJnaW46IDAuMjVpbiAwLjVpbiAwLjI1aW4gMC41aW47CisgICAgdGFiLWludGVydmFsOiAwLjVpbjsKKyAgICB9CisgIHAgeworICAgIG1hcmdpbi1sZWZ0OiBhdXRvOworICAgIG1hcmdpbi10b3A6ICAwLjVlbTsKKyAgICBtYXJnaW4tYm90dG9tOiAwLjVlbTsKKyAgICB9CisgIHAubGlzdCB7CisgICAgbWFyZ2luLWxlZnQ6IDAuNWluOworICAgIG1hcmdpbi10b3A6ICAwLjA1ZW07CisgICAgbWFyZ2luLWJvdHRvbTogMC4wNWVtOworICAgIH0KKyAgPC9zdHlsZT4KKworPC9oZWFkPgorCis8Ym9keSBsYW5nPSJFTi1VUyI+CisKKzxwPjxiPkVjbGlwc2UgRGlzdHJpYnV0aW9uIExpY2Vuc2UgLSB2IDEuMDwvYj48L3A+CisKKzxwPkNvcHlyaWdodCAoYykgMjAwNywgRWNsaXBzZSBGb3VuZGF0aW9uLCBJbmMuIGFuZCBpdHMgbGljZW5zb3JzLiA8L3A+CisKKzxwPkFsbCByaWdodHMgcmVzZXJ2ZWQuPC9wPgorPHA+UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAgICBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6Cis8dWw+PGxpPlJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLjwvbGk+Cis8bGk+UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi48L2xpPgorPGxpPk5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi48L2xpPjwvdWw+Cis8L3A+Cis8cD5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKK0FORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCitXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCitBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuPC9wPgorCis8L2JvZHk+CisKKzwvaHRtbD4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQubGZzLmZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5sZnMuZmVhdHVyZS9mZWF0dXJlLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzViZmZhOAotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQubGZzLmZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTU5IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvcHlyaWdodCAoYykgMjAwMTUgTWF0dGhpYXMgU29obiA8bWF0dGhpYXMuc29obkBzYXAuY29tPiBhbmQgb3RoZXJzLgorIworIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCisjIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitmZWF0dXJlTmFtZT1KYXZhIGltcGxlbWVudGF0aW9uIG9mIEdpdCAtIG9wdGlvbmFsIExGUyBzdXBwb3J0Citwcm92aWRlck5hbWU9RWNsaXBzZSBKR2l0CisKK3VwZGF0ZVNpdGVOYW1lPUVjbGlwc2UgSkdpdCBVcGRhdGUgU2l0ZQorCisjIGRlc2NyaXB0aW9uIHByb3BlcnR5IC0gdGV4dCBvZiB0aGUgIkZlYXR1cmUgRGVzY3JpcHRpb24iCitkZXNjcmlwdGlvbj1cCitPcHRpb25hbCBMRlMgc3VwcG9ydC5cbgorIyMjIyMjIyMjIyMjIyMjIyBlbmQgb2YgZGVzY3JpcHRpb24gcHJvcGVydHkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjICJjb3B5cmlnaHQiIHByb3BlcnR5IC0gdGV4dCBvZiB0aGUgIkZlYXR1cmUgVXBkYXRlIENvcHlyaWdodCIKK2NvcHlyaWdodD1cCitDb3B5cmlnaHQgKGMpIDIwMTUsIE1hdHRoaWFzIFNvaG4gZXQuYWwuXG5cCitBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzXG5cCithcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYxLjBcblwKK3doaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0XG5cCitodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZWRsLXYxMC5odG1sXG4KKyMjIyMjIyMjIyMjIyMjIyMgZW5kIG9mIGNvcHlyaWdodCBwcm9wZXJ0eSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyAibGljZW5zZVVSTCIgcHJvcGVydHkgLSBVUkwgb2YgdGhlICJGZWF0dXJlIExpY2Vuc2UiCisjIGRvIG5vdCB0cmFuc2xhdGUgdmFsdWUgLSBqdXN0IGNoYW5nZSB0byBwb2ludCB0byBhIGxvY2FsZS1zcGVjaWZpYyBIVE1MIHBhZ2UKK2xpY2Vuc2VVUkw9bGljZW5zZS5odG1sCisKKyMgImxpY2Vuc2UiIHByb3BlcnR5IC0gdGV4dCBvZiB0aGUgIkZlYXR1cmUgVXBkYXRlIExpY2Vuc2UiCisjIHNob3VsZCBiZSBwbGFpbiB0ZXh0IHZlcnNpb24gb2YgbGljZW5zZSBhZ3JlZW1lbnQgcG9pbnRlZCB0byBiZSAibGljZW5zZVVSTCIKK2xpY2Vuc2U9XAorRWNsaXBzZSBGb3VuZGF0aW9uIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50XG5cCitBcHJpbCA5LCAyMDE0XG5cCitcblwKK1VzYWdlIE9mIENvbnRlbnRcblwKK1xuXAorVEhFIEVDTElQU0UgRk9VTkRBVElPTiBNQUtFUyBBVkFJTEFCTEUgU09GVFdBUkUsIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIEFORC9PUlxuXAorT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUyAoQ09MTEVDVElWRUxZICJDT05URU5UIikuXG5cCitVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVNcblwKK0FHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIExJQ0VOU0UgQUdSRUVNRU5UUyBPUlxuXAorTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1VcblwKK0FHUkVFIFRIQVQgWU9VUiBVU0UgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhJUyBBR1JFRU1FTlRcblwKK0FORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTXG5cCitPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEVcblwKK1RFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlNcblwKK09GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UUyBPUiBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEXG5cCitCRUxPVywgVEhFTiBZT1UgTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuXG5cCitcblwKK0FwcGxpY2FibGUgTGljZW5zZXNcblwKK1xuXAorVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIGFsbCBDb250ZW50IG1hZGUgYXZhaWxhYmxlIGJ5IHRoZVxuXAorRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2ZcblwKK3RoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wICgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzXG5cCitwcm92aWRlZCB3aXRoIHRoaXMgQ29udGVudCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwuXG5cCitGb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC5cblwKK1xuXAorQ29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsXG5cCitkb2N1bWVudGF0aW9uIGFuZCBvdGhlciBmaWxlcyBtYWludGFpbmVkIGluIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gc291cmNlIGNvZGVcblwKK3JlcG9zaXRvcnkgKCJSZXBvc2l0b3J5IikgaW4gc29mdHdhcmUgbW9kdWxlcyAoIk1vZHVsZXMiKSBhbmQgbWFkZSBhdmFpbGFibGVcblwKK2FzIGRvd25sb2FkYWJsZSBhcmNoaXZlcyAoIkRvd25sb2FkcyIpLlxuXAorXG5cCisgICAgICAgLSBDb250ZW50IG1heSBiZSBzdHJ1Y3R1cmVkIGFuZCBwYWNrYWdlZCBpbnRvIG1vZHVsZXMgdG8gZmFjaWxpdGF0ZSBkZWxpdmVyaW5nLFxuXAorICAgICAgICAgZXh0ZW5kaW5nLCBhbmQgdXBncmFkaW5nIHRoZSBDb250ZW50LiBUeXBpY2FsIG1vZHVsZXMgbWF5IGluY2x1ZGUgcGx1Zy1pbnMgKCJQbHVnLWlucyIpLFxuXAorICAgICAgICAgcGx1Zy1pbiBmcmFnbWVudHMgKCJGcmFnbWVudHMiKSwgYW5kIGZlYXR1cmVzICgiRmVhdHVyZXMiKS5cblwKKyAgICAgICAtIEVhY2ggUGx1Zy1pbiBvciBGcmFnbWVudCBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IG9yIEpBUiAoSmF2YShUTSkgQVJjaGl2ZSlcblwKKyAgICAgICAgIGluIGEgZGlyZWN0b3J5IG5hbWVkICJwbHVnaW5zIi5cblwKKyAgICAgICAtIEEgRmVhdHVyZSBpcyBhIGJ1bmRsZSBvZiBvbmUgb3IgbW9yZSBQbHVnLWlucyBhbmQvb3IgRnJhZ21lbnRzIGFuZCBhc3NvY2lhdGVkIG1hdGVyaWFsLlxuXAorICAgICAgICAgRWFjaCBGZWF0dXJlIG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3RvcnkgaW4gYSBkaXJlY3RvcnkgbmFtZWQgImZlYXR1cmVzIi5cblwKKyAgICAgICAgIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvblxuXAorICAgICAgICAgbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhc3NvY2lhdGVkIHdpdGggdGhhdCBGZWF0dXJlLlxuXAorICAgICAgIC0gRmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoIkluY2x1ZGVkIEZlYXR1cmVzIikuIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzXG5cCisgICAgICAgICBuYW1lZCAiZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiBJbmNsdWRlZCBGZWF0dXJlcy5cblwKK1xuXAorVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHNob3VsZCBiZVxuXAorY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICJhYm91dC5odG1sIiAoIkFib3V0cyIpLiBUaGUgdGVybXMgYW5kXG5cCitjb25kaXRpb25zIGdvdmVybmluZyBGZWF0dXJlcyBhbmQgSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZFxuXAoraW4gZmlsZXMgbmFtZWQgImxpY2Vuc2UuaHRtbCIgKCJGZWF0dXJlIExpY2Vuc2VzIikuIEFib3V0cyBhbmQgRmVhdHVyZVxuXAorTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IGRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZVxuXAoraW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6XG5cCitcblwKKyAgICAgICAtIFRoZSB0b3AtbGV2ZWwgKHJvb3QpIGRpcmVjdG9yeVxuXAorICAgICAgIC0gUGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXNcblwKKyAgICAgICAtIEluc2lkZSBQbHVnLWlucyBhbmQgRnJhZ21lbnRzIHBhY2thZ2VkIGFzIEpBUnNcblwKKyAgICAgICAtIFN1Yi1kaXJlY3RvcmllcyBvZiB0aGUgZGlyZWN0b3J5IG5hbWVkICJzcmMiIG9mIGNlcnRhaW4gUGx1Zy1pbnNcblwKKyAgICAgICAtIEZlYXR1cmUgZGlyZWN0b3JpZXNcblwKK1xuXAorTm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIHVzaW5nIHRoZVxuXAorUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgKGFzIGRlZmluZWQgYmVsb3cpLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCJGZWF0dXJlIFxuXAorVXBkYXRlIExpY2Vuc2UiKSBkdXJpbmcgdGhlIGluc3RhbGxhdGlvbiBwcm9jZXNzLiBJZiB0aGUgRmVhdHVyZSBjb250YWluc1xuXAorSW5jbHVkZWQgRmVhdHVyZXMsIHRoZSBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIHNob3VsZCBlaXRoZXIgcHJvdmlkZSB5b3VcblwKK3dpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IgaW5mb3JtXG5cCit5b3Ugd2hlcmUgeW91IGNhbiBsb2NhdGUgdGhlbS4gRmVhdHVyZSBVcGRhdGUgTGljZW5zZXMgbWF5IGJlIGZvdW5kIGluXG5cCit0aGUgImxpY2Vuc2UiIHByb3BlcnR5IG9mIGZpbGVzIG5hbWVkICJmZWF0dXJlLnByb3BlcnRpZXMiIGZvdW5kIHdpdGhpbiBhIEZlYXR1cmUuXG5cCitTdWNoIEFib3V0cywgRmVhdHVyZSBMaWNlbnNlcywgYW5kIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlXG5cCit0ZXJtcyBhbmQgY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIGFuZCBjb25kaXRpb25zKSB0aGF0XG5cCitnb3Zlcm4geW91ciB1c2Ugb2YgdGhlIGFzc29jaWF0ZWQgQ29udGVudCBpbiB0aGF0IGRpcmVjdG9yeS5cblwKK1xuXAorVEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUywgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUlxuXAorVE8gVEhFIEVQTCBPUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuXG5cCitTT01FIE9GIFRIRVNFIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6XG5cCitcblwKKyAgICAgICAtIEVjbGlwc2UgRGlzdHJpYnV0aW9uIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xpY2Vuc2VzL2VkbC12MS4wLmh0bWwpXG5cCisgICAgICAgLSBDb21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbClcblwKKyAgICAgICAtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFKVxuXAorICAgICAgIC0gQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wKVxuXAorICAgICAgIC0gTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbClcblwKK1xuXAorSVQgSVMgWU9VUiBPQkxJR0FUSU9OIFRPIFJFQUQgQU5EIEFDQ0VQVCBBTEwgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUlxuXAorVE8gVVNFIE9GIFRIRSBDT05URU5ULiBJZiBubyBBYm91dCwgRmVhdHVyZSBMaWNlbnNlLCBvciBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlXG5cCitpcyBwcm92aWRlZCwgcGxlYXNlIGNvbnRhY3QgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0ZXJtcyBhbmQgY29uZGl0aW9uc1xuXAorZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LlxuXAorXG5cCitcblxVc2Ugb2YgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3lcblwKK1xuXAorVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgcHJvdmlzaW9uaW5nIHNvZnR3YXJlLCBleGFtcGxlcyBvZiB3aGljaCBpbmNsdWRlLFxuXAorYnV0IGFyZSBub3QgbGltaXRlZCB0bywgcDIgYW5kIHRoZSBFY2xpcHNlIFVwZGF0ZSBNYW5hZ2VyICgiUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kiKSBmb3JcblwKK3RoZSBwdXJwb3NlIG9mIGFsbG93aW5nIHVzZXJzIHRvIGluc3RhbGwgc29mdHdhcmUsIGRvY3VtZW50YXRpb24sIGluZm9ybWF0aW9uIGFuZC9vclxuXAorb3RoZXIgbWF0ZXJpYWxzIChjb2xsZWN0aXZlbHkgIkluc3RhbGxhYmxlIFNvZnR3YXJlIikuIFRoaXMgY2FwYWJpbGl0eSBpcyBwcm92aWRlZCB3aXRoXG5cCit0aGUgaW50ZW50IG9mIGFsbG93aW5nIHN1Y2ggdXNlcnMgdG8gaW5zdGFsbCwgZXh0ZW5kIGFuZCB1cGRhdGUgRWNsaXBzZS1iYXNlZCBwcm9kdWN0cy5cblwKK0luZm9ybWF0aW9uIGFib3V0IHBhY2thZ2luZyBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBpcyBhdmFpbGFibGUgYXRcblwKK2h0dHA6Ly9lY2xpcHNlLm9yZy9lcXVpbm94L3AyL3JlcG9zaXRvcnlfcGFja2FnaW5nLmh0bWwgKCJTcGVjaWZpY2F0aW9uIikuXG5cCitcblwKK1lvdSBtYXkgdXNlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IHRvIGFsbG93IG90aGVyIHBhcnRpZXMgdG8gaW5zdGFsbCBJbnN0YWxsYWJsZSBTb2Z0d2FyZS5cblwKK1lvdSBzaGFsbCBiZSByZXNwb25zaWJsZSBmb3IgZW5hYmxpbmcgdGhlIGFwcGxpY2FibGUgbGljZW5zZSBhZ3JlZW1lbnRzIHJlbGF0aW5nIHRvIHRoZVxuXAorSW5zdGFsbGFibGUgU29mdHdhcmUgdG8gYmUgcHJlc2VudGVkIHRvLCBhbmQgYWNjZXB0ZWQgYnksIHRoZSB1c2VycyBvZiB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3lcblwKK2luIGFjY29yZGFuY2Ugd2l0aCB0aGUgU3BlY2lmaWNhdGlvbi4gQnkgdXNpbmcgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgaW4gc3VjaCBhIG1hbm5lciBhbmRcblwKK21ha2luZyBpdCBhdmFpbGFibGUgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBTcGVjaWZpY2F0aW9uLCB5b3UgZnVydGhlciBhY2tub3dsZWRnZSB5b3VyXG5cCithZ3JlZW1lbnQgdG8sIGFuZCB0aGUgYWNxdWlzaXRpb24gb2YgYWxsIG5lY2Vzc2FyeSByaWdodHMgdG8gcGVybWl0IHRoZSBmb2xsb3dpbmc6XG5cCitcblwKKyAgICAgICAxLiBBIHNlcmllcyBvZiBhY3Rpb25zIG1heSBvY2N1ciAoIlByb3Zpc2lvbmluZyBQcm9jZXNzIikgaW4gd2hpY2ggYSB1c2VyIG1heSBleGVjdXRlXG5cCisgICAgICAgICAgdGhlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IG9uIGEgbWFjaGluZSAoIlRhcmdldCBNYWNoaW5lIikgd2l0aCB0aGUgaW50ZW50IG9mIGluc3RhbGxpbmcsXG5cCisgICAgICAgICAgZXh0ZW5kaW5nIG9yIHVwZGF0aW5nIHRoZSBmdW5jdGlvbmFsaXR5IG9mIGFuIEVjbGlwc2UtYmFzZWQgcHJvZHVjdC5cblwKKyAgICAgICAyLiBEdXJpbmcgdGhlIFByb3Zpc2lvbmluZyBQcm9jZXNzLCB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgbWF5IGNhdXNlIHRoaXJkIHBhcnR5XG5cCisgICAgICAgICAgSW5zdGFsbGFibGUgU29mdHdhcmUgb3IgYSBwb3J0aW9uIHRoZXJlb2YgdG8gYmUgYWNjZXNzZWQgYW5kIGNvcGllZCB0byB0aGUgVGFyZ2V0IE1hY2hpbmUuXG5cCisgICAgICAgMy4gUHVyc3VhbnQgdG8gdGhlIFNwZWNpZmljYXRpb24sIHlvdSB3aWxsIHByb3ZpZGUgdG8gdGhlIHVzZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIHRoYXRcblwKKyAgICAgICAgICBnb3Zlcm4gdGhlIHVzZSBvZiB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUgKCJJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQiKSBhbmQgc3VjaFxuXAorICAgICAgICAgIEluc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudCBzaGFsbCBiZSBhY2Nlc3NlZCBmcm9tIHRoZSBUYXJnZXQgTWFjaGluZSBpbiBhY2NvcmRhbmNlXG5cCisgICAgICAgICAgd2l0aCB0aGUgU3BlY2lmaWNhdGlvbi4gU3VjaCBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQgbXVzdCBpbmZvcm0gdGhlIHVzZXIgb2YgdGhlXG5cCisgICAgICAgICAgdGVybXMgYW5kIGNvbmRpdGlvbnMgdGhhdCBnb3Zlcm4gdGhlIEluc3RhbGxhYmxlIFNvZnR3YXJlIGFuZCBtdXN0IHNvbGljaXQgYWNjZXB0YW5jZSBieVxuXAorICAgICAgICAgIHRoZSBlbmQgdXNlciBpbiB0aGUgbWFubmVyIHByZXNjcmliZWQgaW4gc3VjaCBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQuIFVwb24gc3VjaFxuXAorICAgICAgICAgIGluZGljYXRpb24gb2YgYWdyZWVtZW50IGJ5IHRoZSB1c2VyLCB0aGUgcHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgd2lsbCBjb21wbGV0ZSBpbnN0YWxsYXRpb25cblwKKyAgICAgICAgICBvZiB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUuXG5cCitcblwKK0NyeXB0b2dyYXBoeVxuXAorXG5cCitDb250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmVcblwKK2N1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSxcblwKK2FuZC9vciByZS1leHBvcnQgdG8gYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkVcblwKK3VzaW5nIGFueSBlbmNyeXB0aW9uIHNvZnR3YXJlLCBwbGVhc2UgY2hlY2sgdGhlIGNvdW50cnkncyBsYXdzLFxuXAorcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgb3IgdXNlLCBhbmRcblwKK3JlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuXG5cCitcblwKK0phdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgT3JhY2xlIENvcnBvcmF0aW9uIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguXG4KKyMjIyMjIyMjIyMjIGVuZCBvZiBsaWNlbnNlIHByb3BlcnR5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5sZnMuZmVhdHVyZS9mZWF0dXJlLnhtbCBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQubGZzLmZlYXR1cmUvZmVhdHVyZS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI1Mjg1NwotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQubGZzLmZlYXR1cmUvZmVhdHVyZS54bWwKQEAgLTAsMCArMSw1MCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxmZWF0dXJlCisgICAgICBpZD0ib3JnLmVjbGlwc2UuamdpdC5sZnMiCisgICAgICBsYWJlbD0iJWZlYXR1cmVOYW1lIgorICAgICAgdmVyc2lvbj0iNC4zLjAucXVhbGlmaWVyIgorICAgICAgcHJvdmlkZXItbmFtZT0iJXByb3ZpZGVyTmFtZSI+CisKKyAgIDxkZXNjcmlwdGlvbiB1cmw9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvamdpdC8iPgorICAgICAgJWRlc2NyaXB0aW9uCisgICA8L2Rlc2NyaXB0aW9uPgorCisgICA8Y29weXJpZ2h0PgorICAgICAgJWNvcHlyaWdodAorICAgPC9jb3B5cmlnaHQ+CisKKyAgIDxsaWNlbnNlIHVybD0iJWxpY2Vuc2VVUkwiPgorICAgICAgJWxpY2Vuc2UKKyAgIDwvbGljZW5zZT4KKworICAgPHVybD4KKyAgICAgIDx1cGRhdGUgbGFiZWw9IiV1cGRhdGVTaXRlTmFtZSIgdXJsPSJodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvZWdpdC91cGRhdGVzIi8+CisgICAgICA8ZGlzY292ZXJ5IGxhYmVsPSIldXBkYXRlU2l0ZU5hbWUiIHVybD0iaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL2VnaXQvdXBkYXRlcyIvPgorICAgPC91cmw+CisKKyAgIDxyZXF1aXJlcz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5qZ2l0Ii8+CisgICA8L3JlcXVpcmVzPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuamdpdC5sZnMiCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIiCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKyAgIDxwbHVnaW4KKyAgICAgICAgIGlkPSJjb20uZ29vZ2xlLmdzb24iCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKzwvZmVhdHVyZT4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQubGZzLmZlYXR1cmUvbGljZW5zZS5odG1sIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5sZnMuZmVhdHVyZS9saWNlbnNlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTVhZDk1ZQotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQubGZzLmZlYXR1cmUvbGljZW5zZS5odG1sCkBAIC0wLDAgKzEsMTA2IEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+Cis8IS0tIHNhdmVkIGZyb20gdXJsPSgwMDQ0KWh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsL25vdGljZS5odG1sIC0tPgorPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPjxoZWFkPjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgorCis8dGl0bGU+RWNsaXBzZSBGb3VuZGF0aW9uIFNvZnR3YXJlIFVzZXIgQWdyZWVtZW50PC90aXRsZT4KKzwvaGVhZD4KKworPGJvZHkgbGFuZz0iRU4tVVMiPgorPGgyPkVjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvaDI+Cis8cD5BcHJpbCA5LCAyMDE0PC9wPgorCis8aDM+VXNhZ2UgT2YgQ29udGVudDwvaDM+CisKKzxwPlRIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBBTkQvT1IgT1RIRVIgTUFURVJJQUxTIEZPUiBPUEVOIFNPVVJDRSBQUk9KRUNUUworICAgKENPTExFQ1RJVkVMWSAiQ09OVEVOVCIpLiAgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQvT1IgVEhFIFRFUk1TIEFORAorICAgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIEJZIFVTSU5HIFRIRSBDT05URU5ULCBZT1UgQUdSRUUgVEhBVCBZT1VSIFVTRQorICAgT0YgVEhFIENPTlRFTlQgSVMgR09WRVJORUQgQlkgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IKKyAgIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORAorICAgQ09ORElUSU9OUyBPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVywgVEhFTiBZT1UgTUFZIE5PVCBVU0UgVEhFIENPTlRFTlQuPC9wPgorCis8aDM+QXBwbGljYWJsZSBMaWNlbnNlczwvaDM+CisKKzxwPlVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAKKyAgICgiRVBMIikuICBBIGNvcHkgb2YgdGhlIEVQTCBpcyBwcm92aWRlZCB3aXRoIHRoaXMgQ29udGVudCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sPC9hPi4KKyAgIEZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvcD4KKworPHA+Q29udGVudCBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUsIGRvY3VtZW50YXRpb24gYW5kIG90aGVyIGZpbGVzIG1haW50YWluZWQgaW4gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBzb3VyY2UgY29kZQorICAgcmVwb3NpdG9yeSAoIlJlcG9zaXRvcnkiKSBpbiBzb2Z0d2FyZSBtb2R1bGVzICgiTW9kdWxlcyIpIGFuZCBtYWRlIGF2YWlsYWJsZSBhcyBkb3dubG9hZGFibGUgYXJjaGl2ZXMgKCJEb3dubG9hZHMiKS48L3A+CisKKzx1bD4KKyAgICAgICA8bGk+Q29udGVudCBtYXkgYmUgc3RydWN0dXJlZCBhbmQgcGFja2FnZWQgaW50byBtb2R1bGVzIHRvIGZhY2lsaXRhdGUgZGVsaXZlcmluZywgZXh0ZW5kaW5nLCBhbmQgdXBncmFkaW5nIHRoZSBDb250ZW50LiAgVHlwaWNhbCBtb2R1bGVzIG1heSBpbmNsdWRlIHBsdWctaW5zICgiUGx1Zy1pbnMiKSwgcGx1Zy1pbiBmcmFnbWVudHMgKCJGcmFnbWVudHMiKSwgYW5kIGZlYXR1cmVzICgiRmVhdHVyZXMiKS48L2xpPgorICAgICAgIDxsaT5FYWNoIFBsdWctaW4gb3IgRnJhZ21lbnQgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBvciBKQVIgKEphdmGZIEFSY2hpdmUpIGluIGEgZGlyZWN0b3J5IG5hbWVkICJwbHVnaW5zIi48L2xpPgorICAgICAgIDxsaT5BIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC4gIEVhY2ggRmVhdHVyZSBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IGluIGEgZGlyZWN0b3J5IG5hbWVkICJmZWF0dXJlcyIuICBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAiZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb24gbnVtYmVycyBvZiB0aGUgUGx1Zy1pbnMKKyAgICAgIGFuZC9vciBGcmFnbWVudHMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgRmVhdHVyZS48L2xpPgorICAgICAgIDxsaT5GZWF0dXJlcyBtYXkgYWxzbyBpbmNsdWRlIG90aGVyIEZlYXR1cmVzICgiSW5jbHVkZWQgRmVhdHVyZXMiKS4gV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgRmVhdHVyZXMuPC9saT4KKzwvdWw+CisKKzxwPlRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBzaG91bGQgYmUgY29udGFpbmVkIGluIGZpbGVzIG5hbWVkICJhYm91dC5odG1sIiAoIkFib3V0cyIpLiBUaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIEZlYXR1cmVzIGFuZAorSW5jbHVkZWQgRmVhdHVyZXMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAibGljZW5zZS5odG1sIiAoIkZlYXR1cmUgTGljZW5zZXMiKS4gIEFib3V0cyBhbmQgRmVhdHVyZSBMaWNlbnNlcyBtYXkgYmUgbG9jYXRlZCBpbiBhbnkgZGlyZWN0b3J5IG9mIGEgRG93bmxvYWQgb3IgTW9kdWxlCitpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczo8L3A+CisKKzx1bD4KKyAgICAgICA8bGk+VGhlIHRvcC1sZXZlbCAocm9vdCkgZGlyZWN0b3J5PC9saT4KKyAgICAgICA8bGk+UGx1Zy1pbiBhbmQgRnJhZ21lbnQgZGlyZWN0b3JpZXM8L2xpPgorICAgICAgIDxsaT5JbnNpZGUgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBwYWNrYWdlZCBhcyBKQVJzPC9saT4KKyAgICAgICA8bGk+U3ViLWRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgbmFtZWQgInNyYyIgb2YgY2VydGFpbiBQbHVnLWluczwvbGk+CisgICAgICAgPGxpPkZlYXR1cmUgZGlyZWN0b3JpZXM8L2xpPgorPC91bD4KKworPHA+Tm90ZTogaWYgYSBGZWF0dXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgaW5zdGFsbGVkIHVzaW5nIHRoZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neSAoYXMgZGVmaW5lZCBiZWxvdyksIHlvdSBtdXN0IGFncmVlIHRvIGEgbGljZW5zZSAoIkZlYXR1cmUgVXBkYXRlIExpY2Vuc2UiKSBkdXJpbmcgdGhlCitpbnN0YWxsYXRpb24gcHJvY2Vzcy4gIElmIHRoZSBGZWF0dXJlIGNvbnRhaW5zIEluY2x1ZGVkIEZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91IHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyB0aGUgSW5jbHVkZWQgRmVhdHVyZXMgb3IKK2luZm9ybSB5b3Ugd2hlcmUgeW91IGNhbiBsb2NhdGUgdGhlbS4gIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIG1heSBiZSBmb3VuZCBpbiB0aGUgImxpY2Vuc2UiIHByb3BlcnR5IG9mIGZpbGVzIG5hbWVkICJmZWF0dXJlLnByb3BlcnRpZXMiIGZvdW5kIHdpdGhpbiBhIEZlYXR1cmUuCitTdWNoIEFib3V0cywgRmVhdHVyZSBMaWNlbnNlcywgYW5kIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIGNvbnRhaW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIChvciByZWZlcmVuY2VzIHRvIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMpIHRoYXQgZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4KK3RoYXQgZGlyZWN0b3J5LjwvcD4KKworPHA+VEhFIEFCT1VUUywgRkVBVFVSRSBMSUNFTlNFUywgQU5EIEZFQVRVUkUgVVBEQVRFIExJQ0VOU0VTIE1BWSBSRUZFUiBUTyBUSEUgRVBMIE9SIE9USEVSIExJQ0VOU0UgQUdSRUVNRU5UUywgTk9USUNFUyBPUiBURVJNUyBBTkQgQ09ORElUSU9OUy4gIFNPTUUgT0YgVEhFU0UKK09USEVSIExJQ0VOU0UgQUdSRUVNRU5UUyBNQVkgSU5DTFVERSAoQlVUIEFSRSBOT1QgTElNSVRFRCBUTyk6PC9wPgorCis8dWw+CisgICAgICAgPGxpPkVjbGlwc2UgRGlzdHJpYnV0aW9uIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xpY2Vuc2VzL2VkbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9saWNlbnNlcy9lZGwtdjEuMC5odG1sPC9hPik8L2xpPgorICAgICAgIDxsaT5Db21tb24gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWw8L2E+KTwvbGk+CisgICAgICAgPGxpPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDEuMSAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRTwvYT4pPC9saT4KKyAgICAgICA8bGk+QXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UgMi4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjA8L2E+KTwvbGk+CisgICAgICAgPGxpPk1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWwiPmh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBML01QTC0xLjEuaHRtbDwvYT4pPC9saT4KKzwvdWw+CisKKzxwPklUIElTIFlPVVIgT0JMSUdBVElPTiBUTyBSRUFEIEFORCBBQ0NFUFQgQUxMIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMgUFJJT1IgVE8gVVNFIE9GIFRIRSBDT05URU5ULiAgSWYgbm8gQWJvdXQsIEZlYXR1cmUgTGljZW5zZSwgb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBpcyBwcm92aWRlZCwgcGxlYXNlCitjb250YWN0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuIHRoYXQgcGFydGljdWxhciBDb250ZW50LjwvcD4KKworCis8aDM+VXNlIG9mIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5PC9oMz4KKworPHA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgcHJvdmlzaW9uaW5nIHNvZnR3YXJlLCBleGFtcGxlcyBvZiB3aGljaCBpbmNsdWRlLCBidXQgYXJlIG5vdCBsaW1pdGVkIHRvLCBwMiBhbmQgdGhlIEVjbGlwc2UKKyAgIFVwZGF0ZSBNYW5hZ2VyICgiUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kiKSBmb3IgdGhlIHB1cnBvc2Ugb2YgYWxsb3dpbmcgdXNlcnMgdG8gaW5zdGFsbCBzb2Z0d2FyZSwgZG9jdW1lbnRhdGlvbiwgaW5mb3JtYXRpb24gYW5kL29yCisgICBvdGhlciBtYXRlcmlhbHMgKGNvbGxlY3RpdmVseSAiSW5zdGFsbGFibGUgU29mdHdhcmUiKS4gVGhpcyBjYXBhYmlsaXR5IGlzIHByb3ZpZGVkIHdpdGggdGhlIGludGVudCBvZiBhbGxvd2luZyBzdWNoIHVzZXJzIHRvCisgICBpbnN0YWxsLCBleHRlbmQgYW5kIHVwZGF0ZSBFY2xpcHNlLWJhc2VkIHByb2R1Y3RzLiBJbmZvcm1hdGlvbiBhYm91dCBwYWNrYWdpbmcgSW5zdGFsbGFibGUgU29mdHdhcmUgaXMgYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly9lY2xpcHNlLm9yZy9lcXVpbm94L3AyL3JlcG9zaXRvcnlfcGFja2FnaW5nLmh0bWwiPmh0dHA6Ly9lY2xpcHNlLm9yZy9lcXVpbm94L3AyL3JlcG9zaXRvcnlfcGFja2FnaW5nLmh0bWw8L2E+CisgICAoIlNwZWNpZmljYXRpb24iKS48L3A+CisKKzxwPllvdSBtYXkgdXNlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IHRvIGFsbG93IG90aGVyIHBhcnRpZXMgdG8gaW5zdGFsbCBJbnN0YWxsYWJsZSBTb2Z0d2FyZS4gWW91IHNoYWxsIGJlIHJlc3BvbnNpYmxlIGZvciBlbmFibGluZyB0aGUKKyAgIGFwcGxpY2FibGUgbGljZW5zZSBhZ3JlZW1lbnRzIHJlbGF0aW5nIHRvIHRoZSBJbnN0YWxsYWJsZSBTb2Z0d2FyZSB0byBiZSBwcmVzZW50ZWQgdG8sIGFuZCBhY2NlcHRlZCBieSwgdGhlIHVzZXJzIG9mIHRoZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neQorICAgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBTcGVjaWZpY2F0aW9uLiBCeSB1c2luZyBQcm92aXNpb25pbmcgVGVjaG5vbG9neSBpbiBzdWNoIGEgbWFubmVyIGFuZCBtYWtpbmcgaXQgYXZhaWxhYmxlIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUKKyAgIFNwZWNpZmljYXRpb24sIHlvdSBmdXJ0aGVyIGFja25vd2xlZGdlIHlvdXIgYWdyZWVtZW50IHRvLCBhbmQgdGhlIGFjcXVpc2l0aW9uIG9mIGFsbCBuZWNlc3NhcnkgcmlnaHRzIHRvIHBlcm1pdCB0aGUgZm9sbG93aW5nOjwvcD4KKworPG9sPgorICAgICAgIDxsaT5BIHNlcmllcyBvZiBhY3Rpb25zIG1heSBvY2N1ciAoIlByb3Zpc2lvbmluZyBQcm9jZXNzIikgaW4gd2hpY2ggYSB1c2VyIG1heSBleGVjdXRlIHRoZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neQorICAgICAgIG9uIGEgbWFjaGluZSAoIlRhcmdldCBNYWNoaW5lIikgd2l0aCB0aGUgaW50ZW50IG9mIGluc3RhbGxpbmcsIGV4dGVuZGluZyBvciB1cGRhdGluZyB0aGUgZnVuY3Rpb25hbGl0eSBvZiBhbiBFY2xpcHNlLWJhc2VkCisgICAgICAgcHJvZHVjdC48L2xpPgorICAgICAgIDxsaT5EdXJpbmcgdGhlIFByb3Zpc2lvbmluZyBQcm9jZXNzLCB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgbWF5IGNhdXNlIHRoaXJkIHBhcnR5IEluc3RhbGxhYmxlIFNvZnR3YXJlIG9yIGEgcG9ydGlvbiB0aGVyZW9mIHRvIGJlCisgICAgICAgYWNjZXNzZWQgYW5kIGNvcGllZCB0byB0aGUgVGFyZ2V0IE1hY2hpbmUuPC9saT4KKyAgICAgICA8bGk+UHVyc3VhbnQgdG8gdGhlIFNwZWNpZmljYXRpb24sIHlvdSB3aWxsIHByb3ZpZGUgdG8gdGhlIHVzZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIHRoYXQgZ292ZXJuIHRoZSB1c2Ugb2YgdGhlIEluc3RhbGxhYmxlCisgICAgICAgU29mdHdhcmUgKCJJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQiKSBhbmQgc3VjaCBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQgc2hhbGwgYmUgYWNjZXNzZWQgZnJvbSB0aGUgVGFyZ2V0CisgICAgICAgTWFjaGluZSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIFNwZWNpZmljYXRpb24uIFN1Y2ggSW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50IG11c3QgaW5mb3JtIHRoZSB1c2VyIG9mIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyB0aGF0IGdvdmVybgorICAgICAgIHRoZSBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBhbmQgbXVzdCBzb2xpY2l0IGFjY2VwdGFuY2UgYnkgdGhlIGVuZCB1c2VyIGluIHRoZSBtYW5uZXIgcHJlc2NyaWJlZCBpbiBzdWNoIEluc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudC4gVXBvbiBzdWNoCisgICAgICAgaW5kaWNhdGlvbiBvZiBhZ3JlZW1lbnQgYnkgdGhlIHVzZXIsIHRoZSBwcm92aXNpb25pbmcgVGVjaG5vbG9neSB3aWxsIGNvbXBsZXRlIGluc3RhbGxhdGlvbiBvZiB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUuPC9saT4KKzwvb2w+CisKKzxoMz5DcnlwdG9ncmFwaHk8L2gzPgorCis8cD5Db250ZW50IG1heSBjb250YWluIGVuY3J5cHRpb24gc29mdHdhcmUuIFRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSBhcmUgY3VycmVudGx5IG1heSBoYXZlIHJlc3RyaWN0aW9ucyBvbiB0aGUgaW1wb3J0LCBwb3NzZXNzaW9uLCBhbmQgdXNlLCBhbmQvb3IgcmUtZXhwb3J0IHRvCisgICBhbm90aGVyIGNvdW50cnksIG9mIGVuY3J5cHRpb24gc29mdHdhcmUuIEJFRk9SRSB1c2luZyBhbnkgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cywgcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwKKyAgIHBvc3Nlc3Npb24sIG9yIHVzZSwgYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcyBwZXJtaXR0ZWQuPC9wPgorCis8cD48c21hbGw+SmF2YSBhbmQgYWxsIEphdmEtYmFzZWQgdHJhZGVtYXJrcyBhcmUgdHJhZGVtYXJrcyBvZiBPcmFjbGUgQ29ycG9yYXRpb24gaW4gdGhlIFVuaXRlZCBTdGF0ZXMsIG90aGVyIGNvdW50cmllcywgb3IgYm90aC48L3NtYWxsPjwvcD4KKworCis8L2JvZHk+PC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQubGZzLmZlYXR1cmUvcG9tLnhtbCBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQubGZzLmZlYXR1cmUvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDM1ODE2Ci0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5sZnMuZmVhdHVyZS9wb20ueG1sCkBAIC0wLDAgKzEsODIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgICBDb3B5cmlnaHQgKEMpIDIwMTUsIE1hdHRoaWFzIFNvaG4gPG1hdHRoaWFzLnNvaG5Ac2FwLmNvbT4KKyAgIGFuZCBvdGhlciBjb3B5cmlnaHQgb3duZXJzIGFzIGRvY3VtZW50ZWQgaW4gdGhlIHByb2plY3QncyBJUCBsb2cuCisKKyAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlCisgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgRGlzdHJpYnV0aW9uIExpY2Vuc2UgdjEuMCB3aGljaAorICAgYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGlzIHJlcHJvZHVjZWQgYmVsb3csIGFuZCBpcworICAgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lZGwtdjEwLnBocAorCisgICBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKKyAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgICAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgSW5jLiBub3IgdGhlCisgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCisgICAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3IKKyAgICAgd3JpdHRlbiBwZXJtaXNzaW9uLgorCisgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQKKyAgIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCisgICBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICAgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IKKyAgIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICAgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgICBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAgIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAgIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgICBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRgorICAgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCistLT4KKworPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL21hdmVuLXY0XzBfMC54c2QiPgorICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisKKyAgPHBhcmVudD4KKyAgICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5qZ2l0PC9ncm91cElkPgorICAgIDxhcnRpZmFjdElkPmpnaXQudHljaG8ucGFyZW50PC9hcnRpZmFjdElkPgorICAgIDx2ZXJzaW9uPjQuMy4wLVNOQVBTSE9UPC92ZXJzaW9uPgorICA8L3BhcmVudD4KKworICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5qZ2l0LmZlYXR1cmU8L2dyb3VwSWQ+CisgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQubGZzPC9hcnRpZmFjdElkPgorICA8cGFja2FnaW5nPmVjbGlwc2UtZmVhdHVyZTwvcGFja2FnaW5nPgorCisgIDxuYW1lPkpHaXQgLSBPcHRpb25hbCBMRlMgc3VwcG9ydDwvbmFtZT4KKyAgPGRlcGVuZGVuY2llcz4KKworICAgIDxkZXBlbmRlbmN5PgorICAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KKyAgICAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQ8L2FydGlmYWN0SWQ+CisgICAgICA8dmVyc2lvbj4ke3Byb2plY3QudmVyc2lvbn08L3ZlcnNpb24+CisgICAgPC9kZXBlbmRlbmN5PgorCisgICAgPGRlcGVuZGVuY3k+CisgICAgICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5qZ2l0PC9ncm91cElkPgorICAgICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC5sZnM8L2FydGlmYWN0SWQ+CisgICAgICA8dmVyc2lvbj4ke3Byb2plY3QudmVyc2lvbn08L3ZlcnNpb24+CisgICAgPC9kZXBlbmRlbmN5PgorCisgICAgPGRlcGVuZGVuY3k+CisgICAgICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5qZ2l0PC9ncm91cElkPgorICAgICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyPC9hcnRpZmFjdElkPgorICAgICAgPHZlcnNpb24+JHtwcm9qZWN0LnZlcnNpb259PC92ZXJzaW9uPgorICAgIDwvZGVwZW5kZW5jeT4KKyAgPC9kZXBlbmRlbmNpZXM+CisKKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQucGdtLmZlYXR1cmUvZmVhdHVyZS54bWwgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnBnbS5mZWF0dXJlL2ZlYXR1cmUueG1sCmluZGV4IDY3ZmYzY2YuLmFlMzBmMDggMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQucGdtLmZlYXR1cmUvZmVhdHVyZS54bWwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5wZ20uZmVhdHVyZS9mZWF0dXJlLnhtbApAQCAtMiw3ICsyLDcgQEAKIDxmZWF0dXJlCiAgICAgICBpZD0ib3JnLmVjbGlwc2UuamdpdC5wZ20iCiAgICAgICBsYWJlbD0iJWZlYXR1cmVOYW1lIgotICAgICAgdmVyc2lvbj0iNC4yLjEucXVhbGlmaWVyIgorICAgICAgdmVyc2lvbj0iNC4zLjAucXVhbGlmaWVyIgogICAgICAgcHJvdmlkZXItbmFtZT0iJXByb3ZpZGVyTmFtZSI+CiAKICAgIDxkZXNjcmlwdGlvbiB1cmw9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvamdpdC8iPgpAQCAtMjYsOCArMjYsMTMgQEAKICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qZ2l0IgogICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KIAorICAgPGluY2x1ZGVzCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuamdpdC5sZnMiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgorCiAgICA8cmVxdWlyZXM+Ci0gICAgICA8aW1wb3J0IGZlYXR1cmU9Im9yZy5lY2xpcHNlLmpnaXQiIHZlcnNpb249IjQuMi4xIiBtYXRjaD0iZXF1aXZhbGVudCIvPgorICAgICAgPGltcG9ydCBmZWF0dXJlPSJvcmcuZWNsaXBzZS5qZ2l0IiB2ZXJzaW9uPSI0LjMuMCIgbWF0Y2g9ImVxdWl2YWxlbnQiLz4KKyAgICAgIDxpbXBvcnQgZmVhdHVyZT0ib3JnLmVjbGlwc2UuamdpdC5sZnMiIHZlcnNpb249IjQuMy4wIiBtYXRjaD0iZXF1aXZhbGVudCIvPgogICAgPC9yZXF1aXJlcz4KIAogICAgPHBsdWdpbgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5wZ20uZmVhdHVyZS9wb20ueG1sIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5wZ20uZmVhdHVyZS9wb20ueG1sCmluZGV4IDhjYmJkYzUuLjhiZmVjMjYgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQucGdtLmZlYXR1cmUvcG9tLnhtbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnBnbS5mZWF0dXJlL3BvbS54bWwKQEAgLTUwLDcgKzUwLDcgQEAKICAgPHBhcmVudD4KICAgICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5qZ2l0PC9ncm91cElkPgogICAgIDxhcnRpZmFjdElkPmpnaXQudHljaG8ucGFyZW50PC9hcnRpZmFjdElkPgotICAgIDx2ZXJzaW9uPjQuMi4xLVNOQVBTSE9UPC92ZXJzaW9uPgorICAgIDx2ZXJzaW9uPjQuMy4wLVNOQVBTSE9UPC92ZXJzaW9uPgogICA8L3BhcmVudD4KIAogICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5qZ2l0LmZlYXR1cmU8L2dyb3VwSWQ+CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnBnbS5zb3VyY2UuZmVhdHVyZS9mZWF0dXJlLnhtbCBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQucGdtLnNvdXJjZS5mZWF0dXJlL2ZlYXR1cmUueG1sCmluZGV4IGQ1M2RmMzEuLjBlYzRlZDIgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQucGdtLnNvdXJjZS5mZWF0dXJlL2ZlYXR1cmUueG1sCisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQucGdtLnNvdXJjZS5mZWF0dXJlL2ZlYXR1cmUueG1sCkBAIC0yLDcgKzIsNyBAQAogPGZlYXR1cmUKICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qZ2l0LnBnbS5zb3VyY2UiCiAgICAgICBsYWJlbD0iJWZlYXR1cmVOYW1lIgotICAgICAgdmVyc2lvbj0iNC4yLjEucXVhbGlmaWVyIgorICAgICAgdmVyc2lvbj0iNC4zLjAucXVhbGlmaWVyIgogICAgICAgcHJvdmlkZXItbmFtZT0iJXByb3ZpZGVyTmFtZSI+CiAKICAgIDxkZXNjcmlwdGlvbiB1cmw9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvamdpdC8iPgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5wZ20uc291cmNlLmZlYXR1cmUvcG9tLnhtbCBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQucGdtLnNvdXJjZS5mZWF0dXJlL3BvbS54bWwKaW5kZXggOGRkNzI2ZC4uMWNlYzJmMiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5wZ20uc291cmNlLmZlYXR1cmUvcG9tLnhtbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnBnbS5zb3VyY2UuZmVhdHVyZS9wb20ueG1sCkBAIC01MCw3ICs1MCw3IEBACiAgIDxwYXJlbnQ+CiAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KICAgICA8YXJ0aWZhY3RJZD5qZ2l0LnR5Y2hvLnBhcmVudDwvYXJ0aWZhY3RJZD4KLSAgICA8dmVyc2lvbj40LjIuMS1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICA8dmVyc2lvbj40LjMuMC1TTkFQU0hPVDwvdmVyc2lvbj4KICAgPC9wYXJlbnQ+CiAKICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdC5mZWF0dXJlPC9ncm91cElkPgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5yZXBvc2l0b3J5L2NhdGVnb3J5LnhtbCBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQucmVwb3NpdG9yeS9jYXRlZ29yeS54bWwKaW5kZXggMjE4NmFkOS4uYzJiZmM5MiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5yZXBvc2l0b3J5L2NhdGVnb3J5LnhtbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnJlcG9zaXRvcnkvY2F0ZWdvcnkueG1sCkBAIC0yMSw2ICsyMSwxMiBAQAogICAgPGZlYXR1cmUgdXJsPSJmZWF0dXJlcy9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuYXBhY2hlXzAuMC4wLnF1YWxpZmllci5qYXIiIGlkPSJvcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuYXBhY2hlIiB2ZXJzaW9uPSIwLjAuMCIgcGF0Y2g9InRydWUiPgogICAgICAgPGNhdGVnb3J5IG5hbWU9IkpHaXQiLz4KICAgIDwvZmVhdHVyZT4KKyAgIDxmZWF0dXJlIHVybD0iZmVhdHVyZXMvb3JnLmVjbGlwc2UuamdpdC5sZnNfMC4wLjAucXVhbGlmaWVyLmphciIgaWQ9Im9yZy5lY2xpcHNlLmpnaXQubGZzIiB2ZXJzaW9uPSIwLjAuMCI+CisgICAgICA8Y2F0ZWdvcnkgbmFtZT0iSkdpdCIvPgorICAgPC9mZWF0dXJlPgorICAgPGZlYXR1cmUgdXJsPSJmZWF0dXJlcy9vcmcuZWNsaXBzZS5qZ2l0Lmxmc18wLjAuMC5xdWFsaWZpZXIuamFyIiBpZD0ib3JnLmVjbGlwc2UuamdpdC5sZnMiIHZlcnNpb249IjAuMC4wIj4KKyAgICAgIDxjYXRlZ29yeSBuYW1lPSJKR2l0Ii8+CisgICA8L2ZlYXR1cmU+CiAgICA8Y2F0ZWdvcnktZGVmIG5hbWU9IkpHaXQiIGxhYmVsPSJKR2l0Ij4KICAgICAgIDxkZXNjcmlwdGlvbj4KICAgICAgICAgIEpHaXQKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQucmVwb3NpdG9yeS9wb20ueG1sIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5yZXBvc2l0b3J5L3BvbS54bWwKaW5kZXggYmY4YzdjYi4uOWQ4NDJlZiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5yZXBvc2l0b3J5L3BvbS54bWwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5yZXBvc2l0b3J5L3BvbS54bWwKQEAgLTUwLDcgKzUwLDcgQEAKICAgPHBhcmVudD4KICAgICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5qZ2l0PC9ncm91cElkPgogICAgIDxhcnRpZmFjdElkPmpnaXQudHljaG8ucGFyZW50PC9hcnRpZmFjdElkPgotICAgIDx2ZXJzaW9uPjQuMi4xLVNOQVBTSE9UPC92ZXJzaW9uPgorICAgIDx2ZXJzaW9uPjQuMy4wLVNOQVBTSE9UPC92ZXJzaW9uPgogICA8L3BhcmVudD4KIAogICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0LnJlcG9zaXRvcnk8L2FydGlmYWN0SWQ+CkBAIC03MCw2ICs3MCwxNiBAQAogCSAgPHZlcnNpb24+JHtwcm9qZWN0LnZlcnNpb259PC92ZXJzaW9uPgogCTwvZGVwZW5kZW5jeT4KICAgICA8ZGVwZW5kZW5jeT4KKwkgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CisJICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0LmxmczwvYXJ0aWZhY3RJZD4KKwkgIDx2ZXJzaW9uPiR7cHJvamVjdC52ZXJzaW9ufTwvdmVyc2lvbj4KKwk8L2RlcGVuZGVuY3k+CisgICAgPGRlcGVuZGVuY3k+CisgICAgICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5qZ2l0PC9ncm91cElkPgorICAgICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyPC9hcnRpZmFjdElkPgorICAgICAgPHZlcnNpb24+JHtwcm9qZWN0LnZlcnNpb259PC92ZXJzaW9uPgorICAgIDwvZGVwZW5kZW5jeT4KKyAgICA8ZGVwZW5kZW5jeT4KICAgICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgICAgICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0LnBnbTwvYXJ0aWZhY3RJZD4KICAgICAgIDx2ZXJzaW9uPiR7cHJvamVjdC52ZXJzaW9ufTwvdmVyc2lvbj4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQuc291cmNlLmZlYXR1cmUvZmVhdHVyZS54bWwgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnNvdXJjZS5mZWF0dXJlL2ZlYXR1cmUueG1sCmluZGV4IDM4ZGI0ZjYuLjBkODI3NzUgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQuc291cmNlLmZlYXR1cmUvZmVhdHVyZS54bWwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5zb3VyY2UuZmVhdHVyZS9mZWF0dXJlLnhtbApAQCAtMiw3ICsyLDcgQEAKIDxmZWF0dXJlCiAgICAgICBpZD0ib3JnLmVjbGlwc2UuamdpdC5zb3VyY2UiCiAgICAgICBsYWJlbD0iJWZlYXR1cmVOYW1lIgotICAgICAgdmVyc2lvbj0iNC4yLjEucXVhbGlmaWVyIgorICAgICAgdmVyc2lvbj0iNC4zLjAucXVhbGlmaWVyIgogICAgICAgcHJvdmlkZXItbmFtZT0iJXByb3ZpZGVyTmFtZSI+CiAKICAgIDxkZXNjcmlwdGlvbiB1cmw9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvamdpdC8iPgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5zb3VyY2UuZmVhdHVyZS9wb20ueG1sIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5zb3VyY2UuZmVhdHVyZS9wb20ueG1sCmluZGV4IGVmNmRlMmIuLjhmZmViMTQgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQuc291cmNlLmZlYXR1cmUvcG9tLnhtbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnNvdXJjZS5mZWF0dXJlL3BvbS54bWwKQEAgLTUwLDcgKzUwLDcgQEAKICAgPHBhcmVudD4KICAgICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5qZ2l0PC9ncm91cElkPgogICAgIDxhcnRpZmFjdElkPmpnaXQudHljaG8ucGFyZW50PC9hcnRpZmFjdElkPgotICAgIDx2ZXJzaW9uPjQuMi4xLVNOQVBTSE9UPC92ZXJzaW9uPgorICAgIDx2ZXJzaW9uPjQuMy4wLVNOQVBTSE9UPC92ZXJzaW9uPgogICA8L3BhcmVudD4KIAogICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5qZ2l0LmZlYXR1cmU8L2dyb3VwSWQ+CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L01FVEEtSU5GL01BTklGRVNULk1GCmluZGV4IDA5ZTdjOTQuLjgyNjVlMjMgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L01FVEEtSU5GL01BTklGRVNULk1GCisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0yLDQgKzIsNCBAQAogQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgogQnVuZGxlLU5hbWU6IEpHaXQgVGFyZ2V0IFBsYXRmb3JtIEJ1bmRsZQogQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuamdpdC50YXJnZXQKLUJ1bmRsZS1WZXJzaW9uOiA0LjIuMS5xdWFsaWZpZXIKK0J1bmRsZS1WZXJzaW9uOiA0LjMuMC5xdWFsaWZpZXIKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L2pnaXQtNC4zLnRhcmdldCBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L2pnaXQtNC4zLnRhcmdldAppbmRleCBlODY3MGU3Li4xOWVkZjUxIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9qZ2l0LTQuMy50YXJnZXQKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjMudGFyZ2V0CkBAIC00NSw2ICs0NSw3IEBACiAgICAgICA8dW5pdCBpZD0ib3JnLm9iamVuZXNpcy5zb3VyY2UiIHZlcnNpb249IjEuMC4wLnYyMDExMDUyMTE5NDMiLz4KICAgICAgIDx1bml0IGlkPSJvcmcubW9ja2l0byIgdmVyc2lvbj0iMS44LjQudjIwMTMwMzAzMTUwMCIvPgogICAgICAgPHVuaXQgaWQ9Im9yZy5tb2NraXRvLnNvdXJjZSIgdmVyc2lvbj0iMS44LjQudjIwMTMwMzAzMTUwMCIvPgorICAgICAgPHVuaXQgaWQ9ImNvbS5nb29nbGUuZ3NvbiIgdmVyc2lvbj0iMi4yLjQudjIwMTMxMTIzMTcwNCIvPgogICAgICAgPHVuaXQgaWQ9ImNvbS5qY3JhZnQuanNjaCIgdmVyc2lvbj0iMC4xLjUxLnYyMDE0MTAzMDIwMDAiLz4KICAgICAgIDx1bml0IGlkPSJjb20uamNyYWZ0LmpzY2guc291cmNlIiB2ZXJzaW9uPSIwLjEuNTEudjIwMTQxMDMwMjAwMCIvPgogICAgICAgPHVuaXQgaWQ9Im9yZy5qdW5pdCIgdmVyc2lvbj0iNC4xMS4wLnYyMDEzMDMwODAwMzAiLz4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L2pnaXQtNC40LnRhcmdldCBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L2pnaXQtNC40LnRhcmdldAppbmRleCAwYjg1ZDc1Li4zNDUxYjQyIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9qZ2l0LTQuNC50YXJnZXQKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjQudGFyZ2V0CkBAIC0xLDcgKzEsNyBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CiA8P3BkZT8+CiA8IS0tIGdlbmVyYXRlZCB3aXRoIGh0dHBzOi8vZ2l0aHViLmNvbS9tYmFyYmVyby9mci5vYmVvLnJlbGVuZy50YXJnZXRwbGF0Zm9ybSAtLT4KLTx0YXJnZXQgbmFtZT0iamdpdC00LjQiIHNlcXVlbmNlTnVtYmVyPSIxNDQwMDI0MDc5Ij4KKzx0YXJnZXQgbmFtZT0iamdpdC00LjQiIHNlcXVlbmNlTnVtYmVyPSIxNDQ0MTY3ODIwIj4KICAgPGxvY2F0aW9ucz4KICAgICA8bG9jYXRpb24gaW5jbHVkZU1vZGU9InNsaWNlciIgaW5jbHVkZUFsbFBsYXRmb3Jtcz0iZmFsc2UiIGluY2x1ZGVTb3VyY2U9InRydWUiIGluY2x1ZGVDb25maWd1cmVQaGFzZT0idHJ1ZSIgdHlwZT0iSW5zdGFsbGFibGVVbml0Ij4KICAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5jbGllbnQiIHZlcnNpb249IjkuMi4xMy52MjAxNTA3MzAiLz4KQEAgLTQ1LDYgKzQ1LDcgQEAKICAgICAgIDx1bml0IGlkPSJvcmcub2JqZW5lc2lzLnNvdXJjZSIgdmVyc2lvbj0iMS4wLjAudjIwMTEwNTIxMTk0MyIvPgogICAgICAgPHVuaXQgaWQ9Im9yZy5tb2NraXRvIiB2ZXJzaW9uPSIxLjguNC52MjAxMzAzMDMxNTAwIi8+CiAgICAgICA8dW5pdCBpZD0ib3JnLm1vY2tpdG8uc291cmNlIiB2ZXJzaW9uPSIxLjguNC52MjAxMzAzMDMxNTAwIi8+CisgICAgICA8dW5pdCBpZD0iY29tLmdvb2dsZS5nc29uIiB2ZXJzaW9uPSIyLjIuNC52MjAxMzExMjMxNzA0Ii8+CiAgICAgICA8dW5pdCBpZD0iY29tLmpjcmFmdC5qc2NoIiB2ZXJzaW9uPSIwLjEuNTEudjIwMTQxMDMwMjAwMCIvPgogICAgICAgPHVuaXQgaWQ9ImNvbS5qY3JhZnQuanNjaC5zb3VyY2UiIHZlcnNpb249IjAuMS41MS52MjAxNDEwMzAyMDAwIi8+CiAgICAgICA8dW5pdCBpZD0ib3JnLmp1bml0IiB2ZXJzaW9uPSI0LjExLjAudjIwMTMwMzA4MDAzMCIvPgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjUudGFyZ2V0IGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjUudGFyZ2V0CmluZGV4IDIwNjc0ODIuLmNlNzEyMjIgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L2pnaXQtNC41LnRhcmdldAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9qZ2l0LTQuNS50YXJnZXQKQEAgLTQ1LDYgKzQ1LDcgQEAKICAgICAgIDx1bml0IGlkPSJvcmcub2JqZW5lc2lzLnNvdXJjZSIgdmVyc2lvbj0iMS4wLjAudjIwMTUwNTEyMTkxNSIvPgogICAgICAgPHVuaXQgaWQ9Im9yZy5tb2NraXRvIiB2ZXJzaW9uPSIxLjguNC52MjAxMzAzMDMxNTAwIi8+CiAgICAgICA8dW5pdCBpZD0ib3JnLm1vY2tpdG8uc291cmNlIiB2ZXJzaW9uPSIxLjguNC52MjAxMzAzMDMxNTAwIi8+CisgICAgICA8dW5pdCBpZD0iY29tLmdvb2dsZS5nc29uIiB2ZXJzaW9uPSIyLjIuNC52MjAxMzExMjMxNzA0Ii8+CiAgICAgICA8dW5pdCBpZD0iY29tLmpjcmFmdC5qc2NoIiB2ZXJzaW9uPSIwLjEuNTMudjIwMTUwODE4MDUxNSIvPgogICAgICAgPHVuaXQgaWQ9ImNvbS5qY3JhZnQuanNjaC5zb3VyY2UiIHZlcnNpb249IjAuMS41My52MjAxNTA4MTgwNTE1Ii8+CiAgICAgICA8dW5pdCBpZD0ib3JnLmp1bml0IiB2ZXJzaW9uPSI0LjExLjAudjIwMTMwMzA4MDAzMCIvPgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvb3JiaXQvUjIwMTUwMTI0MDczNzQ3LUx1bmEtU1IyLnRwZCBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L29yYml0L1IyMDE1MDEyNDA3Mzc0Ny1MdW5hLVNSMi50cGQKaW5kZXggMzhjOTI5Ny4uZDllMDcyZiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvb3JiaXQvUjIwMTUwMTI0MDczNzQ3LUx1bmEtU1IyLnRwZAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9vcmJpdC9SMjAxNTAxMjQwNzM3NDctTHVuYS1TUjIudHBkCkBAIC0yNCw2ICsyNCw3IEBACiAJb3JnLm9iamVuZXNpcy5zb3VyY2UgWzEuMC4wLnYyMDExMDUyMTE5NDMsMS4wLjAudjIwMTEwNTIxMTk0M10KIAlvcmcubW9ja2l0byBbMS44LjQudjIwMTMwMzAzMTUwMCwxLjguNC52MjAxMzAzMDMxNTAwXQogCW9yZy5tb2NraXRvLnNvdXJjZSBbMS44LjQudjIwMTMwMzAzMTUwMCwxLjguNC52MjAxMzAzMDMxNTAwXQorCWNvbS5nb29nbGUuZ3NvbiBbMi4yLjQudjIwMTMxMTIzMTcwNCwyLjIuNC52MjAxMzExMjMxNzA0XQogCWNvbS5qY3JhZnQuanNjaCBbMC4xLjUxLnYyMDE0MTAzMDIwMDAsMC4xLjUxLnYyMDE0MTAzMDIwMDBdCiAJY29tLmpjcmFmdC5qc2NoLnNvdXJjZSBbMC4xLjUxLnYyMDE0MTAzMDIwMDAsMC4xLjUxLnYyMDE0MTAzMDIwMDBdCiAJb3JnLmp1bml0IFs0LjExLjAudjIwMTMwMzA4MDAzMCw0LjExLjAudjIwMTMwMzA4MDAzMF0KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L29yYml0L1IyMDE1MDgyMTE1MzM0MS1NYXJzLnRwZCBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L29yYml0L1IyMDE1MDgyMTE1MzM0MS1NYXJzLnRwZAppbmRleCBjYjYzODA3Li41Y2FjZDcxIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9vcmJpdC9SMjAxNTA4MjExNTMzNDEtTWFycy50cGQKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvb3JiaXQvUjIwMTUwODIxMTUzMzQxLU1hcnMudHBkCkBAIC0yNCw2ICsyNCw3IEBACiAJb3JnLm9iamVuZXNpcy5zb3VyY2UgWzEuMC4wLnYyMDE1MDUxMjE5MTUsMS4wLjAudjIwMTUwNTEyMTkxNV0KIAlvcmcubW9ja2l0byBbMS44LjQudjIwMTMwMzAzMTUwMCwxLjguNC52MjAxMzAzMDMxNTAwXQogCW9yZy5tb2NraXRvLnNvdXJjZSBbMS44LjQudjIwMTMwMzAzMTUwMCwxLjguNC52MjAxMzAzMDMxNTAwXQorCWNvbS5nb29nbGUuZ3NvbiBbMi4yLjQudjIwMTMxMTIzMTcwNCwyLjIuNC52MjAxMzExMjMxNzA0XQogCWNvbS5qY3JhZnQuanNjaCBbMC4xLjUzLnYyMDE1MDgxODA1MTUsMC4xLjUzLnYyMDE1MDgxODA1MTVdCiAJY29tLmpjcmFmdC5qc2NoLnNvdXJjZSBbMC4xLjUzLnYyMDE1MDgxODA1MTUsMC4xLjUzLnYyMDE1MDgxODA1MTVdCiAJb3JnLmp1bml0IFs0LjExLjAudjIwMTMwMzA4MDAzMCw0LjExLjAudjIwMTMwMzA4MDAzMF0KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L3BvbS54bWwgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9wb20ueG1sCmluZGV4IGE0ZmNlZmEuLjY2MzA1ZjggMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L3BvbS54bWwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvcG9tLnhtbApAQCAtNDksNyArNDksNyBAQAogICA8cGFyZW50PgogICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgICAgPGFydGlmYWN0SWQ+amdpdC50eWNoby5wYXJlbnQ8L2FydGlmYWN0SWQ+Ci0gICAgPHZlcnNpb24+NC4yLjEtU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgPHZlcnNpb24+NC4zLjAtU05BUFNIT1Q8L3ZlcnNpb24+CiAgIDwvcGFyZW50PgogCiAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQudGFyZ2V0PC9hcnRpZmFjdElkPgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvcG9tLnhtbCBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL3BvbS54bWwKaW5kZXggNzIzMWM5Yy4uNjhlZmM0NiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvcG9tLnhtbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9wb20ueG1sCkBAIC0xLDYgKzEsNiBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KIDwhLS0KLSAgIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMywgTWF0dGhpYXMgU29obiA8bWF0dGhpYXMuc29obkBzYXAuY29tPgorICAgQ29weXJpZ2h0IChDKSAyMDA5LCAyMDE1LCBNYXR0aGlhcyBTb2huIDxtYXR0aGlhcy5zb2huQHNhcC5jb20+CiAgICBhbmQgb3RoZXIgY29weXJpZ2h0IG93bmVycyBhcyBkb2N1bWVudGVkIGluIHRoZSBwcm9qZWN0J3MgSVAgbG9nLgogCiAgICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZQpAQCAtNTMsNyArNTMsNyBAQAogCiAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgIDxhcnRpZmFjdElkPmpnaXQudHljaG8ucGFyZW50PC9hcnRpZmFjdElkPgotICA8dmVyc2lvbj40LjIuMS1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgPHZlcnNpb24+NC4zLjAtU05BUFNIT1Q8L3ZlcnNpb24+CiAgIDxwYWNrYWdpbmc+cG9tPC9wYWNrYWdpbmc+CiAKICAgPG5hbWU+SkdpdCBUeWNobyBQYXJlbnQ8L25hbWU+CkBAIC03OCw2ICs3OCw3IEBACiAgICAgPG1vZHVsZT5vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldDwvbW9kdWxlPgogICAgIDxtb2R1bGU+b3JnLmVjbGlwc2UuamdpdC5mZWF0dXJlPC9tb2R1bGU+CiAgICAgPG1vZHVsZT5vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuYXBhY2hlLmZlYXR1cmU8L21vZHVsZT4KKyAgICA8bW9kdWxlPm9yZy5lY2xpcHNlLmpnaXQubGZzLmZlYXR1cmU8L21vZHVsZT4KICAgICA8bW9kdWxlPm9yZy5lY2xpcHNlLmpnaXQucGdtLmZlYXR1cmU8L21vZHVsZT4KICAgICA8bW9kdWxlPm9yZy5lY2xpcHNlLmpnaXQuc291cmNlLmZlYXR1cmU8L21vZHVsZT4KICAgICA8bW9kdWxlPm9yZy5lY2xpcHNlLmpnaXQucGdtLnNvdXJjZS5mZWF0dXJlPC9tb2R1bGU+CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBnbS50ZXN0L01FVEEtSU5GL01BTklGRVNULk1GIGIvb3JnLmVjbGlwc2UuamdpdC5wZ20udGVzdC9NRVRBLUlORi9NQU5JRkVTVC5NRgppbmRleCBiNjRmNWYwLi4zYWU3YTgwIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnBnbS50ZXN0L01FVEEtSU5GL01BTklGRVNULk1GCisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGdtLnRlc3QvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTIsMjggKzIsMjggQEAKIEJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKIEJ1bmRsZS1OYW1lOiAlcGx1Z2luX25hbWUKIEJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpnaXQucGdtLnRlc3QKLUJ1bmRsZS1WZXJzaW9uOiA0LjIuMS5xdWFsaWZpZXIKK0J1bmRsZS1WZXJzaW9uOiA0LjMuMC5xdWFsaWZpZXIKIEJ1bmRsZS1WZW5kb3I6ICVwcm92aWRlcl9uYW1lCiBCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KIEJ1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5CiBCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSmF2YVNFLTEuNwotSW1wb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmpnaXQuYXBpO3ZlcnNpb249Ils0LjIuMSw0LjMuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuYXBpLmVycm9yczt2ZXJzaW9uPSJbNC4yLjEsNC4zLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmRpZmY7dmVyc2lvbj0iWzQuMi4xLDQuMy4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5kaXJjYWNoZTt2ZXJzaW9uPSJbNC4yLjEsNC4zLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UuZmlsZTt2ZXJzaW9uPSI0LjIuMSIsCi0gb3JnLmVjbGlwc2UuamdpdC5qdW5pdDt2ZXJzaW9uPSJbNC4yLjEsNC4zLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmxpYjt2ZXJzaW9uPSJbNC4yLjEsNC4zLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lm1lcmdlO3ZlcnNpb249Ils0LjIuMSw0LjMuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQucGdtO3ZlcnNpb249Ils0LjIuMSw0LjMuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQucGdtLmludGVybmFsO3ZlcnNpb249Ils0LjIuMSw0LjMuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQucGdtLm9wdDt2ZXJzaW9uPSJbNC4yLjEsNC4zLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGs7dmVyc2lvbj0iWzQuMi4xLDQuMy4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5zdG9yYWdlLmZpbGU7dmVyc2lvbj0iWzQuMi4xLDQuMy4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQ7dmVyc2lvbj0iWzQuMi4xLDQuMy4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC50cmVld2Fsazt2ZXJzaW9uPSJbNC4yLjEsNC4zLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnV0aWw7dmVyc2lvbj0iWzQuMi4xLDQuMy4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC51dGlsLmlvO3ZlcnNpb249Ils0LjIuMSw0LjMuMCkiLAorSW1wb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmpnaXQuYXBpO3ZlcnNpb249Ils0LjMuMCw0LjQuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuYXBpLmVycm9yczt2ZXJzaW9uPSJbNC4zLjAsNC40LjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmRpZmY7dmVyc2lvbj0iWzQuMy4wLDQuNC4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5kaXJjYWNoZTt2ZXJzaW9uPSJbNC4zLjAsNC40LjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UuZmlsZTt2ZXJzaW9uPSI0LjMuMCIsCisgb3JnLmVjbGlwc2UuamdpdC5qdW5pdDt2ZXJzaW9uPSJbNC4zLjAsNC40LjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmxpYjt2ZXJzaW9uPSJbNC4zLjAsNC40LjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lm1lcmdlO3ZlcnNpb249Ils0LjMuMCw0LjQuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQucGdtO3ZlcnNpb249Ils0LjMuMCw0LjQuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQucGdtLmludGVybmFsO3ZlcnNpb249Ils0LjMuMCw0LjQuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQucGdtLm9wdDt2ZXJzaW9uPSJbNC4zLjAsNC40LjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGs7dmVyc2lvbj0iWzQuMy4wLDQuNC4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5zdG9yYWdlLmZpbGU7dmVyc2lvbj0iWzQuMy4wLDQuNC4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQ7dmVyc2lvbj0iWzQuMy4wLDQuNC4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC50cmVld2Fsazt2ZXJzaW9uPSJbNC4zLjAsNC40LjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnV0aWw7dmVyc2lvbj0iWzQuMy4wLDQuNC4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC51dGlsLmlvO3ZlcnNpb249Ils0LjMuMCw0LjQuMCkiLAogIG9yZy5oYW1jcmVzdC5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMi4wLjApIiwKICBvcmcuanVuaXQ7dmVyc2lvbj0iWzQuNC4wLDUuMC4wKSIsCiAgb3JnLmtvaHN1a2UuYXJnczRqO3ZlcnNpb249IlsyLjAuMTIsMi4xLjApIgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5wZ20udGVzdC9wb20ueG1sIGIvb3JnLmVjbGlwc2UuamdpdC5wZ20udGVzdC9wb20ueG1sCmluZGV4IDEzNWJmNjUuLjFkMjQ1MzMgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQucGdtLnRlc3QvcG9tLnhtbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnBnbS50ZXN0L3BvbS54bWwKQEAgLTUwLDcgKzUwLDcgQEAKICAgPHBhcmVudD4KICAgICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5qZ2l0PC9ncm91cElkPgogICAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQtcGFyZW50PC9hcnRpZmFjdElkPgotICAgIDx2ZXJzaW9uPjQuMi4xLVNOQVBTSE9UPC92ZXJzaW9uPgorICAgIDx2ZXJzaW9uPjQuMy4wLVNOQVBTSE9UPC92ZXJzaW9uPgogICA8L3BhcmVudD4KIAogICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0LnBnbS50ZXN0PC9hcnRpZmFjdElkPgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5wZ20vQlVDSyBiL29yZy5lY2xpcHNlLmpnaXQucGdtL0JVQ0sKaW5kZXggZWRjZjJmYy4uNDc3MTFiNSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wZ20vQlVDSworKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnBnbS9CVUNLCkBAIC05LDggKzksMTggQEAKICAgICAnLy9vcmcuZWNsaXBzZS5qZ2l0OmpnaXQnLAogICAgICcvL29yZy5lY2xpcHNlLmpnaXQuYXJjaGl2ZTpqZ2l0LWFyY2hpdmUnLAogICAgICcvL29yZy5lY2xpcHNlLmpnaXQuaHR0cC5hcGFjaGU6aHR0cC1hcGFjaGUnLAorICAgICcvL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlcjpqZ2l0LWxmcy1zZXJ2ZXInLAogICAgICcvL29yZy5lY2xpcHNlLmpnaXQudWk6dWknLAogICAgICcvL2xpYjphcmdzNGonLAorICAgICcvL2xpYjpodHRwY29tcG9uZW50cycsCisgICAgJy8vbGliOmh0dHBjb3JlJywKKyAgICAnLy9saWIvamV0dHk6aHR0cCcsCisgICAgJy8vbGliL2pldHR5OmlvJywKKyAgICAnLy9saWIvamV0dHk6c2VydmVyJywKKyAgICAnLy9saWIvamV0dHk6c2VydmxldCcsCisgICAgJy8vbGliL2pldHR5OnNlY3VyaXR5JywKKyAgICAnLy9saWIvamV0dHk6dXRpbCcsCisgICAgJy8vbGliOnNlcnZsZXQtYXBpJwogICBdLAogICB2aXNpYmlsaXR5ID0gWydQVUJMSUMnXSwKICkKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGdtL01FVEEtSU5GL01BTklGRVNULk1GIGIvb3JnLmVjbGlwc2UuamdpdC5wZ20vTUVUQS1JTkYvTUFOSUZFU1QuTUYKaW5kZXggNWM2YTE2Yi4uYjY1NGZjOSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wZ20vTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5wZ20vTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTIsNDggKzIsNjggQEAKIEJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKIEJ1bmRsZS1OYW1lOiAlcGx1Z2luX25hbWUKIEJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpnaXQucGdtCi1CdW5kbGUtVmVyc2lvbjogNC4yLjEucXVhbGlmaWVyCitCdW5kbGUtVmVyc2lvbjogNC4zLjAucXVhbGlmaWVyCiBCdW5kbGUtVmVuZG9yOiAlcHJvdmlkZXJfbmFtZQogQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKIEJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgogQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEphdmFTRS0xLjcKLUltcG9ydC1QYWNrYWdlOiBvcmcuYXBhY2hlLmNvbW1vbnMuY29tcHJlc3MuYXJjaGl2ZXJzO3ZlcnNpb249IlsxLjMsMi4wKSIsCitJbXBvcnQtUGFja2FnZTogamF2YXguc2VydmxldDt2ZXJzaW9uPSJbMy4xLjAsNC4wLjApIiwKKyBqYXZheC5zZXJ2bGV0Lmh0dHA7dmVyc2lvbj0iWzMuMS4wLDQuMC4wKSIsCisgb3JnLmFwYWNoZS5jb21tb25zLmNvbXByZXNzLmFyY2hpdmVyczt2ZXJzaW9uPSJbMS4zLDIuMCkiLAogIG9yZy5hcGFjaGUuY29tbW9ucy5jb21wcmVzcy5hcmNoaXZlcnMudGFyO3ZlcnNpb249IlsxLjMsMi4wKSIsCiAgb3JnLmFwYWNoZS5jb21tb25zLmNvbXByZXNzLmFyY2hpdmVycy56aXA7dmVyc2lvbj0iWzEuMywyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmFwaTt2ZXJzaW9uPSJbNC4yLjEsNC4zLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmFwaS5lcnJvcnM7dmVyc2lvbj0iWzQuMi4xLDQuMy4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5hcmNoaXZlO3ZlcnNpb249Ils0LjIuMSw0LjMuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuYXd0dWk7dmVyc2lvbj0iWzQuMi4xLDQuMy4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5ibGFtZTt2ZXJzaW9uPSJbNC4yLjEsNC4zLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmRpZmY7dmVyc2lvbj0iWzQuMi4xLDQuMy4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5kaXJjYWNoZTt2ZXJzaW9uPSJbNC4yLjEsNC4zLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmVycm9yczt2ZXJzaW9uPSJbNC4yLjEsNC4zLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmdpdHJlcG87dmVyc2lvbj0iWzQuMi4xLDQuMy4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLmZpbGU7dmVyc2lvbj0iWzQuMi4xLDQuMy4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLnBhY2s7dmVyc2lvbj0iWzQuMi4xLDQuMy4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLnJlZnRyZWU7dmVyc2lvbj0iWzQuMi4xLDQuMy4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5saWI7dmVyc2lvbj0iWzQuMi4xLDQuMy4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5tZXJnZTt2ZXJzaW9uPSI0LjIuMSIsCi0gb3JnLmVjbGlwc2UuamdpdC5ubHM7dmVyc2lvbj0iWzQuMi4xLDQuMy4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5ub3Rlczt2ZXJzaW9uPSJbNC4yLjEsNC4zLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnJldnBsb3Q7dmVyc2lvbj0iWzQuMi4xLDQuMy4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrO3ZlcnNpb249Ils0LjIuMSw0LjMuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQucmV2d2Fsay5maWx0ZXI7dmVyc2lvbj0iWzQuMi4xLDQuMy4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5zdG9yYWdlLmZpbGU7dmVyc2lvbj0iWzQuMi4xLDQuMy4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5zdG9yYWdlLnBhY2s7dmVyc2lvbj0iWzQuMi4xLDQuMy4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQ7dmVyc2lvbj0iWzQuMi4xLDQuMy4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuaHR0cC5hcGFjaGU7dmVyc2lvbj0iWzQuMi4xLDQuMy4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQucmVzb2x2ZXI7dmVyc2lvbj0iWzQuMi4xLDQuMy4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC50cmVld2Fsazt2ZXJzaW9uPSJbNC4yLjEsNC4zLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrLmZpbHRlcjt2ZXJzaW9uPSJbNC4yLjEsNC4zLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnV0aWw7dmVyc2lvbj0iWzQuMi4xLDQuMy4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC51dGlsLmlvO3ZlcnNpb249Ils0LjIuMSw0LjMuMCkiLAorIG9yZy5lY2xpcHNlLmpldHR5LmNvbnRpbnVhdGlvbjt2ZXJzaW9uPSJbOS4wLjAsMTAuMC4wKSIsCisgb3JnLmVjbGlwc2UuamV0dHkuaHR0cDt2ZXJzaW9uPSJbOS4wLjAsMTAuMC4wKSIsCisgb3JnLmVjbGlwc2UuamV0dHkuaW87dmVyc2lvbj0iWzkuMC4wLDEwLjAuMCkiLAorIG9yZy5lY2xpcHNlLmpldHR5LnNlY3VyaXR5O3ZlcnNpb249Ils5LjAuMCwxMC4wLjApIiwKKyBvcmcuZWNsaXBzZS5qZXR0eS5zZWN1cml0eS5hdXRoZW50aWNhdGlvbjt2ZXJzaW9uPSJbOS4wLjAsMTAuMC4wKSIsCisgb3JnLmVjbGlwc2UuamV0dHkuc2VydmVyO3ZlcnNpb249Ils5LjAuMCwxMC4wLjApIiwKKyBvcmcuZWNsaXBzZS5qZXR0eS5zZXJ2ZXIuaGFuZGxlcjt2ZXJzaW9uPSJbOS4wLjAsMTAuMC4wKSIsCisgb3JnLmVjbGlwc2UuamV0dHkuc2VydmVyLm5pbzt2ZXJzaW9uPSJbOS4wLjAsMTAuMC4wKSIsCisgb3JnLmVjbGlwc2UuamV0dHkuc2VydmxldDt2ZXJzaW9uPSJbOS4wLjAsMTAuMC4wKSIsCisgb3JnLmVjbGlwc2UuamV0dHkudXRpbDt2ZXJzaW9uPSJbOS4wLjAsMTAuMC4wKSIsCisgb3JnLmVjbGlwc2UuamV0dHkudXRpbC5jb21wb25lbnQ7dmVyc2lvbj0iWzkuMC4wLDEwLjAuMCkiLAorIG9yZy5lY2xpcHNlLmpldHR5LnV0aWwubG9nO3ZlcnNpb249Ils5LjAuMCwxMC4wLjApIiwKKyBvcmcuZWNsaXBzZS5qZXR0eS51dGlsLnNlY3VyaXR5O3ZlcnNpb249Ils5LjAuMCwxMC4wLjApIiwKKyBvcmcuZWNsaXBzZS5qZXR0eS51dGlsLnRocmVhZDt2ZXJzaW9uPSJbOS4wLjAsMTAuMC4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5hcGk7dmVyc2lvbj0iWzQuMy4wLDQuNC4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5hcGkuZXJyb3JzO3ZlcnNpb249Ils0LjMuMCw0LjQuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuYXJjaGl2ZTt2ZXJzaW9uPSJbNC4zLjAsNC40LjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmF3dHVpO3ZlcnNpb249Ils0LjMuMCw0LjQuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuYmxhbWU7dmVyc2lvbj0iWzQuMy4wLDQuNC4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5kaWZmO3ZlcnNpb249Ils0LjMuMCw0LjQuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuZGlyY2FjaGU7dmVyc2lvbj0iWzQuMy4wLDQuNC4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5lcnJvcnM7dmVyc2lvbj0iWzQuMy4wLDQuNC4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5naXRyZXBvO3ZlcnNpb249Ils0LjMuMCw0LjQuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwua2V0Y2g7dmVyc2lvbj0iWzQuMy4wLDQuNC4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLmZpbGU7dmVyc2lvbj0iWzQuMy4wLDQuNC4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLnBhY2s7dmVyc2lvbj0iWzQuMy4wLDQuNC4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLnJlZnRyZWU7dmVyc2lvbj0iWzQuMy4wLDQuNC4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5sZnMubGliO3ZlcnNpb249Ils0LjMuMCw0LjQuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlcjt2ZXJzaW9uPSJbNC4zLjAsNC40LjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIuZnM7dmVyc2lvbj0iWzQuMy4wLDQuNC4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5saWI7dmVyc2lvbj0iWzQuMy4wLDQuNC4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5tZXJnZTt2ZXJzaW9uPSJbNC4zLjAsNC40LjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lm5sczt2ZXJzaW9uPSJbNC4zLjAsNC40LjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lm5vdGVzO3ZlcnNpb249Ils0LjMuMCw0LjQuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQucmV2cGxvdDt2ZXJzaW9uPSJbNC4zLjAsNC40LjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGs7dmVyc2lvbj0iWzQuMy4wLDQuNC4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrLmZpbHRlcjt2ZXJzaW9uPSJbNC4zLjAsNC40LjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnN0b3JhZ2UuZmlsZTt2ZXJzaW9uPSJbNC4zLjAsNC40LjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnN0b3JhZ2UucGFjazt2ZXJzaW9uPSJbNC4zLjAsNC40LjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydDt2ZXJzaW9uPSJbNC4zLjAsNC40LjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5odHRwLmFwYWNoZTt2ZXJzaW9uPSJbNC4zLjAsNC40LjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5yZXNvbHZlcjt2ZXJzaW9uPSJbNC4zLjAsNC40LjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrO3ZlcnNpb249Ils0LjMuMCw0LjQuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudHJlZXdhbGsuZmlsdGVyO3ZlcnNpb249Ils0LjMuMCw0LjQuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudXRpbDt2ZXJzaW9uPSJbNC4zLjAsNC40LjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuaW87dmVyc2lvbj0iWzQuMy4wLDQuNC4wKSIsCiAgb3JnLmtvaHN1a2UuYXJnczRqO3ZlcnNpb249IlsyLjAuMTIsMi4xLjApIiwKICBvcmcua29oc3VrZS5hcmdzNGouc3BpO3ZlcnNpb249IlsyLjAuMTUsMi4xLjApIgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmpnaXQuY29uc29sZTt2ZXJzaW9uPSI0LjIuMSI7CitFeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuamdpdC5jb25zb2xlO3ZlcnNpb249IjQuMy4wIjsKICAgdXNlczo9Im9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LAogICAgb3JnLmVjbGlwc2UuamdpdC51dGlsIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnBnbTt2ZXJzaW9uPSI0LjIuMSI7Cisgb3JnLmVjbGlwc2UuamdpdC5wZ207dmVyc2lvbj0iNC4zLjAiOwogICB1c2VzOj0ib3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrLAogICAgb3JnLmVjbGlwc2UuamdpdC50cmVld2Fsay5maWx0ZXIsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LnBnbS5vcHQsCkBAIC01NCwxMSArNzQsMTEgQEAKICAgIG9yZy5lY2xpcHNlLmpnaXQudHJlZXdhbGssCiAgICBqYXZheC5zd2luZywKICAgIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0IiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnBnbS5kZWJ1Zzt2ZXJzaW9uPSI0LjIuMSI7Cisgb3JnLmVjbGlwc2UuamdpdC5wZ20uZGVidWc7dmVyc2lvbj0iNC4zLjAiOwogICB1c2VzOj0ib3JnLmVjbGlwc2UuamdpdC51dGlsLmlvLAogICAgb3JnLmVjbGlwc2UuamdpdC5wZ20iLAotIG9yZy5lY2xpcHNlLmpnaXQucGdtLmludGVybmFsO3ZlcnNpb249IjQuMi4xIjt4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS5qZ2l0LnBnbS50ZXN0LG9yZy5lY2xpcHNlLmpnaXQudGVzdCIsCi0gb3JnLmVjbGlwc2UuamdpdC5wZ20ub3B0O3ZlcnNpb249IjQuMi4xIjsKKyBvcmcuZWNsaXBzZS5qZ2l0LnBnbS5pbnRlcm5hbDt2ZXJzaW9uPSI0LjMuMCI7eC1mcmllbmRzOj0ib3JnLmVjbGlwc2UuamdpdC5wZ20udGVzdCxvcmcuZWNsaXBzZS5qZ2l0LnRlc3QiLAorIG9yZy5lY2xpcHNlLmpnaXQucGdtLm9wdDt2ZXJzaW9uPSI0LjMuMCI7CiAgIHVzZXM6PSJvcmcuZWNsaXBzZS5qZ2l0LmxpYiwKICAgIG9yZy5lY2xpcHNlLmpnaXQucmV2d2FsaywKICAgIG9yZy5rb2hzdWtlLmFyZ3M0ai5zcGksCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBnbS9NRVRBLUlORi9TT1VSQ0UtTUFOSUZFU1QuTUYgYi9vcmcuZWNsaXBzZS5qZ2l0LnBnbS9NRVRBLUlORi9TT1VSQ0UtTUFOSUZFU1QuTUYKaW5kZXggNWRmOGY1My4uNDRjNWE4OCAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wZ20vTUVUQS1JTkYvU09VUkNFLU1BTklGRVNULk1GCisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGdtL01FVEEtSU5GL1NPVVJDRS1NQU5JRkVTVC5NRgpAQCAtMyw1ICszLDUgQEAKIEJ1bmRsZS1OYW1lOiBvcmcuZWNsaXBzZS5qZ2l0LnBnbSAtIFNvdXJjZXMKIEJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpnaXQucGdtLnNvdXJjZQogQnVuZGxlLVZlbmRvcjogRWNsaXBzZS5vcmcgLSBKR2l0Ci1CdW5kbGUtVmVyc2lvbjogNC4yLjEucXVhbGlmaWVyCi1FY2xpcHNlLVNvdXJjZUJ1bmRsZTogb3JnLmVjbGlwc2UuamdpdC5wZ207dmVyc2lvbj0iNC4yLjEucXVhbGlmaWVyIjtyb290cz0iLiIKK0J1bmRsZS1WZXJzaW9uOiA0LjMuMC5xdWFsaWZpZXIKK0VjbGlwc2UtU291cmNlQnVuZGxlOiBvcmcuZWNsaXBzZS5qZ2l0LnBnbTt2ZXJzaW9uPSI0LjMuMC5xdWFsaWZpZXIiO3Jvb3RzPSIuIgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5wZ20vTUVUQS1JTkYvc2VydmljZXMvb3JnLmVjbGlwc2UuamdpdC5wZ20uVGV4dEJ1aWx0aW4gYi9vcmcuZWNsaXBzZS5qZ2l0LnBnbS9NRVRBLUlORi9zZXJ2aWNlcy9vcmcuZWNsaXBzZS5qZ2l0LnBnbS5UZXh0QnVpbHRpbgppbmRleCA2YWEyMDA0Li5jMTU5ZjdkIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnBnbS9NRVRBLUlORi9zZXJ2aWNlcy9vcmcuZWNsaXBzZS5qZ2l0LnBnbS5UZXh0QnVpbHRpbgorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnBnbS9NRVRBLUlORi9zZXJ2aWNlcy9vcmcuZWNsaXBzZS5qZ2l0LnBnbS5UZXh0QnVpbHRpbgpAQCAtMzgsNiArMzgsNyBAQAogb3JnLmVjbGlwc2UuamdpdC5wZ20uVmVyc2lvbgogCiBvcmcuZWNsaXBzZS5qZ2l0LnBnbS5kZWJ1Zy5EaWZmQWxnb3JpdGhtcworb3JnLmVjbGlwc2UuamdpdC5wZ20uZGVidWcuTGZzU3RvcmUKIG9yZy5lY2xpcHNlLmpnaXQucGdtLmRlYnVnLk1ha2VDYWNoZVRyZWUKIG9yZy5lY2xpcHNlLmpnaXQucGdtLmRlYnVnLlJlYWREaXJDYWNoZQogb3JnLmVjbGlwc2UuamdpdC5wZ20uZGVidWcuUmVidWlsZENvbW1pdEdyYXBoCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBnbS9wb20ueG1sIGIvb3JnLmVjbGlwc2UuamdpdC5wZ20vcG9tLnhtbAppbmRleCBiOWFkNzA2Li44ZDBiY2Y5IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnBnbS9wb20ueG1sCisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGdtL3BvbS54bWwKQEAgLTUwLDcgKzUwLDcgQEAKICAgPHBhcmVudD4KICAgICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5qZ2l0PC9ncm91cElkPgogICAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQtcGFyZW50PC9hcnRpZmFjdElkPgotICAgIDx2ZXJzaW9uPjQuMi4xLVNOQVBTSE9UPC92ZXJzaW9uPgorICAgIDx2ZXJzaW9uPjQuMy4wLVNOQVBTSE9UPC92ZXJzaW9uPgogICA8L3BhcmVudD4KIAogICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0LnBnbTwvYXJ0aWZhY3RJZD4KQEAgLTEyMiw2ICsxMjIsMzQgQEAKICAgICAgIDxhcnRpZmFjdElkPmxvZzRqPC9hcnRpZmFjdElkPgogICAgICAgPHZlcnNpb24+JHtsb2c0ai12ZXJzaW9ufTwvdmVyc2lvbj4KICAgICA8L2RlcGVuZGVuY3k+CisKKyAgICA8ZGVwZW5kZW5jeT4KKyAgICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpldHR5PC9ncm91cElkPgorICAgICAgPGFydGlmYWN0SWQ+amV0dHktc2VydmxldDwvYXJ0aWZhY3RJZD4KKyAgICA8L2RlcGVuZGVuY3k+CisKKyAgICA8ZGVwZW5kZW5jeT4KKyAgICAgIDxncm91cElkPmp1bml0PC9ncm91cElkPgorICAgICAgPGFydGlmYWN0SWQ+anVuaXQ8L2FydGlmYWN0SWQ+CisgICAgPC9kZXBlbmRlbmN5PgorCisgICAgPGRlcGVuZGVuY3k+CisgICAgICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5qZ2l0PC9ncm91cElkPgorICAgICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC5qdW5pdC5odHRwPC9hcnRpZmFjdElkPgorICAgICAgPHZlcnNpb24+JHtwcm9qZWN0LnZlcnNpb259PC92ZXJzaW9uPgorICAgIDwvZGVwZW5kZW5jeT4KKworICAgIDxkZXBlbmRlbmN5PgorICAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KKyAgICAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQubGZzPC9hcnRpZmFjdElkPgorICAgICAgPHZlcnNpb24+JHtwcm9qZWN0LnZlcnNpb259PC92ZXJzaW9uPgorICAgIDwvZGVwZW5kZW5jeT4KKworICAgIDxkZXBlbmRlbmN5PgorICAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KKyAgICAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlcjwvYXJ0aWZhY3RJZD4KKyAgICAgIDx2ZXJzaW9uPiR7cHJvamVjdC52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICA8L2RlcGVuZGVuY3k+CiAgIDwvZGVwZW5kZW5jaWVzPgogCiAgIDxidWlsZD4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGdtL3Jlc291cmNlcy9vcmcvZWNsaXBzZS9qZ2l0L3BnbS9pbnRlcm5hbC9DTElUZXh0LnByb3BlcnRpZXMgYi9vcmcuZWNsaXBzZS5qZ2l0LnBnbS9yZXNvdXJjZXMvb3JnL2VjbGlwc2UvamdpdC9wZ20vaW50ZXJuYWwvQ0xJVGV4dC5wcm9wZXJ0aWVzCmluZGV4IGI0YjEyNjEuLjU0NGUyMzQgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQucGdtL3Jlc291cmNlcy9vcmcvZWNsaXBzZS9qZ2l0L3BnbS9pbnRlcm5hbC9DTElUZXh0LnByb3BlcnRpZXMKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5wZ20vcmVzb3VyY2VzL29yZy9lY2xpcHNlL2pnaXQvcGdtL2ludGVybmFsL0NMSVRleHQucHJvcGVydGllcwpAQCAtMTI1LDYgKzEyNSw3IEBACiBtZXRhVmFyX3JldmlzaW9uPVJFVklTSU9OCiBtZXRhVmFyX3NlY29uZHM9U0VDT05EUwogbWV0YVZhcl9zZXJ2aWNlPVNFUlZJQ0UKK21ldGFWYXJfbGZzU3RvcmFnZT1TVE9SQUdFCiBtZXRhVmFyX3RyZWVpc2g9dHJlZS1pc2gKIG1ldGFWYXJfdXJpaXNoPXVyaS1pc2gKIG1ldGFWYXJfdXJsPVVSTApAQCAtMjE4LDYgKzIxOSwxMCBAQAogdXNhZ2VfR2M9Q2xlYW51cCB1bm5lY2Vzc2FyeSBmaWxlcyBhbmQgb3B0aW1pemUgdGhlIGxvY2FsIHJlcG9zaXRvcnkKIHVzYWdlX0dsb2c9VmlldyBjb21taXQgaGlzdG9yeSBhcyBhIGdyYXBoCiB1c2FnZV9JbmRleFBhY2s9QnVpbGQgcGFjayBpbmRleCBmaWxlIGZvciBhbiBleGlzdGluZyBwYWNrZWQgYXJjaGl2ZQordXNhZ2VfTEZTRGlyZWN0b3J5PURpcmVjdG9yeSB0byBzdG9yZSBsYXJnZSBvYmplY3RzCit1c2FnZV9MRlNQb3J0PVNlcnZlciBodHRwIHBvcnQKK3VzYWdlX0xGU1J1blN0b3JlPWZzOiBzdG9yZSBsZnMgb2JqZWN0cyBpbiBmaWxlIHN5c3RlbQordXNhZ2VfTEZTU3RvcmVVcmw9VVJMIG9mIHRoZSBMRlMgc3RvcmUKIHVzYWdlX0xvbmdGb3JtYXQ9QWx3YXlzIG91dHB1dCB0aGUgbG9uZyBmb3JtYXQKIHVzYWdlX0xzUmVtb3RlPUxpc3QgcmVmZXJlbmNlcyBpbiBhIHJlbW90ZSByZXBvc2l0b3J5CiB1c2FnZV9sc1JlbW90ZUhlYWRzPVNob3cgb25seSByZWZzIHN0YXJ0aW5nIHdpdGggcmVmcy9oZWFkcwpAQCAtMzQ3LDYgKzM1Miw3IEBACiB1c2FnZV9yZXNldEhhcmQ9UmVzZXRzIHRoZSBpbmRleCBhbmQgd29ya2luZyB0cmVlCiB1c2FnZV9yZXNldFNvZnQ9UmVzZXRzIHdpdGhvdXQgdG91Y2hpbmcgdGhlIGluZGV4IGZpbGUgbm9yIHRoZSB3b3JraW5nIHRyZWUKIHVzYWdlX3Jlc2V0TWl4ZWQ9UmVzZXRzIHRoZSBpbmRleCBidXQgbm90IHRoZSB3b3JraW5nIHRyZWUKK3VzYWdlX3J1bkxmc1N0b3JlPVJ1biBMRlMgU3RvcmUgaW4gYSBnaXZlbiBkaXJlY3RvcnkKIHVzYWdlX3NldFRoZUdpdFJlcG9zaXRvcnlUb09wZXJhdGVPbj1zZXQgdGhlIGdpdCByZXBvc2l0b3J5IHRvIG9wZXJhdGUgb24KIHVzYWdlX3Nob3c9ZGlzcGxheSBvbmUgY29tbWl0CiB1c2FnZV9zaG93UmVmTmFtZXNNYXRjaGluZ0NvbW1pdHM9U2hvdyByZWYgbmFtZXMgbWF0Y2hpbmcgY29tbWl0cwpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5wZ20vc3JjL29yZy9lY2xpcHNlL2pnaXQvcGdtL0RhZW1vbi5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC5wZ20vc3JjL29yZy9lY2xpcHNlL2pnaXQvcGdtL0RhZW1vbi5qYXZhCmluZGV4IDA0MTgyZDYuLjAzZjNmYWMgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQucGdtL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3BnbS9EYWVtb24uamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnBnbS9zcmMvb3JnL2VjbGlwc2UvamdpdC9wZ20vRGFlbW9uLmphdmEKQEAgLTQ1LDE4ICs0NSwyOSBAQAogCiBpbXBvcnQgamF2YS5pby5GaWxlOwogaW1wb3J0IGphdmEubmV0LkluZXRTb2NrZXRBZGRyZXNzOworaW1wb3J0IGphdmEubmV0LlVSSVN5bnRheEV4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdDsKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwogaW1wb3J0IGphdmEudXRpbC5MaXN0OwogaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9yczsKIAoraW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwua2V0Y2guS2V0Y2hMZWFkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5rZXRjaC5LZXRjaExlYWRlckNhY2hlOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwua2V0Y2guS2V0Y2hQcmVSZWNlaXZlOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwua2V0Y2guS2V0Y2hTeXN0ZW07CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5rZXRjaC5LZXRjaFRleHQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuUmVwb3NpdG9yeTsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnBnbS5pbnRlcm5hbC5DTElUZXh0OwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuc3RvcmFnZS5maWxlLkZpbGVCYXNlZENvbmZpZzsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnN0b3JhZ2UuZmlsZS5XaW5kb3dDYWNoZUNvbmZpZzsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnN0b3JhZ2UucGFjay5QYWNrQ29uZmlnOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LkRhZW1vbkNsaWVudDsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5EYWVtb25TZXJ2aWNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LlJlY2VpdmVQYWNrOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LnJlc29sdmVyLkZpbGVSZXNvbHZlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5yZXNvbHZlci5SZWNlaXZlUGFja0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQucmVzb2x2ZXIuU2VydmljZU5vdEF1dGhvcml6ZWRFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQucmVzb2x2ZXIuU2VydmljZU5vdEVuYWJsZWRFeGNlcHRpb247CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC51dGlsLkZTOwogaW1wb3J0IG9yZy5rb2hzdWtlLmFyZ3M0ai5Bcmd1bWVudDsKIGltcG9ydCBvcmcua29oc3VrZS5hcmdzNGouT3B0aW9uOwpAQCAtOTAsNiArMTAxLDEzIEBAIGNsYXNzIERhZW1vbiBleHRlbmRzIFRleHRCdWlsdGluIHsKIAlAT3B0aW9uKG5hbWUgPSAiLS1leHBvcnQtYWxsIiwgdXNhZ2UgPSAidXNhZ2VfZXhwb3J0V2l0aG91dEdpdERhZW1vbkV4cG9ydE9rIikKIAlib29sZWFuIGV4cG9ydEFsbDsKIAorCUBPcHRpb24obmFtZSA9ICItLWtldGNoIikKKwlLZXRjaFNlcnZlclR5cGUga2V0Y2hTZXJ2ZXJUeXBlOworCisJZW51bSBLZXRjaFNlcnZlclR5cGUgeworCQlMRUFERVI7CisJfQorCiAJQEFyZ3VtZW50KHJlcXVpcmVkID0gdHJ1ZSwgbWV0YVZhciA9ICJtZXRhVmFyX2RpcmVjdG9yeSIsIHVzYWdlID0gInVzYWdlX2RpcmVjdG9yaWVzVG9FeHBvcnQiKQogCWZpbmFsIExpc3Q8RmlsZT4gZGlyZWN0b3J5ID0gbmV3IEFycmF5TGlzdDxGaWxlPigpOwogCkBAIC0xNDYsNyArMTY0LDkgQEAgcHJvdGVjdGVkIHZvaWQgcnVuKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJCQlzZXJ2aWNlKGQsIG4pLnNldE92ZXJyaWRhYmxlKHRydWUpOwogCQlmb3IgKGZpbmFsIFN0cmluZyBuIDogZm9yYmlkT3ZlcnJpZGUpCiAJCQlzZXJ2aWNlKGQsIG4pLnNldE92ZXJyaWRhYmxlKGZhbHNlKTsKLQorCQlpZiAoa2V0Y2hTZXJ2ZXJUeXBlID09IEtldGNoU2VydmVyVHlwZS5MRUFERVIpIHsKKwkJCXN0YXJ0S2V0Y2hMZWFkZXIoZCk7CisJCX0KIAkJZC5zdGFydCgpOwogCQlvdXR3LnByaW50bG4oTWVzc2FnZUZvcm1hdC5mb3JtYXQoQ0xJVGV4dC5nZXQoKS5saXN0ZW5pbmdPbiwgZC5nZXRBZGRyZXNzKCkpKTsKIAl9CkBAIC0xNTksNCArMTc5LDI5IEBAIHByaXZhdGUgc3RhdGljIERhZW1vblNlcnZpY2Ugc2VydmljZSgKIAkJCXRocm93IGRpZShNZXNzYWdlRm9ybWF0LmZvcm1hdChDTElUZXh0LmdldCgpLnNlcnZpY2VOb3RTdXBwb3J0ZWQsIG4pKTsKIAkJcmV0dXJuIHN2YzsKIAl9CisKKwlwcml2YXRlIHZvaWQgc3RhcnRLZXRjaExlYWRlcihvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5EYWVtb24gZGFlbW9uKSB7CisJCUtldGNoU3lzdGVtIHN5c3RlbSA9IG5ldyBLZXRjaFN5c3RlbSgpOworCQlmaW5hbCBLZXRjaExlYWRlckNhY2hlIGxlYWRlcnMgPSBuZXcgS2V0Y2hMZWFkZXJDYWNoZShzeXN0ZW0pOworCQlmaW5hbCBSZWNlaXZlUGFja0ZhY3Rvcnk8RGFlbW9uQ2xpZW50PiBmYWN0b3J5OworCisJCWZhY3RvcnkgPSBkYWVtb24uZ2V0UmVjZWl2ZVBhY2tGYWN0b3J5KCk7CisJCWRhZW1vbi5zZXRSZWNlaXZlUGFja0ZhY3RvcnkobmV3IFJlY2VpdmVQYWNrRmFjdG9yeTxEYWVtb25DbGllbnQ+KCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgUmVjZWl2ZVBhY2sgY3JlYXRlKERhZW1vbkNsaWVudCByZXEsIFJlcG9zaXRvcnkgcmVwbykKKwkJCQkJdGhyb3dzIFNlcnZpY2VOb3RFbmFibGVkRXhjZXB0aW9uLAorCQkJCQlTZXJ2aWNlTm90QXV0aG9yaXplZEV4Y2VwdGlvbiB7CisJCQkJUmVjZWl2ZVBhY2sgcnAgPSBmYWN0b3J5LmNyZWF0ZShyZXEsIHJlcG8pOworCQkJCUtldGNoTGVhZGVyIGxlYWRlcjsKKwkJCQl0cnkgeworCQkJCQlsZWFkZXIgPSBsZWFkZXJzLmdldChyZXBvKTsKKwkJCQl9IGNhdGNoIChVUklTeW50YXhFeGNlcHRpb24gZXJyKSB7CisJCQkJCXRocm93IG5ldyBTZXJ2aWNlTm90RW5hYmxlZEV4Y2VwdGlvbigKKwkJCQkJCQlLZXRjaFRleHQuZ2V0KCkuaW52YWxpZEZvbGxvd2VyVXJpLCBlcnIpOworCQkJCX0KKwkJCQlycC5zZXRQcmVSZWNlaXZlSG9vayhuZXcgS2V0Y2hQcmVSZWNlaXZlKGxlYWRlcikpOworCQkJCXJldHVybiBycDsKKwkJCX0KKwkJfSk7CisJfQogfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGdtL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3BnbS9kZWJ1Zy9MZnNTdG9yZS5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC5wZ20vc3JjL29yZy9lY2xpcHNlL2pnaXQvcGdtL2RlYnVnL0xmc1N0b3JlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTgzOThmNgotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGdtL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3BnbS9kZWJ1Zy9MZnNTdG9yZS5qYXZhCkBAIC0wLDAgKzEsMjQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1LCBTYXNhIFppdmtvdiA8c2FzYS56aXZrb3ZAc2FwLmNvbT4KKyAqIGFuZCBvdGhlciBjb3B5cmlnaHQgb3duZXJzIGFzIGRvY3VtZW50ZWQgaW4gdGhlIHByb2plY3QncyBJUCBsb2cuCisgKgorICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2MS4wIHdoaWNoCisgKiBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgaXMgcmVwcm9kdWNlZCBiZWxvdywgYW5kIGlzCisgKiBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VkbC12MTAucGhwCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgSW5jLiBub3IgdGhlCisgKiAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCisgKiAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3IKKyAqICAgd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORAorICogQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKyAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGCisgKiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitwYWNrYWdlIG9yZy5lY2xpcHNlLmpnaXQucGdtLmRlYnVnOworCitpbXBvcnQgamF2YS5uZXQuSW5ldEFkZHJlc3M7CitpbXBvcnQgamF2YS5uZXQuVVJJOworaW1wb3J0IGphdmEubmV0LlVSSVN5bnRheEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLm5ldC5Vbmtub3duSG9zdEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLm5pby5maWxlLlBhdGg7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5QYXRoczsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpldHR5LnNlcnZlci5Db25uZWN0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuamV0dHkuc2VydmVyLkh0dHBDb25maWd1cmF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpldHR5LnNlcnZlci5IdHRwQ29ubmVjdGlvbkZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuamV0dHkuc2VydmVyLlNlcnZlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZXR0eS5zZXJ2ZXIuU2VydmVyQ29ubmVjdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmpldHR5LnNlcnZlci5oYW5kbGVyLkNvbnRleHRIYW5kbGVyQ29sbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZXR0eS5zZXJ2bGV0LlNlcnZsZXRDb250ZXh0SGFuZGxlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZXR0eS5zZXJ2bGV0LlNlcnZsZXRIb2xkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLkxhcmdlRmlsZVJlcG9zaXRvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLkxmc1Byb3RvY29sU2VydmxldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIuZnMuRmlsZUxmc1NlcnZsZXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLmZzLkZpbGVMZnNSZXBvc2l0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQucGdtLkNvbW1hbmQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5wZ20uVGV4dEJ1aWx0aW47CitpbXBvcnQgb3JnLmtvaHN1a2UuYXJnczRqLkFyZ3VtZW50OworaW1wb3J0IG9yZy5rb2hzdWtlLmFyZ3M0ai5PcHRpb247CisKK0BDb21tYW5kKGNvbW1vbiA9IHRydWUsIHVzYWdlID0gInVzYWdlX3J1bkxmc1N0b3JlIikKK2NsYXNzIExmc1N0b3JlIGV4dGVuZHMgVGV4dEJ1aWx0aW4geworCisJLyoqCisJICogVGlueSB3ZWIgYXBwbGljYXRpb24gc2VydmVyIGZvciB0ZXN0aW5nCisJICovCisJY2xhc3MgQXBwU2VydmVyIHsKKworCQlwcml2YXRlIGZpbmFsIFNlcnZlciBzZXJ2ZXI7CisKKwkJcHJpdmF0ZSBmaW5hbCBTZXJ2ZXJDb25uZWN0b3IgY29ubmVjdG9yOworCisJCXByaXZhdGUgZmluYWwgQ29udGV4dEhhbmRsZXJDb2xsZWN0aW9uIGNvbnRleHRzOworCisJCXByaXZhdGUgVVJJIHVyaTsKKworCQlBcHBTZXJ2ZXIoaW50IHBvcnQpIHsKKwkJCXNlcnZlciA9IG5ldyBTZXJ2ZXIoKTsKKworCQkJSHR0cENvbmZpZ3VyYXRpb24gaHR0cF9jb25maWcgPSBuZXcgSHR0cENvbmZpZ3VyYXRpb24oKTsKKwkJCWh0dHBfY29uZmlnLnNldE91dHB1dEJ1ZmZlclNpemUoMzI3NjgpOworCisJCQljb25uZWN0b3IgPSBuZXcgU2VydmVyQ29ubmVjdG9yKHNlcnZlciwKKwkJCQkJbmV3IEh0dHBDb25uZWN0aW9uRmFjdG9yeShodHRwX2NvbmZpZykpOworCQkJY29ubmVjdG9yLnNldFBvcnQocG9ydCk7CisJCQl0cnkgeworCQkJCVN0cmluZyBob3N0ID0gSW5ldEFkZHJlc3MuZ2V0QnlOYW1lKCJsb2NhbGhvc3QiKSAvLyROT04tTkxTLTEkCisJCQkJCQkuZ2V0SG9zdEFkZHJlc3MoKTsKKwkJCQljb25uZWN0b3Iuc2V0SG9zdChob3N0KTsKKwkJCQlpZiAoaG9zdC5jb250YWlucygiOiIpICYmICFob3N0LnN0YXJ0c1dpdGgoIlsiKSkgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJCWhvc3QgPSAiWyIgKyBob3N0ICsgIl0iOyAvLyROT04tTkxTLTEkLy8kTk9OLU5MUy0yJAorCQkJCXVyaSA9IG5ldyBVUkkoImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCX0gY2F0Y2ggKFVua25vd25Ib3N0RXhjZXB0aW9uIGUpIHsKKwkJCQl0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiQ2Fubm90IGZpbmQgbG9jYWxob3N0IiwgZSk7IC8vJE5PTi1OTFMtMSQKKwkJCX0gY2F0Y2ggKFVSSVN5bnRheEV4Y2VwdGlvbiBlKSB7CisJCQkJdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlVuZXhwZWN0ZWQgVVJJIGVycm9yIG9uICIgKyB1cmksIGUpOyAvLyROT04tTkxTLTEkCisJCQl9CisKKwkJCWNvbnRleHRzID0gbmV3IENvbnRleHRIYW5kbGVyQ29sbGVjdGlvbigpOworCQkJc2VydmVyLnNldEhhbmRsZXIoY29udGV4dHMpOworCQkJc2VydmVyLnNldENvbm5lY3RvcnMobmV3IENvbm5lY3RvcltdIHsgY29ubmVjdG9yIH0pOworCQl9CisKKwkJLyoqCisJCSAqIENyZWF0ZSBhIG5ldyBzZXJ2bGV0IGNvbnRleHQgd2l0aGluIHRoZSBzZXJ2ZXIuCisJCSAqIDxwPgorCQkgKiBUaGlzIG1ldGhvZCBzaG91bGQgYmUgaW52b2tlZCBiZWZvcmUgdGhlIHNlcnZlciBpcyBzdGFydGVkLCBvbmNlIGZvcgorCQkgKiBlYWNoIGNvbnRleHQgdGhlIGNhbGxlciB3YW50cyB0byByZWdpc3Rlci4KKwkJICoKKwkJICogQHBhcmFtIHBhdGgKKwkJICogICAgICAgICAgICBwYXRoIG9mIHRoZSBjb250ZXh0OyB1c2UgIi8iIGZvciB0aGUgcm9vdCBjb250ZXh0IGlmCisJCSAqICAgICAgICAgICAgYmluZGluZyB0byB0aGUgcm9vdCBpcyBkZXNpcmVkLgorCQkgKiBAcmV0dXJuIHRoZSBjb250ZXh0IHRvIGFkZCBzZXJ2bGV0cyBpbnRvLgorCQkgKi8KKwkJU2VydmxldENvbnRleHRIYW5kbGVyIGFkZENvbnRleHQoU3RyaW5nIHBhdGgpIHsKKwkJCWFzc2VydE5vdFJ1bm5pbmcoKTsKKwkJCWlmICgiIi5lcXVhbHMocGF0aCkpIC8vJE5PTi1OTFMtMSQKKwkJCQlwYXRoID0gIi8iOyAvLyROT04tTkxTLTEkCisKKwkJCVNlcnZsZXRDb250ZXh0SGFuZGxlciBjdHggPSBuZXcgU2VydmxldENvbnRleHRIYW5kbGVyKCk7CisJCQljdHguc2V0Q29udGV4dFBhdGgocGF0aCk7CisJCQljb250ZXh0cy5hZGRIYW5kbGVyKGN0eCk7CisKKwkJCXJldHVybiBjdHg7CisJCX0KKworCQl2b2lkIHN0YXJ0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCQlzZXJ2ZXIuc3RhcnQoKTsKKwkJfQorCisJCXZvaWQgc3RvcCgpIHRocm93cyBFeGNlcHRpb24geworCQkJc2VydmVyLnN0b3AoKTsKKwkJfQorCisJCVVSSSBnZXRVUkkoKSB7CisJCQlyZXR1cm4gdXJpOworCQl9CisKKwkJcHJpdmF0ZSB2b2lkIGFzc2VydE5vdFJ1bm5pbmcoKSB7CisJCQlpZiAoc2VydmVyLmlzUnVubmluZygpKSB7CisJCQkJdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigic2VydmVyIGlzIHJ1bm5pbmciKTsgLy8kTk9OLU5MUy0xJAorCQkJfQorCQl9CisJfQorCisJcHJpdmF0ZSBzdGF0aWMgZW51bSBTdG9yZVR5cGUgeworCQlGUzsKKwl9CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgT0JKRUNUUyA9ICJvYmplY3RzLyI7IC8vJE5PTi1OTFMtMSQKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTVE9SRV9QQVRIID0gIi8iICsgT0JKRUNUUyArICIqIjsgLy8kTk9OLU5MUy0xJC8vJE5PTi1OTFMtMiQKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9UT0NPTF9QQVRIID0gIi9sZnMvb2JqZWN0cy9iYXRjaCI7IC8vJE5PTi1OTFMtMSQKKworCUBPcHRpb24obmFtZSA9ICItLXBvcnQiLCBhbGlhc2VzID0geyItcCIgfSwgbWV0YVZhciA9ICJtZXRhVmFyX3BvcnQiLAorCQkJdXNhZ2UgPSAidXNhZ2VfTEZTUG9ydCIpCisJaW50IHBvcnQ7CisKKwlAT3B0aW9uKG5hbWUgPSAiLS1zdG9yZSIsIG1ldGFWYXIgPSAibWV0YVZhcl9sZnNTdG9yYWdlIiwgdXNhZ2UgPSAidXNhZ2VfTEZTUnVuU3RvcmUiKQorCVN0b3JlVHlwZSBzdG9yZVR5cGU7CisKKwlAT3B0aW9uKG5hbWUgPSAiLS1zdG9yZS11cmwiLCBhbGlhc2VzID0geyItdSIgfSwgbWV0YVZhciA9ICJtZXRhVmFyX3VybCIsCisJCQl1c2FnZSA9ICJ1c2FnZV9MRlNTdG9yZVVybCIpCisJU3RyaW5nIHN0b3JlVXJsOworCisJQEFyZ3VtZW50KHJlcXVpcmVkID0gZmFsc2UsIG1ldGFWYXIgPSAibWV0YVZhcl9kaXJlY3RvcnkiLCB1c2FnZSA9ICJ1c2FnZV9MRlNEaXJlY3RvcnkiKQorCVN0cmluZyBkaXJlY3Rvcnk7CisKKwlTdHJpbmcgcHJvdG9jb2xVcmw7CisKKwlTdHJpbmcgYWNjZXNzS2V5OworCisJU3RyaW5nIHNlY3JldEtleTsKKworCUBPdmVycmlkZQorCXByb3RlY3RlZCBib29sZWFuIHJlcXVpcmVzUmVwb3NpdG9yeSgpIHsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCXByb3RlY3RlZCB2b2lkIHJ1bigpIHRocm93cyBFeGNlcHRpb24geworCQlBcHBTZXJ2ZXIgc2VydmVyID0gbmV3IEFwcFNlcnZlcihwb3J0KTsKKwkJVVJJIGJhc2VVUkkgPSBzZXJ2ZXIuZ2V0VVJJKCk7CisJCVNlcnZsZXRDb250ZXh0SGFuZGxlciBhcHAgPSBzZXJ2ZXIuYWRkQ29udGV4dCgiLyIpOyAvLyROT04tTkxTLTEkCisKKwkJZmluYWwgTGFyZ2VGaWxlUmVwb3NpdG9yeSByZXBvc2l0b3J5OworCQlzd2l0Y2ggKHN0b3JlVHlwZSkgeworCQljYXNlIEZTOgorCQkJUGF0aCBkaXIgPSBQYXRocy5nZXQoZGlyZWN0b3J5KTsKKwkJCUZpbGVMZnNSZXBvc2l0b3J5IGZzUmVwbyA9IG5ldyBGaWxlTGZzUmVwb3NpdG9yeSgKKwkJCQkJZ2V0U3RvcmVVcmwoYmFzZVVSSSksIGRpcik7CisJCQlGaWxlTGZzU2VydmxldCBjb250ZW50ID0gbmV3IEZpbGVMZnNTZXJ2bGV0KGZzUmVwbywgMzAwMDApOworCQkJYXBwLmFkZFNlcnZsZXQobmV3IFNlcnZsZXRIb2xkZXIoY29udGVudCksIFNUT1JFX1BBVEgpOworCQkJcmVwb3NpdG9yeSA9IGZzUmVwbzsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAorCQkJCQkiVW5rbm93biBzdG9yZSB0eXBlOiAiICsgc3RvcmVUeXBlKTsgLy8kTk9OLU5MUy0xJAorCQl9CisKKwkJTGZzUHJvdG9jb2xTZXJ2bGV0IHByb3RvY29sID0gbmV3IExmc1Byb3RvY29sU2VydmxldCgpIHsKKworCQkJcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7CisKKwkJCUBPdmVycmlkZQorCQkJcHJvdGVjdGVkIExhcmdlRmlsZVJlcG9zaXRvcnkgZ2V0TGFyZ2VGaWxlUmVwb3NpdG9yeSgpIHsKKwkJCQlyZXR1cm4gcmVwb3NpdG9yeTsKKwkJCX0KKworCQl9OworCQlhcHAuYWRkU2VydmxldChuZXcgU2VydmxldEhvbGRlcihwcm90b2NvbCksIFBST1RPQ09MX1BBVEgpOworCisJCXNlcnZlci5zdGFydCgpOworCisJCW91dHcucHJpbnRsbigiTEZTIHByb3RvY29sIFVSTDogIiArIGdldFByb3RvY29sVXJsKGJhc2VVUkkpKTsgLy8kTk9OLU5MUy0xJAorCQlpZiAoc3RvcmVUeXBlID09IFN0b3JlVHlwZS5GUykgeworCQkJb3V0dy5wcmludGxuKCJMRlMgb2JqZWN0cyBsb2NhdGVkIGluOiAiICsgZGlyZWN0b3J5KTsgLy8kTk9OLU5MUy0xJAorCQkJb3V0dy5wcmludGxuKCJMRlMgc3RvcmUgVVJMOiAiICsgZ2V0U3RvcmVVcmwoYmFzZVVSSSkpOyAvLyROT04tTkxTLTEkCisJCX0KKwl9CisKKwlwcml2YXRlIFN0cmluZyBnZXRTdG9yZVVybChVUkkgYmFzZVVSSSkgeworCQlpZiAoc3RvcmVVcmwgPT0gbnVsbCkgeworCQkJaWYgKHN0b3JlVHlwZSA9PSBTdG9yZVR5cGUuRlMpIHsKKwkJCQlzdG9yZVVybCA9IGJhc2VVUkkgKyAiLyIgKyBPQkpFQ1RTOyAvLyROT04tTkxTLTEkCisJCQl9IGVsc2UgeworCQkJCWRpZSgiTG9jYWwgc3RvcmUgbm90IHJ1bm5pbmcgYW5kIG5vIC0tc3RvcmUtdXJsIHNwZWNpZmllZCIpOyAvLyROT04tTkxTLTEkCisJCQl9CisJCX0KKwkJcmV0dXJuIHN0b3JlVXJsOworCX0KKworCXByaXZhdGUgU3RyaW5nIGdldFByb3RvY29sVXJsKFVSSSBiYXNlVVJJKSB7CisJCWlmIChwcm90b2NvbFVybCA9PSBudWxsKSB7CisJCQlwcm90b2NvbFVybCA9IGJhc2VVUkkgKyBQUk9UT0NPTF9QQVRIOworCQl9CisJCXJldHVybiBwcm90b2NvbFVybDsKKwl9Cit9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBnbS9zcmMvb3JnL2VjbGlwc2UvamdpdC9wZ20vZGVidWcvUmVidWlsZFJlZlRyZWUuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQucGdtL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3BnbS9kZWJ1Zy9SZWJ1aWxkUmVmVHJlZS5qYXZhCmluZGV4IDc4Y2ExYTcuLmZiZDQ2NzIgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQucGdtL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3BnbS9kZWJ1Zy9SZWJ1aWxkUmVmVHJlZS5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGdtL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3BnbS9kZWJ1Zy9SZWJ1aWxkUmVmVHJlZS5qYXZhCkBAIC00Myw5ICs0MywxMSBAQAogCiBwYWNrYWdlIG9yZy5lY2xpcHNlLmpnaXQucGdtLmRlYnVnOwogCitpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQubGliLkNvbnN0YW50cy5IRUFEOworCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwogaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7CiAKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UucmVmdHJlZS5SZWZUcmVlOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5yZWZ0cmVlLlJlZlRyZWVEYXRhYmFzZTsKQEAgLTU3LDEyICs1OSwxNyBAQAogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLlJlZjsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5SZWZEYXRhYmFzZTsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5SZWZVcGRhdGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuU3RvcmVkQ29uZmlnOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQucGdtLkNvbW1hbmQ7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5wZ20uVGV4dEJ1aWx0aW47CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrLlJldldhbGs7CitpbXBvcnQgb3JnLmtvaHN1a2UuYXJnczRqLk9wdGlvbjsKIAogQENvbW1hbmQodXNhZ2UgPSAidXNhZ2VfUmVidWlsZFJlZlRyZWUiKQogY2xhc3MgUmVidWlsZFJlZlRyZWUgZXh0ZW5kcyBUZXh0QnVpbHRpbiB7CisJQE9wdGlvbihuYW1lID0gIi0tZW5hYmxlIiwgdXNhZ2UgPSAic2V0IGV4dGVuc2lvbnMucmVmc1N0b3JhZ2UgPSByZWZ0cmVlIikKKwlib29sZWFuIGVuYWJsZTsKKwogCXByaXZhdGUgU3RyaW5nIHR4bk5hbWVzcGFjZTsKIAlwcml2YXRlIFN0cmluZyB0eG5Db21taXR0ZWQ7CiAKQEAgLTEwMyw3ICsxMTAsNyBAQCBwcm90ZWN0ZWQgdm9pZCBydW4oKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJCQlvbGRUcmVlSWQgPSBPYmplY3RJZC56ZXJvSWQoKTsKIAkJCX0KIAotCQkJUmVmVHJlZSB0cmVlID0gcmVidWlsZChyZWZEYi5nZXRSZWZzKFJlZkRhdGFiYXNlLkFMTCkpOworCQkJUmVmVHJlZSB0cmVlID0gcmVidWlsZChyZWZEYik7CiAJCQliLnNldFRyZWVJZCh0cmVlLndyaXRlVHJlZShpbnNlcnRlcikpOwogCQkJYi5zZXRBdXRob3IobmV3IFBlcnNvbklkZW50KGRiKSk7CiAJCQliLnNldENvbW1pdHRlcihiLmdldEF1dGhvcigpKTsKQEAgLTEyMiwxNSArMTI5LDMxIEBAIHByb3RlY3RlZCB2b2lkIHJ1bigpIHRocm93cyBFeGNlcHRpb24gewogCQkJZGVmYXVsdDoKIAkJCQl0aHJvdyBkaWUoU3RyaW5nLmZvcm1hdCgiJXM6ICVzIiwgdXBkYXRlLmdldE5hbWUoKSwgcmVzdWx0KSk7IC8vJE5PTi1OTFMtMSQKIAkJCX0KKworCQkJaWYgKGVuYWJsZSAmJiAhKGRiLmdldFJlZkRhdGFiYXNlKCkgaW5zdGFuY2VvZiBSZWZUcmVlRGF0YWJhc2UpKSB7CisJCQkJU3RvcmVkQ29uZmlnIGNmZyA9IGRiLmdldENvbmZpZygpOworCQkJCWNmZy5zZXRJbnQoImNvcmUiLCBudWxsLCAicmVwb3NpdG9yeWZvcm1hdHZlcnNpb24iLCAxKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJY2ZnLnNldFN0cmluZygiZXh0ZW5zaW9ucyIsIG51bGwsICJyZWZzU3RvcmFnZSIsICJyZWZ0cmVlIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCisJCQkJY2ZnLnNhdmUoKTsKKwkJCQllcnJ3LnByaW50bG4oIkVuYWJsZWQgcmVmdHJlZS4iKTsgLy8kTk9OLU5MUy0xJAorCQkJCWVycncuZmx1c2goKTsKKwkJCX0KIAkJfQogCX0KIAotCXByaXZhdGUgUmVmVHJlZSByZWJ1aWxkKE1hcDxTdHJpbmcsIFJlZj4gcmVmTWFwKSB7CisJcHJpdmF0ZSBSZWZUcmVlIHJlYnVpbGQoUmVmRGF0YWJhc2UgcmVmZGIpIHRocm93cyBJT0V4Y2VwdGlvbiB7CiAJCVJlZlRyZWUgdHJlZSA9IFJlZlRyZWUubmV3RW1wdHlUcmVlKCk7CiAJCUxpc3Q8b3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLnJlZnRyZWUuQ29tbWFuZD4gY21kcwogCQkJPSBuZXcgQXJyYXlMaXN0PD4oKTsKIAotCQlmb3IgKFJlZiByIDogcmVmTWFwLnZhbHVlcygpKSB7CisJCVJlZiBoZWFkID0gcmVmZGIuZXhhY3RSZWYoSEVBRCk7CisJCWlmIChoZWFkICE9IG51bGwpIHsKKwkJCWNtZHMuYWRkKG5ldyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UucmVmdHJlZS5Db21tYW5kKAorCQkJCQludWxsLAorCQkJCQloZWFkKSk7CisJCX0KKworCQlmb3IgKFJlZiByIDogcmVmZGIuZ2V0UmVmcyhSZWZEYXRhYmFzZS5BTEwpLnZhbHVlcygpKSB7CiAJCQlpZiAoci5nZXROYW1lKCkuZXF1YWxzKHR4bkNvbW1pdHRlZCkKIAkJCQkJfHwgci5nZXROYW1lKCkuc3RhcnRzV2l0aCh0eG5OYW1lc3BhY2UpKSB7CiAJCQkJY29udGludWU7CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvTUVUQS1JTkYvTUFOSUZFU1QuTUYKaW5kZXggYWJiODZlOC4uZGZlOWE2MyAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L01FVEEtSU5GL01BTklGRVNULk1GCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMiw1MiArMiw1MiBAQAogQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgogQnVuZGxlLU5hbWU6ICVwbHVnaW5fbmFtZQogQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuamdpdC50ZXN0Ci1CdW5kbGUtVmVyc2lvbjogNC4yLjEucXVhbGlmaWVyCitCdW5kbGUtVmVyc2lvbjogNC4zLjAucXVhbGlmaWVyCiBCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KIEJ1bmRsZS1WZW5kb3I6ICVwcm92aWRlcl9uYW1lCiBCdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQogQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEphdmFTRS0xLjcKIEltcG9ydC1QYWNrYWdlOiBjb20uZ29vZ2xlY29kZS5qYXZhZXdhaDt2ZXJzaW9uPSJbMC43LjksMC44LjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmFwaTt2ZXJzaW9uPSJbNC4yLjEsNC4zLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmFwaS5lcnJvcnM7dmVyc2lvbj0iWzQuMi4xLDQuMy4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5hdHRyaWJ1dGVzO3ZlcnNpb249Ils0LjIuMSw0LjMuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuYXd0dWk7dmVyc2lvbj0iWzQuMi4xLDQuMy4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5ibGFtZTt2ZXJzaW9uPSJbNC4yLjEsNC4zLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmRpZmY7dmVyc2lvbj0iWzQuMi4xLDQuMy4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5kaXJjYWNoZTt2ZXJzaW9uPSJbNC4yLjEsNC4zLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmVycm9yczt2ZXJzaW9uPSJbNC4yLjEsNC4zLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmV2ZW50czt2ZXJzaW9uPSJbNC4yLjEsNC4zLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmZubWF0Y2g7dmVyc2lvbj0iWzQuMi4xLDQuMy4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5naXRyZXBvO3ZlcnNpb249Ils0LjIuMSw0LjMuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuaG9va3M7dmVyc2lvbj0iWzQuMi4xLDQuMy4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5pZ25vcmU7dmVyc2lvbj0iWzQuMi4xLDQuMy4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5pZ25vcmUuaW50ZXJuYWw7dmVyc2lvbj0iWzQuMi4xLDQuMy4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbDt2ZXJzaW9uPSJbNC4yLjEsNC4zLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UuZGZzO3ZlcnNpb249Ils0LjIuMSw0LjMuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5maWxlO3ZlcnNpb249Ils0LjIuMSw0LjMuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5wYWNrO3ZlcnNpb249Ils0LjIuMSw0LjMuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5yZWZ0cmVlO3ZlcnNpb249Ils0LjIuMSw0LjMuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuanVuaXQ7dmVyc2lvbj0iWzQuMi4xLDQuMy4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5saWI7dmVyc2lvbj0iWzQuMi4xLDQuMy4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5tZXJnZTt2ZXJzaW9uPSJbNC4yLjEsNC4zLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lm5sczt2ZXJzaW9uPSJbNC4yLjEsNC4zLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lm5vdGVzO3ZlcnNpb249Ils0LjIuMSw0LjMuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQucGF0Y2g7dmVyc2lvbj0iWzQuMi4xLDQuMy4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5wZ207dmVyc2lvbj0iWzQuMi4xLDQuMy4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5wZ20uaW50ZXJuYWw7dmVyc2lvbj0iWzQuMi4xLDQuMy4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5yZXZwbG90O3ZlcnNpb249Ils0LjIuMSw0LjMuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQucmV2d2Fsazt2ZXJzaW9uPSJbNC4yLjEsNC4zLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGsuZmlsdGVyO3ZlcnNpb249Ils0LjIuMSw0LjMuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuc3RvcmFnZS5maWxlO3ZlcnNpb249Ils0LjIuMSw0LjMuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuc3RvcmFnZS5wYWNrO3ZlcnNpb249Ils0LjIuMSw0LjMuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuc3VibW9kdWxlO3ZlcnNpb249Ils0LjIuMSw0LjMuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0O3ZlcnNpb249Ils0LjIuMSw0LjMuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0Lmh0dHA7dmVyc2lvbj0iWzQuMi4xLDQuMy4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQucmVzb2x2ZXI7dmVyc2lvbj0iWzQuMi4xLDQuMy4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC50cmVld2Fsazt2ZXJzaW9uPSJbNC4yLjEsNC4zLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrLmZpbHRlcjt2ZXJzaW9uPSJbNC4yLjEsNC4zLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnV0aWw7dmVyc2lvbj0iWzQuMi4xLDQuMy4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC51dGlsLmlvO3ZlcnNpb249Ils0LjIuMSw0LjMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuYXBpO3ZlcnNpb249Ils0LjMuMCw0LjQuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuYXBpLmVycm9yczt2ZXJzaW9uPSJbNC4zLjAsNC40LjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmF0dHJpYnV0ZXM7dmVyc2lvbj0iWzQuMy4wLDQuNC4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5hd3R1aTt2ZXJzaW9uPSJbNC4zLjAsNC40LjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmJsYW1lO3ZlcnNpb249Ils0LjMuMCw0LjQuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuZGlmZjt2ZXJzaW9uPSJbNC4zLjAsNC40LjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmRpcmNhY2hlO3ZlcnNpb249Ils0LjMuMCw0LjQuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuZXJyb3JzO3ZlcnNpb249Ils0LjMuMCw0LjQuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuZXZlbnRzO3ZlcnNpb249Ils0LjMuMCw0LjQuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuZm5tYXRjaDt2ZXJzaW9uPSJbNC4zLjAsNC40LjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmdpdHJlcG87dmVyc2lvbj0iWzQuMy4wLDQuNC4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5ob29rczt2ZXJzaW9uPSJbNC4zLjAsNC40LjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lmlnbm9yZTt2ZXJzaW9uPSJbNC4zLjAsNC40LjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lmlnbm9yZS5pbnRlcm5hbDt2ZXJzaW9uPSJbNC4zLjAsNC40LjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsO3ZlcnNpb249Ils0LjMuMCw0LjQuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5kZnM7dmVyc2lvbj0iWzQuMy4wLDQuNC4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLmZpbGU7dmVyc2lvbj0iWzQuMy4wLDQuNC4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLnBhY2s7dmVyc2lvbj0iWzQuMy4wLDQuNC4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLnJlZnRyZWU7dmVyc2lvbj0iWzQuMy4wLDQuNC4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5qdW5pdDt2ZXJzaW9uPSJbNC4zLjAsNC40LjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmxpYjt2ZXJzaW9uPSJbNC4zLjAsNC40LjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lm1lcmdlO3ZlcnNpb249Ils0LjMuMCw0LjQuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQubmxzO3ZlcnNpb249Ils0LjMuMCw0LjQuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQubm90ZXM7dmVyc2lvbj0iWzQuMy4wLDQuNC4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5wYXRjaDt2ZXJzaW9uPSJbNC4zLjAsNC40LjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnBnbTt2ZXJzaW9uPSJbNC4zLjAsNC40LjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnBnbS5pbnRlcm5hbDt2ZXJzaW9uPSJbNC4zLjAsNC40LjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnJldnBsb3Q7dmVyc2lvbj0iWzQuMy4wLDQuNC4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrO3ZlcnNpb249Ils0LjMuMCw0LjQuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQucmV2d2Fsay5maWx0ZXI7dmVyc2lvbj0iWzQuMy4wLDQuNC4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5zdG9yYWdlLmZpbGU7dmVyc2lvbj0iWzQuMy4wLDQuNC4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5zdG9yYWdlLnBhY2s7dmVyc2lvbj0iWzQuMy4wLDQuNC4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5zdWJtb2R1bGU7dmVyc2lvbj0iWzQuMy4wLDQuNC4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQ7dmVyc2lvbj0iWzQuMy4wLDQuNC4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuaHR0cDt2ZXJzaW9uPSJbNC4zLjAsNC40LjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5yZXNvbHZlcjt2ZXJzaW9uPSJbNC4zLjAsNC40LjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrO3ZlcnNpb249Ils0LjMuMCw0LjQuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudHJlZXdhbGsuZmlsdGVyO3ZlcnNpb249Ils0LjMuMCw0LjQuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudXRpbDt2ZXJzaW9uPSJbNC4zLjAsNC40LjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuaW87dmVyc2lvbj0iWzQuMy4wLDQuNC4wKSIsCiAgb3JnLmhhbWNyZXN0O3ZlcnNpb249IlsxLjEuMCwyLjAuMCkiLAogIG9yZy5qdW5pdDt2ZXJzaW9uPSJbNC40LjAsNS4wLjApIiwKICBvcmcuanVuaXQuZXhwZXJpbWVudGFsLnRoZW9yaWVzO3ZlcnNpb249Ils0LjQuMCw1LjAuMCkiLApkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3BvbS54bWwgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvcG9tLnhtbAppbmRleCAwOTg1YzNkLi4wYmMyMmFjIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvcG9tLnhtbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvcG9tLnhtbApAQCAtNTIsNyArNTIsNyBAQAogICA8cGFyZW50PgogICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC1wYXJlbnQ8L2FydGlmYWN0SWQ+Ci0gICAgPHZlcnNpb24+NC4yLjEtU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgPHZlcnNpb24+NC4zLjAtU05BUFNIT1Q8L3ZlcnNpb24+CiAgIDwvcGFyZW50PgogCiAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQudGVzdDwvYXJ0aWZhY3RJZD4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hdHRyaWJ1dGVzL0F0dHJpYnV0ZXNIYW5kbGVyVGVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2F0dHJpYnV0ZXMvQXR0cmlidXRlc0hhbmRsZXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2E0NTZiMwotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hdHRyaWJ1dGVzL0F0dHJpYnV0ZXNIYW5kbGVyVGVzdC5qYXZhCkBAIC0wLDAgKzEsMzM5IEBACisvKgorICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2MS4wIHdoaWNoCisgKiBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgaXMgcmVwcm9kdWNlZCBiZWxvdywgYW5kIGlzCisgKiBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VkbC12MTAucGhwCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgSW5jLiBub3IgdGhlCisgKiAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCisgKiAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3IKKyAqICAgd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORAorICogQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKyAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGCisgKiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5qZ2l0LmF0dHJpYnV0ZXM7CisKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RmFsc2U7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VHJ1ZTsKKworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworCitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5SZXBvc2l0b3J5VGVzdENhc2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuQ29uZmlnQ29uc3RhbnRzOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLkNvbnN0YW50czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5GaWxlTW9kZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnN0b3JhZ2UuZmlsZS5GaWxlQmFzZWRDb25maWc7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC50cmVld2Fsay5GaWxlVHJlZUl0ZXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudHJlZXdhbGsuVHJlZVdhbGs7CitpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CisKKy8qKgorICogVGVzdHMge0BsaW5rIEF0dHJpYnV0ZXNIYW5kbGVyfQorICovCitwdWJsaWMgY2xhc3MgQXR0cmlidXRlc0hhbmRsZXJUZXN0IGV4dGVuZHMgUmVwb3NpdG9yeVRlc3RDYXNlIHsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBGaWxlTW9kZSBEID0gRmlsZU1vZGUuVFJFRTsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIEZpbGVNb2RlIEYgPSBGaWxlTW9kZS5SRUdVTEFSX0ZJTEU7CisKKwlwcml2YXRlIFRyZWVXYWxrIHdhbGs7CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RFeHBhbmROb25NYWNybzEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0dXBSZXBvKG51bGwsIG51bGwsIG51bGwsICIqLnR4dCB0ZXh0Iik7CisKKwkJd2FsayA9IGJlZ2luV2FsaygpOworCQlhc3NlcnRJdGVyYXRpb24oRCwgInN1YiIpOworCQlhc3NlcnRJdGVyYXRpb24oRiwgInN1Yi8uZ2l0YXR0cmlidXRlcyIpOworCQlhc3NlcnRJdGVyYXRpb24oRiwgInN1Yi9hLnR4dCIsIGF0dHJzKCJ0ZXh0IikpOworCQllbmRXYWxrKCk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0RXhwYW5kTm9uTWFjcm8yKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldHVwUmVwbyhudWxsLCBudWxsLCBudWxsLCAiKi50eHQgLXRleHQiKTsKKworCQl3YWxrID0gYmVnaW5XYWxrKCk7CisJCWFzc2VydEl0ZXJhdGlvbihELCAic3ViIik7CisJCWFzc2VydEl0ZXJhdGlvbihGLCAic3ViLy5naXRhdHRyaWJ1dGVzIik7CisJCWFzc2VydEl0ZXJhdGlvbihGLCAic3ViL2EudHh0IiwgYXR0cnMoIi10ZXh0IikpOworCQllbmRXYWxrKCk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0RXhwYW5kTm9uTWFjcm8zKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldHVwUmVwbyhudWxsLCBudWxsLCBudWxsLCAiKi50eHQgIXRleHQiKTsKKworCQl3YWxrID0gYmVnaW5XYWxrKCk7CisJCWFzc2VydEl0ZXJhdGlvbihELCAic3ViIik7CisJCWFzc2VydEl0ZXJhdGlvbihGLCAic3ViLy5naXRhdHRyaWJ1dGVzIik7CisJCWFzc2VydEl0ZXJhdGlvbihGLCAic3ViL2EudHh0IiwgYXR0cnMoIiIpKTsKKwkJZW5kV2FsaygpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdEV4cGFuZE5vbk1hY3JvNCgpIHRocm93cyBFeGNlcHRpb24geworCQlzZXR1cFJlcG8obnVsbCwgbnVsbCwgbnVsbCwgIioudHh0IHRleHQ9YXV0byIpOworCisJCXdhbGsgPSBiZWdpbldhbGsoKTsKKwkJYXNzZXJ0SXRlcmF0aW9uKEQsICJzdWIiKTsKKwkJYXNzZXJ0SXRlcmF0aW9uKEYsICJzdWIvLmdpdGF0dHJpYnV0ZXMiKTsKKwkJYXNzZXJ0SXRlcmF0aW9uKEYsICJzdWIvYS50eHQiLCBhdHRycygidGV4dD1hdXRvIikpOworCQllbmRXYWxrKCk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0RXhwYW5kQnVpbHRJbk1hY3JvMSgpIHRocm93cyBFeGNlcHRpb24geworCQlzZXR1cFJlcG8obnVsbCwgbnVsbCwgbnVsbCwgIioudHh0IGJpbmFyeSIpOworCisJCXdhbGsgPSBiZWdpbldhbGsoKTsKKwkJYXNzZXJ0SXRlcmF0aW9uKEQsICJzdWIiKTsKKwkJYXNzZXJ0SXRlcmF0aW9uKEYsICJzdWIvLmdpdGF0dHJpYnV0ZXMiKTsKKwkJYXNzZXJ0SXRlcmF0aW9uKEYsICJzdWIvYS50eHQiLCBhdHRycygiYmluYXJ5IC1kaWZmIC1tZXJnZSAtdGV4dCIpKTsKKwkJZW5kV2FsaygpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdEV4cGFuZEJ1aWx0SW5NYWNybzIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0dXBSZXBvKG51bGwsIG51bGwsIG51bGwsICIqLnR4dCAtYmluYXJ5Iik7CisKKwkJd2FsayA9IGJlZ2luV2FsaygpOworCQlhc3NlcnRJdGVyYXRpb24oRCwgInN1YiIpOworCQlhc3NlcnRJdGVyYXRpb24oRiwgInN1Yi8uZ2l0YXR0cmlidXRlcyIpOworCQlhc3NlcnRJdGVyYXRpb24oRiwgInN1Yi9hLnR4dCIsIGF0dHJzKCItYmluYXJ5IGRpZmYgbWVyZ2UgdGV4dCIpKTsKKwkJZW5kV2FsaygpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdEV4cGFuZEJ1aWx0SW5NYWNybzMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0dXBSZXBvKG51bGwsIG51bGwsIG51bGwsICIqLnR4dCAhYmluYXJ5Iik7CisKKwkJd2FsayA9IGJlZ2luV2FsaygpOworCQlhc3NlcnRJdGVyYXRpb24oRCwgInN1YiIpOworCQlhc3NlcnRJdGVyYXRpb24oRiwgInN1Yi8uZ2l0YXR0cmlidXRlcyIpOworCQlhc3NlcnRJdGVyYXRpb24oRiwgInN1Yi9hLnR4dCIsIGF0dHJzKCIiKSk7CisJCWVuZFdhbGsoKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RDdXN0b21HbG9iYWxNYWNybzEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0dXBSZXBvKAorCQkJCSJbYXR0cl1mb28gYSAtYiAhYyBkPWUiLCBudWxsLCBudWxsLCAiKi50eHQgZm9vIik7CisKKwkJd2FsayA9IGJlZ2luV2FsaygpOworCQlhc3NlcnRJdGVyYXRpb24oRCwgInN1YiIpOworCQlhc3NlcnRJdGVyYXRpb24oRiwgInN1Yi8uZ2l0YXR0cmlidXRlcyIpOworCQlhc3NlcnRJdGVyYXRpb24oRiwgInN1Yi9hLnR4dCIsIGF0dHJzKCJmb28gYSAtYiBkPWUiKSk7CisJCWVuZFdhbGsoKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RDdXN0b21HbG9iYWxNYWNybzIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0dXBSZXBvKCJbYXR0cl1mb28gYSAtYiAhYyBkPWUiLCBudWxsLCBudWxsLCAiKi50eHQgLWZvbyIpOworCisJCXdhbGsgPSBiZWdpbldhbGsoKTsKKwkJYXNzZXJ0SXRlcmF0aW9uKEQsICJzdWIiKTsKKwkJYXNzZXJ0SXRlcmF0aW9uKEYsICJzdWIvLmdpdGF0dHJpYnV0ZXMiKTsKKwkJYXNzZXJ0SXRlcmF0aW9uKEYsICJzdWIvYS50eHQiLCBhdHRycygiLWZvbyAtYSBiIGQ9ZSIpKTsKKwkJZW5kV2FsaygpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdEN1c3RvbUdsb2JhbE1hY3JvMygpIHRocm93cyBFeGNlcHRpb24geworCQlzZXR1cFJlcG8oIlthdHRyXWZvbyBhIC1iICFjIGQ9ZSIsIG51bGwsIG51bGwsICIqLnR4dCAhZm9vIik7CisKKwkJd2FsayA9IGJlZ2luV2FsaygpOworCQlhc3NlcnRJdGVyYXRpb24oRCwgInN1YiIpOworCQlhc3NlcnRJdGVyYXRpb24oRiwgInN1Yi8uZ2l0YXR0cmlidXRlcyIpOworCQlhc3NlcnRJdGVyYXRpb24oRiwgInN1Yi9hLnR4dCIsIGF0dHJzKCIiKSk7CisJCWVuZFdhbGsoKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RDdXN0b21HbG9iYWxNYWNybzQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0dXBSZXBvKCJbYXR0cl1mb28gYSAtYiAhYyBkPWUiLCBudWxsLCBudWxsLCAiKi50eHQgZm9vPWJhciIpOworCisJCXdhbGsgPSBiZWdpbldhbGsoKTsKKwkJYXNzZXJ0SXRlcmF0aW9uKEQsICJzdWIiKTsKKwkJYXNzZXJ0SXRlcmF0aW9uKEYsICJzdWIvLmdpdGF0dHJpYnV0ZXMiKTsKKwkJYXNzZXJ0SXRlcmF0aW9uKEYsICJzdWIvYS50eHQiLCBhdHRycygiZm9vPWJhciBhIC1iIGQ9YmFyIikpOworCQllbmRXYWxrKCk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0SW5mb092ZXJyaWRlc0dsb2JhbCgpIHRocm93cyBFeGNlcHRpb24geworCQlzZXR1cFJlcG8oIlthdHRyXWZvbyBiYXIxIiwKKwkJCQkiW2F0dHJdZm9vIGJhcjIiLCBudWxsLCAiKi50eHQgZm9vIik7CisKKwkJd2FsayA9IGJlZ2luV2FsaygpOworCQlhc3NlcnRJdGVyYXRpb24oRCwgInN1YiIpOworCQlhc3NlcnRJdGVyYXRpb24oRiwgInN1Yi8uZ2l0YXR0cmlidXRlcyIpOworCQlhc3NlcnRJdGVyYXRpb24oRiwgInN1Yi9hLnR4dCIsIGF0dHJzKCJmb28gYmFyMiIpKTsKKwkJZW5kV2FsaygpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdFdvcmtEaXJSb290T3ZlcnJpZGVzR2xvYmFsKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldHVwUmVwbygiW2F0dHJdZm9vIGJhcjEiLAorCQkJCW51bGwsCisJCQkJIlthdHRyXWZvbyBiYXIzIiwgIioudHh0IGZvbyIpOworCisJCXdhbGsgPSBiZWdpbldhbGsoKTsKKwkJYXNzZXJ0SXRlcmF0aW9uKEYsICIuZ2l0YXR0cmlidXRlcyIpOworCQlhc3NlcnRJdGVyYXRpb24oRCwgInN1YiIpOworCQlhc3NlcnRJdGVyYXRpb24oRiwgInN1Yi8uZ2l0YXR0cmlidXRlcyIpOworCQlhc3NlcnRJdGVyYXRpb24oRiwgInN1Yi9hLnR4dCIsIGF0dHJzKCJmb28gYmFyMyIpKTsKKwkJZW5kV2FsaygpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdEluZm9PdmVycmlkZXNXb3JrRGlyUm9vdCgpIHRocm93cyBFeGNlcHRpb24geworCQlzZXR1cFJlcG8oIlthdHRyXWZvbyBiYXIxIiwKKwkJCQkiW2F0dHJdZm9vIGJhcjIiLCAiW2F0dHJdZm9vIGJhcjMiLCAiKi50eHQgZm9vIik7CisKKwkJd2FsayA9IGJlZ2luV2FsaygpOworCQlhc3NlcnRJdGVyYXRpb24oRiwgIi5naXRhdHRyaWJ1dGVzIik7CisJCWFzc2VydEl0ZXJhdGlvbihELCAic3ViIik7CisJCWFzc2VydEl0ZXJhdGlvbihGLCAic3ViLy5naXRhdHRyaWJ1dGVzIik7CisJCWFzc2VydEl0ZXJhdGlvbihGLCAic3ViL2EudHh0IiwgYXR0cnMoImZvbyBiYXIyIikpOworCQllbmRXYWxrKCk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0UmVjdXJzaXZlTWFjcm8oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0dXBSZXBvKAorCQkJCSJbYXR0cl1mb28geCBiYXIgLWZvbyIsCisJCQkJbnVsbCwgbnVsbCwgIioudHh0IGZvbyIpOworCisJCXdhbGsgPSBiZWdpbldhbGsoKTsKKwkJYXNzZXJ0SXRlcmF0aW9uKEQsICJzdWIiKTsKKwkJYXNzZXJ0SXRlcmF0aW9uKEYsICJzdWIvLmdpdGF0dHJpYnV0ZXMiKTsKKwkJYXNzZXJ0SXRlcmF0aW9uKEYsICJzdWIvYS50eHQiLCBhdHRycygiZm9vIHggYmFyIikpOworCQllbmRXYWxrKCk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0Q3ljbGljTWFjcm9zKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldHVwUmVwbygKKwkJCQkiW2F0dHJdZm9vIHggLWJhclxuW2F0dHJdYmFyIHkgLWZvbyIsIG51bGwsIG51bGwsICIqLnR4dCBmb28iKTsKKworCQl3YWxrID0gYmVnaW5XYWxrKCk7CisJCWFzc2VydEl0ZXJhdGlvbihELCAic3ViIik7CisJCWFzc2VydEl0ZXJhdGlvbihGLCAic3ViLy5naXRhdHRyaWJ1dGVzIik7CisJCWFzc2VydEl0ZXJhdGlvbihGLCAic3ViL2EudHh0IiwgYXR0cnMoImZvbyB4IC1iYXIgLXkiKSk7CisJCWVuZFdhbGsoKTsKKwl9CisKKwlwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uPEF0dHJpYnV0ZT4gYXR0cnMoU3RyaW5nIHMpIHsKKwkJcmV0dXJuIG5ldyBBdHRyaWJ1dGVzUnVsZSgiKiIsIHMpLmdldEF0dHJpYnV0ZXMoKTsKKwl9CisKKwlwcml2YXRlIHZvaWQgYXNzZXJ0SXRlcmF0aW9uKEZpbGVNb2RlIHR5cGUsIFN0cmluZyBwYXRoTmFtZSkKKwkJCXRocm93cyBJT0V4Y2VwdGlvbiB7CisJCWFzc2VydEl0ZXJhdGlvbih0eXBlLCBwYXRoTmFtZSwgQ29sbGVjdGlvbnMuPEF0dHJpYnV0ZT4gZW1wdHlMaXN0KCkpOworCX0KKworCXByaXZhdGUgdm9pZCBhc3NlcnRJdGVyYXRpb24oRmlsZU1vZGUgdHlwZSwgU3RyaW5nIHBhdGhOYW1lLAorCQkJQ29sbGVjdGlvbjxBdHRyaWJ1dGU+IGV4cGVjdGVkQXR0cnMpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCWFzc2VydFRydWUoIndhbGsgaGFzIGVudHJ5Iiwgd2Fsay5uZXh0KCkpOworCQlhc3NlcnRFcXVhbHMocGF0aE5hbWUsIHdhbGsuZ2V0UGF0aFN0cmluZygpKTsKKwkJYXNzZXJ0RXF1YWxzKHR5cGUsIHdhbGsuZ2V0RmlsZU1vZGUoMCkpOworCisJCWlmIChleHBlY3RlZEF0dHJzICE9IG51bGwpIHsKKwkJCWFzc2VydEVxdWFscyhuZXcgQXJyYXlMaXN0PD4oZXhwZWN0ZWRBdHRycyksCisJCQkJCW5ldyBBcnJheUxpc3Q8Pih3YWxrLmdldEF0dHJpYnV0ZXMoKS5nZXRBbGwoKSkpOworCQl9CisKKwkJaWYgKEQuZXF1YWxzKHR5cGUpKQorCQkJd2Fsay5lbnRlclN1YnRyZWUoKTsKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0gZ2xvYmFsQXR0cmlidXRlc0NvbnRlbnQKKwkgKiBAcGFyYW0gaW5mb0F0dHJpYnV0ZXNDb250ZW50CisJICogQHBhcmFtIHJvb3RBdHRyaWJ1dGVzQ29udGVudAorCSAqIEBwYXJhbSBzdWJEaXJBdHRyaWJ1dGVzQ29udGVudAorCSAqIEB0aHJvd3MgRXhjZXB0aW9uCisJICogICAgICAgICAgICAgU2V0dXAgYSByZXBvIHdpdGggLmdpdGF0dHJpYnV0ZXMgZmlsZXMgYW5kIGEgdGVzdCBmaWxlCisJICogICAgICAgICAgICAgc3ViL2EudHh0CisJICovCisJcHJpdmF0ZSB2b2lkIHNldHVwUmVwbygKKwkJCVN0cmluZyBnbG9iYWxBdHRyaWJ1dGVzQ29udGVudCwKKwkJCVN0cmluZyBpbmZvQXR0cmlidXRlc0NvbnRlbnQsIFN0cmluZyByb290QXR0cmlidXRlc0NvbnRlbnQsIFN0cmluZyBzdWJEaXJBdHRyaWJ1dGVzQ29udGVudCkKKwkJCQkJdGhyb3dzIEV4Y2VwdGlvbiB7CisJCUZpbGVCYXNlZENvbmZpZyBjb25maWcgPSBkYi5nZXRDb25maWcoKTsKKwkJaWYgKGdsb2JhbEF0dHJpYnV0ZXNDb250ZW50ICE9IG51bGwpIHsKKwkJCUZpbGUgZiA9IG5ldyBGaWxlKGRiLmdldERpcmVjdG9yeSgpLCAiZ2xvYmFsL2F0dHJpYnV0ZXMiKTsKKwkJCXdyaXRlKGYsIGdsb2JhbEF0dHJpYnV0ZXNDb250ZW50KTsKKwkJCWNvbmZpZy5zZXRTdHJpbmcoQ29uZmlnQ29uc3RhbnRzLkNPTkZJR19DT1JFX1NFQ1RJT04sIG51bGwsCisJCQkJCUNvbmZpZ0NvbnN0YW50cy5DT05GSUdfS0VZX0FUVFJJQlVURVNGSUxFLAorCQkJCQlmLmdldEFic29sdXRlUGF0aCgpKTsKKworCQl9CisJCWlmIChpbmZvQXR0cmlidXRlc0NvbnRlbnQgIT0gbnVsbCkgeworCQkJRmlsZSBmID0gbmV3IEZpbGUoZGIuZ2V0RGlyZWN0b3J5KCksIENvbnN0YW50cy5JTkZPX0FUVFJJQlVURVMpOworCQkJd3JpdGUoZiwgaW5mb0F0dHJpYnV0ZXNDb250ZW50KTsKKwkJfQorCQljb25maWcuc2F2ZSgpOworCisJCWlmIChyb290QXR0cmlidXRlc0NvbnRlbnQgIT0gbnVsbCkgeworCQkJd3JpdGVBdHRyaWJ1dGVzRmlsZShDb25zdGFudHMuRE9UX0dJVF9BVFRSSUJVVEVTLAorCQkJCQlyb290QXR0cmlidXRlc0NvbnRlbnQpOworCQl9CisKKwkJaWYgKHN1YkRpckF0dHJpYnV0ZXNDb250ZW50ICE9IG51bGwpIHsKKwkJCXdyaXRlQXR0cmlidXRlc0ZpbGUoInN1Yi8iICsgQ29uc3RhbnRzLkRPVF9HSVRfQVRUUklCVVRFUywKKwkJCQkJc3ViRGlyQXR0cmlidXRlc0NvbnRlbnQpOworCQl9CisKKwkJd3JpdGVUcmFzaEZpbGUoInN1Yi9hLnR4dCIsICJhIik7CisJfQorCisJcHJpdmF0ZSB2b2lkIHdyaXRlQXR0cmlidXRlc0ZpbGUoU3RyaW5nIG5hbWUsIFN0cmluZy4uLiBydWxlcykKKwkJCXRocm93cyBJT0V4Y2VwdGlvbiB7CisJCVN0cmluZ0J1aWxkZXIgZGF0YSA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisJCWZvciAoU3RyaW5nIGxpbmUgOiBydWxlcykKKwkJCWRhdGEuYXBwZW5kKGxpbmUgKyAiXG4iKTsKKwkJd3JpdGVUcmFzaEZpbGUobmFtZSwgZGF0YS50b1N0cmluZygpKTsKKwl9CisKKwlwcml2YXRlIFRyZWVXYWxrIGJlZ2luV2FsaygpIHsKKwkJVHJlZVdhbGsgbmV3V2FsayA9IG5ldyBUcmVlV2FsayhkYik7CisJCW5ld1dhbGsuYWRkVHJlZShuZXcgRmlsZVRyZWVJdGVyYXRvcihkYikpOworCQlyZXR1cm4gbmV3V2FsazsKKwl9CisKKwlwcml2YXRlIHZvaWQgZW5kV2FsaygpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCWFzc2VydEZhbHNlKCJOb3QgYWxsIGZpbGVzIHRlc3RlZCIsIHdhbGsubmV4dCgpKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvYXR0cmlidXRlcy9BdHRyaWJ1dGVzTWF0Y2hlclRlc3QuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hdHRyaWJ1dGVzL0F0dHJpYnV0ZXNNYXRjaGVyVGVzdC5qYXZhCmluZGV4IDlmODJiOGEuLmU4ZGQ5NTIgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hdHRyaWJ1dGVzL0F0dHJpYnV0ZXNNYXRjaGVyVGVzdC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hdHRyaWJ1dGVzL0F0dHJpYnV0ZXNNYXRjaGVyVGVzdC5qYXZhCkBAIC0yOTMsMjggKzI5MywyOCBAQCBwdWJsaWMgdm9pZCB0ZXN0TmFtZU9ubHlNYXRjaGVzKCkgewogCXB1YmxpYyB2b2lkIHRlc3RHZXR0ZXJzKCkgewogCQlBdHRyaWJ1dGVzUnVsZSByID0gbmV3IEF0dHJpYnV0ZXNSdWxlKCIvcGF0dGVybi8iLCAiIik7CiAJCWFzc2VydEZhbHNlKHIuaXNOYW1lT25seSgpKTsKLQkJYXNzZXJ0VHJ1ZShyLmRpck9ubHkoKSk7CisJCWFzc2VydFRydWUoci5pc0Rpck9ubHkoKSk7CiAJCWFzc2VydE5vdE51bGwoci5nZXRBdHRyaWJ1dGVzKCkpOwogCQlhc3NlcnRUcnVlKHIuZ2V0QXR0cmlidXRlcygpLmlzRW1wdHkoKSk7CiAJCWFzc2VydEVxdWFscyhyLmdldFBhdHRlcm4oKSwgIi9wYXR0ZXJuIik7CiAKIAkJciA9IG5ldyBBdHRyaWJ1dGVzUnVsZSgiL3BhdHRlcj8vIiwgIiIpOwogCQlhc3NlcnRGYWxzZShyLmlzTmFtZU9ubHkoKSk7Ci0JCWFzc2VydFRydWUoci5kaXJPbmx5KCkpOworCQlhc3NlcnRUcnVlKHIuaXNEaXJPbmx5KCkpOwogCQlhc3NlcnROb3ROdWxsKHIuZ2V0QXR0cmlidXRlcygpKTsKIAkJYXNzZXJ0VHJ1ZShyLmdldEF0dHJpYnV0ZXMoKS5pc0VtcHR5KCkpOwogCQlhc3NlcnRFcXVhbHMoci5nZXRQYXR0ZXJuKCksICIvcGF0dGVyPyIpOwogCiAJCXIgPSBuZXcgQXR0cmlidXRlc1J1bGUoInBhdHQqIiwgIiIpOwogCQlhc3NlcnRUcnVlKHIuaXNOYW1lT25seSgpKTsKLQkJYXNzZXJ0RmFsc2Uoci5kaXJPbmx5KCkpOworCQlhc3NlcnRGYWxzZShyLmlzRGlyT25seSgpKTsKIAkJYXNzZXJ0Tm90TnVsbChyLmdldEF0dHJpYnV0ZXMoKSk7CiAJCWFzc2VydFRydWUoci5nZXRBdHRyaWJ1dGVzKCkuaXNFbXB0eSgpKTsKIAkJYXNzZXJ0RXF1YWxzKHIuZ2V0UGF0dGVybigpLCAicGF0dCoiKTsKIAogCQlyID0gbmV3IEF0dHJpYnV0ZXNSdWxlKCJwYXR0ZXJuIiwgImF0dHJpYnV0ZTEiKTsKIAkJYXNzZXJ0VHJ1ZShyLmlzTmFtZU9ubHkoKSk7Ci0JCWFzc2VydEZhbHNlKHIuZGlyT25seSgpKTsKKwkJYXNzZXJ0RmFsc2Uoci5pc0Rpck9ubHkoKSk7CiAJCWFzc2VydE5vdE51bGwoci5nZXRBdHRyaWJ1dGVzKCkpOwogCQlhc3NlcnRGYWxzZShyLmdldEF0dHJpYnV0ZXMoKS5pc0VtcHR5KCkpOwogCQlhc3NlcnRFcXVhbHMoci5nZXRBdHRyaWJ1dGVzKCkuc2l6ZSgpLCAxKTsKQEAgLTMyMiwyOCArMzIyLDI4IEBAIHB1YmxpYyB2b2lkIHRlc3RHZXR0ZXJzKCkgewogCiAJCXIgPSBuZXcgQXR0cmlidXRlc1J1bGUoInBhdHRlcm4iLCAiYXR0cmlidXRlMSAtYXR0cmlidXRlMiIpOwogCQlhc3NlcnRUcnVlKHIuaXNOYW1lT25seSgpKTsKLQkJYXNzZXJ0RmFsc2Uoci5kaXJPbmx5KCkpOworCQlhc3NlcnRGYWxzZShyLmlzRGlyT25seSgpKTsKIAkJYXNzZXJ0Tm90TnVsbChyLmdldEF0dHJpYnV0ZXMoKSk7CiAJCWFzc2VydEVxdWFscyhyLmdldEF0dHJpYnV0ZXMoKS5zaXplKCksIDIpOwogCQlhc3NlcnRFcXVhbHMoci5nZXRQYXR0ZXJuKCksICJwYXR0ZXJuIik7CiAKIAkJciA9IG5ldyBBdHRyaWJ1dGVzUnVsZSgicGF0dGVybiIsICJhdHRyaWJ1dGUxIFx0LWF0dHJpYnV0ZTIgXHQiKTsKIAkJYXNzZXJ0VHJ1ZShyLmlzTmFtZU9ubHkoKSk7Ci0JCWFzc2VydEZhbHNlKHIuZGlyT25seSgpKTsKKwkJYXNzZXJ0RmFsc2Uoci5pc0Rpck9ubHkoKSk7CiAJCWFzc2VydE5vdE51bGwoci5nZXRBdHRyaWJ1dGVzKCkpOwogCQlhc3NlcnRFcXVhbHMoci5nZXRBdHRyaWJ1dGVzKCkuc2l6ZSgpLCAyKTsKIAkJYXNzZXJ0RXF1YWxzKHIuZ2V0UGF0dGVybigpLCAicGF0dGVybiIpOwogCiAJCXIgPSBuZXcgQXR0cmlidXRlc1J1bGUoInBhdHRlcm4iLCAiYXR0cmlidXRlMVx0LWF0dHJpYnV0ZTJcdCIpOwogCQlhc3NlcnRUcnVlKHIuaXNOYW1lT25seSgpKTsKLQkJYXNzZXJ0RmFsc2Uoci5kaXJPbmx5KCkpOworCQlhc3NlcnRGYWxzZShyLmlzRGlyT25seSgpKTsKIAkJYXNzZXJ0Tm90TnVsbChyLmdldEF0dHJpYnV0ZXMoKSk7CiAJCWFzc2VydEVxdWFscyhyLmdldEF0dHJpYnV0ZXMoKS5zaXplKCksIDIpOwogCQlhc3NlcnRFcXVhbHMoci5nZXRQYXR0ZXJuKCksICJwYXR0ZXJuIik7CiAKIAkJciA9IG5ldyBBdHRyaWJ1dGVzUnVsZSgicGF0dGVybiIsICJhdHRyaWJ1dGUxXHQgLWF0dHJpYnV0ZTJcdCAiKTsKIAkJYXNzZXJ0VHJ1ZShyLmlzTmFtZU9ubHkoKSk7Ci0JCWFzc2VydEZhbHNlKHIuZGlyT25seSgpKTsKKwkJYXNzZXJ0RmFsc2Uoci5pc0Rpck9ubHkoKSk7CiAJCWFzc2VydE5vdE51bGwoci5nZXRBdHRyaWJ1dGVzKCkpOwogCQlhc3NlcnRFcXVhbHMoci5nZXRBdHRyaWJ1dGVzKCkuc2l6ZSgpLCAyKTsKIAkJYXNzZXJ0RXF1YWxzKHIuZ2V0UGF0dGVybigpLCAicGF0dGVybiIpOwpAQCAtMzUxLDcgKzM1MSw3IEBAIHB1YmxpYyB2b2lkIHRlc3RHZXR0ZXJzKCkgewogCQlyID0gbmV3IEF0dHJpYnV0ZXNSdWxlKCJwYXR0ZXJuIiwKIAkJCQkiYXR0cmlidXRlMSAtYXR0cmlidXRlMiAgYXR0cmlidXRlMz12YWx1ZSAiKTsKIAkJYXNzZXJ0VHJ1ZShyLmlzTmFtZU9ubHkoKSk7Ci0JCWFzc2VydEZhbHNlKHIuZGlyT25seSgpKTsKKwkJYXNzZXJ0RmFsc2Uoci5pc0Rpck9ubHkoKSk7CiAJCWFzc2VydE5vdE51bGwoci5nZXRBdHRyaWJ1dGVzKCkpOwogCQlhc3NlcnRFcXVhbHMoci5nZXRBdHRyaWJ1dGVzKCkuc2l6ZSgpLCAzKTsKIAkJYXNzZXJ0RXF1YWxzKHIuZ2V0UGF0dGVybigpLCAicGF0dGVybiIpOwpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2F0dHJpYnV0ZXMvQXR0cmlidXRlc05vZGVEaXJDYWNoZUl0ZXJhdG9yVGVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2F0dHJpYnV0ZXMvQXR0cmlidXRlc05vZGVEaXJDYWNoZUl0ZXJhdG9yVGVzdC5qYXZhCmluZGV4IDBlNTk1ZTYuLjc0MjFlOTAgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hdHRyaWJ1dGVzL0F0dHJpYnV0ZXNOb2RlRGlyQ2FjaGVJdGVyYXRvclRlc3QuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvYXR0cmlidXRlcy9BdHRyaWJ1dGVzTm9kZURpckNhY2hlSXRlcmF0b3JUZXN0LmphdmEKQEAgLTI1MSwxNCArMjUxLDE3IEBAIHByaXZhdGUgdm9pZCBhc3NlcnRJdGVyYXRpb24oRmlsZU1vZGUgdHlwZSwgU3RyaW5nIHBhdGhOYW1lLAogCX0KIAogCXByaXZhdGUgdm9pZCBhc3NlcnRBdHRyaWJ1dGVzTm9kZShTdHJpbmcgcGF0aE5hbWUsCi0JCQlBdHRyaWJ1dGVzTm9kZSBhdHRyaWJ1dGVzTm9kZSwgTGlzdDxBdHRyaWJ1dGU+IG5vZGVBdHRycykgeworCQkJQXR0cmlidXRlc05vZGUgYXR0cmlidXRlc05vZGUsIExpc3Q8QXR0cmlidXRlPiBub2RlQXR0cnMpCisJCQkJCXRocm93cyBJT0V4Y2VwdGlvbiB7CiAJCWlmIChhdHRyaWJ1dGVzTm9kZSA9PSBudWxsKQogCQkJYXNzZXJ0VHJ1ZShub2RlQXR0cnMgPT0gbnVsbCB8fCBub2RlQXR0cnMuaXNFbXB0eSgpKTsKIAkJZWxzZSB7CiAKIAkJCUF0dHJpYnV0ZXMgZW50cnlBdHRyaWJ1dGVzID0gbmV3IEF0dHJpYnV0ZXMoKTsKLQkJCWF0dHJpYnV0ZXNOb2RlLmdldEF0dHJpYnV0ZXMocGF0aE5hbWUsCi0JCQkJCWZhbHNlLCBlbnRyeUF0dHJpYnV0ZXMpOworCQkJbmV3IEF0dHJpYnV0ZXNIYW5kbGVyKHdhbGspLm1lcmdlQXR0cmlidXRlcyhhdHRyaWJ1dGVzTm9kZSwKKwkJCQkJcGF0aE5hbWUsCisJCQkJCWZhbHNlLAorCQkJCQllbnRyeUF0dHJpYnV0ZXMpOwogCiAJCQlpZiAobm9kZUF0dHJzICE9IG51bGwgJiYgIW5vZGVBdHRycy5pc0VtcHR5KCkpIHsKIAkJCQlmb3IgKEF0dHJpYnV0ZSBhdHRyaWJ1dGUgOiBub2RlQXR0cnMpIHsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hdHRyaWJ1dGVzL0F0dHJpYnV0ZXNOb2RlVGVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2F0dHJpYnV0ZXMvQXR0cmlidXRlc05vZGVUZXN0LmphdmEKaW5kZXggZDQ3OGE3Yy4uZWMyMzcwZSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2F0dHJpYnV0ZXMvQXR0cmlidXRlc05vZGVUZXN0LmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2F0dHJpYnV0ZXMvQXR0cmlidXRlc05vZGVUZXN0LmphdmEKQEAgLTUwLDYgKzUwLDkgQEAKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwogaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CiAKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UuZGZzLkRmc1JlcG9zaXRvcnlEZXNjcmlwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UuZGZzLkluTWVtb3J5UmVwb3NpdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrLlRyZWVXYWxrOwogaW1wb3J0IG9yZy5qdW5pdC5BZnRlcjsKIGltcG9ydCBvcmcuanVuaXQuVGVzdDsKIApAQCAtNTcsNiArNjAsOCBAQAogICogVGVzdCB7QGxpbmsgQXR0cmlidXRlc05vZGV9CiAgKi8KIHB1YmxpYyBjbGFzcyBBdHRyaWJ1dGVzTm9kZVRlc3QgeworCXByaXZhdGUgc3RhdGljIGZpbmFsIFRyZWVXYWxrIERVTU1ZX1dBTEsgPSBuZXcgVHJlZVdhbGsoCisJCQluZXcgSW5NZW1vcnlSZXBvc2l0b3J5KG5ldyBEZnNSZXBvc2l0b3J5RGVzY3JpcHRpb24oIkZvb0JhciIpKSk7CiAKIAlwcml2YXRlIHN0YXRpYyBmaW5hbCBBdHRyaWJ1dGUgQV9TRVRfQVRUUiA9IG5ldyBBdHRyaWJ1dGUoIkEiLCBTRVQpOwogCkBAIC0xNjIsOSArMTY3LDEwIEBAIHB1YmxpYyB2b2lkIHRlc3RUYWJTZXBhcmF0b3IoKSB0aHJvd3MgSU9FeGNlcHRpb24gewogCX0KIAogCXByaXZhdGUgdm9pZCBhc3NlcnRBdHRyaWJ1dGUoU3RyaW5nIHBhdGgsIEF0dHJpYnV0ZXNOb2RlIG5vZGUsCi0JCQlBdHRyaWJ1dGVzIGF0dHJzKSB7CisJCQlBdHRyaWJ1dGVzIGF0dHJzKSB0aHJvd3MgSU9FeGNlcHRpb24gewogCQlBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMgPSBuZXcgQXR0cmlidXRlcygpOwotCQlub2RlLmdldEF0dHJpYnV0ZXMocGF0aCwgZmFsc2UsIGF0dHJpYnV0ZXMpOworCQluZXcgQXR0cmlidXRlc0hhbmRsZXIoRFVNTVlfV0FMSykubWVyZ2VBdHRyaWJ1dGVzKG5vZGUsIHBhdGgsIGZhbHNlLAorCQkJCWF0dHJpYnV0ZXMpOwogCQlhc3NlcnRFcXVhbHMoYXR0cnMsIGF0dHJpYnV0ZXMpOwogCX0KIApkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2F0dHJpYnV0ZXMvQXR0cmlidXRlc05vZGVXb3JraW5nVHJlZUl0ZXJhdG9yVGVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2F0dHJpYnV0ZXMvQXR0cmlidXRlc05vZGVXb3JraW5nVHJlZUl0ZXJhdG9yVGVzdC5qYXZhCmluZGV4IDQyMTViYTIuLmIxNTljY2EgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hdHRyaWJ1dGVzL0F0dHJpYnV0ZXNOb2RlV29ya2luZ1RyZWVJdGVyYXRvclRlc3QuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvYXR0cmlidXRlcy9BdHRyaWJ1dGVzTm9kZVdvcmtpbmdUcmVlSXRlcmF0b3JUZXN0LmphdmEKQEAgLTIxOSwxNCArMjE5LDE2IEBAIHByaXZhdGUgdm9pZCBhc3NlcnRJdGVyYXRpb24oRmlsZU1vZGUgdHlwZSwgU3RyaW5nIHBhdGhOYW1lLAogCX0KIAogCXByaXZhdGUgdm9pZCBhc3NlcnRBdHRyaWJ1dGVzTm9kZShTdHJpbmcgcGF0aE5hbWUsCi0JCQlBdHRyaWJ1dGVzTm9kZSBhdHRyaWJ1dGVzTm9kZSwgTGlzdDxBdHRyaWJ1dGU+IG5vZGVBdHRycykgeworCQkJQXR0cmlidXRlc05vZGUgYXR0cmlidXRlc05vZGUsIExpc3Q8QXR0cmlidXRlPiBub2RlQXR0cnMpCisJCQkJCXRocm93cyBJT0V4Y2VwdGlvbiB7CiAJCWlmIChhdHRyaWJ1dGVzTm9kZSA9PSBudWxsKQogCQkJYXNzZXJ0VHJ1ZShub2RlQXR0cnMgPT0gbnVsbCB8fCBub2RlQXR0cnMuaXNFbXB0eSgpKTsKIAkJZWxzZSB7CiAKIAkJCUF0dHJpYnV0ZXMgZW50cnlBdHRyaWJ1dGVzID0gbmV3IEF0dHJpYnV0ZXMoKTsKLQkJCWF0dHJpYnV0ZXNOb2RlLmdldEF0dHJpYnV0ZXMocGF0aE5hbWUsCi0JCQkJCWZhbHNlLCBlbnRyeUF0dHJpYnV0ZXMpOworCQkJbmV3IEF0dHJpYnV0ZXNIYW5kbGVyKHdhbGspLm1lcmdlQXR0cmlidXRlcyhhdHRyaWJ1dGVzTm9kZSwKKwkJCQkJcGF0aE5hbWUsIGZhbHNlLAorCQkJCQllbnRyeUF0dHJpYnV0ZXMpOwogCiAJCQlpZiAobm9kZUF0dHJzICE9IG51bGwgJiYgIW5vZGVBdHRycy5pc0VtcHR5KCkpIHsKIAkJCQlmb3IgKEF0dHJpYnV0ZSBhdHRyaWJ1dGUgOiBub2RlQXR0cnMpIHsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9naXRyZXBvL1JlcG9Db21tYW5kVGVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2dpdHJlcG8vUmVwb0NvbW1hbmRUZXN0LmphdmEKaW5kZXggNzdlZjFhNi4uMmNlYzM0YiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2dpdHJlcG8vUmVwb0NvbW1hbmRUZXN0LmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2dpdHJlcG8vUmVwb0NvbW1hbmRUZXN0LmphdmEKQEAgLTc1MSw2ICs3NTEsNTkgQEAgcHVibGljIHZvaWQgdGVzdFJlY29yZFJlbW90ZUJyYW5jaCgpIHRocm93cyBFeGNlcHRpb24gewogCQl9CiAJfQogCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0UmVtb3RlUmV2aXNpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJU3RyaW5nQnVpbGRlciB4bWxDb250ZW50ID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwkJeG1sQ29udGVudC5hcHBlbmQoIjw/eG1sIHZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cIlVURi04XCI/PlxuIikKKwkJCS5hcHBlbmQoIjxtYW5pZmVzdD4iKQorCQkJLmFwcGVuZCgiPHJlbW90ZSBuYW1lPVwicmVtb3RlMVwiIGZldGNoPVwiLlwiIC8+IikKKwkJCS5hcHBlbmQoIjxyZW1vdGUgbmFtZT1cInJlbW90ZTJcIiBmZXRjaD1cIi5cIiByZXZpc2lvbj1cIiIpCisJCQkuYXBwZW5kKEJSQU5DSCkKKwkJCS5hcHBlbmQoIlwiIC8+IikKKwkJCS5hcHBlbmQoIjxkZWZhdWx0IHJlbW90ZT1cInJlbW90ZTFcIiByZXZpc2lvbj1cIm1hc3RlclwiIC8+IikKKwkJCS5hcHBlbmQoIjxwcm9qZWN0IHBhdGg9XCJmb29cIiByZW1vdGU9XCJyZW1vdGUyXCIgbmFtZT1cIiIpCisJCQkuYXBwZW5kKGRlZmF1bHRVcmkpCisJCQkuYXBwZW5kKCJcIiAvPiIpCisJCQkuYXBwZW5kKCI8L21hbmlmZXN0PiIpOworCQl3cml0ZVRyYXNoRmlsZSgibWFuaWZlc3QueG1sIiwgeG1sQ29udGVudC50b1N0cmluZygpKTsKKwkJUmVwb0NvbW1hbmQgY29tbWFuZCA9IG5ldyBSZXBvQ29tbWFuZChkYik7CisJCWNvbW1hbmQuc2V0UGF0aChkYi5nZXRXb3JrVHJlZSgpLmdldEFic29sdXRlUGF0aCgpICsgIi9tYW5pZmVzdC54bWwiKQorCQkJLnNldFVSSShyb290VXJpKQorCQkJLmNhbGwoKTsKKwkJRmlsZSBoZWxsbyA9IG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksICJmb28vaGVsbG8udHh0Iik7CisJCUJ1ZmZlcmVkUmVhZGVyIHJlYWRlciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgRmlsZVJlYWRlcihoZWxsbykpOworCQlTdHJpbmcgY29udGVudCA9IHJlYWRlci5yZWFkTGluZSgpOworCQlyZWFkZXIuY2xvc2UoKTsKKwkJYXNzZXJ0RXF1YWxzKCJzdWJtb2R1bGUgY29udGVudCBzaG91bGQgYmUgYXMgZXhwZWN0ZWQiLAorCQkJCSJicmFuY2ggd29ybGQiLCBjb250ZW50KTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3REZWZhdWx0UmVtb3RlUmV2aXNpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJU3RyaW5nQnVpbGRlciB4bWxDb250ZW50ID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwkJeG1sQ29udGVudC5hcHBlbmQoIjw/eG1sIHZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cIlVURi04XCI/PlxuIikKKwkJCS5hcHBlbmQoIjxtYW5pZmVzdD4iKQorCQkJLmFwcGVuZCgiPHJlbW90ZSBuYW1lPVwicmVtb3RlMVwiIGZldGNoPVwiLlwiIHJldmlzaW9uPVwiIikKKwkJCS5hcHBlbmQoQlJBTkNIKQorCQkJLmFwcGVuZCgiXCIgLz4iKQorCQkJLmFwcGVuZCgiPGRlZmF1bHQgcmVtb3RlPVwicmVtb3RlMVwiIC8+IikKKwkJCS5hcHBlbmQoIjxwcm9qZWN0IHBhdGg9XCJmb29cIiBuYW1lPVwiIikKKwkJCS5hcHBlbmQoZGVmYXVsdFVyaSkKKwkJCS5hcHBlbmQoIlwiIC8+IikKKwkJCS5hcHBlbmQoIjwvbWFuaWZlc3Q+Iik7CisJCXdyaXRlVHJhc2hGaWxlKCJtYW5pZmVzdC54bWwiLCB4bWxDb250ZW50LnRvU3RyaW5nKCkpOworCQlSZXBvQ29tbWFuZCBjb21tYW5kID0gbmV3IFJlcG9Db21tYW5kKGRiKTsKKwkJY29tbWFuZC5zZXRQYXRoKGRiLmdldFdvcmtUcmVlKCkuZ2V0QWJzb2x1dGVQYXRoKCkgKyAiL21hbmlmZXN0LnhtbCIpCisJCQkuc2V0VVJJKHJvb3RVcmkpCisJCQkuY2FsbCgpOworCQlGaWxlIGhlbGxvID0gbmV3IEZpbGUoZGIuZ2V0V29ya1RyZWUoKSwgImZvby9oZWxsby50eHQiKTsKKwkJQnVmZmVyZWRSZWFkZXIgcmVhZGVyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBGaWxlUmVhZGVyKGhlbGxvKSk7CisJCVN0cmluZyBjb250ZW50ID0gcmVhZGVyLnJlYWRMaW5lKCk7CisJCXJlYWRlci5jbG9zZSgpOworCQlhc3NlcnRFcXVhbHMoInN1Ym1vZHVsZSBjb250ZW50IHNob3VsZCBiZSBhcyBleHBlY3RlZCIsCisJCQkJImJyYW5jaCB3b3JsZCIsIGNvbnRlbnQpOworCX0KKwogCXByaXZhdGUgdm9pZCByZXNvbHZlUmVsYXRpdmVVcmlzKCkgewogCQkvLyBGaW5kIHRoZSBsb25nZXN0IGNvbW1vbiBwcmVmaXggZW5kcyB3aXRoICIvIiBhcyByb290VXJpLgogCQlkZWZhdWx0VXJpID0gZGVmYXVsdERiLmdldERpcmVjdG9yeSgpLnRvVVJJKCkudG9TdHJpbmcoKTsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2ZpbGUvUmVmVXBkYXRlVGVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvZmlsZS9SZWZVcGRhdGVUZXN0LmphdmEKaW5kZXggN2FkZjA3NC4uNGJlMWQ2ZCAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvZmlsZS9SZWZVcGRhdGVUZXN0LmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvZmlsZS9SZWZVcGRhdGVUZXN0LmphdmEKQEAgLTEwNCw5ICsxMDQsMTQgQEAgcHJpdmF0ZSB2b2lkIGRlbGV0ZShmaW5hbCBSZWZVcGRhdGUgcmVmLCBmaW5hbCBSZXN1bHQgZXhwZWN0ZWQpCiAKIAlwcml2YXRlIHZvaWQgZGVsZXRlKGZpbmFsIFJlZlVwZGF0ZSByZWYsIGZpbmFsIFJlc3VsdCBleHBlY3RlZCwKIAkJCWZpbmFsIGJvb2xlYW4gZXhpc3RzLCBmaW5hbCBib29sZWFuIHJlbW92ZWQpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCWFzc2VydEVxdWFscyhleGlzdHMsIGRiLmdldEFsbFJlZnMoKS5jb250YWluc0tleShyZWYuZ2V0TmFtZSgpKSk7CisJCWRlbGV0ZShkYiwgcmVmLCBleHBlY3RlZCwgZXhpc3RzLCByZW1vdmVkKTsKKwl9CisKKwlwcml2YXRlIHZvaWQgZGVsZXRlKFJlcG9zaXRvcnkgcmVwbywgZmluYWwgUmVmVXBkYXRlIHJlZiwgZmluYWwgUmVzdWx0IGV4cGVjdGVkLAorCQkJZmluYWwgYm9vbGVhbiBleGlzdHMsIGZpbmFsIGJvb2xlYW4gcmVtb3ZlZCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJYXNzZXJ0RXF1YWxzKGV4aXN0cywgcmVwby5nZXRBbGxSZWZzKCkuY29udGFpbnNLZXkocmVmLmdldE5hbWUoKSkpOwogCQlhc3NlcnRFcXVhbHMoZXhwZWN0ZWQsIHJlZi5kZWxldGUoKSk7Ci0JCWFzc2VydEVxdWFscyghcmVtb3ZlZCwgZGIuZ2V0QWxsUmVmcygpLmNvbnRhaW5zS2V5KHJlZi5nZXROYW1lKCkpKTsKKwkJYXNzZXJ0RXF1YWxzKCFyZW1vdmVkLCByZXBvLmdldEFsbFJlZnMoKS5jb250YWluc0tleShyZWYuZ2V0TmFtZSgpKSk7CiAJfQogCiAJQFRlc3QKQEAgLTIzMiw2ICsyMzcsMTcgQEAgcHVibGljIHZvaWQgdGVzdERlbGV0ZUhlYWQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewogCQlhc3NlcnRFcXVhbHMoMCwgZGIuZ2V0UmVmbG9nUmVhZGVyKCJIRUFEIikuZ2V0UmV2ZXJzZUVudHJpZXMoKS5zaXplKCkpOwogCX0KIAorCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdERlbGV0ZUhlYWRJbkJhcmVSZXBvKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJdHJ5IChSZXBvc2l0b3J5IGJhcmVSZXBvID0gY3JlYXRlQmFyZVJlcG9zaXRvcnkoKSkgeworCQkJUmVmVXBkYXRlIHJlZiA9IGJhcmVSZXBvLnVwZGF0ZVJlZihDb25zdGFudHMuSEVBRCk7CisJCQlyZWYuc2V0TmV3T2JqZWN0SWQoT2JqZWN0SWQuZnJvbVN0cmluZygiMDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OSIpKTsKKwkJCS8vIENyZWF0ZSB0aGUgSEVBRCByZWYgc28gd2UgY2FuIGRlbGV0ZSBpdC4KKwkJCWFzc2VydEVxdWFscyhSZXN1bHQuTkVXLCByZWYudXBkYXRlKCkpOworCQkJcmVmID0gYmFyZVJlcG8udXBkYXRlUmVmKENvbnN0YW50cy5IRUFEKTsKKwkJCWRlbGV0ZShiYXJlUmVwbywgcmVmLCBSZXN1bHQuTk9fQ0hBTkdFLCB0cnVlLCB0cnVlKTsKKwkJfQorCX0KIAkvKioKIAkgKiBEZWxldGUgYSBsb29zZSByZWYgYW5kIG1ha2Ugc3VyZSB0aGUgZGlyZWN0b3J5IGluIHJlZnMgaXMgZGVsZXRlZCB0b28sCiAJICogYW5kIHRoZSByZWZsb2cgZGlyIHRvbwpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvcmVmdHJlZS9Mb2NhbERpc2tSZWZUcmVlRGF0YWJhc2VUZXN0LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9yZWZ0cmVlL0xvY2FsRGlza1JlZlRyZWVEYXRhYmFzZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2Y3MGQ3Ci0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvcmVmdHJlZS9Mb2NhbERpc2tSZWZUcmVlRGF0YWJhc2VUZXN0LmphdmEKQEAgLTAsMCArMSwxMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgR29vZ2xlIEluYy4KKyAqIGFuZCBvdGhlciBjb3B5cmlnaHQgb3duZXJzIGFzIGRvY3VtZW50ZWQgaW4gdGhlIHByb2plY3QncyBJUCBsb2cuCisgKgorICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2MS4wIHdoaWNoCisgKiBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgaXMgcmVwcm9kdWNlZCBiZWxvdywgYW5kIGlzCisgKiBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VkbC12MTAucGhwCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgSW5jLiBub3IgdGhlCisgKiAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCisgKiAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3IKKyAqICAgd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORAorICogQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKyAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGCisgKiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitwYWNrYWdlIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5yZWZ0cmVlOworCitpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQubGliLkNvbnN0YW50cy5IRUFEOworaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25zdGFudHMuTUFTVEVSOworaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25zdGFudHMuT1JJR19IRUFEOworaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25zdGFudHMuUl9IRUFEUzsKK2ltcG9ydCBzdGF0aWMgb3JnLmVjbGlwc2UuamdpdC5saWIuUmVmRGF0YWJhc2UuQUxMOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRGYWxzZTsKKworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLmZpbGUuRmlsZVJlcG9zaXRvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5Mb2NhbERpc2tSZXBvc2l0b3J5VGVzdENhc2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5UZXN0UmVwb3NpdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5PYmplY3RJZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5SZWY7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuUmVmRGF0YWJhc2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuUmVmVXBkYXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQucmV2d2Fsay5SZXZDb21taXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5zdG9yYWdlLmZpbGUuRmlsZUJhc2VkQ29uZmlnOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuc3RvcmFnZS5maWxlLkZpbGVSZXBvc2l0b3J5QnVpbGRlcjsKK2ltcG9ydCBvcmcuanVuaXQuQmVmb3JlOworaW1wb3J0IG9yZy5qdW5pdC5UZXN0OworCitwdWJsaWMgY2xhc3MgTG9jYWxEaXNrUmVmVHJlZURhdGFiYXNlVGVzdCBleHRlbmRzIExvY2FsRGlza1JlcG9zaXRvcnlUZXN0Q2FzZSB7CisJcHJpdmF0ZSBGaWxlUmVwb3NpdG9yeSByZXBvOworCXByaXZhdGUgUmVmVHJlZURhdGFiYXNlIHJlZmRiOworCXByaXZhdGUgUmVmRGF0YWJhc2UgYm9vdHN0cmFwOworCisJcHJpdmF0ZSBUZXN0UmVwb3NpdG9yeTxGaWxlUmVwb3NpdG9yeT4gdGVzdFJlcG87CisJcHJpdmF0ZSBSZXZDb21taXQgQTsKKwlwcml2YXRlIFJldkNvbW1pdCBCOworCisJQEJlZm9yZQorCXB1YmxpYyB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCUZpbGVSZXBvc2l0b3J5IGluaXQgPSBjcmVhdGVXb3JrUmVwb3NpdG9yeSgpOworCQlGaWxlQmFzZWRDb25maWcgY2ZnID0gaW5pdC5nZXRDb25maWcoKTsKKwkJY2ZnLnNldEludCgiY29yZSIsIG51bGwsICJyZXBvc2l0b3J5Zm9ybWF0dmVyc2lvbiIsIDEpOworCQljZmcuc2V0U3RyaW5nKCJleHRlbnNpb25zIiwgbnVsbCwgInJlZnNTdG9yYWdlIiwgInJlZnRyZWUiKTsKKwkJY2ZnLnNhdmUoKTsKKworCQlyZXBvID0gKEZpbGVSZXBvc2l0b3J5KSBuZXcgRmlsZVJlcG9zaXRvcnlCdWlsZGVyKCkKKwkJCQkuc2V0R2l0RGlyKGluaXQuZ2V0RGlyZWN0b3J5KCkpCisJCQkJLmJ1aWxkKCk7CisJCXJlZmRiID0gKFJlZlRyZWVEYXRhYmFzZSkgcmVwby5nZXRSZWZEYXRhYmFzZSgpOworCQlib290c3RyYXAgPSByZWZkYi5nZXRCb290c3RyYXAoKTsKKwkJYWRkUmVwb1RvQ2xvc2UocmVwbyk7CisKKwkJUmVmVXBkYXRlIGhlYWQgPSByZWZkYi5uZXdVcGRhdGUoSEVBRCwgdHJ1ZSk7CisJCWhlYWQubGluayhSX0hFQURTICsgTUFTVEVSKTsKKworCQl0ZXN0UmVwbyA9IG5ldyBUZXN0UmVwb3NpdG9yeTw+KGluaXQpOworCQlBID0gdGVzdFJlcG8uY29tbWl0KCkuY3JlYXRlKCk7CisJCUIgPSB0ZXN0UmVwby5jb21taXQodGVzdFJlcG8uZ2V0UmV2V2FsaygpLnBhcnNlQ29tbWl0KEEpKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RIZWFkT3JpZ0hlYWQoKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQlSZWZVcGRhdGUgbWFzdGVyID0gcmVmZGIubmV3VXBkYXRlKEhFQUQsIGZhbHNlKTsKKwkJbWFzdGVyLnNldEV4cGVjdGVkT2xkT2JqZWN0SWQoT2JqZWN0SWQuemVyb0lkKCkpOworCQltYXN0ZXIuc2V0TmV3T2JqZWN0SWQoQSk7CisJCWFzc2VydEVxdWFscyhSZWZVcGRhdGUuUmVzdWx0Lk5FVywgbWFzdGVyLnVwZGF0ZSgpKTsKKwkJYXNzZXJ0RXF1YWxzKEEsIHJlZmRiLmV4YWN0UmVmKEhFQUQpLmdldE9iamVjdElkKCkpOworCisJCVJlZlVwZGF0ZSBvcmlnID0gcmVmZGIubmV3VXBkYXRlKE9SSUdfSEVBRCwgdHJ1ZSk7CisJCW9yaWcuc2V0TmV3T2JqZWN0SWQoQik7CisJCWFzc2VydEVxdWFscyhSZWZVcGRhdGUuUmVzdWx0Lk5FVywgb3JpZy51cGRhdGUoKSk7CisKKwkJRmlsZSBvcmlnRmlsZSA9IG5ldyBGaWxlKHJlcG8uZ2V0RGlyZWN0b3J5KCksIE9SSUdfSEVBRCk7CisJCWFzc2VydEVxdWFscyhCLm5hbWUoKSArICdcbicsIHJlYWQob3JpZ0ZpbGUpKTsKKwkJYXNzZXJ0RXF1YWxzKEIsIGJvb3RzdHJhcC5leGFjdFJlZihPUklHX0hFQUQpLmdldE9iamVjdElkKCkpOworCQlhc3NlcnRFcXVhbHMoQiwgcmVmZGIuZXhhY3RSZWYoT1JJR19IRUFEKS5nZXRPYmplY3RJZCgpKTsKKwkJYXNzZXJ0RmFsc2UocmVmZGIuZ2V0UmVmcyhBTEwpLmNvbnRhaW5zS2V5KE9SSUdfSEVBRCkpOworCisJCUxpc3Q8UmVmPiBhZGRsID0gcmVmZGIuZ2V0QWRkaXRpb25hbFJlZnMoKTsKKwkJYXNzZXJ0RXF1YWxzKDIsIGFkZGwuc2l6ZSgpKTsKKwkJYXNzZXJ0RXF1YWxzKE9SSUdfSEVBRCwgYWRkbC5nZXQoMSkuZ2V0TmFtZSgpKTsKKwkJYXNzZXJ0RXF1YWxzKEIsIGFkZGwuZ2V0KDEpLmdldE9iamVjdElkKCkpOworCX0KK30KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL3JlZnRyZWUvUmVmVHJlZURhdGFiYXNlVGVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvcmVmdHJlZS9SZWZUcmVlRGF0YWJhc2VUZXN0LmphdmEKaW5kZXggMDIwZDFiMS4uZTRkMGYxZCAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvcmVmdHJlZS9SZWZUcmVlRGF0YWJhc2VUZXN0LmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvcmVmdHJlZS9SZWZUcmVlRGF0YWJhc2VUZXN0LmphdmEKQEAgLTQ0LDYgKzQ0LDcgQEAKIHBhY2thZ2Ugb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLnJlZnRyZWU7CiAKIGltcG9ydCBzdGF0aWMgb3JnLmVjbGlwc2UuamdpdC5saWIuQ29uc3RhbnRzLkhFQUQ7CitpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQubGliLkNvbnN0YW50cy5PUklHX0hFQUQ7CiBpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQubGliLkNvbnN0YW50cy5SX0hFQURTOwogaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25zdGFudHMuUl9UQUdTOwogaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5SZWYuU3RvcmFnZS5MT09TRTsKQEAgLTEyNCw2ICsxMjUsMTcgQEAgcHVibGljIHZvaWQgdGVzdEdldFJlZnNfRW1wdHlEYXRhYmFzZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CiAJCWFzc2VydFRydWUoIm5vIHJlZmVyZW5jZXMiLCByZWZkYi5nZXRSZWZzKEFMTCkuaXNFbXB0eSgpKTsKIAkJYXNzZXJ0VHJ1ZSgibm8gcmVmZXJlbmNlcyIsIHJlZmRiLmdldFJlZnMoUl9IRUFEUykuaXNFbXB0eSgpKTsKIAkJYXNzZXJ0VHJ1ZSgibm8gcmVmZXJlbmNlcyIsIHJlZmRiLmdldFJlZnMoUl9UQUdTKS5pc0VtcHR5KCkpOworCQlhc3NlcnRUcnVlKCJubyByZWZlcmVuY2VzIiwgcmVmZGIuZ2V0QWRkaXRpb25hbFJlZnMoKS5pc0VtcHR5KCkpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdEdldEFkZGl0aW9uYWxSZWZzKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJdXBkYXRlKCJyZWZzL2hlYWRzL21hc3RlciIsIEEpOworCisJCUxpc3Q8UmVmPiBhZGRsID0gcmVmZGIuZ2V0QWRkaXRpb25hbFJlZnMoKTsKKwkJYXNzZXJ0RXF1YWxzKDEsIGFkZGwuc2l6ZSgpKTsKKwkJYXNzZXJ0RXF1YWxzKCJyZWZzL3R4bi9jb21taXR0ZWQiLCBhZGRsLmdldCgwKS5nZXROYW1lKCkpOworCQlhc3NlcnRFcXVhbHMoZ2V0VHhuQ29tbWl0dGVkKCksIGFkZGwuZ2V0KDApLmdldE9iamVjdElkKCkpOwogCX0KIAogCUBUZXN0CkBAIC00NTcsNiArNDY5LDI3IEBAIHB1YmxpYyB2b2lkIHRlc3RVcGRhdGVfUmVmdXNlc0RvdExvY2tJblJlZk5hbWUoKSB0aHJvd3MgSU9FeGNlcHRpb24gewogCX0KIAogCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdFVwZGF0ZV9SZWZ1c2VzT3JpZ0hlYWRPbkJhcmUoKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQlhc3NlcnRUcnVlKHJlZmRiLmdldFJlcG9zaXRvcnkoKS5pc0JhcmUoKSk7CisJCU9iamVjdElkIHR4bklkID0gZ2V0VHhuQ29tbWl0dGVkKCk7CisKKwkJUmVmVXBkYXRlIG9yaWcgPSByZWZkYi5uZXdVcGRhdGUoT1JJR19IRUFELCB0cnVlKTsKKwkJb3JpZy5zZXROZXdPYmplY3RJZChCKTsKKwkJYXNzZXJ0RXF1YWxzKFJlZlVwZGF0ZS5SZXN1bHQuTE9DS19GQUlMVVJFLCBvcmlnLnVwZGF0ZSgpKTsKKwkJYXNzZXJ0RXF1YWxzKHR4bklkLCBnZXRUeG5Db21taXR0ZWQoKSk7CisKKwkJUmVjZWl2ZUNvbW1hbmQgY21kID0gY29tbWFuZChudWxsLCBCLCBPUklHX0hFQUQpOworCQlCYXRjaFJlZlVwZGF0ZSBiYXRjaCA9IHJlZmRiLm5ld0JhdGNoVXBkYXRlKCk7CisJCWJhdGNoLmFkZENvbW1hbmQoY21kKTsKKwkJYmF0Y2guZXhlY3V0ZShuZXcgUmV2V2FsayhyZXBvKSwgTnVsbFByb2dyZXNzTW9uaXRvci5JTlNUQU5DRSk7CisJCWFzc2VydEVxdWFscyhSRUpFQ1RFRF9PVEhFUl9SRUFTT04sIGNtZC5nZXRSZXN1bHQoKSk7CisJCWFzc2VydEVxdWFscygKKwkJCQlNZXNzYWdlRm9ybWF0LmZvcm1hdChKR2l0VGV4dC5nZXQoKS5pbnZhbGlkUmVmTmFtZSwgT1JJR19IRUFEKSwKKwkJCQljbWQuZ2V0TWVzc2FnZSgpKTsKKwkJYXNzZXJ0RXF1YWxzKHR4bklkLCBnZXRUeG5Db21taXR0ZWQoKSk7CisJfQorCisJQFRlc3QKIAlwdWJsaWMgdm9pZCB0ZXN0QmF0Y2hSZWZVcGRhdGVfTm9uRmFzdEZvcndhcmRBYm9ydHMoKSB0aHJvd3MgSU9FeGNlcHRpb24gewogCQl1cGRhdGUoInJlZnMvaGVhZHMvbWFzdGVyIiwgQSk7CiAJCXVwZGF0ZSgicmVmcy9oZWFkcy9tYXN0ZXJzIiwgQik7CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvdXRpbC9OQlRlc3QuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC91dGlsL05CVGVzdC5qYXZhCmluZGV4IDA2Y2IxMWIuLjdlMTFhNjEgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC91dGlsL05CVGVzdC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC91dGlsL05CVGVzdC5qYXZhCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgR29vZ2xlIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxNSBHb29nbGUgSW5jLgogICogYW5kIG90aGVyIGNvcHlyaWdodCBvd25lcnMgYXMgZG9jdW1lbnRlZCBpbiB0aGUgcHJvamVjdCdzIElQIGxvZy4KICAqCiAgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZQpAQCAtNjEsNiArNjEsMTcgQEAgcHVibGljIHZvaWQgdGVzdENvbXBhcmVVSW50MzIoKSB7CiAJfQogCiAJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0Q29tcGFyZVVJbnQ2NCgpIHsKKwkJYXNzZXJ0VHJ1ZShOQi5jb21wYXJlVUludDY0KDAsIDApID09IDApOworCQlhc3NlcnRUcnVlKE5CLmNvbXBhcmVVSW50NjQoMSwgMCkgPiAwKTsKKwkJYXNzZXJ0VHJ1ZShOQi5jb21wYXJlVUludDY0KDAsIDEpIDwgMCk7CisJCWFzc2VydFRydWUoTkIuY29tcGFyZVVJbnQ2NCgtMSwgMCkgPiAwKTsKKwkJYXNzZXJ0VHJ1ZShOQi5jb21wYXJlVUludDY0KDAsIC0xKSA8IDApOworCQlhc3NlcnRUcnVlKE5CLmNvbXBhcmVVSW50NjQoLTEsIDEpID4gMCk7CisJCWFzc2VydFRydWUoTkIuY29tcGFyZVVJbnQ2NCgxLCAtMSkgPCAwKTsKKwl9CisKKwlAVGVzdAogCXB1YmxpYyB2b2lkIHRlc3REZWNvZGVVSW50MTYoKSB7CiAJCWFzc2VydEVxdWFscygwLCBOQi5kZWNvZGVVSW50MTYoYigwLCAwKSwgMCkpOwogCQlhc3NlcnRFcXVhbHMoMCwgTkIuZGVjb2RlVUludDE2KHBhZGIoMywgMCwgMCksIDMpKTsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9vcmcuZWNsaXBzZS5qZ2l0LnVpL01FVEEtSU5GL01BTklGRVNULk1GCmluZGV4IGY5ZTFhMzkuLjkzNDE4ZTcgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQudWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIGIvb3JnLmVjbGlwc2UuamdpdC51aS9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMywxNCArMywxNCBAQAogQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgogQnVuZGxlLU5hbWU6ICVwbHVnaW5fbmFtZQogQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuamdpdC51aQotQnVuZGxlLVZlcnNpb246IDQuMi4xLnF1YWxpZmllcgorQnVuZGxlLVZlcnNpb246IDQuMy4wLnF1YWxpZmllcgogQnVuZGxlLVZlbmRvcjogJXByb3ZpZGVyX25hbWUKIEJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKYXZhU0UtMS43Ci1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuamdpdC5hd3R1aTt2ZXJzaW9uPSI0LjIuMSIKLUltcG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5qZ2l0LmVycm9yczt2ZXJzaW9uPSJbNC4yLjEsNC4zLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmxpYjt2ZXJzaW9uPSJbNC4yLjEsNC4zLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lm5sczt2ZXJzaW9uPSJbNC4yLjEsNC4zLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnJldnBsb3Q7dmVyc2lvbj0iWzQuMi4xLDQuMy4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrO3ZlcnNpb249Ils0LjIuMSw0LjMuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0O3ZlcnNpb249Ils0LjIuMSw0LjMuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQudXRpbDt2ZXJzaW9uPSJbNC4yLjEsNC4zLjApIgorRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmpnaXQuYXd0dWk7dmVyc2lvbj0iNC4zLjAiCitJbXBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuamdpdC5lcnJvcnM7dmVyc2lvbj0iWzQuMy4wLDQuNC4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5saWI7dmVyc2lvbj0iWzQuMy4wLDQuNC4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5ubHM7dmVyc2lvbj0iWzQuMy4wLDQuNC4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5yZXZwbG90O3ZlcnNpb249Ils0LjMuMCw0LjQuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQucmV2d2Fsazt2ZXJzaW9uPSJbNC4zLjAsNC40LjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydDt2ZXJzaW9uPSJbNC4zLjAsNC40LjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnV0aWw7dmVyc2lvbj0iWzQuMy4wLDQuNC4wKSIKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudWkvcG9tLnhtbCBiL29yZy5lY2xpcHNlLmpnaXQudWkvcG9tLnhtbAppbmRleCBjODBmMzFmLi5jY2IwYzk1IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnVpL3BvbS54bWwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC51aS9wb20ueG1sCkBAIC01Miw3ICs1Miw3IEBACiAgIDxwYXJlbnQ+CiAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KICAgICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0LXBhcmVudDwvYXJ0aWZhY3RJZD4KLSAgICA8dmVyc2lvbj40LjIuMS1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICA8dmVyc2lvbj40LjMuMC1TTkFQU0hPVDwvdmVyc2lvbj4KICAgPC9wYXJlbnQ+CiAKICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC51aTwvYXJ0aWZhY3RJZD4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvLnNldHRpbmdzLy5hcGlfZmlsdGVycyBiL29yZy5lY2xpcHNlLmpnaXQvLnNldHRpbmdzLy5hcGlfZmlsdGVycwppbmRleCAzNjA0MWY4Li5hNTAwMGRkIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0Ly5zZXR0aW5ncy8uYXBpX2ZpbHRlcnMKKysrIGIvb3JnLmVjbGlwc2UuamdpdC8uc2V0dGluZ3MvLmFwaV9maWx0ZXJzCkBAIC0xLDExNSArMSwxOCBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CiA8Y29tcG9uZW50IGlkPSJvcmcuZWNsaXBzZS5qZ2l0IiB2ZXJzaW9uPSIyIj4KLSAgICA8cmVzb3VyY2UgcGF0aD0iTUVUQS1JTkYvTUFOSUZFU1QuTUYiIHR5cGU9Im9yZy5lY2xpcHNlLmpnaXQubGliLkZpbGVUcmVlRW50cnkiPgotICAgICAgICA8ZmlsdGVyIGlkPSIzMDUzMjQxMzQiPgotICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJvcmcuZWNsaXBzZS5qZ2l0LmxpYi5GaWxlVHJlZUVudHJ5Ii8+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9Im9yZy5lY2xpcHNlLmpnaXRfNC4yLjAiLz4KLSAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgIDwvZmlsdGVyPgotICAgIDwvcmVzb3VyY2U+Ci0gICAgPHJlc291cmNlIHBhdGg9Ik1FVEEtSU5GL01BTklGRVNULk1GIiB0eXBlPSJvcmcuZWNsaXBzZS5qZ2l0LmxpYi5HaXRsaW5rVHJlZUVudHJ5Ij4KLSAgICAgICAgPGZpbHRlciBpZD0iMzA1MzI0MTM0Ij4KLSAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0ib3JnLmVjbGlwc2UuamdpdC5saWIuR2l0bGlua1RyZWVFbnRyeSIvPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJvcmcuZWNsaXBzZS5qZ2l0XzQuMi4wIi8+Ci0gICAgICAgICAgICA8L21lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICA8L2ZpbHRlcj4KLSAgICA8L3Jlc291cmNlPgotICAgIDxyZXNvdXJjZSBwYXRoPSJNRVRBLUlORi9NQU5JRkVTVC5NRiIgdHlwZT0ib3JnLmVjbGlwc2UuamdpdC5saWIuU3ltbGlua1RyZWVFbnRyeSI+Ci0gICAgICAgIDxmaWx0ZXIgaWQ9IjMwNTMyNDEzNCI+Ci0gICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9Im9yZy5lY2xpcHNlLmpnaXQubGliLlN5bWxpbmtUcmVlRW50cnkiLz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0ib3JnLmVjbGlwc2UuamdpdF80LjIuMCIvPgotICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgPC9maWx0ZXI+Ci0gICAgPC9yZXNvdXJjZT4KLSAgICA8cmVzb3VyY2UgcGF0aD0iTUVUQS1JTkYvTUFOSUZFU1QuTUYiIHR5cGU9Im9yZy5lY2xpcHNlLmpnaXQubGliLlRyZWUiPgotICAgICAgICA8ZmlsdGVyIGlkPSIzMDUzMjQxMzQiPgotICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJvcmcuZWNsaXBzZS5qZ2l0LmxpYi5UcmVlIi8+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9Im9yZy5lY2xpcHNlLmpnaXRfNC4yLjAiLz4KLSAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgIDwvZmlsdGVyPgotICAgIDwvcmVzb3VyY2U+Ci0gICAgPHJlc291cmNlIHBhdGg9Ik1FVEEtSU5GL01BTklGRVNULk1GIiB0eXBlPSJvcmcuZWNsaXBzZS5qZ2l0LmxpYi5UcmVlRW50cnkiPgotICAgICAgICA8ZmlsdGVyIGlkPSIzMDUzMjQxMzQiPgotICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJvcmcuZWNsaXBzZS5qZ2l0LmxpYi5UcmVlRW50cnkiLz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0ib3JnLmVjbGlwc2UuamdpdF80LjIuMCIvPgotICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgPC9maWx0ZXI+Ci0gICAgPC9yZXNvdXJjZT4KICAgICA8cmVzb3VyY2UgcGF0aD0ic3JjL29yZy9lY2xpcHNlL2pnaXQvYXR0cmlidXRlcy9BdHRyaWJ1dGVzTm9kZS5qYXZhIiB0eXBlPSJvcmcuZWNsaXBzZS5qZ2l0LmF0dHJpYnV0ZXMuQXR0cmlidXRlc05vZGUiPgotICAgICAgICA8ZmlsdGVyIGNvbW1lbnQ9ImF0dHJpYnV0ZXMgd2VyZW4ndCByZWFsbHkgdXNhYmxlIGluIGVhcmxpZXIgdmVyc2lvbnMiIGlkPSIzMzg3OTI1NDYiPgorICAgICAgICA8ZmlsdGVyIGNvbW1lbnQ9Im1vdmVkIHRvIG5ldyBBdHRyaWJ1dGVzTWFuYWdlciIgaWQ9IjMzODc5MjU0NiI+CiAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudHM+CiAgICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9Im9yZy5lY2xpcHNlLmpnaXQuYXR0cmlidXRlcy5BdHRyaWJ1dGVzTm9kZSIvPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJnZXRBdHRyaWJ1dGVzKFN0cmluZywgYm9vbGVhbiwgTWFwJmx0O1N0cmluZyxBdHRyaWJ1dGUmZ3Q7KSIvPgorICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJnZXRBdHRyaWJ1dGVzKFN0cmluZywgYm9vbGVhbiwgQXR0cmlidXRlcykiLz4KICAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+CiAgICAgICAgIDwvZmlsdGVyPgogICAgIDwvcmVzb3VyY2U+Ci0gICAgPHJlc291cmNlIHBhdGg9InNyYy9vcmcvZWNsaXBzZS9qZ2l0L2xpYi9CaXRtYXBJbmRleC5qYXZhIiB0eXBlPSJvcmcuZWNsaXBzZS5qZ2l0LmxpYi5CaXRtYXBJbmRleCRCaXRtYXBCdWlsZGVyIj4KLSAgICAgICAgPGZpbHRlciBjb21tZW50PSJpbnRlcmZhY2UgaXMgaW1wbGVtZW50ZWQgYnkgZXh0ZW5kZXJzIGJ1dCBub3QgY2xpZW50cyBvZiB0aGUgQVBJIiBpZD0iNDAzODA0MjA0Ij4KKyAgICA8cmVzb3VyY2UgcGF0aD0ic3JjL29yZy9lY2xpcHNlL2pnaXQvYXR0cmlidXRlcy9BdHRyaWJ1dGVzUnVsZS5qYXZhIiB0eXBlPSJvcmcuZWNsaXBzZS5qZ2l0LmF0dHJpYnV0ZXMuQXR0cmlidXRlc1J1bGUiPgorICAgICAgICA8ZmlsdGVyIGNvbW1lbnQ9InVzZWQgb25seSBpbiB0ZXN0czogYmVhbiBuYW1pbmciIGlkPSIzMzg3OTI1NDYiPgogICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJvcmcuZWNsaXBzZS5qZ2l0LmxpYi5CaXRtYXBJbmRleC5CaXRtYXBCdWlsZGVyIi8+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9ImFkZE9iamVjdChBbnlPYmplY3RJZCwgaW50KSIvPgotICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgPC9maWx0ZXI+Ci0gICAgICAgIDxmaWx0ZXIgY29tbWVudD0iaW50ZXJmYWNlIGlzIGltcGxlbWVudGVkIGJ5IGV4dGVuZGVycyBidXQgbm90IGNsaWVudHMgb2YgdGhlIEFQSSIgaWQ9IjQwMzgwNDIwNCI+Ci0gICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9Im9yZy5lY2xpcHNlLmpnaXQubGliLkJpdG1hcEluZGV4LkJpdG1hcEJ1aWxkZXIiLz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0iZ2V0Qml0bWFwSW5kZXgoKSIvPgotICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgPC9maWx0ZXI+Ci0gICAgPC9yZXNvdXJjZT4KLSAgICA8cmVzb3VyY2UgcGF0aD0ic3JjL29yZy9lY2xpcHNlL2pnaXQvbGliL1JlcG9zaXRvcnkuamF2YSIgdHlwZT0ib3JnLmVjbGlwc2UuamdpdC5saWIuUmVwb3NpdG9yeSI+Ci0gICAgICAgIDxmaWx0ZXIgY29tbWVudD0iT25seSBpbXBsZW1lbnRvcnMgb2YgUmVwb3NpdG9yeSBhcmUgYWZmZWN0ZWQuIFRoYXQgc2hvdWxkIGJlIGFsbG93ZWQiIGlkPSIzMzY2OTUzMzciPgotICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJvcmcuZWNsaXBzZS5qZ2l0LmxpYi5SZXBvc2l0b3J5Ii8+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9ImNyZWF0ZUF0dHJpYnV0ZXNOb2RlUHJvdmlkZXIoKSIvPgotICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgPC9maWx0ZXI+Ci0gICAgPC9yZXNvdXJjZT4KLSAgICA8cmVzb3VyY2UgcGF0aD0ic3JjL29yZy9lY2xpcHNlL2pnaXQvdHJhbnNwb3J0L1B1c2hDZXJ0aWZpY2F0ZS5qYXZhIiB0eXBlPSJvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5QdXNoQ2VydGlmaWNhdGUiPgotICAgICAgICA8ZmlsdGVyIGNvbW1lbnQ9IlB1c2hDZXJ0aWZpY2F0ZSB3YXNuJ3QgcmVhbGx5IHVzYWJsZSBpbiA0LjAiIGlkPSIzMzg3MjI5MDciPgotICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5QdXNoQ2VydGlmaWNhdGUiLz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0iUHVzaENlcnRpZmljYXRlKCkiLz4KLSAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgIDwvZmlsdGVyPgotICAgICAgICA8ZmlsdGVyIGNvbW1lbnQ9IlB1c2hDZXJ0aWZpY2F0ZSB3YXNuJ3QgcmVhbGx5IHVzYWJsZSBpbiA0LjAiIGlkPSIzMzg3OTI1NDYiPgotICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5QdXNoQ2VydGlmaWNhdGUiLz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0iZ2V0Q29tbWFuZExpc3QoKSIvPgotICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgPC9maWx0ZXI+Ci0gICAgPC9yZXNvdXJjZT4KLSAgICA8cmVzb3VyY2UgcGF0aD0ic3JjL29yZy9lY2xpcHNlL2pnaXQvdHJhbnNwb3J0L1B1c2hDZXJ0aWZpY2F0ZVBhcnNlci5qYXZhIiB0eXBlPSJvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5QdXNoQ2VydGlmaWNhdGVQYXJzZXIiPgotICAgICAgICA8ZmlsdGVyIGNvbW1lbnQ9IlB1c2hDZXJ0aWZpY2F0ZXMgaGF2ZW4ndCBiZWVuIHJlYWxseSB1c2FibGUgaW4gNC4wIiBpZD0iMzM4ODQ5OTIzIj4KLSAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0ib3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuUHVzaENlcnRpZmljYXRlUGFyc2VyIi8+Ci0gICAgICAgICAgICA8L21lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICA8L2ZpbHRlcj4KLSAgICA8L3Jlc291cmNlPgotICAgIDxyZXNvdXJjZSBwYXRoPSJzcmMvb3JnL2VjbGlwc2UvamdpdC90cmVld2Fsay9Xb3JraW5nVHJlZUl0ZXJhdG9yLmphdmEiIHR5cGU9Im9yZy5lY2xpcHNlLmpnaXQudHJlZXdhbGsuV29ya2luZ1RyZWVJdGVyYXRvciI+Ci0gICAgICAgIDxmaWx0ZXIgY29tbWVudD0iYXR0cmlidXRlcyB3ZXJlbid0IHJlYWxseSB1c2FibGUgaW4gZWFybGllciB2ZXJzaW9ucyIgaWQ9IjMzODc5MjU0NiI+Ci0gICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9Im9yZy5lY2xpcHNlLmpnaXQudHJlZXdhbGsuV29ya2luZ1RyZWVJdGVyYXRvciIvPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJnZXRHbG9iYWxBdHRyaWJ1dGVzTm9kZSgpIi8+Ci0gICAgICAgICAgICA8L21lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICA8L2ZpbHRlcj4KLSAgICAgICAgPGZpbHRlciBjb21tZW50PSJhdHRyaWJ1dGVzIHdlcmVuJ3QgcmVhbGx5IHVzYWJsZSBpbiBlYXJsaWVyIHZlcnNpb25zIiBpZD0iMzM4NzkyNTQ2Ij4KLSAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0ib3JnLmVjbGlwc2UuamdpdC50cmVld2Fsay5Xb3JraW5nVHJlZUl0ZXJhdG9yIi8+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9ImdldEluZm9BdHRyaWJ1dGVzTm9kZSgpIi8+Ci0gICAgICAgICAgICA8L21lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICA8L2ZpbHRlcj4KLSAgICA8L3Jlc291cmNlPgotICAgIDxyZXNvdXJjZSBwYXRoPSJzcmMvb3JnL2VjbGlwc2UvamdpdC91dGlsL0ZpbGVVdGlscy5qYXZhIiB0eXBlPSJvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuRmlsZVV0aWxzIj4KLSAgICAgICAgPGZpbHRlciBpZD0iMzM4NzkyNTQ2Ij4KLSAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0ib3JnLmVjbGlwc2UuamdpdC51dGlsLkZpbGVVdGlscyIvPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJjcmVhdGVTeW1MaW5rKEZpbGUsIFN0cmluZykiLz4KKyAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0ib3JnLmVjbGlwc2UuamdpdC5hdHRyaWJ1dGVzLkF0dHJpYnV0ZXNSdWxlIi8+CisgICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9ImRpck9ubHkoKSIvPgogICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KICAgICAgICAgPC9maWx0ZXI+CiAgICAgPC9yZXNvdXJjZT4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9vcmcuZWNsaXBzZS5qZ2l0L01FVEEtSU5GL01BTklGRVNULk1GCmluZGV4IGQwZjAzZmYuLjNlMTU1YTcgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMiwxMiArMiwxMiBAQAogQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgogQnVuZGxlLU5hbWU6ICVwbHVnaW5fbmFtZQogQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuamdpdAotQnVuZGxlLVZlcnNpb246IDQuMi4xLnF1YWxpZmllcgorQnVuZGxlLVZlcnNpb246IDQuMy4wLnF1YWxpZmllcgogQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCiBCdW5kbGUtVmVuZG9yOiAlcHJvdmlkZXJfbmFtZQogQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5qZ2l0LmFubm90YXRpb25zO3ZlcnNpb249IjQuMi4xIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmFwaTt2ZXJzaW9uPSI0LjIuMSI7CitFeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuamdpdC5hbm5vdGF0aW9uczt2ZXJzaW9uPSI0LjMuMCIsCisgb3JnLmVjbGlwc2UuamdpdC5hcGk7dmVyc2lvbj0iNC4zLjAiOwogICB1c2VzOj0ib3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrLAogICAgb3JnLmVjbGlwc2UuamdpdC50cmVld2Fsay5maWx0ZXIsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LmRpZmYsCkBAIC0yMSw1NSArMjEsNTcgQEAKICAgIG9yZy5lY2xpcHNlLmpnaXQuc3VibW9kdWxlLAogICAgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQsCiAgICBvcmcuZWNsaXBzZS5qZ2l0Lm1lcmdlIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmFwaS5lcnJvcnM7dmVyc2lvbj0iNC4yLjEiO3VzZXM6PSJvcmcuZWNsaXBzZS5qZ2l0LmxpYixvcmcuZWNsaXBzZS5qZ2l0LmVycm9ycyIsCi0gb3JnLmVjbGlwc2UuamdpdC5hdHRyaWJ1dGVzO3ZlcnNpb249IjQuMi4xIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmJsYW1lO3ZlcnNpb249IjQuMi4xIjsKKyBvcmcuZWNsaXBzZS5qZ2l0LmFwaS5lcnJvcnM7dmVyc2lvbj0iNC4zLjAiO3VzZXM6PSJvcmcuZWNsaXBzZS5qZ2l0LmxpYixvcmcuZWNsaXBzZS5qZ2l0LmVycm9ycyIsCisgb3JnLmVjbGlwc2UuamdpdC5hdHRyaWJ1dGVzO3ZlcnNpb249IjQuMy4wIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmJsYW1lO3ZlcnNpb249IjQuMy4wIjsKICAgdXNlczo9Im9yZy5lY2xpcHNlLmpnaXQubGliLAogICAgb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrLAogICAgb3JnLmVjbGlwc2UuamdpdC50cmVld2Fsay5maWx0ZXIsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LmRpZmYiLAotIG9yZy5lY2xpcHNlLmpnaXQuZGlmZjt2ZXJzaW9uPSI0LjIuMSI7Cisgb3JnLmVjbGlwc2UuamdpdC5kaWZmO3ZlcnNpb249IjQuMy4wIjsKICAgdXNlczo9Im9yZy5lY2xpcHNlLmpnaXQucGF0Y2gsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LmxpYiwKICAgIG9yZy5lY2xpcHNlLmpnaXQudHJlZXdhbGssCiAgICBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGssCiAgICBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrLmZpbHRlciwKICAgIG9yZy5lY2xpcHNlLmpnaXQudXRpbCIsCi0gb3JnLmVjbGlwc2UuamdpdC5kaXJjYWNoZTt2ZXJzaW9uPSI0LjIuMSI7Cisgb3JnLmVjbGlwc2UuamdpdC5kaXJjYWNoZTt2ZXJzaW9uPSI0LjMuMCI7CiAgIHVzZXM6PSJvcmcuZWNsaXBzZS5qZ2l0LmxpYiwKICAgIG9yZy5lY2xpcHNlLmpnaXQudHJlZXdhbGssCiAgICBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LmV2ZW50cywKICAgIG9yZy5lY2xpcHNlLmpnaXQuYXR0cmlidXRlcyIsCi0gb3JnLmVjbGlwc2UuamdpdC5lcnJvcnM7dmVyc2lvbj0iNC4yLjEiOworIG9yZy5lY2xpcHNlLmpnaXQuZXJyb3JzO3ZlcnNpb249IjQuMy4wIjsKICAgdXNlczo9Im9yZy5lY2xpcHNlLmpnaXQubGliLAogICAgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLnBhY2ssCiAgICBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydCwKICAgIG9yZy5lY2xpcHNlLmpnaXQuZGlyY2FjaGUiLAotIG9yZy5lY2xpcHNlLmpnaXQuZXZlbnRzO3ZlcnNpb249IjQuMi4xIjt1c2VzOj0ib3JnLmVjbGlwc2UuamdpdC5saWIiLAotIG9yZy5lY2xpcHNlLmpnaXQuZm5tYXRjaDt2ZXJzaW9uPSI0LjIuMSIsCi0gb3JnLmVjbGlwc2UuamdpdC5naXRyZXBvO3ZlcnNpb249IjQuMi4xIjsKKyBvcmcuZWNsaXBzZS5qZ2l0LmV2ZW50czt2ZXJzaW9uPSI0LjMuMCI7dXNlczo9Im9yZy5lY2xpcHNlLmpnaXQubGliIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmZubWF0Y2g7dmVyc2lvbj0iNC4zLjAiLAorIG9yZy5lY2xpcHNlLmpnaXQuZ2l0cmVwbzt2ZXJzaW9uPSI0LjMuMCI7CiAgIHVzZXM6PSJvcmcuZWNsaXBzZS5qZ2l0LmFwaSwKICAgIG9yZy5lY2xpcHNlLmpnaXQubGliLAogICAgb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrLAogICAgb3JnLnhtbC5zYXguaGVscGVycywKICAgIG9yZy54bWwuc2F4IiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmdpdHJlcG8uaW50ZXJuYWw7dmVyc2lvbj0iNC4yLjEiO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuamdpdC5ob29rczt2ZXJzaW9uPSI0LjIuMSI7dXNlczo9Im9yZy5lY2xpcHNlLmpnaXQubGliIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lmlnbm9yZTt2ZXJzaW9uPSI0LjIuMSIsCi0gb3JnLmVjbGlwc2UuamdpdC5pZ25vcmUuaW50ZXJuYWw7dmVyc2lvbj0iNC4yLjEiO3gtZnJpZW5kczo9Im9yZy5lY2xpcHNlLmpnaXQudGVzdCIsCi0gb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbDt2ZXJzaW9uPSI0LjIuMSI7eC1mcmllbmRzOj0ib3JnLmVjbGlwc2UuamdpdC50ZXN0LG9yZy5lY2xpcHNlLmpnaXQuaHR0cC50ZXN0IiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UuZGZzO3ZlcnNpb249IjQuMi4xIjt4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS5qZ2l0LnRlc3Qsb3JnLmVjbGlwc2UuamdpdC5odHRwLnNlcnZlciIsCi0gb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLmZpbGU7dmVyc2lvbj0iNC4yLjEiOworIG9yZy5lY2xpcHNlLmpnaXQuZ2l0cmVwby5pbnRlcm5hbDt2ZXJzaW9uPSI0LjMuMCI7eC1pbnRlcm5hbDo9dHJ1ZSwKKyBvcmcuZWNsaXBzZS5qZ2l0Lmhvb2tzO3ZlcnNpb249IjQuMy4wIjt1c2VzOj0ib3JnLmVjbGlwc2UuamdpdC5saWIiLAorIG9yZy5lY2xpcHNlLmpnaXQuaWdub3JlO3ZlcnNpb249IjQuMy4wIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lmlnbm9yZS5pbnRlcm5hbDt2ZXJzaW9uPSI0LjMuMCI7eC1mcmllbmRzOj0ib3JnLmVjbGlwc2UuamdpdC50ZXN0IiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsO3ZlcnNpb249IjQuMy4wIjt4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS5qZ2l0LnRlc3Qsb3JnLmVjbGlwc2UuamdpdC5odHRwLnRlc3QiLAorIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwua2V0Y2g7dmVyc2lvbj0iNC4zLjAiO3gtZnJpZW5kczo9Im9yZy5lY2xpcHNlLmpnaXQuanVuaXQsb3JnLmVjbGlwc2UuamdpdC50ZXN0LG9yZy5lY2xpcHNlLmpnaXQucGdtIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UuZGZzO3ZlcnNpb249IjQuMy4wIjt4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS5qZ2l0LnRlc3Qsb3JnLmVjbGlwc2UuamdpdC5odHRwLnNlcnZlciIsCisgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLmZpbGU7dmVyc2lvbj0iNC4zLjAiOwogICB4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS5qZ2l0LnRlc3QsCiAgICBvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0LAogICAgb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5odHRwLAogICAgb3JnLmVjbGlwc2UuamdpdC5odHRwLnNlcnZlciwKLSAgIG9yZy5lY2xpcHNlLmpnaXQucGdtLnRlc3QsCi0gICBvcmcuZWNsaXBzZS5qZ2l0LnBnbSIsCi0gb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLnBhY2s7dmVyc2lvbj0iNC4yLjEiO3gtZnJpZW5kczo9Im9yZy5lY2xpcHNlLmpnaXQuanVuaXQsb3JnLmVjbGlwc2UuamdpdC50ZXN0LG9yZy5lY2xpcHNlLmpnaXQucGdtIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UucmVmdHJlZTt2ZXJzaW9uPSI0LjIuMSI7eC1mcmllbmRzOj0ib3JnLmVjbGlwc2UuamdpdC5qdW5pdCxvcmcuZWNsaXBzZS5qZ2l0LnRlc3Qsb3JnLmVjbGlwc2UuamdpdC5wZ20iLAotIG9yZy5lY2xpcHNlLmpnaXQubGliO3ZlcnNpb249IjQuMi4xIjsKKyAgIG9yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlciwKKyAgIG9yZy5lY2xpcHNlLmpnaXQucGdtLAorICAgb3JnLmVjbGlwc2UuamdpdC5wZ20udGVzdCIsCisgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLnBhY2s7dmVyc2lvbj0iNC4zLjAiO3gtZnJpZW5kczo9Im9yZy5lY2xpcHNlLmpnaXQuanVuaXQsb3JnLmVjbGlwc2UuamdpdC50ZXN0LG9yZy5lY2xpcHNlLmpnaXQucGdtIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UucmVmdHJlZTt2ZXJzaW9uPSI0LjMuMCI7eC1mcmllbmRzOj0ib3JnLmVjbGlwc2UuamdpdC5qdW5pdCxvcmcuZWNsaXBzZS5qZ2l0LnRlc3Qsb3JnLmVjbGlwc2UuamdpdC5wZ20iLAorIG9yZy5lY2xpcHNlLmpnaXQubGliO3ZlcnNpb249IjQuMy4wIjsKICAgdXNlczo9Im9yZy5lY2xpcHNlLmpnaXQucmV2d2FsaywKICAgIG9yZy5lY2xpcHNlLmpnaXQudHJlZXdhbGsuZmlsdGVyLAogICAgb3JnLmVjbGlwc2UuamdpdC51dGlsLApAQCAtNzksMzIgKzgxLDMyIEBACiAgICBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrLAogICAgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LnN1Ym1vZHVsZSIsCi0gb3JnLmVjbGlwc2UuamdpdC5tZXJnZTt2ZXJzaW9uPSI0LjIuMSI7Cisgb3JnLmVjbGlwc2UuamdpdC5tZXJnZTt2ZXJzaW9uPSI0LjMuMCI7CiAgIHVzZXM6PSJvcmcuZWNsaXBzZS5qZ2l0LmxpYiwKICAgIG9yZy5lY2xpcHNlLmpnaXQudHJlZXdhbGssCiAgICBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGssCiAgICBvcmcuZWNsaXBzZS5qZ2l0LmRpZmYsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LmRpcmNhY2hlLAogICAgb3JnLmVjbGlwc2UuamdpdC5hcGkiLAotIG9yZy5lY2xpcHNlLmpnaXQubmxzO3ZlcnNpb249IjQuMi4xIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lm5vdGVzO3ZlcnNpb249IjQuMi4xIjsKKyBvcmcuZWNsaXBzZS5qZ2l0Lm5sczt2ZXJzaW9uPSI0LjMuMCIsCisgb3JnLmVjbGlwc2UuamdpdC5ub3Rlczt2ZXJzaW9uPSI0LjMuMCI7CiAgIHVzZXM6PSJvcmcuZWNsaXBzZS5qZ2l0LmxpYiwKICAgIG9yZy5lY2xpcHNlLmpnaXQudHJlZXdhbGssCiAgICBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGssCiAgICBvcmcuZWNsaXBzZS5qZ2l0Lm1lcmdlIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnBhdGNoO3ZlcnNpb249IjQuMi4xIjt1c2VzOj0ib3JnLmVjbGlwc2UuamdpdC5saWIsb3JnLmVjbGlwc2UuamdpdC5kaWZmIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnJldnBsb3Q7dmVyc2lvbj0iNC4yLjEiO3VzZXM6PSJvcmcuZWNsaXBzZS5qZ2l0LmxpYixvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGsiLAotIG9yZy5lY2xpcHNlLmpnaXQucmV2d2Fsazt2ZXJzaW9uPSI0LjIuMSI7Cisgb3JnLmVjbGlwc2UuamdpdC5wYXRjaDt2ZXJzaW9uPSI0LjMuMCI7dXNlczo9Im9yZy5lY2xpcHNlLmpnaXQubGliLG9yZy5lY2xpcHNlLmpnaXQuZGlmZiIsCisgb3JnLmVjbGlwc2UuamdpdC5yZXZwbG90O3ZlcnNpb249IjQuMy4wIjt1c2VzOj0ib3JnLmVjbGlwc2UuamdpdC5saWIsb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGs7dmVyc2lvbj0iNC4zLjAiOwogICB1c2VzOj0ib3JnLmVjbGlwc2UuamdpdC5saWIsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrLAogICAgb3JnLmVjbGlwc2UuamdpdC50cmVld2Fsay5maWx0ZXIsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LmRpZmYsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGsuZmlsdGVyIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGsuZmlsdGVyO3ZlcnNpb249IjQuMi4xIjt1c2VzOj0ib3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrLG9yZy5lY2xpcHNlLmpnaXQubGliLG9yZy5lY2xpcHNlLmpnaXQudXRpbCIsCi0gb3JnLmVjbGlwc2UuamdpdC5zdG9yYWdlLmZpbGU7dmVyc2lvbj0iNC4yLjEiO3VzZXM6PSJvcmcuZWNsaXBzZS5qZ2l0LmxpYixvcmcuZWNsaXBzZS5qZ2l0LnV0aWwiLAotIG9yZy5lY2xpcHNlLmpnaXQuc3RvcmFnZS5wYWNrO3ZlcnNpb249IjQuMi4xIjt1c2VzOj0ib3JnLmVjbGlwc2UuamdpdC5saWIiLAotIG9yZy5lY2xpcHNlLmpnaXQuc3VibW9kdWxlO3ZlcnNpb249IjQuMi4xIjt1c2VzOj0ib3JnLmVjbGlwc2UuamdpdC5saWIsb3JnLmVjbGlwc2UuamdpdC50cmVld2Fsay5maWx0ZXIsb3JnLmVjbGlwc2UuamdpdC50cmVld2FsayIsCi0gb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQ7dmVyc2lvbj0iNC4yLjEiOworIG9yZy5lY2xpcHNlLmpnaXQucmV2d2Fsay5maWx0ZXI7dmVyc2lvbj0iNC4zLjAiO3VzZXM6PSJvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGssb3JnLmVjbGlwc2UuamdpdC5saWIsb3JnLmVjbGlwc2UuamdpdC51dGlsIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnN0b3JhZ2UuZmlsZTt2ZXJzaW9uPSI0LjMuMCI7dXNlczo9Im9yZy5lY2xpcHNlLmpnaXQubGliLG9yZy5lY2xpcHNlLmpnaXQudXRpbCIsCisgb3JnLmVjbGlwc2UuamdpdC5zdG9yYWdlLnBhY2s7dmVyc2lvbj0iNC4zLjAiO3VzZXM6PSJvcmcuZWNsaXBzZS5qZ2l0LmxpYiIsCisgb3JnLmVjbGlwc2UuamdpdC5zdWJtb2R1bGU7dmVyc2lvbj0iNC4zLjAiO3VzZXM6PSJvcmcuZWNsaXBzZS5qZ2l0LmxpYixvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrLmZpbHRlcixvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydDt2ZXJzaW9uPSI0LjMuMCI7CiAgIHVzZXM6PSJvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5yZXNvbHZlciwKICAgIG9yZy5lY2xpcHNlLmpnaXQucmV2d2FsaywKICAgIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5wYWNrLApAQCAtMTE2LDIyICsxMTgsMjIgQEAKICAgIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0Lmh0dHAsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LmVycm9ycywKICAgIG9yZy5lY2xpcHNlLmpnaXQuc3RvcmFnZS5wYWNrIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5odHRwO3ZlcnNpb249IjQuMi4xIjt1c2VzOj0iamF2YXgubmV0LnNzbCIsCi0gb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQucmVzb2x2ZXI7dmVyc2lvbj0iNC4yLjEiO3VzZXM6PSJvcmcuZWNsaXBzZS5qZ2l0LmxpYixvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydCIsCi0gb3JnLmVjbGlwc2UuamdpdC50cmVld2Fsazt2ZXJzaW9uPSI0LjIuMSI7Cisgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuaHR0cDt2ZXJzaW9uPSI0LjMuMCI7dXNlczo9ImphdmF4Lm5ldC5zc2wiLAorIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LnJlc29sdmVyO3ZlcnNpb249IjQuMy4wIjt1c2VzOj0ib3JnLmVjbGlwc2UuamdpdC5saWIsb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQiLAorIG9yZy5lY2xpcHNlLmpnaXQudHJlZXdhbGs7dmVyc2lvbj0iNC4zLjAiOwogICB1c2VzOj0ib3JnLmVjbGlwc2UuamdpdC5saWIsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGssCiAgICBvcmcuZWNsaXBzZS5qZ2l0LmF0dHJpYnV0ZXMsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrLmZpbHRlciwKICAgIG9yZy5lY2xpcHNlLmpnaXQudXRpbCwKICAgIG9yZy5lY2xpcHNlLmpnaXQuZGlyY2FjaGUiLAotIG9yZy5lY2xpcHNlLmpnaXQudHJlZXdhbGsuZmlsdGVyO3ZlcnNpb249IjQuMi4xIjt1c2VzOj0ib3JnLmVjbGlwc2UuamdpdC50cmVld2FsayIsCi0gb3JnLmVjbGlwc2UuamdpdC51dGlsO3ZlcnNpb249IjQuMi4xIjsKKyBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrLmZpbHRlcjt2ZXJzaW9uPSI0LjMuMCI7dXNlczo9Im9yZy5lY2xpcHNlLmpnaXQudHJlZXdhbGsiLAorIG9yZy5lY2xpcHNlLmpnaXQudXRpbDt2ZXJzaW9uPSI0LjMuMCI7CiAgIHVzZXM6PSJvcmcuZWNsaXBzZS5qZ2l0LmxpYiwKICAgIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0Lmh0dHAsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LnN0b3JhZ2UuZmlsZSwKICAgIG9yZy5pZXRmLmpnc3MiLAotIG9yZy5lY2xpcHNlLmpnaXQudXRpbC5pbzt2ZXJzaW9uPSI0LjIuMSIKKyBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuaW87dmVyc2lvbj0iNC4zLjAiCiBCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSmF2YVNFLTEuNwogUmVxdWlyZS1CdW5kbGU6IGNvbS5qY3JhZnQuanNjaDtidW5kbGUtdmVyc2lvbj0iWzAuMS4zNywwLjIuMCkiCiBJbXBvcnQtUGFja2FnZTogY29tLmdvb2dsZWNvZGUuamF2YWV3YWg7dmVyc2lvbj0iWzAuNy45LDAuOC4wKSIsCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L01FVEEtSU5GL1NPVVJDRS1NQU5JRkVTVC5NRiBiL29yZy5lY2xpcHNlLmpnaXQvTUVUQS1JTkYvU09VUkNFLU1BTklGRVNULk1GCmluZGV4IDk4ZWRlMzEuLjZjZGYxMjIgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQvTUVUQS1JTkYvU09VUkNFLU1BTklGRVNULk1GCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvTUVUQS1JTkYvU09VUkNFLU1BTklGRVNULk1GCkBAIC0zLDUgKzMsNSBAQAogQnVuZGxlLU5hbWU6IG9yZy5lY2xpcHNlLmpnaXQgLSBTb3VyY2VzCiBCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qZ2l0LnNvdXJjZQogQnVuZGxlLVZlbmRvcjogRWNsaXBzZS5vcmcgLSBKR2l0Ci1CdW5kbGUtVmVyc2lvbjogNC4yLjEucXVhbGlmaWVyCi1FY2xpcHNlLVNvdXJjZUJ1bmRsZTogb3JnLmVjbGlwc2UuamdpdDt2ZXJzaW9uPSI0LjIuMS5xdWFsaWZpZXIiO3Jvb3RzPSIuIgorQnVuZGxlLVZlcnNpb246IDQuMy4wLnF1YWxpZmllcgorRWNsaXBzZS1Tb3VyY2VCdW5kbGU6IG9yZy5lY2xpcHNlLmpnaXQ7dmVyc2lvbj0iNC4zLjAucXVhbGlmaWVyIjtyb290cz0iLiIKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvcG9tLnhtbCBiL29yZy5lY2xpcHNlLmpnaXQvcG9tLnhtbAppbmRleCBlOTMxOTkwLi5hNjVlYzk2IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0L3BvbS54bWwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9wb20ueG1sCkBAIC01Myw3ICs1Myw3IEBACiAgIDxwYXJlbnQ+CiAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KICAgICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0LXBhcmVudDwvYXJ0aWZhY3RJZD4KLSAgICA8dmVyc2lvbj40LjIuMS1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICA8dmVyc2lvbj40LjMuMC1TTkFQU0hPVDwvdmVyc2lvbj4KICAgPC9wYXJlbnQ+CiAKICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdDwvYXJ0aWZhY3RJZD4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvcmVzb3VyY2VzL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwva2V0Y2gvS2V0Y2hUZXh0LnByb3BlcnRpZXMgYi9vcmcuZWNsaXBzZS5qZ2l0L3Jlc291cmNlcy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL2tldGNoL0tldGNoVGV4dC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmYmI3Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3Jlc291cmNlcy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL2tldGNoL0tldGNoVGV4dC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTMgQEAKK2FjY2VwdGVkPWFjY2VwdGVkLgorY2Fubm90RmV0Y2hGcm9tTG9jYWxSZXBsaWNhPWNhbm5vdCBmZXRjaCBmcm9tIExvY2FsUmVwbGljYQorZmFpbGVkPWZhaWxlZCEKK2ludmFsaWRGb2xsb3dlclVyaT1pbnZhbGlkIGZvbGxvd2VyIFVSSQorbGVhZGVyRmFpbGVkVG9TdG9yZT1sZWFkZXIgZmFpbGVkIHRvIHN0b3JlCitsb2NhbFJlcGxpY2FSZXF1aXJlZD1Mb2NhbFJlcGxpY2EgaW5zdGFuY2UgaXMgcmVxdWlyZWQKK21pc21hdGNoZWRUeG5OYW1lc3BhY2U9bWlzbWF0Y2hlZCB0eG5OYW1lc3BhY2U7IGV4cGVjdGVkIHswfSBmb3VuZCB7MX0KK291dHNpZGVUeG5OYW1lc3BhY2U9cmVmIHswfSBpcyBvdXRzaWRlIG9mIHR4bk5hbWVzcGFjZSB7MX0KK3Byb3Bvc2luZ1VwZGF0ZXM9UHJvcG9zaW5nIHVwZGF0ZXMKK3F1ZXVlZFByb3Bvc2FsRmFpbGVkVG9BcHBseT1xdWV1ZWQgcHJvcG9zYWwgZmFpbGVkIHRvIGFwcGx5CitzdGFydGluZz1zdGFydGluZyEKK3Vuc3VwcG9ydGVkVm90ZXJDb3VudD11bnN1cHBvcnRlZCB2b3RlciBjb3VudCB7MH0sIGV4cGVjdGVkIG9uZSBvZiB7MX0KK3dhaXRpbmdGb3JRdWV1ZT1XYWl0aW5nIGZvciBxdWV1ZQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9hdHRyaWJ1dGVzL0F0dHJpYnV0ZXNIYW5kbGVyLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2F0dHJpYnV0ZXMvQXR0cmlidXRlc0hhbmRsZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWU0YWZkCi0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9hdHRyaWJ1dGVzL0F0dHJpYnV0ZXNIYW5kbGVyLmphdmEKQEAgLTAsMCArMSw0MzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUsIEl2YW4gTW90c2NoIDxpdmFuLm1vdHNjaEBic2lhZy5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2MS4wIHdoaWNoCisgKiBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgaXMgcmVwcm9kdWNlZCBiZWxvdywgYW5kIGlzCisgKiBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VkbC12MTAucGhwCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgSW5jLiBub3IgdGhlCisgKiAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCisgKiAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3IKKyAqICAgd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORAorICogQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKyAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGCisgKiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5qZ2l0LmF0dHJpYnV0ZXM7CisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5MaXN0SXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuYW5ub3RhdGlvbnMuTnVsbGFibGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5hdHRyaWJ1dGVzLkF0dHJpYnV0ZS5TdGF0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmRpcmNhY2hlLkRpckNhY2hlSXRlcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuRmlsZU1vZGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC50cmVld2Fsay5BYnN0cmFjdFRyZWVJdGVyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrLkNhbm9uaWNhbFRyZWVQYXJzZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC50cmVld2Fsay5UcmVlV2FsazsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrLldvcmtpbmdUcmVlSXRlcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC50cmVld2Fsay5UcmVlV2Fsay5PcGVyYXRpb25UeXBlOworCisvKioKKyAqIFRoZSBhdHRyaWJ1dGVzIGhhbmRsZXIga25vd3MgaG93IHRvIHJldHJpZXZlLCBwYXJzZSBhbmQgbWVyZ2UgYXR0cmlidXRlcyBmcm9tCisgKiB0aGUgdmFyaW91cyBnaXRhdHRyaWJ1dGVzIGZpbGVzLiBGdXJ0aGVybW9yZSBpdCBjb2xsZWN0cyBhbmQgZXhwYW5kcyBtYWNybworICogZXhwcmVzc2lvbnMuIFRoZSBtZXRob2Qge0BsaW5rICNnZXRBdHRyaWJ1dGVzKCl9IHlpZWxkcyB0aGUgcmVhZHkgcHJvY2Vzc2VkCisgKiBhdHRyaWJ1dGVzIGZvciB0aGUgY3VycmVudCBwYXRoIHJlcHJlc2VudGVkIGJ5IHRoZSB7QGxpbmsgVHJlZVdhbGt9CisgKiA8cD4KKyAqIFRoZSBpbXBsZW1lbnRhdGlvbiBpcyBiYXNlZCBvbiB0aGUgc3BlY2lmaWNhdGlvbnMgaW4KKyAqIGh0dHA6Ly9naXQtc2NtLmNvbS9kb2NzL2dpdGF0dHJpYnV0ZXMKKyAqCisgKiBAc2luY2UgNC4zCisgKi8KK3B1YmxpYyBjbGFzcyBBdHRyaWJ1dGVzSGFuZGxlciB7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE1BQ1JPX1BSRUZJWCA9ICJbYXR0cl0iOyAvLyROT04tTkxTLTEkCisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQklOQVJZX1JVTEVfS0VZID0gImJpbmFyeSI7IC8vJE5PTi1OTFMtMSQKKworCS8qKgorCSAqIFRoaXMgaXMgdGhlIGRlZmF1bHQgPGI+YmluYXJ5PC9iPiBydWxlIHRoYXQgaXMgcHJlc2VudCBpbiBhbnkgZ2l0IGZvbGRlcgorCSAqIDxjb2RlPlthdHRyXWJpbmFyeSAtZGlmZiAtbWVyZ2UgLXRleHQ8L2NvZGU+CisJICovCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgTGlzdDxBdHRyaWJ1dGU+IEJJTkFSWV9SVUxFX0FUVFJJQlVURVMgPSBuZXcgQXR0cmlidXRlc1J1bGUoCisJCQlNQUNST19QUkVGSVggKyBCSU5BUllfUlVMRV9LRVksICItZGlmZiAtbWVyZ2UgLXRleHQiKSAvLyROT04tTkxTLTEkCisJCQkJCS5nZXRBdHRyaWJ1dGVzKCk7CisKKwlwcml2YXRlIGZpbmFsIFRyZWVXYWxrIHRyZWVXYWxrOworCisJcHJpdmF0ZSBmaW5hbCBBdHRyaWJ1dGVzTm9kZSBnbG9iYWxOb2RlOworCisJcHJpdmF0ZSBmaW5hbCBBdHRyaWJ1dGVzTm9kZSBpbmZvTm9kZTsKKworCXByaXZhdGUgZmluYWwgTWFwPFN0cmluZywgTGlzdDxBdHRyaWJ1dGU+PiBleHBhbnNpb25zID0gbmV3IEhhc2hNYXA8PigpOworCisJLyoqCisJICogQ3JlYXRlIGFuIHtAbGluayBBdHRyaWJ1dGVzSGFuZGxlcn0gd2l0aCBkZWZhdWx0IHJ1bGVzIGFzIHdlbGwgYXMgbWVyZ2VkCisJICogcnVsZXMgZnJvbSBnbG9iYWwsIGluZm8gYW5kIHdvcmt0cmVlIHJvb3QgYXR0cmlidXRlcworCSAqCisJICogQHBhcmFtIHRyZWVXYWxrCisJICogQHRocm93cyBJT0V4Y2VwdGlvbgorCSAqLworCXB1YmxpYyBBdHRyaWJ1dGVzSGFuZGxlcihUcmVlV2FsayB0cmVlV2FsaykgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJdGhpcy50cmVlV2FsayA9IHRyZWVXYWxrOworCQlBdHRyaWJ1dGVzTm9kZVByb3ZpZGVyIGF0dHJpYnV0ZXNOb2RlUHJvdmlkZXIgPXRyZWVXYWxrLmdldEF0dHJpYnV0ZXNOb2RlUHJvdmlkZXIoKTsKKwkJdGhpcy5nbG9iYWxOb2RlID0gYXR0cmlidXRlc05vZGVQcm92aWRlciAhPSBudWxsCisJCQkJPyBhdHRyaWJ1dGVzTm9kZVByb3ZpZGVyLmdldEdsb2JhbEF0dHJpYnV0ZXNOb2RlKCkgOiBudWxsOworCQl0aGlzLmluZm9Ob2RlID0gYXR0cmlidXRlc05vZGVQcm92aWRlciAhPSBudWxsCisJCQkJPyBhdHRyaWJ1dGVzTm9kZVByb3ZpZGVyLmdldEluZm9BdHRyaWJ1dGVzTm9kZSgpIDogbnVsbDsKKworCQlBdHRyaWJ1dGVzTm9kZSByb290Tm9kZSA9IGF0dHJpYnV0ZXNOb2RlKHRyZWVXYWxrLAorCQkJCXJvb3RPZigKKwkJCQkJCXRyZWVXYWxrLmdldFRyZWUoV29ya2luZ1RyZWVJdGVyYXRvci5jbGFzcykpLAorCQkJCXJvb3RPZigKKwkJCQkJCXRyZWVXYWxrLmdldFRyZWUoRGlyQ2FjaGVJdGVyYXRvci5jbGFzcykpLAorCQkJCXJvb3RPZih0cmVlV2FsaworCQkJCQkJLmdldFRyZWUoQ2Fub25pY2FsVHJlZVBhcnNlci5jbGFzcykpKTsKKworCQlleHBhbnNpb25zLnB1dChCSU5BUllfUlVMRV9LRVksIEJJTkFSWV9SVUxFX0FUVFJJQlVURVMpOworCQlmb3IgKEF0dHJpYnV0ZXNOb2RlIG5vZGUgOiBuZXcgQXR0cmlidXRlc05vZGVbXSB7IGdsb2JhbE5vZGUsIHJvb3ROb2RlLAorCQkJCWluZm9Ob2RlIH0pIHsKKwkJCWlmIChub2RlID09IG51bGwpIHsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWZvciAoQXR0cmlidXRlc1J1bGUgcnVsZSA6IG5vZGUuZ2V0UnVsZXMoKSkgeworCQkJCWlmIChydWxlLmdldFBhdHRlcm4oKS5zdGFydHNXaXRoKE1BQ1JPX1BSRUZJWCkpIHsKKwkJCQkJZXhwYW5zaW9ucy5wdXQocnVsZS5nZXRQYXR0ZXJuKCkKKwkJCQkJCQkuc3Vic3RyaW5nKE1BQ1JPX1BSRUZJWC5sZW5ndGgoKSkudHJpbSgpLAorCQkJCQkJCXJ1bGUuZ2V0QXR0cmlidXRlcygpKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBzZWUge0BsaW5rIFRyZWVXYWxrI2dldEF0dHJpYnV0ZXMoKX0KKwkgKgorCSAqIEByZXR1cm4gdGhlIHtAbGluayBBdHRyaWJ1dGVzfSBmb3IgdGhlIGN1cnJlbnQgcGF0aCByZXByZXNlbnRlZCBieSB0aGUKKwkgKiAgICAgICAgIHtAbGluayBUcmVlV2Fsa30KKwkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCisJICovCisJcHVibGljIEF0dHJpYnV0ZXMgZ2V0QXR0cmlidXRlcygpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCVN0cmluZyBlbnRyeVBhdGggPSB0cmVlV2Fsay5nZXRQYXRoU3RyaW5nKCk7CisJCWJvb2xlYW4gaXNEaXJlY3RvcnkgPSAodHJlZVdhbGsuZ2V0RmlsZU1vZGUoKSA9PSBGaWxlTW9kZS5UUkVFKTsKKwkJQXR0cmlidXRlcyBhdHRyaWJ1dGVzID0gbmV3IEF0dHJpYnV0ZXMoKTsKKworCQkvLyBHZXRzIHRoZSBpbmZvIGF0dHJpYnV0ZXMKKwkJbWVyZ2VJbmZvQXR0cmlidXRlcyhlbnRyeVBhdGgsIGlzRGlyZWN0b3J5LCBhdHRyaWJ1dGVzKTsKKworCQkvLyBHZXRzIHRoZSBhdHRyaWJ1dGVzIGxvY2F0ZWQgb24gdGhlIGN1cnJlbnQgZW50cnkgcGF0aAorCQltZXJnZVBlckRpcmVjdG9yeUVudHJ5QXR0cmlidXRlcyhlbnRyeVBhdGgsIGlzRGlyZWN0b3J5LAorCQkJCXRyZWVXYWxrLmdldFRyZWUoV29ya2luZ1RyZWVJdGVyYXRvci5jbGFzcyksCisJCQkJdHJlZVdhbGsuZ2V0VHJlZShEaXJDYWNoZUl0ZXJhdG9yLmNsYXNzKSwKKwkJCQl0cmVlV2Fsay5nZXRUcmVlKENhbm9uaWNhbFRyZWVQYXJzZXIuY2xhc3MpLAorCQkJCWF0dHJpYnV0ZXMpOworCisJCS8vIEdldHMgdGhlIGF0dHJpYnV0ZXMgbG9jYXRlZCBpbiB0aGUgZ2xvYmFsIGF0dHJpYnV0ZSBmaWxlCisJCW1lcmdlR2xvYmFsQXR0cmlidXRlcyhlbnRyeVBhdGgsIGlzRGlyZWN0b3J5LCBhdHRyaWJ1dGVzKTsKKworCQkvLyBub3cgYWZ0ZXIgYWxsIGF0dHJpYnV0ZXMgYXJlIGNvbGxlY3RlZCAtIGluIHRoZSBjb3JyZWN0IGhpZXJhcmNoeQorCQkvLyBvcmRlciAtIHJlbW92ZSBhbGwgdW5zcGVjaWZpZWQgZW50cmllcyAodGhlICEgbWFya2VyKQorCQlmb3IgKEF0dHJpYnV0ZSBhIDogYXR0cmlidXRlcy5nZXRBbGwoKSkgeworCQkJaWYgKGEuZ2V0U3RhdGUoKSA9PSBTdGF0ZS5VTlNQRUNJRklFRCkKKwkJCQlhdHRyaWJ1dGVzLnJlbW92ZShhLmdldEtleSgpKTsKKwkJfQorCisJCXJldHVybiBhdHRyaWJ1dGVzOworCX0KKworCS8qKgorCSAqIE1lcmdlcyB0aGUgbWF0Y2hpbmcgR0xPQkFMIGF0dHJpYnV0ZXMgZm9yIGFuIGVudHJ5IHBhdGguCisJICoKKwkgKiBAcGFyYW0gZW50cnlQYXRoCisJICogICAgICAgICAgICB0aGUgcGF0aCB0byB0ZXN0LiBUaGUgcGF0aCBtdXN0IGJlIHJlbGF0aXZlIHRvIHRoaXMgYXR0cmlidXRlCisJICogICAgICAgICAgICBub2RlJ3Mgb3duIHJlcG9zaXRvcnkgcGF0aCwgYW5kIGluIHJlcG9zaXRvcnkgcGF0aCBmb3JtYXQKKwkgKiAgICAgICAgICAgICh1c2VzICcvJyBhbmQgbm90ICdcJykuCisJICogQHBhcmFtIGlzRGlyZWN0b3J5CisJICogICAgICAgICAgICB0cnVlIGlmIHRoZSB0YXJnZXQgaXRlbSBpcyBhIGRpcmVjdG9yeS4KKwkgKiBAcGFyYW0gcmVzdWx0CisJICogICAgICAgICAgICB0aGF0IHdpbGwgaG9sZCB0aGUgYXR0cmlidXRlcyBtYXRjaGluZyB0aGlzIGVudHJ5IHBhdGguIFRoaXMKKwkgKiAgICAgICAgICAgIG1ldGhvZCB3aWxsIE5PVCBvdmVycmlkZSBhbnkgZXhpc3RpbmcgZW50cnkgaW4gYXR0cmlidXRlcy4KKwkgKi8KKwlwcml2YXRlIHZvaWQgbWVyZ2VHbG9iYWxBdHRyaWJ1dGVzKFN0cmluZyBlbnRyeVBhdGgsIGJvb2xlYW4gaXNEaXJlY3RvcnksCisJCQlBdHRyaWJ1dGVzIHJlc3VsdCkgeworCQltZXJnZUF0dHJpYnV0ZXMoZ2xvYmFsTm9kZSwgZW50cnlQYXRoLCBpc0RpcmVjdG9yeSwgcmVzdWx0KTsKKwl9CisKKwkvKioKKwkgKiBNZXJnZXMgdGhlIG1hdGNoaW5nIElORk8gYXR0cmlidXRlcyBmb3IgYW4gZW50cnkgcGF0aC4KKwkgKgorCSAqIEBwYXJhbSBlbnRyeVBhdGgKKwkgKiAgICAgICAgICAgIHRoZSBwYXRoIHRvIHRlc3QuIFRoZSBwYXRoIG11c3QgYmUgcmVsYXRpdmUgdG8gdGhpcyBhdHRyaWJ1dGUKKwkgKiAgICAgICAgICAgIG5vZGUncyBvd24gcmVwb3NpdG9yeSBwYXRoLCBhbmQgaW4gcmVwb3NpdG9yeSBwYXRoIGZvcm1hdAorCSAqICAgICAgICAgICAgKHVzZXMgJy8nIGFuZCBub3QgJ1wnKS4KKwkgKiBAcGFyYW0gaXNEaXJlY3RvcnkKKwkgKiAgICAgICAgICAgIHRydWUgaWYgdGhlIHRhcmdldCBpdGVtIGlzIGEgZGlyZWN0b3J5LgorCSAqIEBwYXJhbSByZXN1bHQKKwkgKiAgICAgICAgICAgIHRoYXQgd2lsbCBob2xkIHRoZSBhdHRyaWJ1dGVzIG1hdGNoaW5nIHRoaXMgZW50cnkgcGF0aC4gVGhpcworCSAqICAgICAgICAgICAgbWV0aG9kIHdpbGwgTk9UIG92ZXJyaWRlIGFueSBleGlzdGluZyBlbnRyeSBpbiBhdHRyaWJ1dGVzLgorCSAqLworCXByaXZhdGUgdm9pZCBtZXJnZUluZm9BdHRyaWJ1dGVzKFN0cmluZyBlbnRyeVBhdGgsIGJvb2xlYW4gaXNEaXJlY3RvcnksCisJCQlBdHRyaWJ1dGVzIHJlc3VsdCkgeworCQltZXJnZUF0dHJpYnV0ZXMoaW5mb05vZGUsIGVudHJ5UGF0aCwgaXNEaXJlY3RvcnksIHJlc3VsdCk7CisJfQorCisJLyoqCisJICogTWVyZ2VzIHRoZSBtYXRjaGluZyB3b3JraW5nIGRpcmVjdG9yeSBhdHRyaWJ1dGVzIGZvciBhbiBlbnRyeSBwYXRoLgorCSAqCisJICogQHBhcmFtIGVudHJ5UGF0aAorCSAqICAgICAgICAgICAgdGhlIHBhdGggdG8gdGVzdC4gVGhlIHBhdGggbXVzdCBiZSByZWxhdGl2ZSB0byB0aGlzIGF0dHJpYnV0ZQorCSAqICAgICAgICAgICAgbm9kZSdzIG93biByZXBvc2l0b3J5IHBhdGgsIGFuZCBpbiByZXBvc2l0b3J5IHBhdGggZm9ybWF0CisJICogICAgICAgICAgICAodXNlcyAnLycgYW5kIG5vdCAnXCcpLgorCSAqIEBwYXJhbSBpc0RpcmVjdG9yeQorCSAqICAgICAgICAgICAgdHJ1ZSBpZiB0aGUgdGFyZ2V0IGl0ZW0gaXMgYSBkaXJlY3RvcnkuCisJICogQHBhcmFtIHdvcmtpbmdUcmVlSXRlcmF0b3IKKwkgKiBAcGFyYW0gZGlyQ2FjaGVJdGVyYXRvcgorCSAqIEBwYXJhbSBvdGhlclRyZWUKKwkgKiBAcGFyYW0gcmVzdWx0CisJICogICAgICAgICAgICB0aGF0IHdpbGwgaG9sZCB0aGUgYXR0cmlidXRlcyBtYXRjaGluZyB0aGlzIGVudHJ5IHBhdGguIFRoaXMKKwkgKiAgICAgICAgICAgIG1ldGhvZCB3aWxsIE5PVCBvdmVycmlkZSBhbnkgZXhpc3RpbmcgZW50cnkgaW4gYXR0cmlidXRlcy4KKwkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCisJICovCisJcHJpdmF0ZSB2b2lkIG1lcmdlUGVyRGlyZWN0b3J5RW50cnlBdHRyaWJ1dGVzKFN0cmluZyBlbnRyeVBhdGgsCisJCQlib29sZWFuIGlzRGlyZWN0b3J5LAorCQkJQE51bGxhYmxlIFdvcmtpbmdUcmVlSXRlcmF0b3Igd29ya2luZ1RyZWVJdGVyYXRvciwKKwkJCUBOdWxsYWJsZSBEaXJDYWNoZUl0ZXJhdG9yIGRpckNhY2hlSXRlcmF0b3IsCisJCQlATnVsbGFibGUgQ2Fub25pY2FsVHJlZVBhcnNlciBvdGhlclRyZWUsIEF0dHJpYnV0ZXMgcmVzdWx0KQorCQkJCQl0aHJvd3MgSU9FeGNlcHRpb24geworCQkvLyBQcmV2ZW50cyBpbmZpbml0ZSByZWN1cnJlbmNlCisJCWlmICh3b3JraW5nVHJlZUl0ZXJhdG9yICE9IG51bGwgfHwgZGlyQ2FjaGVJdGVyYXRvciAhPSBudWxsCisJCQkJfHwgb3RoZXJUcmVlICE9IG51bGwpIHsKKwkJCUF0dHJpYnV0ZXNOb2RlIGF0dHJpYnV0ZXNOb2RlID0gYXR0cmlidXRlc05vZGUoCisJCQkJCXRyZWVXYWxrLCB3b3JraW5nVHJlZUl0ZXJhdG9yLCBkaXJDYWNoZUl0ZXJhdG9yLCBvdGhlclRyZWUpOworCQkJaWYgKGF0dHJpYnV0ZXNOb2RlICE9IG51bGwpIHsKKwkJCQltZXJnZUF0dHJpYnV0ZXMoYXR0cmlidXRlc05vZGUsIGVudHJ5UGF0aCwgaXNEaXJlY3RvcnksIHJlc3VsdCk7CisJCQl9CisJCQltZXJnZVBlckRpcmVjdG9yeUVudHJ5QXR0cmlidXRlcyhlbnRyeVBhdGgsIGlzRGlyZWN0b3J5LAorCQkJCQlwYXJlbnRPZih3b3JraW5nVHJlZUl0ZXJhdG9yKSwgcGFyZW50T2YoZGlyQ2FjaGVJdGVyYXRvciksCisJCQkJCXBhcmVudE9mKG90aGVyVHJlZSksIHJlc3VsdCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBNZXJnZXMgdGhlIG1hdGNoaW5nIG5vZGUgYXR0cmlidXRlcyBmb3IgYW4gZW50cnkgcGF0aC4KKwkgKgorCSAqIEBwYXJhbSBub2RlCisJICogICAgICAgICAgICB0aGUgbm9kZSB0byBzY2FuIGZvciBtYXRjaGVzIHRvIGVudHJ5UGF0aAorCSAqIEBwYXJhbSBlbnRyeVBhdGgKKwkgKiAgICAgICAgICAgIHRoZSBwYXRoIHRvIHRlc3QuIFRoZSBwYXRoIG11c3QgYmUgcmVsYXRpdmUgdG8gdGhpcyBhdHRyaWJ1dGUKKwkgKiAgICAgICAgICAgIG5vZGUncyBvd24gcmVwb3NpdG9yeSBwYXRoLCBhbmQgaW4gcmVwb3NpdG9yeSBwYXRoIGZvcm1hdAorCSAqICAgICAgICAgICAgKHVzZXMgJy8nIGFuZCBub3QgJ1wnKS4KKwkgKiBAcGFyYW0gaXNEaXJlY3RvcnkKKwkgKiAgICAgICAgICAgIHRydWUgaWYgdGhlIHRhcmdldCBpdGVtIGlzIGEgZGlyZWN0b3J5LgorCSAqIEBwYXJhbSByZXN1bHQKKwkgKiAgICAgICAgICAgIHRoYXQgd2lsbCBob2xkIHRoZSBhdHRyaWJ1dGVzIG1hdGNoaW5nIHRoaXMgZW50cnkgcGF0aC4gVGhpcworCSAqICAgICAgICAgICAgbWV0aG9kIHdpbGwgTk9UIG92ZXJyaWRlIGFueSBleGlzdGluZyBlbnRyeSBpbiBhdHRyaWJ1dGVzLgorCSAqLworCXByb3RlY3RlZCB2b2lkIG1lcmdlQXR0cmlidXRlcyhATnVsbGFibGUgQXR0cmlidXRlc05vZGUgbm9kZSwKKwkJCVN0cmluZyBlbnRyeVBhdGgsCisJCQlib29sZWFuIGlzRGlyZWN0b3J5LCBBdHRyaWJ1dGVzIHJlc3VsdCkgeworCQlpZiAobm9kZSA9PSBudWxsKQorCQkJcmV0dXJuOworCQlMaXN0PEF0dHJpYnV0ZXNSdWxlPiBydWxlcyA9IG5vZGUuZ2V0UnVsZXMoKTsKKwkJLy8gUGFyc2UgcnVsZXMgaW4gdGhlIHJldmVyc2Ugb3JkZXIgdGhhdCB0aGV5IHdlcmUgcmVhZCBzaW5jZSB0aGUgbGFzdAorCQkvLyBlbnRyeSBzaG91bGQgYmUgdXNlZAorCQlMaXN0SXRlcmF0b3I8QXR0cmlidXRlc1J1bGU+IHJ1bGVJdGVyYXRvciA9IHJ1bGVzCisJCQkJLmxpc3RJdGVyYXRvcihydWxlcy5zaXplKCkpOworCQl3aGlsZSAocnVsZUl0ZXJhdG9yLmhhc1ByZXZpb3VzKCkpIHsKKwkJCUF0dHJpYnV0ZXNSdWxlIHJ1bGUgPSBydWxlSXRlcmF0b3IucHJldmlvdXMoKTsKKwkJCWlmIChydWxlLmlzTWF0Y2goZW50cnlQYXRoLCBpc0RpcmVjdG9yeSkpIHsKKwkJCQlMaXN0SXRlcmF0b3I8QXR0cmlidXRlPiBhdHRyaWJ1dGVJdGUgPSBydWxlLmdldEF0dHJpYnV0ZXMoKQorCQkJCQkJLmxpc3RJdGVyYXRvcihydWxlLmdldEF0dHJpYnV0ZXMoKS5zaXplKCkpOworCQkJCS8vIFBhcnNlcyB0aGUgYXR0cmlidXRlcyBpbiB0aGUgcmV2ZXJzZSBvcmRlciB0aGF0IHRoZXkgd2VyZQorCQkJCS8vIHJlYWQgc2luY2UgdGhlIGxhc3QgZW50cnkgc2hvdWxkIGJlIHVzZWQKKwkJCQl3aGlsZSAoYXR0cmlidXRlSXRlLmhhc1ByZXZpb3VzKCkpIHsKKwkJCQkJZXhwYW5kTWFjcm8oYXR0cmlidXRlSXRlLnByZXZpb3VzKCksIHJlc3VsdCk7CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJLyoqCisJICogQHBhcmFtIGF0dHIKKwkgKiBAcGFyYW0gcmVzdWx0CisJICogICAgICAgICAgICBjb250YWlucyB0aGUgKHJlY3Vyc2l2ZSkgZXhwYW5kZWQgYW5kIG1lcmdlZCBtYWNybyBhdHRyaWJ1dGVzCisJICogICAgICAgICAgICBpbmNsdWRpbmcgdGhlIGF0dHJpYnV0ZSBpc2VsZgorCSAqLworCXByb3RlY3RlZCB2b2lkIGV4cGFuZE1hY3JvKEF0dHJpYnV0ZSBhdHRyLCBBdHRyaWJ1dGVzIHJlc3VsdCkgeworCQkvLyBsb29wIGRldGVjdGlvbiA9IGV4aXN0cyBjaGVjaworCQlpZiAocmVzdWx0LmNvbnRhaW5zS2V5KGF0dHIuZ2V0S2V5KCkpKQorCQkJcmV0dXJuOworCisJCS8vIGFsc28gYWRkIG1hY3JvIHRvIHJlc3VsdCBzZXQsIHNhbWUgZG9lcyBuYXRpdmUgZ2l0CisJCXJlc3VsdC5wdXQoYXR0cik7CisKKwkJTGlzdDxBdHRyaWJ1dGU+IGV4cGFuc2lvbiA9IGV4cGFuc2lvbnMuZ2V0KGF0dHIuZ2V0S2V5KCkpOworCQlpZiAoZXhwYW5zaW9uID09IG51bGwpIHsKKwkJCXJldHVybjsKKwkJfQorCQlzd2l0Y2ggKGF0dHIuZ2V0U3RhdGUoKSkgeworCQljYXNlIFVOU0VUOiB7CisJCQlmb3IgKEF0dHJpYnV0ZSBlIDogZXhwYW5zaW9uKSB7CisJCQkJc3dpdGNoIChlLmdldFN0YXRlKCkpIHsKKwkJCQljYXNlIFNFVDoKKwkJCQkJZXhwYW5kTWFjcm8obmV3IEF0dHJpYnV0ZShlLmdldEtleSgpLCBTdGF0ZS5VTlNFVCksIHJlc3VsdCk7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgVU5TRVQ6CisJCQkJCWV4cGFuZE1hY3JvKG5ldyBBdHRyaWJ1dGUoZS5nZXRLZXkoKSwgU3RhdGUuU0VUKSwgcmVzdWx0KTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBVTlNQRUNJRklFRDoKKwkJCQkJZXhwYW5kTWFjcm8obmV3IEF0dHJpYnV0ZShlLmdldEtleSgpLCBTdGF0ZS5VTlNQRUNJRklFRCksCisJCQkJCQkJcmVzdWx0KTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBDVVNUT006CisJCQkJZGVmYXVsdDoKKwkJCQkJZXhwYW5kTWFjcm8oZSwgcmVzdWx0KTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwkJfQorCQljYXNlIENVU1RPTTogeworCQkJZm9yIChBdHRyaWJ1dGUgZSA6IGV4cGFuc2lvbikgeworCQkJCXN3aXRjaCAoZS5nZXRTdGF0ZSgpKSB7CisJCQkJY2FzZSBTRVQ6CisJCQkJY2FzZSBVTlNFVDoKKwkJCQljYXNlIFVOU1BFQ0lGSUVEOgorCQkJCQlleHBhbmRNYWNybyhlLCByZXN1bHQpOworCQkJCQlicmVhazsKKwkJCQljYXNlIENVU1RPTToKKwkJCQlkZWZhdWx0OgorCQkJCQlleHBhbmRNYWNybyhuZXcgQXR0cmlidXRlKGUuZ2V0S2V5KCksIGF0dHIuZ2V0VmFsdWUoKSksCisJCQkJCQkJcmVzdWx0KTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwkJfQorCQljYXNlIFVOU1BFQ0lGSUVEOiB7CisJCQlmb3IgKEF0dHJpYnV0ZSBlIDogZXhwYW5zaW9uKSB7CisJCQkJZXhwYW5kTWFjcm8obmV3IEF0dHJpYnV0ZShlLmdldEtleSgpLCBTdGF0ZS5VTlNQRUNJRklFRCksCisJCQkJCQlyZXN1bHQpOworCQkJfQorCQkJYnJlYWs7CisJCX0KKwkJY2FzZSBTRVQ6CisJCWRlZmF1bHQ6CisJCQlmb3IgKEF0dHJpYnV0ZSBlIDogZXhwYW5zaW9uKSB7CisJCQkJZXhwYW5kTWFjcm8oZSwgcmVzdWx0KTsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJfQorCisJLyoqCisJICogR2V0IHRoZSB7QGxpbmsgQXR0cmlidXRlc05vZGV9IGZvciB0aGUgY3VycmVudCBlbnRyeS4KKwkgKiA8cD4KKwkgKiBUaGlzIG1ldGhvZCBpbXBsZW1lbnRzIHRoZSBmYWxsYmFjayBtZWNoYW5pc20gYmV0d2VlbiB0aGUgaW5kZXggYW5kIHRoZQorCSAqIHdvcmtpbmcgdHJlZSBkZXBlbmRpbmcgb24gdGhlIG9wZXJhdGlvbiB0eXBlCisJICogPC9wPgorCSAqCisJICogQHBhcmFtIHRyZWVXYWxrCisJICogQHBhcmFtIHdvcmtpbmdUcmVlSXRlcmF0b3IKKwkgKiBAcGFyYW0gZGlyQ2FjaGVJdGVyYXRvcgorCSAqIEBwYXJhbSBvdGhlclRyZWUKKwkgKiBAcmV0dXJuIGEge0BsaW5rIEF0dHJpYnV0ZXNOb2RlfSBvZiB0aGUgY3VycmVudCBlbnRyeSwKKwkgKiAgICAgICAgIHtAbGluayBOdWxsUG9pbnRlckV4Y2VwdGlvbn0gb3RoZXJ3aXNlLgorCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KKwkgKiAgICAgICAgICAgICBJdCByYWlzZXMgYW4ge0BsaW5rIElPRXhjZXB0aW9ufSBpZiBhIHByb2JsZW0gYXBwZWFycyB3aGlsZQorCSAqICAgICAgICAgICAgIHBhcnNpbmcgb25lIG9uIHRoZSBhdHRyaWJ1dGVzIGZpbGUuCisJICovCisJcHJpdmF0ZSBzdGF0aWMgQXR0cmlidXRlc05vZGUgYXR0cmlidXRlc05vZGUoVHJlZVdhbGsgdHJlZVdhbGssCisJCQlATnVsbGFibGUgV29ya2luZ1RyZWVJdGVyYXRvciB3b3JraW5nVHJlZUl0ZXJhdG9yLAorCQkJQE51bGxhYmxlIERpckNhY2hlSXRlcmF0b3IgZGlyQ2FjaGVJdGVyYXRvciwKKwkJCUBOdWxsYWJsZSBDYW5vbmljYWxUcmVlUGFyc2VyIG90aGVyVHJlZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJQXR0cmlidXRlc05vZGUgYXR0cmlidXRlc05vZGUgPSBudWxsOworCQlzd2l0Y2ggKHRyZWVXYWxrLmdldE9wZXJhdGlvblR5cGUoKSkgeworCQljYXNlIENIRUNLSU5fT1A6CisJCQlpZiAod29ya2luZ1RyZWVJdGVyYXRvciAhPSBudWxsKSB7CisJCQkJYXR0cmlidXRlc05vZGUgPSB3b3JraW5nVHJlZUl0ZXJhdG9yLmdldEVudHJ5QXR0cmlidXRlc05vZGUoKTsKKwkJCX0KKwkJCWlmIChhdHRyaWJ1dGVzTm9kZSA9PSBudWxsICYmIGRpckNhY2hlSXRlcmF0b3IgIT0gbnVsbCkgeworCQkJCWF0dHJpYnV0ZXNOb2RlID0gZGlyQ2FjaGVJdGVyYXRvcgorCQkJCQkJLmdldEVudHJ5QXR0cmlidXRlc05vZGUodHJlZVdhbGsuZ2V0T2JqZWN0UmVhZGVyKCkpOworCQkJfQorCQkJaWYgKGF0dHJpYnV0ZXNOb2RlID09IG51bGwgJiYgb3RoZXJUcmVlICE9IG51bGwpIHsKKwkJCQlhdHRyaWJ1dGVzTm9kZSA9IG90aGVyVHJlZQorCQkJCQkJLmdldEVudHJ5QXR0cmlidXRlc05vZGUodHJlZVdhbGsuZ2V0T2JqZWN0UmVhZGVyKCkpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgQ0hFQ0tPVVRfT1A6CisJCQlpZiAob3RoZXJUcmVlICE9IG51bGwpIHsKKwkJCQlhdHRyaWJ1dGVzTm9kZSA9IG90aGVyVHJlZQorCQkJCQkJLmdldEVudHJ5QXR0cmlidXRlc05vZGUodHJlZVdhbGsuZ2V0T2JqZWN0UmVhZGVyKCkpOworCQkJfQorCQkJaWYgKGF0dHJpYnV0ZXNOb2RlID09IG51bGwgJiYgZGlyQ2FjaGVJdGVyYXRvciAhPSBudWxsKSB7CisJCQkJYXR0cmlidXRlc05vZGUgPSBkaXJDYWNoZUl0ZXJhdG9yCisJCQkJCQkuZ2V0RW50cnlBdHRyaWJ1dGVzTm9kZSh0cmVlV2Fsay5nZXRPYmplY3RSZWFkZXIoKSk7CisJCQl9CisJCQlpZiAoYXR0cmlidXRlc05vZGUgPT0gbnVsbCAmJiB3b3JraW5nVHJlZUl0ZXJhdG9yICE9IG51bGwpIHsKKwkJCQlhdHRyaWJ1dGVzTm9kZSA9IHdvcmtpbmdUcmVlSXRlcmF0b3IuZ2V0RW50cnlBdHRyaWJ1dGVzTm9kZSgpOworCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQl0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKAorCQkJCQkiVGhlIG9ubHkgc3VwcG9ydGVkIG9wZXJhdGlvbiB0eXBlcyBhcmU6IiAvLyROT04tTkxTLTEkCisJCQkJCQkJKyBPcGVyYXRpb25UeXBlLkNIRUNLSU5fT1AgKyAiLCIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCSsgT3BlcmF0aW9uVHlwZS5DSEVDS09VVF9PUCk7CisJCX0KKworCQlyZXR1cm4gYXR0cmlidXRlc05vZGU7CisJfQorCisJcHJpdmF0ZSBzdGF0aWMgPFQgZXh0ZW5kcyBBYnN0cmFjdFRyZWVJdGVyYXRvcj4gVCBwYXJlbnRPZihATnVsbGFibGUgVCBub2RlKSB7CisJCWlmKG5vZGU9PW51bGwpIHJldHVybiBudWxsOworCQlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKKwkJQ2xhc3M8VD4gdHlwZSA9IChDbGFzczxUPikgbm9kZS5nZXRDbGFzcygpOworCQlBYnN0cmFjdFRyZWVJdGVyYXRvciBwYXJlbnQgPSBub2RlLnBhcmVudDsKKwkJaWYgKHR5cGUuaXNJbnN0YW5jZShwYXJlbnQpKSB7CisJCQlyZXR1cm4gdHlwZS5jYXN0KHBhcmVudCk7CisJCX0KKwkJcmV0dXJuIG51bGw7CisJfQorCisJcHJpdmF0ZSBzdGF0aWMgPFQgZXh0ZW5kcyBBYnN0cmFjdFRyZWVJdGVyYXRvcj4gVCByb290T2YoCisJCQlATnVsbGFibGUgVCBub2RlKSB7CisJCWlmKG5vZGU9PW51bGwpIHJldHVybiBudWxsOworCQlBYnN0cmFjdFRyZWVJdGVyYXRvciB0PW5vZGU7CisJCXdoaWxlICh0IT0gbnVsbCAmJiB0LnBhcmVudCAhPSBudWxsKSB7CisJCQl0PSB0LnBhcmVudDsKKwkJfQorCQlAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKKwkJQ2xhc3M8VD4gdHlwZSA9IChDbGFzczxUPikgbm9kZS5nZXRDbGFzcygpOworCQlpZiAodHlwZS5pc0luc3RhbmNlKHQpKSB7CisJCQlyZXR1cm4gdHlwZS5jYXN0KHQpOworCQl9CisJCXJldHVybiBudWxsOworCX0KKworfQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9hdHRyaWJ1dGVzL0F0dHJpYnV0ZXNOb2RlLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2F0dHJpYnV0ZXMvQXR0cmlidXRlc05vZGUuamF2YQppbmRleCA1YzBhYmEyLi43MTk2NTAyIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2F0dHJpYnV0ZXMvQXR0cmlidXRlc05vZGUuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2F0dHJpYnV0ZXMvQXR0cmlidXRlc05vZGUuamF2YQpAQCAtNDksNyArNDksNiBAQAogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwogaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0SXRlcmF0b3I7CiAKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25zdGFudHM7CiAKQEAgLTEyMiw0MCArMTIxLDQgQEAgcHVibGljIExpc3Q8QXR0cmlidXRlc1J1bGU+IGdldFJ1bGVzKCkgewogCQlyZXR1cm4gQ29sbGVjdGlvbnMudW5tb2RpZmlhYmxlTGlzdChydWxlcyk7CiAJfQogCi0JLyoqCi0JICogUmV0dXJucyB0aGUgbWF0Y2hpbmcgYXR0cmlidXRlcyBmb3IgYW4gZW50cnkgcGF0aC4KLQkgKgotCSAqIEBwYXJhbSBlbnRyeVBhdGgKLQkgKiAgICAgICAgICAgIHRoZSBwYXRoIHRvIHRlc3QuIFRoZSBwYXRoIG11c3QgYmUgcmVsYXRpdmUgdG8gdGhpcyBhdHRyaWJ1dGUKLQkgKiAgICAgICAgICAgIG5vZGUncyBvd24gcmVwb3NpdG9yeSBwYXRoLCBhbmQgaW4gcmVwb3NpdG9yeSBwYXRoIGZvcm1hdAotCSAqICAgICAgICAgICAgKHVzZXMgJy8nIGFuZCBub3QgJ1wnKS4KLQkgKiBAcGFyYW0gaXNEaXJlY3RvcnkKLQkgKiAgICAgICAgICAgIHRydWUgaWYgdGhlIHRhcmdldCBpdGVtIGlzIGEgZGlyZWN0b3J5LgotCSAqIEBwYXJhbSBhdHRyaWJ1dGVzCi0JICogICAgICAgICAgICBNYXAgdGhhdCB3aWxsIGhvbGQgdGhlIGF0dHJpYnV0ZXMgbWF0Y2hpbmcgdGhpcyBlbnRyeSBwYXRoLiBJZgotCSAqICAgICAgICAgICAgaXQgaXMgbm90IGVtcHR5LCB0aGlzIG1ldGhvZCB3aWxsIE5PVCBvdmVycmlkZSBhbnkgZXhpc3RpbmcKLQkgKiAgICAgICAgICAgIGVudHJ5LgotCSAqIEBzaW5jZSA0LjIKLQkgKi8KLQlwdWJsaWMgdm9pZCBnZXRBdHRyaWJ1dGVzKFN0cmluZyBlbnRyeVBhdGgsCi0JCQlib29sZWFuIGlzRGlyZWN0b3J5LCBBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpIHsKLQkJLy8gUGFyc2UgcnVsZXMgaW4gdGhlIHJldmVyc2Ugb3JkZXIgdGhhdCB0aGV5IHdlcmUgcmVhZCBzaW5jZSB0aGUgbGFzdAotCQkvLyBlbnRyeSBzaG91bGQgYmUgdXNlZAotCQlMaXN0SXRlcmF0b3I8QXR0cmlidXRlc1J1bGU+IHJ1bGVJdGVyYXRvciA9IHJ1bGVzLmxpc3RJdGVyYXRvcihydWxlcwotCQkJCS5zaXplKCkpOwotCQl3aGlsZSAocnVsZUl0ZXJhdG9yLmhhc1ByZXZpb3VzKCkpIHsKLQkJCUF0dHJpYnV0ZXNSdWxlIHJ1bGUgPSBydWxlSXRlcmF0b3IucHJldmlvdXMoKTsKLQkJCWlmIChydWxlLmlzTWF0Y2goZW50cnlQYXRoLCBpc0RpcmVjdG9yeSkpIHsKLQkJCQlMaXN0SXRlcmF0b3I8QXR0cmlidXRlPiBhdHRyaWJ1dGVJdGUgPSBydWxlLmdldEF0dHJpYnV0ZXMoKQotCQkJCQkJLmxpc3RJdGVyYXRvcihydWxlLmdldEF0dHJpYnV0ZXMoKS5zaXplKCkpOwotCQkJCS8vIFBhcnNlcyB0aGUgYXR0cmlidXRlcyBpbiB0aGUgcmV2ZXJzZSBvcmRlciB0aGF0IHRoZXkgd2VyZQotCQkJCS8vIHJlYWQgc2luY2UgdGhlIGxhc3QgZW50cnkgc2hvdWxkIGJlIHVzZWQKLQkJCQl3aGlsZSAoYXR0cmlidXRlSXRlLmhhc1ByZXZpb3VzKCkpIHsKLQkJCQkJQXR0cmlidXRlIGF0dHIgPSBhdHRyaWJ1dGVJdGUucHJldmlvdXMoKTsKLQkJCQkJaWYgKCFhdHRyaWJ1dGVzLmNvbnRhaW5zS2V5KGF0dHIuZ2V0S2V5KCkpKQotCQkJCQkJYXR0cmlidXRlcy5wdXQoYXR0cik7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQogfQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9hdHRyaWJ1dGVzL0F0dHJpYnV0ZXNSdWxlLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2F0dHJpYnV0ZXMvQXR0cmlidXRlc1J1bGUuamF2YQppbmRleCAzNWQxOGM0Li4wNTMyMjUwIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2F0dHJpYnV0ZXMvQXR0cmlidXRlc1J1bGUuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2F0dHJpYnV0ZXMvQXR0cmlidXRlc1J1bGUuamF2YQpAQCAtMTA5LDEwICsxMDksMTEgQEAgcHJpdmF0ZSBzdGF0aWMgTGlzdDxBdHRyaWJ1dGU+IHBhcnNlQXR0cmlidXRlcyhTdHJpbmcgYXR0cmlidXRlc0xpbmUpIHsKIAlwcml2YXRlIGZpbmFsIFN0cmluZyBwYXR0ZXJuOwogCXByaXZhdGUgZmluYWwgTGlzdDxBdHRyaWJ1dGU+IGF0dHJpYnV0ZXM7CiAKLQlwcml2YXRlIGJvb2xlYW4gbmFtZU9ubHk7Ci0JcHJpdmF0ZSBib29sZWFuIGRpck9ubHk7CisJcHJpdmF0ZSBmaW5hbCBib29sZWFuIG5hbWVPbmx5OwogCi0JcHJpdmF0ZSBJTWF0Y2hlciBtYXRjaGVyOworCXByaXZhdGUgZmluYWwgYm9vbGVhbiBkaXJPbmx5OworCisJcHJpdmF0ZSBmaW5hbCBJTWF0Y2hlciBtYXRjaGVyOwogCiAJLyoqCiAJICogQ3JlYXRlIGEgbmV3IGF0dHJpYnV0ZSBydWxlIHdpdGggdGhlIGdpdmVuIHBhdHRlcm4uIEFzc3VtZXMgdGhhdCB0aGUKQEAgLTEyOCwzOCArMTI5LDQzIEBAIHByaXZhdGUgc3RhdGljIExpc3Q8QXR0cmlidXRlPiBwYXJzZUF0dHJpYnV0ZXMoU3RyaW5nIGF0dHJpYnV0ZXNMaW5lKSB7CiAJICovCiAJcHVibGljIEF0dHJpYnV0ZXNSdWxlKFN0cmluZyBwYXR0ZXJuLCBTdHJpbmcgYXR0cmlidXRlcykgewogCQl0aGlzLmF0dHJpYnV0ZXMgPSBwYXJzZUF0dHJpYnV0ZXMoYXR0cmlidXRlcyk7Ci0JCW5hbWVPbmx5ID0gZmFsc2U7Ci0JCWRpck9ubHkgPSBmYWxzZTsKIAogCQlpZiAocGF0dGVybi5lbmRzV2l0aCgiLyIpKSB7IC8vJE5PTi1OTFMtMSQKIAkJCXBhdHRlcm4gPSBwYXR0ZXJuLnN1YnN0cmluZygwLCBwYXR0ZXJuLmxlbmd0aCgpIC0gMSk7CiAJCQlkaXJPbmx5ID0gdHJ1ZTsKKwkJfSBlbHNlIHsKKwkJCWRpck9ubHkgPSBmYWxzZTsKIAkJfQogCi0JCWJvb2xlYW4gaGFzU2xhc2ggPSBwYXR0ZXJuLmNvbnRhaW5zKCIvIik7IC8vJE5PTi1OTFMtMSQKKwkJaW50IHNsYXNoSW5kZXggPSBwYXR0ZXJuLmluZGV4T2YoJy8nKTsKIAotCQlpZiAoIWhhc1NsYXNoKQorCQlpZiAoc2xhc2hJbmRleCA8IDApIHsKIAkJCW5hbWVPbmx5ID0gdHJ1ZTsKLQkJZWxzZSBpZiAoIXBhdHRlcm4uc3RhcnRzV2l0aCgiLyIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJfSBlbHNlIGlmIChzbGFzaEluZGV4ID09IDApIHsKKwkJCW5hbWVPbmx5ID0gZmFsc2U7CisJCX0gZWxzZSB7CisJCQluYW1lT25seSA9IGZhbHNlOwogCQkJLy8gQ29udGFpbnMgIi8iIGJ1dCBkb2VzIG5vdCBzdGFydCB3aXRoIG9uZQogCQkJLy8gQWRkaW5nIC8gdG8gdGhlIHN0YXJ0IHNob3VsZCBub3QgaW50ZXJmZXJlIHdpdGggbWF0Y2hpbmcKIAkJCXBhdHRlcm4gPSAiLyIgKyBwYXR0ZXJuOyAvLyROT04tTkxTLTEkCiAJCX0KIAorCQlJTWF0Y2hlciBjYW5kaWRhdGVNYXRjaGVyID0gTk9fTUFUQ0g7CiAJCXRyeSB7Ci0JCQltYXRjaGVyID0gUGF0aE1hdGNoZXIuY3JlYXRlUGF0aE1hdGNoZXIocGF0dGVybiwKKwkJCWNhbmRpZGF0ZU1hdGNoZXIgPSBQYXRoTWF0Y2hlci5jcmVhdGVQYXRoTWF0Y2hlcihwYXR0ZXJuLAogCQkJCQlDaGFyYWN0ZXIudmFsdWVPZihGYXN0SWdub3JlUnVsZS5QQVRIX1NFUEFSQVRPUiksIGRpck9ubHkpOwogCQl9IGNhdGNoIChJbnZhbGlkUGF0dGVybkV4Y2VwdGlvbiBlKSB7Ci0JCQltYXRjaGVyID0gTk9fTUFUQ0g7CisJCQkvLyBpZ25vcmU6IGludmFsaWQgcGF0dGVybnMgYXJlIHNpbGVudGx5IGlnbm9yZWQKIAkJfQotCisJCXRoaXMubWF0Y2hlciA9IGNhbmRpZGF0ZU1hdGNoZXI7CiAJCXRoaXMucGF0dGVybiA9IHBhdHRlcm47CiAJfQogCiAJLyoqCiAJICogQHJldHVybiBUcnVlIGlmIHRoZSBwYXR0ZXJuIHNob3VsZCBtYXRjaCBkaXJlY3RvcmllcyBvbmx5CisJICogQHNpbmNlIDQuMwogCSAqLwotCXB1YmxpYyBib29sZWFuIGRpck9ubHkoKSB7CisJcHVibGljIGJvb2xlYW4gaXNEaXJPbmx5KCkgewogCQlyZXR1cm4gZGlyT25seTsKIAl9CiAKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvZ2l0cmVwby9NYW5pZmVzdFBhcnNlci5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9naXRyZXBvL01hbmlmZXN0UGFyc2VyLmphdmEKaW5kZXggN2ViOTU1MC4uNzk2YjQyMiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9naXRyZXBvL01hbmlmZXN0UGFyc2VyLmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9naXRyZXBvL01hbmlmZXN0UGFyc2VyLmphdmEKQEAgLTgwLDcgKzgwLDcgQEAgcHVibGljIGNsYXNzIE1hbmlmZXN0UGFyc2VyIGV4dGVuZHMgRGVmYXVsdEhhbmRsZXIgewogCXByaXZhdGUgZmluYWwgU3RyaW5nIGJhc2VVcmw7CiAJcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZGVmYXVsdEJyYW5jaDsKIAlwcml2YXRlIGZpbmFsIFJlcG9zaXRvcnkgcm9vdFJlcG87Ci0JcHJpdmF0ZSBmaW5hbCBNYXA8U3RyaW5nLCBTdHJpbmc+IHJlbW90ZXM7CisJcHJpdmF0ZSBmaW5hbCBNYXA8U3RyaW5nLCBSZW1vdGU+IHJlbW90ZXM7CiAJcHJpdmF0ZSBmaW5hbCBTZXQ8U3RyaW5nPiBwbHVzR3JvdXBzOwogCXByaXZhdGUgZmluYWwgU2V0PFN0cmluZz4gbWludXNHcm91cHM7CiAJcHJpdmF0ZSBmaW5hbCBMaXN0PFJlcG9Qcm9qZWN0PiBwcm9qZWN0czsKQEAgLTE0Niw3ICsxNDYsNyBAQCBwdWJsaWMgTWFuaWZlc3RQYXJzZXIoSW5jbHVkZWRGaWxlUmVhZGVyIGluY2x1ZGVkUmVhZGVyLCBTdHJpbmcgZmlsZW5hbWUsCiAJCQl9CiAJCX0KIAotCQlyZW1vdGVzID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+KCk7CisJCXJlbW90ZXMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFJlbW90ZT4oKTsKIAkJcHJvamVjdHMgPSBuZXcgQXJyYXlMaXN0PFJlcG9Qcm9qZWN0PigpOwogCQlmaWx0ZXJlZFByb2plY3RzID0gbmV3IEFycmF5TGlzdDxSZXBvUHJvamVjdD4oKTsKIAl9CkBAIC0xOTUsMTQgKzE5NSwxNCBAQCBwdWJsaWMgdm9pZCBzdGFydEVsZW1lbnQoCiAJCX0gZWxzZSBpZiAoInJlbW90ZSIuZXF1YWxzKHFOYW1lKSkgeyAvLyROT04tTkxTLTEkCiAJCQlTdHJpbmcgYWxpYXMgPSBhdHRyaWJ1dGVzLmdldFZhbHVlKCJhbGlhcyIpOyAvLyROT04tTkxTLTEkCiAJCQlTdHJpbmcgZmV0Y2ggPSBhdHRyaWJ1dGVzLmdldFZhbHVlKCJmZXRjaCIpOyAvLyROT04tTkxTLTEkCi0JCQlyZW1vdGVzLnB1dChhdHRyaWJ1dGVzLmdldFZhbHVlKCJuYW1lIiksIGZldGNoKTsgLy8kTk9OLU5MUy0xJAorCQkJU3RyaW5nIHJldmlzaW9uID0gYXR0cmlidXRlcy5nZXRWYWx1ZSgicmV2aXNpb24iKTsgLy8kTk9OLU5MUy0xJAorCQkJUmVtb3RlIHJlbW90ZSA9IG5ldyBSZW1vdGUoZmV0Y2gsIHJldmlzaW9uKTsKKwkJCXJlbW90ZXMucHV0KGF0dHJpYnV0ZXMuZ2V0VmFsdWUoIm5hbWUiKSwgcmVtb3RlKTsgLy8kTk9OLU5MUy0xJAogCQkJaWYgKGFsaWFzICE9IG51bGwpCi0JCQkJcmVtb3Rlcy5wdXQoYWxpYXMsIGZldGNoKTsKKwkJCQlyZW1vdGVzLnB1dChhbGlhcywgcmVtb3RlKTsKIAkJfSBlbHNlIGlmICgiZGVmYXVsdCIuZXF1YWxzKHFOYW1lKSkgeyAvLyROT04tTkxTLTEkCiAJCQlkZWZhdWx0UmVtb3RlID0gYXR0cmlidXRlcy5nZXRWYWx1ZSgicmVtb3RlIik7IC8vJE5PTi1OTFMtMSQKIAkJCWRlZmF1bHRSZXZpc2lvbiA9IGF0dHJpYnV0ZXMuZ2V0VmFsdWUoInJldmlzaW9uIik7IC8vJE5PTi1OTFMtMSQKLQkJCWlmIChkZWZhdWx0UmV2aXNpb24gPT0gbnVsbCkKLQkJCQlkZWZhdWx0UmV2aXNpb24gPSBkZWZhdWx0QnJhbmNoOwogCQl9IGVsc2UgaWYgKCJjb3B5ZmlsZSIuZXF1YWxzKHFOYW1lKSkgeyAvLyROT04tTkxTLTEkCiAJCQlpZiAoY3VycmVudFByb2plY3QgPT0gbnVsbCkKIAkJCQl0aHJvdyBuZXcgU0FYRXhjZXB0aW9uKFJlcG9UZXh0LmdldCgpLmludmFsaWRNYW5pZmVzdCk7CkBAIC0yNjgsOCArMjY4LDE4IEBAIHB1YmxpYyB2b2lkIGVuZERvY3VtZW50KCkgdGhyb3dzIFNBWEV4Y2VwdGlvbiB7CiAJCX0gY2F0Y2ggKFVSSVN5bnRheEV4Y2VwdGlvbiBlKSB7CiAJCQl0aHJvdyBuZXcgU0FYRXhjZXB0aW9uKGUpOwogCQl9CisJCWlmIChkZWZhdWx0UmV2aXNpb24gPT0gbnVsbCAmJiBkZWZhdWx0UmVtb3RlICE9IG51bGwpIHsKKwkJCVJlbW90ZSByZW1vdGUgPSByZW1vdGVzLmdldChkZWZhdWx0UmVtb3RlKTsKKwkJCWlmIChyZW1vdGUgIT0gbnVsbCkgeworCQkJCWRlZmF1bHRSZXZpc2lvbiA9IHJlbW90ZS5yZXZpc2lvbjsKKwkJCX0KKwkJCWlmIChkZWZhdWx0UmV2aXNpb24gPT0gbnVsbCkgeworCQkJCWRlZmF1bHRSZXZpc2lvbiA9IGRlZmF1bHRCcmFuY2g7CisJCQl9CisJCX0KIAkJZm9yIChSZXBvUHJvamVjdCBwcm9qIDogcHJvamVjdHMpIHsKIAkJCVN0cmluZyByZW1vdGUgPSBwcm9qLmdldFJlbW90ZSgpOworCQkJU3RyaW5nIHJldmlzaW9uID0gZGVmYXVsdFJldmlzaW9uOwogCQkJaWYgKHJlbW90ZSA9PSBudWxsKSB7CiAJCQkJaWYgKGRlZmF1bHRSZW1vdGUgPT0gbnVsbCkgewogCQkJCQlpZiAoZmlsZW5hbWUgIT0gbnVsbCkKQEAgLTI4MSwxNiArMjkxLDIyIEBAIHB1YmxpYyB2b2lkIGVuZERvY3VtZW50KCkgdGhyb3dzIFNBWEV4Y2VwdGlvbiB7CiAJCQkJCQkJCVJlcG9UZXh0LmdldCgpLmVycm9yTm9EZWZhdWx0KTsKIAkJCQl9CiAJCQkJcmVtb3RlID0gZGVmYXVsdFJlbW90ZTsKKwkJCX0gZWxzZSB7CisJCQkJUmVtb3RlIHIgPSByZW1vdGVzLmdldChyZW1vdGUpOworCQkJCWlmIChyICE9IG51bGwgJiYgci5yZXZpc2lvbiAhPSBudWxsKSB7CisJCQkJCXJldmlzaW9uID0gci5yZXZpc2lvbjsKKwkJCQl9CiAJCQl9CiAJCQlTdHJpbmcgcmVtb3RlVXJsID0gcmVtb3RlVXJscy5nZXQocmVtb3RlKTsKIAkJCWlmIChyZW1vdGVVcmwgPT0gbnVsbCkgewotCQkJCXJlbW90ZVVybCA9IGJhc2VVcmkucmVzb2x2ZShyZW1vdGVzLmdldChyZW1vdGUpKS50b1N0cmluZygpOworCQkJCXJlbW90ZVVybCA9CisJCQkJCQliYXNlVXJpLnJlc29sdmUocmVtb3Rlcy5nZXQocmVtb3RlKS5mZXRjaCkudG9TdHJpbmcoKTsKIAkJCQlpZiAoIXJlbW90ZVVybC5lbmRzV2l0aCgiLyIpKSAvLyROT04tTkxTLTEkCiAJCQkJCXJlbW90ZVVybCA9IHJlbW90ZVVybCArICIvIjsgLy8kTk9OLU5MUy0xJAogCQkJCXJlbW90ZVVybHMucHV0KHJlbW90ZSwgcmVtb3RlVXJsKTsKIAkJCX0KIAkJCXByb2ouc2V0VXJsKHJlbW90ZVVybCArIHByb2ouZ2V0TmFtZSgpKQotCQkJCQkuc2V0RGVmYXVsdFJldmlzaW9uKGRlZmF1bHRSZXZpc2lvbik7CisJCQkJCS5zZXREZWZhdWx0UmV2aXNpb24ocmV2aXNpb24pOwogCQl9CiAKIAkJZmlsdGVyZWRQcm9qZWN0cy5hZGRBbGwocHJvamVjdHMpOwpAQCAtMzg5LDQgKzQwNSwxNCBAQCBwcml2YXRlIGJvb2xlYW4gaXNOZXN0ZWRDb3B5ZmlsZShDb3B5RmlsZSBjb3B5ZmlsZSkgewogCQl9CiAJCXJldHVybiBmYWxzZTsKIAl9CisKKwlwcml2YXRlIHN0YXRpYyBjbGFzcyBSZW1vdGUgeworCQlmaW5hbCBTdHJpbmcgZmV0Y2g7CisJCWZpbmFsIFN0cmluZyByZXZpc2lvbjsKKworCQlSZW1vdGUoU3RyaW5nIGZldGNoLCBTdHJpbmcgcmV2aXNpb24pIHsKKwkJCXRoaXMuZmV0Y2ggPSBmZXRjaDsKKwkJCXRoaXMucmV2aXNpb24gPSByZXZpc2lvbjsKKwkJfQorCX0KIH0KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwva2V0Y2gvRWxlY3Rpb25Sb3VuZC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9rZXRjaC9FbGVjdGlvblJvdW5kLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE0ZWFiMgotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwva2V0Y2gvRWxlY3Rpb25Sb3VuZC5qYXZhCkBAIC0wLDAgKzEsMTQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2LCBHb29nbGUgSW5jLgorICogYW5kIG90aGVyIGNvcHlyaWdodCBvd25lcnMgYXMgZG9jdW1lbnRlZCBpbiB0aGUgcHJvamVjdCdzIElQIGxvZy4KKyAqCisgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZQorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYxLjAgd2hpY2gKKyAqIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBpcyByZXByb2R1Y2VkIGJlbG93LCBhbmQgaXMKKyAqIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZWRsLXYxMC5waHAKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAqICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCBJbmMuIG5vciB0aGUKKyAqICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKKyAqICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgorICogICB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5ECisgKiBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAorICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYKKyAqIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK3BhY2thZ2Ugb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5rZXRjaDsKKworaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLmtldGNoLktldGNoQ29uc3RhbnRzLlRFUk07CisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuQ29tbWl0QnVpbGRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5PYmplY3RJZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5PYmplY3RJbnNlcnRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5SZXBvc2l0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLlRyZWVGb3JtYXR0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrLlJldkNvbW1pdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGsuUmV2V2FsazsKK2ltcG9ydCBvcmcuc2xmNGouTG9nZ2VyOworaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXJGYWN0b3J5OworCisvKioKKyAqIFRoZSBpbml0aWFsIHtAbGluayBSb3VuZH0gZm9yIGEgbGVhZGVybGVzcyByZXBvc2l0b3J5LCB1c2VkIHRvIGVzdGFibGlzaCBhCisgKiBsZWFkZXIuCisgKi8KK2NsYXNzIEVsZWN0aW9uUm91bmQgZXh0ZW5kcyBSb3VuZCB7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZyA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKEVsZWN0aW9uUm91bmQuY2xhc3MpOworCisJcHJpdmF0ZSBsb25nIHRlcm07CisKKwlFbGVjdGlvblJvdW5kKEtldGNoTGVhZGVyIGxlYWRlciwgTG9nSW5kZXggaGVhZCkgeworCQlzdXBlcihsZWFkZXIsIGhlYWQpOworCX0KKworCUBPdmVycmlkZQorCXZvaWQgc3RhcnQoKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQlPYmplY3RJZCBpZDsKKwkJdHJ5IChSZXBvc2l0b3J5IGdpdCA9IGxlYWRlci5vcGVuUmVwb3NpdG9yeSgpOworCQkJCU9iamVjdEluc2VydGVyIGluc2VydGVyID0gZ2l0Lm5ld09iamVjdEluc2VydGVyKCkpIHsKKwkJCWlkID0gYnVtcFRlcm0oZ2l0LCBpbnNlcnRlcik7CisJCQlpbnNlcnRlci5mbHVzaCgpOworCQl9CisJCXJ1bkFzeW5jKGlkKTsKKwl9CisKKwlAT3ZlcnJpZGUKKwl2b2lkIHN1Y2Nlc3MoKSB7CisJCS8vIERvIG5vdGhpbmcgdXBvbiBlbGVjdGlvbiwgS2V0Y2hMZWFkZXIgd2lsbCBjb3B5IHRoZSB0ZXJtLgorCX0KKworCWxvbmcgZ2V0VGVybSgpIHsKKwkJcmV0dXJuIHRlcm07CisJfQorCisJcHJpdmF0ZSBPYmplY3RJZCBidW1wVGVybShSZXBvc2l0b3J5IGdpdCwgT2JqZWN0SW5zZXJ0ZXIgaW5zZXJ0ZXIpCisJCQl0aHJvd3MgSU9FeGNlcHRpb24geworCQlDb21taXRCdWlsZGVyIGIgPSBuZXcgQ29tbWl0QnVpbGRlcigpOworCQlpZiAoIU9iamVjdElkLnplcm9JZCgpLmVxdWFscyhhY2NlcHRlZE9sZEluZGV4KSkgeworCQkJdHJ5IChSZXZXYWxrIHJ3ID0gbmV3IFJldldhbGsoZ2l0KSkgeworCQkJCVJldkNvbW1pdCBjID0gcncucGFyc2VDb21taXQoYWNjZXB0ZWRPbGRJbmRleCk7CisJCQkJYi5zZXRUcmVlSWQoYy5nZXRUcmVlKCkpOworCQkJCWIuc2V0UGFyZW50SWQoYWNjZXB0ZWRPbGRJbmRleCk7CisJCQkJdGVybSA9IHBhcnNlVGVybShjLmdldEZvb3RlckxpbmVzKFRFUk0pKSArIDE7CisJCQl9CisJCX0gZWxzZSB7CisJCQl0ZXJtID0gMTsKKwkJCWIuc2V0VHJlZUlkKGluc2VydGVyLmluc2VydChuZXcgVHJlZUZvcm1hdHRlcigpKSk7CisJCX0KKworCQlTdHJpbmdCdWlsZGVyIG1zZyA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisJCW1zZy5hcHBlbmQoS2V0Y2hDb25zdGFudHMuVEVSTS5nZXROYW1lKCkpCisJCQkJLmFwcGVuZCgiOiAiKSAvLyROT04tTkxTLTEkCisJCQkJLmFwcGVuZCh0ZXJtKTsKKworCQlTdHJpbmcgdGFnID0gbGVhZGVyLmdldFN5c3RlbSgpLm5ld0xlYWRlclRhZygpOworCQlpZiAodGFnICE9IG51bGwgJiYgIXRhZy5pc0VtcHR5KCkpIHsKKwkJCW1zZy5hcHBlbmQoJyAnKS5hcHBlbmQodGFnKTsKKwkJfQorCisJCWIuc2V0QXV0aG9yKGxlYWRlci5nZXRTeXN0ZW0oKS5uZXdDb21taXR0ZXIoKSk7CisJCWIuc2V0Q29tbWl0dGVyKGIuZ2V0QXV0aG9yKCkpOworCQliLnNldE1lc3NhZ2UobXNnLnRvU3RyaW5nKCkpOworCisJCWlmIChsb2cuaXNEZWJ1Z0VuYWJsZWQoKSkgeworCQkJbG9nLmRlYnVnKCJUcnlpbmcgdG8gZWxlY3QgbXlzZWxmICIgKyBiLmdldE1lc3NhZ2UoKSk7IC8vJE5PTi1OTFMtMSQKKwkJfQorCQlyZXR1cm4gaW5zZXJ0ZXIuaW5zZXJ0KGIpOworCX0KKworCXByaXZhdGUgc3RhdGljIGxvbmcgcGFyc2VUZXJtKExpc3Q8U3RyaW5nPiBmb290ZXIpIHsKKwkJaWYgKGZvb3Rlci5pc0VtcHR5KCkpIHsKKwkJCXJldHVybiAwOworCQl9CisKKwkJU3RyaW5nIHMgPSBmb290ZXIuZ2V0KDApOworCQlpbnQgcCA9IHMuaW5kZXhPZignICcpOworCQlpZiAocCA+IDApIHsKKwkJCXMgPSBzLnN1YnN0cmluZygwLCBwKTsKKwkJfQorCQlyZXR1cm4gTG9uZy5wYXJzZUxvbmcocywgMTApOworCX0KK30KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwva2V0Y2gvS2V0Y2hDb25zdGFudHMuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwva2V0Y2gvS2V0Y2hDb25zdGFudHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzFjMDU5Ci0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9rZXRjaC9LZXRjaENvbnN0YW50cy5qYXZhCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYsIEdvb2dsZSBJbmMuCisgKiBhbmQgb3RoZXIgY29weXJpZ2h0IG93bmVycyBhcyBkb2N1bWVudGVkIGluIHRoZSBwcm9qZWN0J3MgSVAgbG9nLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlCisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgRGlzdHJpYnV0aW9uIExpY2Vuc2UgdjEuMCB3aGljaAorICogYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGlzIHJlcHJvZHVjZWQgYmVsb3csIGFuZCBpcworICogYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lZGwtdjEwLnBocAorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIEluYy4gbm9yIHRoZQorICogICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorICogICBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCisgKiAgIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQKKyAqIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCisgKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRgorICogQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworcGFja2FnZSBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLmtldGNoOworCitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrLkZvb3RlcktleTsKKworLyoqIEZyZXF1ZW50bHkgdXNlZCBjb25zdGFudHMgaW4gYSBLZXRjaCBzeXN0ZW0uICovCitwdWJsaWMgY2xhc3MgS2V0Y2hDb25zdGFudHMgeworCS8qKgorCSAqIERlZmF1bHQgcmVmZXJlbmNlIG5hbWVzcGFjZSBob2xkaW5nIHtAbGluayAjQUNDRVBURUR9IGFuZAorCSAqIHtAbGluayAjQ09NTUlUVEVEfSByZWZlcmVuY2VzIGFuZCB0aGUge0BsaW5rICNTVEFHRX0gc3ViLW5hbWVzcGFjZS4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBERUZBVUxUX1RYTl9OQU1FU1BBQ0UgPSAicmVmcy90eG4vIjsgLy8kTk9OLU5MUy0xJAorCisJLyoqIFJlZmVyZW5jZSBuYW1lIGhvbGRpbmcgdGhlIFJlZlRyZWUgYWNjZXB0ZWQgYnkgYSBmb2xsb3dlci4gKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBQ0NFUFRFRCA9ICJhY2NlcHRlZCI7IC8vJE5PTi1OTFMtMSQKKworCS8qKiBSZWZlcmVuY2UgbmFtZSBob2xkaW5nIHRoZSBSZWZUcmVlIGtub3duIHRvIGJlIGNvbW1pdHRlZC4gKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDT01NSVRURUQgPSAiY29tbWl0dGVkIjsgLy8kTk9OLU5MUy0xJAorCisJLyoqIFJlZmVyZW5jZSBzdWJkaXJlY3RvcnkgaG9sZGluZyBwcm9wb3NlZCBoZWFkcy4gKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTVEFHRSA9ICJzdGFnZS8iOyAvLyROT04tTkxTLTEkCisKKwkvKiogRm9vdGVyIGNvbnRhaW5pbmcgdGhlIGN1cnJlbnQgdGVybS4gKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIEZvb3RlcktleSBURVJNID0gbmV3IEZvb3RlcktleSgiVGVybSIpOyAvLyROT04tTkxTLTEkCisKKwkvKiogU2VjdGlvbiBmb3IgS2V0Y2ggY29uZmlndXJhdGlvbiAoe0Bjb2RlIGtldGNofSkuICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09ORklHX1NFQ1RJT05fS0VUQ0ggPSAia2V0Y2giOyAvLyROT04tTkxTLTEkCisKKwkvKiogQmVoYXZpb3IgZm9yIGEgcmVwbGljYSAoe0Bjb2RlIHJlbW90ZS4kbmFtZS5rZXRjaC10eXBlfSkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDT05GSUdfS0VZX1RZUEUgPSAia2V0Y2gtdHlwZSI7IC8vJE5PTi1OTFMtMSQKKworCS8qKiBCZWhhdmlvciBmb3IgYSByZXBsaWNhICh7QGNvZGUgcmVtb3RlLiRuYW1lLmtldGNoLWNvbW1pdH0pICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09ORklHX0tFWV9DT01NSVQgPSAia2V0Y2gtY29tbWl0IjsgLy8kTk9OLU5MUy0xJAorCisJLyoqIEJlaGF2aW9yIGZvciBhIHJlcGxpY2EgKHtAY29kZSByZW1vdGUuJG5hbWUua2V0Y2gtc3BlZWR9KSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENPTkZJR19LRVlfU1BFRUQgPSAia2V0Y2gtc3BlZWQiOyAvLyROT04tTkxTLTEkCisKKwlwcml2YXRlIEtldGNoQ29uc3RhbnRzKCkgeworCX0KK30KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwva2V0Y2gvS2V0Y2hMZWFkZXIuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwva2V0Y2gvS2V0Y2hMZWFkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmNkNmJjCi0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9rZXRjaC9LZXRjaExlYWRlci5qYXZhCkBAIC0wLDAgKzEsNjI0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2LCBHb29nbGUgSW5jLgorICogYW5kIG90aGVyIGNvcHlyaWdodCBvd25lcnMgYXMgZG9jdW1lbnRlZCBpbiB0aGUgcHJvamVjdCdzIElQIGxvZy4KKyAqCisgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZQorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYxLjAgd2hpY2gKKyAqIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBpcyByZXByb2R1Y2VkIGJlbG93LCBhbmQgaXMKKyAqIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZWRsLXYxMC5waHAKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAqICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCBJbmMuIG5vciB0aGUKKyAqICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKKyAqICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgorICogICB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5ECisgKiBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAorICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYKKyAqIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK3BhY2thZ2Ugb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5rZXRjaDsKKworaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLmtldGNoLktldGNoTGVhZGVyLlN0YXRlLkNBTkRJREFURTsKK2ltcG9ydCBzdGF0aWMgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5rZXRjaC5LZXRjaExlYWRlci5TdGF0ZS5MRUFERVI7CitpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwua2V0Y2guS2V0Y2hMZWFkZXIuU3RhdGUuU0hVVERPV047CitpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwua2V0Y2guS2V0Y2hSZXBsaWNhLlBhcnRpY2lwYXRpb24uRk9MTE9XRVJfT05MWTsKK2ltcG9ydCBzdGF0aWMgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5rZXRjaC5Qcm9wb3NhbC5TdGF0ZS5RVUVVRUQ7CisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEudGV4dC5NZXNzYWdlRm9ybWF0OworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5sb2Nrcy5Mb2NrOworaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LmxvY2tzLlJlZW50cmFudExvY2s7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UucmVmdHJlZS5SZWZUcmVlOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLk9iamVjdElkOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLlJlcG9zaXRvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrLlJldkNvbW1pdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGsuUmV2V2FsazsKK2ltcG9ydCBvcmcuc2xmNGouTG9nZ2VyOworaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXJGYWN0b3J5OworCisvKioKKyAqIEEgbGVhZGVyIG1hbmFnaW5nIGNvbnNlbnN1cyBhY3Jvc3MgcmVtb3RlIGZvbGxvd2Vycy4KKyAqIDxwPgorICogQSBsZWFkZXIgaW5zdGFuY2Ugc3RhcnRzIHVwIGluIHtAbGluayBTdGF0ZSNDQU5ESURBVEV9IGFuZCB0cmllcyB0byBiZWdpbiBhCisgKiBuZXcgdGVybSBieSBzZW5kaW5nIGFuIHtAbGluayBFbGVjdGlvblJvdW5kfSB0byBhbGwgcmVwbGljYXMuIEl0cyB0ZXJtIHN0YXJ0cworICogaWYgYSBtYWpvcml0eSBvZiByZXBsaWNhcyBoYXZlIGFjY2VwdGVkIHRoaXMgbGVhZGVyIGluc3RhbmNlIGZvciB0aGUgdGVybS4KKyAqIDxwPgorICogT25jZSBlbGVjdGVkIGJ5IGEgbWFqb3JpdHkgdGhlIGluc3RhbmNlIGVudGVycyB7QGxpbmsgU3RhdGUjTEVBREVSfSBhbmQgcnVucworICogcHJvcG9zYWxzIG9mZmVyZWQgdG8ge0BsaW5rICNxdWV1ZVByb3Bvc2FsKFByb3Bvc2FsKX0uIFRoaXMgY29udGludWVzIHVudGlsCisgKiB0aGUgbGVhZGVyIGlzIHRpbWVkIG91dCBmb3IgaW5hY3Rpdml0eSwgb3IgaXMgZGVwb3NlZCBieSBhIGNvbXBldGluZyBsZWFkZXIKKyAqIGdhaW5pbmcgaXRzIG93biBtYWpvcml0eS4KKyAqIDxwPgorICogT25jZSB0aW1lZCBvdXQgb3IgZGVwb3NlZCB0aGlzIHtAY29kZSBLZXRjaExlYWRlcn0gaW5zdGFuY2Ugc2hvdWxkIGJlCisgKiBkaXNjYXJkZWQsIGFuZCBhIG5ldyBpbnN0YW5jZSB0YWtlcyBvdmVyLgorICogPHA+CisgKiBFYWNoIGxlYWRlciBpbnN0YW5jZSBjb29yZGluYXRlcyBhIGdyb3VwIG9mIHtAbGluayBLZXRjaFJlcGxpY2F9cy4gUmVwbGljYQorICogaW5zdGFuY2VzIGFyZSBvd25lZCBieSB0aGUgbGVhZGVyIGluc3RhbmNlIGFuZCBtdXN0IGJlIGRpc2NhcmRlZCB3aGVuIHRoZQorICogbGVhZGVyIGlzIGRpc2NhcmRlZC4KKyAqIDxwPgorICogSW4gS2V0Y2ggYWxsIHB1c2ggcmVxdWVzdHMgYXJlIGlzc3VlZCB0aHJvdWdoIHRoZSBsZWFkZXIuIFRoZSBzdGVwcyBhcmUgYXMKKyAqIGZvbGxvd3MgKHNlZSB7QGxpbmsgS2V0Y2hQcmVSZWNlaXZlfSBmb3IgYW4gZXhhbXBsZSk6CisgKiA8dWw+CisgKiA8bGk+Q3JlYXRlIGEge0BsaW5rIFByb3Bvc2FsfSB3aXRoIHRoZQorICoge0BsaW5rIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LlJlY2VpdmVDb21tYW5kfXMgdGhhdCByZXByZXNlbnQgdGhlIHB1c2guCisgKiA8bGk+SW52b2tlIHtAbGluayAjcXVldWVQcm9wb3NhbChQcm9wb3NhbCl9IG9uIHRoZSBsZWFkZXIgaW5zdGFuY2UuCisgKiA8bGk+V2FpdCBmb3IgY29uc2Vuc3VzIHdpdGgge0BsaW5rIFByb3Bvc2FsI2F3YWl0KCl9LgorICogPGxpPlRvIGV4YW1pbmUgdGhlIHN0YXR1cyBvZiB0aGUgcHVzaCwgY2hlY2sge0BsaW5rIFByb3Bvc2FsI2dldENvbW1hbmRzKCl9LAorICogbG9va2luZyBhdAorICoge0BsaW5rIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5yZWZ0cmVlLkNvbW1hbmQjZ2V0UmVzdWx0KCl9LgorICogPC91bD4KKyAqIDxwPgorICogVGhlIGxlYWRlciBnYWlucyBjb25zZW5zdXMgYnkgZmlyc3QgcHVzaGluZyB0aGUgbmVlZGVkIG9iamVjdHMgYW5kIGEKKyAqIHtAbGluayBSZWZUcmVlfSByZXByZXNlbnRpbmcgdGhlIGRlc2lyZWQgdGFyZ2V0IHJlcG9zaXRvcnkgc3RhdGUgdG8gdGhlCisgKiB7QGNvZGUgcmVmcy90eG4vYWNjZXB0ZWR9IGJyYW5jaCBvbiBlYWNoIG9mIHRoZSByZXBsaWNhcy4gT25jZSBhIG1ham9yaXR5IGhhcworICogc3VjY2VlZGVkLCB0aGUgbGVhZGVyIGNvbW1pdHMgdGhlIHN0YXRlIGJ5IGVpdGhlciBwdXNoaW5nIHRoZQorICoge0Bjb2RlIHJlZnMvdHhuL2FjY2VwdGVkfSB2YWx1ZSB0byB7QGNvZGUgcmVmcy90eG4vY29tbWl0dGVkfSAoZm9yCisgKiBLZXRjaC1hd2FyZSByZXBsaWNhcykgb3IgYnkgcHVzaGluZyB1cGRhdGVzIHRvIHtAY29kZSByZWZzL2hlYWRzL21hc3Rlcn0sCisgKiBldGMuIGZvciBzdG9jayBHaXQgcmVwbGljYXMuCisgKiA8cD4KKyAqIEludGVybmFsbHksIHRoZSBhY3R1YWwgdHJhbnNwb3J0IHRvIHJlcGxpY2FzIGlzIHBlcmZvcm1lZCBvbiBiYWNrZ3JvdW5kCisgKiB0aHJlYWRzIHZpYSB0aGUge0BsaW5rIEtldGNoU3lzdGVtfSdzIGV4ZWN1dG9yIHNlcnZpY2UuIEZvciBwZXJmb3JtYW5jZSwgdGhlCisgKiB7QGxpbmsgS2V0Y2hMZWFkZXJ9LCB7QGxpbmsgS2V0Y2hSZXBsaWNhfSBhbmQge0BsaW5rIFByb3Bvc2FsfSBvYmplY3RzIHNoYXJlCisgKiBzb21lIHN0YXRlLCBhbmQgbWF5IGludm9rZSBlYWNoIG90aGVyJ3MgbWV0aG9kcyBvbiBkaWZmZXJlbnQgdGhyZWFkcy4gVGhpcworICogYWNjZXNzIGlzIHByb3RlY3RlZCBieSB0aGUgbGVhZGVyJ3Mge0BsaW5rICNsb2NrfSBvYmplY3QuIENhcmUgbXVzdCBiZSB0YWtlbgorICogdG8gcHJldmVudCBjb25jdXJyZW50IGFjY2VzcyBieSBjb3JyZWN0bHkgb2J0YWluaW5nIHRoZSBsZWFkZXIncyBsb2NrLgorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgS2V0Y2hMZWFkZXIgeworCXByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBsb2cgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcihLZXRjaExlYWRlci5jbGFzcyk7CisKKwkvKiogQ3VycmVudCBzdGF0ZSBvZiB0aGUgbGVhZGVyIGluc3RhbmNlLiAqLworCXB1YmxpYyBzdGF0aWMgZW51bSBTdGF0ZSB7CisJCS8qKiBOZXdseSBjcmVhdGVkIGluc3RhbmNlIHRyeWluZyB0byBlbGVjdCBpdHNlbGYgbGVhZGVyLiAqLworCQlDQU5ESURBVEUsCisKKwkJLyoqIExlYWRlciBpbnN0YW5jZSBlbGVjdGVkIGJ5IGEgbWFqb3JpdHkuICovCisJCUxFQURFUiwKKworCQkvKiogSW5zdGFuY2UgaGFzIGJlZW4gZGVwb3NlZCBieSBhbm90aGVyIHdpdGggYSBtb3JlIHJlY2VudCB0ZXJtLiAqLworCQlERVBPU0VELAorCisJCS8qKiBMZWFkZXIgaGFzIGJlZW4gZ3JhY2VmdWxseSBzaHV0ZG93biwgZS5nLiBkdWUgdG8gaW5hY3Rpdml0eS4gKi8KKwkJU0hVVERPV047CisJfQorCisJcHJpdmF0ZSBmaW5hbCBLZXRjaFN5c3RlbSBzeXN0ZW07CisKKwkvKiogTGVhZGVyJ3Mga25vd2xlZGdlIG9mIHJlcGxpY2FzIGZvciB0aGlzIHJlcG9zaXRvcnkuICovCisJcHJpdmF0ZSBLZXRjaFJlcGxpY2FbXSB2b3RlcnM7CisJcHJpdmF0ZSBLZXRjaFJlcGxpY2FbXSBmb2xsb3dlcnM7CisJcHJpdmF0ZSBMb2NhbFJlcGxpY2Egc2VsZjsKKworCS8qKgorCSAqIExvY2sgcHJvdGVjdGluZyBhbGwgZGF0YSB3aXRoaW4gdGhpcyBsZWFkZXIgaW5zdGFuY2UuCisJICogPHA+CisJICogVGhpcyBsb2NrIGV4dGVuZHMgaW50byB0aGUge0BsaW5rIEtldGNoUmVwbGljYX0gaW5zdGFuY2VzIHVzZWQgYnkgdGhlCisJICogbGVhZGVyLiBUaGV5IHNoYXJlIHRoZSBzYW1lIGxvY2sgaW5zdGFuY2UgdG8gc2ltcGxpZnkgY29uY3VycmVuY3kuCisJICovCisJZmluYWwgTG9jayBsb2NrOworCisJcHJpdmF0ZSBTdGF0ZSBzdGF0ZSA9IENBTkRJREFURTsKKworCS8qKiBUZXJtIG9mIHRoaXMgbGVhZGVyLCBvbmNlIGVsZWN0ZWQuICovCisJcHJpdmF0ZSBsb25nIHRlcm07CisKKwkvKioKKwkgKiBQZW5kaW5nIHByb3Bvc2FscyBhY2NlcHRlZCBpbnRvIHRoZSBxdWV1ZSBpbiBGSUZPIG9yZGVyLgorCSAqIDxwPgorCSAqIFRoZXNlIHByb3Bvc2FscyB3ZXJlIHByZWZsaWdodGVkIGFuZCBkbyBub3QgY29udGFpbiBhbnkgY29uZmxpY3RzIHdpdGgKKwkgKiBlYWNoIG90aGVyIGFuZCB0aGVpciBleHBlY3RhdGlvbnMgbWF0Y2hlZCB0aGUgbGVhZGVyJ3MgbG9jYWwgdmlldyBvZiB0aGUKKwkgKiBhZ3JlZWQgdXBvbiB7QGNvZGUgcmVmcy90eG4vYWNjZXB0ZWR9IHRyZWUuCisJICovCisJcHJpdmF0ZSBmaW5hbCBMaXN0PFByb3Bvc2FsPiBxdWV1ZWQ7CisKKwkvKioKKwkgKiBTdGF0ZSBvZiB0aGUgcmVwb3NpdG9yeSdzIFJlZlRyZWUgYWZ0ZXIgYXBwbHlpbmcgYWxsIGVudHJpZXMgaW4KKwkgKiB7QGxpbmsgI3F1ZXVlZH0uIE5ldyBwcm9wb3NhbHMgbXVzdCBiZSBjb25zaXN0ZW50IHdpdGggdGhpcyB0cmVlIHRvIGJlCisJICogYXBwZW5kZWQgdG8gdGhlIGVuZCBvZiB7QGxpbmsgI3F1ZXVlZH0uCisJICogPHA+CisJICogTXVzdCBiZSBkZWVwLWNvcGllZCB3aXRoIHtAbGluayBSZWZUcmVlI2NvcHkoKX0gaWYKKwkgKiB7QGxpbmsgI3JvdW5kSG9sZHNSZWZlcmVuY2VUb1JlZlRyZWV9IGlzIHtAY29kZSB0cnVlfS4KKwkgKi8KKwlwcml2YXRlIFJlZlRyZWUgcmVmVHJlZTsKKworCS8qKgorCSAqIElmIHtAY29kZSB0cnVlfSB7QGxpbmsgI3JlZlRyZWV9IG11c3QgYmUgZHVwbGljYXRlZCBiZWZvcmUgcXVldWluZyB0aGUKKwkgKiBuZXh0IHByb3Bvc2FsLiBUaGUge0BsaW5rICNyZWZUcmVlfSB3YXMgcGFzc2VkIGludG8gdGhlIGNvbnN0cnVjdG9yIG9mIGEKKwkgKiB7QGxpbmsgUHJvcG9zYWxSb3VuZH0sIGFuZCB0aGF0IGV4dGVybmFsIHJlZmVyZW5jZSB0byB0aGUge0BsaW5rIFJlZlRyZWV9CisJICogb2JqZWN0IGlzIGhlbGQgYnkgdGhlIHByb3Bvc2FsIHVudGlsIGl0IG1hdGVyaWFsaXplcyB0aGUgdHJlZSBvYmplY3QgaW4KKwkgKiB0aGUgb2JqZWN0IHN0b3JlLiBUaGlzIGZpZWxkIGlzIHNldCB7QGNvZGUgdHJ1ZX0gd2hlbiB0aGUgcHJvcG9zYWwgYmVnaW5zCisJICogZXhlY3V0aW9uIGFuZCBzZXQge0Bjb2RlIGZhbHNlfSBvbmNlIHRyZWUgb2JqZWN0cyBhcmUgcGVyc2lzdGVkIGluIHRoZQorCSAqIGxvY2FsIHJlcG9zaXRvcnkncyBvYmplY3Qgc3RvcmUgb3Ige0BsaW5rICNyZWZUcmVlfSBpcyByZXBsYWNlZCB3aXRoIGEKKwkgKiBjb3B5IHRvIGlzb2xhdGUgaXQgZnJvbSBhbnkgcnVubmluZyByb3VuZHMuCisJICogPHA+CisJICogSWYgcHJvcG9zYWxzIGFycml2ZSBsZXNzIGZyZXF1ZW50bHkgdGhhbiB0aGUge0Bjb2RlIFJlZlRyZWV9IGlzIHdyaXR0ZW4KKwkgKiBvdXQgdG8gdGhlIHJlcG9zaXRvcnkgdGhlIHtAbGluayAjcm91bmRIb2xkc1JlZmVyZW5jZVRvUmVmVHJlZX0gYmVoYXZpb3IKKwkgKiBhdm9pZHMgZHVwbGljYXRpbmcge0BsaW5rICNyZWZUcmVlfSwgcmVkdWNpbmcgYm90aCB0aW1lIGFuZCBtZW1vcnkgdXNlZC4KKwkgKiBIb3dldmVyIGlmIHByb3Bvc2FscyBhcnJpdmUgbW9yZSBmcmVxdWVudGx5IHtAbGluayAjcmVmVHJlZX0gbXVzdCBiZQorCSAqIGR1cGxpY2F0ZWQgdG8gcHJldmVudCBuZXdseSBxdWV1ZWQgcHJvcG9zYWxzIGZyb20gY29ycnVwdGluZyB0aGUKKwkgKiB7QGxpbmsgI3J1bm5pbmdSb3VuZH0uCisJICovCisJdm9sYXRpbGUgYm9vbGVhbiByb3VuZEhvbGRzUmVmZXJlbmNlVG9SZWZUcmVlOworCisJLyoqIEVuZCBvZiB0aGUgbGVhZGVyJ3MgbG9nLiAqLworCXByaXZhdGUgTG9nSW5kZXggaGVhZEluZGV4OworCisJLyoqIExlYWRlciBrbm93cyB0aGlzIChhbmQgYWxsIHByaW9yKSBzdGF0ZXMgYXJlIGNvbW1pdHRlZC4gKi8KKwlwcml2YXRlIExvZ0luZGV4IGNvbW1pdHRlZEluZGV4OworCisJLyoqCisJICogSXMgdGhlIGxlYWRlciBpZGxlIHdpdGggbm8gd29yayBwZW5kaW5nPyBJZiB7QGNvZGUgdHJ1ZX0gdGhlcmUgaXMgbm8gd29yaworCSAqIGZvciB0aGUgbGVhZGVyIChub3JtYWwgc3RhdGUpLiBUaGlzIGZpZWxkIGlzIHtAY29kZSBmYWxzZX0gd2hlbiB0aGUKKwkgKiBsZWFkZXIgdGhyZWFkIGlzIHNjaGVkdWxlZCBmb3IgZXhlY3V0aW9uLCBvciB3aGlsZSB7QGxpbmsgI3J1bm5pbmdSb3VuZH0KKwkgKiBkZWZpbmVzIGEgcm91bmQgaW4gcHJvZ3Jlc3MuCisJICovCisJcHJpdmF0ZSBib29sZWFuIGlkbGU7CisKKwkvKiogQ3VycmVudCByb3VuZCB0aGUgbGVhZGVyIGlzIHByZXBhcmluZyBhbmQgd2FpdGluZyBmb3IgYSB2b3RlIG9uLiAqLworCXByaXZhdGUgUm91bmQgcnVubmluZ1JvdW5kOworCisJLyoqCisJICogQ29uc3RydWN0IGEgbGVhZGVyIGZvciBhIEtldGNoIGluc3RhbmNlLgorCSAqCisJICogQHBhcmFtIHN5c3RlbQorCSAqICAgICAgICAgICAgS2V0Y2ggc3lzdGVtIGNvbmZpZ3VyYXRpb24gdGhlIGxlYWRlciBtdXN0IGFkaGVyZSB0by4KKwkgKi8KKwlwcm90ZWN0ZWQgS2V0Y2hMZWFkZXIoS2V0Y2hTeXN0ZW0gc3lzdGVtKSB7CisJCXRoaXMuc3lzdGVtID0gc3lzdGVtOworCQl0aGlzLmxvY2sgPSBuZXcgUmVlbnRyYW50TG9jayh0cnVlIC8qIGZhaXIgKi8pOworCQl0aGlzLnF1ZXVlZCA9IG5ldyBBcnJheUxpc3Q8Pig0KTsKKwkJdGhpcy5pZGxlID0gdHJ1ZTsKKwl9CisKKwkvKiogQHJldHVybiBzeXN0ZW0gY29uZmlndXJhdGlvbi4gKi8KKwlLZXRjaFN5c3RlbSBnZXRTeXN0ZW0oKSB7CisJCXJldHVybiBzeXN0ZW07CisJfQorCisJLyoqCisJICogQ29uZmlndXJlIHRoZSByZXBsaWNhcyB1c2VkIGJ5IHRoaXMgS2V0Y2ggaW5zdGFuY2UuCisJICogPHA+CisJICogUmVwbGljYXMgc2hvdWxkIGJlIGNvbmZpZ3VyZWQgb25jZSBhdCBjcmVhdGlvbiBiZWZvcmUgYW55IHByb3Bvc2FscyBhcmUKKwkgKiBleGVjdXRlZC4gT25jZSBlbGVjdGlvbnMgaGFwcGVuLCA8Yj5yZWNvbmZpZ3VyYXRpb24gaXMgYSBjb21wbGljYXRlZAorCSAqIGNvbmNlcHQgdGhhdCBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZDwvYj4uCisJICoKKwkgKiBAcGFyYW0gcmVwbGljYXMKKwkgKiAgICAgICAgICAgIG1lbWJlcnMgcGFydGljaXBhdGluZyB3aXRoIHRoZSBzYW1lIHJlcG9zaXRvcnkuCisJICovCisJcHVibGljIHZvaWQgc2V0UmVwbGljYXMoQ29sbGVjdGlvbjxLZXRjaFJlcGxpY2E+IHJlcGxpY2FzKSB7CisJCUxpc3Q8S2V0Y2hSZXBsaWNhPiB2ID0gbmV3IEFycmF5TGlzdDw+KDUpOworCQlMaXN0PEtldGNoUmVwbGljYT4gZiA9IG5ldyBBcnJheUxpc3Q8Pig1KTsKKwkJZm9yIChLZXRjaFJlcGxpY2EgciA6IHJlcGxpY2FzKSB7CisJCQlzd2l0Y2ggKHIuZ2V0UGFydGljaXBhdGlvbigpKSB7CisJCQljYXNlIEZVTEw6CisJCQkJdi5hZGQocik7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgRk9MTE9XRVJfT05MWToKKwkJCQlmLmFkZChyKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCUNvbGxlY3Rpb248SW50ZWdlcj4gdmFsaWRWb3RlcnMgPSB2YWxpZFZvdGVyQ291bnRzKCk7CisJCWlmICghdmFsaWRWb3RlcnMuY29udGFpbnMoSW50ZWdlci52YWx1ZU9mKHYuc2l6ZSgpKSkpIHsKKwkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oTWVzc2FnZUZvcm1hdC5mb3JtYXQoCisJCQkJCUtldGNoVGV4dC5nZXQoKS51bnN1cHBvcnRlZFZvdGVyQ291bnQsCisJCQkJCUludGVnZXIudmFsdWVPZih2LnNpemUoKSksCisJCQkJCXZhbGlkVm90ZXJzKSk7CisJCX0KKworCQlMb2NhbFJlcGxpY2EgbWUgPSBmaW5kTG9jYWwodik7CisJCWlmIChtZSA9PSBudWxsKSB7CisJCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAorCQkJCQlLZXRjaFRleHQuZ2V0KCkubG9jYWxSZXBsaWNhUmVxdWlyZWQpOworCQl9CisKKwkJbG9jay5sb2NrKCk7CisJCXRyeSB7CisJCQl2b3RlcnMgPSB2LnRvQXJyYXkobmV3IEtldGNoUmVwbGljYVt2LnNpemUoKV0pOworCQkJZm9sbG93ZXJzID0gZi50b0FycmF5KG5ldyBLZXRjaFJlcGxpY2FbZi5zaXplKCldKTsKKwkJCXNlbGYgPSBtZTsKKwkJfSBmaW5hbGx5IHsKKwkJCWxvY2sudW5sb2NrKCk7CisJCX0KKwl9CisKKwlwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uPEludGVnZXI+IHZhbGlkVm90ZXJDb3VudHMoKSB7CisJCUBTdXBwcmVzc1dhcm5pbmdzKCJib3hpbmciKQorCQlJbnRlZ2VyW10gdmFsaWQgPSB7CisJCQkJLy8gQW4gb2RkIG51bWJlciBvZiB2b3RpbmcgcmVwbGljYXMgaXMgcmVxdWlyZWQuCisJCQkJMSwgMywgNSwgNywgOSB9OworCQlyZXR1cm4gQXJyYXlzLmFzTGlzdCh2YWxpZCk7CisJfQorCisJcHJpdmF0ZSBzdGF0aWMgTG9jYWxSZXBsaWNhIGZpbmRMb2NhbChDb2xsZWN0aW9uPEtldGNoUmVwbGljYT4gdm90ZXJzKSB7CisJCWZvciAoS2V0Y2hSZXBsaWNhIHIgOiB2b3RlcnMpIHsKKwkJCWlmIChyIGluc3RhbmNlb2YgTG9jYWxSZXBsaWNhKSB7CisJCQkJcmV0dXJuIChMb2NhbFJlcGxpY2EpIHI7CisJCQl9CisJCX0KKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogR2V0IGFuIGluc3RhbmNlIG9mIHRoZSByZXBvc2l0b3J5IGZvciB1c2UgYnkgYSBsZWFkZXIgdGhyZWFkLgorCSAqIDxwPgorCSAqIFRoZSBjYWxsZXIgd2lsbCBjbG9zZSB0aGUgcmVwb3NpdG9yeS4KKwkgKgorCSAqIEByZXR1cm4gb3BlbmVkIHJlcG9zaXRvcnkgZm9yIHVzZSBieSB0aGUgbGVhZGVyIHRocmVhZC4KKwkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCisJICogICAgICAgICAgICAgY2Fubm90IHJlb3BlbiB0aGUgcmVwb3NpdG9yeSBmb3IgdGhlIGxlYWRlci4KKwkgKi8KKwlwcm90ZWN0ZWQgYWJzdHJhY3QgUmVwb3NpdG9yeSBvcGVuUmVwb3NpdG9yeSgpIHRocm93cyBJT0V4Y2VwdGlvbjsKKworCS8qKgorCSAqIFF1ZXVlIGEgcmVmZXJlbmNlIHVwZGF0ZSBwcm9wb3NhbCBmb3IgY29uc2Vuc3VzLgorCSAqIDxwPgorCSAqIFRoaXMgbWV0aG9kIGRvZXMgbm90IHdhaXQgZm9yIGNvbnNlbnN1cyB0byBiZSByZWFjaGVkLiBUaGUgcHJvcG9zYWwgaXMKKwkgKiBjaGVja2VkIHRvIGxvb2sgZm9yIHJpc2tzIG9mIGNvbmZsaWN0cywgYW5kIHRoZW4gc3VibWl0dGVkIGludG8gdGhlIHF1ZXVlCisJICogZm9yIGRpc3RyaWJ1dGlvbiBhcyBzb29uIGFzIHBvc3NpYmxlLgorCSAqIDxwPgorCSAqIENhbGxlcnMgbXVzdCB1c2Uge0BsaW5rIFByb3Bvc2FsI2F3YWl0KCl9IHRvIHNlZSBpZiB0aGUgcHJvcG9zYWwgaXMgZG9uZS4KKwkgKgorCSAqIEBwYXJhbSBwcm9wb3NhbAorCSAqICAgICAgICAgICAgdGhlIHByb3Bvc2VkIHJlZmVyZW5jZSB1cGRhdGVzIHRvIHF1ZXVlIGZvciBjb25zaWRlcmF0aW9uLgorCSAqICAgICAgICAgICAgT25jZSBleGVjdXRpb24gaXMgY29tcGxldGUgdGhlIGluZGl2aWR1YWwgcmVmZXJlbmNlIHJlc3VsdAorCSAqICAgICAgICAgICAgZmllbGRzIHdpbGwgYmUgcG9wdWxhdGVkIHdpdGggdGhlIG91dGNvbWUuCisJICogQHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbgorCSAqICAgICAgICAgICAgIGN1cnJlbnQgdGhyZWFkIHdhcyBpbnRlcnJ1cHRlZC4gVGhlIHByb3Bvc2FsIG1heSBoYXZlIGJlZW4KKwkgKiAgICAgICAgICAgICBhYm9ydGVkIGlmIGl0IHdhcyBub3QgeWV0IHF1ZXVlZCBmb3IgZXhlY3V0aW9uLgorCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KKwkgKiAgICAgICAgICAgICB1bnJlY292ZXJhYmxlIGVycm9yIHByZXZlbnRpbmcgcHJvcG9zYWxzIGZyb20gYmVpbmcgYXR0ZW1wdGVkCisJICogICAgICAgICAgICAgYnkgdGhpcyBsZWFkZXIuCisJICovCisJcHVibGljIHZvaWQgcXVldWVQcm9wb3NhbChQcm9wb3NhbCBwcm9wb3NhbCkKKwkJCXRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geworCQl0cnkgeworCQkJbG9jay5sb2NrSW50ZXJydXB0aWJseSgpOworCQl9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7CisJCQlwcm9wb3NhbC5hYm9ydCgpOworCQkJdGhyb3cgZTsKKwkJfQorCQl0cnkgeworCQkJaWYgKHJlZlRyZWUgPT0gbnVsbCkgeworCQkJCWluaXRpYWxpemUoKTsKKwkJCQlmb3IgKFByb3Bvc2FsIHAgOiBxdWV1ZWQpIHsKKwkJCQkJcmVmVHJlZS5hcHBseShwLmdldENvbW1hbmRzKCkpOworCQkJCX0KKwkJCX0gZWxzZSBpZiAocm91bmRIb2xkc1JlZmVyZW5jZVRvUmVmVHJlZSkgeworCQkJCXJlZlRyZWUgPSByZWZUcmVlLmNvcHkoKTsKKwkJCQlyb3VuZEhvbGRzUmVmZXJlbmNlVG9SZWZUcmVlID0gZmFsc2U7CisJCQl9CisKKwkJCWlmICghcmVmVHJlZS5hcHBseShwcm9wb3NhbC5nZXRDb21tYW5kcygpKSkgeworCQkJCS8vIEEgY29uZmxpY3QgZXhpc3RzIHNvIGFib3J0IHRoZSBwcm9wb3NhbC4KKwkJCQlwcm9wb3NhbC5hYm9ydCgpOworCQkJCXJldHVybjsKKwkJCX0KKworCQkJcXVldWVkLmFkZChwcm9wb3NhbCk7CisJCQlwcm9wb3NhbC5ub3RpZnlTdGF0ZShRVUVVRUQpOworCisJCQlpZiAoaWRsZSkgeworCQkJCXNjaGVkdWxlTGVhZGVyKCk7CisJCQl9CisJCX0gZmluYWxseSB7CisJCQlsb2NrLnVubG9jaygpOworCQl9CisJfQorCisJcHJpdmF0ZSB2b2lkIGluaXRpYWxpemUoKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQl0cnkgKFJlcG9zaXRvcnkgZ2l0ID0gb3BlblJlcG9zaXRvcnkoKTsgUmV2V2FsayBydyA9IG5ldyBSZXZXYWxrKGdpdCkpIHsKKwkJCXNlbGYuaW5pdGlhbGl6ZShnaXQpOworCisJCQlPYmplY3RJZCBhY2NlcHRlZCA9IHNlbGYuZ2V0VHhuQWNjZXB0ZWQoKTsKKwkJCWlmICghT2JqZWN0SWQuemVyb0lkKCkuZXF1YWxzKGFjY2VwdGVkKSkgeworCQkJCVJldkNvbW1pdCBjID0gcncucGFyc2VDb21taXQoYWNjZXB0ZWQpOworCQkJCWhlYWRJbmRleCA9IExvZ0luZGV4LnVua25vd24oYWNjZXB0ZWQpOworCQkJCXJlZlRyZWUgPSBSZWZUcmVlLnJlYWQocncuZ2V0T2JqZWN0UmVhZGVyKCksIGMuZ2V0VHJlZSgpKTsKKwkJCX0gZWxzZSB7CisJCQkJaGVhZEluZGV4ID0gTG9nSW5kZXgudW5rbm93bihPYmplY3RJZC56ZXJvSWQoKSk7CisJCQkJcmVmVHJlZSA9IFJlZlRyZWUubmV3RW1wdHlUcmVlKCk7CisJCQl9CisJCX0KKwl9CisKKwlwcml2YXRlIHZvaWQgc2NoZWR1bGVMZWFkZXIoKSB7CisJCWlkbGUgPSBmYWxzZTsKKwkJc3lzdGVtLmdldEV4ZWN1dG9yKCkuZXhlY3V0ZShuZXcgUnVubmFibGUoKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQlydW5MZWFkZXIoKTsKKwkJCX0KKwkJfSk7CisJfQorCisJcHJpdmF0ZSB2b2lkIHJ1bkxlYWRlcigpIHsKKwkJUm91bmQgcm91bmQ7CisJCWxvY2subG9jaygpOworCQl0cnkgeworCQkJc3dpdGNoIChzdGF0ZSkgeworCQkJY2FzZSBDQU5ESURBVEU6CisJCQkJcm91bmQgPSBuZXcgRWxlY3Rpb25Sb3VuZCh0aGlzLCBoZWFkSW5kZXgpOworCQkJCWJyZWFrOworCisJCQljYXNlIExFQURFUjoKKwkJCQlyb3VuZCA9IG5ld1Byb3Bvc2FsUm91bmQoKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBERVBPU0VEOgorCQkJY2FzZSBTSFVURE9XTjoKKwkJCWRlZmF1bHQ6CisJCQkJbG9nLndhcm4oIkxlYWRlciBjYW5ub3QgcnVuIHt9Iiwgc3RhdGUpOyAvLyROT04tTkxTLTEkCisJCQkJLy8gVE9ETyhzb3ApOiBSZWRpcmVjdCBwcm9wb3NhbHMuCisJCQkJcmV0dXJuOworCQkJfQorCQl9IGZpbmFsbHkgeworCQkJbG9jay51bmxvY2soKTsKKwkJfQorCisJCXRyeSB7CisJCQlyb3VuZC5zdGFydCgpOworCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQkvLyBUT0RPKHNvcCkgRGVwb3NlIGxlYWRlciBpZiBpdCBjYW5ub3QgdXNlIGl0cyByZXBvc2l0b3J5LgorCQkJbG9nLmVycm9yKEtldGNoVGV4dC5nZXQoKS5sZWFkZXJGYWlsZWRUb1N0b3JlLCBlKTsKKwkJCWxvY2subG9jaygpOworCQkJdHJ5IHsKKwkJCQluZXh0Um91bmQoKTsKKwkJCX0gZmluYWxseSB7CisJCQkJbG9jay51bmxvY2soKTsKKwkJCX0KKwkJfQorCX0KKworCXByaXZhdGUgUHJvcG9zYWxSb3VuZCBuZXdQcm9wb3NhbFJvdW5kKCkgeworCQlMaXN0PFByb3Bvc2FsPiB0b2RvID0gbmV3IEFycmF5TGlzdDw+KHF1ZXVlZCk7CisJCXF1ZXVlZC5jbGVhcigpOworCQlyb3VuZEhvbGRzUmVmZXJlbmNlVG9SZWZUcmVlID0gdHJ1ZTsKKwkJcmV0dXJuIG5ldyBQcm9wb3NhbFJvdW5kKHRoaXMsIGhlYWRJbmRleCwgdG9kbywgcmVmVHJlZSk7CisJfQorCisJLyoqIEByZXR1cm4gdGVybSBvZiB0aGlzIGxlYWRlcidzIHJlaWduLiAqLworCWxvbmcgZ2V0VGVybSgpIHsKKwkJcmV0dXJuIHRlcm07CisJfQorCisJLyoqIEByZXR1cm4gZW5kIG9mIHRoZSBsZWFkZXIncyBsb2cuICovCisJTG9nSW5kZXggZ2V0SGVhZCgpIHsKKwkJcmV0dXJuIGhlYWRJbmRleDsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIHN0YXRlIGxlYWRlciBrbm93cyBpdCBoYXMgY29tbWl0dGVkIGFjcm9zcyBhIHF1b3J1bSBvZiByZXBsaWNhcy4KKwkgKi8KKwlMb2dJbmRleCBnZXRDb21taXR0ZWQoKSB7CisJCXJldHVybiBjb21taXR0ZWRJbmRleDsKKwl9CisKKwlib29sZWFuIGlzSWRsZSgpIHsKKwkJcmV0dXJuIGlkbGU7CisJfQorCisJdm9pZCBydW5Bc3luYyhSb3VuZCByb3VuZCkgeworCQlsb2NrLmxvY2soKTsKKwkJdHJ5IHsKKwkJCS8vIEVuZCBvZiB0aGUgbG9nIGlzIHRoaXMgcm91bmQuIE9uY2UgdHJhbnNwb3J0IGJlZ2lucyBpdCBpcworCQkJLy8gcmVhc29uYWJsZSB0byBhc3N1bWUgYXQgbGVhc3Qgb25lIHJlcGxpY2Egd2lsbCBldmVudHVhbGx5IGdldAorCQkJLy8gdGhpcywgYW5kIHRoZXJlIGlzIHJlYXNvbmFibGUgcHJvYmFiaWxpdHkgaXQgY29tbWl0cy4KKwkJCWhlYWRJbmRleCA9IHJvdW5kLmFjY2VwdGVkTmV3SW5kZXg7CisJCQlydW5uaW5nUm91bmQgPSByb3VuZDsKKworCQkJZm9yIChLZXRjaFJlcGxpY2EgcmVwbGljYSA6IHZvdGVycykgeworCQkJCXJlcGxpY2EucHVzaFR4bkFjY2VwdGVkQXN5bmMocm91bmQpOworCQkJfQorCQkJZm9yIChLZXRjaFJlcGxpY2EgcmVwbGljYSA6IGZvbGxvd2VycykgeworCQkJCXJlcGxpY2EucHVzaFR4bkFjY2VwdGVkQXN5bmMocm91bmQpOworCQkJfQorCQl9IGZpbmFsbHkgeworCQkJbG9jay51bmxvY2soKTsKKwkJfQorCX0KKworCS8qKgorCSAqIEFzeW5jaHJvbm91cyBzaWduYWwgZnJvbSBhIHJlcGxpY2EgYWZ0ZXIgY29tcGxldGlvbi4KKwkgKiA8cD4KKwkgKiBNdXN0IGJlIGNhbGxlZCB3aGlsZSB7QGxpbmsgI2xvY2t9IGlzIGhlbGQgYnkgdGhlIHJlcGxpY2EuCisJICoKKwkgKiBAcGFyYW0gcmVwbGljYQorCSAqICAgICAgICAgICAgcmVwbGljYSBwb3N0aW5nIGEgY29tcGxldGlvbiBldmVudC4KKwkgKi8KKwl2b2lkIG9uUmVwbGljYVVwZGF0ZShLZXRjaFJlcGxpY2EgcmVwbGljYSkgeworCQlpZiAobG9nLmlzRGVidWdFbmFibGVkKCkpIHsKKwkJCWxvZy5kZWJ1ZygiUmVwbGljYSB7fSBmaW5pc2hlZDpcbnt9IiwgLy8kTk9OLU5MUy0xJAorCQkJCQlyZXBsaWNhLmRlc2NyaWJlRm9yTG9nKCksIHNuYXBzaG90KCkpOworCQl9CisKKwkJaWYgKHJlcGxpY2EuZ2V0UGFydGljaXBhdGlvbigpID09IEZPTExPV0VSX09OTFkpIHsKKwkJCS8vIEZvbGxvd2VycyBjYW5ub3Qgdm90ZSwgc28gdm90ZXMgaGF2ZW4ndCBjaGFuZ2VkLgorCQkJcmV0dXJuOworCQl9IGVsc2UgaWYgKHJ1bm5pbmdSb3VuZCA9PSBudWxsKSB7CisJCQkvLyBObyByb3VuZCBydW5uaW5nLCBubyBuZWVkIHRvIHRhbGx5IHZvdGVzLgorCQkJcmV0dXJuOworCQl9CisKKwkJYXNzZXJ0IGhlYWRJbmRleC5lcXVhbHMocnVubmluZ1JvdW5kLmFjY2VwdGVkTmV3SW5kZXgpOworCQlpbnQgbWF0Y2hpbmcgPSAwOworCQlmb3IgKEtldGNoUmVwbGljYSByIDogdm90ZXJzKSB7CisJCQlpZiAoci5oYXNBY2NlcHRlZChoZWFkSW5kZXgpKSB7CisJCQkJbWF0Y2hpbmcrKzsKKwkJCX0KKwkJfQorCisJCWludCBxdW9ydW0gPSB2b3RlcnMubGVuZ3RoIC8gMiArIDE7CisJCWJvb2xlYW4gc3VjY2VzcyA9IG1hdGNoaW5nID49IHF1b3J1bTsKKwkJaWYgKCFzdWNjZXNzKSB7CisJCQlyZXR1cm47CisJCX0KKworCQlzd2l0Y2ggKHN0YXRlKSB7CisJCWNhc2UgQ0FORElEQVRFOgorCQkJdGVybSA9ICgoRWxlY3Rpb25Sb3VuZCkgcnVubmluZ1JvdW5kKS5nZXRUZXJtKCk7CisJCQlzdGF0ZSA9IExFQURFUjsKKwkJCWlmIChsb2cuaXNEZWJ1Z0VuYWJsZWQoKSkgeworCQkJCWxvZy5kZWJ1ZygiV29uIGVsZWN0aW9uLCBydW5uaW5nIHRlcm0gIiArIHRlcm0pOyAvLyROT04tTkxTLTEkCisJCQl9CisKKwkJCS8vJEZBTEwtVEhST1VHSCQKKwkJY2FzZSBMRUFERVI6CisJCQljb21taXR0ZWRJbmRleCA9IGhlYWRJbmRleDsKKwkJCWlmIChsb2cuaXNEZWJ1Z0VuYWJsZWQoKSkgeworCQkJCWxvZy5kZWJ1ZygiQ29tbWl0dGVkIHt9IGluIHRlcm0ge30iLCAvLyROT04tTkxTLTEkCisJCQkJCQljb21taXR0ZWRJbmRleC5kZXNjcmliZUZvckxvZygpLAorCQkJCQkJTG9uZy52YWx1ZU9mKHRlcm0pKTsKKwkJCX0KKwkJCW5leHRSb3VuZCgpOworCQkJY29tbWl0QXN5bmMocmVwbGljYSk7CisJCQlub3RpZnlTdWNjZXNzKHJ1bm5pbmdSb3VuZCk7CisJCQlpZiAobG9nLmlzRGVidWdFbmFibGVkKCkpIHsKKwkJCQlsb2cuZGVidWcoIkxlYWRlciBzdGF0ZTpcbnt9Iiwgc25hcHNob3QoKSk7IC8vJE5PTi1OTFMtMSQKKwkJCX0KKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlsb2cuZGVidWcoIkxlYWRlciBpZ25vcmluZyByZXBsaWNhIHdoaWxlIGluIHt9Iiwgc3RhdGUpOyAvLyROT04tTkxTLTEkCisJCQlicmVhazsKKwkJfQorCX0KKworCXByaXZhdGUgdm9pZCBub3RpZnlTdWNjZXNzKFJvdW5kIHJvdW5kKSB7CisJCS8vIERyb3AgdGhlIGxlYWRlciBsb2NrIHdoaWxlIG5vdGlmeWluZyBQcm9wb3NhbCBsaXN0ZW5lcnMuCisJCWxvY2sudW5sb2NrKCk7CisJCXRyeSB7CisJCQlyb3VuZC5zdWNjZXNzKCk7CisJCX0gZmluYWxseSB7CisJCQlsb2NrLmxvY2soKTsKKwkJfQorCX0KKworCXByaXZhdGUgdm9pZCBjb21taXRBc3luYyhLZXRjaFJlcGxpY2EgY2FsbGVyKSB7CisJCWZvciAoS2V0Y2hSZXBsaWNhIHIgOiB2b3RlcnMpIHsKKwkJCWlmIChyID09IGNhbGxlcikgeworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKHIuc2hvdWxkUHVzaFVuYmF0Y2hlZENvbW1pdChjb21taXR0ZWRJbmRleCwgaXNJZGxlKCkpKSB7CisJCQkJci5wdXNoQ29tbWl0QXN5bmMoY29tbWl0dGVkSW5kZXgpOworCQkJfQorCQl9CisJCWZvciAoS2V0Y2hSZXBsaWNhIHIgOiBmb2xsb3dlcnMpIHsKKwkJCWlmIChyID09IGNhbGxlcikgeworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKHIuc2hvdWxkUHVzaFVuYmF0Y2hlZENvbW1pdChjb21taXR0ZWRJbmRleCwgaXNJZGxlKCkpKSB7CisJCQkJci5wdXNoQ29tbWl0QXN5bmMoY29tbWl0dGVkSW5kZXgpOworCQkJfQorCQl9CisJfQorCisJLyoqIFNjaGVkdWxlIHRoZSBuZXh0IHJvdW5kOyBpbnZva2VkIHdoaWxlIHtAbGluayAjbG9ja30gaXMgaGVsZC4gKi8KKwl2b2lkIG5leHRSb3VuZCgpIHsKKwkJcnVubmluZ1JvdW5kID0gbnVsbDsKKworCQlpZiAocXVldWVkLmlzRW1wdHkoKSkgeworCQkJaWRsZSA9IHRydWU7CisJCX0gZWxzZSB7CisJCQkvLyBDYWxsZXIgaG9sZHMgbG9jay4gUmVzY2hlZHVsZSBsZWFkZXIgb24gYSBuZXcgdGhyZWFkIHNvCisJCQkvLyB0aGUgY2FsbCBzdGFjayBjYW4gdW53aW5kIGFuZCBsb2NrIGlzIG5vdCBoZWxkIHVuZXhwZWN0ZWRseQorCQkJLy8gZHVyaW5nIHByZXBhcmUgZm9yIHRoZSBuZXh0IHJvdW5kLgorCQkJc2NoZWR1bGVMZWFkZXIoKTsKKwkJfQorCX0KKworCS8qKiBAcmV0dXJuIHNuYXBzaG90IHRoaXMgbGVhZGVyLiAqLworCXB1YmxpYyBMZWFkZXJTbmFwc2hvdCBzbmFwc2hvdCgpIHsKKwkJbG9jay5sb2NrKCk7CisJCXRyeSB7CisJCQlMZWFkZXJTbmFwc2hvdCBzID0gbmV3IExlYWRlclNuYXBzaG90KCk7CisJCQlzLnN0YXRlID0gc3RhdGU7CisJCQlzLnRlcm0gPSB0ZXJtOworCQkJcy5oZWFkSW5kZXggPSBoZWFkSW5kZXg7CisJCQlzLmNvbW1pdHRlZEluZGV4ID0gY29tbWl0dGVkSW5kZXg7CisJCQlzLmlkbGUgPSBpc0lkbGUoKTsKKwkJCWZvciAoS2V0Y2hSZXBsaWNhIHIgOiB2b3RlcnMpIHsKKwkJCQlzLnJlcGxpY2FzLmFkZChyLnNuYXBzaG90KCkpOworCQkJfQorCQkJZm9yIChLZXRjaFJlcGxpY2EgciA6IGZvbGxvd2VycykgeworCQkJCXMucmVwbGljYXMuYWRkKHIuc25hcHNob3QoKSk7CisJCQl9CisJCQlyZXR1cm4gczsKKwkJfSBmaW5hbGx5IHsKKwkJCWxvY2sudW5sb2NrKCk7CisJCX0KKwl9CisKKwkvKiogR3JhY2VmdWxseSBzaHV0ZG93biB0aGlzIGxlYWRlciBhbmQgY2FuY2VsIG91dHN0YW5kaW5nIG9wZXJhdGlvbnMuICovCisJcHVibGljIHZvaWQgc2h1dGRvd24oKSB7CisJCWxvY2subG9jaygpOworCQl0cnkgeworCQkJaWYgKHN0YXRlICE9IFNIVVRET1dOKSB7CisJCQkJc3RhdGUgPSBTSFVURE9XTjsKKwkJCQlmb3IgKEtldGNoUmVwbGljYSByIDogdm90ZXJzKSB7CisJCQkJCXIuc2h1dGRvd24oKTsKKwkJCQl9CisJCQkJZm9yIChLZXRjaFJlcGxpY2EgciA6IGZvbGxvd2VycykgeworCQkJCQlyLnNodXRkb3duKCk7CisJCQkJfQorCQkJfQorCQl9IGZpbmFsbHkgeworCQkJbG9jay51bmxvY2soKTsKKwkJfQorCX0KKworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCXJldHVybiBzbmFwc2hvdCgpLnRvU3RyaW5nKCk7CisJfQorfQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9rZXRjaC9LZXRjaExlYWRlckNhY2hlLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL2tldGNoL0tldGNoTGVhZGVyQ2FjaGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTAzM2MxCi0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9rZXRjaC9LZXRjaExlYWRlckNhY2hlLmphdmEKQEAgLTAsMCArMSwxMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYsIEdvb2dsZSBJbmMuCisgKiBhbmQgb3RoZXIgY29weXJpZ2h0IG93bmVycyBhcyBkb2N1bWVudGVkIGluIHRoZSBwcm9qZWN0J3MgSVAgbG9nLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlCisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgRGlzdHJpYnV0aW9uIExpY2Vuc2UgdjEuMCB3aGljaAorICogYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGlzIHJlcHJvZHVjZWQgYmVsb3csIGFuZCBpcworICogYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lZGwtdjEwLnBocAorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIEluYy4gbm9yIHRoZQorICogICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorICogICBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCisgKiAgIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQKKyAqIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCisgKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRgorICogQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworcGFja2FnZSBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLmtldGNoOworCitpbXBvcnQgamF2YS5uZXQuVVJJU3ludGF4RXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNvbmN1cnJlbnRIYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNvbmN1cnJlbnRNYXA7CitpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQubG9ja3MuTG9jazsKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5sb2Nrcy5SZWVudHJhbnRMb2NrOworCitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLmRmcy5EZnNSZXBvc2l0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLlJlcG9zaXRvcnk7CisKKy8qKgorICogQSBjYWNoZSBvZiBsaXZlIGxlYWRlciBpbnN0YW5jZXMsIGtleWVkIGJ5IHJlcG9zaXRvcnkuCisgKiA8cD4KKyAqIEtldGNoIG9ubHkgYXNzaWducyBhIGxlYWRlciB0byBhIHJlcG9zaXRvcnkgd2hlbiBuZWVkZWQuIElmCisgKiB7QGxpbmsgI2dldChSZXBvc2l0b3J5KX0gaXMgY2FsbGVkIGZvciBhIHJlcG9zaXRvcnkgdGhhdCBkb2VzIG5vdCBoYXZlIGEKKyAqIGxlYWRlciwgdGhlIGxlYWRlciBpcyBjcmVhdGVkIGFuZCBhZGRlZCB0byB0aGUgY2FjaGUuCisgKi8KK3B1YmxpYyBjbGFzcyBLZXRjaExlYWRlckNhY2hlIHsKKwlwcml2YXRlIGZpbmFsIEtldGNoU3lzdGVtIHN5c3RlbTsKKwlwcml2YXRlIGZpbmFsIENvbmN1cnJlbnRNYXA8U3RyaW5nLCBLZXRjaExlYWRlcj4gbGVhZGVyczsKKwlwcml2YXRlIGZpbmFsIExvY2sgc3RhcnRMb2NrOworCisJLyoqCisJICogSW5pdGlhbGl6ZSBhIG5ldyBsZWFkZXIgY2FjaGUuCisJICoKKwkgKiBAcGFyYW0gc3lzdGVtCisJICogICAgICAgICAgICBzeXN0ZW0gY29uZmlndXJhdGlvbiBmb3IgdGhlIGxlYWRlcnMKKwkgKi8KKwlwdWJsaWMgS2V0Y2hMZWFkZXJDYWNoZShLZXRjaFN5c3RlbSBzeXN0ZW0pIHsKKwkJdGhpcy5zeXN0ZW0gPSBzeXN0ZW07CisJCWxlYWRlcnMgPSBuZXcgQ29uY3VycmVudEhhc2hNYXA8PigpOworCQlzdGFydExvY2sgPSBuZXcgUmVlbnRyYW50TG9jayh0cnVlIC8qIGZhaXIgKi8pOworCX0KKworCS8qKgorCSAqIExvb2t1cCB0aGUgbGVhZGVyIGluc3RhbmNlIGZvciBhIGdpdmVuIHJlcG9zaXRvcnkuCisJICoKKwkgKiBAcGFyYW0gcmVwbworCSAqICAgICAgICAgICAgcmVwb3NpdG9yeSB0byBnZXQgdGhlIGxlYWRlciBmb3IuCisJICogQHJldHVybiB0aGUgbGVhZGVyIGluc3RhbmNlIGZvciB0aGUgcmVwb3NpdG9yeS4KKwkgKiBAdGhyb3dzIFVSSVN5bnRheEV4Y2VwdGlvbgorCSAqICAgICAgICAgICAgIHJlbW90ZSBjb25maWd1cmF0aW9uIGNvbnRhaW5zIGFuIGludmFsaWQgVVJMLgorCSAqLworCXB1YmxpYyBLZXRjaExlYWRlciBnZXQoUmVwb3NpdG9yeSByZXBvKQorCQkJdGhyb3dzIFVSSVN5bnRheEV4Y2VwdGlvbiB7CisJCVN0cmluZyBrZXkgPSBjb21wdXRlS2V5KHJlcG8pOworCQlLZXRjaExlYWRlciBsZWFkZXIgPSBsZWFkZXJzLmdldChrZXkpOworCQlpZiAobGVhZGVyICE9IG51bGwpIHsKKwkJCXJldHVybiBsZWFkZXI7CisJCX0KKwkJcmV0dXJuIHN0YXJ0TGVhZGVyKGtleSwgcmVwbyk7CisJfQorCisJcHJpdmF0ZSBLZXRjaExlYWRlciBzdGFydExlYWRlcihTdHJpbmcga2V5LCBSZXBvc2l0b3J5IHJlcG8pCisJCQl0aHJvd3MgVVJJU3ludGF4RXhjZXB0aW9uIHsKKwkJc3RhcnRMb2NrLmxvY2soKTsKKwkJdHJ5IHsKKwkJCUtldGNoTGVhZGVyIGxlYWRlciA9IGxlYWRlcnMuZ2V0KGtleSk7CisJCQlpZiAobGVhZGVyICE9IG51bGwpIHsKKwkJCQlyZXR1cm4gbGVhZGVyOworCQkJfQorCQkJbGVhZGVyID0gc3lzdGVtLmNyZWF0ZUxlYWRlcihyZXBvKTsKKwkJCWxlYWRlcnMucHV0KGtleSwgbGVhZGVyKTsKKwkJCXJldHVybiBsZWFkZXI7CisJCX0gZmluYWxseSB7CisJCQlzdGFydExvY2sudW5sb2NrKCk7CisJCX0KKwl9CisKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgY29tcHV0ZUtleShSZXBvc2l0b3J5IHJlcG8pIHsKKwkJaWYgKHJlcG8gaW5zdGFuY2VvZiBEZnNSZXBvc2l0b3J5KSB7CisJCQlEZnNSZXBvc2l0b3J5IGRmcyA9IChEZnNSZXBvc2l0b3J5KSByZXBvOworCQkJcmV0dXJuIGRmcy5nZXREZXNjcmlwdGlvbigpLmdldFJlcG9zaXRvcnlOYW1lKCk7CisJCX0KKworCQlpZiAocmVwby5nZXREaXJlY3RvcnkoKSAhPSBudWxsKSB7CisJCQlyZXR1cm4gcmVwby5nZXREaXJlY3RvcnkoKS50b1VSSSgpLnRvU3RyaW5nKCk7CisJCX0KKworCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCk7CisJfQorfQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9rZXRjaC9LZXRjaFByZVJlY2VpdmUuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwva2V0Y2gvS2V0Y2hQcmVSZWNlaXZlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI0MzA3ZgotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwva2V0Y2gvS2V0Y2hQcmVSZWNlaXZlLmphdmEKQEAgLTAsMCArMSwxNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYsIEdvb2dsZSBJbmMuCisgKiBhbmQgb3RoZXIgY29weXJpZ2h0IG93bmVycyBhcyBkb2N1bWVudGVkIGluIHRoZSBwcm9qZWN0J3MgSVAgbG9nLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlCisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgRGlzdHJpYnV0aW9uIExpY2Vuc2UgdjEuMCB3aGljaAorICogYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGlzIHJlcHJvZHVjZWQgYmVsb3csIGFuZCBpcworICogYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lZGwtdjEwLnBocAorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIEluYy4gbm9yIHRoZQorICogICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorICogICBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCisgKiAgIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQKKyAqIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCisgKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRgorICogQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworcGFja2FnZSBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLmtldGNoOworCitpbXBvcnQgc3RhdGljIGphdmEudXRpbC5jb25jdXJyZW50LlRpbWVVbml0Lk1JTExJU0VDT05EUzsKK2ltcG9ydCBzdGF0aWMgamF2YS51dGlsLmNvbmN1cnJlbnQuVGltZVVuaXQuU0VDT05EUzsKK2ltcG9ydCBzdGF0aWMgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5rZXRjaC5Qcm9wb3NhbC5TdGF0ZS5FWEVDVVRFRDsKK2ltcG9ydCBzdGF0aWMgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5rZXRjaC5Qcm9wb3NhbC5TdGF0ZS5RVUVVRUQ7CitpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LlJlY2VpdmVDb21tYW5kLlJlc3VsdC5OT1RfQVRURU1QVEVEOworaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5SZWNlaXZlQ29tbWFuZC5SZXN1bHQuUkVKRUNURURfT1RIRVJfUkVBU09OOworCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuSkdpdFRleHQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuUHJlUmVjZWl2ZUhvb2s7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuUHJvZ3Jlc3NTcGlubmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LlJlY2VpdmVDb21tYW5kOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LlJlY2VpdmVQYWNrOworaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXI7CitpbXBvcnQgb3JnLnNsZjRqLkxvZ2dlckZhY3Rvcnk7CisKKy8qKgorICogUHJlUmVjZWl2ZUhvb2sgZm9yIGhhbmRsaW5nIHB1c2ggdHJhZmZpYyBpbiBhIEtldGNoIHN5c3RlbS4KKyAqIDxwPgorICogSW5zdGFsbCBhbiBpbnN0YW5jZSBvbiB7QGxpbmsgUmVjZWl2ZVBhY2t9IHRvIGNhcHR1cmUgdGhlIGNvbW1hbmRzIGFuZCBvdGhlcgorICogY29ubmVjdGlvbiBzdGF0ZSBhbmQgcmVsYXkgdGhlbSB0aHJvdWdoIHRoZSB7QGxpbmsgS2V0Y2hMZWFkZXJ9LCBhbGxvd2luZyB0aGUKKyAqIGxlYWRlciB0byBnYWluIGNvbnNlbnN1cyBhYm91dCB0aGUgbmV3IHJlZmVyZW5jZSBzdGF0ZS4KKyAqLworcHVibGljIGNsYXNzIEtldGNoUHJlUmVjZWl2ZSBpbXBsZW1lbnRzIFByZVJlY2VpdmVIb29rIHsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoS2V0Y2hQcmVSZWNlaXZlLmNsYXNzKTsKKworCXByaXZhdGUgZmluYWwgS2V0Y2hMZWFkZXIgbGVhZGVyOworCisJLyoqCisJICogQ29uc3RydWN0IGEgaG9vayBleGVjdXRpbmcgdXBkYXRlcyB0aHJvdWdoIGEge0BsaW5rIEtldGNoTGVhZGVyfS4KKwkgKgorCSAqIEBwYXJhbSBsZWFkZXIKKwkgKiAgICAgICAgICAgIGxlYWRlciBmb3IgdGhpcyByZXBvc2l0b3J5LgorCSAqLworCXB1YmxpYyBLZXRjaFByZVJlY2VpdmUoS2V0Y2hMZWFkZXIgbGVhZGVyKSB7CisJCXRoaXMubGVhZGVyID0gbGVhZGVyOworCX0KKworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG9uUHJlUmVjZWl2ZShSZWNlaXZlUGFjayBycCwgQ29sbGVjdGlvbjxSZWNlaXZlQ29tbWFuZD4gY21kcykgeworCQljbWRzID0gUmVjZWl2ZUNvbW1hbmQuZmlsdGVyKGNtZHMsIE5PVF9BVFRFTVBURUQpOworCQlpZiAoY21kcy5pc0VtcHR5KCkpIHsKKwkJCXJldHVybjsKKwkJfQorCisJCXRyeSB7CisJCQlQcm9wb3NhbCBwcm9wb3NhbCA9IG5ldyBQcm9wb3NhbChycC5nZXRSZXZXYWxrKCksIGNtZHMpCisJCQkJLnNldFB1c2hDZXJ0aWZpY2F0ZShycC5nZXRQdXNoQ2VydGlmaWNhdGUoKSkKKwkJCQkuc2V0QXV0aG9yKHJwLmdldFJlZkxvZ0lkZW50KCkpCisJCQkJLnNldE1lc3NhZ2UoInB1c2giKTsgLy8kTk9OLU5MUy0xJAorCQkJbGVhZGVyLnF1ZXVlUHJvcG9zYWwocHJvcG9zYWwpOworCQkJaWYgKHByb3Bvc2FsLmlzRG9uZSgpKSB7CisJCQkJLy8gVGhpcyBmYWlsZWQgZmFzdCwgZS5nLiBjb25mbGljdCBvciBiYWQgcHJlY29uZGl0aW9uLgorCQkJCXJldHVybjsKKwkJCX0KKworCQkJUHJvZ3Jlc3NTcGlubmVyIHNwaW5uZXIgPSBuZXcgUHJvZ3Jlc3NTcGlubmVyKAorCQkJCQlycC5nZXRNZXNzYWdlT3V0cHV0U3RyZWFtKCkpOworCQkJaWYgKHByb3Bvc2FsLmdldFN0YXRlKCkgPT0gUVVFVUVEKSB7CisJCQkJd2FpdEZvclF1ZXVlKHByb3Bvc2FsLCBzcGlubmVyKTsKKwkJCX0KKwkJCWlmICghcHJvcG9zYWwuaXNEb25lKCkpIHsKKwkJCQl3YWl0Rm9yUHJvcG9zZShwcm9wb3NhbCwgc3Bpbm5lcik7CisJCQl9CisJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIHwgSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgeworCQkJU3RyaW5nIG1zZyA9IEpHaXRUZXh0LmdldCgpLnRyYW5zYWN0aW9uQWJvcnRlZDsKKwkJCWZvciAoUmVjZWl2ZUNvbW1hbmQgY21kIDogY21kcykgeworCQkJCWlmIChjbWQuZ2V0UmVzdWx0KCkgPT0gTk9UX0FUVEVNUFRFRCkgeworCQkJCQljbWQuc2V0UmVzdWx0KFJFSkVDVEVEX09USEVSX1JFQVNPTiwgbXNnKTsKKwkJCQl9CisJCQl9CisJCQlsb2cuZXJyb3IobXNnLCBlKTsKKwkJfQorCX0KKworCXByaXZhdGUgdm9pZCB3YWl0Rm9yUXVldWUoUHJvcG9zYWwgcHJvcG9zYWwsIFByb2dyZXNzU3Bpbm5lciBzcGlubmVyKQorCQkJdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKKwkJc3Bpbm5lci5iZWdpblRhc2soS2V0Y2hUZXh0LmdldCgpLndhaXRpbmdGb3JRdWV1ZSwgMSwgU0VDT05EUyk7CisJCXdoaWxlICghcHJvcG9zYWwuYXdhaXRTdGF0ZUNoYW5nZShRVUVVRUQsIDI1MCwgTUlMTElTRUNPTkRTKSkgeworCQkJc3Bpbm5lci51cGRhdGUoKTsKKwkJfQorCQlzd2l0Y2ggKHByb3Bvc2FsLmdldFN0YXRlKCkpIHsKKwkJY2FzZSBSVU5OSU5HOgorCQlkZWZhdWx0OgorCQkJc3Bpbm5lci5lbmRUYXNrKEtldGNoVGV4dC5nZXQoKS5zdGFydGluZyk7CisJCQlicmVhazsKKworCQljYXNlIEVYRUNVVEVEOgorCQkJc3Bpbm5lci5lbmRUYXNrKEtldGNoVGV4dC5nZXQoKS5hY2NlcHRlZCk7CisJCQlicmVhazsKKworCQljYXNlIEFCT1JURUQ6CisJCQlzcGlubmVyLmVuZFRhc2soS2V0Y2hUZXh0LmdldCgpLmZhaWxlZCk7CisJCQlicmVhazsKKwkJfQorCX0KKworCXByaXZhdGUgdm9pZCB3YWl0Rm9yUHJvcG9zZShQcm9wb3NhbCBwcm9wb3NhbCwgUHJvZ3Jlc3NTcGlubmVyIHNwaW5uZXIpCisJCQl0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24geworCQlzcGlubmVyLmJlZ2luVGFzayhLZXRjaFRleHQuZ2V0KCkucHJvcG9zaW5nVXBkYXRlcywgMiwgU0VDT05EUyk7CisJCXdoaWxlICghcHJvcG9zYWwuYXdhaXQoMjUwLCBNSUxMSVNFQ09ORFMpKSB7CisJCQlzcGlubmVyLnVwZGF0ZSgpOworCQl9CisJCXNwaW5uZXIuZW5kVGFzayhwcm9wb3NhbC5nZXRTdGF0ZSgpID09IEVYRUNVVEVECisJCQkJPyBLZXRjaFRleHQuZ2V0KCkuYWNjZXB0ZWQKKwkJCQk6IEtldGNoVGV4dC5nZXQoKS5mYWlsZWQpOworCX0KK30KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwva2V0Y2gvS2V0Y2hSZXBsaWNhLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL2tldGNoL0tldGNoUmVwbGljYS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzMGJiYjIKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL2tldGNoL0tldGNoUmVwbGljYS5qYXZhCkBAIC0wLDAgKzEsNzU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2LCBHb29nbGUgSW5jLgorICogYW5kIG90aGVyIGNvcHlyaWdodCBvd25lcnMgYXMgZG9jdW1lbnRlZCBpbiB0aGUgcHJvamVjdCdzIElQIGxvZy4KKyAqCisgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZQorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYxLjAgd2hpY2gKKyAqIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBpcyByZXByb2R1Y2VkIGJlbG93LCBhbmQgaXMKKyAqIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZWRsLXYxMC5waHAKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAqICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCBJbmMuIG5vciB0aGUKKyAqICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKKyAqICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgorICogICB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5ECisgKiBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAorICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYKKyAqIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK3BhY2thZ2Ugb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5rZXRjaDsKKworaW1wb3J0IHN0YXRpYyBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lVW5pdC5NSUxMSVNFQ09ORFM7CitpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwua2V0Y2guS2V0Y2hSZXBsaWNhLkNvbW1pdFNwZWVkLkJBVENIRUQ7CitpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwua2V0Y2guS2V0Y2hSZXBsaWNhLkNvbW1pdFNwZWVkLkZBU1Q7CitpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwua2V0Y2guS2V0Y2hSZXBsaWNhLlN0YXRlLkNVUlJFTlQ7CitpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwua2V0Y2guS2V0Y2hSZXBsaWNhLlN0YXRlLkxBR0dJTkc7CitpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwua2V0Y2guS2V0Y2hSZXBsaWNhLlN0YXRlLk9GRkxJTkU7CitpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwua2V0Y2guS2V0Y2hSZXBsaWNhLlN0YXRlLlVOS05PV047CitpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQubGliLkNvbnN0YW50cy5IRUFEOworaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5GaWxlTW9kZS5UWVBFX0dJVExJTks7CitpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LlJlY2VpdmVDb21tYW5kLlJlc3VsdC5OT1RfQVRURU1QVEVEOworaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5SZWNlaXZlQ29tbWFuZC5SZXN1bHQuT0s7CitpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LlJlY2VpdmVDb21tYW5kLlR5cGUuQ1JFQVRFOworCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmxhbmcucmVmLldlYWtSZWZlcmVuY2U7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5DYWxsYWJsZTsKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmU7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmFubm90YXRpb25zLk5vbk51bGw7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5hbm5vdGF0aW9ucy5OdWxsYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UucmVmdHJlZS5SZWZUcmVlOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLkFueU9iamVjdElkOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLk9iamVjdElkOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLlJlZjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5SZXBvc2l0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQucmV2d2Fsay5SZXZXYWxrOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LlJlY2VpdmVDb21tYW5kOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudHJlZXdhbGsuVHJlZVdhbGs7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC51dGlsLlN5c3RlbVJlYWRlcjsKK2ltcG9ydCBvcmcuc2xmNGouTG9nZ2VyOworaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXJGYWN0b3J5OworCisvKioKKyAqIEEgS2V0Y2ggcmVwbGljYSwgZWl0aGVyIHtAbGluayBMb2NhbFJlcGxpY2F9IG9yIHtAbGluayBSZW1vdGVHaXRSZXBsaWNhfS4KKyAqIDxwPgorICogUmVwbGljYXMgY2FuIGJlIGVpdGhlciBhIHN0b2NrIEdpdCByZXBsaWNhLCBvciBhIEtldGNoLWF3YXJlIHJlcGxpY2EuCisgKiA8cD4KKyAqIEEgc3RvY2sgR2l0IHJlcGxpY2EgaGFzIG5vIHNwZWNpYWwga25vd2xlZGdlIG9mIEtldGNoIGFuZCBzaW1wbHkgc3RvcmVzCisgKiBvYmplY3RzIGFuZCByZWZlcmVuY2VzLiBLZXRjaCBjb21tdW5pY2F0ZXMgd2l0aCB0aGUgc3RvY2sgR2l0IHJlcGxpY2EgdXNpbmcKKyAqIHRoZSBHaXQgcHVzaCB3aXJlIHByb3RvY29sLiBUaGUge0BsaW5rIEtldGNoTGVhZGVyfSBjb21taXRzIGFuIGFncmVlZCB1cG9uCisgKiBzdGF0ZSBieSBwdXNoaW5nIGFsbCByZWZlcmVuY2VzIHRvIHRoZSBHaXQgcmVwbGljYSwgZm9yIGV4YW1wbGUKKyAqIHtAY29kZSAicmVmcy9oZWFkcy9tYXN0ZXIifSBpcyBwdXNoZWQgZHVyaW5nIGNvbW1pdC4gU3RvY2sgR2l0IHJlcGxpY2FzIHVzZQorICoge0BsaW5rIENvbW1pdE1ldGhvZCNBTExfUkVGU30gdG8gcmVjb3JkIHRoZSBmaW5hbCBzdGF0ZS4KKyAqIDxwPgorICogS2V0Y2gtYXdhcmUgcmVwbGljYXMgdW5kZXJzdGFuZCB0aGUge0Bjb2RlIFJlZlRyZWV9IHNlbnQgZHVyaW5nIHRoZSBwcm9wb3NhbAorICogYW5kIGR1cmluZyBjb21taXQgYXJlIGFibGUgdG8gdXBkYXRlIHRoZWlyIG93biByZWZlcmVuY2Ugc3BhY2UgdG8gbWF0Y2ggdGhlCisgKiBzdGF0ZSByZXByZXNlbnRlZCBieSB0aGUge0Bjb2RlIFJlZlRyZWV9LiBLZXRjaC1hd2FyZSByZXBsaWNhcyB0eXBpY2FsbHkgdXNlCisgKiBhIHtAbGluayBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UucmVmdHJlZS5SZWZUcmVlRGF0YWJhc2V9IGFuZAorICoge0BsaW5rIENvbW1pdE1ldGhvZCNUWE5fQ09NTUlUVEVEfSB0byByZWNvcmQgdGhlIGZpbmFsIHN0YXRlLgorICogPHA+CisgKiBLZXRjaFJlcGxpY2EgaW5zdGFuY2VzIGFyZSB0aWdodGx5IGNvdXBsZWQgd2l0aCBhIHNpbmdsZSB7QGxpbmsgS2V0Y2hMZWFkZXJ9LgorICogU29tZSBzdGF0ZSBtYXkgYmUgYWNjZXNzZWQgYnkgdGhlIGxlYWRlciB0aHJlYWQgYW5kIHVzZXMgdGhlIGxlYWRlcidzIG93bgorICoge0BsaW5rIEtldGNoTGVhZGVyI2xvY2t9IHRvIHByb3RlY3Qgc2hhcmVkIGRhdGEuCisgKi8KK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBLZXRjaFJlcGxpY2EgeworCXN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoS2V0Y2hSZXBsaWNhLmNsYXNzKTsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBieXRlW10gUEVFTCA9IHsgJyAnLCAnXicgfTsKKworCS8qKiBQYXJ0aWNpcGF0aW9uIG9mIGEgcmVwbGljYSBpbiBlc3RhYmxpc2hpbmcgY29uc2Vuc3VzLiAqLworCXB1YmxpYyBlbnVtIFBhcnRpY2lwYXRpb24geworCQkvKiogUmVwbGljYSBjYW4gdm90ZS4gKi8KKwkJRlVMTCwKKworCQkvKiogUmVwbGljYSBkb2VzIG5vdCB2b3RlLCBidXQgdHJhY2tzIGxlYWRlci4gKi8KKwkJRk9MTE9XRVJfT05MWTsKKwl9CisKKwkvKiogSG93IHRoaXMgcmVwbGljYSB3YW50cyB0byByZWNlaXZlIEtldGNoIGNvbW1pdCBvcGVyYXRpb25zLiAqLworCXB1YmxpYyBlbnVtIENvbW1pdE1ldGhvZCB7CisJCS8qKiBBbGwgcmVmZXJlbmNlcyBhcmUgcHVzaGVkIHRvIHRoZSBwZWVyIGFzIHN0YW5kYXJkIEdpdC4gKi8KKwkJQUxMX1JFRlMsCisKKwkJLyoqIE9ubHkge0Bjb2RlIHJlZnMvdHhuL2NvbW1pdHRlZH0gaXMgd3JpdHRlbi91cGRhdGVkLiAqLworCQlUWE5fQ09NTUlUVEVEOworCX0KKworCS8qKiBEZWxheSBiZWZvcmUgY29tbWl0dGluZyB0byBhIHJlcGxpY2EuICovCisJcHVibGljIGVudW0gQ29tbWl0U3BlZWQgeworCQkvKioKKwkJICogU2VuZCB0aGUgY29tbWl0IGltbWVkaWF0ZWx5LCBldmVuIGlmIGl0IGNvdWxkIGJlIGJhdGNoZWQgd2l0aCB0aGUKKwkJICogbmV4dCBwcm9wb3NhbC4KKwkJICovCisJCUZBU1QsCisKKwkJLyoqCisJCSAqIElmIHRoZSBuZXh0IHByb3Bvc2FsIGlzIGF2YWlsYWJsZSwgYmF0Y2ggdGhlIGNvbW1pdCB3aXRoIGl0LAorCQkgKiBvdGhlcndpc2UganVzdCBzZW5kIHRoZSBjb21taXQuIFRoaXMgZ2VuZXJhdGVzIGxlc3MgbmV0d29yayB1c2UsIGJ1dAorCQkgKiBtYXkgcHJvdmlkZSBzbG93ZXIgY29uc2lzdGVuY3kgb24gdGhlIHJlcGxpY2EuCisJCSAqLworCQlCQVRDSEVEOworCX0KKworCS8qKiBDdXJyZW50IHN0YXRlIG9mIGEgcmVwbGljYS4gKi8KKwlwdWJsaWMgZW51bSBTdGF0ZSB7CisJCS8qKiBMZWFkZXIgaGFzIG5vdCB5ZXQgY29udGFjdGVkIHRoZSByZXBsaWNhLiAqLworCQlVTktOT1dOLAorCisJCS8qKiBSZXBsaWNhIGlzIGJlaGluZCB0aGUgY29uc2Vuc3VzLiAqLworCQlMQUdHSU5HLAorCisJCS8qKiBSZXBsaWNhIG1hdGNoZXMgdGhlIGNvbnNlbnN1cy4gKi8KKwkJQ1VSUkVOVCwKKworCQkvKiogUmVwbGljYSBoYXMgYSBkaWZmZXJlbnQgKG9yIHVua25vd24pIGhpc3RvcnkuICovCisJCURJVkVSR0VOVCwKKworCQkvKiogUmVwbGljYSdzIGhpc3RvcnkgY29udGFpbnMgdGhlIGxlYWRlcidzIGhpc3RvcnkuICovCisJCUFIRUFELAorCisJCS8qKiBSZXBsaWNhIGNhbiBub3QgYmUgY29udGFjdGVkLiAqLworCQlPRkZMSU5FOworCX0KKworCXByaXZhdGUgZmluYWwgS2V0Y2hMZWFkZXIgbGVhZGVyOworCXByaXZhdGUgZmluYWwgU3RyaW5nIHJlcGxpY2FOYW1lOworCXByaXZhdGUgZmluYWwgUGFydGljaXBhdGlvbiBwYXJ0aWNpcGF0aW9uOworCXByaXZhdGUgZmluYWwgQ29tbWl0TWV0aG9kIGNvbW1pdE1ldGhvZDsKKwlwcml2YXRlIGZpbmFsIENvbW1pdFNwZWVkIGNvbW1pdFNwZWVkOworCXByaXZhdGUgZmluYWwgbG9uZyBtaW5SZXRyeU1pbGxpczsKKwlwcml2YXRlIGZpbmFsIGxvbmcgbWF4UmV0cnlNaWxsaXM7CisJcHJpdmF0ZSBmaW5hbCBNYXA8T2JqZWN0SWQsIExpc3Q8UmVjZWl2ZUNvbW1hbmQ+PiBzdGFnZWQ7CisJcHJpdmF0ZSBmaW5hbCBNYXA8U3RyaW5nLCBSZWNlaXZlQ29tbWFuZD4gcnVubmluZzsKKwlwcml2YXRlIGZpbmFsIE1hcDxTdHJpbmcsIFJlY2VpdmVDb21tYW5kPiB3YWl0aW5nOworCXByaXZhdGUgZmluYWwgTGlzdDxSZXBsaWNhUHVzaFJlcXVlc3Q+IHF1ZXVlZDsKKworCS8qKgorCSAqIFZhbHVlIGtub3duIGZvciB7QGNvZGUgInJlZnMvdHhuL2FjY2VwdGVkIn0uCisJICogPHA+CisJICogUmFmdCBsaXRlcmF0dXJlIHJlZmVycyB0byB0aGlzIGFzIHtAY29kZSBtYXRjaEluZGV4fS4KKwkgKi8KKwlwcml2YXRlIE9iamVjdElkIHR4bkFjY2VwdGVkOworCisJLyoqCisJICogVmFsdWUga25vd24gZm9yIHtAY29kZSAicmVmcy90eG4vY29tbWl0dGVkIn0uCisJICogPHA+CisJICogUmFmdCBsaXRlcmF0dXJlIHJlZmVycyB0byB0aGlzIGFzIHtAY29kZSBjb21taXRJbmRleH0uIEluIHRyYWRpdGlvbmFsCisJICogUmFmdCB0aGlzIGlzIGEgc3RhdGUgdmFyaWFibGUgaW5zaWRlIHRoZSBmb2xsb3dlciBpbXBsZW1lbnRhdGlvbiwgYnV0CisJICogS2V0Y2gga2VlcHMgaXQgaW4gdGhlIGxlYWRlci4KKwkgKi8KKwlwcml2YXRlIE9iamVjdElkIHR4bkNvbW1pdHRlZDsKKworCS8qKiBXaGF0IGlzIGhhcHBlbmluZyB3aXRoIHRoaXMgcmVwbGljYS4gKi8KKwlwcml2YXRlIFN0YXRlIHN0YXRlID0gVU5LTk9XTjsKKwlwcml2YXRlIFN0cmluZyBlcnJvcjsKKworCS8qKiBTY2hlZHVsZWQgcmV0cnkgZHVlIHRvIGNvbW11bmljYXRpb24gZmFpbHVyZS4gKi8KKwlwcml2YXRlIEZ1dHVyZTw/PiByZXRyeUZ1dHVyZTsKKwlwcml2YXRlIGxvbmcgbGFzdFJldHJ5TWlsbGlzOworCXByaXZhdGUgbG9uZyByZXRyeUF0TWlsbGlzOworCisJLyoqCisJICogQ29uZmlndXJlIGEgcmVwbGljYSByZXByZXNlbnRhdGlvbi4KKwkgKgorCSAqIEBwYXJhbSBsZWFkZXIKKwkgKiAgICAgICAgICAgIGluc3RhbmNlIHRoaXMgcmVwbGljYSBmb2xsb3dzLgorCSAqIEBwYXJhbSBuYW1lCisJICogICAgICAgICAgICB1bmlxdWUtaXNoIG5hbWUgaWRlbnRpZnlpbmcgdGhpcyByZXBsaWNhIGZvciBkZWJ1Z2dpbmcuCisJICogQHBhcmFtIGNmZworCSAqICAgICAgICAgICAgaG93IEtldGNoIHNob3VsZCB0cmVhdCB0aGUgcmVwbGljYS4KKwkgKi8KKwlwcm90ZWN0ZWQgS2V0Y2hSZXBsaWNhKEtldGNoTGVhZGVyIGxlYWRlciwgU3RyaW5nIG5hbWUsIFJlcGxpY2FDb25maWcgY2ZnKSB7CisJCXRoaXMubGVhZGVyID0gbGVhZGVyOworCQl0aGlzLnJlcGxpY2FOYW1lID0gbmFtZTsKKwkJdGhpcy5wYXJ0aWNpcGF0aW9uID0gY2ZnLmdldFBhcnRpY2lwYXRpb24oKTsKKwkJdGhpcy5jb21taXRNZXRob2QgPSBjZmcuZ2V0Q29tbWl0TWV0aG9kKCk7CisJCXRoaXMuY29tbWl0U3BlZWQgPSBjZmcuZ2V0Q29tbWl0U3BlZWQoKTsKKwkJdGhpcy5taW5SZXRyeU1pbGxpcyA9IGNmZy5nZXRNaW5SZXRyeShNSUxMSVNFQ09ORFMpOworCQl0aGlzLm1heFJldHJ5TWlsbGlzID0gY2ZnLmdldE1heFJldHJ5KE1JTExJU0VDT05EUyk7CisJCXRoaXMuc3RhZ2VkID0gbmV3IEhhc2hNYXA8PigpOworCQl0aGlzLnJ1bm5pbmcgPSBuZXcgSGFzaE1hcDw+KCk7CisJCXRoaXMud2FpdGluZyA9IG5ldyBIYXNoTWFwPD4oKTsKKwkJdGhpcy5xdWV1ZWQgPSBuZXcgQXJyYXlMaXN0PD4oNCk7CisJfQorCisJLyoqIEByZXR1cm4gc3lzdGVtIGNvbmZpZ3VyYXRpb24uICovCisJcHVibGljIEtldGNoU3lzdGVtIGdldFN5c3RlbSgpIHsKKwkJcmV0dXJuIGdldExlYWRlcigpLmdldFN5c3RlbSgpOworCX0KKworCS8qKiBAcmV0dXJuIGxlYWRlciBpbnN0YW5jZSB0aGlzIHJlcGxpY2EgZm9sbG93cy4gKi8KKwlwdWJsaWMgS2V0Y2hMZWFkZXIgZ2V0TGVhZGVyKCkgeworCQlyZXR1cm4gbGVhZGVyOworCX0KKworCS8qKiBAcmV0dXJuIHVuaXF1ZS1pc2ggbmFtZSBmb3IgZGVidWdnaW5nLiAqLworCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKKwkJcmV0dXJuIHJlcGxpY2FOYW1lOworCX0KKworCS8qKiBAcmV0dXJuIGRlc2NyaXB0aW9uIG9mIHRoaXMgcmVwbGljYSBmb3IgZXJyb3IvZGVidWcgbG9nZ2luZyBwdXJwb3Nlcy4gKi8KKwlwcm90ZWN0ZWQgU3RyaW5nIGRlc2NyaWJlRm9yTG9nKCkgeworCQlyZXR1cm4gZ2V0TmFtZSgpOworCX0KKworCS8qKiBAcmV0dXJuIGhvdyB0aGUgcmVwbGljYSBwYXJ0aWNpcGF0ZXMgaW4gdGhpcyBLZXRjaCBzeXN0ZW0uICovCisJcHVibGljIFBhcnRpY2lwYXRpb24gZ2V0UGFydGljaXBhdGlvbigpIHsKKwkJcmV0dXJuIHBhcnRpY2lwYXRpb247CisJfQorCisJLyoqIEByZXR1cm4gaG93IEtldGNoIHdpbGwgY29tbWl0IHRvIHRoZSByZXBvc2l0b3J5LiAqLworCXB1YmxpYyBDb21taXRNZXRob2QgZ2V0Q29tbWl0TWV0aG9kKCkgeworCQlyZXR1cm4gY29tbWl0TWV0aG9kOworCX0KKworCS8qKiBAcmV0dXJuIHdoZW4gS2V0Y2ggd2lsbCBjb21taXQgdG8gdGhlIHJlcG9zaXRvcnkuICovCisJcHVibGljIENvbW1pdFNwZWVkIGdldENvbW1pdFNwZWVkKCkgeworCQlyZXR1cm4gY29tbWl0U3BlZWQ7CisJfQorCisJLyoqCisJICogQ2FsbGVkIGJ5IGxlYWRlciB0byBwZXJmb3JtIGdyYWNlZnVsIHNodXRkb3duLgorCSAqIDxwPgorCSAqIERlZmF1bHQgaW1wbGVtZW50YXRpb24gY2FuY2VscyBhbnkgc2NoZWR1bGVkIHJldHJ5LiBTdWJjbGFzc2VzIG1heSBhZGQKKwkgKiBhZGRpdGlvbmFsIGxvZ2ljIGJlZm9yZSBvciBhZnRlciBjYWxsaW5nIHtAY29kZSBzdXBlci5zaHV0ZG93bigpfS4KKwkgKiA8cD4KKwkgKiBDYWxsZWQgd2l0aCB7QGxpbmsgS2V0Y2hMZWFkZXIjbG9ja30gaGVsZCBieSBjYWxsZXIuCisJICovCisJcHJvdGVjdGVkIHZvaWQgc2h1dGRvd24oKSB7CisJCUZ1dHVyZTw/PiBmID0gcmV0cnlGdXR1cmU7CisJCWlmIChmICE9IG51bGwpIHsKKwkJCXJldHJ5RnV0dXJlID0gbnVsbDsKKwkJCWYuY2FuY2VsKHRydWUpOworCQl9CisJfQorCisJUmVwbGljYVNuYXBzaG90IHNuYXBzaG90KCkgeworCQlSZXBsaWNhU25hcHNob3QgcyA9IG5ldyBSZXBsaWNhU25hcHNob3QodGhpcyk7CisJCXMuYWNjZXB0ZWQgPSB0eG5BY2NlcHRlZDsKKwkJcy5jb21taXR0ZWQgPSB0eG5Db21taXR0ZWQ7CisJCXMuc3RhdGUgPSBzdGF0ZTsKKwkJcy5lcnJvciA9IGVycm9yOworCQlzLnJldHJ5QXRNaWxsaXMgPSB3YWl0aW5nRm9yUmV0cnkoKSA/IHJldHJ5QXRNaWxsaXMgOiAwOworCQlyZXR1cm4gczsKKwl9CisKKwkvKioKKwkgKiBVcGRhdGUgdGhlIGxlYWRlcidzIHZpZXcgb2YgdGhlIHJlcGxpY2EgYWZ0ZXIgYSBwb2xsLgorCSAqIDxwPgorCSAqIENhbGxlZCB3aXRoIHtAbGluayBLZXRjaExlYWRlciNsb2NrfSBoZWxkIGJ5IGNhbGxlci4KKwkgKgorCSAqIEBwYXJhbSByZWZzCisJICogICAgICAgICAgICBtYXAgb2YgcmVmcyBmcm9tIHRoZSByZXBsaWNhLgorCSAqLworCXZvaWQgaW5pdGlhbGl6ZShNYXA8U3RyaW5nLCBSZWY+IHJlZnMpIHsKKwkJaWYgKHR4bkFjY2VwdGVkID09IG51bGwpIHsKKwkJCXR4bkFjY2VwdGVkID0gZ2V0SWQocmVmcy5nZXQoZ2V0U3lzdGVtKCkuZ2V0VHhuQWNjZXB0ZWQoKSkpOworCQl9CisJCWlmICh0eG5Db21taXR0ZWQgPT0gbnVsbCkgeworCQkJdHhuQ29tbWl0dGVkID0gZ2V0SWQocmVmcy5nZXQoZ2V0U3lzdGVtKCkuZ2V0VHhuQ29tbWl0dGVkKCkpKTsKKwkJfQorCX0KKworCU9iamVjdElkIGdldFR4bkFjY2VwdGVkKCkgeworCQlyZXR1cm4gdHhuQWNjZXB0ZWQ7CisJfQorCisJYm9vbGVhbiBoYXNBY2NlcHRlZChMb2dJbmRleCBpZCkgeworCQlyZXR1cm4gZXF1YWxzKHR4bkFjY2VwdGVkLCBpZCk7CisJfQorCisJcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBlcXVhbHMoQE51bGxhYmxlIE9iamVjdElkIGEsIExvZ0luZGV4IGIpIHsKKwkJcmV0dXJuIGEgIT0gbnVsbCAmJiBiICE9IG51bGwgJiYgQW55T2JqZWN0SWQuZXF1YWxzKGEsIGIpOworCX0KKworCS8qKgorCSAqIFNjaGVkdWxlIGEgcHJvcG9zYWwgcm91bmQgd2l0aCB0aGUgcmVwbGljYS4KKwkgKiA8cD4KKwkgKiBDYWxsZWQgd2l0aCB7QGxpbmsgS2V0Y2hMZWFkZXIjbG9ja30gaGVsZCBieSBjYWxsZXIuCisJICoKKwkgKiBAcGFyYW0gcm91bmQKKwkgKiAgICAgICAgICAgIGN1cnJlbnQgcm91bmQgYmVpbmcgcnVuIGJ5IHRoZSBsZWFkZXIuCisJICovCisJdm9pZCBwdXNoVHhuQWNjZXB0ZWRBc3luYyhSb3VuZCByb3VuZCkgeworCQlMaXN0PFJlY2VpdmVDb21tYW5kPiBjbWRzID0gbmV3IEFycmF5TGlzdDw+KCk7CisJCWlmIChjb21taXRTcGVlZCA9PSBCQVRDSEVEKSB7CisJCQlMb2dJbmRleCBjb21taXR0ZWRJbmRleCA9IGxlYWRlci5nZXRDb21taXR0ZWQoKTsKKwkJCWlmIChlcXVhbHModHhuQWNjZXB0ZWQsIGNvbW1pdHRlZEluZGV4KQorCQkJCQkmJiAhZXF1YWxzKHR4bkNvbW1pdHRlZCwgY29tbWl0dGVkSW5kZXgpKSB7CisJCQkJcHJlcGFyZVR4bkNvbW1pdHRlZChjbWRzLCBjb21taXR0ZWRJbmRleCk7CisJCQl9CisJCX0KKworCQkvLyBUT0RPKHNvcCkgTGFnZ2luZyByZXBsaWNhcyBzaG91bGQgYnVpbGQgYWNjZXB0IG9uIHRoZSBmbHkuCisJCWlmIChyb3VuZC5zdGFnZUNvbW1hbmRzICE9IG51bGwpIHsKKwkJCWZvciAoUmVjZWl2ZUNvbW1hbmQgY21kIDogcm91bmQuc3RhZ2VDb21tYW5kcykgeworCQkJCS8vIFRPRE8oc29wKTogRG8gbm90IHNlbmQgY2VydGFpbiBvYmplY3QgZ3JhcGhzIHRvIHJlcGxpY2EuCisJCQkJY21kcy5hZGQoY29weShjbWQpKTsKKwkJCX0KKwkJfQorCQljbWRzLmFkZChuZXcgUmVjZWl2ZUNvbW1hbmQoCisJCQkJcm91bmQuYWNjZXB0ZWRPbGRJbmRleCwgcm91bmQuYWNjZXB0ZWROZXdJbmRleCwKKwkJCQlnZXRTeXN0ZW0oKS5nZXRUeG5BY2NlcHRlZCgpKSk7CisJCXB1c2hBc3luYyhuZXcgUmVwbGljYVB1c2hSZXF1ZXN0KHRoaXMsIGNtZHMpKTsKKwl9CisKKwlwcml2YXRlIHN0YXRpYyBSZWNlaXZlQ29tbWFuZCBjb3B5KFJlY2VpdmVDb21tYW5kIGMpIHsKKwkJcmV0dXJuIG5ldyBSZWNlaXZlQ29tbWFuZChjLmdldE9sZElkKCksIGMuZ2V0TmV3SWQoKSwgYy5nZXRSZWZOYW1lKCkpOworCX0KKworCWJvb2xlYW4gc2hvdWxkUHVzaFVuYmF0Y2hlZENvbW1pdChMb2dJbmRleCBjb21taXR0ZWQsIGJvb2xlYW4gbGVhZGVySWRsZSkgeworCQlyZXR1cm4gKGxlYWRlcklkbGUgfHwgY29tbWl0U3BlZWQgPT0gRkFTVCkgJiYgaGFzQWNjZXB0ZWQoY29tbWl0dGVkKTsKKwl9CisKKwl2b2lkIHB1c2hDb21taXRBc3luYyhMb2dJbmRleCBjb21taXR0ZWQpIHsKKwkJTGlzdDxSZWNlaXZlQ29tbWFuZD4gY21kcyA9IG5ldyBBcnJheUxpc3Q8PigpOworCQlwcmVwYXJlVHhuQ29tbWl0dGVkKGNtZHMsIGNvbW1pdHRlZCk7CisJCXB1c2hBc3luYyhuZXcgUmVwbGljYVB1c2hSZXF1ZXN0KHRoaXMsIGNtZHMpKTsKKwl9CisKKwlwcml2YXRlIHZvaWQgcHJlcGFyZVR4bkNvbW1pdHRlZChMaXN0PFJlY2VpdmVDb21tYW5kPiBjbWRzLAorCQkJT2JqZWN0SWQgY29tbWl0dGVkKSB7CisJCXJlbW92ZVN0YWdlZChjbWRzLCBjb21taXR0ZWQpOworCQljbWRzLmFkZChuZXcgUmVjZWl2ZUNvbW1hbmQoCisJCQkJdHhuQ29tbWl0dGVkLCBjb21taXR0ZWQsCisJCQkJZ2V0U3lzdGVtKCkuZ2V0VHhuQ29tbWl0dGVkKCkpKTsKKwl9CisKKwlwcml2YXRlIHZvaWQgcmVtb3ZlU3RhZ2VkKExpc3Q8UmVjZWl2ZUNvbW1hbmQ+IGNtZHMsIE9iamVjdElkIGNvbW1pdHRlZCkgeworCQlMaXN0PFJlY2VpdmVDb21tYW5kPiBhID0gc3RhZ2VkLnJlbW92ZShjb21taXR0ZWQpOworCQlpZiAoYSAhPSBudWxsKSB7CisJCQlkZWxldGUoY21kcywgYSk7CisJCX0KKwkJaWYgKHN0YWdlZC5pc0VtcHR5KCkgfHwgIShjb21taXR0ZWQgaW5zdGFuY2VvZiBMb2dJbmRleCkpIHsKKwkJCXJldHVybjsKKwkJfQorCisJCUxvZ0luZGV4IGNvbW1pdHRlZEluZGV4ID0gKExvZ0luZGV4KSBjb21taXR0ZWQ7CisJCUl0ZXJhdG9yPE1hcC5FbnRyeTxPYmplY3RJZCwgTGlzdDxSZWNlaXZlQ29tbWFuZD4+PiBpdHIgPSBzdGFnZWQKKwkJCQkuZW50cnlTZXQoKS5pdGVyYXRvcigpOworCQl3aGlsZSAoaXRyLmhhc05leHQoKSkgeworCQkJTWFwLkVudHJ5PE9iamVjdElkLCBMaXN0PFJlY2VpdmVDb21tYW5kPj4gZSA9IGl0ci5uZXh0KCk7CisJCQlpZiAoZS5nZXRLZXkoKSBpbnN0YW5jZW9mIExvZ0luZGV4KSB7CisJCQkJTG9nSW5kZXggc3RhZ2VkSW5kZXggPSAoTG9nSW5kZXgpIGUuZ2V0S2V5KCk7CisJCQkJaWYgKHN0YWdlZEluZGV4LmlzQmVmb3JlKGNvbW1pdHRlZEluZGV4KSkgeworCQkJCQlkZWxldGUoY21kcywgZS5nZXRWYWx1ZSgpKTsKKwkJCQkJaXRyLnJlbW92ZSgpOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCXByaXZhdGUgc3RhdGljIHZvaWQgZGVsZXRlKExpc3Q8UmVjZWl2ZUNvbW1hbmQ+IGNtZHMsCisJCQlMaXN0PFJlY2VpdmVDb21tYW5kPiBjcmVhdGVDbWRzKSB7CisJCWZvciAoUmVjZWl2ZUNvbW1hbmQgY21kIDogY3JlYXRlQ21kcykgeworCQkJT2JqZWN0SWQgaWQgPSBjbWQuZ2V0TmV3SWQoKTsKKwkJCVN0cmluZyBuYW1lID0gY21kLmdldFJlZk5hbWUoKTsKKwkJCWNtZHMuYWRkKG5ldyBSZWNlaXZlQ29tbWFuZChpZCwgT2JqZWN0SWQuemVyb0lkKCksIG5hbWUpKTsKKwkJfQorCX0KKworCS8qKgorCSAqIERldGVybWluZSB0aGUgbmV4dCBwdXNoIGZvciB0aGlzIHJlcGxpY2EgKGlmIGFueSkgYW5kIHN0YXJ0IGl0LgorCSAqIDxwPgorCSAqIElmIHRoZSByZXBsaWNhIGhhcyBzdWNjZXNzZnVsbHkgYWNjZXB0ZWQgdGhlIGNvbW1pdHRlZCBzdGF0ZSBvZiB0aGUKKwkgKiBsZWFkZXIsIHRoaXMgbWV0aG9kIHdpbGwgcHVzaCBhbGwgcmVmZXJlbmNlcyB0byB0aGUgcmVwbGljYSB1c2luZyB0aGUKKwkgKiBjb25maWd1cmVkIHtAbGluayBDb21taXRNZXRob2R9LgorCSAqIDxwPgorCSAqIElmIHRoZSByZXBsaWNhIGlzIHtAbGluayBTdGF0ZSNMQUdHSU5HfSB0aGlzIG1ldGhvZCB3aWxsIGJlZ2luIGNhdGNoIHVwCisJICogYnkgc2VuZGluZyBhIG1vcmUgcmVjZW50IHtAY29kZSByZWZzL3R4bi9hY2NlcHRlZH0uCisJICogPHA+CisJICogTXVzdCBiZSBpbnZva2VkIHdpdGgge0BsaW5rIEtldGNoTGVhZGVyI2xvY2t9IGhlbGQgYnkgY2FsbGVyLgorCSAqLworCXByaXZhdGUgdm9pZCBydW5OZXh0UHVzaFJlcXVlc3QoKSB7CisJCUxvZ0luZGV4IGNvbW1pdHRlZCA9IGxlYWRlci5nZXRDb21taXR0ZWQoKTsKKwkJaWYgKCFlcXVhbHModHhuQ29tbWl0dGVkLCBjb21taXR0ZWQpCisJCQkJJiYgc2hvdWxkUHVzaFVuYmF0Y2hlZENvbW1pdChjb21taXR0ZWQsIGxlYWRlci5pc0lkbGUoKSkpIHsKKwkJCXB1c2hDb21taXRBc3luYyhjb21taXR0ZWQpOworCQl9CisKKwkJaWYgKHF1ZXVlZC5pc0VtcHR5KCkgfHwgIXJ1bm5pbmcuaXNFbXB0eSgpIHx8IHdhaXRpbmdGb3JSZXRyeSgpKSB7CisJCQlyZXR1cm47CisJCX0KKworCQkvLyBDb2xsYXBzZSBhbGwgcXVldWVkIHJlcXVlc3RzIGludG8gYSBzaW5nbGUgcmVxdWVzdC4KKwkJTWFwPFN0cmluZywgUmVjZWl2ZUNvbW1hbmQ+IGNtZE1hcCA9IG5ldyBIYXNoTWFwPD4oKTsKKwkJZm9yIChSZXBsaWNhUHVzaFJlcXVlc3QgcmVxIDogcXVldWVkKSB7CisJCQlmb3IgKFJlY2VpdmVDb21tYW5kIGNtZCA6IHJlcS5nZXRDb21tYW5kcygpKSB7CisJCQkJU3RyaW5nIG5hbWUgPSBjbWQuZ2V0UmVmTmFtZSgpOworCQkJCVJlY2VpdmVDb21tYW5kIG9sZCA9IGNtZE1hcC5yZW1vdmUobmFtZSk7CisJCQkJaWYgKG9sZCAhPSBudWxsKSB7CisJCQkJCWNtZCA9IG5ldyBSZWNlaXZlQ29tbWFuZCgKKwkJCQkJCQlvbGQuZ2V0T2xkSWQoKSwgY21kLmdldE5ld0lkKCksCisJCQkJCQkJbmFtZSk7CisJCQkJfQorCQkJCWNtZE1hcC5wdXQobmFtZSwgY21kKTsKKwkJCX0KKwkJfQorCQlxdWV1ZWQuY2xlYXIoKTsKKwkJd2FpdGluZy5jbGVhcigpOworCisJCUxpc3Q8UmVjZWl2ZUNvbW1hbmQ+IG5leHQgPSBuZXcgQXJyYXlMaXN0PD4oY21kTWFwLnZhbHVlcygpKTsKKwkJZm9yIChSZWNlaXZlQ29tbWFuZCBjbWQgOiBuZXh0KSB7CisJCQlydW5uaW5nLnB1dChjbWQuZ2V0UmVmTmFtZSgpLCBjbWQpOworCQl9CisJCXN0YXJ0UHVzaChuZXcgUmVwbGljYVB1c2hSZXF1ZXN0KHRoaXMsIG5leHQpKTsKKwl9CisKKwlwcml2YXRlIHZvaWQgcHVzaEFzeW5jKFJlcGxpY2FQdXNoUmVxdWVzdCByZXEpIHsKKwkJaWYgKGRlZmVyKHJlcSkpIHsKKwkJCS8vIFRPRE8oc29wKSBDb2xsYXBzZSBkdXJpbmcgbG9uZyByZXRyeSBvdXRhZ2UuCisJCQlmb3IgKFJlY2VpdmVDb21tYW5kIGNtZCA6IHJlcS5nZXRDb21tYW5kcygpKSB7CisJCQkJd2FpdGluZy5wdXQoY21kLmdldFJlZk5hbWUoKSwgY21kKTsKKwkJCX0KKwkJCXF1ZXVlZC5hZGQocmVxKTsKKwkJfSBlbHNlIHsKKwkJCWZvciAoUmVjZWl2ZUNvbW1hbmQgY21kIDogcmVxLmdldENvbW1hbmRzKCkpIHsKKwkJCQlydW5uaW5nLnB1dChjbWQuZ2V0UmVmTmFtZSgpLCBjbWQpOworCQkJfQorCQkJc3RhcnRQdXNoKHJlcSk7CisJCX0KKwl9CisKKwlwcml2YXRlIGJvb2xlYW4gZGVmZXIoUmVwbGljYVB1c2hSZXF1ZXN0IHJlcSkgeworCQlpZiAod2FpdGluZ0ZvclJldHJ5KCkpIHsKKwkJCS8vIFByaW9yIGNvbW11bmljYXRpb24gZmFpbHVyZTsgZXZlcnl0aGluZyBpcyBkZWZlcnJlZC4KKwkJCXJldHVybiB0cnVlOworCQl9CisKKwkJZm9yIChSZWNlaXZlQ29tbWFuZCBuZXh0Q21kIDogcmVxLmdldENvbW1hbmRzKCkpIHsKKwkJCVJlY2VpdmVDb21tYW5kIHByaW9yQ21kID0gd2FpdGluZy5nZXQobmV4dENtZC5nZXRSZWZOYW1lKCkpOworCQkJaWYgKHByaW9yQ21kID09IG51bGwpIHsKKwkJCQlwcmlvckNtZCA9IHJ1bm5pbmcuZ2V0KG5leHRDbWQuZ2V0UmVmTmFtZSgpKTsKKwkJCX0KKwkJCWlmIChwcmlvckNtZCAhPSBudWxsKSB7CisJCQkJLy8gQW5vdGhlciByZXF1ZXN0IHBlbmRpbmcgb24gc2FtZSByZWY7IHRoYXQgbXVzdCBnbyBmaXJzdC4KKwkJCQkvLyBWZXJpZnkgcHJpb3JDbWQubmV3SWQgPT0gbmV4dENtZC5vbGRJZD8KKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gZmFsc2U7CisJfQorCisJcHJpdmF0ZSBib29sZWFuIHdhaXRpbmdGb3JSZXRyeSgpIHsKKwkJRnV0dXJlPD8+IGYgPSByZXRyeUZ1dHVyZTsKKwkJcmV0dXJuIGYgIT0gbnVsbCAmJiAhZi5pc0RvbmUoKTsKKwl9CisKKwlwcml2YXRlIHZvaWQgcmV0cnlMYXRlcihSZXBsaWNhUHVzaFJlcXVlc3QgcmVxKSB7CisJCUNvbGxlY3Rpb248UmVjZWl2ZUNvbW1hbmQ+IGNtZHMgPSByZXEuZ2V0Q29tbWFuZHMoKTsKKwkJZm9yIChSZWNlaXZlQ29tbWFuZCBjbWQgOiBjbWRzKSB7CisJCQljbWQuc2V0UmVzdWx0KE5PVF9BVFRFTVBURUQsIG51bGwpOworCQkJaWYgKCF3YWl0aW5nLmNvbnRhaW5zS2V5KGNtZC5nZXRSZWZOYW1lKCkpKSB7CisJCQkJd2FpdGluZy5wdXQoY21kLmdldFJlZk5hbWUoKSwgY21kKTsKKwkJCX0KKwkJfQorCQlxdWV1ZWQuYWRkKDAsIG5ldyBSZXBsaWNhUHVzaFJlcXVlc3QodGhpcywgY21kcykpOworCisJCWlmICghd2FpdGluZ0ZvclJldHJ5KCkpIHsKKwkJCWxvbmcgZGVsYXkgPSBLZXRjaFN5c3RlbS5kZWxheSgKKwkJCQkJbGFzdFJldHJ5TWlsbGlzLAorCQkJCQltaW5SZXRyeU1pbGxpcywgbWF4UmV0cnlNaWxsaXMpOworCQkJaWYgKGxvZy5pc0RlYnVnRW5hYmxlZCgpKSB7CisJCQkJbG9nLmRlYnVnKCJSZXRyeWluZyB7fSBhZnRlciB7fSBtcyIsIC8vJE5PTi1OTFMtMSQKKwkJCQkJCWRlc2NyaWJlRm9yTG9nKCksIExvbmcudmFsdWVPZihkZWxheSkpOworCQkJfQorCQkJbGFzdFJldHJ5TWlsbGlzID0gZGVsYXk7CisJCQlyZXRyeUF0TWlsbGlzID0gU3lzdGVtUmVhZGVyLmdldEluc3RhbmNlKCkuZ2V0Q3VycmVudFRpbWUoKSArIGRlbGF5OworCQkJcmV0cnlGdXR1cmUgPSBnZXRTeXN0ZW0oKS5nZXRFeGVjdXRvcigpCisJCQkJCS5zY2hlZHVsZShuZXcgV2Vha1JldHJ5UHVzaCh0aGlzKSwgZGVsYXksIE1JTExJU0VDT05EUyk7CisJCX0KKwl9CisKKwkvKiogV2Vha2x5IGhvbGRzIGEgcmV0cnlpbmcgcmVwbGljYSwgYWxsb3dpbmcgaXQgdG8gZ2FyYmFnZSBjb2xsZWN0LiAqLworCXN0YXRpYyBjbGFzcyBXZWFrUmV0cnlQdXNoIGV4dGVuZHMgV2Vha1JlZmVyZW5jZTxLZXRjaFJlcGxpY2E+CisJCQlpbXBsZW1lbnRzIENhbGxhYmxlPFZvaWQ+IHsKKwkJV2Vha1JldHJ5UHVzaChLZXRjaFJlcGxpY2EgcikgeworCQkJc3VwZXIocik7CisJCX0KKworCQlAT3ZlcnJpZGUKKwkJcHVibGljIFZvaWQgY2FsbCgpIHRocm93cyBFeGNlcHRpb24geworCQkJS2V0Y2hSZXBsaWNhIHIgPSBnZXQoKTsKKwkJCWlmIChyICE9IG51bGwpIHsKKwkJCQlyLmRvUmV0cnlQdXNoKCk7CisJCQl9CisJCQlyZXR1cm4gbnVsbDsKKwkJfQorCX0KKworCXByaXZhdGUgdm9pZCBkb1JldHJ5UHVzaCgpIHsKKwkJbGVhZGVyLmxvY2subG9jaygpOworCQl0cnkgeworCQkJcmV0cnlGdXR1cmUgPSBudWxsOworCQkJcnVuTmV4dFB1c2hSZXF1ZXN0KCk7CisJCX0gZmluYWxseSB7CisJCQlsZWFkZXIubG9jay51bmxvY2soKTsKKwkJfQorCX0KKworCS8qKgorCSAqIEJlZ2luIGV4ZWN1dGluZyBhIHNpbmdsZSBwdXNoLgorCSAqIDxwPgorCSAqIFRoaXMgbWV0aG9kIG11c3QgbW92ZSBwcm9jZXNzaW5nIG9udG8gYW5vdGhlciB0aHJlYWQuCisJICogQ2FsbGVkIHdpdGgge0BsaW5rIEtldGNoTGVhZGVyI2xvY2t9IGhlbGQgYnkgY2FsbGVyLgorCSAqCisJICogQHBhcmFtIHJlcQorCSAqICAgICAgICAgICAgdGhlIHJlcXVlc3QgdG8gc2VuZCB0byB0aGUgcmVwbGljYS4KKwkgKi8KKwlwcm90ZWN0ZWQgYWJzdHJhY3Qgdm9pZCBzdGFydFB1c2goUmVwbGljYVB1c2hSZXF1ZXN0IHJlcSk7CisKKwkvKioKKwkgKiBDYWxsYmFjayBmcm9tIHtAbGluayBSZXBsaWNhUHVzaFJlcXVlc3R9IHVwb24gc3VjY2VzcyBvciBmYWlsdXJlLgorCSAqIDxwPgorCSAqIEFjcXVpcmVzIHRoZSB7QGxpbmsgS2V0Y2hMZWFkZXIjbG9ja30gYW5kIHVwZGF0ZXMgdGhlIGxlYWRlcidzIGludGVybmFsCisJICoga25vd2xlZGdlIGFib3V0IHRoaXMgcmVwbGljYSB0byByZWZsZWN0IHdoYXQgaGFzIGJlZW4gbGVhcm5lZCBkdXJpbmcgYQorCSAqIHB1c2ggdG8gdGhlIHJlcGxpY2EuIEluIHNvbWUgY2FzZXMgb2YgZGl2ZXJnZW5jZSB0aGlzIG1ldGhvZCBtYXkgdGFrZQorCSAqIHNvbWUgdGltZSB0byBkZXRlcm1pbmUgaG93IHRoZSByZXBsaWNhIGhhcyBkaXZlcmdlZDsgdG8gcmVkdWNlIGNvbnRlbnRpb24KKwkgKiB0aGlzIGlzIGV2YWx1YXRlZCBiZWZvcmUgYWNxdWlyaW5nIHRoZSBsZWFkZXIgbG9jay4KKwkgKgorCSAqIEBwYXJhbSByZXBvCisJICogICAgICAgICAgICBsb2NhbCByZXBvc2l0b3J5IGluc3RhbmNlIHVzZWQgYnkgdGhlIHB1c2ggdGhyZWFkLgorCSAqIEBwYXJhbSByZXEKKwkgKiAgICAgICAgICAgIHB1c2ggcmVxdWVzdCBqdXN0IGF0dGVtcHRlZC4KKwkgKi8KKwl2b2lkIGFmdGVyUHVzaChATnVsbGFibGUgUmVwb3NpdG9yeSByZXBvLCBSZXBsaWNhUHVzaFJlcXVlc3QgcmVxKSB7CisJCVJlY2VpdmVDb21tYW5kIGFjY2VwdENtZCA9IG51bGw7CisJCVJlY2VpdmVDb21tYW5kIGNvbW1pdENtZCA9IG51bGw7CisJCUxpc3Q8UmVjZWl2ZUNvbW1hbmQ+IHN0YWdlcyA9IG51bGw7CisKKwkJZm9yIChSZWNlaXZlQ29tbWFuZCBjbWQgOiByZXEuZ2V0Q29tbWFuZHMoKSkgeworCQkJU3RyaW5nIG5hbWUgPSBjbWQuZ2V0UmVmTmFtZSgpOworCQkJaWYgKG5hbWUuZXF1YWxzKGdldFN5c3RlbSgpLmdldFR4bkFjY2VwdGVkKCkpKSB7CisJCQkJYWNjZXB0Q21kID0gY21kOworCQkJfSBlbHNlIGlmIChuYW1lLmVxdWFscyhnZXRTeXN0ZW0oKS5nZXRUeG5Db21taXR0ZWQoKSkpIHsKKwkJCQljb21taXRDbWQgPSBjbWQ7CisJCQl9IGVsc2UgaWYgKGNtZC5nZXRSZXN1bHQoKSA9PSBPSyAmJiBjbWQuZ2V0VHlwZSgpID09IENSRUFURQorCQkJCQkmJiBuYW1lLnN0YXJ0c1dpdGgoZ2V0U3lzdGVtKCkuZ2V0VHhuU3RhZ2UoKSkpIHsKKwkJCQlpZiAoc3RhZ2VzID09IG51bGwpIHsKKwkJCQkJc3RhZ2VzID0gbmV3IEFycmF5TGlzdDw+KCk7CisJCQkJfQorCQkJCXN0YWdlcy5hZGQoY21kKTsKKwkJCX0KKwkJfQorCisJCVN0YXRlIG5ld1N0YXRlID0gbnVsbDsKKwkJT2JqZWN0SWQgYWNjZXB0SWQgPSByZWFkSWQocmVxLCBhY2NlcHRDbWQpOworCQlpZiAocmVwbyAhPSBudWxsICYmIGFjY2VwdENtZCAhPSBudWxsICYmIGFjY2VwdENtZC5nZXRSZXN1bHQoKSAhPSBPSworCQkJCSYmIHJlcS5nZXRFeGNlcHRpb24oKSA9PSBudWxsKSB7CisJCQl0cnkgKExhZ0NoZWNrIGxhZyA9IG5ldyBMYWdDaGVjayh0aGlzLCByZXBvKSkgeworCQkJCW5ld1N0YXRlID0gbGFnLmNoZWNrKGFjY2VwdElkLCBhY2NlcHRDbWQpOworCQkJCWFjY2VwdElkID0gbGFnLmdldFJlbW90ZUlkKCk7CisJCQl9CisJCX0KKworCQlsZWFkZXIubG9jay5sb2NrKCk7CisJCXRyeSB7CisJCQlmb3IgKFJlY2VpdmVDb21tYW5kIGNtZCA6IHJlcS5nZXRDb21tYW5kcygpKSB7CisJCQkJcnVubmluZy5yZW1vdmUoY21kLmdldFJlZk5hbWUoKSk7CisJCQl9CisKKwkJCVRocm93YWJsZSBlcnIgPSByZXEuZ2V0RXhjZXB0aW9uKCk7CisJCQlpZiAoZXJyICE9IG51bGwpIHsKKwkJCQlzdGF0ZSA9IE9GRkxJTkU7CisJCQkJZXJyb3IgPSBlcnIudG9TdHJpbmcoKTsKKwkJCQlyZXRyeUxhdGVyKHJlcSk7CisJCQkJbGVhZGVyLm9uUmVwbGljYVVwZGF0ZSh0aGlzKTsKKwkJCQlyZXR1cm47CisJCQl9CisKKwkJCWxhc3RSZXRyeU1pbGxpcyA9IDA7CisJCQllcnJvciA9IG51bGw7CisJCQl1cGRhdGVWaWV3KHJlcSwgYWNjZXB0SWQsIGNvbW1pdENtZCk7CisKKwkJCWlmIChhY2NlcHRDbWQgIT0gbnVsbCAmJiBhY2NlcHRDbWQuZ2V0UmVzdWx0KCkgPT0gT0spIHsKKwkJCQlzdGF0ZSA9IGhhc0FjY2VwdGVkKGxlYWRlci5nZXRIZWFkKCkpID8gQ1VSUkVOVCA6IExBR0dJTkc7CisJCQkJaWYgKHN0YWdlcyAhPSBudWxsKSB7CisJCQkJCXN0YWdlZC5wdXQoYWNjZXB0Q21kLmdldE5ld0lkKCksIHN0YWdlcyk7CisJCQkJfQorCQkJfSBlbHNlIGlmIChuZXdTdGF0ZSAhPSBudWxsKSB7CisJCQkJc3RhdGUgPSBuZXdTdGF0ZTsKKwkJCX0KKworCQkJbGVhZGVyLm9uUmVwbGljYVVwZGF0ZSh0aGlzKTsKKwkJCXJ1bk5leHRQdXNoUmVxdWVzdCgpOworCQl9IGZpbmFsbHkgeworCQkJbGVhZGVyLmxvY2sudW5sb2NrKCk7CisJCX0KKwl9CisKKwlwcml2YXRlIHZvaWQgdXBkYXRlVmlldyhSZXBsaWNhUHVzaFJlcXVlc3QgcmVxLCBATnVsbGFibGUgT2JqZWN0SWQgYWNjZXB0SWQsCisJCQlSZWNlaXZlQ29tbWFuZCBjb21taXRDbWQpIHsKKwkJaWYgKGFjY2VwdElkICE9IG51bGwpIHsKKwkJCXR4bkFjY2VwdGVkID0gYWNjZXB0SWQ7CisJCX0KKworCQlPYmplY3RJZCBjb21taXR0ZWQgPSByZWFkSWQocmVxLCBjb21taXRDbWQpOworCQlpZiAoY29tbWl0dGVkICE9IG51bGwpIHsKKwkJCXR4bkNvbW1pdHRlZCA9IGNvbW1pdHRlZDsKKwkJfSBlbHNlIGlmIChhY2NlcHRJZCAhPSBudWxsICYmIHR4bkNvbW1pdHRlZCA9PSBudWxsKSB7CisJCQkvLyBJbml0aWFsaXplIGR1cmluZyBmaXJzdCBjb252ZXJzYXRpb24uCisJCQlNYXA8U3RyaW5nLCBSZWY+IGFkdiA9IHJlcS5nZXRSZWZzKCk7CisJCQlpZiAoYWR2ICE9IG51bGwpIHsKKwkJCQlSZWYgcmVmcyA9IGFkdi5nZXQoZ2V0U3lzdGVtKCkuZ2V0VHhuQ29tbWl0dGVkKCkpOworCQkJCXR4bkNvbW1pdHRlZCA9IGdldElkKHJlZnMpOworCQkJfQorCQl9CisJfQorCisJQE51bGxhYmxlCisJcHJpdmF0ZSBzdGF0aWMgT2JqZWN0SWQgcmVhZElkKFJlcGxpY2FQdXNoUmVxdWVzdCByZXEsCisJCQlATnVsbGFibGUgUmVjZWl2ZUNvbW1hbmQgY21kKSB7CisJCWlmIChjbWQgPT0gbnVsbCkgeworCQkJLy8gUmVmIHdhcyBub3QgaW4gdGhlIGNvbW1hbmQgbGlzdCwgZG8gbm90IHRydXN0IGFkdmVydGlzZW1lbnQuCisJCQlyZXR1cm4gbnVsbDsKKworCQl9IGVsc2UgaWYgKGNtZC5nZXRSZXN1bHQoKSA9PSBPSykgeworCQkJLy8gQ3VycmVudGx5IGF0IG5ld0lkLgorCQkJcmV0dXJuIGNtZC5nZXROZXdJZCgpOworCQl9CisKKwkJTWFwPFN0cmluZywgUmVmPiByZWZzID0gcmVxLmdldFJlZnMoKTsKKwkJcmV0dXJuIHJlZnMgIT0gbnVsbCA/IGdldElkKHJlZnMuZ2V0KGNtZC5nZXRSZWZOYW1lKCkpKSA6IG51bGw7CisJfQorCisJLyoqCisJICogRmV0Y2ggb2JqZWN0cyBmcm9tIHRoZSByZW1vdGUgdXNpbmcgdGhlIGNhbGxpbmcgdGhyZWFkLgorCSAqIDxwPgorCSAqIENhbGxlZCB3aXRob3V0IHtAbGluayBLZXRjaExlYWRlciNsb2NrfS4KKwkgKgorCSAqIEBwYXJhbSByZXBvCisJICogICAgICAgICAgICBsb2NhbCByZXBvc2l0b3J5IHRvIGZldGNoIG9iamVjdHMgaW50by4KKwkgKiBAcGFyYW0gcmVxCisJICogICAgICAgICAgICB0aGUgcmVxdWVzdCB0byBmZXRjaCBmcm9tIGEgcmVwbGljYS4KKwkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCisJICogICAgICAgICAgICAgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSByZXBsaWNhIHdhcyBub3QgcG9zc2libGUuCisJICovCisJcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgYmxvY2tpbmdGZXRjaChSZXBvc2l0b3J5IHJlcG8sCisJCQlSZXBsaWNhRmV0Y2hSZXF1ZXN0IHJlcSkgdGhyb3dzIElPRXhjZXB0aW9uOworCisJLyoqCisJICogQnVpbGQgYSBsaXN0IG9mIGNvbW1hbmRzIHRvIGNvbW1pdCB7QGxpbmsgQ29tbWl0TWV0aG9kI0FMTF9SRUZTfS4KKwkgKgorCSAqIEBwYXJhbSBnaXQKKwkgKiAgICAgICAgICAgIGxvY2FsIGxlYWRlciByZXBvc2l0b3J5IHRvIHJlYWQgY29tbWl0dGVkIHN0YXRlIGZyb20uCisJICogQHBhcmFtIGN1cnJlbnQKKwkgKiAgICAgICAgICAgIGFsbCBrbm93biByZWZlcmVuY2VzIGluIHRoZSByZXBsaWNhJ3MgcmVwb3NpdG9yeS4gVHlwaWNhbGx5CisJICogICAgICAgICAgICB0aGlzIGNvbWVzIGZyb20gYSBwdXNoIGFkdmVydGlzZW1lbnQuCisJICogQHBhcmFtIGNvbW1pdHRlZAorCSAqICAgICAgICAgICAgc3RhdGUgYmVpbmcgcHVzaGVkIHRvIHtAY29kZSByZWZzL3R4bi9jb21taXR0ZWR9LgorCSAqIEByZXR1cm4gY29tbWFuZHMgdG8gdXBkYXRlIGR1cmluZyBjb21taXQuCisJICogQHRocm93cyBJT0V4Y2VwdGlvbgorCSAqICAgICAgICAgICAgIGNhbm5vdCByZWFkIHRoZSBjb21taXR0ZWQgc3RhdGUuCisJICovCisJcHJvdGVjdGVkIENvbGxlY3Rpb248UmVjZWl2ZUNvbW1hbmQ+IHByZXBhcmVDb21taXQoUmVwb3NpdG9yeSBnaXQsCisJCQlNYXA8U3RyaW5nLCBSZWY+IGN1cnJlbnQsIE9iamVjdElkIGNvbW1pdHRlZCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJTGlzdDxSZWNlaXZlQ29tbWFuZD4gZGVsdGEgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKwkJTWFwPFN0cmluZywgUmVmPiByZW1vdGUgPSBuZXcgSGFzaE1hcDw+KGN1cnJlbnQpOworCQl0cnkgKFJldldhbGsgcncgPSBuZXcgUmV2V2FsayhnaXQpOworCQkJCVRyZWVXYWxrIHR3ID0gbmV3IFRyZWVXYWxrKHJ3LmdldE9iamVjdFJlYWRlcigpKSkgeworCQkJdHcuc2V0UmVjdXJzaXZlKHRydWUpOworCQkJdHcuYWRkVHJlZShydy5wYXJzZUNvbW1pdChjb21taXR0ZWQpLmdldFRyZWUoKSk7CisJCQl3aGlsZSAodHcubmV4dCgpKSB7CisJCQkJaWYgKHR3LmdldFJhd01vZGUoMCkgIT0gVFlQRV9HSVRMSU5LCisJCQkJCQl8fCB0dy5pc1BhdGhTdWZmaXgoUEVFTCwgMikpIHsKKwkJCQkJLy8gU3ltYm9saWMgcmVmZXJlbmNlcyBjYW5ub3QgYmUgcHVzaGVkLgorCQkJCQkvLyBDYWNoaW5nIHBlZWxlZCB2YWx1ZXMgaXMgaGFuZGxlZCByZW1vdGVseS4KKwkJCQkJY29udGludWU7CisJCQkJfQorCisJCQkJLy8gVE9ETyhzb3ApIERvIG5vdCBzZW5kIGNlcnRhaW4gcmVmIG5hbWVzIHRvIHJlcGxpY2EuCisJCQkJU3RyaW5nIG5hbWUgPSBSZWZUcmVlLnJlZk5hbWUodHcuZ2V0UGF0aFN0cmluZygpKTsKKwkJCQlSZWYgb2xkUmVmID0gcmVtb3RlLnJlbW92ZShuYW1lKTsKKwkJCQlPYmplY3RJZCBvbGRJZCA9IGdldElkKG9sZFJlZik7CisJCQkJT2JqZWN0SWQgbmV3SWQgPSB0dy5nZXRPYmplY3RJZCgwKTsKKwkJCQlpZiAoIUFueU9iamVjdElkLmVxdWFscyhvbGRJZCwgbmV3SWQpKSB7CisJCQkJCWRlbHRhLmFkZChuZXcgUmVjZWl2ZUNvbW1hbmQob2xkSWQsIG5ld0lkLCBuYW1lKSk7CisJCQkJfQorCQkJfQorCQl9CisKKwkJLy8gRGVsZXRlIGFueSBleHRyYSByZWZlcmVuY2VzIG5vdCBpbiB0aGUgY29tbWl0dGVkIHN0YXRlLgorCQlmb3IgKFJlZiByZWYgOiByZW1vdGUudmFsdWVzKCkpIHsKKwkJCWlmIChjYW5EZWxldGUocmVmKSkgeworCQkJCWRlbHRhLmFkZChuZXcgUmVjZWl2ZUNvbW1hbmQoCisJCQkJCXJlZi5nZXRPYmplY3RJZCgpLCBPYmplY3RJZC56ZXJvSWQoKSwKKwkJCQkJcmVmLmdldE5hbWUoKSkpOworCQkJfQorCQl9CisJCXJldHVybiBkZWx0YTsKKwl9CisKKwlib29sZWFuIGNhbkRlbGV0ZShSZWYgcmVmKSB7CisJCVN0cmluZyBuYW1lID0gcmVmLmdldE5hbWUoKTsKKwkJaWYgKEhFQUQuZXF1YWxzKG5hbWUpKSB7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwkJaWYgKG5hbWUuc3RhcnRzV2l0aChnZXRTeXN0ZW0oKS5nZXRUeG5OYW1lc3BhY2UoKSkpIHsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCQkvLyBUT0RPKHNvcCkgRG8gbm90IGRlbGV0ZSBwcmVjaW91cyBuYW1lcyBmcm9tIHJlcGxpY2EuCisJCXJldHVybiB0cnVlOworCX0KKworCUBOb25OdWxsCisJc3RhdGljIE9iamVjdElkIGdldElkKEBOdWxsYWJsZSBSZWYgcmVmKSB7CisJCWlmIChyZWYgIT0gbnVsbCkgeworCQkJT2JqZWN0SWQgaWQgPSByZWYuZ2V0T2JqZWN0SWQoKTsKKwkJCWlmIChpZCAhPSBudWxsKSB7CisJCQkJcmV0dXJuIGlkOworCQkJfQorCQl9CisJCXJldHVybiBPYmplY3RJZC56ZXJvSWQoKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL2tldGNoL0tldGNoU3lzdGVtLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL2tldGNoL0tldGNoU3lzdGVtLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFlODcyZQotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwva2V0Y2gvS2V0Y2hTeXN0ZW0uamF2YQpAQCAtMCwwICsxLDMwMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiwgR29vZ2xlIEluYy4KKyAqIGFuZCBvdGhlciBjb3B5cmlnaHQgb3duZXJzIGFzIGRvY3VtZW50ZWQgaW4gdGhlIHByb2plY3QncyBJUCBsb2cuCisgKgorICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2MS4wIHdoaWNoCisgKiBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgaXMgcmVwcm9kdWNlZCBiZWxvdywgYW5kIGlzCisgKiBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VkbC12MTAucGhwCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgSW5jLiBub3IgdGhlCisgKiAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCisgKiAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3IKKyAqICAgd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORAorICogQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKyAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGCisgKiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitwYWNrYWdlIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwua2V0Y2g7CisKK2ltcG9ydCBzdGF0aWMgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5rZXRjaC5LZXRjaENvbnN0YW50cy5BQ0NFUFRFRDsKK2ltcG9ydCBzdGF0aWMgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5rZXRjaC5LZXRjaENvbnN0YW50cy5DT01NSVRURUQ7CitpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwua2V0Y2guS2V0Y2hDb25zdGFudHMuQ09ORklHX0tFWV9UWVBFOworaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLmtldGNoLktldGNoQ29uc3RhbnRzLkNPTkZJR19TRUNUSU9OX0tFVENIOworaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLmtldGNoLktldGNoQ29uc3RhbnRzLkRFRkFVTFRfVFhOX05BTUVTUEFDRTsKK2ltcG9ydCBzdGF0aWMgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5rZXRjaC5LZXRjaENvbnN0YW50cy5TVEFHRTsKK2ltcG9ydCBzdGF0aWMgb3JnLmVjbGlwc2UuamdpdC5saWIuQ29uZmlnQ29uc3RhbnRzLkNPTkZJR19LRVlfTkFNRTsKK2ltcG9ydCBzdGF0aWMgb3JnLmVjbGlwc2UuamdpdC5saWIuQ29uZmlnQ29uc3RhbnRzLkNPTkZJR19LRVlfUkVNT1RFOworCitpbXBvcnQgamF2YS5uZXQuVVJJU3ludGF4RXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLlJhbmRvbTsKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnM7CitpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuU2NoZWR1bGVkRXhlY3V0b3JTZXJ2aWNlOworaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LlRocmVhZEZhY3Rvcnk7CitpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuYXRvbWljLkF0b21pY0ludGVnZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmFubm90YXRpb25zLk51bGxhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLkNvbmZpZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5QZXJzb25JZGVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5SZXBvc2l0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LlJlbW90ZUNvbmZpZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5VUklpc2g7CitpbXBvcnQgb3JnLnNsZjRqLkxvZ2dlcjsKK2ltcG9ydCBvcmcuc2xmNGouTG9nZ2VyRmFjdG9yeTsKKworLyoqCisgKiBLZXRjaCBzeXN0ZW0td2lkZSBjb25maWd1cmF0aW9uLgorICogPHA+CisgKiBUaGlzIGNsYXNzIHByb3ZpZGVzIHVzZWZ1bCBkZWZhdWx0cyBmb3IgdGVzdGluZyBhbmQgc21hbGwgcHJvb2Ygb2YgY29uY2VwdHMuCisgKiBGdWxsIHNjYWxlIGluc3RhbGxhdGlvbnMgYXJlIGV4cGVjdGVkIHRvIHN1YmNsYXNzIGFuZCBvdmVycmlkZSBtZXRob2RzIHRvCisgKiBwcm92aWRlIGNvbnNpc3RlbnQgY29uZmlndXJhdGlvbiBhY3Jvc3MgYWxsIG1hbmFnZWQgcmVwb3NpdG9yaWVzLgorICogPHA+CisgKiBTZXJ2ZXJzIHNob3VsZCBjb25maWd1cmUgdGhlaXIgb3duIHtAbGluayBTY2hlZHVsZWRFeGVjdXRvclNlcnZpY2V9LgorICovCitwdWJsaWMgY2xhc3MgS2V0Y2hTeXN0ZW0geworCXByaXZhdGUgc3RhdGljIGZpbmFsIFJhbmRvbSBSTkcgPSBuZXcgUmFuZG9tKCk7CisKKwkvKiogQHJldHVybiBkZWZhdWx0IGV4ZWN1dG9yLCBvbmUgdGhyZWFkIHBlciBhdmFpbGFibGUgcHJvY2Vzc29yLiAqLworCXB1YmxpYyBzdGF0aWMgU2NoZWR1bGVkRXhlY3V0b3JTZXJ2aWNlIGRlZmF1bHRFeGVjdXRvcigpIHsKKwkJcmV0dXJuIERlZmF1bHRFeGVjdXRvckhvbGRlci5JOworCX0KKworCXByaXZhdGUgZmluYWwgU2NoZWR1bGVkRXhlY3V0b3JTZXJ2aWNlIGV4ZWN1dG9yOworCXByaXZhdGUgZmluYWwgU3RyaW5nIHR4bk5hbWVzcGFjZTsKKwlwcml2YXRlIGZpbmFsIFN0cmluZyB0eG5BY2NlcHRlZDsKKwlwcml2YXRlIGZpbmFsIFN0cmluZyB0eG5Db21taXR0ZWQ7CisJcHJpdmF0ZSBmaW5hbCBTdHJpbmcgdHhuU3RhZ2U7CisKKwkvKiogQ3JlYXRlIGEgZGVmYXVsdCBzeXN0ZW0gd2l0aCBhIHRocmVhZCBwb29sIG9mIDEgdGhyZWFkIHBlciBDUFUuICovCisJcHVibGljIEtldGNoU3lzdGVtKCkgeworCQl0aGlzKGRlZmF1bHRFeGVjdXRvcigpLCBERUZBVUxUX1RYTl9OQU1FU1BBQ0UpOworCX0KKworCS8qKgorCSAqIENyZWF0ZSBhIEtldGNoIHN5c3RlbSB3aXRoIHRoZSBwcm92aWRlZCBleGVjdXRvciBzZXJ2aWNlLgorCSAqCisJICogQHBhcmFtIGV4ZWN1dG9yCisJICogICAgICAgICAgICB0aHJlYWQgcG9vbCB0byBydW4gYmFja2dyb3VuZCBvcGVyYXRpb25zLgorCSAqIEBwYXJhbSB0eG5OYW1lc3BhY2UKKwkgKiAgICAgICAgICAgIHJlZmVyZW5jZSBuYW1lc3BhY2UgZm9yIHRoZSBSZWZUcmVlIGdyYXBoIGFuZCBhc3NvY2lhdGVkCisJICogICAgICAgICAgICB0cmFuc2FjdGlvbiBzdGF0ZS4gTXVzdCBiZWdpbiB3aXRoIHtAY29kZSAicmVmcy8ifSBhbmQgZW5kCisJICogICAgICAgICAgICB3aXRoIHtAY29kZSAnLyd9LCBmb3IgZXhhbXBsZSB7QGNvZGUgInJlZnMvdHhuLyJ9LgorCSAqLworCXB1YmxpYyBLZXRjaFN5c3RlbShTY2hlZHVsZWRFeGVjdXRvclNlcnZpY2UgZXhlY3V0b3IsIFN0cmluZyB0eG5OYW1lc3BhY2UpIHsKKwkJdGhpcy5leGVjdXRvciA9IGV4ZWN1dG9yOworCQl0aGlzLnR4bk5hbWVzcGFjZSA9IHR4bk5hbWVzcGFjZTsKKwkJdGhpcy50eG5BY2NlcHRlZCA9IHR4bk5hbWVzcGFjZSArIEFDQ0VQVEVEOworCQl0aGlzLnR4bkNvbW1pdHRlZCA9IHR4bk5hbWVzcGFjZSArIENPTU1JVFRFRDsKKwkJdGhpcy50eG5TdGFnZSA9IHR4bk5hbWVzcGFjZSArIFNUQUdFOworCX0KKworCS8qKiBAcmV0dXJuIGV4ZWN1dG9yIHRvIHBlcmZvcm0gYmFja2dyb3VuZCBvcGVyYXRpb25zLiAqLworCXB1YmxpYyBTY2hlZHVsZWRFeGVjdXRvclNlcnZpY2UgZ2V0RXhlY3V0b3IoKSB7CisJCXJldHVybiBleGVjdXRvcjsKKwl9CisKKwkvKioKKwkgKiBHZXQgdGhlIG5hbWVzcGFjZSB1c2VkIGZvciB0aGUgUmVmVHJlZSBncmFwaCBhbmQgdHJhbnNhY3Rpb24gbWFuYWdlbWVudC4KKwkgKgorCSAqIEByZXR1cm4gcmVmZXJlbmNlIG5hbWVzcGFjZSBzdWNoIGFzIHtAY29kZSAicmVmcy90eG4vIn0uCisJICovCisJcHVibGljIFN0cmluZyBnZXRUeG5OYW1lc3BhY2UoKSB7CisJCXJldHVybiB0eG5OYW1lc3BhY2U7CisJfQorCisJLyoqIEByZXR1cm4gbmFtZSBvZiB0aGUgYWNjZXB0ZWQgUmVmVHJlZSBncmFwaC4gKi8KKwlwdWJsaWMgU3RyaW5nIGdldFR4bkFjY2VwdGVkKCkgeworCQlyZXR1cm4gdHhuQWNjZXB0ZWQ7CisJfQorCisJLyoqIEByZXR1cm4gbmFtZSBvZiB0aGUgY29tbWl0dGVkIFJlZlRyZWUgZ3JhcGguICovCisJcHVibGljIFN0cmluZyBnZXRUeG5Db21taXR0ZWQoKSB7CisJCXJldHVybiB0eG5Db21taXR0ZWQ7CisJfQorCisJLyoqIEByZXR1cm4gcHJlZml4IGZvciBzdGFnZWQgb2JqZWN0cywgZS5nLiB7QGNvZGUgInJlZnMvdHhuL3N0YWdlLyJ9LiAqLworCXB1YmxpYyBTdHJpbmcgZ2V0VHhuU3RhZ2UoKSB7CisJCXJldHVybiB0eG5TdGFnZTsKKwl9CisKKwkvKiogQHJldHVybiBpZGVudGl0eSBsaW5lIGZvciB0aGUgY29tbWl0dGVyIGhlYWRlciBvZiBhIFJlZlRyZWVHcmFwaC4gKi8KKwlwdWJsaWMgUGVyc29uSWRlbnQgbmV3Q29tbWl0dGVyKCkgeworCQlTdHJpbmcgbmFtZSA9ICJrZXRjaCI7IC8vJE5PTi1OTFMtMSQKKwkJU3RyaW5nIGVtYWlsID0gImtldGNoQHN5c3RlbSI7IC8vJE5PTi1OTFMtMSQKKwkJcmV0dXJuIG5ldyBQZXJzb25JZGVudChuYW1lLCBlbWFpbCk7CisJfQorCisJLyoqCisJICogQ29uc3RydWN0IGEgcmFuZG9tIHRhZyB0byBpZGVudGlmeSBhIGNhbmRpZGF0ZSBkdXJpbmcgbGVhZGVyIGVsZWN0aW9uLgorCSAqIDxwPgorCSAqIE11bHRpcGxlIHByb2Nlc3NlcyB0cnlpbmcgdG8gZWxlY3QgdGhlbXNlbHZlcyBsZWFkZXJzIGF0IGV4YWN0bHkgdGhlIHNhbWUKKwkgKiB0aW1lIChyb3VuZGVkIHRvIHNlY29uZHMpIHVzaW5nIHRoZSBzYW1lIHtAbGluayAjbmV3Q29tbWl0dGVyKCl9IGlkZW50aXR5CisJICogc3RyaW5ncywgZm9yIHRoZSBzYW1lIHRlcm0sIG1heSBnZW5lcmF0ZSB0aGUgc2FtZSBPYmplY3RJZCBmb3IgdGhlCisJICogZWxlY3Rpb24gY29tbWl0IGFuZCBmYWxzZWx5IGFzc3VtZSB0aGV5IGhhdmUgYm90aCB3b24uCisJICogPHA+CisJICogQ2FuZGlkYXRlcyBhZGQgdGhpcyB0YWcgdG8gdGhlaXIgZWxlY3Rpb24gYmFsbG90IGNvbW1pdCB0byBkaXNhbWJpZ3VhdGUKKwkgKiB0aGUgZWxlY3Rpb24uIFRoZSB0YWcgb25seSBuZWVkcyB0byBiZSB1bmlxdWUgZm9yIGEgZ2l2ZW4gdHJpcGxldCBvZgorCSAqIHtAbGluayAjbmV3Q29tbWl0dGVyKCl9LCBzeXN0ZW0gdGltZSAocm91bmRlZCB0byBzZWNvbmRzKSwgYW5kIHRlcm0uIElmCisJICogZXZlcnkgcmVwbGljYSBpbiB0aGUgc3lzdGVtIHVzZXMgYSB1bmlxdWUge0Bjb2RlIG5ld0NvbW1pdHRlcn0gKHN1Y2ggYXMKKwkgKiBpbmNsdWRpbmcgdGhlIGhvc3QgbmFtZSBhZnRlciB0aGUge0Bjb2RlICJAIn0gaW4gdGhlIGVtYWlsIGFkZHJlc3MpIHRoZQorCSAqIHRhZyBjb3VsZCBiZSB0aGUgZW1wdHkgc3RyaW5nLgorCSAqIDxwPgorCSAqIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGdlbmVyYXRlcyBhIGZldyBieXRlcyBvZiByYW5kb20gZGF0YS4KKwkgKgorCSAqIEByZXR1cm4gdW5pcXVlIHRhZzsgbnVsbCBvciBlbXB0eSBzdHJpbmcgaWYge0Bjb2RlIG5ld0NvbW1pdHRlcigpfSBpcworCSAqICAgICAgICAgc3VmZmljaWVudGx5IHVuaXF1ZSB0byBpZGVudGlmeSB0aGUgbGVhZGVyLgorCSAqLworCUBOdWxsYWJsZQorCXB1YmxpYyBTdHJpbmcgbmV3TGVhZGVyVGFnKCkgeworCQlpbnQgbiA9IFJORy5uZXh0SW50KDEgPDwgKDYgKiA0KSk7CisJCXJldHVybiBTdHJpbmcuZm9ybWF0KCIlMDZ4IiwgSW50ZWdlci52YWx1ZU9mKG4pKTsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIENvbnN0cnVjdCB0aGUgS2V0Y2hMZWFkZXIgaW5zdGFuY2Ugb2YgYSByZXBvc2l0b3J5LgorCSAqCisJICogQHBhcmFtIHJlcG8KKwkgKiAgICAgICAgICAgIGxvY2FsIHJlcG9zaXRvcnkgc3RvcmVkIGJ5IHRoZSBsZWFkZXIuCisJICogQHJldHVybiBsZWFkZXIgaW5zdGFuY2UuCisJICogQHRocm93cyBVUklTeW50YXhFeGNlcHRpb24KKwkgKiAgICAgICAgICAgICBhIGZvbGxvd2VyIGNvbmZpZ3VyYXRpb24gY29udGFpbnMgYW4gdW5zdXBwb3J0ZWQgVVJJLgorCSAqLworCXB1YmxpYyBLZXRjaExlYWRlciBjcmVhdGVMZWFkZXIoZmluYWwgUmVwb3NpdG9yeSByZXBvKQorCQkJdGhyb3dzIFVSSVN5bnRheEV4Y2VwdGlvbiB7CisJCUtldGNoTGVhZGVyIGxlYWRlciA9IG5ldyBLZXRjaExlYWRlcih0aGlzKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXByb3RlY3RlZCBSZXBvc2l0b3J5IG9wZW5SZXBvc2l0b3J5KCkgeworCQkJCXJlcG8uaW5jcmVtZW50T3BlbigpOworCQkJCXJldHVybiByZXBvOworCQkJfQorCQl9OworCQlsZWFkZXIuc2V0UmVwbGljYXMoY3JlYXRlUmVwbGljYXMobGVhZGVyLCByZXBvKSk7CisJCXJldHVybiBsZWFkZXI7CisJfQorCisJLyoqCisJICogR2V0IHRoZSBjb2xsZWN0aW9uIG9mIHJlcGxpY2FzIGZvciBhIHJlcG9zaXRvcnkuCisJICogPHA+CisJICogVGhlIGNvbGxlY3Rpb24gb2YgcmVwbGljYXMgbXVzdCBpbmNsdWRlIHRoZSBsb2NhbCByZXBvc2l0b3J5LgorCSAqCisJICogQHBhcmFtIGxlYWRlcgorCSAqICAgICAgICAgICAgdGhlIGxlYWRlciBkcml2aW5nIHRoZXNlIHJlcGxpY2FzLgorCSAqIEBwYXJhbSByZXBvCisJICogICAgICAgICAgICByZXBvc2l0b3J5IHRvIGdldCB0aGUgcmVwbGljYXMgb2YuCisJICogQHJldHVybiBjb2xsZWN0aW9uIG9mIHJlcGxpY2FzIGZvciB0aGUgc3BlY2lmaWVkIHJlcG9zaXRvcnkuCisJICogQHRocm93cyBVUklTeW50YXhFeGNlcHRpb24KKwkgKiAgICAgICAgICAgICBhIGNvbmZpZ3VyZWQgVVJJIGlzIGludmFsaWQuCisJICovCisJcHJvdGVjdGVkIExpc3Q8S2V0Y2hSZXBsaWNhPiBjcmVhdGVSZXBsaWNhcyhLZXRjaExlYWRlciBsZWFkZXIsCisJCQlSZXBvc2l0b3J5IHJlcG8pIHRocm93cyBVUklTeW50YXhFeGNlcHRpb24geworCQlMaXN0PEtldGNoUmVwbGljYT4gcmVwbGljYXMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKwkJQ29uZmlnIGNmZyA9IHJlcG8uZ2V0Q29uZmlnKCk7CisJCVN0cmluZyBsb2NhbE5hbWUgPSBnZXRMb2NhbE5hbWUoY2ZnKTsKKwkJZm9yIChTdHJpbmcgbmFtZSA6IGNmZy5nZXRTdWJzZWN0aW9ucyhDT05GSUdfS0VZX1JFTU9URSkpIHsKKwkJCWlmICghaGFzUGFydGljaXBhdGlvbihjZmcsIG5hbWUpKSB7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCVJlcGxpY2FDb25maWcga2MgPSBSZXBsaWNhQ29uZmlnLm5ld0Zyb21Db25maWcoY2ZnLCBuYW1lKTsKKwkJCWlmIChuYW1lLmVxdWFscyhsb2NhbE5hbWUpKSB7CisJCQkJcmVwbGljYXMuYWRkKG5ldyBMb2NhbFJlcGxpY2EobGVhZGVyLCBuYW1lLCBrYykpOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlSZW1vdGVDb25maWcgcmMgPSBuZXcgUmVtb3RlQ29uZmlnKGNmZywgbmFtZSk7CisJCQlMaXN0PFVSSWlzaD4gdXJpcyA9IHJjLmdldFB1c2hVUklzKCk7CisJCQlpZiAodXJpcy5pc0VtcHR5KCkpIHsKKwkJCQl1cmlzID0gcmMuZ2V0VVJJcygpOworCQkJfQorCQkJZm9yIChVUklpc2ggdXJpIDogdXJpcykgeworCQkJCVN0cmluZyBuID0gdXJpcy5zaXplKCkgPT0gMSA/IG5hbWUgOiB1cmkuZ2V0SG9zdCgpOworCQkJCXJlcGxpY2FzLmFkZChuZXcgUmVtb3RlR2l0UmVwbGljYShsZWFkZXIsIG4sIHVyaSwga2MsIHJjKSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIHJlcGxpY2FzOworCX0KKworCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gaGFzUGFydGljaXBhdGlvbihDb25maWcgY2ZnLCBTdHJpbmcgbmFtZSkgeworCQlyZXR1cm4gY2ZnLmdldFN0cmluZyhDT05GSUdfS0VZX1JFTU9URSwgbmFtZSwgQ09ORklHX0tFWV9UWVBFKSAhPSBudWxsOworCX0KKworCXByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRMb2NhbE5hbWUoQ29uZmlnIGNmZykgeworCQlyZXR1cm4gY2ZnLmdldFN0cmluZyhDT05GSUdfU0VDVElPTl9LRVRDSCwgbnVsbCwgQ09ORklHX0tFWV9OQU1FKTsKKwl9CisKKwlzdGF0aWMgY2xhc3MgRGVmYXVsdEV4ZWN1dG9ySG9sZGVyIHsKKwkJcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZyA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKEtldGNoU3lzdGVtLmNsYXNzKTsKKwkJc3RhdGljIGZpbmFsIFNjaGVkdWxlZEV4ZWN1dG9yU2VydmljZSBJID0gY3JlYXRlKCk7CisKKwkJcHJpdmF0ZSBzdGF0aWMgU2NoZWR1bGVkRXhlY3V0b3JTZXJ2aWNlIGNyZWF0ZSgpIHsKKwkJCWludCBjb3JlcyA9IFJ1bnRpbWUuZ2V0UnVudGltZSgpLmF2YWlsYWJsZVByb2Nlc3NvcnMoKTsKKwkJCWludCB0aHJlYWRzID0gTWF0aC5tYXgoNSwgY29yZXMpOworCQkJbG9nLmluZm8oIlVzaW5nIHt9IHRocmVhZHMiLCBJbnRlZ2VyLnZhbHVlT2YodGhyZWFkcykpOyAvLyROT04tTkxTLTEkCisJCQlyZXR1cm4gRXhlY3V0b3JzLm5ld1NjaGVkdWxlZFRocmVhZFBvb2woCisJCQkJdGhyZWFkcywKKwkJCQluZXcgVGhyZWFkRmFjdG9yeSgpIHsKKwkJCQkJcHJpdmF0ZSBmaW5hbCBBdG9taWNJbnRlZ2VyIHRocmVhZENudCA9IG5ldyBBdG9taWNJbnRlZ2VyKCk7CisKKwkJCQkJQE92ZXJyaWRlCisJCQkJCXB1YmxpYyBUaHJlYWQgbmV3VGhyZWFkKFJ1bm5hYmxlIHIpIHsKKwkJCQkJCWludCBpZCA9IHRocmVhZENudC5pbmNyZW1lbnRBbmRHZXQoKTsKKwkJCQkJCVRocmVhZCB0aHIgPSBuZXcgVGhyZWFkKHIpOworCQkJCQkJdGhyLnNldE5hbWUoIktldGNoRXhlY3V0b3ItIiArIGlkKTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJcmV0dXJuIHRocjsKKwkJCQkJfQorCQkJCX0pOworCQl9CisKKwkJcHJpdmF0ZSBEZWZhdWx0RXhlY3V0b3JIb2xkZXIoKSB7CisJCX0KKwl9CisKKwkvKioKKwkgKiBDb21wdXRlIGEgZGVsYXkgaW4gYSB7QGNvZGUgbWluLi5tYXh9IGludGVydmFsIHdpdGggcmFuZG9tIGppdHRlci4KKwkgKgorCSAqIEBwYXJhbSBsYXN0CisJICogICAgICAgICAgICBhbW91bnQgb2YgZGVsYXkgd2FpdGVkIGJlZm9yZSB0aGUgbGFzdCBhdHRlbXB0LiBUaGlzIGlzIHVzZWQKKwkgKiAgICAgICAgICAgIHRvIHNlZWQgdGhlIG5leHQgZGVsYXkgaW50ZXJ2YWwuIFNob3VsZCBiZSAwIGlmIHRoZXJlIHdhcyBubworCSAqICAgICAgICAgICAgcHJpb3IgZGVsYXkuCisJICogQHBhcmFtIG1pbgorCSAqICAgICAgICAgICAgc2hvcnRlc3QgYW1vdW50IG9mIGFsbG93YWJsZSBkZWxheSBiZXR3ZWVuIGF0dGVtcHRzLgorCSAqIEBwYXJhbSBtYXgKKwkgKiAgICAgICAgICAgIGxvbmdlc3QgYW1vdW50IG9mIGFsbG93YWJsZSBkZWxheSBiZXR3ZWVuIGF0dGVtcHRzLgorCSAqIEByZXR1cm4gbmV3IGFtb3VudCBvZiBkZWxheSB0byB3YWl0IGJlZm9yZSB0aGUgbmV4dCBhdHRlbXB0LgorCSAqLworCXN0YXRpYyBsb25nIGRlbGF5KGxvbmcgbGFzdCwgbG9uZyBtaW4sIGxvbmcgbWF4KSB7CisJCWxvbmcgciA9IE1hdGgubWF4KDAsIGxhc3QgKiAzIC0gbWluKTsKKwkJaWYgKHIgPiAwKSB7CisJCQlpbnQgYyA9IChpbnQpIE1hdGgubWluKHIgKyAxLCBJbnRlZ2VyLk1BWF9WQUxVRSk7CisJCQlyID0gUk5HLm5leHRJbnQoYyk7CisJCX0KKwkJcmV0dXJuIE1hdGgubWF4KE1hdGgubWluKG1pbiArIHIsIG1heCksIG1pbik7CisJfQorfQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9rZXRjaC9LZXRjaFRleHQuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwva2V0Y2gvS2V0Y2hUZXh0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjZjM2JjOQotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwva2V0Y2gvS2V0Y2hUZXh0LmphdmEKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiwgR29vZ2xlIEluYy4KKyAqIGFuZCBvdGhlciBjb3B5cmlnaHQgb3duZXJzIGFzIGRvY3VtZW50ZWQgaW4gdGhlIHByb2plY3QncyBJUCBsb2cuCisgKgorICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2MS4wIHdoaWNoCisgKiBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgaXMgcmVwcm9kdWNlZCBiZWxvdywgYW5kIGlzCisgKiBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VkbC12MTAucGhwCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgSW5jLiBub3IgdGhlCisgKiAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCisgKiAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3IKKyAqICAgd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORAorICogQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKyAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGCisgKiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitwYWNrYWdlIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwua2V0Y2g7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0Lm5scy5OTFM7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5ubHMuVHJhbnNsYXRpb25CdW5kbGU7CisKKy8qKiBUcmFuc2xhdGlvbiBidW5kbGUgZm9yIHRoZSBLZXRjaCBpbXBsZW1lbnRhdGlvbi4gKi8KK3B1YmxpYyBjbGFzcyBLZXRjaFRleHQgZXh0ZW5kcyBUcmFuc2xhdGlvbkJ1bmRsZSB7CisJLyoqIEByZXR1cm4gaW5zdGFuY2Ugb2YgdGhpcyB0cmFuc2xhdGlvbiBidW5kbGUuICovCisJcHVibGljIHN0YXRpYyBLZXRjaFRleHQgZ2V0KCkgeworCQlyZXR1cm4gTkxTLmdldEJ1bmRsZUZvcihLZXRjaFRleHQuY2xhc3MpOworCX0KKworCS8vIEBmb3JtYXR0ZXI6b2ZmCisJLyoqKi8gcHVibGljIFN0cmluZyBhY2NlcHRlZDsKKwkvKioqLyBwdWJsaWMgU3RyaW5nIGNhbm5vdEZldGNoRnJvbUxvY2FsUmVwbGljYTsKKwkvKioqLyBwdWJsaWMgU3RyaW5nIGZhaWxlZDsKKwkvKioqLyBwdWJsaWMgU3RyaW5nIGludmFsaWRGb2xsb3dlclVyaTsKKwkvKioqLyBwdWJsaWMgU3RyaW5nIGxlYWRlckZhaWxlZFRvU3RvcmU7CisJLyoqKi8gcHVibGljIFN0cmluZyBsb2NhbFJlcGxpY2FSZXF1aXJlZDsKKwkvKioqLyBwdWJsaWMgU3RyaW5nIG1pc21hdGNoZWRUeG5OYW1lc3BhY2U7CisJLyoqKi8gcHVibGljIFN0cmluZyBvdXRzaWRlVHhuTmFtZXNwYWNlOworCS8qKiovIHB1YmxpYyBTdHJpbmcgcHJvcG9zaW5nVXBkYXRlczsKKwkvKioqLyBwdWJsaWMgU3RyaW5nIHF1ZXVlZFByb3Bvc2FsRmFpbGVkVG9BcHBseTsKKwkvKioqLyBwdWJsaWMgU3RyaW5nIHN0YXJ0aW5nOworCS8qKiovIHB1YmxpYyBTdHJpbmcgdW5zdXBwb3J0ZWRWb3RlckNvdW50OworCS8qKiovIHB1YmxpYyBTdHJpbmcgd2FpdGluZ0ZvclF1ZXVlOworfQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9rZXRjaC9MYWdDaGVjay5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9rZXRjaC9MYWdDaGVjay5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1MzI3ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL2tldGNoL0xhZ0NoZWNrLmphdmEKQEAgLTAsMCArMSwxODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYsIEdvb2dsZSBJbmMuCisgKiBhbmQgb3RoZXIgY29weXJpZ2h0IG93bmVycyBhcyBkb2N1bWVudGVkIGluIHRoZSBwcm9qZWN0J3MgSVAgbG9nLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlCisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgRGlzdHJpYnV0aW9uIExpY2Vuc2UgdjEuMCB3aGljaAorICogYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGlzIHJlcHJvZHVjZWQgYmVsb3csIGFuZCBpcworICogYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lZGwtdjEwLnBocAorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIEluYy4gbm9yIHRoZQorICogICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorICogICBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCisgKiAgIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQKKyAqIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCisgKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRgorICogQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworcGFja2FnZSBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLmtldGNoOworCitpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwua2V0Y2guS2V0Y2hSZXBsaWNhLlN0YXRlLkFIRUFEOworaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLmtldGNoLktldGNoUmVwbGljYS5TdGF0ZS5ESVZFUkdFTlQ7CitpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwua2V0Y2guS2V0Y2hSZXBsaWNhLlN0YXRlLkxBR0dJTkc7CitpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwua2V0Y2guS2V0Y2hSZXBsaWNhLlN0YXRlLlVOS05PV047CitpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQubGliLkNvbnN0YW50cy5PQkpfQ09NTUlUOworCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuZXJyb3JzLk1pc3NpbmdPYmplY3RFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuQW55T2JqZWN0SWQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuT2JqZWN0SWQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuUmVmOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLlJlcG9zaXRvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrLlJldkNvbW1pdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGsuUmV2V2FsazsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5SZWNlaXZlQ29tbWFuZDsKKworLyoqCisgKiBBIGhlbHBlciB0byBjaGVjayBpZiBhIHtAbGluayBLZXRjaFJlcGxpY2F9IGlzIGFoZWFkIG9yIGJlaGluZCB0aGUgbGVhZGVyLgorICovCitjbGFzcyBMYWdDaGVjayBpbXBsZW1lbnRzIEF1dG9DbG9zZWFibGUgeworCXByaXZhdGUgZmluYWwgS2V0Y2hSZXBsaWNhIHJlcGxpY2E7CisJcHJpdmF0ZSBmaW5hbCBSZXBvc2l0b3J5IHJlcG87CisJcHJpdmF0ZSBSZXZXYWxrIHJ3OworCXByaXZhdGUgT2JqZWN0SWQgcmVtb3RlSWQ7CisKKwlMYWdDaGVjayhLZXRjaFJlcGxpY2EgcmVwbGljYSwgUmVwb3NpdG9yeSByZXBvKSB7CisJCXRoaXMucmVwbGljYSA9IHJlcGxpY2E7CisJCXRoaXMucmVwbyA9IHJlcG87CisJCWluaXRSZXZXYWxrKCk7CisJfQorCisJcHJpdmF0ZSB2b2lkIGluaXRSZXZXYWxrKCkgeworCQlpZiAocncgIT0gbnVsbCkgeworCQkJcncuY2xvc2UoKTsKKwkJfQorCisJCXJ3ID0gbmV3IFJldldhbGsocmVwbyk7CisJCXJ3LnNldFJldGFpbkJvZHkoZmFsc2UpOworCX0KKworCXB1YmxpYyB2b2lkIGNsb3NlKCkgeworCQlpZiAocncgIT0gbnVsbCkgeworCQkJcncuY2xvc2UoKTsKKwkJCXJ3ID0gbnVsbDsKKwkJfQorCX0KKworCU9iamVjdElkIGdldFJlbW90ZUlkKCkgeworCQlyZXR1cm4gcmVtb3RlSWQ7CisJfQorCisJS2V0Y2hSZXBsaWNhLlN0YXRlIGNoZWNrKE9iamVjdElkIGFjY2VwdElkLCBSZWNlaXZlQ29tbWFuZCBhY2NlcHRDbWQpIHsKKwkJcmVtb3RlSWQgPSBhY2NlcHRJZDsKKwkJaWYgKHJlbW90ZUlkID09IG51bGwpIHsKKwkJCS8vIE5vdGhpbmcgYWR2ZXJ0aXNlZCBieSB0aGUgcmVwbGljYSwgdmFsdWUgaXMgdW5rbm93bi4KKwkJCXJldHVybiBVTktOT1dOOworCQl9CisKKwkJaWYgKEFueU9iamVjdElkLmVxdWFscyhyZW1vdGVJZCwgT2JqZWN0SWQuemVyb0lkKCkpKSB7CisJCQkvLyBSZXBsaWNhIGRvZXMgbm90IGhhdmUgdGhlIHR4bkFjY2VwdGVkIHJlZmVyZW5jZS4KKwkJCXJldHVybiBMQUdHSU5HOworCQl9CisKKwkJdHJ5IHsKKwkJCVJldkNvbW1pdCByZW1vdGU7CisJCQl0cnkgeworCQkJCXJlbW90ZSA9IHBhcnNlUmVtb3RlQ29tbWl0KGFjY2VwdENtZC5nZXRSZWZOYW1lKCkpOworCQkJfSBjYXRjaCAoUmVmR29uZUV4Y2VwdGlvbiBnb25lKSB7CisJCQkJLy8gUmVwbGljYSBkb2VzIG5vdCBoYXZlIHRoZSB0eG5BY2NlcHRlZCByZWZlcmVuY2UuCisJCQkJcmV0dXJuIExBR0dJTkc7CisJCQl9IGNhdGNoIChNaXNzaW5nT2JqZWN0RXhjZXB0aW9uIG5vdEZvdW5kKSB7CisJCQkJLy8gTG9jYWwgcmVwb3NpdG9yeSBkb2VzIG5vdCBrbm93IHRoaXMgY29tbWl0IHNvIGl0IGNhbm5vdAorCQkJCS8vIGJlIGluY2x1ZGluZyB0aGUgcmVwbGljYSdzIGxvZy4KKwkJCQlyZXR1cm4gRElWRVJHRU5UOworCQkJfQorCisJCQlSZXZDb21taXQgaGVhZCA9IHJ3LnBhcnNlQ29tbWl0KGFjY2VwdENtZC5nZXROZXdJZCgpKTsKKwkJCWlmIChydy5pc01lcmdlZEludG8ocmVtb3RlLCBoZWFkKSkgeworCQkJCXJldHVybiBMQUdHSU5HOworCQkJfQorCisJCQkvLyBUT0RPKHNvcCkgQ2hlY2sgdGVybSB0byBzZWUgaWYgbXkgbGVhZGVyIHdhcyBkZXBvc2VkLgorCQkJaWYgKHJ3LmlzTWVyZ2VkSW50byhoZWFkLCByZW1vdGUpKSB7CisJCQkJcmV0dXJuIEFIRUFEOworCQkJfSBlbHNlIHsKKwkJCQlyZXR1cm4gRElWRVJHRU5UOworCQkJfQorCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlcnIpIHsKKwkJCUtldGNoUmVwbGljYS5sb2cuZXJyb3IoU3RyaW5nLmZvcm1hdCgKKwkJCQkJIkNhbm5vdCBjb21wYXJlICVzIiwgLy8kTk9OLU5MUy0xJAorCQkJCQlhY2NlcHRDbWQuZ2V0UmVmTmFtZSgpKSwgZXJyKTsKKwkJCXJldHVybiBVTktOT1dOOworCQl9CisJfQorCisJcHJpdmF0ZSBSZXZDb21taXQgcGFyc2VSZW1vdGVDb21taXQoU3RyaW5nIHJlZk5hbWUpCisJCQl0aHJvd3MgSU9FeGNlcHRpb24sIE1pc3NpbmdPYmplY3RFeGNlcHRpb24sIFJlZkdvbmVFeGNlcHRpb24geworCQl0cnkgeworCQkJcmV0dXJuIHJ3LnBhcnNlQ29tbWl0KHJlbW90ZUlkKTsKKwkJfSBjYXRjaCAoTWlzc2luZ09iamVjdEV4Y2VwdGlvbiBub3RMb2NhbCkgeworCQkJLy8gRmFsbCB0aHJvdWdoIGFuZCB0cnkgdG8gYWNxdWlyZSB0aGUgb2JqZWN0IGJ5IGZldGNoaW5nIGl0LgorCQl9CisKKwkJUmVwbGljYUZldGNoUmVxdWVzdCBmZXRjaCA9IG5ldyBSZXBsaWNhRmV0Y2hSZXF1ZXN0KAorCQkJCUNvbGxlY3Rpb25zLnNpbmdsZXRvbihyZWZOYW1lKSwKKwkJCQlDb2xsZWN0aW9ucy48T2JqZWN0SWQ+IGVtcHR5U2V0KCkpOworCQl0cnkgeworCQkJcmVwbGljYS5ibG9ja2luZ0ZldGNoKHJlcG8sIGZldGNoKTsKKwkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZmV0Y2hFcnIpIHsKKwkJCUtldGNoUmVwbGljYS5sb2cuZXJyb3IoU3RyaW5nLmZvcm1hdCgKKwkJCQkJIkNhbm5vdCBmZXRjaCAlcyAoJXMpIGZyb20gJXMiLCAvLyROT04tTkxTLTEkCisJCQkJCXJlbW90ZUlkLmFiYnJldmlhdGUoOCkubmFtZSgpLCByZWZOYW1lLAorCQkJCQlyZXBsaWNhLmRlc2NyaWJlRm9yTG9nKCkpLCBmZXRjaEVycik7CisJCQl0aHJvdyBuZXcgTWlzc2luZ09iamVjdEV4Y2VwdGlvbihyZW1vdGVJZCwgT0JKX0NPTU1JVCk7CisJCX0KKworCQlNYXA8U3RyaW5nLCBSZWY+IGFkdiA9IGZldGNoLmdldFJlZnMoKTsKKwkJaWYgKGFkdiA9PSBudWxsKSB7CisJCQl0aHJvdyBuZXcgTWlzc2luZ09iamVjdEV4Y2VwdGlvbihyZW1vdGVJZCwgT0JKX0NPTU1JVCk7CisJCX0KKworCQlSZWYgcmVmID0gYWR2LmdldChyZWZOYW1lKTsKKwkJaWYgKHJlZiA9PSBudWxsIHx8IHJlZi5nZXRPYmplY3RJZCgpID09IG51bGwpIHsKKwkJCXRocm93IG5ldyBSZWZHb25lRXhjZXB0aW9uKCk7CisJCX0KKworCQlpbml0UmV2V2FsaygpOworCQlyZW1vdGVJZCA9IHJlZi5nZXRPYmplY3RJZCgpOworCQlyZXR1cm4gcncucGFyc2VDb21taXQocmVtb3RlSWQpOworCX0KKworCXByaXZhdGUgc3RhdGljIGNsYXNzIFJlZkdvbmVFeGNlcHRpb24gZXh0ZW5kcyBFeGNlcHRpb24geworCQlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKKwl9Cit9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL2tldGNoL0xlYWRlclNuYXBzaG90LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL2tldGNoL0xlYWRlclNuYXBzaG90LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjhhNDlkZgotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwva2V0Y2gvTGVhZGVyU25hcHNob3QuamF2YQpAQCAtMCwwICsxLDE2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiwgR29vZ2xlIEluYy4KKyAqIGFuZCBvdGhlciBjb3B5cmlnaHQgb3duZXJzIGFzIGRvY3VtZW50ZWQgaW4gdGhlIHByb2plY3QncyBJUCBsb2cuCisgKgorICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2MS4wIHdoaWNoCisgKiBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgaXMgcmVwcm9kdWNlZCBiZWxvdywgYW5kIGlzCisgKiBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VkbC12MTAucGhwCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgSW5jLiBub3IgdGhlCisgKiAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCisgKiAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3IKKyAqICAgd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORAorICogQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKyAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGCisgKiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitwYWNrYWdlIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwua2V0Y2g7CisKK2ltcG9ydCBzdGF0aWMgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5rZXRjaC5LZXRjaFJlcGxpY2EuU3RhdGUuT0ZGTElORTsKKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5hbm5vdGF0aW9ucy5OdWxsYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5PYmplY3RJZDsKKworLyoqIEEgc25hcHNob3Qgb2YgYSBsZWFkZXIgYW5kIGl0cyB2aWV3IG9mIHRoZSB3b3JsZC4gKi8KK3B1YmxpYyBjbGFzcyBMZWFkZXJTbmFwc2hvdCB7CisJZmluYWwgTGlzdDxSZXBsaWNhU25hcHNob3Q+IHJlcGxpY2FzID0gbmV3IEFycmF5TGlzdDw+KCk7CisJS2V0Y2hMZWFkZXIuU3RhdGUgc3RhdGU7CisJbG9uZyB0ZXJtOworCUxvZ0luZGV4IGhlYWRJbmRleDsKKwlMb2dJbmRleCBjb21taXR0ZWRJbmRleDsKKwlib29sZWFuIGlkbGU7CisKKwlMZWFkZXJTbmFwc2hvdCgpIHsKKwl9CisKKwkvKiogQHJldHVybiB1bm1vZGlmaWFibGUgdmlldyBvZiBjb25maWd1cmVkIHJlcGxpY2FzLiAqLworCXB1YmxpYyBDb2xsZWN0aW9uPFJlcGxpY2FTbmFwc2hvdD4gZ2V0UmVwbGljYXMoKSB7CisJCXJldHVybiBDb2xsZWN0aW9ucy51bm1vZGlmaWFibGVMaXN0KHJlcGxpY2FzKTsKKwl9CisKKwkvKiogQHJldHVybiBjdXJyZW50IHN0YXRlIG9mIHRoZSBsZWFkZXIuICovCisJcHVibGljIEtldGNoTGVhZGVyLlN0YXRlIGdldFN0YXRlKCkgeworCQlyZXR1cm4gc3RhdGU7CisJfQorCisJLyoqCisJICogQHJldHVybiB7QGNvZGUgdHJ1ZX0gaWYgdGhlIGxlYWRlciBpcyBub3QgcnVubmluZyBhIHJvdW5kIHRvIHJlYWNoCisJICogICAgICAgICBjb25zZW5zdXMsIGFuZCBoYXMgbm8gcm91bmRzIHF1ZXVlZC4KKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBpc0lkbGUoKSB7CisJCXJldHVybiBpZGxlOworCX0KKworCS8qKgorCSAqIEByZXR1cm4gdGVybSBvZiB0aGlzIGxlYWRlci4gVmFsaWQgb25seSBpZiB7QGxpbmsgI2dldFN0YXRlKCl9IGlzCisJICogICAgICAgICBjdXJyZW50bHkge0BsaW5rIEtldGNoTGVhZGVyLlN0YXRlI0xFQURFUn0uCisJICovCisJcHVibGljIGxvbmcgZ2V0VGVybSgpIHsKKwkJcmV0dXJuIHRlcm07CisJfQorCisJLyoqCisJICogQHJldHVybiBlbmQgb2YgdGhlIGxlYWRlcidzIGxvZzsgbnVsbCBpZiBsZWFkZXIgaGFzbid0IHN0YXJ0ZWQgdXAgZW5vdWdoCisJICogICAgICAgICB0byBiZWdpbiBpdHMgb3duIGVsZWN0aW9uLgorCSAqLworCUBOdWxsYWJsZQorCXB1YmxpYyBMb2dJbmRleCBnZXRIZWFkKCkgeworCQlyZXR1cm4gaGVhZEluZGV4OworCX0KKworCS8qKgorCSAqIEByZXR1cm4gc3RhdGUgdGhlIGxlYWRlciBrbm93cyBpcyBjb21taXR0ZWQgb24gYSBtYWpvcml0eSBvZiBwYXJ0aWNpcGFudAorCSAqICAgICAgICAgcmVwbGljYXMuIE51bGwgdW50aWwgdGhlIGxlYWRlciBpbnN0YW5jZSBoYXMgY29tbWl0dGVkIGEgbG9nCisJICogICAgICAgICBpbmRleCB3aXRoaW4gaXRzIG93biB0ZXJtLgorCSAqLworCUBOdWxsYWJsZQorCXB1YmxpYyBMb2dJbmRleCBnZXRDb21taXR0ZWQoKSB7CisJCXJldHVybiBjb21taXR0ZWRJbmRleDsKKwl9CisKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlTdHJpbmdCdWlsZGVyIHMgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCQlzLmFwcGVuZChpc0lkbGUoKSA/ICJJRExFIiA6ICJSVU5OSU5HIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQlzLmFwcGVuZCgiIHN0YXRlICIpLmFwcGVuZChnZXRTdGF0ZSgpKTsgLy8kTk9OLU5MUy0xJAorCQlpZiAoZ2V0VGVybSgpID4gMCkgeworCQkJcy5hcHBlbmQoIiB0ZXJtICIpLmFwcGVuZChnZXRUZXJtKCkpOyAvLyROT04tTkxTLTEkCisJCX0KKwkJcy5hcHBlbmQoJ1xuJyk7CisJCXMuYXBwZW5kKFN0cmluZy5mb3JtYXQoCisJCQkJIiUtMTBzICUxMnMgJTEyc1xuIiwgLy8kTk9OLU5MUy0xJAorCQkJCSJSZXBsaWNhIiwgIkFjY2VwdGVkIiwgIkNvbW1pdHRlZCIpKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKKwkJcy5hcHBlbmQoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7IC8vJE5PTi1OTFMtMSQKKwkJZGVidWcocywgIihsZWFkZXIpIiwgZ2V0SGVhZCgpLCBnZXRDb21taXR0ZWQoKSk7IC8vJE5PTi1OTFMtMSQKKwkJcy5hcHBlbmQoJ1xuJyk7CisJCWZvciAoUmVwbGljYVNuYXBzaG90IHIgOiBnZXRSZXBsaWNhcygpKSB7CisJCQlkZWJ1ZyhzLCByKTsKKwkJCXMuYXBwZW5kKCdcbicpOworCQl9CisJCXMuYXBwZW5kKCdcbicpOworCQlyZXR1cm4gcy50b1N0cmluZygpOworCX0KKworCXByaXZhdGUgc3RhdGljIHZvaWQgZGVidWcoU3RyaW5nQnVpbGRlciBiLCBSZXBsaWNhU25hcHNob3QgcykgeworCQlLZXRjaFJlcGxpY2EgcmVwbGljYSA9IHMuZ2V0UmVwbGljYSgpOworCQlkZWJ1ZyhiLCByZXBsaWNhLmdldE5hbWUoKSwgcy5nZXRBY2NlcHRlZCgpLCBzLmdldENvbW1pdHRlZCgpKTsKKwkJYi5hcHBlbmQoU3RyaW5nLmZvcm1hdCgiICUtOHMgJXMiLCAvLyROT04tTkxTLTEkCisJCQkJcmVwbGljYS5nZXRQYXJ0aWNpcGF0aW9uKCksIHMuZ2V0U3RhdGUoKSkpOworCQlpZiAocy5nZXRTdGF0ZSgpID09IE9GRkxJTkUpIHsKKwkJCVN0cmluZyBlcnIgPSBzLmdldEVycm9yTWVzc2FnZSgpOworCQkJaWYgKGVyciAhPSBudWxsKSB7CisJCQkJYi5hcHBlbmQoIiAoIikuYXBwZW5kKGVycikuYXBwZW5kKCcpJyk7IC8vJE5PTi1OTFMtMSQKKwkJCX0KKwkJfQorCX0KKworCXByaXZhdGUgc3RhdGljIHZvaWQgZGVidWcoU3RyaW5nQnVpbGRlciBzLCBTdHJpbmcgbmFtZSwKKwkJCU9iamVjdElkIGFjY2VwdGVkLCBPYmplY3RJZCBjb21taXR0ZWQpIHsKKwkJcy5hcHBlbmQoU3RyaW5nLmZvcm1hdCgKKwkJCQkiJS0xMHMgJS0xMnMgJS0xMnMiLCAvLyROT04tTkxTLTEkCisJCQkJbmFtZSwgc3RyKGFjY2VwdGVkKSwgc3RyKGNvbW1pdHRlZCkpKTsKKwl9CisKKwlzdGF0aWMgU3RyaW5nIHN0cihPYmplY3RJZCBjKSB7CisJCWlmIChjIGluc3RhbmNlb2YgTG9nSW5kZXgpIHsKKwkJCXJldHVybiAoKExvZ0luZGV4KSBjKS5kZXNjcmliZUZvckxvZygpOworCQl9IGVsc2UgaWYgKGMgIT0gbnVsbCkgeworCQkJcmV0dXJuIGMuYWJicmV2aWF0ZSg4KS5uYW1lKCk7CisJCX0KKwkJcmV0dXJuICItIjsgLy8kTk9OLU5MUy0xJAorCX0KK30KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwva2V0Y2gvTG9jYWxSZXBsaWNhLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL2tldGNoL0xvY2FsUmVwbGljYS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyOTdiY2EKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL2tldGNoL0xvY2FsUmVwbGljYS5qYXZhCkBAIC0wLDAgKzEsMjI5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2LCBHb29nbGUgSW5jLgorICogYW5kIG90aGVyIGNvcHlyaWdodCBvd25lcnMgYXMgZG9jdW1lbnRlZCBpbiB0aGUgcHJvamVjdCdzIElQIGxvZy4KKyAqCisgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZQorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYxLjAgd2hpY2gKKyAqIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBpcyByZXByb2R1Y2VkIGJlbG93LCBhbmQgaXMKKyAqIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZWRsLXYxMC5waHAKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAqICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCBJbmMuIG5vciB0aGUKKyAqICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKKyAqICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgorICogICB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5ECisgKiBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAorICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYKKyAqIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK3BhY2thZ2Ugb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5rZXRjaDsKKworaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLmtldGNoLktldGNoUmVwbGljYS5Db21taXRNZXRob2QuQUxMX1JFRlM7CitpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwua2V0Y2guS2V0Y2hSZXBsaWNhLkNvbW1pdE1ldGhvZC5UWE5fQ09NTUlUVEVEOworaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5SZWZEYXRhYmFzZS5BTEw7CitpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LlJlY2VpdmVDb21tYW5kLlJlc3VsdC5PSzsKK2ltcG9ydCBzdGF0aWMgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuUmVjZWl2ZUNvbW1hbmQuUmVzdWx0LlJFSkVDVEVEX09USEVSX1JFQVNPTjsKKworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS50ZXh0Lk1lc3NhZ2VGb3JtYXQ7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLnJlZnRyZWUuUmVmVHJlZURhdGFiYXNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLkJhdGNoUmVmVXBkYXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLk51bGxQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuUmVmOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLlJlZkRhdGFiYXNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLlJlcG9zaXRvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrLlJldldhbGs7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuUmVjZWl2ZUNvbW1hbmQ7CisKKy8qKiBLZXRjaCByZXBsaWNhIHJ1bm5pbmcgb24gdGhlIHNhbWUgc3lzdGVtIGFzIHRoZSB7QGxpbmsgS2V0Y2hMZWFkZXJ9LiAqLworcHVibGljIGNsYXNzIExvY2FsUmVwbGljYSBleHRlbmRzIEtldGNoUmVwbGljYSB7CisJLyoqCisJICogQ29uZmlndXJlIGEgbG9jYWwgcmVwbGljYS4KKwkgKgorCSAqIEBwYXJhbSBsZWFkZXIKKwkgKiAgICAgICAgICAgIGluc3RhbmNlIHRoaXMgcmVwbGljYSBmb2xsb3dzLgorCSAqIEBwYXJhbSBuYW1lCisJICogICAgICAgICAgICB1bmlxdWUtaXNoIG5hbWUgaWRlbnRpZnlpbmcgdGhpcyByZXBsaWNhIGZvciBkZWJ1Z2dpbmcuCisJICogQHBhcmFtIGNmZworCSAqICAgICAgICAgICAgaG93IEtldGNoIHNob3VsZCB0cmVhdCB0aGUgbG9jYWwgc3lzdGVtLgorCSAqLworCXB1YmxpYyBMb2NhbFJlcGxpY2EoS2V0Y2hMZWFkZXIgbGVhZGVyLCBTdHJpbmcgbmFtZSwgUmVwbGljYUNvbmZpZyBjZmcpIHsKKwkJc3VwZXIobGVhZGVyLCBuYW1lLCBjZmcpOworCX0KKworCUBPdmVycmlkZQorCXByb3RlY3RlZCBTdHJpbmcgZGVzY3JpYmVGb3JMb2coKSB7CisJCXJldHVybiBTdHJpbmcuZm9ybWF0KCIlcyAobGVhZGVyKSIsIGdldE5hbWUoKSk7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwkvKioKKwkgKiBJbml0aWFsaXplcyBsb2NhbCByZXBsaWNhIGJ5IHJlYWRpbmcgYWNjZXB0ZWQgYW5kIGNvbW1pdHRlZCByZWZlcmVuY2VzLgorCSAqIDxwPgorCSAqIExvYWRzIGFjY2VwdGVkIGFuZCBjb21taXR0ZWQgcmVmZXJlbmNlcyBmcm9tIHRoZSByZWZlcmVuY2UgZGF0YWJhc2Ugb2YKKwkgKiB0aGUgbG9jYWwgcmVwbGljYSBhbmQgc3RvcmVzIHRoZWlyIGN1cnJlbnQgT2JqZWN0SWRzIGluIG1lbW9yeS4KKwkgKgorCSAqIEBwYXJhbSByZXBvCisJICogICAgICAgICAgICByZXBvc2l0b3J5IHRvIGluaXRpYWxpemUgc3RhdGUgZnJvbS4KKwkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCisJICogICAgICAgICAgICAgY2Fubm90IHJlYWQgcmVwb3NpdG9yeSBzdGF0ZS4KKwkgKi8KKwl2b2lkIGluaXRpYWxpemUoUmVwb3NpdG9yeSByZXBvKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQlSZWZEYXRhYmFzZSByZWZkYiA9IHJlcG8uZ2V0UmVmRGF0YWJhc2UoKTsKKwkJaWYgKHJlZmRiIGluc3RhbmNlb2YgUmVmVHJlZURhdGFiYXNlKSB7CisJCQlSZWZUcmVlRGF0YWJhc2UgdHJlZURiID0gKFJlZlRyZWVEYXRhYmFzZSkgcmVmZGI7CisJCQlTdHJpbmcgdHhuTmFtZXNwYWNlID0gZ2V0U3lzdGVtKCkuZ2V0VHhuTmFtZXNwYWNlKCk7CisJCQlpZiAoIXR4bk5hbWVzcGFjZS5lcXVhbHModHJlZURiLmdldFR4bk5hbWVzcGFjZSgpKSkgeworCQkJCXRocm93IG5ldyBJT0V4Y2VwdGlvbihNZXNzYWdlRm9ybWF0LmZvcm1hdCgKKwkJCQkJCUtldGNoVGV4dC5nZXQoKS5taXNtYXRjaGVkVHhuTmFtZXNwYWNlLAorCQkJCQkJdHhuTmFtZXNwYWNlLCB0cmVlRGIuZ2V0VHhuTmFtZXNwYWNlKCkpKTsKKwkJCX0KKwkJCXJlZmRiID0gdHJlZURiLmdldEJvb3RzdHJhcCgpOworCQl9CisJCWluaXRpYWxpemUocmVmZGIuZXhhY3RSZWYoCisJCQkJZ2V0U3lzdGVtKCkuZ2V0VHhuQWNjZXB0ZWQoKSwKKwkJCQlnZXRTeXN0ZW0oKS5nZXRUeG5Db21taXR0ZWQoKSkpOworCX0KKworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIHN0YXJ0UHVzaChmaW5hbCBSZXBsaWNhUHVzaFJlcXVlc3QgcmVxKSB7CisJCWdldFN5c3RlbSgpLmdldEV4ZWN1dG9yKCkuZXhlY3V0ZShuZXcgUnVubmFibGUoKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJCQl0cnkgKFJlcG9zaXRvcnkgZ2l0ID0gZ2V0TGVhZGVyKCkub3BlblJlcG9zaXRvcnkoKSkgeworCQkJCQl0cnkgeworCQkJCQkJdXBkYXRlKGdpdCwgcmVxKTsKKwkJCQkJCXJlcS5kb25lKGdpdCk7CisJCQkJCX0gY2F0Y2ggKFRocm93YWJsZSBlcnIpIHsKKwkJCQkJCXJlcS5zZXRFeGNlcHRpb24oZ2l0LCBlcnIpOworCQkJCQl9CisJCQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZXJyKSB7CisJCQkJCXJlcS5zZXRFeGNlcHRpb24obnVsbCwgZXJyKTsKKwkJCQl9CisJCQl9CisJCX0pOworCX0KKworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGJsb2NraW5nRmV0Y2goUmVwb3NpdG9yeSByZXBvLCBSZXBsaWNhRmV0Y2hSZXF1ZXN0IHJlcSkKKwkJCXRocm93cyBJT0V4Y2VwdGlvbiB7CisJCXRocm93IG5ldyBJT0V4Y2VwdGlvbihLZXRjaFRleHQuZ2V0KCkuY2Fubm90RmV0Y2hGcm9tTG9jYWxSZXBsaWNhKTsKKwl9CisKKwlwcml2YXRlIHZvaWQgdXBkYXRlKFJlcG9zaXRvcnkgZ2l0LCBSZXBsaWNhUHVzaFJlcXVlc3QgcmVxKQorCQkJdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJUmVmRGF0YWJhc2UgcmVmZGIgPSBnaXQuZ2V0UmVmRGF0YWJhc2UoKTsKKwkJQ29tbWl0TWV0aG9kIG1ldGhvZCA9IGdldENvbW1pdE1ldGhvZCgpOworCisJCS8vIExvY2FsIHJlcGxpY2EgcHJvYmFibHkgdXNlcyBSZWZUcmVlRGF0YWJhc2UsIHRoZSByZXF1ZXN0IHNob3VsZAorCQkvLyBiZSBvbmx5IGZvciB0aGUgdHhuTmFtZXNwYWNlLCBzbyBkcm9wIHRvIHRoZSBib290c3RyYXAgbGF5ZXIuCisJCWlmIChyZWZkYiBpbnN0YW5jZW9mIFJlZlRyZWVEYXRhYmFzZSkgeworCQkJaWYgKCFpc09ubHlUeG5OYW1lc3BhY2UocmVxLmdldENvbW1hbmRzKCkpKSB7CisJCQkJcmV0dXJuOworCQkJfQorCisJCQlyZWZkYiA9ICgoUmVmVHJlZURhdGFiYXNlKSByZWZkYikuZ2V0Qm9vdHN0cmFwKCk7CisJCQltZXRob2QgPSBUWE5fQ09NTUlUVEVEOworCQl9CisKKwkJQmF0Y2hSZWZVcGRhdGUgYmF0Y2ggPSByZWZkYi5uZXdCYXRjaFVwZGF0ZSgpOworCQliYXRjaC5zZXRSZWZMb2dJZGVudChnZXRTeXN0ZW0oKS5uZXdDb21taXR0ZXIoKSk7CisJCWJhdGNoLnNldFJlZkxvZ01lc3NhZ2UoImtldGNoIiwgZmFsc2UpOyAvLyROT04tTkxTLTEkCisJCWJhdGNoLnNldEFsbG93Tm9uRmFzdEZvcndhcmRzKHRydWUpOworCisJCS8vIFJlZkRpcmVjdG9yeSB1cGRhdGVzIG11bHRpcGxlIHJlZmVyZW5jZXMgc2VxdWVudGlhbGx5LgorCQkvLyBSdW4gZXZlcnl0aGluZyBlbHNlIGZpcnN0LCB0aGVuIGFjY2VwdGVkIChpZiBwcmVzZW50KSwKKwkJLy8gdGhlbiBjb21taXR0ZWQgKGlmIHByZXNlbnQpLiBUaGlzIGVuc3VyZXMgYW4gZWFybGllcgorCQkvLyBmYWlsdXJlIHdpbGwgbm90IHVwZGF0ZSB0aGVzZSBjcml0aWNhbCByZWZlcmVuY2VzLgorCQlSZWNlaXZlQ29tbWFuZCBhY2NlcHRlZCA9IG51bGw7CisJCVJlY2VpdmVDb21tYW5kIGNvbW1pdHRlZCA9IG51bGw7CisJCWZvciAoUmVjZWl2ZUNvbW1hbmQgY21kIDogcmVxLmdldENvbW1hbmRzKCkpIHsKKwkJCVN0cmluZyBuYW1lID0gY21kLmdldFJlZk5hbWUoKTsKKwkJCWlmIChuYW1lLmVxdWFscyhnZXRTeXN0ZW0oKS5nZXRUeG5BY2NlcHRlZCgpKSkgeworCQkJCWFjY2VwdGVkID0gY21kOworCQkJfSBlbHNlIGlmIChuYW1lLmVxdWFscyhnZXRTeXN0ZW0oKS5nZXRUeG5Db21taXR0ZWQoKSkpIHsKKwkJCQljb21taXR0ZWQgPSBjbWQ7CisJCQl9IGVsc2UgeworCQkJCWJhdGNoLmFkZENvbW1hbmQoY21kKTsKKwkJCX0KKwkJfQorCQlpZiAoY29tbWl0dGVkICE9IG51bGwgJiYgbWV0aG9kID09IEFMTF9SRUZTKSB7CisJCQlNYXA8U3RyaW5nLCBSZWY+IHJlZnMgPSByZWZkYi5nZXRSZWZzKEFMTCk7CisJCQliYXRjaC5hZGRDb21tYW5kKHByZXBhcmVDb21taXQoZ2l0LCByZWZzLCBjb21taXR0ZWQuZ2V0TmV3SWQoKSkpOworCQl9CisJCWlmIChhY2NlcHRlZCAhPSBudWxsKSB7CisJCQliYXRjaC5hZGRDb21tYW5kKGFjY2VwdGVkKTsKKwkJfQorCQlpZiAoY29tbWl0dGVkICE9IG51bGwpIHsKKwkJCWJhdGNoLmFkZENvbW1hbmQoY29tbWl0dGVkKTsKKwkJfQorCisJCXRyeSAoUmV2V2FsayBydyA9IG5ldyBSZXZXYWxrKGdpdCkpIHsKKwkJCWJhdGNoLmV4ZWN1dGUocncsIE51bGxQcm9ncmVzc01vbml0b3IuSU5TVEFOQ0UpOworCQl9CisKKwkJLy8gS2V0Y2hSZXBsaWNhIG9ubHkgY2FyZXMgYWJvdXQgYWNjZXB0ZWQgYW5kIGNvbW1pdHRlZCBpbgorCQkvLyBhZHZlcnRpc2VtZW50LiBJZiB0aGV5IGZhaWxlZCwgc3RvcmUgdGhlIGN1cnJlbnQgdmFsdWVzCisJCS8vIGJhY2sgaW4gdGhlIFJlcGxpY2FQdXNoUmVxdWVzdC4KKwkJTGlzdDxTdHJpbmc+IGZhaWxlZCA9IG5ldyBBcnJheUxpc3Q8PigyKTsKKwkJY2hlY2tGYWlsZWQoZmFpbGVkLCBhY2NlcHRlZCk7CisJCWNoZWNrRmFpbGVkKGZhaWxlZCwgY29tbWl0dGVkKTsKKwkJaWYgKCFmYWlsZWQuaXNFbXB0eSgpKSB7CisJCQlTdHJpbmdbXSBhcnIgPSBmYWlsZWQudG9BcnJheShuZXcgU3RyaW5nW2ZhaWxlZC5zaXplKCldKTsKKwkJCXJlcS5zZXRSZWZzKHJlZmRiLmV4YWN0UmVmKGFycikpOworCQl9CisJfQorCisJcHJpdmF0ZSBzdGF0aWMgdm9pZCBjaGVja0ZhaWxlZChMaXN0PFN0cmluZz4gZmFpbGVkLCBSZWNlaXZlQ29tbWFuZCBjbWQpIHsKKwkJaWYgKGNtZCAhPSBudWxsICYmIGNtZC5nZXRSZXN1bHQoKSAhPSBPSykgeworCQkJZmFpbGVkLmFkZChjbWQuZ2V0UmVmTmFtZSgpKTsKKwkJfQorCX0KKworCXByaXZhdGUgYm9vbGVhbiBpc09ubHlUeG5OYW1lc3BhY2UoQ29sbGVjdGlvbjxSZWNlaXZlQ29tbWFuZD4gY21kTGlzdCkgeworCQkvLyBCZSBwYXJhbm9pZCBhbmQgcmVqZWN0IG5vbiB0eG5OYW1lc3BhY2UgbmFtZXMsIHRoaXMKKwkJLy8gaXMgYSBwcm9ncmFtbWluZyBlcnJvciBpbiBLZXRjaCB0aGF0IHNob3VsZCBub3Qgb2NjdXIuCisKKwkJU3RyaW5nIHR4bk5hbWVzcGFjZSA9IGdldFN5c3RlbSgpLmdldFR4bk5hbWVzcGFjZSgpOworCQlmb3IgKFJlY2VpdmVDb21tYW5kIGNtZCA6IGNtZExpc3QpIHsKKwkJCWlmICghY21kLmdldFJlZk5hbWUoKS5zdGFydHNXaXRoKHR4bk5hbWVzcGFjZSkpIHsKKwkJCQljbWQuc2V0UmVzdWx0KFJFSkVDVEVEX09USEVSX1JFQVNPTiwKKwkJCQkJCU1lc3NhZ2VGb3JtYXQuZm9ybWF0KAorCQkJCQkJCQlLZXRjaFRleHQuZ2V0KCkub3V0c2lkZVR4bk5hbWVzcGFjZSwKKwkJCQkJCQkJY21kLmdldFJlZk5hbWUoKSwgdHhuTmFtZXNwYWNlKSk7CisJCQkJUmVjZWl2ZUNvbW1hbmQuYWJvcnQoY21kTGlzdCk7CisJCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCQl9CisJCXJldHVybiB0cnVlOworCX0KK30KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwva2V0Y2gvTG9nSW5kZXguamF2YSBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwva2V0Y2gvTG9nSW5kZXguamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTBjOGVkCi0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9rZXRjaC9Mb2dJbmRleC5qYXZhCkBAIC0wLDAgKzEsMTE5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2LCBHb29nbGUgSW5jLgorICogYW5kIG90aGVyIGNvcHlyaWdodCBvd25lcnMgYXMgZG9jdW1lbnRlZCBpbiB0aGUgcHJvamVjdCdzIElQIGxvZy4KKyAqCisgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZQorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYxLjAgd2hpY2gKKyAqIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBpcyByZXByb2R1Y2VkIGJlbG93LCBhbmQgaXMKKyAqIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZWRsLXYxMC5waHAKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAqICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCBJbmMuIG5vciB0aGUKKyAqICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKKyAqICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgorICogICB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5ECisgKiBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAorICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYKKyAqIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK3BhY2thZ2Ugb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5rZXRjaDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLkFueU9iamVjdElkOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLk9iamVjdElkOworCisvKioKKyAqIEFuIE9iamVjdElkIGZvciBhIGNvbW1pdCBleHRlbmRlZCB3aXRoIGluY3JlbWVudGluZyBsb2cgaW5kZXguCisgKiA8cD4KKyAqIEZvciBhbnkgdHdvIExvZ0luZGV4IGluc3RhbmNlcywge0Bjb2RlIEF9IGlzIGFuIGFuY2VzdG9yIG9mIHtAY29kZSBDfQorICogcmVhY2hhYmxlIHRocm91Z2ggcGFyZW50IGVkZ2VzIGluIHRoZSBncmFwaCBpZiB7QGNvZGUgQS5pbmRleCA8IEMuaW5kZXh9LgorICogTG9nSW5kZXggcHJvdmlkZXMgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gZm9yIEtldGNoLCB0aGUgc2FtZSBpbmZvcm1hdGlvbgorICogY2FuIGJlIG9idGFpbmVkIGZyb20ge0BsaW5rIG9yZy5lY2xpcHNlLmpnaXQucmV2d2Fsay5SZXZXYWxrfS4KKyAqIDxwPgorICogSW5kZXggdmFsdWVzIGFyZSBvbmx5IHZhbGlkIHdpdGhpbiBhIHNpbmdsZSB7QGxpbmsgS2V0Y2hMZWFkZXJ9IGluc3RhbmNlCisgKiBhZnRlciBpdCBoYXMgd29uIGFuIGVsZWN0aW9uLiBCeSByZXN0cmljdGluZyBzY29wZSB0byBhIHNpbmdsZSBsZWFkZXIgbmV3CisgKiBsZWFkZXJzIGRvIG5vdCBuZWVkIHRvIHRyYXZlcnNlIHRoZSBlbnRpcmUgaGlzdG9yeSB0byBkZXRlcm1pbmUgdGhlIG5leHQKKyAqIHtAY29kZSBpbmRleH0gZm9yIG5ldyBwcm9wb3NhbHMuIFRoaXMgZGlmZmVycyBmcm9tIFJhZnQsIHdoZXJlIGxlYWRlcgorICogZWxlY3Rpb24gdXNlcyB0aGUgbG9nIGluZGV4IGFuZCB0aGUgdGVybSBudW1iZXIgdG8gZGV0ZXJtaW5lIHdoaWNoIHJlcGxpY2EKKyAqIGhvbGRzIGEgc3VmZmljaWVudGx5IHVwLXRvLWRhdGUgbG9nLiBTaW5jZSBLZXRjaCB1c2VzIEdpdCBvYmplY3RzIGZvciBzdG9yYWdlCisgKiBvZiBpdHMgcmVwbGljYXRlZCBsb2csIGl0IGtlZXBzIHRoZSB0ZXJtIG51bWJlciBhcyBSYWZ0IGRvZXMgYnV0IHVzZXMKKyAqIHN0YW5kYXJkIEdpdCBvcGVyYXRpb25zIHRvIGltcGx5IHRoZSBsb2cgaW5kZXguCisgKiA8cD4KKyAqIHtAbGluayBSb3VuZCNydW5Bc3luYyhBbnlPYmplY3RJZCl9IGJ1bXBzIHRoZSBpbmRleCBhcyBlYWNoIG5ldyByb3VuZCBpcworICogY29uc3RydWN0ZWQuCisgKi8KK3B1YmxpYyBjbGFzcyBMb2dJbmRleCBleHRlbmRzIE9iamVjdElkIHsKKwlzdGF0aWMgTG9nSW5kZXggdW5rbm93bihBbnlPYmplY3RJZCBpZCkgeworCQlyZXR1cm4gbmV3IExvZ0luZGV4KGlkLCAwKTsKKwl9CisKKwlwcml2YXRlIGZpbmFsIGxvbmcgaW5kZXg7CisKKwlwcml2YXRlIExvZ0luZGV4KEFueU9iamVjdElkIGlkLCBsb25nIGluZGV4KSB7CisJCXN1cGVyKGlkKTsKKwkJdGhpcy5pbmRleCA9IGluZGV4OworCX0KKworCUxvZ0luZGV4IG5leHRJbmRleChBbnlPYmplY3RJZCBpZCkgeworCQlyZXR1cm4gbmV3IExvZ0luZGV4KGlkLCBpbmRleCArIDEpOworCX0KKworCS8qKiBAcmV0dXJuIGluZGV4IHByb3ZpZGVkIGJ5IHRoZSBjdXJyZW50IGxlYWRlciBpbnN0YW5jZS4gKi8KKwlwdWJsaWMgbG9uZyBnZXRJbmRleCgpIHsKKwkJcmV0dXJuIGluZGV4OworCX0KKworCS8qKgorCSAqIENoZWNrIGlmIHRoaXMgbG9nIHBvc2l0aW9uIGNvbW1pdHRlZCBiZWZvcmUgYW5vdGhlciBsb2cgcG9zaXRpb24uCisJICogPHA+CisJICogT25seSB2YWxpZCBmb3IgbG9nIHBvc2l0aW9ucyBpbiBtZW1vcnkgZm9yIHRoZSBjdXJyZW50IGxlYWRlci4KKwkgKgorCSAqIEBwYXJhbSBjCisJICogICAgICAgICAgICBvdGhlciAobW9yZSByZWNlbnQpIGxvZyBwb3NpdGlvbi4KKwkgKiBAcmV0dXJuIHRydWUgaWYgdGhpcyBsb2cgcG9zaXRpb24gd2FzIGJlZm9yZSB7QGNvZGUgY30gb3IgZXF1YWwgdG8gYyBhbmQKKwkgKiAgICAgICAgIHRoZXJlZm9yZSBhbnkgYWdyZWVtZW50IG9mIHtAY29kZSBjfSBpbXBsaWVzIGFncmVlbWVudCBvbiB0aGlzCisJICogICAgICAgICBsb2cgcG9zaXRpb24uCisJICovCisJYm9vbGVhbiBpc0JlZm9yZShMb2dJbmRleCBjKSB7CisJCXJldHVybiBpbmRleCA8PSBjLmluZGV4OworCX0KKworCS8qKgorCSAqIEByZXR1cm4gc3RyaW5nIHN1aXRhYmxlIGZvciBkZWJ1ZyBsb2dnaW5nIGNvbnRhaW5pbmcgdGhlIGxvZyBpbmRleCBhbmQKKwkgKiAgICAgICAgIGFiYnJldmlhdGVkIE9iamVjdElkLgorCSAqLworCUBTdXBwcmVzc1dhcm5pbmdzKCJib3hpbmciKQorCXB1YmxpYyBTdHJpbmcgZGVzY3JpYmVGb3JMb2coKSB7CisJCXJldHVybiBTdHJpbmcuZm9ybWF0KCIlNWQvJXMiLCBpbmRleCwgYWJicmV2aWF0ZSg2KS5uYW1lKCkpOyAvLyROT04tTkxTLTEkCisJfQorCisJQFN1cHByZXNzV2FybmluZ3MoImJveGluZyIpCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJcmV0dXJuIFN0cmluZy5mb3JtYXQoIkxvZ0lkWyU1ZC8lc10iLCBpbmRleCwgbmFtZSgpKTsgLy8kTk9OLU5MUy0xJAorCX0KK30KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwva2V0Y2gvUHJvcG9zYWwuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwva2V0Y2gvUHJvcG9zYWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODc2ZWI1Ci0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9rZXRjaC9Qcm9wb3NhbC5qYXZhCkBAIC0wLDAgKzEsMzkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2LCBHb29nbGUgSW5jLgorICogYW5kIG90aGVyIGNvcHlyaWdodCBvd25lcnMgYXMgZG9jdW1lbnRlZCBpbiB0aGUgcHJvamVjdCdzIElQIGxvZy4KKyAqCisgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZQorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYxLjAgd2hpY2gKKyAqIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBpcyByZXByb2R1Y2VkIGJlbG93LCBhbmQgaXMKKyAqIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZWRsLXYxMC5waHAKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAqICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCBJbmMuIG5vciB0aGUKKyAqICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKKyAqICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgorICogICB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5ECisgKiBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAorICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYKKyAqIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK3BhY2thZ2Ugb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5rZXRjaDsKKworaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLmtldGNoLlByb3Bvc2FsLlN0YXRlLkFCT1JURUQ7CitpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwua2V0Y2guUHJvcG9zYWwuU3RhdGUuRVhFQ1VURUQ7CitpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwua2V0Y2guUHJvcG9zYWwuU3RhdGUuTkVXOworaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5SZWNlaXZlQ29tbWFuZC5SZXN1bHQuTk9UX0FUVEVNUFRFRDsKK2ltcG9ydCBzdGF0aWMgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuUmVjZWl2ZUNvbW1hbmQuUmVzdWx0Lk9LOworCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5Db3B5T25Xcml0ZUFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lVW5pdDsKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5hdG9taWMuQXRvbWljUmVmZXJlbmNlOworCitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5hbm5vdGF0aW9ucy5OdWxsYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmVycm9ycy5NaXNzaW5nT2JqZWN0RXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5yZWZ0cmVlLkNvbW1hbmQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuT2JqZWN0SWQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuUGVyc29uSWRlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuUmVmOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQucmV2d2Fsay5SZXZXYWxrOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LlB1c2hDZXJ0aWZpY2F0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5SZWNlaXZlQ29tbWFuZDsKKworLyoqCisgKiBBIHByb3Bvc2FsIHRvIGJlIGFwcGxpZWQgaW4gYSBLZXRjaCBzeXN0ZW0uCisgKiA8cD4KKyAqIFB1c2hpbmcgdG8gYSBLZXRjaCBsZWFkZXIgcmVzdWx0cyBpbiB0aGUgbGVhZGVyIG1ha2luZyBhIHByb3Bvc2FsLiBUaGUKKyAqIHByb3Bvc2FsIGluY2x1ZGVzIHRoZSBsaXN0IG9mIHJlZmVyZW5jZSB1cGRhdGVzLiBUaGUgbGVhZGVyIGF0dGVtcHRzIHRvIHNlbmQKKyAqIHRoZSBwcm9wb3NhbCB0byBhIHF1b3J1bSBvZiByZXBsaWNhcyBieSBwdXNoaW5nIHRoZSBwcm9wb3NhbCB0byBhICJzdGFnaW5nIgorICogYXJlYSB1bmRlciB0aGUge0Bjb2RlIHJlZnMvdHhuL3N0YWdlL30gbmFtZXNwYWNlLiBJZiB0aGUgcHJvcG9zYWwgc3VjY2VlZHMKKyAqIHRoZW4gdGhlIGNoYW5nZXMgYXJlIGR1cmFibGUgYW5kIHRoZSBsZWFkZXIgY2FuIGNvbW1pdCB0aGUgcHJvcG9zYWwuCisgKiA8cD4KKyAqIFByb3Bvc2FscyBhcmUgZXhlY3V0ZWQgYnkge0BsaW5rIEtldGNoTGVhZGVyI3F1ZXVlUHJvcG9zYWwoUHJvcG9zYWwpfSwgd2hpY2gKKyAqIHJ1bnMgdGhlbSBhc3luY2hyb25vdXNseSBpbiB0aGUgYmFja2dyb3VuZC4gUHJvcG9zYWxzIGFyZSB0aHJlYWQtc2FmZSBmdXR1cmVzCisgKiBhbGxvd2luZyBjYWxsZXJzIHRvIHtAbGluayAjYXdhaXQoKX0gZm9yIHJlc3VsdHMgb3IgYmUgbm90aWZpZWQgYnkgY2FsbGJhY2sKKyAqIHVzaW5nIHtAbGluayAjYWRkTGlzdGVuZXIoUnVubmFibGUpfS4KKyAqLworcHVibGljIGNsYXNzIFByb3Bvc2FsIHsKKwkvKiogQ3VycmVudCBzdGF0ZSBvZiB0aGUgcHJvcG9zYWwuICovCisJcHVibGljIGVudW0gU3RhdGUgeworCQkvKiogUHJvcG9zYWwgaGFzIG5vdCB5ZXQgYmVlbiBnaXZlbiB0byBhIHtAbGluayBLZXRjaExlYWRlcn0uICovCisJCU5FVyhmYWxzZSksCisKKwkJLyoqCisJCSAqIFByb3Bvc2FsIHdhcyB2YWxpZGF0ZWQgYW5kIGhhcyBlbnRlcmVkIHRoZSBxdWV1ZSwgYnV0IGEgcm91bmQKKwkJICogY29udGFpbmluZyB0aGlzIHByb3Bvc2FsIGhhcyBub3Qgc3RhcnRlZCB5ZXQuCisJCSAqLworCQlRVUVVRUQoZmFsc2UpLAorCisJCS8qKiBSb3VuZCBjb250YWluaW5nIHRoZSBwcm9wb3NhbCBoYXMgYmVndW4gYW5kIGlzIGluIHByb2dyZXNzLiAqLworCQlSVU5OSU5HKGZhbHNlKSwKKworCQkvKioKKwkJICogUHJvcG9zYWwgd2FzIGV4ZWN1dGVkIHRocm91Z2ggYSByb3VuZC4gSW5kaXZpZHVhbCByZXN1bHRzIGZyb20KKwkJICoge0BsaW5rIFByb3Bvc2FsI2dldENvbW1hbmRzKCl9LCB7QGxpbmsgQ29tbWFuZCNnZXRSZXN1bHQoKX0gZXhwbGFpbgorCQkgKiB0aGUgc3VjY2VzcyBvciBmYWlsdXJlIG91dGNvbWUuCisJCSAqLworCQlFWEVDVVRFRCh0cnVlKSwKKworCQkvKiogUHJvcG9zYWwgd2FzIGFib3J0ZWQgYW5kIGRpZCBub3QgcmVhY2ggY29uc2Vuc3VzLiAqLworCQlBQk9SVEVEKHRydWUpOworCisJCXByaXZhdGUgZmluYWwgYm9vbGVhbiBkb25lOworCisJCXByaXZhdGUgU3RhdGUoYm9vbGVhbiBkb25lKSB7CisJCQl0aGlzLmRvbmUgPSBkb25lOworCQl9CisKKwkJLyoqIEByZXR1cm4gdHJ1ZSBpZiB0aGlzIGlzIGEgdGVybWluYWwgc3RhdGUuICovCisJCXB1YmxpYyBib29sZWFuIGlzRG9uZSgpIHsKKwkJCXJldHVybiBkb25lOworCQl9CisJfQorCisJcHJpdmF0ZSBmaW5hbCBMaXN0PENvbW1hbmQ+IGNvbW1hbmRzOworCXByaXZhdGUgUGVyc29uSWRlbnQgYXV0aG9yOworCXByaXZhdGUgU3RyaW5nIG1lc3NhZ2U7CisJcHJpdmF0ZSBQdXNoQ2VydGlmaWNhdGUgcHVzaENlcnQ7CisJcHJpdmF0ZSBmaW5hbCBMaXN0PFJ1bm5hYmxlPiBsaXN0ZW5lcnMgPSBuZXcgQ29weU9uV3JpdGVBcnJheUxpc3Q8PigpOworCXByaXZhdGUgZmluYWwgQXRvbWljUmVmZXJlbmNlPFN0YXRlPiBzdGF0ZSA9IG5ldyBBdG9taWNSZWZlcmVuY2U8PihORVcpOworCisJLyoqCisJICogQ3JlYXRlIGEgcHJvcG9zYWwgZnJvbSBhIGxpc3Qgb2YgS2V0Y2ggY29tbWFuZHMuCisJICoKKwkgKiBAcGFyYW0gY21kcworCSAqICAgICAgICAgICAgcHJlcGFyZWQgbGlzdCBvZiBjb21tYW5kcy4KKwkgKi8KKwlwdWJsaWMgUHJvcG9zYWwoTGlzdDxDb21tYW5kPiBjbWRzKSB7CisJCWNvbW1hbmRzID0gQ29sbGVjdGlvbnMudW5tb2RpZmlhYmxlTGlzdChuZXcgQXJyYXlMaXN0PD4oY21kcykpOworCX0KKworCS8qKgorCSAqIENyZWF0ZSBhIHByb3Bvc2FsIGZyb20gYSBjb2xsZWN0aW9uIG9mIHJlY2VpdmVkIGNvbW1hbmRzLgorCSAqCisJICogQHBhcmFtIHJ3CisJICogICAgICAgICAgICB3YWxrZXIgdG8gYXNzaXN0IGluIHByZXBhcmluZyBjb21tYW5kcy4KKwkgKiBAcGFyYW0gY21kcworCSAqICAgICAgICAgICAgbGlzdCBvZiBwZW5kaW5nIGNvbW1hbmRzLgorCSAqIEB0aHJvd3MgTWlzc2luZ09iamVjdEV4Y2VwdGlvbgorCSAqICAgICAgICAgICAgIG5ld0lkIG9mIGEgY29tbWFuZCBpcyBub3QgZm91bmQgbG9jYWxseS4KKwkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCisJICogICAgICAgICAgICAgbG9jYWwgb2JqZWN0cyBjYW5ub3QgYmUgYWNjZXNzZWQuCisJICovCisJcHVibGljIFByb3Bvc2FsKFJldldhbGsgcncsIENvbGxlY3Rpb248UmVjZWl2ZUNvbW1hbmQ+IGNtZHMpCisJCQl0aHJvd3MgTWlzc2luZ09iamVjdEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geworCQljb21tYW5kcyA9IGFzQ29tbWFuZExpc3QocncsIGNtZHMpOworCX0KKworCXByaXZhdGUgc3RhdGljIExpc3Q8Q29tbWFuZD4gYXNDb21tYW5kTGlzdChSZXZXYWxrIHJ3LAorCQkJQ29sbGVjdGlvbjxSZWNlaXZlQ29tbWFuZD4gY21kcykKKwkJCQkJdGhyb3dzIE1pc3NpbmdPYmplY3RFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKKwkJTGlzdDxDb21tYW5kPiBjb21tYW5kcyA9IG5ldyBBcnJheUxpc3Q8PihjbWRzLnNpemUoKSk7CisJCWZvciAoUmVjZWl2ZUNvbW1hbmQgY21kIDogY21kcykgeworCQkJY29tbWFuZHMuYWRkKG5ldyBDb21tYW5kKHJ3LCBjbWQpKTsKKwkJfQorCQlyZXR1cm4gQ29sbGVjdGlvbnMudW5tb2RpZmlhYmxlTGlzdChjb21tYW5kcyk7CisJfQorCisJLyoqIEByZXR1cm4gY29tbWFuZHMgZnJvbSB0aGlzIHByb3Bvc2FsLiAqLworCXB1YmxpYyBDb2xsZWN0aW9uPENvbW1hbmQ+IGdldENvbW1hbmRzKCkgeworCQlyZXR1cm4gY29tbWFuZHM7CisJfQorCisJLyoqIEByZXR1cm4gb3B0aW9uYWwgYXV0aG9yIG9mIHRoZSBwcm9wb3NhbC4gKi8KKwlATnVsbGFibGUKKwlwdWJsaWMgUGVyc29uSWRlbnQgZ2V0QXV0aG9yKCkgeworCQlyZXR1cm4gYXV0aG9yOworCX0KKworCS8qKgorCSAqIFNldCB0aGUgYXV0aG9yIGZvciB0aGUgcHJvcG9zYWwuCisJICoKKwkgKiBAcGFyYW0gd2hvCisJICogICAgICAgICAgICBvcHRpb25hbCBpZGVudGl0eSBvZiB0aGUgYXV0aG9yIG9mIHRoZSBwcm9wb3NhbC4KKwkgKiBAcmV0dXJuIHtAY29kZSB0aGlzfQorCSAqLworCXB1YmxpYyBQcm9wb3NhbCBzZXRBdXRob3IoQE51bGxhYmxlIFBlcnNvbklkZW50IHdobykgeworCQlhdXRob3IgPSB3aG87CisJCXJldHVybiB0aGlzOworCX0KKworCS8qKiBAcmV0dXJuIG9wdGlvbmFsIG1lc3NhZ2UgZm9yIHRoZSBjb21taXQgbG9nIG9mIHRoZSBSZWZUcmVlLiAqLworCUBOdWxsYWJsZQorCXB1YmxpYyBTdHJpbmcgZ2V0TWVzc2FnZSgpIHsKKwkJcmV0dXJuIG1lc3NhZ2U7CisJfQorCisJLyoqCisJICogU2V0IHRoZSBtZXNzYWdlIHRvIGFwcGVhciBpbiB0aGUgY29tbWl0IGxvZyBvZiB0aGUgUmVmVHJlZS4KKwkgKgorCSAqIEBwYXJhbSBtc2cKKwkgKiAgICAgICAgICAgIG1lc3NhZ2UgdGV4dCBmb3IgdGhlIGNvbW1pdC4KKwkgKiBAcmV0dXJuIHtAY29kZSB0aGlzfQorCSAqLworCXB1YmxpYyBQcm9wb3NhbCBzZXRNZXNzYWdlKEBOdWxsYWJsZSBTdHJpbmcgbXNnKSB7CisJCW1lc3NhZ2UgPSBtc2cgIT0gbnVsbCAmJiAhbXNnLmlzRW1wdHkoKSA/IG1zZyA6IG51bGw7CisJCXJldHVybiB0aGlzOworCX0KKworCS8qKiBAcmV0dXJuIG9wdGlvbmFsIGNlcnRpZmljYXRlIHNpZ25pbmcgdGhlIHJlZmVyZW5jZXMuICovCisJQE51bGxhYmxlCisJcHVibGljIFB1c2hDZXJ0aWZpY2F0ZSBnZXRQdXNoQ2VydGlmaWNhdGUoKSB7CisJCXJldHVybiBwdXNoQ2VydDsKKwl9CisKKwkvKioKKwkgKiBTZXQgdGhlIHB1c2ggY2VydGlmaWNhdGUgc2lnbmluZyB0aGUgcmVmZXJlbmNlcy4KKwkgKgorCSAqIEBwYXJhbSBjZXJ0CisJICogICAgICAgICAgICBjZXJ0aWZpY2F0ZSwgbWF5IGJlIG51bGwuCisJICogQHJldHVybiB7QGNvZGUgdGhpc30KKwkgKi8KKwlwdWJsaWMgUHJvcG9zYWwgc2V0UHVzaENlcnRpZmljYXRlKEBOdWxsYWJsZSBQdXNoQ2VydGlmaWNhdGUgY2VydCkgeworCQlwdXNoQ2VydCA9IGNlcnQ7CisJCXJldHVybiB0aGlzOworCX0KKworCS8qKgorCSAqIEFkZCBhIGNhbGxiYWNrIHRvIGJlIGludm9rZWQgd2hlbiB0aGUgcHJvcG9zYWwgaXMgZG9uZS4KKwkgKiA8cD4KKwkgKiBBIHByb3Bvc2FsIGlzIGRvbmUgd2hlbiBpdCBoYXMgZW50ZXJlZCBlaXRoZXIge0BsaW5rIFN0YXRlI0VYRUNVVEVEfSBvcgorCSAqIHtAbGluayBTdGF0ZSNBQk9SVEVEfSBzdGF0ZS4gSWYgdGhlIHByb3Bvc2FsIGlzIGFscmVhZHkgZG9uZQorCSAqIHtAY29kZSBjYWxsYmFjay5ydW4oKX0gaXMgaW1tZWRpYXRlbHkgaW52b2tlZCBvbiB0aGUgY2FsbGVyJ3MgdGhyZWFkLgorCSAqCisJICogQHBhcmFtIGNhbGxiYWNrCisJICogICAgICAgICAgICBtZXRob2QgdG8gcnVuIGFmdGVyIHRoZSBwcm9wb3NhbCBpcyBkb25lLiBUaGUgY2FsbGJhY2sgbWF5IGJlCisJICogICAgICAgICAgICBydW4gb24gYSBLZXRjaCBzeXN0ZW0gdGhyZWFkIGFuZCBzaG91bGQgYmUgY29tcGxldGVkIHF1aWNrbHkuCisJICovCisJcHVibGljIHZvaWQgYWRkTGlzdGVuZXIoUnVubmFibGUgY2FsbGJhY2spIHsKKwkJYm9vbGVhbiBydW5Ob3cgPSBmYWxzZTsKKwkJc3luY2hyb25pemVkIChzdGF0ZSkgeworCQkJaWYgKHN0YXRlLmdldCgpLmlzRG9uZSgpKSB7CisJCQkJcnVuTm93ID0gdHJ1ZTsKKwkJCX0gZWxzZSB7CisJCQkJbGlzdGVuZXJzLmFkZChjYWxsYmFjayk7CisJCQl9CisJCX0KKwkJaWYgKHJ1bk5vdykgeworCQkJY2FsbGJhY2sucnVuKCk7CisJCX0KKwl9CisKKwkvKiogU2V0IGNvbW1hbmQgcmVzdWx0IGFzIE9LLiAqLworCXZvaWQgc3VjY2VzcygpIHsKKwkJZm9yIChDb21tYW5kIGMgOiBjb21tYW5kcykgeworCQkJaWYgKGMuZ2V0UmVzdWx0KCkgPT0gTk9UX0FUVEVNUFRFRCkgeworCQkJCWMuc2V0UmVzdWx0KE9LKTsKKwkJCX0KKwkJfQorCQlub3RpZnlTdGF0ZShFWEVDVVRFRCk7CisJfQorCisJLyoqIE1hcmsgY29tbWFuZHMgYXMgInRyYW5zYWN0aW9uIGFib3J0ZWQiLiAqLworCXZvaWQgYWJvcnQoKSB7CisJCUNvbW1hbmQuYWJvcnQoY29tbWFuZHMsIG51bGwpOworCQlub3RpZnlTdGF0ZShBQk9SVEVEKTsKKwl9CisKKwkvKiogQHJldHVybiByZWFkIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBwcm9wb3NhbC4gKi8KKwlwdWJsaWMgU3RhdGUgZ2V0U3RhdGUoKSB7CisJCXJldHVybiBzdGF0ZS5nZXQoKTsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIHtAY29kZSB0cnVlfSBpZiB0aGUgcHJvcG9zYWwgd2FzIGF0dGVtcHRlZC4gQSB0cnVlIHZhbHVlIGRvZXMgbm90CisJICogICAgICAgICBtZWFuIGNvbnNlbnN1cyB3YXMgcmVhY2hlZCwgb25seSB0aGF0IHRoZSBwcm9wb3NhbCB3YXMgY29uc2lkZXJlZAorCSAqICAgICAgICAgYW5kIHdpbGwgbm90IGJlIG1ha2luZyBhbnkgbW9yZSBwcm9ncmVzcyBiZXlvbmQgaXRzIGN1cnJlbnQKKwkgKiAgICAgICAgIHN0YXRlLgorCSAqLworCXB1YmxpYyBib29sZWFuIGlzRG9uZSgpIHsKKwkJcmV0dXJuIHN0YXRlLmdldCgpLmlzRG9uZSgpOworCX0KKworCS8qKgorCSAqIFdhaXQgZm9yIHRoZSBwcm9wb3NhbCB0byBiZSBhdHRlbXB0ZWQgYW5kIHtAbGluayAjaXNEb25lKCl9IHRvIGJlIHRydWUuCisJICoKKwkgKiBAdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uCisJICogICAgICAgICAgICAgY2FsbGVyIHdhcyBpbnRlcnJ1cHRlZCBiZWZvcmUgcHJvcG9zYWwgZXhlY3V0ZWQuCisJICovCisJcHVibGljIHZvaWQgYXdhaXQoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24geworCQlzeW5jaHJvbml6ZWQgKHN0YXRlKSB7CisJCQl3aGlsZSAoIXN0YXRlLmdldCgpLmlzRG9uZSgpKSB7CisJCQkJc3RhdGUud2FpdCgpOworCQkJfQorCQl9CisJfQorCisJLyoqCisJICogV2FpdCBmb3IgdGhlIHByb3Bvc2FsIHRvIGJlIGF0dGVtcHRlZCBhbmQge0BsaW5rICNpc0RvbmUoKX0gdG8gYmUgdHJ1ZS4KKwkgKgorCSAqIEBwYXJhbSB3YWl0CisJICogICAgICAgICAgICBob3cgbG9uZyB0byB3YWl0LgorCSAqIEBwYXJhbSB1bml0CisJICogICAgICAgICAgICB1bml0IGRlc2NyaWJpbmcgdGhlIHdhaXQgdGltZS4KKwkgKiBAcmV0dXJuIHRydWUgaWYgdGhlIHByb3Bvc2FsIGlzIGRvbmU7IGZhbHNlIGlmIHRoZSBtZXRob2QgdGltZWQgb3V0LgorCSAqIEB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24KKwkgKiAgICAgICAgICAgICBjYWxsZXIgd2FzIGludGVycnVwdGVkIGJlZm9yZSBwcm9wb3NhbCBleGVjdXRlZC4KKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBhd2FpdChsb25nIHdhaXQsIFRpbWVVbml0IHVuaXQpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7CisJCXN5bmNocm9uaXplZCAoc3RhdGUpIHsKKwkJCWlmIChzdGF0ZS5nZXQoKS5pc0RvbmUoKSkgeworCQkJCXJldHVybiB0cnVlOworCQkJfQorCQkJc3RhdGUud2FpdCh1bml0LnRvTWlsbGlzKHdhaXQpKTsKKwkJCXJldHVybiBzdGF0ZS5nZXQoKS5pc0RvbmUoKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFdhaXQgZm9yIHRoZSBwcm9wb3NhbCB0byBleGl0IGEgc3RhdGUuCisJICoKKwkgKiBAcGFyYW0gbm90SW4KKwkgKiAgICAgICAgICAgIHN0YXRlIHRoZSBwcm9wb3NhbCBzaG91bGQgbm90IGJlIGluIHRvIHJldHVybi4KKwkgKiBAcGFyYW0gd2FpdAorCSAqICAgICAgICAgICAgaG93IGxvbmcgdG8gd2FpdC4KKwkgKiBAcGFyYW0gdW5pdAorCSAqICAgICAgICAgICAgdW5pdCBkZXNjcmliaW5nIHRoZSB3YWl0IHRpbWUuCisJICogQHJldHVybiB0cnVlIGlmIHRoZSBwcm9wb3NhbCBleGl0ZWQgdGhlIHN0YXRlOyBmYWxzZSBvbiB0aW1lIG91dC4KKwkgKiBAdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uCisJICogICAgICAgICAgICAgY2FsbGVyIHdhcyBpbnRlcnJ1cHRlZCBiZWZvcmUgcHJvcG9zYWwgZXhlY3V0ZWQuCisJICovCisJcHVibGljIGJvb2xlYW4gYXdhaXRTdGF0ZUNoYW5nZShTdGF0ZSBub3RJbiwgbG9uZyB3YWl0LCBUaW1lVW5pdCB1bml0KQorCQkJdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKKwkJc3luY2hyb25pemVkIChzdGF0ZSkgeworCQkJaWYgKHN0YXRlLmdldCgpICE9IG5vdEluKSB7CisJCQkJcmV0dXJuIHRydWU7CisJCQl9CisJCQlzdGF0ZS53YWl0KHVuaXQudG9NaWxsaXMod2FpdCkpOworCQkJcmV0dXJuIHN0YXRlLmdldCgpICE9IG5vdEluOworCQl9CisJfQorCisJdm9pZCBub3RpZnlTdGF0ZShTdGF0ZSBzKSB7CisJCXN5bmNocm9uaXplZCAoc3RhdGUpIHsKKwkJCXN0YXRlLnNldChzKTsKKwkJCXN0YXRlLm5vdGlmeUFsbCgpOworCQl9CisJCWlmIChzLmlzRG9uZSgpKSB7CisJCQlmb3IgKFJ1bm5hYmxlIGNhbGxiYWNrIDogbGlzdGVuZXJzKSB7CisJCQkJY2FsbGJhY2sucnVuKCk7CisJCQl9CisJCQlsaXN0ZW5lcnMuY2xlYXIoKTsKKwkJfQorCX0KKworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCVN0cmluZ0J1aWxkZXIgcyA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisJCXMuYXBwZW5kKCJLZXRjaCBQcm9wb3NhbCB7XG4iKTsgLy8kTk9OLU5MUy0xJAorCQlzLmFwcGVuZCgiICAiKS5hcHBlbmQoc3RhdGUuZ2V0KCkpLmFwcGVuZCgnXG4nKTsgLy8kTk9OLU5MUy0xJAorCQlpZiAoYXV0aG9yICE9IG51bGwpIHsKKwkJCXMuYXBwZW5kKCIgIGF1dGhvciAiKS5hcHBlbmQoYXV0aG9yKS5hcHBlbmQoJ1xuJyk7IC8vJE5PTi1OTFMtMSQKKwkJfQorCQlpZiAobWVzc2FnZSAhPSBudWxsKSB7CisJCQlzLmFwcGVuZCgiICBtZXNzYWdlICIpLmFwcGVuZChtZXNzYWdlKS5hcHBlbmQoJ1xuJyk7IC8vJE5PTi1OTFMtMSQKKwkJfQorCQlmb3IgKENvbW1hbmQgYyA6IGNvbW1hbmRzKSB7CisJCQlzLmFwcGVuZCgiICAiKTsgLy8kTk9OLU5MUy0xJAorCQkJZm9ybWF0KHMsIGMuZ2V0T2xkUmVmKCksICJDUkVBVEUiKTsgLy8kTk9OLU5MUy0xJAorCQkJcy5hcHBlbmQoJyAnKTsKKwkJCWZvcm1hdChzLCBjLmdldE5ld1JlZigpLCAiREVMRVRFIik7IC8vJE5PTi1OTFMtMSQKKwkJCXMuYXBwZW5kKCcgJykuYXBwZW5kKGMuZ2V0UmVmTmFtZSgpKTsKKwkJCWlmIChjLmdldFJlc3VsdCgpICE9IFJlY2VpdmVDb21tYW5kLlJlc3VsdC5OT1RfQVRURU1QVEVEKSB7CisJCQkJcy5hcHBlbmQoJyAnKS5hcHBlbmQoYy5nZXRSZXN1bHQoKSk7IC8vICROT04tTkxTLTEkCisJCQl9CisJCQlzLmFwcGVuZCgnXG4nKTsKKwkJfQorCQlzLmFwcGVuZCgnfScpOworCQlyZXR1cm4gcy50b1N0cmluZygpOworCX0KKworCXByaXZhdGUgc3RhdGljIHZvaWQgZm9ybWF0KFN0cmluZ0J1aWxkZXIgcywgQE51bGxhYmxlIFJlZiByLCBTdHJpbmcgbikgeworCQlpZiAociA9PSBudWxsKSB7CisJCQlzLmFwcGVuZChuKTsKKwkJfSBlbHNlIGlmIChyLmlzU3ltYm9saWMoKSkgeworCQkJcy5hcHBlbmQoci5nZXRUYXJnZXQoKS5nZXROYW1lKCkpOworCQl9IGVsc2UgeworCQkJT2JqZWN0SWQgaWQgPSByLmdldE9iamVjdElkKCk7CisJCQlpZiAoaWQgIT0gbnVsbCkgeworCQkJCXMuYXBwZW5kKGlkLmFiYnJldmlhdGUoOCkubmFtZSgpKTsKKwkJCX0KKwkJfQorCX0KK30KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwva2V0Y2gvUHJvcG9zYWxSb3VuZC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9rZXRjaC9Qcm9wb3NhbFJvdW5kLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM0NDc3YQotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwva2V0Y2gvUHJvcG9zYWxSb3VuZC5qYXZhCkBAIC0wLDAgKzEsMjk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2LCBHb29nbGUgSW5jLgorICogYW5kIG90aGVyIGNvcHlyaWdodCBvd25lcnMgYXMgZG9jdW1lbnRlZCBpbiB0aGUgcHJvamVjdCdzIElQIGxvZy4KKyAqCisgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZQorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYxLjAgd2hpY2gKKyAqIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBpcyByZXByb2R1Y2VkIGJlbG93LCBhbmQgaXMKKyAqIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZWRsLXYxMC5waHAKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAqICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCBJbmMuIG5vciB0aGUKKyAqICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKKyAqICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgorICogICB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5ECisgKiBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAorICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYKKyAqIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK3BhY2thZ2Ugb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5rZXRjaDsKKworaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLmtldGNoLlByb3Bvc2FsLlN0YXRlLlJVTk5JTkc7CisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5TZXQ7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmFubm90YXRpb25zLk51bGxhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5yZWZ0cmVlLkNvbW1hbmQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLnJlZnRyZWUuUmVmVHJlZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db21taXRCdWlsZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLk9iamVjdElkOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLk9iamVjdEluc2VydGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLlBlcnNvbklkZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLlJlZjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5SZXBvc2l0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQucmV2d2Fsay5SZXZDb21taXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrLlJldldhbGs7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuUmVjZWl2ZUNvbW1hbmQ7CisKKy8qKiBBIHtAbGluayBSb3VuZH0gdGhhdCBhZ2dyZWdhdGVzIGFuZCBzZW5kcyB1c2VyIHtAbGluayBQcm9wb3NhbH1zLiAqLworY2xhc3MgUHJvcG9zYWxSb3VuZCBleHRlbmRzIFJvdW5kIHsKKwlwcml2YXRlIGZpbmFsIExpc3Q8UHJvcG9zYWw+IHRvZG87CisJcHJpdmF0ZSBSZWZUcmVlIHF1ZXVlZFRyZWU7CisKKwlQcm9wb3NhbFJvdW5kKEtldGNoTGVhZGVyIGxlYWRlciwgTG9nSW5kZXggaGVhZCwgTGlzdDxQcm9wb3NhbD4gdG9kbywKKwkJCUBOdWxsYWJsZSBSZWZUcmVlIHRyZWUpIHsKKwkJc3VwZXIobGVhZGVyLCBoZWFkKTsKKwkJdGhpcy50b2RvID0gdG9kbzsKKworCQlpZiAodHJlZSAhPSBudWxsICYmIGNhbkNvbWJpbmUodG9kbykpIHsKKwkJCXRoaXMucXVldWVkVHJlZSA9IHRyZWU7CisJCX0gZWxzZSB7CisJCQlsZWFkZXIucm91bmRIb2xkc1JlZmVyZW5jZVRvUmVmVHJlZSA9IGZhbHNlOworCQl9CisJfQorCisJcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBjYW5Db21iaW5lKExpc3Q8UHJvcG9zYWw+IHRvZG8pIHsKKwkJUHJvcG9zYWwgZmlyc3QgPSB0b2RvLmdldCgwKTsKKwkJZm9yIChpbnQgaSA9IDE7IGkgPCB0b2RvLnNpemUoKTsgaSsrKSB7CisJCQlpZiAoIWNhbkNvbWJpbmUoZmlyc3QsIHRvZG8uZ2V0KGkpKSkgeworCQkJCXJldHVybiBmYWxzZTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlwcml2YXRlIHN0YXRpYyBib29sZWFuIGNhbkNvbWJpbmUoUHJvcG9zYWwgYSwgUHJvcG9zYWwgYikgeworCQlTdHJpbmcgYU1zZyA9IG51bGxUb0VtcHR5KGEuZ2V0TWVzc2FnZSgpKTsKKwkJU3RyaW5nIGJNc2cgPSBudWxsVG9FbXB0eShiLmdldE1lc3NhZ2UoKSk7CisJCXJldHVybiBhTXNnLmVxdWFscyhiTXNnKSAmJiBjYW5Db21iaW5lKGEuZ2V0QXV0aG9yKCksIGIuZ2V0QXV0aG9yKCkpOworCX0KKworCXByaXZhdGUgc3RhdGljIFN0cmluZyBudWxsVG9FbXB0eShATnVsbGFibGUgU3RyaW5nIHN0cikgeworCQlyZXR1cm4gc3RyICE9IG51bGwgPyBzdHIgOiAiIjsgLy8kTk9OLU5MUy0xJAorCX0KKworCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gY2FuQ29tYmluZShATnVsbGFibGUgUGVyc29uSWRlbnQgYSwKKwkJCUBOdWxsYWJsZSBQZXJzb25JZGVudCBiKSB7CisJCWlmIChhICE9IG51bGwgJiYgYiAhPSBudWxsKSB7CisJCQkvLyBTYW1lIG5hbWUgYW5kIGVtYWlsIGFkZHJlc3MuIENvbWJpbmUgdGltZXN0YW1wIGFzIHRoZSB0d28KKwkJCS8vIHByb3Bvc2FscyBhcmUgcnVubmluZyBjb25jdXJyZW50bHkgYW5kIGFwcGVhciB0b2dldGhlciBvcgorCQkJLy8gbm90IGF0IGFsbCBmcm9tIHRoZSBwb2ludCBvZiB2aWV3IG9mIGFuIG91dHNpZGUgcmVhZGVyLgorCQkJcmV0dXJuIGEuZ2V0TmFtZSgpLmVxdWFscyhiLmdldE5hbWUoKSkKKwkJCQkJJiYgYS5nZXRFbWFpbEFkZHJlc3MoKS5lcXVhbHMoYi5nZXRFbWFpbEFkZHJlc3MoKSk7CisJCX0KKworCQkvLyBJZiBhIGFuZCBiIGFyZSBudWxsLCBib3RoIHdpbGwgYmUgdGhlIHN5c3RlbSBpZGVudGl0eS4KKwkJcmV0dXJuIGEgPT0gbnVsbCAmJiBiID09IG51bGw7CisJfQorCisJdm9pZCBzdGFydCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCWZvciAoUHJvcG9zYWwgcCA6IHRvZG8pIHsKKwkJCXAubm90aWZ5U3RhdGUoUlVOTklORyk7CisJCX0KKwkJdHJ5IHsKKwkJCU9iamVjdElkIGlkOworCQkJdHJ5IChSZXBvc2l0b3J5IGdpdCA9IGxlYWRlci5vcGVuUmVwb3NpdG9yeSgpKSB7CisJCQkJaWQgPSBpbnNlcnRQcm9wb3NhbHMoZ2l0KTsKKwkJCX0KKwkJCXJ1bkFzeW5jKGlkKTsKKwkJfSBjYXRjaCAoTm9PcCBlKSB7CisJCQlmb3IgKFByb3Bvc2FsIHAgOiB0b2RvKSB7CisJCQkJcC5zdWNjZXNzKCk7CisJCQl9CisJCQlsZWFkZXIubG9jay5sb2NrKCk7CisJCQl0cnkgeworCQkJCWxlYWRlci5uZXh0Um91bmQoKTsKKwkJCX0gZmluYWxseSB7CisJCQkJbGVhZGVyLmxvY2sudW5sb2NrKCk7CisJCQl9CisJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCWFib3J0KCk7CisJCQl0aHJvdyBlOworCQl9CisJfQorCisJcHJpdmF0ZSBPYmplY3RJZCBpbnNlcnRQcm9wb3NhbHMoUmVwb3NpdG9yeSBnaXQpCisJCQl0aHJvd3MgSU9FeGNlcHRpb24sIE5vT3AgeworCQlPYmplY3RJZCBpZDsKKwkJdHJ5IChPYmplY3RJbnNlcnRlciBpbnNlcnRlciA9IGdpdC5uZXdPYmplY3RJbnNlcnRlcigpKSB7CisJCQkvLyBUT0RPKHNvcCkgUHJvY2VzcyBzaWduZWQgcHVzaCBjZXJ0aWZpY2F0ZXMuCisKKwkJCWlmIChxdWV1ZWRUcmVlICE9IG51bGwpIHsKKwkJCQlpZCA9IGluc2VydFNpbmdsZVByb3Bvc2FsKGdpdCwgaW5zZXJ0ZXIpOworCQkJfSBlbHNlIHsKKwkJCQlpZCA9IGluc2VydE11bHRpUHJvcG9zYWwoZ2l0LCBpbnNlcnRlcik7CisJCQl9CisKKwkJCXN0YWdlQ29tbWFuZHMgPSBtYWtlU3RhZ2VMaXN0KGdpdCwgaW5zZXJ0ZXIpOworCQkJaW5zZXJ0ZXIuZmx1c2goKTsKKwkJfQorCQlyZXR1cm4gaWQ7CisJfQorCisJcHJpdmF0ZSBPYmplY3RJZCBpbnNlcnRTaW5nbGVQcm9wb3NhbChSZXBvc2l0b3J5IGdpdCwKKwkJCU9iamVjdEluc2VydGVyIGluc2VydGVyKSB0aHJvd3MgSU9FeGNlcHRpb24sIE5vT3AgeworCQkvLyBGYXN0IHBhdGg6IHRyZWUgaXMgcGFzc2VkIGluIHdpdGggYWxsIHByb3Bvc2FscyBhcHBsaWVkLgorCQlPYmplY3RJZCB0cmVlSWQgPSBxdWV1ZWRUcmVlLndyaXRlVHJlZShpbnNlcnRlcik7CisJCXF1ZXVlZFRyZWUgPSBudWxsOworCQlsZWFkZXIucm91bmRIb2xkc1JlZmVyZW5jZVRvUmVmVHJlZSA9IGZhbHNlOworCisJCWlmICghT2JqZWN0SWQuemVyb0lkKCkuZXF1YWxzKGFjY2VwdGVkT2xkSW5kZXgpKSB7CisJCQl0cnkgKFJldldhbGsgcncgPSBuZXcgUmV2V2FsayhnaXQpKSB7CisJCQkJUmV2Q29tbWl0IGMgPSBydy5wYXJzZUNvbW1pdChhY2NlcHRlZE9sZEluZGV4KTsKKwkJCQlpZiAodHJlZUlkLmVxdWFscyhjLmdldFRyZWUoKSkpIHsKKwkJCQkJdGhyb3cgbmV3IE5vT3AoKTsKKwkJCQl9CisJCQl9CisJCX0KKworCQlQcm9wb3NhbCBwID0gdG9kby5nZXQoMCk7CisJCUNvbW1pdEJ1aWxkZXIgYiA9IG5ldyBDb21taXRCdWlsZGVyKCk7CisJCWIuc2V0VHJlZUlkKHRyZWVJZCk7CisJCWlmICghT2JqZWN0SWQuemVyb0lkKCkuZXF1YWxzKGFjY2VwdGVkT2xkSW5kZXgpKSB7CisJCQliLnNldFBhcmVudElkKGFjY2VwdGVkT2xkSW5kZXgpOworCQl9CisJCWIuc2V0Q29tbWl0dGVyKGxlYWRlci5nZXRTeXN0ZW0oKS5uZXdDb21taXR0ZXIoKSk7CisJCWIuc2V0QXV0aG9yKHAuZ2V0QXV0aG9yKCkgIT0gbnVsbCA/IHAuZ2V0QXV0aG9yKCkgOiBiLmdldENvbW1pdHRlcigpKTsKKwkJYi5zZXRNZXNzYWdlKG1lc3NhZ2UocCkpOworCQlyZXR1cm4gaW5zZXJ0ZXIuaW5zZXJ0KGIpOworCX0KKworCXByaXZhdGUgT2JqZWN0SWQgaW5zZXJ0TXVsdGlQcm9wb3NhbChSZXBvc2l0b3J5IGdpdCwKKwkJCU9iamVjdEluc2VydGVyIGluc2VydGVyKSB0aHJvd3MgSU9FeGNlcHRpb24sIE5vT3AgeworCQkvLyBUaGUgdHJlZSB3YXMgbm90IHBhc3NlZCBpbiwgb3IgdGhlcmUgYXJlIG11bHRpcGxlIHByb3Bvc2FscworCQkvLyBlYWNoIG5lZWRpbmcgdGhlaXIgb3duIGNvbW1pdC4gUmVzZXQgdGhlIHRyZWUgYW5kIHJlcGxheSBlYWNoCisJCS8vIHByb3Bvc2FsIGluIG9yZGVyIGFzIGluZGl2aWR1YWwgY29tbWl0cy4KKwkJT2JqZWN0SWQgbGFzdEluZGV4ID0gYWNjZXB0ZWRPbGRJbmRleDsKKwkJT2JqZWN0SWQgb2xkVHJlZUlkOworCQlSZWZUcmVlIHRyZWU7CisJCWlmIChPYmplY3RJZC56ZXJvSWQoKS5lcXVhbHMobGFzdEluZGV4KSkgeworCQkJb2xkVHJlZUlkID0gT2JqZWN0SWQuemVyb0lkKCk7CisJCQl0cmVlID0gUmVmVHJlZS5uZXdFbXB0eVRyZWUoKTsKKwkJfSBlbHNlIHsKKwkJCXRyeSAoUmV2V2FsayBydyA9IG5ldyBSZXZXYWxrKGdpdCkpIHsKKwkJCQlSZXZDb21taXQgYyA9IHJ3LnBhcnNlQ29tbWl0KGxhc3RJbmRleCk7CisJCQkJb2xkVHJlZUlkID0gYy5nZXRUcmVlKCk7CisJCQkJdHJlZSA9IFJlZlRyZWUucmVhZChydy5nZXRPYmplY3RSZWFkZXIoKSwgYy5nZXRUcmVlKCkpOworCQkJfQorCQl9CisKKwkJUGVyc29uSWRlbnQgY29tbWl0dGVyID0gbGVhZGVyLmdldFN5c3RlbSgpLm5ld0NvbW1pdHRlcigpOworCQlmb3IgKFByb3Bvc2FsIHAgOiB0b2RvKSB7CisJCQlpZiAoIXRyZWUuYXBwbHkocC5nZXRDb21tYW5kcygpKSkgeworCQkJCS8vIFRoaXMgc2hvdWxkIG5vdCBvY2N1ciwgcHJldmlvdXNseSBkdXJpbmcgcXVldWluZyB0aGUKKwkJCQkvLyBjb21tYW5kcyB3ZXJlIHN1Y2Nlc3NmdWxseSBhcHBsaWVkIHRvIHRoZSBwZW5kaW5nIHRyZWUuCisJCQkJLy8gQWJvcnQgdGhlIGVudGlyZSByb3VuZC4KKwkJCQl0aHJvdyBuZXcgSU9FeGNlcHRpb24oCisJCQkJCQlLZXRjaFRleHQuZ2V0KCkucXVldWVkUHJvcG9zYWxGYWlsZWRUb0FwcGx5KTsKKwkJCX0KKworCQkJT2JqZWN0SWQgdHJlZUlkID0gdHJlZS53cml0ZVRyZWUoaW5zZXJ0ZXIpOworCQkJaWYgKHRyZWVJZC5lcXVhbHMob2xkVHJlZUlkKSkgeworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlDb21taXRCdWlsZGVyIGIgPSBuZXcgQ29tbWl0QnVpbGRlcigpOworCQkJYi5zZXRUcmVlSWQodHJlZUlkKTsKKwkJCWlmICghT2JqZWN0SWQuemVyb0lkKCkuZXF1YWxzKGxhc3RJbmRleCkpIHsKKwkJCQliLnNldFBhcmVudElkKGxhc3RJbmRleCk7CisJCQl9CisJCQliLnNldEF1dGhvcihwLmdldEF1dGhvcigpICE9IG51bGwgPyBwLmdldEF1dGhvcigpIDogY29tbWl0dGVyKTsKKwkJCWIuc2V0Q29tbWl0dGVyKGNvbW1pdHRlcik7CisJCQliLnNldE1lc3NhZ2UobWVzc2FnZShwKSk7CisJCQlsYXN0SW5kZXggPSBpbnNlcnRlci5pbnNlcnQoYik7CisJCX0KKwkJaWYgKGxhc3RJbmRleC5lcXVhbHMoYWNjZXB0ZWRPbGRJbmRleCkpIHsKKwkJCXRocm93IG5ldyBOb09wKCk7CisJCX0KKwkJcmV0dXJuIGxhc3RJbmRleDsKKwl9CisKKwlwcml2YXRlIFN0cmluZyBtZXNzYWdlKFByb3Bvc2FsIHApIHsKKwkJU3RyaW5nQnVpbGRlciBtID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwkJU3RyaW5nIG1zZyA9IHAuZ2V0TWVzc2FnZSgpOworCQlpZiAobXNnICE9IG51bGwgJiYgIW1zZy5pc0VtcHR5KCkpIHsKKwkJCW0uYXBwZW5kKG1zZyk7CisJCQl3aGlsZSAobS5sZW5ndGgoKSA8IDIgfHwgbS5jaGFyQXQobS5sZW5ndGgoKSAtIDIpICE9ICdcbicKKwkJCQkJfHwgbS5jaGFyQXQobS5sZW5ndGgoKSAtIDEpICE9ICdcbicpIHsKKwkJCQltLmFwcGVuZCgnXG4nKTsKKwkJCX0KKwkJfQorCQltLmFwcGVuZChLZXRjaENvbnN0YW50cy5URVJNLmdldE5hbWUoKSkKKwkJCQkuYXBwZW5kKCI6ICIpIC8vJE5PTi1OTFMtMSQKKwkJCQkuYXBwZW5kKGxlYWRlci5nZXRUZXJtKCkpOworCQlyZXR1cm4gbS50b1N0cmluZygpOworCX0KKworCXZvaWQgYWJvcnQoKSB7CisJCWZvciAoUHJvcG9zYWwgcCA6IHRvZG8pIHsKKwkJCXAuYWJvcnQoKTsKKwkJfQorCX0KKworCXZvaWQgc3VjY2VzcygpIHsKKwkJZm9yIChQcm9wb3NhbCBwIDogdG9kbykgeworCQkJcC5zdWNjZXNzKCk7CisJCX0KKwl9CisKKwlwcml2YXRlIExpc3Q8UmVjZWl2ZUNvbW1hbmQ+IG1ha2VTdGFnZUxpc3QoUmVwb3NpdG9yeSBnaXQsCisJCQlPYmplY3RJbnNlcnRlciBpbnNlcnRlcikgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJLy8gRm9yIGVhY2ggYnJhbmNoLCBjb2xsYXBzZSBjb25zZWN1dGl2ZSB1cGRhdGVzIHRvIG9ubHkgbW9zdCByZWNlbnQsCisJCS8vIGF2b2lkaW5nIHNlbmRpbmcgbXVsdGlwbGUgb2JqZWN0cyBpbiBhIHJhcGlkIGZhc3QtZm9yd2FyZCBjaGFpbiwgb3IKKwkJLy8gcmV3cml0dGVuIGNvbnRlbnQuCisJCU1hcDxTdHJpbmcsIE9iamVjdElkPiBieVJlZiA9IG5ldyBIYXNoTWFwPD4oKTsKKwkJZm9yIChQcm9wb3NhbCBwIDogdG9kbykgeworCQkJZm9yIChDb21tYW5kIGMgOiBwLmdldENvbW1hbmRzKCkpIHsKKwkJCQlSZWYgbiA9IGMuZ2V0TmV3UmVmKCk7CisJCQkJaWYgKG4gIT0gbnVsbCAmJiAhbi5pc1N5bWJvbGljKCkpIHsKKwkJCQkJYnlSZWYucHV0KG4uZ2V0TmFtZSgpLCBuLmdldE9iamVjdElkKCkpOworCQkJCX0KKwkJCX0KKwkJfQorCQlpZiAoYnlSZWYuaXNFbXB0eSgpKSB7CisJCQlyZXR1cm4gQ29sbGVjdGlvbnMuZW1wdHlMaXN0KCk7CisJCX0KKworCQlTZXQ8T2JqZWN0SWQ+IG5ld09ianMgPSBuZXcgSGFzaFNldDw+KGJ5UmVmLnZhbHVlcygpKTsKKwkJU3RhZ2VCdWlsZGVyIGIgPSBuZXcgU3RhZ2VCdWlsZGVyKAorCQkJCWxlYWRlci5nZXRTeXN0ZW0oKS5nZXRUeG5TdGFnZSgpLAorCQkJCWFjY2VwdGVkTmV3SW5kZXgpOworCQlyZXR1cm4gYi5tYWtlU3RhZ2VMaXN0KG5ld09ianMsIGdpdCwgaW5zZXJ0ZXIpOworCX0KKworCisJcHJpdmF0ZSBzdGF0aWMgY2xhc3MgTm9PcCBleHRlbmRzIEV4Y2VwdGlvbiB7CisJCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOworCX0KK30KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwva2V0Y2gvUmVtb3RlR2l0UmVwbGljYS5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9rZXRjaC9SZW1vdGVHaXRSZXBsaWNhLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY0YTE3OAotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwva2V0Y2gvUmVtb3RlR2l0UmVwbGljYS5qYXZhCkBAIC0wLDAgKzEsMzE2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2LCBHb29nbGUgSW5jLgorICogYW5kIG90aGVyIGNvcHlyaWdodCBvd25lcnMgYXMgZG9jdW1lbnRlZCBpbiB0aGUgcHJvamVjdCdzIElQIGxvZy4KKyAqCisgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZQorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYxLjAgd2hpY2gKKyAqIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBpcyByZXByb2R1Y2VkIGJlbG93LCBhbmQgaXMKKyAqIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZWRsLXYxMC5waHAKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAqICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCBJbmMuIG5vciB0aGUKKyAqICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKKyAqICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgorICogICB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5ECisgKiBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAorICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYKKyAqIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK3BhY2thZ2Ugb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5rZXRjaDsKKworaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLmtldGNoLktldGNoUmVwbGljYS5Db21taXRNZXRob2QuQUxMX1JFRlM7CitpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LlJlY2VpdmVDb21tYW5kLlJlc3VsdC5MT0NLX0ZBSUxVUkU7CitpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LlJlY2VpdmVDb21tYW5kLlJlc3VsdC5OT1RfQVRURU1QVEVEOworaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5SZWNlaXZlQ29tbWFuZC5SZXN1bHQuT0s7CitpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LlJlY2VpdmVDb21tYW5kLlJlc3VsdC5SRUpFQ1RFRF9OT0RFTEVURTsKK2ltcG9ydCBzdGF0aWMgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuUmVjZWl2ZUNvbW1hbmQuUmVzdWx0LlJFSkVDVEVEX05PTkZBU1RGT1JXQVJEOworaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5SZWNlaXZlQ29tbWFuZC5SZXN1bHQuUkVKRUNURURfT1RIRVJfUkVBU09OOworaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5SZWYuU3RvcmFnZS5ORVRXT1JLOworCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKK2ltcG9ydCBqYXZhLnV0aWwuTGlua2VkSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5hbm5vdGF0aW9ucy5OdWxsYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmVycm9ycy5Ob3RTdXBwb3J0ZWRFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5lcnJvcnMuVHJhbnNwb3J0RXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLkFueU9iamVjdElkOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLk51bGxQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuT2JqZWN0SWQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuT2JqZWN0SWRSZWY7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuUmVmOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLlJlcG9zaXRvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuRmV0Y2hDb25uZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LlB1c2hDb25uZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LlJlY2VpdmVDb21tYW5kOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LlJlbW90ZUNvbmZpZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5SZW1vdGVSZWZVcGRhdGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuVHJhbnNwb3J0OworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LlVSSWlzaDsKKworLyoqCisgKiBSZXByZXNlbnRhdGlvbiBvZiBhIEdpdCByZXBvc2l0b3J5IG9uIGEgcmVtb3RlIHJlcGxpY2Egc3lzdGVtLgorICogPHA+CisgKiB7QGxpbmsgS2V0Y2hMZWFkZXJ9IHdpbGwgY29udGFjdCB0aGUgcmVwbGljYSB1c2luZyB0aGUgR2l0IHdpcmUgcHJvdG9jb2wuCisgKiA8cD4KKyAqIFRoZSByZW1vdGUgcmVwbGljYSBtYXkgYmUgZnVsbHkgS2V0Y2gtYXdhcmUsIG9yIGEgc3RhbmRhcmQgR2l0IHNlcnZlci4KKyAqLworcHVibGljIGNsYXNzIFJlbW90ZUdpdFJlcGxpY2EgZXh0ZW5kcyBLZXRjaFJlcGxpY2EgeworCXByaXZhdGUgZmluYWwgVVJJaXNoIHVyaTsKKwlwcml2YXRlIGZpbmFsIFJlbW90ZUNvbmZpZyByZW1vdGVDb25maWc7CisKKwkvKioKKwkgKiBDb25maWd1cmUgYSBuZXcgcmVtb3RlLgorCSAqCisJICogQHBhcmFtIGxlYWRlcgorCSAqICAgICAgICAgICAgaW5zdGFuY2UgdGhpcyByZXBsaWNhIGZvbGxvd3MuCisJICogQHBhcmFtIG5hbWUKKwkgKiAgICAgICAgICAgIHVuaXF1ZS1pc2ggbmFtZSBpZGVudGlmeWluZyB0aGlzIHJlbW90ZSBmb3IgZGVidWdnaW5nLgorCSAqIEBwYXJhbSB1cmkKKwkgKiAgICAgICAgICAgIFVSSSB0byBjb25uZWN0IHRvIHRoZSBmb2xsb3dlcidzIHJlcG9zaXRvcnkuCisJICogQHBhcmFtIGNmZworCSAqICAgICAgICAgICAgaG93IEtldGNoIHNob3VsZCB0cmVhdCB0aGUgcmVtb3RlIHN5c3RlbS4KKwkgKiBAcGFyYW0gcmMKKwkgKiAgICAgICAgICAgIG9wdGlvbmFsIHJlbW90ZSBjb25maWd1cmF0aW9uIGRlc2NyaWJpbmcgaG93IHRvIGNvbnRhY3QgdGhlCisJICogICAgICAgICAgICBwZWVyIHJlcG9zaXRvcnkuCisJICovCisJcHVibGljIFJlbW90ZUdpdFJlcGxpY2EoS2V0Y2hMZWFkZXIgbGVhZGVyLCBTdHJpbmcgbmFtZSwgVVJJaXNoIHVyaSwKKwkJCVJlcGxpY2FDb25maWcgY2ZnLCBATnVsbGFibGUgUmVtb3RlQ29uZmlnIHJjKSB7CisJCXN1cGVyKGxlYWRlciwgbmFtZSwgY2ZnKTsKKwkJdGhpcy51cmkgPSB1cmk7CisJCXRoaXMucmVtb3RlQ29uZmlnID0gcmM7CisJfQorCisJLyoqIEByZXR1cm4gVVJJIHRvIGNvbnRhY3QgdGhlIHJlbW90ZSBwZWVyIHJlcG9zaXRvcnkuICovCisJcHVibGljIFVSSWlzaCBnZXRVUkkoKSB7CisJCXJldHVybiB1cmk7CisJfQorCisJLyoqIEByZXR1cm4gb3B0aW9uYWwgY29uZmlndXJhdGlvbiBkZXNjcmliaW5nIGhvdyB0byBjb250YWN0IHRoZSBwZWVyLiAqLworCUBOdWxsYWJsZQorCXByb3RlY3RlZCBSZW1vdGVDb25maWcgZ2V0UmVtb3RlQ29uZmlnKCkgeworCQlyZXR1cm4gcmVtb3RlQ29uZmlnOworCX0KKworCUBPdmVycmlkZQorCXByb3RlY3RlZCBTdHJpbmcgZGVzY3JpYmVGb3JMb2coKSB7CisJCXJldHVybiBTdHJpbmcuZm9ybWF0KCIlcyBAICVzIiwgZ2V0TmFtZSgpLCBnZXRVUkkoKSk7IC8vJE5PTi1OTFMtMSQKKwl9CisKKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBzdGFydFB1c2goZmluYWwgUmVwbGljYVB1c2hSZXF1ZXN0IHJlcSkgeworCQlnZXRTeXN0ZW0oKS5nZXRFeGVjdXRvcigpLmV4ZWN1dGUobmV3IFJ1bm5hYmxlKCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJdHJ5IChSZXBvc2l0b3J5IGdpdCA9IGdldExlYWRlcigpLm9wZW5SZXBvc2l0b3J5KCkpIHsKKwkJCQkJdHJ5IHsKKwkJCQkJCXB1c2goZ2l0LCByZXEpOworCQkJCQkJcmVxLmRvbmUoZ2l0KTsKKwkJCQkJfSBjYXRjaCAoVGhyb3dhYmxlIGVycikgeworCQkJCQkJcmVxLnNldEV4Y2VwdGlvbihnaXQsIGVycik7CisJCQkJCX0KKwkJCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlcnIpIHsKKwkJCQkJcmVxLnNldEV4Y2VwdGlvbihudWxsLCBlcnIpOworCQkJCX0KKwkJCX0KKwkJfSk7CisJfQorCisJcHJpdmF0ZSB2b2lkIHB1c2goUmVwb3NpdG9yeSByZXBvLCBSZXBsaWNhUHVzaFJlcXVlc3QgcmVxKQorCQkJdGhyb3dzIE5vdFN1cHBvcnRlZEV4Y2VwdGlvbiwgVHJhbnNwb3J0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CisJCU1hcDxTdHJpbmcsIFJlZj4gYWR2OworCQlMaXN0PFJlbW90ZUNvbW1hbmQ+IGNtZHMgPSBhc1VwZGF0ZUxpc3QocmVxLmdldENvbW1hbmRzKCkpOworCQl0cnkgKFRyYW5zcG9ydCB0cmFuc3BvcnQgPSBUcmFuc3BvcnQub3BlbihyZXBvLCB1cmkpKSB7CisJCQlSZW1vdGVDb25maWcgcmMgPSBnZXRSZW1vdGVDb25maWcoKTsKKwkJCWlmIChyYyAhPSBudWxsKSB7CisJCQkJdHJhbnNwb3J0LmFwcGx5Q29uZmlnKHJjKTsKKwkJCX0KKwkJCXRyYW5zcG9ydC5zZXRQdXNoQXRvbWljKHRydWUpOworCQkJYWR2ID0gcHVzaChyZXBvLCB0cmFuc3BvcnQsIGNtZHMpOworCQl9CisJCWZvciAoUmVtb3RlQ29tbWFuZCBjIDogY21kcykgeworCQkJYy5jb3B5U3RhdHVzVG9SZXN1bHQoKTsKKwkJfQorCQlyZXEuc2V0UmVmcyhhZHYpOworCX0KKworCXByaXZhdGUgTWFwPFN0cmluZywgUmVmPiBwdXNoKFJlcG9zaXRvcnkgZ2l0LCBUcmFuc3BvcnQgdHJhbnNwb3J0LAorCQkJTGlzdDxSZW1vdGVDb21tYW5kPiBjbWRzKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQlNYXA8U3RyaW5nLCBSZW1vdGVSZWZVcGRhdGU+IHVwZGF0ZXMgPSBhc1VwZGF0ZU1hcChjbWRzKTsKKwkJdHJ5IChQdXNoQ29ubmVjdGlvbiBjb25uZWN0aW9uID0gdHJhbnNwb3J0Lm9wZW5QdXNoKCkpIHsKKwkJCU1hcDxTdHJpbmcsIFJlZj4gYWR2ID0gY29ubmVjdGlvbi5nZXRSZWZzTWFwKCk7CisJCQlSZW1vdGVSZWZVcGRhdGUgYWNjZXB0ZWQgPSB1cGRhdGVzLmdldChnZXRTeXN0ZW0oKS5nZXRUeG5BY2NlcHRlZCgpKTsKKwkJCWlmIChhY2NlcHRlZCAhPSBudWxsICYmICFpc0V4cGVjdGVkVmFsdWUoYWR2LCBhY2NlcHRlZCkpIHsKKwkJCQlhYm9ydChjbWRzKTsKKwkJCQlyZXR1cm4gYWR2OworCQkJfQorCisJCQlSZW1vdGVSZWZVcGRhdGUgY29tbWl0dGVkID0gdXBkYXRlcy5nZXQoZ2V0U3lzdGVtKCkuZ2V0VHhuQ29tbWl0dGVkKCkpOworCQkJaWYgKGNvbW1pdHRlZCAhPSBudWxsICYmICFpc0V4cGVjdGVkVmFsdWUoYWR2LCBjb21taXR0ZWQpKSB7CisJCQkJYWJvcnQoY21kcyk7CisJCQkJcmV0dXJuIGFkdjsKKwkJCX0KKwkJCWlmIChjb21taXR0ZWQgIT0gbnVsbCAmJiBnZXRDb21taXRNZXRob2QoKSA9PSBBTExfUkVGUykgeworCQkJCXByZXBhcmVDb21taXQoZ2l0LCBjbWRzLCB1cGRhdGVzLCBhZHYsCisJCQkJCQljb21taXR0ZWQuZ2V0TmV3T2JqZWN0SWQoKSk7CisJCQl9CisKKwkJCWNvbm5lY3Rpb24ucHVzaChOdWxsUHJvZ3Jlc3NNb25pdG9yLklOU1RBTkNFLCB1cGRhdGVzKTsKKwkJCXJldHVybiBhZHY7CisJCX0KKwl9CisKKwlwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzRXhwZWN0ZWRWYWx1ZShNYXA8U3RyaW5nLCBSZWY+IGFkdiwKKwkJCVJlbW90ZVJlZlVwZGF0ZSB1KSB7CisJCVJlZiByID0gYWR2LmdldCh1LmdldFJlbW90ZU5hbWUoKSk7CisJCWlmICghQW55T2JqZWN0SWQuZXF1YWxzKGdldElkKHIpLCB1LmdldEV4cGVjdGVkT2xkT2JqZWN0SWQoKSkpIHsKKwkJCSgoUmVtb3RlQ29tbWFuZCkgdSkuY21kLnNldFJlc3VsdChMT0NLX0ZBSUxVUkUpOworCQkJcmV0dXJuIGZhbHNlOworCQl9CisJCXJldHVybiB0cnVlOworCX0KKworCXByaXZhdGUgdm9pZCBwcmVwYXJlQ29tbWl0KFJlcG9zaXRvcnkgZ2l0LCBMaXN0PFJlbW90ZUNvbW1hbmQ+IGNtZHMsCisJCQlNYXA8U3RyaW5nLCBSZW1vdGVSZWZVcGRhdGU+IHVwZGF0ZXMsIE1hcDxTdHJpbmcsIFJlZj4gYWR2LAorCQkJT2JqZWN0SWQgY29tbWl0dGVkKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQlmb3IgKFJlY2VpdmVDb21tYW5kIGNtZCA6IHByZXBhcmVDb21taXQoZ2l0LCBhZHYsIGNvbW1pdHRlZCkpIHsKKwkJCVJlbW90ZUNvbW1hbmQgYyA9IG5ldyBSZW1vdGVDb21tYW5kKGNtZCk7CisJCQljbWRzLmFkZChjKTsKKwkJCXVwZGF0ZXMucHV0KGMuZ2V0UmVtb3RlTmFtZSgpLCBjKTsKKwkJfQorCX0KKworCXByaXZhdGUgc3RhdGljIExpc3Q8UmVtb3RlQ29tbWFuZD4gYXNVcGRhdGVMaXN0KAorCQkJQ29sbGVjdGlvbjxSZWNlaXZlQ29tbWFuZD4gY21kcykgeworCQl0cnkgeworCQkJTGlzdDxSZW1vdGVDb21tYW5kPiB0b1B1c2ggPSBuZXcgQXJyYXlMaXN0PD4oY21kcy5zaXplKCkpOworCQkJZm9yIChSZWNlaXZlQ29tbWFuZCBjbWQgOiBjbWRzKSB7CisJCQkJdG9QdXNoLmFkZChuZXcgUmVtb3RlQ29tbWFuZChjbWQpKTsKKwkJCX0KKwkJCXJldHVybiB0b1B1c2g7CisJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCS8vIENhbm5vdCBvY2N1ciBhcyBubyBJTyB3YXMgcmVxdWlyZWQgdG8gYnVpbGQgdGhlIGNvbW1hbmQuCisJCQl0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKGUpOworCQl9CisJfQorCisJcHJpdmF0ZSBzdGF0aWMgTWFwPFN0cmluZywgUmVtb3RlUmVmVXBkYXRlPiBhc1VwZGF0ZU1hcCgKKwkJCUxpc3Q8UmVtb3RlQ29tbWFuZD4gY21kcykgeworCQlNYXA8U3RyaW5nLCBSZW1vdGVSZWZVcGRhdGU+IG0gPSBuZXcgTGlua2VkSGFzaE1hcDw+KCk7CisJCWZvciAoUmVtb3RlQ29tbWFuZCBjbWQgOiBjbWRzKSB7CisJCQltLnB1dChjbWQuZ2V0UmVtb3RlTmFtZSgpLCBjbWQpOworCQl9CisJCXJldHVybiBtOworCX0KKworCXByaXZhdGUgc3RhdGljIHZvaWQgYWJvcnQoTGlzdDxSZW1vdGVDb21tYW5kPiBjbWRzKSB7CisJCUxpc3Q8UmVjZWl2ZUNvbW1hbmQ+IHRtcCA9IG5ldyBBcnJheUxpc3Q8PihjbWRzLnNpemUoKSk7CisJCWZvciAoUmVtb3RlQ29tbWFuZCBjbWQgOiBjbWRzKSB7CisJCQl0bXAuYWRkKGNtZC5jbWQpOworCQl9CisJCVJlY2VpdmVDb21tYW5kLmFib3J0KHRtcCk7CisJfQorCisJcHJvdGVjdGVkIHZvaWQgYmxvY2tpbmdGZXRjaChSZXBvc2l0b3J5IHJlcG8sIFJlcGxpY2FGZXRjaFJlcXVlc3QgcmVxKQorCQkJdGhyb3dzIE5vdFN1cHBvcnRlZEV4Y2VwdGlvbiwgVHJhbnNwb3J0RXhjZXB0aW9uIHsKKwkJdHJ5IChUcmFuc3BvcnQgdHJhbnNwb3J0ID0gVHJhbnNwb3J0Lm9wZW4ocmVwbywgdXJpKSkgeworCQkJUmVtb3RlQ29uZmlnIHJjID0gZ2V0UmVtb3RlQ29uZmlnKCk7CisJCQlpZiAocmMgIT0gbnVsbCkgeworCQkJCXRyYW5zcG9ydC5hcHBseUNvbmZpZyhyYyk7CisJCQl9CisJCQlmZXRjaCh0cmFuc3BvcnQsIHJlcSk7CisJCX0KKwl9CisKKwlwcml2YXRlIHZvaWQgZmV0Y2goVHJhbnNwb3J0IHRyYW5zcG9ydCwgUmVwbGljYUZldGNoUmVxdWVzdCByZXEpCisJCQl0aHJvd3MgTm90U3VwcG9ydGVkRXhjZXB0aW9uLCBUcmFuc3BvcnRFeGNlcHRpb24geworCQl0cnkgKEZldGNoQ29ubmVjdGlvbiBjb25uID0gdHJhbnNwb3J0Lm9wZW5GZXRjaCgpKSB7CisJCQlNYXA8U3RyaW5nLCBSZWY+IHJlbW90ZVJlZnMgPSBjb25uLmdldFJlZnNNYXAoKTsKKwkJCXJlcS5zZXRSZWZzKHJlbW90ZVJlZnMpOworCisJCQlMaXN0PFJlZj4gd2FudCA9IG5ldyBBcnJheUxpc3Q8PigpOworCQkJZm9yIChTdHJpbmcgbmFtZSA6IHJlcS5nZXRXYW50UmVmcygpKSB7CisJCQkJUmVmIHJlZiA9IHJlbW90ZVJlZnMuZ2V0KG5hbWUpOworCQkJCWlmIChyZWYgIT0gbnVsbCAmJiByZWYuZ2V0T2JqZWN0SWQoKSAhPSBudWxsKSB7CisJCQkJCXdhbnQuYWRkKHJlZik7CisJCQkJfQorCQkJfQorCQkJZm9yIChPYmplY3RJZCBpZCA6IHJlcS5nZXRXYW50T2JqZWN0cygpKSB7CisJCQkJd2FudC5hZGQobmV3IE9iamVjdElkUmVmLlVucGVlbGVkKE5FVFdPUkssIGlkLm5hbWUoKSwgaWQpKTsKKwkJCX0KKworCQkJY29ubi5mZXRjaChOdWxsUHJvZ3Jlc3NNb25pdG9yLklOU1RBTkNFLCB3YW50LAorCQkJCQlDb2xsZWN0aW9ucy48T2JqZWN0SWQ+IGVtcHR5U2V0KCkpOworCQl9CisJfQorCisJc3RhdGljIGNsYXNzIFJlbW90ZUNvbW1hbmQgZXh0ZW5kcyBSZW1vdGVSZWZVcGRhdGUgeworCQlmaW5hbCBSZWNlaXZlQ29tbWFuZCBjbWQ7CisKKwkJUmVtb3RlQ29tbWFuZChSZWNlaXZlQ29tbWFuZCBjbWQpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCQlzdXBlcihudWxsLCBudWxsLAorCQkJCQljbWQuZ2V0TmV3SWQoKSwgY21kLmdldFJlZk5hbWUoKSwKKwkJCQkJdHJ1ZSAvKiBmb3JjZSB1cGRhdGUgKi8sCisJCQkJCW51bGwgLyogbm8gbG9jYWwgdHJhY2tpbmcgcmVmICovLAorCQkJCQljbWQuZ2V0T2xkSWQoKSk7CisJCQl0aGlzLmNtZCA9IGNtZDsKKwkJfQorCisJCXZvaWQgY29weVN0YXR1c1RvUmVzdWx0KCkgeworCQkJaWYgKGNtZC5nZXRSZXN1bHQoKSA9PSBOT1RfQVRURU1QVEVEKSB7CisJCQkJc3dpdGNoIChnZXRTdGF0dXMoKSkgeworCQkJCWNhc2UgT0s6CisJCQkJY2FzZSBVUF9UT19EQVRFOgorCQkJCWNhc2UgTk9OX0VYSVNUSU5HOgorCQkJCQljbWQuc2V0UmVzdWx0KE9LKTsKKwkJCQkJYnJlYWs7CisKKwkJCQljYXNlIFJFSkVDVEVEX05PREVMRVRFOgorCQkJCQljbWQuc2V0UmVzdWx0KFJFSkVDVEVEX05PREVMRVRFKTsKKwkJCQkJYnJlYWs7CisKKwkJCQljYXNlIFJFSkVDVEVEX05PTkZBU1RGT1JXQVJEOgorCQkJCQljbWQuc2V0UmVzdWx0KFJFSkVDVEVEX05PTkZBU1RGT1JXQVJEKTsKKwkJCQkJYnJlYWs7CisKKwkJCQljYXNlIFJFSkVDVEVEX09USEVSX1JFQVNPTjoKKwkJCQkJY21kLnNldFJlc3VsdChSRUpFQ1RFRF9PVEhFUl9SRUFTT04sIGdldE1lc3NhZ2UoKSk7CisJCQkJCWJyZWFrOworCisJCQkJZGVmYXVsdDoKKwkJCQkJY21kLnNldFJlc3VsdChSRUpFQ1RFRF9PVEhFUl9SRUFTT04sIGdldFN0YXR1cygpLm5hbWUoKSk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfQorCX0KK30KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwva2V0Y2gvUmVwbGljYUNvbmZpZy5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9rZXRjaC9SZXBsaWNhQ29uZmlnLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE2ZTYzYQotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwva2V0Y2gvUmVwbGljYUNvbmZpZy5qYXZhCkBAIC0wLDAgKzEsMjMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2LCBHb29nbGUgSW5jLgorICogYW5kIG90aGVyIGNvcHlyaWdodCBvd25lcnMgYXMgZG9jdW1lbnRlZCBpbiB0aGUgcHJvamVjdCdzIElQIGxvZy4KKyAqCisgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZQorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYxLjAgd2hpY2gKKyAqIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBpcyByZXByb2R1Y2VkIGJlbG93LCBhbmQgaXMKKyAqIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZWRsLXYxMC5waHAKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAqICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCBJbmMuIG5vciB0aGUKKyAqICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKKyAqICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgorICogICB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5ECisgKiBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAorICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYKKyAqIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK3BhY2thZ2Ugb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5rZXRjaDsKKworaW1wb3J0IHN0YXRpYyBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lVW5pdC5EQVlTOworaW1wb3J0IHN0YXRpYyBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lVW5pdC5IT1VSUzsKK2ltcG9ydCBzdGF0aWMgamF2YS51dGlsLmNvbmN1cnJlbnQuVGltZVVuaXQuTUlMTElTRUNPTkRTOworaW1wb3J0IHN0YXRpYyBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lVW5pdC5NSU5VVEVTOworaW1wb3J0IHN0YXRpYyBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lVW5pdC5TRUNPTkRTOworaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLmtldGNoLktldGNoQ29uc3RhbnRzLkNPTkZJR19LRVlfQ09NTUlUOworaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLmtldGNoLktldGNoQ29uc3RhbnRzLkNPTkZJR19LRVlfU1BFRUQ7CitpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwua2V0Y2guS2V0Y2hDb25zdGFudHMuQ09ORklHX0tFWV9UWVBFOworaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25maWdDb25zdGFudHMuQ09ORklHX0tFWV9SRU1PVEU7CisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lVW5pdDsKK2ltcG9ydCBqYXZhLnV0aWwucmVnZXguTWF0Y2hlcjsKK2ltcG9ydCBqYXZhLnV0aWwucmVnZXguUGF0dGVybjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwua2V0Y2guS2V0Y2hSZXBsaWNhLkNvbW1pdE1ldGhvZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLmtldGNoLktldGNoUmVwbGljYS5Db21taXRTcGVlZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLmtldGNoLktldGNoUmVwbGljYS5QYXJ0aWNpcGF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLkNvbmZpZzsKKworLyoqIENvbmZpZ3VyZXMgYSB7QGxpbmsgS2V0Y2hSZXBsaWNhfS4gKi8KK3B1YmxpYyBjbGFzcyBSZXBsaWNhQ29uZmlnIHsKKwkvKioKKwkgKiBSZWFkIGEgY29uZmlndXJhdGlvbiBmcm9tIGEgY29uZmlnIGJsb2NrLgorCSAqCisJICogQHBhcmFtIGNmZworCSAqICAgICAgICAgICAgY29uZmlndXJhdGlvbiB0byByZWFkLgorCSAqIEBwYXJhbSBuYW1lCisJICogICAgICAgICAgICBvZiB0aGUgcmVwbGljYSBiZWluZyBjb25maWd1cmVkLgorCSAqIEByZXR1cm4gcmVwbGljYSBjb25maWd1cmF0aW9uIGZvciB7QGNvZGUgbmFtZX0uCisJICovCisJcHVibGljIHN0YXRpYyBSZXBsaWNhQ29uZmlnIG5ld0Zyb21Db25maWcoQ29uZmlnIGNmZywgU3RyaW5nIG5hbWUpIHsKKwkJcmV0dXJuIG5ldyBSZXBsaWNhQ29uZmlnKCkuZnJvbUNvbmZpZyhjZmcsIG5hbWUpOworCX0KKworCXByaXZhdGUgUGFydGljaXBhdGlvbiBwYXJ0aWNpcGF0aW9uID0gUGFydGljaXBhdGlvbi5GVUxMOworCXByaXZhdGUgQ29tbWl0TWV0aG9kIGNvbW1pdE1ldGhvZCA9IENvbW1pdE1ldGhvZC5BTExfUkVGUzsKKwlwcml2YXRlIENvbW1pdFNwZWVkIGNvbW1pdFNwZWVkID0gQ29tbWl0U3BlZWQuQkFUQ0hFRDsKKwlwcml2YXRlIGxvbmcgbWluUmV0cnkgPSBTRUNPTkRTLnRvTWlsbGlzKDUpOworCXByaXZhdGUgbG9uZyBtYXhSZXRyeSA9IE1JTlVURVMudG9NaWxsaXMoMSk7CisKKwkvKiogQHJldHVybiBwYXJ0aWNpcGF0aW9uIG9mIHRoZSByZXBsaWNhIGluIHRoZSBzeXN0ZW0uICovCisJcHVibGljIFBhcnRpY2lwYXRpb24gZ2V0UGFydGljaXBhdGlvbigpIHsKKwkJcmV0dXJuIHBhcnRpY2lwYXRpb247CisJfQorCisJLyoqIEByZXR1cm4gaG93IEtldGNoIHNob3VsZCBhcHBseSBjb21taXR0ZWQgY2hhbmdlcy4gKi8KKwlwdWJsaWMgQ29tbWl0TWV0aG9kIGdldENvbW1pdE1ldGhvZCgpIHsKKwkJcmV0dXJuIGNvbW1pdE1ldGhvZDsKKwl9CisKKwkvKiogQHJldHVybiBob3cgcXVpY2tseSBzaG91bGQgS2V0Y2ggY29tbWl0LiAqLworCXB1YmxpYyBDb21taXRTcGVlZCBnZXRDb21taXRTcGVlZCgpIHsKKwkJcmV0dXJuIGNvbW1pdFNwZWVkOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIG1pbmltdW0gd2FpdCBkZWxheSBiZWZvcmUgcmV0cnlpbmcgYSBmYWlsdXJlLgorCSAqCisJICogQHBhcmFtIHVuaXQKKwkgKiAgICAgICAgICAgIHRvIGdldCByZXRyeSBkZWxheSBpbi4KKwkgKiBAcmV0dXJuIG1pbmltdW0gZGVsYXkgYmVmb3JlIHJldHJ5aW5nIGEgZmFpbHVyZS4KKwkgKi8KKwlwdWJsaWMgbG9uZyBnZXRNaW5SZXRyeShUaW1lVW5pdCB1bml0KSB7CisJCXJldHVybiB1bml0LmNvbnZlcnQobWluUmV0cnksIE1JTExJU0VDT05EUyk7CisJfQorCisJLyoqCisJICogUmV0dXJucyB0aGUgbWF4aW11bSB3YWl0IGRlbGF5IGJlZm9yZSByZXRyeWluZyBhIGZhaWx1cmUuCisJICoKKwkgKiBAcGFyYW0gdW5pdAorCSAqICAgICAgICAgICAgdG8gZ2V0IHJldHJ5IGRlbGF5IGluLgorCSAqIEByZXR1cm4gbWF4aW11bSBkZWxheSBiZWZvcmUgcmV0cnlpbmcgYSBmYWlsdXJlLgorCSAqLworCXB1YmxpYyBsb25nIGdldE1heFJldHJ5KFRpbWVVbml0IHVuaXQpIHsKKwkJcmV0dXJuIHVuaXQuY29udmVydChtYXhSZXRyeSwgTUlMTElTRUNPTkRTKTsKKwl9CisKKwkvKioKKwkgKiBVcGRhdGUgdGhlIGNvbmZpZ3VyYXRpb24gZnJvbSBhIGNvbmZpZyBibG9jay4KKwkgKgorCSAqIEBwYXJhbSBjZmcKKwkgKiAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gdG8gcmVhZC4KKwkgKiBAcGFyYW0gbmFtZQorCSAqICAgICAgICAgICAgb2YgdGhlIHJlcGxpY2EgYmVpbmcgY29uZmlndXJlZC4KKwkgKiBAcmV0dXJuIHtAY29kZSB0aGlzfQorCSAqLworCXB1YmxpYyBSZXBsaWNhQ29uZmlnIGZyb21Db25maWcoQ29uZmlnIGNmZywgU3RyaW5nIG5hbWUpIHsKKwkJcGFydGljaXBhdGlvbiA9IGNmZy5nZXRFbnVtKAorCQkJCUNPTkZJR19LRVlfUkVNT1RFLCBuYW1lLCBDT05GSUdfS0VZX1RZUEUsCisJCQkJcGFydGljaXBhdGlvbik7CisJCWNvbW1pdE1ldGhvZCA9IGNmZy5nZXRFbnVtKAorCQkJCUNPTkZJR19LRVlfUkVNT1RFLCBuYW1lLCBDT05GSUdfS0VZX0NPTU1JVCwKKwkJCQljb21taXRNZXRob2QpOworCQljb21taXRTcGVlZCA9IGNmZy5nZXRFbnVtKAorCQkJCUNPTkZJR19LRVlfUkVNT1RFLCBuYW1lLCBDT05GSUdfS0VZX1NQRUVELAorCQkJCWNvbW1pdFNwZWVkKTsKKwkJbWluUmV0cnkgPSBnZXRNaWxsaXMoY2ZnLCBuYW1lLCAia2V0Y2gtbWluUmV0cnkiLCBtaW5SZXRyeSk7IC8vJE5PTi1OTFMtMSQKKwkJbWF4UmV0cnkgPSBnZXRNaWxsaXMoY2ZnLCBuYW1lLCAia2V0Y2gtbWF4UmV0cnkiLCBtYXhSZXRyeSk7IC8vJE5PTi1OTFMtMSQKKwkJcmV0dXJuIHRoaXM7CisJfQorCisJcHJpdmF0ZSBzdGF0aWMgbG9uZyBnZXRNaWxsaXMoQ29uZmlnIGNmZywgU3RyaW5nIG5hbWUsIFN0cmluZyBrZXksCisJCQlsb25nIGRlZmF1bHRWYWx1ZSkgeworCQlTdHJpbmcgdmFsU3RyID0gY2ZnLmdldFN0cmluZyhDT05GSUdfS0VZX1JFTU9URSwgbmFtZSwga2V5KTsKKwkJaWYgKHZhbFN0ciA9PSBudWxsKSB7CisJCQlyZXR1cm4gZGVmYXVsdFZhbHVlOworCQl9CisKKwkJdmFsU3RyID0gdmFsU3RyLnRyaW0oKTsKKwkJaWYgKHZhbFN0ci5pc0VtcHR5KCkpIHsKKwkJCXJldHVybiBkZWZhdWx0VmFsdWU7CisJCX0KKworCQlNYXRjaGVyIG0gPSBVbml0TWFwLlBBVFRFUk4ubWF0Y2hlcih2YWxTdHIpOworCQlpZiAoIW0ubWF0Y2hlcygpKSB7CisJCQlyZXR1cm4gZGVmYXVsdFZhbHVlOworCQl9CisKKwkJU3RyaW5nIGRpZ2l0cyA9IG0uZ3JvdXAoMSk7CisJCVN0cmluZyB1bml0TmFtZSA9IG0uZ3JvdXAoMikudHJpbSgpOworCQlUaW1lVW5pdCB1bml0ID0gVW5pdE1hcC5VTklUUy5nZXQodW5pdE5hbWUpOworCQlpZiAodW5pdCA9PSBudWxsKSB7CisJCQlyZXR1cm4gZGVmYXVsdFZhbHVlOworCQl9CisKKwkJdHJ5IHsKKwkJCWlmIChkaWdpdHMuaW5kZXhPZignLicpID09IC0xKSB7CisJCQkJcmV0dXJuIHVuaXQudG9NaWxsaXMoTG9uZy5wYXJzZUxvbmcoZGlnaXRzKSk7CisJCQl9CisKKwkJCWRvdWJsZSB2YWwgPSBEb3VibGUucGFyc2VEb3VibGUoZGlnaXRzKTsKKwkJCXJldHVybiAobG9uZykgKHZhbCAqIHVuaXQudG9NaWxsaXMoMSkpOworCQl9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gbmZlKSB7CisJCQlyZXR1cm4gZGVmYXVsdFZhbHVlOworCQl9CisJfQorCisJc3RhdGljIGNsYXNzIFVuaXRNYXAgeworCQlzdGF0aWMgZmluYWwgUGF0dGVybiBQQVRURVJOID0gUGF0dGVybgorCQkJCS5jb21waWxlKCJeKFsxLTldWzAtOV0qKD86XFwuWzAtOV0qKT8pXFxzKiguKikkIik7IC8vJE5PTi1OTFMtMSQKKworCQlzdGF0aWMgZmluYWwgTWFwPFN0cmluZywgVGltZVVuaXQ+IFVOSVRTOworCisJCXN0YXRpYyB7CisJCQlNYXA8U3RyaW5nLCBUaW1lVW5pdD4gbSA9IG5ldyBIYXNoTWFwPD4oKTsKKwkJCVRpbWVVbml0IHUgPSBNSUxMSVNFQ09ORFM7CisJCQltLnB1dCgiIiwgdSk7IC8vJE5PTi1OTFMtMSQKKwkJCW0ucHV0KCJtcyIsIHUpOyAvLyROT04tTkxTLTEkCisJCQltLnB1dCgibWlsbGlzIiwgdSk7IC8vJE5PTi1OTFMtMSQKKwkJCW0ucHV0KCJtaWxsaXNlY29uZCIsIHUpOyAvLyROT04tTkxTLTEkCisJCQltLnB1dCgibWlsbGlzZWNvbmRzIiwgdSk7IC8vJE5PTi1OTFMtMSQKKworCQkJdSA9IFNFQ09ORFM7CisJCQltLnB1dCgicyIsIHUpOyAvLyROT04tTkxTLTEkCisJCQltLnB1dCgic2VjIiwgdSk7IC8vJE5PTi1OTFMtMSQKKwkJCW0ucHV0KCJzZWNzIiwgdSk7IC8vJE5PTi1OTFMtMSQKKwkJCW0ucHV0KCJzZWNvbmQiLCB1KTsgLy8kTk9OLU5MUy0xJAorCQkJbS5wdXQoInNlY29uZHMiLCB1KTsgLy8kTk9OLU5MUy0xJAorCisJCQl1ID0gTUlOVVRFUzsKKwkJCW0ucHV0KCJtIiwgdSk7IC8vJE5PTi1OTFMtMSQKKwkJCW0ucHV0KCJtaW4iLCB1KTsgLy8kTk9OLU5MUy0xJAorCQkJbS5wdXQoIm1pbnMiLCB1KTsgLy8kTk9OLU5MUy0xJAorCQkJbS5wdXQoIm1pbnV0ZSIsIHUpOyAvLyROT04tTkxTLTEkCisJCQltLnB1dCgibWludXRlcyIsIHUpOyAvLyROT04tTkxTLTEkCisKKwkJCXUgPSBIT1VSUzsKKwkJCW0ucHV0KCJoIiwgdSk7IC8vJE5PTi1OTFMtMSQKKwkJCW0ucHV0KCJociIsIHUpOyAvLyROT04tTkxTLTEkCisJCQltLnB1dCgiaHJzIiwgdSk7IC8vJE5PTi1OTFMtMSQKKwkJCW0ucHV0KCJob3VyIiwgdSk7IC8vJE5PTi1OTFMtMSQKKwkJCW0ucHV0KCJob3VycyIsIHUpOyAvLyROT04tTkxTLTEkCisKKwkJCXUgPSBEQVlTOworCQkJbS5wdXQoImQiLCB1KTsgLy8kTk9OLU5MUy0xJAorCQkJbS5wdXQoImRheSIsIHUpOyAvLyROT04tTkxTLTEkCisJCQltLnB1dCgiZGF5cyIsIHUpOyAvLyROT04tTkxTLTEkCisKKwkJCVVOSVRTID0gQ29sbGVjdGlvbnMudW5tb2RpZmlhYmxlTWFwKG0pOworCQl9CisKKwkJcHJpdmF0ZSBVbml0TWFwKCkgeworCQl9CisJfQorfQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9rZXRjaC9SZXBsaWNhRmV0Y2hSZXF1ZXN0LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL2tldGNoL1JlcGxpY2FGZXRjaFJlcXVlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDFkOWU5Ci0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9rZXRjaC9SZXBsaWNhRmV0Y2hSZXF1ZXN0LmphdmEKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiwgR29vZ2xlIEluYy4KKyAqIGFuZCBvdGhlciBjb3B5cmlnaHQgb3duZXJzIGFzIGRvY3VtZW50ZWQgaW4gdGhlIHByb2plY3QncyBJUCBsb2cuCisgKgorICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2MS4wIHdoaWNoCisgKiBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgaXMgcmVwcm9kdWNlZCBiZWxvdywgYW5kIGlzCisgKiBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VkbC12MTAucGhwCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgSW5jLiBub3IgdGhlCisgKiAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCisgKiAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3IKKyAqICAgd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORAorICogQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKyAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGCisgKiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitwYWNrYWdlIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwua2V0Y2g7CisKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5TZXQ7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmFubm90YXRpb25zLk51bGxhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLk9iamVjdElkOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLlJlZjsKKworLyoqIEEgZmV0Y2ggcmVxdWVzdCB0byBvYnRhaW4gb2JqZWN0cyBmcm9tIGEgcmVwbGljYSwgYW5kIGl0cyByZXN1bHQuICovCitwdWJsaWMgY2xhc3MgUmVwbGljYUZldGNoUmVxdWVzdCB7CisJcHJpdmF0ZSBmaW5hbCBTZXQ8U3RyaW5nPiB3YW50UmVmczsKKwlwcml2YXRlIGZpbmFsIFNldDxPYmplY3RJZD4gd2FudE9iamVjdHM7CisJcHJpdmF0ZSBNYXA8U3RyaW5nLCBSZWY+IHJlZnM7CisKKwkvKioKKwkgKiBDb25zdHJ1Y3QgYSBuZXcgZmV0Y2ggcmVxdWVzdCBmb3IgYSByZXBsaWNhLgorCSAqCisJICogQHBhcmFtIHdhbnRSZWZzCisJICogICAgICAgICAgICBuYW1lZCByZWZlcmVuY2VzIHRvIGJlIGZldGNoZWQuCisJICogQHBhcmFtIHdhbnRPYmplY3RzCisJICogICAgICAgICAgICBzcGVjaWZpYyBvYmplY3RzIHRvIGJlIGZldGNoZWQuCisJICovCisJcHVibGljIFJlcGxpY2FGZXRjaFJlcXVlc3QoU2V0PFN0cmluZz4gd2FudFJlZnMsCisJCQlTZXQ8T2JqZWN0SWQ+IHdhbnRPYmplY3RzKSB7CisJCXRoaXMud2FudFJlZnMgPSB3YW50UmVmczsKKwkJdGhpcy53YW50T2JqZWN0cyA9IHdhbnRPYmplY3RzOworCX0KKworCS8qKiBAcmV0dXJuIHJlZmVyZW5jZXMgdG8gYmUgZmV0Y2hlZC4gKi8KKwlwdWJsaWMgU2V0PFN0cmluZz4gZ2V0V2FudFJlZnMoKSB7CisJCXJldHVybiB3YW50UmVmczsKKwl9CisKKwkvKiogQHJldHVybiBvYmplY3RzIHRvIGJlIGZldGNoZWQuICovCisJcHVibGljIFNldDxPYmplY3RJZD4gZ2V0V2FudE9iamVjdHMoKSB7CisJCXJldHVybiB3YW50T2JqZWN0czsKKwl9CisKKwkvKiogQHJldHVybiByZW1vdGUgcmVmZXJlbmNlcywgdXN1YWxseSBmcm9tIHRoZSBhZHZlcnRpc2VtZW50LiAqLworCUBOdWxsYWJsZQorCXB1YmxpYyBNYXA8U3RyaW5nLCBSZWY+IGdldFJlZnMoKSB7CisJCXJldHVybiByZWZzOworCX0KKworCS8qKgorCSAqIEBwYXJhbSByZWZzCisJICogICAgICAgICAgICByZWZlcmVuY2VzIG9ic2VydmVkIGZyb20gdGhlIHJlcGxpY2EuCisJICovCisJcHVibGljIHZvaWQgc2V0UmVmcyhNYXA8U3RyaW5nLCBSZWY+IHJlZnMpIHsKKwkJdGhpcy5yZWZzID0gcmVmczsKKwl9Cit9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL2tldGNoL1JlcGxpY2FQdXNoUmVxdWVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9rZXRjaC9SZXBsaWNhUHVzaFJlcXVlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTFiMTQyCi0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9rZXRjaC9SZXBsaWNhUHVzaFJlcXVlc3QuamF2YQpAQCAtMCwwICsxLDE2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiwgR29vZ2xlIEluYy4KKyAqIGFuZCBvdGhlciBjb3B5cmlnaHQgb3duZXJzIGFzIGRvY3VtZW50ZWQgaW4gdGhlIHByb2plY3QncyBJUCBsb2cuCisgKgorICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2MS4wIHdoaWNoCisgKiBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgaXMgcmVwcm9kdWNlZCBiZWxvdywgYW5kIGlzCisgKiBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VkbC12MTAucGhwCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgSW5jLiBub3IgdGhlCisgKiAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCisgKiAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3IKKyAqICAgd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORAorICogQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKyAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGCisgKiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitwYWNrYWdlIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwua2V0Y2g7CisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5hbm5vdGF0aW9ucy5OdWxsYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5SZWY7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuUmVwb3NpdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5SZWNlaXZlQ29tbWFuZDsKKworLyoqCisgKiBBIHB1c2ggcmVxdWVzdCBzZW5kaW5nIG9iamVjdHMgdG8gYSByZXBsaWNhLCBhbmQgaXRzIHJlc3VsdC4KKyAqIDxwPgorICogSW1wbGVtZW50b3JzIG9mIHtAbGluayBLZXRjaFJlcGxpY2F9IG11c3QgcG9wdWxhdGUgdGhlIGNvbW1hbmQgcmVzdWx0IGZpZWxkcywKKyAqIHtAbGluayAjc2V0UmVmcyhNYXApfSwgYW5kIGNhbGwgb25lIG9mCisgKiB7QGxpbmsgI3NldEV4Y2VwdGlvbihSZXBvc2l0b3J5LCBUaHJvd2FibGUpfSBvciB7QGxpbmsgI2RvbmUoUmVwb3NpdG9yeSl9IHRvCisgKiBmaW5pc2ggcHJvY2Vzc2luZy4KKyAqLworcHVibGljIGNsYXNzIFJlcGxpY2FQdXNoUmVxdWVzdCB7CisJcHJpdmF0ZSBmaW5hbCBLZXRjaFJlcGxpY2EgcmVwbGljYTsKKwlwcml2YXRlIGZpbmFsIENvbGxlY3Rpb248UmVjZWl2ZUNvbW1hbmQ+IGNvbW1hbmRzOworCXByaXZhdGUgTWFwPFN0cmluZywgUmVmPiByZWZzOworCXByaXZhdGUgVGhyb3dhYmxlIGV4Y2VwdGlvbjsKKwlwcml2YXRlIGJvb2xlYW4gbm90aWZpZWQ7CisKKwkvKioKKwkgKiBDb25zdHJ1Y3QgYSBuZXcgcHVzaCByZXF1ZXN0IGZvciBhIHJlcGxpY2EuCisJICoKKwkgKiBAcGFyYW0gcmVwbGljYQorCSAqICAgICAgICAgICAgdGhlIHJlcGxpY2EgYmVpbmcgcHVzaGVkIHRvLgorCSAqIEBwYXJhbSBjb21tYW5kcworCSAqICAgICAgICAgICAgY29tbWFuZHMgdG8gYmUgZXhlY3V0ZWQuCisJICovCisJcHVibGljIFJlcGxpY2FQdXNoUmVxdWVzdChLZXRjaFJlcGxpY2EgcmVwbGljYSwKKwkJCUNvbGxlY3Rpb248UmVjZWl2ZUNvbW1hbmQ+IGNvbW1hbmRzKSB7CisJCXRoaXMucmVwbGljYSA9IHJlcGxpY2E7CisJCXRoaXMuY29tbWFuZHMgPSBjb21tYW5kczsKKwl9CisKKwkvKiogQHJldHVybiBjb21tYW5kcyB0byBiZSBleGVjdXRlZCwgYW5kIHRoZWlyIHJlc3VsdHMuICovCisJcHVibGljIENvbGxlY3Rpb248UmVjZWl2ZUNvbW1hbmQ+IGdldENvbW1hbmRzKCkgeworCQlyZXR1cm4gY29tbWFuZHM7CisJfQorCisJLyoqIEByZXR1cm4gcmVtb3RlIHJlZmVyZW5jZXMsIHVzdWFsbHkgZnJvbSB0aGUgYWR2ZXJ0aXNlbWVudC4gKi8KKwlATnVsbGFibGUKKwlwdWJsaWMgTWFwPFN0cmluZywgUmVmPiBnZXRSZWZzKCkgeworCQlyZXR1cm4gcmVmczsKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0gcmVmcworCSAqICAgICAgICAgICAgcmVmZXJlbmNlcyBvYnNlcnZlZCBmcm9tIHRoZSByZXBsaWNhLgorCSAqLworCXB1YmxpYyB2b2lkIHNldFJlZnMoTWFwPFN0cmluZywgUmVmPiByZWZzKSB7CisJCXRoaXMucmVmcyA9IHJlZnM7CisJfQorCisJLyoqIEByZXR1cm4gZXhjZXB0aW9uIHRocm93biwgaWYgYW55LiAqLworCUBOdWxsYWJsZQorCXB1YmxpYyBUaHJvd2FibGUgZ2V0RXhjZXB0aW9uKCkgeworCQlyZXR1cm4gZXhjZXB0aW9uOworCX0KKworCS8qKgorCSAqIE1hcmsgdGhlIHJlcXVlc3QgYXMgY3Jhc2hpbmcgd2l0aCBhIGNvbW11bmljYXRpb24gZXJyb3IuCisJICogPHA+CisJICogVGhpcyBtZXRob2QgbWF5IHRha2Ugc2lnbmlmaWNhbnQgdGltZSBhY3F1aXJpbmcgdGhlIGxlYWRlciBsb2NrIGFuZAorCSAqIHVwZGF0aW5nIHRoZSBLZXRjaCBzdGF0ZSBtYWNoaW5lIHdpdGggdGhlIGZhaWx1cmUuCisJICoKKwkgKiBAcGFyYW0gcmVwbworCSAqICAgICAgICAgICAgbG9jYWwgcmVwb3NpdG9yeSByZWZlcmVuY2UgdXNlZCBieSB0aGUgcHVzaCBhdHRlbXB0LgorCSAqIEBwYXJhbSBlcnIKKwkgKiAgICAgICAgICAgIGV4Y2VwdGlvbiB0aHJvd24gZHVyaW5nIGNvbW11bmljYXRpb24uCisJICovCisJcHVibGljIHZvaWQgc2V0RXhjZXB0aW9uKEBOdWxsYWJsZSBSZXBvc2l0b3J5IHJlcG8sIFRocm93YWJsZSBlcnIpIHsKKwkJaWYgKEtldGNoUmVwbGljYS5sb2cuaXNFcnJvckVuYWJsZWQoKSkgeworCQkJS2V0Y2hSZXBsaWNhLmxvZy5lcnJvcihkZXNjcmliZSgiZmFpbGVkIiksIGVycik7IC8vJE5PTi1OTFMtMSQKKwkJfQorCQlpZiAoIW5vdGlmaWVkKSB7CisJCQlub3RpZmllZCA9IHRydWU7CisJCQlleGNlcHRpb24gPSBlcnI7CisJCQlyZXBsaWNhLmFmdGVyUHVzaChyZXBvLCB0aGlzKTsKKwkJfQorCX0KKworCS8qKgorCSAqIE1hcmsgdGhlIHJlcXVlc3QgYXMgY29tcGxldGVkIHdpdGhvdXQgZXhjZXB0aW9uLgorCSAqIDxwPgorCSAqIFRoaXMgbWV0aG9kIG1heSB0YWtlIHNpZ25pZmljYW50IHRpbWUgYWNxdWlyaW5nIHRoZSBsZWFkZXIgbG9jayBhbmQKKwkgKiB1cGRhdGluZyB0aGUgS2V0Y2ggc3RhdGUgbWFjaGluZSB3aXRoIHJlc3VsdHMgZnJvbSB0aGlzIHJlcGxpY2EuCisJICoKKwkgKiBAcGFyYW0gcmVwbworCSAqICAgICAgICAgICAgbG9jYWwgcmVwb3NpdG9yeSByZWZlcmVuY2UgdXNlZCBieSB0aGUgcHVzaCBhdHRlbXB0LgorCSAqLworCXB1YmxpYyB2b2lkIGRvbmUoUmVwb3NpdG9yeSByZXBvKSB7CisJCWlmIChLZXRjaFJlcGxpY2EubG9nLmlzRGVidWdFbmFibGVkKCkpIHsKKwkJCUtldGNoUmVwbGljYS5sb2cuZGVidWcoZGVzY3JpYmUoImNvbXBsZXRlZCIpKTsgLy8kTk9OLU5MUy0xJAorCQl9CisJCWlmICghbm90aWZpZWQpIHsKKwkJCW5vdGlmaWVkID0gdHJ1ZTsKKwkJCXJlcGxpY2EuYWZ0ZXJQdXNoKHJlcG8sIHRoaXMpOworCQl9CisJfQorCisJcHJpdmF0ZSBTdHJpbmcgZGVzY3JpYmUoU3RyaW5nIGhlYWRpbmcpIHsKKwkJU3RyaW5nQnVpbGRlciBiID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwkJYi5hcHBlbmQoInB1c2ggdG8gIik7IC8vJE5PTi1OTFMtMSQKKwkJYi5hcHBlbmQocmVwbGljYS5kZXNjcmliZUZvckxvZygpKTsKKwkJYi5hcHBlbmQoJyAnKS5hcHBlbmQoaGVhZGluZykuYXBwZW5kKCI6XG4iKTsgLy8kTk9OLU5MUy0xJAorCQlmb3IgKFJlY2VpdmVDb21tYW5kIGNtZCA6IGNvbW1hbmRzKSB7CisJCQliLmFwcGVuZChTdHJpbmcuZm9ybWF0KAorCQkJCQkiICAlLTEycyAlLTEycyAlcyAlcyIsIC8vJE5PTi1OTFMtMSQKKwkJCQkJTGVhZGVyU25hcHNob3Quc3RyKGNtZC5nZXRPbGRJZCgpKSwKKwkJCQkJTGVhZGVyU25hcHNob3Quc3RyKGNtZC5nZXROZXdJZCgpKSwKKwkJCQkJY21kLmdldFJlZk5hbWUoKSwKKwkJCQkJY21kLmdldFJlc3VsdCgpKSk7CisJCQlpZiAoY21kLmdldE1lc3NhZ2UoKSAhPSBudWxsKSB7CisJCQkJYi5hcHBlbmQoJyAnKS5hcHBlbmQoY21kLmdldE1lc3NhZ2UoKSk7CisJCQl9CisJCQliLmFwcGVuZCgnXG4nKTsKKwkJfQorCQlyZXR1cm4gYi50b1N0cmluZygpOworCX0KK30KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwva2V0Y2gvUmVwbGljYVNuYXBzaG90LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL2tldGNoL1JlcGxpY2FTbmFwc2hvdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjM2RlMDIKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL2tldGNoL1JlcGxpY2FTbmFwc2hvdC5qYXZhCkBAIC0wLDAgKzEsMTA5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2LCBHb29nbGUgSW5jLgorICogYW5kIG90aGVyIGNvcHlyaWdodCBvd25lcnMgYXMgZG9jdW1lbnRlZCBpbiB0aGUgcHJvamVjdCdzIElQIGxvZy4KKyAqCisgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZQorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYxLjAgd2hpY2gKKyAqIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBpcyByZXByb2R1Y2VkIGJlbG93LCBhbmQgaXMKKyAqIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZWRsLXYxMC5waHAKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAqICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCBJbmMuIG5vciB0aGUKKyAqICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKKyAqICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgorICogICB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5ECisgKiBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAorICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYKKyAqIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK3BhY2thZ2Ugb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5rZXRjaDsKKworaW1wb3J0IGphdmEudXRpbC5EYXRlOworCitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5hbm5vdGF0aW9ucy5OdWxsYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5PYmplY3RJZDsKKworLyoqCisgKiBBIHNuYXBzaG90IG9mIGEgcmVwbGljYS4KKyAqCisgKiBAc2VlIExlYWRlclNuYXBzaG90CisgKi8KK3B1YmxpYyBjbGFzcyBSZXBsaWNhU25hcHNob3QgeworCWZpbmFsIEtldGNoUmVwbGljYSByZXBsaWNhOworCU9iamVjdElkIGFjY2VwdGVkOworCU9iamVjdElkIGNvbW1pdHRlZDsKKwlLZXRjaFJlcGxpY2EuU3RhdGUgc3RhdGU7CisJU3RyaW5nIGVycm9yOworCWxvbmcgcmV0cnlBdE1pbGxpczsKKworCVJlcGxpY2FTbmFwc2hvdChLZXRjaFJlcGxpY2EgcmVwbGljYSkgeworCQl0aGlzLnJlcGxpY2EgPSByZXBsaWNhOworCX0KKworCS8qKiBAcmV0dXJuIHRoZSByZXBsaWNhIHRoaXMgc25hcHNob3QgZGVzY3JpYmVzIHRoZSBzdGF0ZSBvZi4gKi8KKwlwdWJsaWMgS2V0Y2hSZXBsaWNhIGdldFJlcGxpY2EoKSB7CisJCXJldHVybiByZXBsaWNhOworCX0KKworCS8qKiBAcmV0dXJuIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHJlcGxpY2EuICovCisJcHVibGljIEtldGNoUmVwbGljYS5TdGF0ZSBnZXRTdGF0ZSgpIHsKKwkJcmV0dXJuIHN0YXRlOworCX0KKworCS8qKiBAcmV0dXJuIGxhc3Qga25vd24gR2l0IGNvbW1pdCBhdCB7QGNvZGUgcmVmcy90eG4vYWNjZXB0ZWR9LiAqLworCUBOdWxsYWJsZQorCXB1YmxpYyBPYmplY3RJZCBnZXRBY2NlcHRlZCgpIHsKKwkJcmV0dXJuIGFjY2VwdGVkOworCX0KKworCS8qKiBAcmV0dXJuIGxhc3Qga25vd24gR2l0IGNvbW1pdCBhdCB7QGNvZGUgcmVmcy90eG4vY29tbWl0dGVkfS4gKi8KKwlATnVsbGFibGUKKwlwdWJsaWMgT2JqZWN0SWQgZ2V0Q29tbWl0dGVkKCkgeworCQlyZXR1cm4gY29tbWl0dGVkOworCX0KKworCS8qKgorCSAqIEByZXR1cm4gaWYge0BsaW5rICNnZXRTdGF0ZSgpfSA9PSB7QGxpbmsgS2V0Y2hSZXBsaWNhLlN0YXRlI09GRkxJTkV9IGFuCisJICogICAgICAgICBvcHRpb25hbCBodW1hbi1yZWFkYWJsZSBtZXNzYWdlIGZyb20gdGhlIHRyYW5zcG9ydCBzeXN0ZW0KKwkgKiAgICAgICAgIGV4cGxhaW5pbmcgdGhlIGZhaWx1cmUuCisJICovCisJQE51bGxhYmxlCisJcHVibGljIFN0cmluZyBnZXRFcnJvck1lc3NhZ2UoKSB7CisJCXJldHVybiBlcnJvcjsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIHRpbWUgKHVzdWFsbHkgaW4gdGhlIGZ1dHVyZSkgd2hlbiB0aGUgbGVhZGVyIHdpbGwgcmV0cnkKKwkgKiAgICAgICAgIGNvbW11bmljYXRpb24gd2l0aCB0aGUgb2ZmbGluZSBvciBsYWdnaW5nIHJlcGxpY2E7IG51bGwgaWYgbm8KKwkgKiAgICAgICAgIHJldHJ5IGlzIHNjaGVkdWxlZCBvciBuZWNlc3NhcnkuCisJICovCisJQE51bGxhYmxlCisJcHVibGljIERhdGUgZ2V0UmV0cnlBdCgpIHsKKwkJcmV0dXJuIHJldHJ5QXRNaWxsaXMgPiAwID8gbmV3IERhdGUocmV0cnlBdE1pbGxpcykgOiBudWxsOworCX0KK30KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwva2V0Y2gvUm91bmQuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwva2V0Y2gvUm91bmQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzM1Yjg1Ci0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9rZXRjaC9Sb3VuZC5qYXZhCkBAIC0wLDAgKzEsMTE2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2LCBHb29nbGUgSW5jLgorICogYW5kIG90aGVyIGNvcHlyaWdodCBvd25lcnMgYXMgZG9jdW1lbnRlZCBpbiB0aGUgcHJvamVjdCdzIElQIGxvZy4KKyAqCisgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZQorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYxLjAgd2hpY2gKKyAqIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBpcyByZXByb2R1Y2VkIGJlbG93LCBhbmQgaXMKKyAqIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZWRsLXYxMC5waHAKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAqICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCBJbmMuIG5vciB0aGUKKyAqICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKKyAqICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgorICogICB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5ECisgKiBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAorICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYKKyAqIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK3BhY2thZ2Ugb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5rZXRjaDsKKworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5BbnlPYmplY3RJZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5SZWNlaXZlQ29tbWFuZDsKKworLyoqCisgKiBPbmUgcm91bmQtdHJpcCB0byBhbGwgcmVwbGljYXMgcHJvcG9zaW5nIGEgbG9nIGVudHJ5LgorICogPHA+CisgKiBJbiBSYWZ0IGEgbG9nIGVudHJ5IHJlcHJlc2VudHMgYSBzdGF0ZSB0cmFuc2l0aW9uIGF0IGEgc3BlY2lmaWMgaW5kZXggaW4gdGhlCisgKiByZXBsaWNhdGVkIGxvZy4gVGhlIGxlYWRlciBjYW4gb25seSBhcHBlbmQgbG9nIGVudHJpZXMgdG8gdGhlIGxvZy4KKyAqIDxwPgorICogSW4gS2V0Y2ggYSBsb2cgZW50cnkgaXMgcmVjb3JkZWQgdW5kZXIgdGhlIHtAY29kZSByZWZzL3R4bn0gbmFtZXNwYWNlLiBUaGlzCisgKiBvY2N1cnMgd2hlbjoKKyAqIDx1bD4KKyAqIDxsaT5hIHJlcGxpY2Egd2FudHMgdG8gZXN0YWJsaXNoIGl0c2VsZiBhcyBhIG5ldyBsZWFkZXIgYnkgcHJvcG9zaW5nIGEgbmV3CisgKiB0ZXJtIChzZWUge0BsaW5rIEVsZWN0aW9uUm91bmR9KQorICogPGxpPmFuIGVzdGFibGlzaGVkIGxlYWRlciB3YW50cyB0byBnYWluIGNvbnNlbnN1cyBvbiBuZXcge0BsaW5rIFByb3Bvc2FsfXMKKyAqIChzZWUge0BsaW5rIFByb3Bvc2FsUm91bmR9KQorICogPC91bD4KKyAqLworYWJzdHJhY3QgY2xhc3MgUm91bmQgeworCWZpbmFsIEtldGNoTGVhZGVyIGxlYWRlcjsKKwlmaW5hbCBMb2dJbmRleCBhY2NlcHRlZE9sZEluZGV4OworCUxvZ0luZGV4IGFjY2VwdGVkTmV3SW5kZXg7CisJTGlzdDxSZWNlaXZlQ29tbWFuZD4gc3RhZ2VDb21tYW5kczsKKworCVJvdW5kKEtldGNoTGVhZGVyIGxlYWRlciwgTG9nSW5kZXggaGVhZCkgeworCQl0aGlzLmxlYWRlciA9IGxlYWRlcjsKKwkJdGhpcy5hY2NlcHRlZE9sZEluZGV4ID0gaGVhZDsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgY29tbWl0IGZvciB7QGNvZGUgcmVmcy90eG4vYWNjZXB0ZWR9IGFuZCBjYWxscworCSAqIHtAbGluayAjcnVuQXN5bmMoQW55T2JqZWN0SWQpfSB0byBiZWdpbiBleGVjdXRpb24gb2YgdGhlIHJvdW5kIGFjcm9zcworCSAqIHRoZSBzeXN0ZW0uCisJICogPHA+CisJICogSWYgcmVmZXJlbmNlcyBhcmUgYmVpbmcgdXBkYXRlZCAoc3VjaCBhcyBpbiBhIHtAbGluayBQcm9wb3NhbFJvdW5kfSkgdGhlCisJICogUmVmVHJlZSBtYXkgYmUgbW9kaWZpZWQuCisJICogPHA+CisJICogSW52b2tlZCB3aXRob3V0IHtAbGluayBLZXRjaExlYWRlciNsb2NrfSB0byBidWlsZCBvYmplY3RzLgorCSAqCisJICogQHRocm93cyBJT0V4Y2VwdGlvbgorCSAqICAgICAgICAgICAgIHRoZSByb3VuZCBjYW5ub3QgYnVpbGQgbmV3IG9iamVjdHMgd2l0aGluIHRoZSBsZWFkZXIncworCSAqICAgICAgICAgICAgIHJlcG9zaXRvcnkuIFRoZSBsZWFkZXIgbWF5IGJlIHVuYWJsZSB0byBleGVjdXRlLgorCSAqLworCWFic3RyYWN0IHZvaWQgc3RhcnQoKSB0aHJvd3MgSU9FeGNlcHRpb247CisKKwkvKioKKwkgKiBBc3luY2hyb25vdXNseSBkaXN0cmlidXRlIHRoZSByb3VuZCdzIG5ldyB2YWx1ZSBmb3IKKwkgKiB7QGNvZGUgcmVmcy90eG4vYWNjZXB0ZWR9IHRvIGFsbCByZXBsaWNhcy4KKwkgKiA8cD4KKwkgKiBJbnZva2VkIGJ5IHtAbGluayAjc3RhcnQoKX0gYWZ0ZXIgbmV3IGNvbW1pdHMgaGF2ZSBiZWVuIGNyZWF0ZWQgZm9yIHRoZQorCSAqIGxvZy4gVGhlIG1ldGhvZCBwYXNzZXMge0Bjb2RlIG5ld0lkfSB0byB7QGxpbmsgS2V0Y2hMZWFkZXJ9IHRvIGJlCisJICogZGlzdHJpYnV0ZWQgdG8gYWxsIGtub3duIHJlcGxpY2FzLgorCSAqCisJICogQHBhcmFtIG5ld0lkCisJICogICAgICAgICAgICBuZXcgdmFsdWUgZm9yIHtAY29kZSByZWZzL3R4bi9hY2NlcHRlZH0uCisJICovCisJdm9pZCBydW5Bc3luYyhBbnlPYmplY3RJZCBuZXdJZCkgeworCQlhY2NlcHRlZE5ld0luZGV4ID0gYWNjZXB0ZWRPbGRJbmRleC5uZXh0SW5kZXgobmV3SWQpOworCQlsZWFkZXIucnVuQXN5bmModGhpcyk7CisJfQorCisJLyoqCisJICogTm90aWZ5IHRoZSByb3VuZCBpdCB3YXMgYWNjZXB0ZWQgYnkgYSBtYWpvcml0eSBvZiB0aGUgc3lzdGVtLgorCSAqIDxwPgorCSAqIEludm9rZWQgYnkgdGhlIGxlYWRlciB3aXRoIHtAbGluayBLZXRjaExlYWRlciNsb2NrfSBoZWxkIGJ5IHRoZSBjYWxsZXIuCisJICovCisJYWJzdHJhY3Qgdm9pZCBzdWNjZXNzKCk7Cit9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL2tldGNoL1N0YWdlQnVpbGRlci5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9rZXRjaC9TdGFnZUJ1aWxkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTg3MWE0Ci0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9rZXRjaC9TdGFnZUJ1aWxkZXIuamF2YQpAQCAtMCwwICsxLDI3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiwgR29vZ2xlIEluYy4KKyAqIGFuZCBvdGhlciBjb3B5cmlnaHQgb3duZXJzIGFzIGRvY3VtZW50ZWQgaW4gdGhlIHByb2plY3QncyBJUCBsb2cuCisgKgorICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2MS4wIHdoaWNoCisgKiBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgaXMgcmVwcm9kdWNlZCBiZWxvdywgYW5kIGlzCisgKiBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VkbC12MTAucGhwCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgSW5jLiBub3IgdGhlCisgKiAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCisgKiAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3IKKyAqICAgd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORAorICogQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKyAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGCisgKiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitwYWNrYWdlIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwua2V0Y2g7CisKK2ltcG9ydCBzdGF0aWMgb3JnLmVjbGlwc2UuamdpdC5saWIuRmlsZU1vZGUuVFlQRV9HSVRMSU5LOworCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5TZXQ7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmFubm90YXRpb25zLk51bGxhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLkFueU9iamVjdElkOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLkNvbW1pdEJ1aWxkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuT2JqZWN0SWQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuT2JqZWN0SW5zZXJ0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuUGVyc29uSWRlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuUmVwb3NpdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGsuUmV2Q29tbWl0OworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQucmV2d2Fsay5SZXZPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrLlJldldhbGs7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuUmVjZWl2ZUNvbW1hbmQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC50cmVld2Fsay5FbXB0eVRyZWVJdGVyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrLlRyZWVXYWxrOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudHJlZXdhbGsuZmlsdGVyLlRyZWVGaWx0ZXI7CisKKy8qKiBDb25zdHJ1Y3RzIGEgc2V0IG9mIGNvbW1hbmRzIHRvIHN0YWdlIGNvbnRlbnQgZHVyaW5nIGEgcHJvcG9zYWwuICovCitwdWJsaWMgY2xhc3MgU3RhZ2VCdWlsZGVyIHsKKwkvKioKKwkgKiBBY2NlcHRhYmxlIG51bWJlciBvZiByZWZlcmVuY2VzIHRvIHNlbmQgaW4gYSBzaW5nbGUgc3RhZ2UgdHJhbnNhY3Rpb24uCisJICogPHA+CisJICogSWYgdGhlIG51bWJlciBvZiB1bmlxdWUgb2JqZWN0cyBleGNlZWRzIHRoaXMgYW1vdW50IHRoZSBidWlsZGVyIHdpbGwKKwkgKiBhdHRlbXB0IHRvIGRlY3JlYXNlIHRoZSByZWZlcmVuY2UgY291bnQgYnkgY2hhaW5pbmcgY29tbWl0cy4uCisJICovCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNNQUxMX0JBVENIX1NJWkUgPSA1OworCisJLyoqCisJICogQWNjZXB0YWJsZSBudW1iZXIgb2YgY29tbWl0cyB0byBjaGFpbiB0b2dldGhlciB1c2luZyBwYXJlbnQgcG9pbnRlcnMuCisJICogPHA+CisJICogV2hlbiBzdGFnaW5nIG1hbnkgdW5pcXVlIGNvbW1pdHMgdGhlIHtAbGluayBTdGFnZUJ1aWxkZXJ9IGJhdGNoZXMKKwkgKiB0b2dldGhlciB1bnJlbGF0ZWQgY29tbWl0cyBhcyBwYXJlbnRzIG9mIGEgdGVtcG9yYXJ5IGNvbW1pdC4gQWZ0ZXIgdGhlCisJICogcHJvcG9zYWwgY29tcGxldGVzIHRoZSB0ZW1wb3JhcnkgY29tbWl0IGlzIGRpc2NhcmRlZCBhbmQgY2FuIGJlIGdhcmJhZ2UKKwkgKiBjb2xsZWN0ZWQgYnkgYWxsIHJlcGxpY2FzLgorCSAqLworCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBURU1QX1BBUkVOVF9CQVRDSF9TSVpFID0gMTI4OworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgYnl0ZVtdIFBFRUwgPSB7ICcgJywgJ14nIH07CisKKwlwcml2YXRlIGZpbmFsIFN0cmluZyB0eG5TdGFnZTsKKwlwcml2YXRlIGZpbmFsIFN0cmluZyB0eG5JZDsKKworCS8qKgorCSAqIENvbnN0cnVjdCBhIHN0YWdlIGJ1aWxkZXIgZm9yIGEgdHJhbnNhY3Rpb24uCisJICoKKwkgKiBAcGFyYW0gdHhuU3RhZ2VOYW1lc3BhY2UKKwkgKiAgICAgICAgICAgIG5hbWVzcGFjZSBmb3IgdHJhbnNhY3Rpb24gcmVmZXJlbmNlcyB0byBidWlsZAorCSAqICAgICAgICAgICAge0Bjb2RlICJ0eG5TdGFnZU5hbWVzcGFjZS90eG5JZC5uIn0gc3R5bGUgbmFtZXMuCisJICogQHBhcmFtIHR4bklkCisJICogICAgICAgICAgICBpZGVudGlmaWVyIHVzZWQgdG8gbmFtZSB0ZW1wb3Jhcnkgc3RhZ2luZyByZWZzLgorCSAqLworCXB1YmxpYyBTdGFnZUJ1aWxkZXIoU3RyaW5nIHR4blN0YWdlTmFtZXNwYWNlLCBPYmplY3RJZCB0eG5JZCkgeworCQl0aGlzLnR4blN0YWdlID0gdHhuU3RhZ2VOYW1lc3BhY2U7CisJCXRoaXMudHhuSWQgPSB0eG5JZC5uYW1lKCk7CisJfQorCisJLyoqCisJICogQ29tcGFyZSB0d28gUmVmVHJlZXMgYW5kIHJldHVybiBjb21tYW5kcyB0byBzdGFnZSBuZXcgb2JqZWN0cy4KKwkgKiA8cD4KKwkgKiBUaGlzIG1ldGhvZCBpZ25vcmVzIHRoZSBsaW5lYWdlIGJldHdlZW4gdGhlIHR3byBSZWZUcmVlcyBhbmQgZG9lcyBhCisJICogc3RyYWlnaHQgZGlmZiBvbiB0aGUgdHdvIHRyZWVzLiBOZXcgb2JqZWN0cyB3aWxsIGJlIHN0YWdlZC4gVGhlIGRpZmYKKwkgKiBzdHJhdGVneSBpcyB1c2VmdWwgdG8gY2F0Y2gtdXAgYSBsYWdnaW5nIHJlcGxpY2EsIHdpdGhvdXQgc2VuZGluZyBldmVyeQorCSAqIGludGVybWVkaWF0ZSBzdGVwLiBUaGlzIG1heSBtZWFuIHRoZSByZXBsaWNhIGRvZXMgbm90IGhhdmUgdGhlIHNhbWUKKwkgKiBvYmplY3Qgc2V0IGFzIG90aGVyIHJlcGxpY2FzIGlmIHRoZXJlIGFyZSByZXdpbmRzIG9yIGJyYW5jaCBkZWxldGVzLgorCSAqCisJICogQHBhcmFtIGdpdAorCSAqICAgICAgICAgICAgc291cmNlIHJlcG9zaXRvcnkgdG8gcmVhZCB7QGNvZGUgb2xkVHJlZX0gYW5kIHtAY29kZSBuZXdUcmVlfQorCSAqICAgICAgICAgICAgZnJvbS4KKwkgKiBAcGFyYW0gb2xkVHJlZQorCSAqICAgICAgICAgICAgYWNjZXB0ZWQgUmVmVHJlZSBvbiB0aGUgcmVwbGljYSAoe0Bjb2RlIHJlZnMvdHhuL2FjY2VwdGVkfSkuCisJICogICAgICAgICAgICBVc2Uge0BsaW5rIE9iamVjdElkI3plcm9JZCgpfSBpZiB0aGUgcmVtb3RlIGRvZXMgbm90IGhhdmUgYW55CisJICogICAgICAgICAgICByZWYgdHJlZSwgZS5nLiBhIG5ldyByZXBsaWNhIGNhdGNoaW5nIHVwLgorCSAqIEBwYXJhbSBuZXdUcmVlCisJICogICAgICAgICAgICBSZWZUcmVlIGJlaW5nIHNlbnQgdG8gdGhlIHJlcGxpY2EuIFRoZSB0cmVlcyB3aWxsIGJlIGNvbXBhcmVkLgorCSAqIEByZXR1cm4gbGlzdCBvZiBjb21tYW5kcyB0byBjcmVhdGUge0Bjb2RlICJyZWZzL3R4bi9zdGFnZS8uLi4ifQorCSAqICAgICAgICAgcmVmZXJlbmNlcyBvbiByZXBsaWNhcyBhbmNob3JpbmcgbmV3IG9iamVjdHMgaW50byB0aGUgcmVwb3NpdG9yeQorCSAqICAgICAgICAgd2hpbGUgYSB0cmFuc2FjdGlvbiBnYWlucyBjb25zZW5zdXMuCisJICogQHRocm93cyBJT0V4Y2VwdGlvbgorCSAqICAgICAgICAgICAgIHtAY29kZSBnaXR9IGNhbm5vdCBiZSBhY2Nlc3NlZCB0byBjb21wYXJlIHtAY29kZSBvbGRUcmVlfSBhbmQKKwkgKiAgICAgICAgICAgICB7QGNvZGUgbmV3VHJlZX0gdG8gYnVpbGQgdGhlIG9iamVjdCBzZXQuCisJICovCisJcHVibGljIExpc3Q8UmVjZWl2ZUNvbW1hbmQ+IG1ha2VTdGFnZUxpc3QoUmVwb3NpdG9yeSBnaXQsIE9iamVjdElkIG9sZFRyZWUsCisJCQlPYmplY3RJZCBuZXdUcmVlKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQl0cnkgKFJldldhbGsgcncgPSBuZXcgUmV2V2FsayhnaXQpOworCQkJCVRyZWVXYWxrIHR3ID0gbmV3IFRyZWVXYWxrKHJ3LmdldE9iamVjdFJlYWRlcigpKTsKKwkJCQlPYmplY3RJbnNlcnRlciBpbnMgPSBnaXQubmV3T2JqZWN0SW5zZXJ0ZXIoKSkgeworCQkJaWYgKEFueU9iamVjdElkLmVxdWFscyhvbGRUcmVlLCBPYmplY3RJZC56ZXJvSWQoKSkpIHsKKwkJCQl0dy5hZGRUcmVlKG5ldyBFbXB0eVRyZWVJdGVyYXRvcigpKTsKKwkJCX0gZWxzZSB7CisJCQkJdHcuYWRkVHJlZShydy5wYXJzZVRyZWUob2xkVHJlZSkpOworCQkJfQorCQkJdHcuYWRkVHJlZShydy5wYXJzZVRyZWUobmV3VHJlZSkpOworCQkJdHcuc2V0RmlsdGVyKFRyZWVGaWx0ZXIuQU5ZX0RJRkYpOworCQkJdHcuc2V0UmVjdXJzaXZlKHRydWUpOworCisJCQlTZXQ8T2JqZWN0SWQ+IG5ld09ianMgPSBuZXcgSGFzaFNldDw+KCk7CisJCQl3aGlsZSAodHcubmV4dCgpKSB7CisJCQkJaWYgKHR3LmdldFJhd01vZGUoMSkgPT0gVFlQRV9HSVRMSU5LCisJCQkJCQkmJiAhdHcuaXNQYXRoU3VmZml4KFBFRUwsIDIpKSB7CisJCQkJCW5ld09ianMuYWRkKHR3LmdldE9iamVjdElkKDEpKTsKKwkJCQl9CisJCQl9CisKKwkJCUxpc3Q8UmVjZWl2ZUNvbW1hbmQ+IGNtZHMgPSBtYWtlU3RhZ2VMaXN0KG5ld09ianMsIGdpdCwgaW5zKTsKKwkJCWlucy5mbHVzaCgpOworCQkJcmV0dXJuIGNtZHM7CisJCX0KKwl9CisKKwkvKioKKwkgKiBDb25zdHJ1Y3QgYSBzZXQgb2YgY29tbWFuZHMgdG8gc3RhZ2Ugb2JqZWN0cyBvbiBhIHJlcGxpY2EuCisJICoKKwkgKiBAcGFyYW0gbmV3T2JqcworCSAqICAgICAgICAgICAgb2JqZWN0cyB0byBzZW5kIHRvIGEgcmVwbGljYS4KKwkgKiBAcGFyYW0gZ2l0CisJICogICAgICAgICAgICBsb2NhbCByZXBvc2l0b3J5IHRvIHJlYWQgc291cmNlIG9iamVjdHMgZnJvbS4gUmVxdWlyZWQgdG8KKwkgKiAgICAgICAgICAgIHBlcmZvcm0gbWluaWZpY2F0aW9uIG9mIHtAY29kZSBuZXdPYmpzfS4KKwkgKiBAcGFyYW0gaW5zZXJ0ZXIKKwkgKiAgICAgICAgICAgIGluc2VydGVyIHRvIHdyaXRlIHRlbXBvcmFyeSBjb21taXQgb2JqZWN0cyBkdXJpbmcgbWluaWZpY2F0aW9uCisJICogICAgICAgICAgICBpZiBtYW55IG5ldyBicmFuY2hlcyBhcmUgY3JlYXRlZCBieSB7QGNvZGUgbmV3T2Jqc30uCisJICogQHJldHVybiBsaXN0IG9mIGNvbW1hbmRzIHRvIGNyZWF0ZSB7QGNvZGUgInJlZnMvdHhuL3N0YWdlLy4uLiJ9CisJICogICAgICAgICByZWZlcmVuY2VzIG9uIHJlcGxpY2FzIGFuY2hvcmluZyB7QGNvZGUgbmV3T2Jqc30gaW50byB0aGUKKwkgKiAgICAgICAgIHJlcG9zaXRvcnkgd2hpbGUgYSB0cmFuc2FjdGlvbiBnYWlucyBjb25zZW5zdXMuCisJICogQHRocm93cyBJT0V4Y2VwdGlvbgorCSAqICAgICAgICAgICAgIHtAY29kZSBnaXR9IGNhbm5vdCBiZSBhY2Nlc3NlZCB0byBwZXJmb3JtIG1pbmlmaWNhdGlvbiBvZgorCSAqICAgICAgICAgICAgIHtAY29kZSBuZXdPYmpzfS4KKwkgKi8KKwlwdWJsaWMgTGlzdDxSZWNlaXZlQ29tbWFuZD4gbWFrZVN0YWdlTGlzdChTZXQ8T2JqZWN0SWQ+IG5ld09ianMsCisJCQlATnVsbGFibGUgUmVwb3NpdG9yeSBnaXQsIEBOdWxsYWJsZSBPYmplY3RJbnNlcnRlciBpbnNlcnRlcikKKwkJCQkJdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJaWYgKGdpdCA9PSBudWxsIHx8IG5ld09ianMuc2l6ZSgpIDw9IFNNQUxMX0JBVENIX1NJWkUpIHsKKwkJCS8vIFdpdGhvdXQgYSBzb3VyY2UgcmVwb3NpdG9yeSBjYW4gb25seSBjb25zdHJ1Y3QgdW5pcXVlIHNldC4KKwkJCUxpc3Q8UmVjZWl2ZUNvbW1hbmQ+IGNtZHMgPSBuZXcgQXJyYXlMaXN0PD4obmV3T2Jqcy5zaXplKCkpOworCQkJZm9yIChPYmplY3RJZCBpZCA6IG5ld09ianMpIHsKKwkJCQlzdGFnZShjbWRzLCBpZCk7CisJCQl9CisJCQlyZXR1cm4gY21kczsKKwkJfQorCisJCUxpc3Q8UmVjZWl2ZUNvbW1hbmQ+IGNtZHMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKwkJTGlzdDxSZXZDb21taXQ+IGNvbW1pdHMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKwkJcmVkdWNlT2JqZWN0cyhjbWRzLCBjb21taXRzLCBnaXQsIG5ld09ianMpOworCisJCWlmIChpbnNlcnRlciA9PSBudWxsIHx8IGNvbW1pdHMuc2l6ZSgpIDw9IDEKKwkJCQl8fCAoY21kcy5zaXplKCkgKyBjb21taXRzLnNpemUoKSkgPD0gU01BTExfQkFUQ0hfU0laRSkgeworCQkJLy8gV2l0aG91dCBhbiBpbnNlcnRlciB0byBhZ2dyZWdhdGUgY29tbWl0cywgb3IgZm9yIGEgc21hbGwgc2V0IG9mCisJCQkvLyBjb21taXRzIGp1c3Qgc2VuZCBvbmUgc3RhZ2UgcmVmIHBlciBjb21taXQuCisJCQlmb3IgKFJldkNvbW1pdCBjIDogY29tbWl0cykgeworCQkJCXN0YWdlKGNtZHMsIGMuY29weSgpKTsKKwkJCX0KKwkJCXJldHVybiBjbWRzOworCQl9CisKKwkJLy8gJ2NvbW1pdHMnIGlzIHNvcnRlZCBtb3N0IHJlY2VudCB0byBsZWFzdCByZWNlbnQgY29tbWl0LgorCQkvLyBHcm91cCBiYXRjaGVzIG9mIGNvbW1pdHMgYW5kIGJ1aWxkIGEgY2hhaW4uCisJCS8vIFRPRE8oc29wKSBDbHVzdGVyIGJ5IHJlc3RyaWN0ZWQgZ3JhcGhzIHRvIHN1cHBvcnQgZmlsdGVyaW5nLgorCQlPYmplY3RJZCB0aXAgPSBudWxsOworCQlmb3IgKGludCBlbmQgPSBjb21taXRzLnNpemUoKTsgZW5kID4gMDspIHsKKwkJCWludCBzdGFydCA9IE1hdGgubWF4KDAsIGVuZCAtIFRFTVBfUEFSRU5UX0JBVENIX1NJWkUpOworCQkJTGlzdDxSZXZDb21taXQ+IGJhdGNoID0gY29tbWl0cy5zdWJMaXN0KHN0YXJ0LCBlbmQpOworCQkJTGlzdDxPYmplY3RJZD4gcGFyZW50cyA9IG5ldyBBcnJheUxpc3Q8PigxICsgYmF0Y2guc2l6ZSgpKTsKKwkJCWlmICh0aXAgIT0gbnVsbCkgeworCQkJCXBhcmVudHMuYWRkKHRpcCk7CisJCQl9CisJCQlwYXJlbnRzLmFkZEFsbChiYXRjaCk7CisKKwkJCUNvbW1pdEJ1aWxkZXIgYiA9IG5ldyBDb21taXRCdWlsZGVyKCk7CisJCQliLnNldFRyZWVJZChiYXRjaC5nZXQoMCkuZ2V0VHJlZSgpKTsKKwkJCWIuc2V0UGFyZW50SWRzKHBhcmVudHMpOworCQkJYi5zZXRBdXRob3IodG1wQXV0aG9yKGJhdGNoKSk7CisJCQliLnNldENvbW1pdHRlcihiLmdldEF1dGhvcigpKTsKKwkJCXRpcCA9IGluc2VydGVyLmluc2VydChiKTsKKwkJCWVuZCA9IHN0YXJ0OworCQl9CisJCXN0YWdlKGNtZHMsIHRpcCk7CisJCXJldHVybiBjbWRzOworCX0KKworCXByaXZhdGUgc3RhdGljIFBlcnNvbklkZW50IHRtcEF1dGhvcihMaXN0PFJldkNvbW1pdD4gY29tbWl0cykgeworCQkvLyBDb25zdHJ1Y3QgYSBwcmVkaWN0YWJsZSBhdXRob3IgdXNpbmcgbW9zdCByZWNlbnQgY29tbWl0IHRpbWUuCisJCWludCB0ID0gMDsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBjb21taXRzLnNpemUoKTspIHsKKwkJCXQgPSBNYXRoLm1heCh0LCBjb21taXRzLmdldChpKS5nZXRDb21taXRUaW1lKCkpOworCQl9CisJCVN0cmluZyBuYW1lID0gIktldGNoIFN0YWdlIjsgLy8kTk9OLU5MUy0xJAorCQlTdHJpbmcgZW1haWwgPSAidG1wQHRtcCI7IC8vJE5PTi1OTFMtMSQKKwkJcmV0dXJuIG5ldyBQZXJzb25JZGVudChuYW1lLCBlbWFpbCwgdCAqIDEwMDBMLCAwKTsKKwl9CisKKwlwcml2YXRlIHZvaWQgcmVkdWNlT2JqZWN0cyhMaXN0PFJlY2VpdmVDb21tYW5kPiBjbWRzLAorCQkJTGlzdDxSZXZDb21taXQ+IGNvbW1pdHMsIFJlcG9zaXRvcnkgZ2l0LAorCQkJU2V0PE9iamVjdElkPiBuZXdPYmpzKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQl0cnkgKFJldldhbGsgcncgPSBuZXcgUmV2V2FsayhnaXQpKSB7CisJCQlydy5zZXRSZXRhaW5Cb2R5KGZhbHNlKTsKKworCQkJZm9yIChPYmplY3RJZCBpZCA6IG5ld09ianMpIHsKKwkJCQlSZXZPYmplY3Qgb2JqID0gcncucGFyc2VBbnkoaWQpOworCQkJCWlmIChvYmogaW5zdGFuY2VvZiBSZXZDb21taXQpIHsKKwkJCQkJcncubWFya1N0YXJ0KChSZXZDb21taXQpIG9iaik7CisJCQkJfSBlbHNlIHsKKwkJCQkJc3RhZ2UoY21kcywgaWQpOworCQkJCX0KKwkJCX0KKworCQkJZm9yIChSZXZDb21taXQgYzsgKGMgPSBydy5uZXh0KCkpICE9IG51bGw7KSB7CisJCQkJY29tbWl0cy5hZGQoYyk7CisJCQkJcncubWFya1VuaW50ZXJlc3RpbmcoYyk7CisJCQl9CisJCX0KKwl9CisKKwlwcml2YXRlIHZvaWQgc3RhZ2UoTGlzdDxSZWNlaXZlQ29tbWFuZD4gY21kcywgT2JqZWN0SWQgaWQpIHsKKwkJaW50IGVzdExlbiA9IHR4blN0YWdlLmxlbmd0aCgpICsgdHhuSWQubGVuZ3RoKCkgKyA1OworCQlTdHJpbmdCdWlsZGVyIG4gPSBuZXcgU3RyaW5nQnVpbGRlcihlc3RMZW4pOworCQluLmFwcGVuZCh0eG5TdGFnZSkuYXBwZW5kKHR4bklkKS5hcHBlbmQoJy4nKTsKKwkJbi5hcHBlbmQoSW50ZWdlci50b0hleFN0cmluZyhjbWRzLnNpemUoKSkpOworCQljbWRzLmFkZChuZXcgUmVjZWl2ZUNvbW1hbmQoT2JqZWN0SWQuemVyb0lkKCksIGlkLCBuLnRvU3RyaW5nKCkpKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL2tldGNoL3BhY2thZ2UtaW5mby5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9rZXRjaC9wYWNrYWdlLWluZm8uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZmUwMzc1Ci0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9rZXRjaC9wYWNrYWdlLWluZm8uamF2YQpAQCAtMCwwICsxLDQgQEAKKy8qKgorICogRGlzdHJpYnV0ZWQgY29uc2Vuc3VzIHN5c3RlbSBidWlsdCBvbiBHaXQuCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5rZXRjaDsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9kZnMvRGZzQmxvY2tDYWNoZS5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2Rmcy9EZnNCbG9ja0NhY2hlLmphdmEKaW5kZXggMmUxNzBhNS4uZWNkNGIyMyAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2Rmcy9EZnNCbG9ja0NhY2hlLmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2Rmcy9EZnNCbG9ja0NhY2hlLmphdmEKQEAgLTE4NSwxNCArMTg1LDYgQEAgcHJpdmF0ZSBEZnNCbG9ja0NhY2hlKGZpbmFsIERmc0Jsb2NrQ2FjaGVDb25maWcgY2ZnKSB7CiAJCWZvciAoaW50IGkgPSAwOyBpIDwgbG9hZExvY2tzLmxlbmd0aDsgaSsrKQogCQkJbG9hZExvY2tzW2ldID0gbmV3IFJlZW50cmFudExvY2sodHJ1ZSAvKiBmYWlyICovKTsKIAotCQlpbnQgZWIgPSAoaW50KSAodGFibGVTaXplICogLjEpOwotCQlpZiAoNjQgPCBlYikKLQkJCWViID0gNjQ7Ci0JCWVsc2UgaWYgKGViIDwgNCkKLQkJCWViID0gNDsKLQkJaWYgKHRhYmxlU2l6ZSA8IGViKQotCQkJZWIgPSB0YWJsZVNpemU7Ci0KIAkJbWF4Qnl0ZXMgPSBjZmcuZ2V0QmxvY2tMaW1pdCgpOwogCQltYXhTdHJlYW1UaHJvdWdoQ2FjaGUgPSAobG9uZykgKG1heEJ5dGVzICogY2ZnLmdldFN0cmVhbVJhdGlvKCkpOwogCQlibG9ja1NpemUgPSBjZmcuZ2V0QmxvY2tTaXplKCk7CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvZGZzL0Rmc0dhcmJhZ2VDb2xsZWN0b3IuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9kZnMvRGZzR2FyYmFnZUNvbGxlY3Rvci5qYXZhCmluZGV4IDc4NDUwN2QuLjMzYmUzYjEgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9kZnMvRGZzR2FyYmFnZUNvbGxlY3Rvci5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9kZnMvRGZzR2FyYmFnZUNvbGxlY3Rvci5qYXZhCkBAIC0xOTQsNyArMTk0LDcgQEAgcHVibGljIGJvb2xlYW4gcGFjayhQcm9ncmVzc01vbml0b3IgcG0pIHRocm93cyBJT0V4Y2VwdGlvbiB7CiAJCQlyZWZkYi5yZWZyZXNoKCk7CiAJCQlvYmpkYi5jbGVhckNhY2hlKCk7CiAKLQkJCUNvbGxlY3Rpb248UmVmPiByZWZzQmVmb3JlID0gUmVmVHJlZU5hbWVzLmFsbFJlZnMocmVmZGIpOworCQkJQ29sbGVjdGlvbjxSZWY+IHJlZnNCZWZvcmUgPSBnZXRBbGxSZWZzKCk7CiAJCQlwYWNrc0JlZm9yZSA9IHBhY2tzVG9SZWJ1aWxkKCk7CiAJCQlpZiAocGFja3NCZWZvcmUuaXNFbXB0eSgpKQogCQkJCXJldHVybiB0cnVlOwpAQCAtMjM1LDYgKzIzNSwxOCBAQCBlbHNlIGlmIChSZWZUcmVlTmFtZXMuaXNSZWZUcmVlKHJlZmRiLCByZWYuZ2V0TmFtZSgpKSkKIAkJfQogCX0KIAorCXByaXZhdGUgQ29sbGVjdGlvbjxSZWY+IGdldEFsbFJlZnMoKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQlDb2xsZWN0aW9uPFJlZj4gcmVmcyA9IHJlZmRiLmdldFJlZnMoUmVmRGF0YWJhc2UuQUxMKS52YWx1ZXMoKTsKKwkJTGlzdDxSZWY+IGFkZGwgPSByZWZkYi5nZXRBZGRpdGlvbmFsUmVmcygpOworCQlpZiAoIWFkZGwuaXNFbXB0eSgpKSB7CisJCQlMaXN0PFJlZj4gYWxsID0gbmV3IEFycmF5TGlzdDw+KHJlZnMuc2l6ZSgpICsgYWRkbC5zaXplKCkpOworCQkJYWxsLmFkZEFsbChyZWZzKTsKKwkJCWFsbC5hZGRBbGwoYWRkbCk7CisJCQlyZXR1cm4gYWxsOworCQl9CisJCXJldHVybiByZWZzOworCX0KKwogCXByaXZhdGUgTGlzdDxEZnNQYWNrRmlsZT4gcGFja3NUb1JlYnVpbGQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewogCQlEZnNQYWNrRmlsZVtdIHBhY2tzID0gb2JqZGIuZ2V0UGFja3MoKTsKIAkJTGlzdDxEZnNQYWNrRmlsZT4gb3V0ID0gbmV3IEFycmF5TGlzdDxEZnNQYWNrRmlsZT4ocGFja3MubGVuZ3RoKTsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9maWxlL0dDLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvZmlsZS9HQy5qYXZhCmluZGV4IDJjZTBkNDcuLjQ5ZjkzMzUgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9maWxlL0dDLmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2ZpbGUvR0MuamF2YQpAQCAtNjI5LDE1ICs2MjksMTYgQEAgcHJpdmF0ZSBTZXQ8T2JqZWN0SWQ+IGxpc3RSZWZMb2dPYmplY3RzKFJlZiByZWYsIGxvbmcgbWluVGltZSkgdGhyb3dzIElPRXhjZXB0aW8KIAl9CiAKIAkvKioKLQkgKiBSZXR1cm5zIGEgbWFwIG9mIGFsbCByZWZzIGFuZCBhZGRpdGlvbmFsIHJlZnMgKGUuZy4gRkVUQ0hfSEVBRCwKKwkgKiBSZXR1cm5zIGEgY29sbGVjdGlvbiBvZiBhbGwgcmVmcyBhbmQgYWRkaXRpb25hbCByZWZzIChlLmcuIEZFVENIX0hFQUQsCiAJICogTUVSR0VfSEVBRCwgLi4uKQogCSAqCi0JICogQHJldHVybiBhIG1hcCB3aGVyZSBuYW1lcyBvZiByZWZzIHBvaW50IHRvIHJlZiBvYmplY3RzCisJICogQHJldHVybiBhIGNvbGxlY3Rpb24gb2YgcmVmcyBwb2ludGluZyB0byBsaXZlIG9iamVjdHMuCiAJICogQHRocm93cyBJT0V4Y2VwdGlvbgogCSAqLwogCXByaXZhdGUgQ29sbGVjdGlvbjxSZWY+IGdldEFsbFJlZnMoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlDb2xsZWN0aW9uPFJlZj4gcmVmcyA9IFJlZlRyZWVOYW1lcy5hbGxSZWZzKHJlcG8uZ2V0UmVmRGF0YWJhc2UoKSk7Ci0JCUxpc3Q8UmVmPiBhZGRsID0gcmVwby5nZXRSZWZEYXRhYmFzZSgpLmdldEFkZGl0aW9uYWxSZWZzKCk7CisJCVJlZkRhdGFiYXNlIHJlZmRiID0gcmVwby5nZXRSZWZEYXRhYmFzZSgpOworCQlDb2xsZWN0aW9uPFJlZj4gcmVmcyA9IHJlZmRiLmdldFJlZnMoUmVmRGF0YWJhc2UuQUxMKS52YWx1ZXMoKTsKKwkJTGlzdDxSZWY+IGFkZGwgPSByZWZkYi5nZXRBZGRpdGlvbmFsUmVmcygpOwogCQlpZiAoIWFkZGwuaXNFbXB0eSgpKSB7CiAJCQlMaXN0PFJlZj4gYWxsID0gbmV3IEFycmF5TGlzdDw+KHJlZnMuc2l6ZSgpICsgYWRkbC5zaXplKCkpOwogCQkJYWxsLmFkZEFsbChyZWZzKTsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9yZWZ0cmVlL1JlZlRyZWVEYXRhYmFzZS5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL3JlZnRyZWUvUmVmVHJlZURhdGFiYXNlLmphdmEKaW5kZXggZGM2MDMxMS4uZGY5M2NlOCAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL3JlZnRyZWUvUmVmVHJlZURhdGFiYXNlLmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL3JlZnRyZWUvUmVmVHJlZURhdGFiYXNlLmphdmEKQEAgLTQzLDEwICs0MywxMyBAQAogCiBwYWNrYWdlIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5yZWZ0cmVlOwogCitpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQubGliLkNvbnN0YW50cy5IRUFEOwogaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5SZWYuU3RvcmFnZS5MT09TRTsKIGltcG9ydCBzdGF0aWMgb3JnLmVjbGlwc2UuamdpdC5saWIuUmVmLlN0b3JhZ2UuUEFDS0VEOwogCiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwogaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKIGltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKQEAgLTE4NywxMiArMTkwLDE5IEBAIHB1YmxpYyB2b2lkIGNsb3NlKCkgewogCiAJQE92ZXJyaWRlCiAJcHVibGljIFJlZiBnZXRSZWYoU3RyaW5nIG5hbWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXJldHVybiBmaW5kUmVmKGdldFJlZnMoQUxMKSwgbmFtZSk7CisJCVN0cmluZ1tdIG5lZWRsZSA9IG5ldyBTdHJpbmdbU0VBUkNIX1BBVEgubGVuZ3RoXTsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBTRUFSQ0hfUEFUSC5sZW5ndGg7IGkrKykgeworCQkJbmVlZGxlW2ldID0gU0VBUkNIX1BBVEhbaV0gKyBuYW1lOworCQl9CisJCXJldHVybiBmaXJzdEV4YWN0UmVmKG5lZWRsZSk7CiAJfQogCiAJQE92ZXJyaWRlCiAJcHVibGljIFJlZiBleGFjdFJlZihTdHJpbmcgbmFtZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJaWYgKGNvbmZsaWN0c1dpdGhCb290c3RyYXAobmFtZSkpIHsKKwkJaWYgKCFyZXBvLmlzQmFyZSgpICYmIG5hbWUuaW5kZXhPZignLycpIDwgMCAmJiAhSEVBRC5lcXVhbHMobmFtZSkpIHsKKwkJCS8vIFBhc3MgdGhyb3VnaCBuYW1lcyBsaWtlIE1FUkdFX0hFQUQsIE9SSUdfSEVBRCwgRkVUQ0hfSEVBRC4KKwkJCXJldHVybiBib290c3RyYXAuZXhhY3RSZWYobmFtZSk7CisJCX0gZWxzZSBpZiAoY29uZmxpY3RzV2l0aEJvb3RzdHJhcChuYW1lKSkgewogCQkJcmV0dXJuIG51bGw7CiAJCX0KIApAQCAtMjUwLDcgKzI2MCwyMyBAQCBwcml2YXRlIHN0YXRpYyBPYmplY3RJZCBpZE9mKEBOdWxsYWJsZSBSZWYgc3JjKSB7CiAKIAlAT3ZlcnJpZGUKIAlwdWJsaWMgTGlzdDxSZWY+IGdldEFkZGl0aW9uYWxSZWZzKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJcmV0dXJuIENvbGxlY3Rpb25zLmVtcHR5TGlzdCgpOworCQlDb2xsZWN0aW9uPFJlZj4gdHhuUmVmczsKKwkJaWYgKHR4bk5hbWVzcGFjZSAhPSBudWxsKSB7CisJCQl0eG5SZWZzID0gYm9vdHN0cmFwLmdldFJlZnModHhuTmFtZXNwYWNlKS52YWx1ZXMoKTsKKwkJfSBlbHNlIHsKKwkJCVJlZiByID0gYm9vdHN0cmFwLmV4YWN0UmVmKHR4bkNvbW1pdHRlZCk7CisJCQlpZiAociAhPSBudWxsICYmIHIuZ2V0T2JqZWN0SWQoKSAhPSBudWxsKSB7CisJCQkJdHhuUmVmcyA9IENvbGxlY3Rpb25zLnNpbmdsZXRvbihyKTsKKwkJCX0gZWxzZSB7CisJCQkJdHhuUmVmcyA9IENvbGxlY3Rpb25zLmVtcHR5TGlzdCgpOworCQkJfQorCQl9CisKKwkJTGlzdDxSZWY+IG90aGVyUmVmcyA9IGJvb3RzdHJhcC5nZXRBZGRpdGlvbmFsUmVmcygpOworCQlMaXN0PFJlZj4gYWxsID0gbmV3IEFycmF5TGlzdDw+KHR4blJlZnMuc2l6ZSgpICsgb3RoZXJSZWZzLnNpemUoKSk7CisJCWFsbC5hZGRBbGwodHhuUmVmcyk7CisJCWFsbC5hZGRBbGwob3RoZXJSZWZzKTsKKwkJcmV0dXJuIGFsbDsKIAl9CiAKIAlAT3ZlcnJpZGUKQEAgLTI5Myw2ICszMTksOSBAQCBwdWJsaWMgQmF0Y2hSZWZVcGRhdGUgbmV3QmF0Y2hVcGRhdGUoKSB7CiAKIAlAT3ZlcnJpZGUKIAlwdWJsaWMgUmVmVXBkYXRlIG5ld1VwZGF0ZShTdHJpbmcgbmFtZSwgYm9vbGVhbiBkZXRhY2gpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCWlmICghcmVwby5pc0JhcmUoKSAmJiBuYW1lLmluZGV4T2YoJy8nKSA8IDAgJiYgIUhFQUQuZXF1YWxzKG5hbWUpKSB7CisJCQlyZXR1cm4gYm9vdHN0cmFwLm5ld1VwZGF0ZShuYW1lLCBkZXRhY2gpOworCQl9CiAJCWlmIChjb25mbGljdHNXaXRoQm9vdHN0cmFwKG5hbWUpKSB7CiAJCQlyZXR1cm4gbmV3IEFsd2F5c0ZhaWxVcGRhdGUodGhpcywgbmFtZSk7CiAJCX0KQEAgLTMyNyw3ICszNTYsMTMgQEAgYm9vbGVhbiBjb25mbGljdHNXaXRoQm9vdHN0cmFwKFN0cmluZyBuYW1lKSB7CiAJCQlyZXR1cm4gdHJ1ZTsKIAkJfSBlbHNlIGlmICh0eG5Db21taXR0ZWQuZXF1YWxzKG5hbWUpKSB7CiAJCQlyZXR1cm4gdHJ1ZTsKLQkJfSBlbHNlIGlmIChuYW1lLmxlbmd0aCgpID4gdHhuQ29tbWl0dGVkLmxlbmd0aCgpCisJCX0KKworCQlpZiAobmFtZS5pbmRleE9mKCcvJykgPCAwICYmICFIRUFELmVxdWFscyhuYW1lKSkgeworCQkJcmV0dXJuIHRydWU7CisJCX0KKworCQlpZiAobmFtZS5sZW5ndGgoKSA+IHR4bkNvbW1pdHRlZC5sZW5ndGgoKQogCQkJCSYmIG5hbWUuY2hhckF0KHR4bkNvbW1pdHRlZC5sZW5ndGgoKSkgPT0gJy8nCiAJCQkJJiYgbmFtZS5zdGFydHNXaXRoKHR4bkNvbW1pdHRlZCkpIHsKIAkJCXJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL3JlZnRyZWUvUmVmVHJlZU5hbWVzLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvcmVmdHJlZS9SZWZUcmVlTmFtZXMuamF2YQppbmRleCAyMzlhNzQ1Li5jNTNkNmRlIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvcmVmdHJlZS9SZWZUcmVlTmFtZXMuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvcmVmdHJlZS9SZWZUcmVlTmFtZXMuamF2YQpAQCAtNDMsMTQgKzQzLDYgQEAKIAogcGFja2FnZSBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UucmVmdHJlZTsKIAotaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5SZWZEYXRhYmFzZS5BTEw7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5SZWY7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuUmVmRGF0YWJhc2U7CiAKIC8qKiBNYWdpYyByZWZlcmVuY2UgbmFtZSBsb2dpYyBmb3IgUmVmVHJlZXMuICovCkBAIC05MiwzMyArODQsNiBAQCBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNSZWZUcmVlKFJlZkRhdGFiYXNlIHJlZmRiLCBTdHJpbmcgcmVmKSB7CiAJCXJldHVybiBmYWxzZTsKIAl9CiAKLQkvKioKLQkgKiBTbmFwc2hvdCBhbGwgcmVmZXJlbmNlcyBmcm9tIGEgUmVmVHJlZURhdGFiYXNlIGFuZCBpdHMgYm9vdHN0cmFwLgotCSAqIDxwPgotCSAqIFRoZXJlIG1heSBiZSBuYW1lIGNvbmZsaWN0cyB3aXRoIG11bHRpcGxlIHtAbGluayBSZWZ9IG9iamVjdHMgY29udGFpbmluZwotCSAqIHRoZSBzYW1lIG5hbWUgaW4gdGhlIHJldHVybmVkIGNvbGxlY3Rpb24uCi0JICoKLQkgKiBAcGFyYW0gcmVmZGIKLQkgKiAgICAgICAgICAgIGRhdGFiYXNlIGluc3RhbmNlLgotCSAqIEByZXR1cm4gYWxsIGtub3duIHJlZmVyZW5jZXMuCi0JICogQHRocm93cyBJT0V4Y2VwdGlvbgotCSAqICAgICAgICAgICAgIHJlZmVyZW5jZXMgY2Fubm90IGJlIGVudW1lcmF0ZWQuCi0JICovCi0JcHVibGljIHN0YXRpYyBDb2xsZWN0aW9uPFJlZj4gYWxsUmVmcyhSZWZEYXRhYmFzZSByZWZkYikKLQkJCXRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUNvbGxlY3Rpb248UmVmPiByZWZzID0gcmVmZGIuZ2V0UmVmcyhBTEwpLnZhbHVlcygpOwotCQlpZiAoIShyZWZkYiBpbnN0YW5jZW9mIFJlZlRyZWVEYXRhYmFzZSkpIHsKLQkJCXJldHVybiByZWZzOwotCQl9Ci0KLQkJUmVmRGF0YWJhc2UgYm9vdHN0cmFwID0gKChSZWZUcmVlRGF0YWJhc2UpIHJlZmRiKS5nZXRCb290c3RyYXAoKTsKLQkJQ29sbGVjdGlvbjxSZWY+IGJyID0gYm9vdHN0cmFwLmdldFJlZnMoQUxMKS52YWx1ZXMoKTsKLQkJTGlzdDxSZWY+IGFsbCA9IG5ldyBBcnJheUxpc3Q8PihyZWZzLnNpemUoKSArIGJyLnNpemUoKSk7Ci0JCWFsbC5hZGRBbGwocmVmcyk7Ci0JCWFsbC5hZGRBbGwoYnIpOwotCQlyZXR1cm4gYWxsOwotCX0KLQogCXByaXZhdGUgUmVmVHJlZU5hbWVzKCkgewogCX0KIH0KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGliL1JlZlVwZGF0ZS5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9saWIvUmVmVXBkYXRlLmphdmEKaW5kZXggNDMxNmNkMC4uYzEwMjdmMCAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9saWIvUmVmVXBkYXRlLmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9saWIvUmVmVXBkYXRlLmphdmEKQEAgLTU1Miw3ICs1NTIsOCBAQCBwdWJsaWMgUmVzdWx0IGRlbGV0ZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CiAJICovCiAJcHVibGljIFJlc3VsdCBkZWxldGUoZmluYWwgUmV2V2FsayB3YWxrKSB0aHJvd3MgSU9FeGNlcHRpb24gewogCQlmaW5hbCBTdHJpbmcgbXlOYW1lID0gZ2V0UmVmKCkuZ2V0TGVhZigpLmdldE5hbWUoKTsKLQkJaWYgKG15TmFtZS5zdGFydHNXaXRoKENvbnN0YW50cy5SX0hFQURTKSkgeworCQlpZiAobXlOYW1lLnN0YXJ0c1dpdGgoQ29uc3RhbnRzLlJfSEVBRFMpICYmICFnZXRSZXBvc2l0b3J5KCkuaXNCYXJlKCkpIHsKKwkJCS8vIERvbid0IGFsbG93IHRoZSBjdXJyZW50bHkgY2hlY2tlZCBvdXQgYnJhbmNoIHRvIGJlIGRlbGV0ZWQuCiAJCQlSZWYgaGVhZCA9IGdldFJlZkRhdGFiYXNlKCkuZ2V0UmVmKENvbnN0YW50cy5IRUFEKTsKIAkJCXdoaWxlIChoZWFkICE9IG51bGwgJiYgaGVhZC5pc1N5bWJvbGljKCkpIHsKIAkJCQloZWFkID0gaGVhZC5nZXRUYXJnZXQoKTsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvdHJhbnNwb3J0L0NoYWluaW5nQ3JlZGVudGlhbHNQcm92aWRlci5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC90cmFuc3BvcnQvQ2hhaW5pbmdDcmVkZW50aWFsc1Byb3ZpZGVyLmphdmEKaW5kZXggMzk0MWQzYy4uNzM5ZGRjYyAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC90cmFuc3BvcnQvQ2hhaW5pbmdDcmVkZW50aWFsc1Byb3ZpZGVyLmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC90cmFuc3BvcnQvQ2hhaW5pbmdDcmVkZW50aWFsc1Byb3ZpZGVyLmphdmEKQEAgLTcwLDggKzcwLDYgQEAgcHVibGljIGNsYXNzIENoYWluaW5nQ3JlZGVudGlhbHNQcm92aWRlciBleHRlbmRzIENyZWRlbnRpYWxzUHJvdmlkZXIgewogCXB1YmxpYyBDaGFpbmluZ0NyZWRlbnRpYWxzUHJvdmlkZXIoQ3JlZGVudGlhbHNQcm92aWRlci4uLiBwcm92aWRlcnMpIHsKIAkJdGhpcy5jcmVkZW50aWFsUHJvdmlkZXJzID0gbmV3IEFycmF5TGlzdDxDcmVkZW50aWFsc1Byb3ZpZGVyPigKIAkJCQlBcnJheXMuYXNMaXN0KHByb3ZpZGVycykpOwotCQlmb3IgKENyZWRlbnRpYWxzUHJvdmlkZXIgcCA6IHByb3ZpZGVycykKLQkJCWNyZWRlbnRpYWxQcm92aWRlcnMuYWRkKHApOwogCX0KIAogCS8qKgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC90cmFuc3BvcnQvRGFlbW9uLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3RyYW5zcG9ydC9EYWVtb24uamF2YQppbmRleCBkOWUwYjkzLi4xYmVlYzkwIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3RyYW5zcG9ydC9EYWVtb24uamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3RyYW5zcG9ydC9EYWVtb24uamF2YQpAQCAtMjU2LDYgKzI1NiwxNiBAQCBwdWJsaWMgdm9pZCBzZXRVcGxvYWRQYWNrRmFjdG9yeShVcGxvYWRQYWNrRmFjdG9yeTxEYWVtb25DbGllbnQ+IGZhY3RvcnkpIHsKIAl9CiAKIAkvKioKKwkgKiBHZXQgdGhlIGZhY3RvcnkgdXNlZCB0byBjb25zdHJ1Y3QgcGVyLXJlcXVlc3QgUmVjZWl2ZVBhY2suCisJICoKKwkgKiBAcmV0dXJuIHRoZSBmYWN0b3J5LgorCSAqIEBzaW5jZSA0LjMKKwkgKi8KKwlwdWJsaWMgUmVjZWl2ZVBhY2tGYWN0b3J5PERhZW1vbkNsaWVudD4gZ2V0UmVjZWl2ZVBhY2tGYWN0b3J5KCkgeworCQlyZXR1cm4gcmVjZWl2ZVBhY2tGYWN0b3J5OworCX0KKworCS8qKgogCSAqIFNldCB0aGUgZmFjdG9yeSB0byBjb25zdHJ1Y3QgYW5kIGNvbmZpZ3VyZSBwZXItcmVxdWVzdCBSZWNlaXZlUGFjay4KIAkgKgogCSAqIEBwYXJhbSBmYWN0b3J5CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3RyYW5zcG9ydC9UcmFuc3BvcnRIdHRwLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3RyYW5zcG9ydC9UcmFuc3BvcnRIdHRwLmphdmEKaW5kZXggNTk0ODI3OC4uNDE0ZTg3OSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC90cmFuc3BvcnQvVHJhbnNwb3J0SHR0cC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvdHJhbnNwb3J0L1RyYW5zcG9ydEh0dHAuamF2YQpAQCAtNjcsOSArNjcsNiBAQAogaW1wb3J0IGphdmEubmV0LlByb3h5OwogaW1wb3J0IGphdmEubmV0LlByb3h5U2VsZWN0b3I7CiBpbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEuc2VjdXJpdHkuS2V5TWFuYWdlbWVudEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnNlY3VyaXR5Lk5vU3VjaEFsZ29yaXRobUV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnNlY3VyaXR5LmNlcnQuWDUwOUNlcnRpZmljYXRlOwogaW1wb3J0IGphdmEudGV4dC5NZXNzYWdlRm9ybWF0OwogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLkFycmF5czsKQEAgLTgzLDExICs4MCw2IEBACiBpbXBvcnQgamF2YS51dGlsLnppcC5HWklQSW5wdXRTdHJlYW07CiBpbXBvcnQgamF2YS51dGlsLnppcC5HWklQT3V0cHV0U3RyZWFtOwogCi1pbXBvcnQgamF2YXgubmV0LnNzbC5Ib3N0bmFtZVZlcmlmaWVyOwotaW1wb3J0IGphdmF4Lm5ldC5zc2wuU1NMU2Vzc2lvbjsKLWltcG9ydCBqYXZheC5uZXQuc3NsLlRydXN0TWFuYWdlcjsKLWltcG9ydCBqYXZheC5uZXQuc3NsLlg1MDlUcnVzdE1hbmFnZXI7Ci0KIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmVycm9ycy5Ob1JlbW90ZVJlcG9zaXRvcnlFeGNlcHRpb247CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5lcnJvcnMuTm90U3VwcG9ydGVkRXhjZXB0aW9uOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuZXJyb3JzLlBhY2tQcm90b2NvbEV4Y2VwdGlvbjsKQEAgLTUzOCw3ICs1MzAsNyBAQCBwcm90ZWN0ZWQgSHR0cENvbm5lY3Rpb24gaHR0cE9wZW4oU3RyaW5nIG1ldGhvZCwgVVJMIHUpCiAJCUh0dHBDb25uZWN0aW9uIGNvbm4gPSBjb25uZWN0aW9uRmFjdG9yeS5jcmVhdGUodSwgcHJveHkpOwogCiAJCWlmICghaHR0cC5zc2xWZXJpZnkgJiYgImh0dHBzIi5lcXVhbHModS5nZXRQcm90b2NvbCgpKSkgeyAvLyROT04tTkxTLTEkCi0JCQlkaXNhYmxlU3NsVmVyaWZ5KGNvbm4pOworCQkJSHR0cFN1cHBvcnQuZGlzYWJsZVNzbFZlcmlmeShjb25uKTsKIAkJfQogCiAJCWNvbm4uc2V0UmVxdWVzdE1ldGhvZChtZXRob2QpOwpAQCAtNTYyLDE5ICs1NTQsNiBAQCBwcm90ZWN0ZWQgSHR0cENvbm5lY3Rpb24gaHR0cE9wZW4oU3RyaW5nIG1ldGhvZCwgVVJMIHUpCiAJCXJldHVybiBjb25uOwogCX0KIAotCXByaXZhdGUgdm9pZCBkaXNhYmxlU3NsVmVyaWZ5KEh0dHBDb25uZWN0aW9uIGNvbm4pCi0JCQl0aHJvd3MgSU9FeGNlcHRpb24gewotCQlmaW5hbCBUcnVzdE1hbmFnZXJbXSB0cnVzdEFsbENlcnRzID0gbmV3IFRydXN0TWFuYWdlcltdIHsgbmV3IER1bW15WDUwOVRydXN0TWFuYWdlcigpIH07Ci0JCXRyeSB7Ci0JCQljb25uLmNvbmZpZ3VyZShudWxsLCB0cnVzdEFsbENlcnRzLCBudWxsKTsKLQkJCWNvbm4uc2V0SG9zdG5hbWVWZXJpZmllcihuZXcgRHVtbXlIb3N0bmFtZVZlcmlmaWVyKCkpOwotCQl9IGNhdGNoIChLZXlNYW5hZ2VtZW50RXhjZXB0aW9uIGUpIHsKLQkJCXRocm93IG5ldyBJT0V4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7Ci0JCX0gY2F0Y2ggKE5vU3VjaEFsZ29yaXRobUV4Y2VwdGlvbiBlKSB7Ci0JCQl0aHJvdyBuZXcgSU9FeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOwotCQl9Ci0JfQotCiAJZmluYWwgSW5wdXRTdHJlYW0gb3BlbklucHV0U3RyZWFtKEh0dHBDb25uZWN0aW9uIGNvbm4pCiAJCQl0aHJvd3MgSU9FeGNlcHRpb24gewogCQlJbnB1dFN0cmVhbSBpbnB1dCA9IGNvbm4uZ2V0SW5wdXRTdHJlYW0oKTsKQEAgLTEwMDIsMjUgKzk4MSw0IEBAIHZvaWQgZXhlY3V0ZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CiAJCQlpbi5hZGQob3BlbklucHV0U3RyZWFtKGNvbm4pKTsKIAkJfQogCX0KLQotCXByaXZhdGUgc3RhdGljIGNsYXNzIER1bW15WDUwOVRydXN0TWFuYWdlciBpbXBsZW1lbnRzIFg1MDlUcnVzdE1hbmFnZXIgewotCQlwdWJsaWMgWDUwOUNlcnRpZmljYXRlW10gZ2V0QWNjZXB0ZWRJc3N1ZXJzKCkgewotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBjaGVja0NsaWVudFRydXN0ZWQoWDUwOUNlcnRpZmljYXRlW10gY2VydHMsIFN0cmluZyBhdXRoVHlwZSkgewotCQkJLy8gbm8gY2hlY2sKLQkJfQotCi0JCXB1YmxpYyB2b2lkIGNoZWNrU2VydmVyVHJ1c3RlZChYNTA5Q2VydGlmaWNhdGVbXSBjZXJ0cywgU3RyaW5nIGF1dGhUeXBlKSB7Ci0JCQkvLyBubyBjaGVjawotCQl9Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgY2xhc3MgRHVtbXlIb3N0bmFtZVZlcmlmaWVyIGltcGxlbWVudHMgSG9zdG5hbWVWZXJpZmllciB7Ci0JCXB1YmxpYyBib29sZWFuIHZlcmlmeShTdHJpbmcgaG9zdG5hbWUsIFNTTFNlc3Npb24gc2Vzc2lvbikgewotCQkJLy8gYWx3YXlzIGFjY2VwdAotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQl9CiB9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3RyZWV3YWxrL0Fic3RyYWN0VHJlZUl0ZXJhdG9yLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3RyZWV3YWxrL0Fic3RyYWN0VHJlZUl0ZXJhdG9yLmphdmEKaW5kZXggNTgxMzYzNS4uZGM4MzVlNCAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC90cmVld2Fsay9BYnN0cmFjdFRyZWVJdGVyYXRvci5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvdHJlZXdhbGsvQWJzdHJhY3RUcmVlSXRlcmF0b3IuamF2YQpAQCAtNTAsNiArNTAsNyBAQAogaW1wb3J0IGphdmEubmlvLkNoYXJCdWZmZXI7CiAKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmF0dHJpYnV0ZXMuQXR0cmlidXRlc05vZGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5hdHRyaWJ1dGVzLkF0dHJpYnV0ZXNIYW5kbGVyOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuZGlyY2FjaGUuRGlyQ2FjaGVDaGVja291dDsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmVycm9ycy5Db3JydXB0T2JqZWN0RXhjZXB0aW9uOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuZXJyb3JzLkluY29ycmVjdE9iamVjdFR5cGVFeGNlcHRpb247CkBAIC04OCw4ICs4OSwxNCBAQCBwdWJsaWMgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RUcmVlSXRlcmF0b3IgewogCS8qKiBBIGR1bW15IG9iamVjdCBpZCBidWZmZXIgdGhhdCBtYXRjaGVzIHRoZSB6ZXJvIE9iamVjdElkLiAqLwogCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgYnl0ZVtdIHplcm9pZCA9IG5ldyBieXRlW0NvbnN0YW50cy5PQkpFQ1RfSURfTEVOR1RIXTsKIAotCS8qKiBJdGVyYXRvciBmb3IgdGhlIHBhcmVudCB0cmVlOyBudWxsIGlmIHdlIGFyZSB0aGUgcm9vdCBpdGVyYXRvci4gKi8KLQlmaW5hbCBBYnN0cmFjdFRyZWVJdGVyYXRvciBwYXJlbnQ7CisJLyoqCisJICogSXRlcmF0b3IgZm9yIHRoZSBwYXJlbnQgdHJlZTsgbnVsbCBpZiB3ZSBhcmUgdGhlIHJvb3QgaXRlcmF0b3IuCisJICogPHA+CisJICogVXNlZCBieSB7QGxpbmsgVHJlZVdhbGt9IGFuZCB7QGxpbmsgQXR0cmlidXRlc0hhbmRsZXJ9CisJICoKKwkgKiBAc2luY2UgNC4zCisJICovCisJcHVibGljIGZpbmFsIEFic3RyYWN0VHJlZUl0ZXJhdG9yIHBhcmVudDsKIAogCS8qKiBUaGUgaXRlcmF0b3IgdGhpcyBjdXJyZW50IGVudHJ5IGlzIHBhdGggZXF1YWwgdG8uICovCiAJQWJzdHJhY3RUcmVlSXRlcmF0b3IgbWF0Y2hlczsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvdHJlZXdhbGsvVHJlZVdhbGsuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvdHJlZXdhbGsvVHJlZVdhbGsuamF2YQppbmRleCA1Y2Q3MTNkLi40Nzc1ZTk2IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3RyZWV3YWxrL1RyZWVXYWxrLmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC90cmVld2Fsay9UcmVlV2Fsay5qYXZhCkBAIC00OSwxNSArNDksMTMgQEAKIGltcG9ydCBqYXZhLnV0aWwuTWFwOwogaW1wb3J0IGphdmEudXRpbC5TZXQ7CiAKLWltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmFubm90YXRpb25zLk51bGxhYmxlOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuYXBpLmVycm9ycy5KR2l0SW50ZXJuYWxFeGNlcHRpb247CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5hdHRyaWJ1dGVzLkF0dHJpYnV0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmF0dHJpYnV0ZXMuQXR0cmlidXRlLlN0YXRlOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuYXR0cmlidXRlcy5BdHRyaWJ1dGVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuYXR0cmlidXRlcy5BdHRyaWJ1dGVzTm9kZTsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmF0dHJpYnV0ZXMuQXR0cmlidXRlc05vZGVQcm92aWRlcjsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmF0dHJpYnV0ZXMuQXR0cmlidXRlc1Byb3ZpZGVyOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuZGlyY2FjaGUuRGlyQ2FjaGVCdWlsZEl0ZXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuYXR0cmlidXRlcy5BdHRyaWJ1dGVzSGFuZGxlcjsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmRpcmNhY2hlLkRpckNhY2hlSXRlcmF0b3I7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5lcnJvcnMuQ29ycnVwdE9iamVjdEV4Y2VwdGlvbjsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmVycm9ycy5JbmNvcnJlY3RPYmplY3RUeXBlRXhjZXB0aW9uOwpAQCAtMjcwLDYgKzI2OCw5IEBAIHB1YmxpYyBzdGF0aWMgVHJlZVdhbGsgZm9yUGF0aChmaW5hbCBSZXBvc2l0b3J5IGRiLCBmaW5hbCBTdHJpbmcgcGF0aCwKIAkvKiogQ2FjaGVkIGF0dHJpYnV0ZSBmb3IgdGhlIGN1cnJlbnQgZW50cnkgKi8KIAlwcml2YXRlIEF0dHJpYnV0ZXMgYXR0cnMgPSBudWxsOwogCisJLyoqIENhY2hlZCBhdHRyaWJ1dGVzIGhhbmRsZXIgKi8KKwlwcml2YXRlIEF0dHJpYnV0ZXNIYW5kbGVyIGF0dHJpYnV0ZXNIYW5kbGVyOworCiAJcHJpdmF0ZSBDb25maWcgY29uZmlnOwogCiAJLyoqCkBAIC0zMTAsNiArMzExLDE0IEBAIHB1YmxpYyBPYmplY3RSZWFkZXIgZ2V0T2JqZWN0UmVhZGVyKCkgewogCX0KIAogCS8qKgorCSAqIEByZXR1cm4gdGhlIHtAbGluayBPcGVyYXRpb25UeXBlfQorCSAqIEBzaW5jZSA0LjMKKwkgKi8KKwlwdWJsaWMgT3BlcmF0aW9uVHlwZSBnZXRPcGVyYXRpb25UeXBlKCkgeworCQlyZXR1cm4gb3BlcmF0aW9uVHlwZTsKKwl9CisKKwkvKioKIAkgKiBSZWxlYXNlIGFueSByZXNvdXJjZXMgdXNlZCBieSB0aGlzIHdhbGtlcidzIHJlYWRlci4KIAkgKiA8cD4KIAkgKiBBIHdhbGtlciB0aGF0IGhhcyBiZWVuIHJlbGVhc2VkIGNhbiBiZSB1c2VkIGFnYWluLCBidXQgbWF5IG5lZWQgdG8gYmUKQEAgLTQzNSw5ICs0NDQsODMgQEAgcHVibGljIHZvaWQgc2V0QXR0cmlidXRlc05vZGVQcm92aWRlcihBdHRyaWJ1dGVzTm9kZVByb3ZpZGVyIHByb3ZpZGVyKSB7CiAJCWF0dHJpYnV0ZXNOb2RlUHJvdmlkZXIgPSBwcm92aWRlcjsKIAl9CiAKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSB7QGxpbmsgQXR0cmlidXRlc05vZGVQcm92aWRlcn0gZm9yIHRoaXMge0BsaW5rIFRyZWVXYWxrfS4KKwkgKiBAc2luY2UgNC4zCisJICovCisJcHVibGljIEF0dHJpYnV0ZXNOb2RlUHJvdmlkZXIgZ2V0QXR0cmlidXRlc05vZGVQcm92aWRlcigpIHsKKwkJcmV0dXJuIGF0dHJpYnV0ZXNOb2RlUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogUmV0cmlldmUgdGhlIGdpdCBhdHRyaWJ1dGVzIGZvciB0aGUgY3VycmVudCBlbnRyeS4KKwkgKgorCSAqIDxoND5HaXQgYXR0cmlidXRlIGNvbXB1dGF0aW9uPC9oND4KKwkgKgorCSAqIDx1bD4KKwkgKiA8bGk+R2V0IHRoZSBhdHRyaWJ1dGVzIG1hdGNoaW5nIHRoZSBjdXJyZW50IHBhdGggZW50cnkgZnJvbSB0aGUgaW5mbyBmaWxlCisJICogKHNlZSB7QGxpbmsgQXR0cmlidXRlc05vZGVQcm92aWRlciNnZXRJbmZvQXR0cmlidXRlc05vZGUoKX0pLjwvbGk+CisJICogPGxpPkNvbXBsZXRlcyB0aGUgbGlzdCBvZiBhdHRyaWJ1dGVzIHVzaW5nIHRoZSAuZ2l0YXR0cmlidXRlcyBmaWxlcworCSAqIGxvY2F0ZWQgb24gdGhlIGN1cnJlbnQgcGF0aCAodGhlIGZ1cnRoZXIgdGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zCisJICogLmdpdGF0dHJpYnV0ZXMgaXMgZnJvbSB0aGUgcGF0aCBpbiBxdWVzdGlvbiwgdGhlIGxvd2VyIGl0cyBwcmVjZWRlbmNlKS4KKwkgKiBGb3IgYSBjaGVja2luIG9wZXJhdGlvbiwgaXQgd2lsbCBsb29rIGZpcnN0IG9uIHRoZSB3b3JraW5nIHRyZWUgKGlmIGFueSkuCisJICogSWYgdGhlcmUgaXMgbm8gYXR0cmlidXRlcyBmaWxlLCBpdCB3aWxsIGZhbGxiYWNrIG9uIHRoZSBpbmRleC4gRm9yIGEKKwkgKiBjaGVja291dCBvcGVyYXRpb24sIGl0IHdpbGwgZmlyc3QgdXNlIHRoZSBpbmRleCBlbnRyeSBhbmQgdGhlbiBmYWxsYmFjaworCSAqIG9uIHRoZSB3b3JraW5nIHRyZWUgaWYgbm9uZS48L2xpPgorCSAqIDxsaT5JbiB0aGUgZW5kLCBjb21wbGV0ZXMgdGhlIGxpc3Qgb2YgbWF0Y2hpbmcgYXR0cmlidXRlcyB1c2luZyB0aGUKKwkgKiBnbG9iYWwgYXR0cmlidXRlIGZpbGUgZGVmaW5lIGluIHRoZSBjb25maWd1cmF0aW9uIChzZWUKKwkgKiB7QGxpbmsgQXR0cmlidXRlc05vZGVQcm92aWRlciNnZXRHbG9iYWxBdHRyaWJ1dGVzTm9kZSgpfSk8L2xpPgorCSAqCisJICogPC91bD4KKwkgKgorCSAqCisJICogPGg0Pkl0ZXJhdG9yIGNvbnN0cmFpbnRzPC9oND4KKwkgKgorCSAqIDxwPgorCSAqIEluIG9yZGVyIHRvIGhhdmUgYSBjb3JyZWN0IGxpc3Qgb2YgYXR0cmlidXRlcyBmb3IgdGhlIGN1cnJlbnQgZW50cnksIHRoaXMKKwkgKiB7QGxpbmsgVHJlZVdhbGt9IHJlcXVpcmVzIHRvIGhhdmUgYXQgbGVhc3Qgb25lCisJICoge0BsaW5rIEF0dHJpYnV0ZXNOb2RlUHJvdmlkZXJ9IGFuZCBhIHtAbGluayBEaXJDYWNoZUl0ZXJhdG9yfSBzZXQgdXAuIEFuCisJICoge0BsaW5rIEF0dHJpYnV0ZXNOb2RlUHJvdmlkZXJ9IGlzIHVzZWQgdG8gcmV0cmlldmUgdGhlIGF0dHJpYnV0ZXMgZnJvbQorCSAqIHRoZSBpbmZvIGF0dHJpYnV0ZXMgZmlsZSBhbmQgdGhlIGdsb2JhbCBhdHRyaWJ1dGVzIGZpbGUuIFRoZQorCSAqIHtAbGluayBEaXJDYWNoZUl0ZXJhdG9yfSBpcyB1c2VkIHRvIHJldHJpZXZlIHRoZSAuZ2l0YXR0cmlidXRlcyBmaWxlcworCSAqIHN0b3JlZCBpbiB0aGUgaW5kZXguIEEge0BsaW5rIFdvcmtpbmdUcmVlSXRlcmF0b3J9IGNhbiBhbHNvIGJlIHByb3ZpZGVkCisJICogdG8gYWNjZXNzIHRoZSBsb2NhbCB2ZXJzaW9uIG9mIHRoZSAuZ2l0YXR0cmlidXRlcyBmaWxlcy4gSWYgbm9uZSBpcworCSAqIHByb3ZpZGVkIGl0IHdpbGwgZmFsbGJhY2sgb24gdGhlIHtAbGluayBEaXJDYWNoZUl0ZXJhdG9yfS4KKwkgKiA8L3A+CisJICoKKwkgKiBAcmV0dXJuIGEge0BsaW5rIFNldH0gb2Yge0BsaW5rIEF0dHJpYnV0ZX1zIHRoYXQgbWF0Y2ggdGhlIGN1cnJlbnQgZW50cnkuCisJICogQHNpbmNlIDQuMgorCSAqLworCXB1YmxpYyBBdHRyaWJ1dGVzIGdldEF0dHJpYnV0ZXMoKSB7CisJCWlmIChhdHRycyAhPSBudWxsKQorCQkJcmV0dXJuIGF0dHJzOworCisJCWlmIChhdHRyaWJ1dGVzTm9kZVByb3ZpZGVyID09IG51bGwpIHsKKwkJCS8vIFRoZSB3b3JrIHRyZWUgc2hvdWxkIGhhdmUgYSBBdHRyaWJ1dGVzTm9kZVByb3ZpZGVyIHRvIGJlIGFibGUgdG8KKwkJCS8vIHJldHJpZXZlIHRoZSBpbmZvIGFuZCBnbG9iYWwgYXR0cmlidXRlcyBub2RlCisJCQl0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKAorCQkJCQkiVGhlIHRyZWUgd2FsayBzaG91bGQgaGF2ZSBvbmUgQXR0cmlidXRlc05vZGVQcm92aWRlciBzZXQgaW4gb3JkZXIgdG8gY29tcHV0ZSB0aGUgZ2l0IGF0dHJpYnV0ZXMuIik7IC8vJE5PTi1OTFMtMSQKKwkJfQorCisJCXRyeSB7CisJCQkvLyBMYXp5IGNyZWF0ZSB0aGUgYXR0cmlidXRlc0hhbmRsZXIgb24gdGhlIGZpcnN0IGFjY2VzcyBvZgorCQkJLy8gYXR0cmlidXRlcy4gVGhpcyByZXF1aXJlcyB0aGUgaW5mbywgZ2xvYmFsIGFuZCByb290CisJCQkvLyBhdHRyaWJ1dGVzIG5vZGVzCisJCQlpZiAoYXR0cmlidXRlc0hhbmRsZXIgPT0gbnVsbCkgeworCQkJCWF0dHJpYnV0ZXNIYW5kbGVyID0gbmV3IEF0dHJpYnV0ZXNIYW5kbGVyKHRoaXMpOworCQkJfQorCQkJYXR0cnMgPSBhdHRyaWJ1dGVzSGFuZGxlci5nZXRBdHRyaWJ1dGVzKCk7CisJCQlyZXR1cm4gYXR0cnM7CisJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCXRocm93IG5ldyBKR2l0SW50ZXJuYWxFeGNlcHRpb24oIkVycm9yIHdoaWxlIHBhcnNpbmcgYXR0cmlidXRlcyIsIC8vJE5PTi1OTFMtMSQKKwkJCQkJZSk7CisJCX0KKwl9CisKIAkvKiogUmVzZXQgdGhpcyB3YWxrZXIgc28gbmV3IHRyZWUgaXRlcmF0b3JzIGNhbiBiZSBhZGRlZCB0byBpdC4gKi8KIAlwdWJsaWMgdm9pZCByZXNldCgpIHsKIAkJYXR0cnMgPSBudWxsOworCQlhdHRyaWJ1dGVzSGFuZGxlciA9IG51bGw7CiAJCXRyZWVzID0gTk9fVFJFRVM7CiAJCWFkdmFuY2UgPSBmYWxzZTsKIAkJZGVwdGggPSAwOwpAQCAtNzQwLDYgKzgyMywxNiBAQCBwdWJsaWMgRmlsZU1vZGUgZ2V0RmlsZU1vZGUoZmluYWwgaW50IG50aCkgewogCX0KIAogCS8qKgorCSAqIE9idGFpbiB0aGUge0BsaW5rIEZpbGVNb2RlfSBmb3IgdGhlIGN1cnJlbnQgZW50cnkgb24gdGhlIGN1cnJlbnRIZWFkIHRyZWUKKwkgKgorCSAqIEByZXR1cm4gbW9kZSBmb3IgdGhlIGN1cnJlbnQgZW50cnkgb2YgdGhlIGN1cnJlbnRIZWFkIHRyZWUuCisJICogQHNpbmNlIDQuMworCSAqLworCXB1YmxpYyBGaWxlTW9kZSBnZXRGaWxlTW9kZSgpIHsKKwkJcmV0dXJuIEZpbGVNb2RlLmZyb21CaXRzKGN1cnJlbnRIZWFkLm1vZGUpOworCX0KKworCS8qKgogCSAqIE9idGFpbiB0aGUgT2JqZWN0SWQgZm9yIHRoZSBjdXJyZW50IGVudHJ5LgogCSAqIDxwPgogCSAqIFVzaW5nIHRoaXMgbWV0aG9kIHRvIGNvbXBhcmUgT2JqZWN0SWQgdmFsdWVzIGJldHdlZW4gdHJlZXMgb2YgdGhpcyB3YWxrZXIKQEAgLTExMDksMTU2ICsxMjAyLDEzIEBAIHN0YXRpYyBTdHJpbmcgcGF0aE9mKGZpbmFsIGJ5dGVbXSBidWYsIGludCBwb3MsIGludCBlbmQpIHsKIAl9CiAKIAkvKioKLQkgKiBSZXRyaWV2ZSB0aGUgZ2l0IGF0dHJpYnV0ZXMgZm9yIHRoZSBjdXJyZW50IGVudHJ5LgotCSAqCi0JICogPGg0PkdpdCBhdHRyaWJ1dGUgY29tcHV0YXRpb248L2g0PgotCSAqCi0JICogPHVsPgotCSAqIDxsaT5HZXQgdGhlIGF0dHJpYnV0ZXMgbWF0Y2hpbmcgdGhlIGN1cnJlbnQgcGF0aCBlbnRyeSBmcm9tIHRoZSBpbmZvIGZpbGUKLQkgKiAoc2VlIHtAbGluayBBdHRyaWJ1dGVzTm9kZVByb3ZpZGVyI2dldEluZm9BdHRyaWJ1dGVzTm9kZSgpfSkuPC9saT4KLQkgKiA8bGk+Q29tcGxldGVzIHRoZSBsaXN0IG9mIGF0dHJpYnV0ZXMgdXNpbmcgdGhlIC5naXRhdHRyaWJ1dGVzIGZpbGVzCi0JICogbG9jYXRlZCBvbiB0aGUgY3VycmVudCBwYXRoICh0aGUgZnVydGhlciB0aGUgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMKLQkgKiAuZ2l0YXR0cmlidXRlcyBpcyBmcm9tIHRoZSBwYXRoIGluIHF1ZXN0aW9uLCB0aGUgbG93ZXIgaXRzIHByZWNlZGVuY2UpLgotCSAqIEZvciBhIGNoZWNraW4gb3BlcmF0aW9uLCBpdCB3aWxsIGxvb2sgZmlyc3Qgb24gdGhlIHdvcmtpbmcgdHJlZSAoaWYgYW55KS4KLQkgKiBJZiB0aGVyZSBpcyBubyBhdHRyaWJ1dGVzIGZpbGUsIGl0IHdpbGwgZmFsbGJhY2sgb24gdGhlIGluZGV4LiBGb3IgYQotCSAqIGNoZWNrb3V0IG9wZXJhdGlvbiwgaXQgd2lsbCBmaXJzdCB1c2UgdGhlIGluZGV4IGVudHJ5IGFuZCB0aGVuIGZhbGxiYWNrCi0JICogb24gdGhlIHdvcmtpbmcgdHJlZSBpZiBub25lLjwvbGk+Ci0JICogPGxpPkluIHRoZSBlbmQsIGNvbXBsZXRlcyB0aGUgbGlzdCBvZiBtYXRjaGluZyBhdHRyaWJ1dGVzIHVzaW5nIHRoZQotCSAqIGdsb2JhbCBhdHRyaWJ1dGUgZmlsZSBkZWZpbmUgaW4gdGhlIGNvbmZpZ3VyYXRpb24gKHNlZQotCSAqIHtAbGluayBBdHRyaWJ1dGVzTm9kZVByb3ZpZGVyI2dldEdsb2JhbEF0dHJpYnV0ZXNOb2RlKCl9KTwvbGk+Ci0JICoKLQkgKiA8L3VsPgotCSAqCi0JICoKLQkgKiA8aDQ+SXRlcmF0b3IgY29uc3RyYWludHM8L2g0PgotCSAqCi0JICogPHA+Ci0JICogSW4gb3JkZXIgdG8gaGF2ZSBhIGNvcnJlY3QgbGlzdCBvZiBhdHRyaWJ1dGVzIGZvciB0aGUgY3VycmVudCBlbnRyeSwgdGhpcwotCSAqIHtAbGluayBUcmVlV2Fsa30gcmVxdWlyZXMgdG8gaGF2ZSBhdCBsZWFzdCBvbmUKLQkgKiB7QGxpbmsgQXR0cmlidXRlc05vZGVQcm92aWRlcn0gYW5kIGEge0BsaW5rIERpckNhY2hlSXRlcmF0b3J9IHNldCB1cC4gQW4KLQkgKiB7QGxpbmsgQXR0cmlidXRlc05vZGVQcm92aWRlcn0gaXMgdXNlZCB0byByZXRyaWV2ZSB0aGUgYXR0cmlidXRlcyBmcm9tCi0JICogdGhlIGluZm8gYXR0cmlidXRlcyBmaWxlIGFuZCB0aGUgZ2xvYmFsIGF0dHJpYnV0ZXMgZmlsZS4gVGhlCi0JICoge0BsaW5rIERpckNhY2hlSXRlcmF0b3J9IGlzIHVzZWQgdG8gcmV0cmlldmUgdGhlIC5naXRhdHRyaWJ1dGVzIGZpbGVzCi0JICogc3RvcmVkIGluIHRoZSBpbmRleC4gQSB7QGxpbmsgV29ya2luZ1RyZWVJdGVyYXRvcn0gY2FuIGFsc28gYmUgcHJvdmlkZWQKLQkgKiB0byBhY2Nlc3MgdGhlIGxvY2FsIHZlcnNpb24gb2YgdGhlIC5naXRhdHRyaWJ1dGVzIGZpbGVzLiBJZiBub25lIGlzCi0JICogcHJvdmlkZWQgaXQgd2lsbCBmYWxsYmFjayBvbiB0aGUge0BsaW5rIERpckNhY2hlSXRlcmF0b3J9LgotCSAqIDwvcD4KLQkgKgotCSAqIEByZXR1cm4gYSB7QGxpbmsgU2V0fSBvZiB7QGxpbmsgQXR0cmlidXRlfXMgdGhhdCBtYXRjaCB0aGUgY3VycmVudCBlbnRyeS4KLQkgKiBAc2luY2UgNC4yCisJICogQHBhcmFtIHR5cGUKKwkgKiAgICAgICAgICAgIG9mIHRoZSB0cmVlIHRvIGJlIHF1ZXJpZWQKKwkgKiBAcmV0dXJuIHRoZSB0cmVlIG9mIHRoYXQgdHlwZSBvciBudWxsIGlmIG5vbmUgaXMgcHJlc2VudAorCSAqIEBzaW5jZSA0LjMKIAkgKi8KLQlwdWJsaWMgQXR0cmlidXRlcyBnZXRBdHRyaWJ1dGVzKCkgewotCQlpZiAoYXR0cnMgIT0gbnVsbCkKLQkJCXJldHVybiBhdHRyczsKLQotCQlpZiAoYXR0cmlidXRlc05vZGVQcm92aWRlciA9PSBudWxsKSB7Ci0JCQkvLyBUaGUgd29yayB0cmVlIHNob3VsZCBoYXZlIGEgQXR0cmlidXRlc05vZGVQcm92aWRlciB0byBiZSBhYmxlIHRvCi0JCQkvLyByZXRyaWV2ZSB0aGUgaW5mbyBhbmQgZ2xvYmFsIGF0dHJpYnV0ZXMgbm9kZQotCQkJdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigKLQkJCQkJIlRoZSB0cmVlIHdhbGsgc2hvdWxkIGhhdmUgb25lIEF0dHJpYnV0ZXNOb2RlUHJvdmlkZXIgc2V0IGluIG9yZGVyIHRvIGNvbXB1dGUgdGhlIGdpdCBhdHRyaWJ1dGVzLiIpOyAvLyROT04tTkxTLTEkCi0JCX0KLQotCQlXb3JraW5nVHJlZUl0ZXJhdG9yIHdvcmtpbmdUcmVlSXRlcmF0b3IgPSBnZXRUcmVlKFdvcmtpbmdUcmVlSXRlcmF0b3IuY2xhc3MpOwotCQlEaXJDYWNoZUl0ZXJhdG9yIGRpckNhY2hlSXRlcmF0b3IgPSBnZXRUcmVlKERpckNhY2hlSXRlcmF0b3IuY2xhc3MpOwotCQlDYW5vbmljYWxUcmVlUGFyc2VyIG90aGVyID0gZ2V0VHJlZShDYW5vbmljYWxUcmVlUGFyc2VyLmNsYXNzKTsKLQotCQlpZiAod29ya2luZ1RyZWVJdGVyYXRvciA9PSBudWxsICYmIGRpckNhY2hlSXRlcmF0b3IgPT0gbnVsbAotCQkJCSYmIG90aGVyID09IG51bGwpIHsKLQkJCS8vIENhbiBub3QgcmV0cmlldmUgdGhlIGF0dHJpYnV0ZXMgd2l0aG91dCBhdCBsZWFzdCBvbmUgb2YgdGhlIGFib3ZlCi0JCQkvLyBpdGVyYXRvcnMuCi0JCQlyZXR1cm4gbmV3IEF0dHJpYnV0ZXMoKTsKLQkJfQotCi0JCVN0cmluZyBwYXRoID0gY3VycmVudEhlYWQuZ2V0RW50cnlQYXRoU3RyaW5nKCk7Ci0JCWZpbmFsIGJvb2xlYW4gaXNEaXIgPSBGaWxlTW9kZS5UUkVFLmVxdWFscyhjdXJyZW50SGVhZC5tb2RlKTsKLQkJQXR0cmlidXRlcyBhdHRyaWJ1dGVzID0gbmV3IEF0dHJpYnV0ZXMoKTsKLQkJdHJ5IHsKLQkJCS8vIEdldHMgdGhlIGdsb2JhbCBhdHRyaWJ1dGVzIG5vZGUKLQkJCUF0dHJpYnV0ZXNOb2RlIGdsb2JhbE5vZGVBdHRyID0gYXR0cmlidXRlc05vZGVQcm92aWRlcgotCQkJCQkuZ2V0R2xvYmFsQXR0cmlidXRlc05vZGUoKTsKLQkJCS8vIEdldHMgdGhlIGluZm8gYXR0cmlidXRlcyBub2RlCi0JCQlBdHRyaWJ1dGVzTm9kZSBpbmZvTm9kZUF0dHIgPSBhdHRyaWJ1dGVzTm9kZVByb3ZpZGVyCi0JCQkJCS5nZXRJbmZvQXR0cmlidXRlc05vZGUoKTsKLQotCQkJLy8gR2V0cyB0aGUgaW5mbyBhdHRyaWJ1dGVzCi0JCQlpZiAoaW5mb05vZGVBdHRyICE9IG51bGwpIHsKLQkJCQlpbmZvTm9kZUF0dHIuZ2V0QXR0cmlidXRlcyhwYXRoLCBpc0RpciwgYXR0cmlidXRlcyk7Ci0JCQl9Ci0KLQkJCS8vIEdldHMgdGhlIGF0dHJpYnV0ZXMgbG9jYXRlZCBvbiB0aGUgY3VycmVudCBlbnRyeSBwYXRoCi0JCQlnZXRQZXJEaXJlY3RvcnlFbnRyeUF0dHJpYnV0ZXMocGF0aCwgaXNEaXIsIG9wZXJhdGlvblR5cGUsCi0JCQkJCXdvcmtpbmdUcmVlSXRlcmF0b3IsIGRpckNhY2hlSXRlcmF0b3IsIG90aGVyLCBhdHRyaWJ1dGVzKTsKLQotCQkJLy8gR2V0cyB0aGUgYXR0cmlidXRlcyBsb2NhdGVkIGluIHRoZSBnbG9iYWwgYXR0cmlidXRlIGZpbGUKLQkJCWlmIChnbG9iYWxOb2RlQXR0ciAhPSBudWxsKSB7Ci0JCQkJZ2xvYmFsTm9kZUF0dHIuZ2V0QXR0cmlidXRlcyhwYXRoLCBpc0RpciwgYXR0cmlidXRlcyk7Ci0JCQl9Ci0JCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCXRocm93IG5ldyBKR2l0SW50ZXJuYWxFeGNlcHRpb24oIkVycm9yIHdoaWxlIHBhcnNpbmcgYXR0cmlidXRlcyIsIGUpOyAvLyROT04tTkxTLTEkCi0JCX0KLQkJLy8gbm93IGFmdGVyIGFsbCBhdHRyaWJ1dGVzIGFyZSBjb2xsZWN0ZWQgLSBpbiB0aGUgY29ycmVjdCBoaWVyYXJjaHkKLQkJLy8gb3JkZXIgLSByZW1vdmUgYWxsIHVuc3BlY2lmaWVkIGVudHJpZXMgKHRoZSAhIG1hcmtlcikKLQkJZm9yIChBdHRyaWJ1dGUgYSA6IGF0dHJpYnV0ZXMuZ2V0QWxsKCkpIHsKLQkJCWlmIChhLmdldFN0YXRlKCkgPT0gU3RhdGUuVU5TUEVDSUZJRUQpCi0JCQkJYXR0cmlidXRlcy5yZW1vdmUoYS5nZXRLZXkoKSk7Ci0JCX0KLQkJcmV0dXJuIGF0dHJpYnV0ZXM7Ci0JfQotCi0JLyoqCi0JICogR2V0IHRoZSBhdHRyaWJ1dGVzIGxvY2F0ZWQgb24gdGhlIGN1cnJlbnQgZW50cnkgcGF0aC4KLQkgKgotCSAqIEBwYXJhbSBwYXRoCi0JICogICAgICAgICAgICBjdXJyZW50IGVudHJ5IHBhdGgKLQkgKiBAcGFyYW0gaXNEaXIKLQkgKiAgICAgICAgICAgIGhvbGRzIHRydWUgaWYgdGhlIGN1cnJlbnQgZW50cnkgaXMgYSBkaXJlY3RvcnkKLQkgKiBAcGFyYW0gb3BUeXBlCi0JICogICAgICAgICAgICB0eXBlIG9mIG9wZXJhdGlvbgotCSAqIEBwYXJhbSB3b3JraW5nVHJlZUl0ZXJhdG9yCi0JICogICAgICAgICAgICBhIHtAbGluayBXb3JraW5nVHJlZUl0ZXJhdG9yfSBtYXRjaGluZyB0aGUgY3VycmVudCBlbnRyeQotCSAqIEBwYXJhbSBkaXJDYWNoZUl0ZXJhdG9yCi0JICogICAgICAgICAgICBhIHtAbGluayBEaXJDYWNoZUl0ZXJhdG9yfSBtYXRjaGluZyB0aGUgY3VycmVudCBlbnRyeQotCSAqIEBwYXJhbSBvdGhlcgotCSAqICAgICAgICAgICAgYSB7QGxpbmsgQ2Fub25pY2FsVHJlZVBhcnNlcn0gbWF0Y2hpbmcgdGhlIGN1cnJlbnQgZW50cnkKLQkgKiBAcGFyYW0gYXR0cmlidXRlcwotCSAqICAgICAgICAgICAgTm9uIG51bGwgbWFwIGhvbGRpbmcgdGhlIGV4aXN0aW5nIGF0dHJpYnV0ZXMuIFRoaXMgbWFwIHdpbGwgYmUKLQkgKiAgICAgICAgICAgIGF1Z21lbnRlZCB3aXRoIG5ldyBlbnRyeS4gTm9uZSBlbnRyeSB3aWxsIGJlIG92ZXJyaWRlZC4KLQkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCi0JICogICAgICAgICAgICAgSXQgcmFpc2VzIGFuIHtAbGluayBJT0V4Y2VwdGlvbn0gaWYgYSBwcm9ibGVtIGFwcGVhcnMgd2hpbGUKLQkgKiAgICAgICAgICAgICBwYXJzaW5nIG9uZSBvbiB0aGUgYXR0cmlidXRlcyBmaWxlLgotCSAqLwotCXByaXZhdGUgdm9pZCBnZXRQZXJEaXJlY3RvcnlFbnRyeUF0dHJpYnV0ZXMoU3RyaW5nIHBhdGgsIGJvb2xlYW4gaXNEaXIsCi0JCQlPcGVyYXRpb25UeXBlIG9wVHlwZSwgV29ya2luZ1RyZWVJdGVyYXRvciB3b3JraW5nVHJlZUl0ZXJhdG9yLAotCQkJRGlyQ2FjaGVJdGVyYXRvciBkaXJDYWNoZUl0ZXJhdG9yLCBDYW5vbmljYWxUcmVlUGFyc2VyIG90aGVyLAotCQkJQXR0cmlidXRlcyBhdHRyaWJ1dGVzKQotCQkJdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJLy8gUHJldmVudHMgaW5maW5pdGUgcmVjdXJyZW5jZQotCQlpZiAod29ya2luZ1RyZWVJdGVyYXRvciAhPSBudWxsIHx8IGRpckNhY2hlSXRlcmF0b3IgIT0gbnVsbAotCQkJCXx8IG90aGVyICE9IG51bGwpIHsKLQkJCUF0dHJpYnV0ZXNOb2RlIGN1cnJlbnRBdHRyaWJ1dGVzTm9kZSA9IGdldEN1cnJlbnRBdHRyaWJ1dGVzTm9kZSgKLQkJCQkJb3BUeXBlLCB3b3JraW5nVHJlZUl0ZXJhdG9yLCBkaXJDYWNoZUl0ZXJhdG9yLCBvdGhlcik7Ci0JCQlpZiAoY3VycmVudEF0dHJpYnV0ZXNOb2RlICE9IG51bGwpIHsKLQkJCQljdXJyZW50QXR0cmlidXRlc05vZGUuZ2V0QXR0cmlidXRlcyhwYXRoLCBpc0RpciwgYXR0cmlidXRlcyk7Ci0JCQl9Ci0JCQlnZXRQZXJEaXJlY3RvcnlFbnRyeUF0dHJpYnV0ZXMocGF0aCwgaXNEaXIsIG9wVHlwZSwKLQkJCQkJZ2V0UGFyZW50KHdvcmtpbmdUcmVlSXRlcmF0b3IsIFdvcmtpbmdUcmVlSXRlcmF0b3IuY2xhc3MpLAotCQkJCQlnZXRQYXJlbnQoZGlyQ2FjaGVJdGVyYXRvciwgRGlyQ2FjaGVJdGVyYXRvci5jbGFzcyksCi0JCQkJCWdldFBhcmVudChvdGhlciwgQ2Fub25pY2FsVHJlZVBhcnNlci5jbGFzcyksIGF0dHJpYnV0ZXMpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgPFQgZXh0ZW5kcyBBYnN0cmFjdFRyZWVJdGVyYXRvcj4gVCBnZXRQYXJlbnQoVCBjdXJyZW50LAorCXB1YmxpYyA8VCBleHRlbmRzIEFic3RyYWN0VHJlZUl0ZXJhdG9yPiBUIGdldFRyZWUoCiAJCQlDbGFzczxUPiB0eXBlKSB7Ci0JCWlmIChjdXJyZW50ICE9IG51bGwpIHsKLQkJCUFic3RyYWN0VHJlZUl0ZXJhdG9yIHBhcmVudCA9IGN1cnJlbnQucGFyZW50OwotCQkJaWYgKHR5cGUuaXNJbnN0YW5jZShwYXJlbnQpKSB7Ci0JCQkJcmV0dXJuIHR5cGUuY2FzdChwYXJlbnQpOwotCQkJfQotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXByaXZhdGUgPFQgZXh0ZW5kcyBBYnN0cmFjdFRyZWVJdGVyYXRvcj4gVCBnZXRUcmVlKENsYXNzPFQ+IHR5cGUpIHsKIAkJZm9yIChpbnQgaSA9IDA7IGkgPCB0cmVlcy5sZW5ndGg7IGkrKykgewogCQkJQWJzdHJhY3RUcmVlSXRlcmF0b3IgdHJlZSA9IHRyZWVzW2ldOwogCQkJaWYgKHR5cGUuaXNJbnN0YW5jZSh0cmVlKSkgewpAQCAtMTI2OSw3NiArMTIxOSw2IEBAIHByaXZhdGUgPFQgZXh0ZW5kcyBBYnN0cmFjdFRyZWVJdGVyYXRvcj4gVCBnZXRUcmVlKENsYXNzPFQ+IHR5cGUpIHsKIAl9CiAKIAkvKioKLQkgKiBHZXQgdGhlIHtAbGluayBBdHRyaWJ1dGVzTm9kZX0gZm9yIHRoZSBjdXJyZW50IGVudHJ5LgotCSAqIDxwPgotCSAqIFRoaXMgbWV0aG9kIGltcGxlbWVudHMgdGhlIGZhbGxiYWNrIG1lY2hhbmlzbSBiZXR3ZWVuIHRoZSBpbmRleCBhbmQgdGhlCi0JICogd29ya2luZyB0cmVlIGRlcGVuZGluZyBvbiB0aGUgb3BlcmF0aW9uIHR5cGUKLQkgKiA8L3A+Ci0JICoKLQkgKiBAcGFyYW0gb3BUeXBlCi0JICogQHBhcmFtIHdvcmtpbmdUcmVlSXRlcmF0b3IKLQkgKiBAcGFyYW0gZGlyQ2FjaGVJdGVyYXRvcgotCSAqIEBwYXJhbSBvdGhlcgotCSAqIEByZXR1cm4gYSB7QGxpbmsgQXR0cmlidXRlc05vZGV9IG9mIHRoZSBjdXJyZW50IGVudHJ5LAotCSAqICAgICAgICAge0BsaW5rIE51bGxQb2ludGVyRXhjZXB0aW9ufSBvdGhlcndpc2UuCi0JICogQHRocm93cyBJT0V4Y2VwdGlvbgotCSAqICAgICAgICAgICAgIEl0IHJhaXNlcyBhbiB7QGxpbmsgSU9FeGNlcHRpb259IGlmIGEgcHJvYmxlbSBhcHBlYXJzIHdoaWxlCi0JICogICAgICAgICAgICAgcGFyc2luZyBvbmUgb24gdGhlIGF0dHJpYnV0ZXMgZmlsZS4KLQkgKi8KLQlwcml2YXRlIEF0dHJpYnV0ZXNOb2RlIGdldEN1cnJlbnRBdHRyaWJ1dGVzTm9kZShPcGVyYXRpb25UeXBlIG9wVHlwZSwKLQkJCUBOdWxsYWJsZSBXb3JraW5nVHJlZUl0ZXJhdG9yIHdvcmtpbmdUcmVlSXRlcmF0b3IsCi0JCQlATnVsbGFibGUgRGlyQ2FjaGVJdGVyYXRvciBkaXJDYWNoZUl0ZXJhdG9yLAotCQkJQE51bGxhYmxlIENhbm9uaWNhbFRyZWVQYXJzZXIgb3RoZXIpCi0JCQkJCXRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUF0dHJpYnV0ZXNOb2RlIGF0dHJpYnV0ZXNOb2RlID0gbnVsbDsKLQkJc3dpdGNoIChvcFR5cGUpIHsKLQkJY2FzZSBDSEVDS0lOX09QOgotCQkJaWYgKHdvcmtpbmdUcmVlSXRlcmF0b3IgIT0gbnVsbCkgewotCQkJCWF0dHJpYnV0ZXNOb2RlID0gd29ya2luZ1RyZWVJdGVyYXRvci5nZXRFbnRyeUF0dHJpYnV0ZXNOb2RlKCk7Ci0JCQl9Ci0JCQlpZiAoYXR0cmlidXRlc05vZGUgPT0gbnVsbCAmJiBkaXJDYWNoZUl0ZXJhdG9yICE9IG51bGwpIHsKLQkJCQlhdHRyaWJ1dGVzTm9kZSA9IGdldEF0dHJpYnV0ZXNOb2RlKGRpckNhY2hlSXRlcmF0b3IKLQkJCQkJCS5nZXRFbnRyeUF0dHJpYnV0ZXNOb2RlKGdldE9iamVjdFJlYWRlcigpKSwKLQkJCQkJCWF0dHJpYnV0ZXNOb2RlKTsKLQkJCX0KLQkJCWlmIChhdHRyaWJ1dGVzTm9kZSA9PSBudWxsICYmIG90aGVyICE9IG51bGwpIHsKLQkJCQlhdHRyaWJ1dGVzTm9kZSA9IGdldEF0dHJpYnV0ZXNOb2RlKAotCQkJCQkJb3RoZXIuZ2V0RW50cnlBdHRyaWJ1dGVzTm9kZShnZXRPYmplY3RSZWFkZXIoKSksCi0JCQkJCQlhdHRyaWJ1dGVzTm9kZSk7Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSBDSEVDS09VVF9PUDoKLQkJCWlmIChvdGhlciAhPSBudWxsKSB7Ci0JCQkJYXR0cmlidXRlc05vZGUgPSBvdGhlcgotCQkJCQkJLmdldEVudHJ5QXR0cmlidXRlc05vZGUoZ2V0T2JqZWN0UmVhZGVyKCkpOwotCQkJfQotCQkJaWYgKGRpckNhY2hlSXRlcmF0b3IgIT0gbnVsbCkgewotCQkJCWF0dHJpYnV0ZXNOb2RlID0gZ2V0QXR0cmlidXRlc05vZGUoZGlyQ2FjaGVJdGVyYXRvcgotCQkJCQkJLmdldEVudHJ5QXR0cmlidXRlc05vZGUoZ2V0T2JqZWN0UmVhZGVyKCkpLAotCQkJCQkJYXR0cmlidXRlc05vZGUpOwotCQkJfQotCQkJaWYgKGF0dHJpYnV0ZXNOb2RlID09IG51bGwgJiYgd29ya2luZ1RyZWVJdGVyYXRvciAhPSBudWxsKSB7Ci0JCQkJYXR0cmlidXRlc05vZGUgPSBnZXRBdHRyaWJ1dGVzTm9kZSgKLQkJCQkJCXdvcmtpbmdUcmVlSXRlcmF0b3IuZ2V0RW50cnlBdHRyaWJ1dGVzTm9kZSgpLAotCQkJCQkJYXR0cmlidXRlc05vZGUpOwotCQkJfQotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQl0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKAotCQkJCQkiVGhlIG9ubHkgc3VwcG9ydGVkIG9wZXJhdGlvbiB0eXBlcyBhcmU6IiAvLyROT04tTkxTLTEkCi0JCQkJCQkJKyBPcGVyYXRpb25UeXBlLkNIRUNLSU5fT1AgKyAiLCIgLy8kTk9OLU5MUy0xJAotCQkJCQkJCSsgT3BlcmF0aW9uVHlwZS5DSEVDS09VVF9PUCk7Ci0JCX0KLQotCQlyZXR1cm4gYXR0cmlidXRlc05vZGU7Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgQXR0cmlidXRlc05vZGUgZ2V0QXR0cmlidXRlc05vZGUoQXR0cmlidXRlc05vZGUgdmFsdWUsCi0JCQlBdHRyaWJ1dGVzTm9kZSBkZWZhdWx0VmFsdWUpIHsKLQkJcmV0dXJuICh2YWx1ZSA9PSBudWxsKSA/IGRlZmF1bHRWYWx1ZSA6IHZhbHVlOwotCX0KLQotCS8qKgogCSAqIEluc3BlY3QgY29uZmlnIGFuZCBhdHRyaWJ1dGVzIHRvIHJldHVybiBhIGZpbHRlcmNvbW1hbmQgYXBwbGljYWJsZSBmb3IKIAkgKiB0aGUgY3VycmVudCBwYXRoCiAJICoKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvdXRpbC9IdHRwU3VwcG9ydC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC91dGlsL0h0dHBTdXBwb3J0LmphdmEKaW5kZXggOGI0YWQwYS4uNmE0M2MwZiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC91dGlsL0h0dHBTdXBwb3J0LmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC91dGlsL0h0dHBTdXBwb3J0LmphdmEKQEAgLTUyLDggKzUyLDE2IEBACiBpbXBvcnQgamF2YS5uZXQuVVJJU3ludGF4RXhjZXB0aW9uOwogaW1wb3J0IGphdmEubmV0LlVSTDsKIGltcG9ydCBqYXZhLm5ldC5VUkxFbmNvZGVyOworaW1wb3J0IGphdmEuc2VjdXJpdHkuS2V5TWFuYWdlbWVudEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnNlY3VyaXR5Lk5vU3VjaEFsZ29yaXRobUV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnNlY3VyaXR5LmNlcnQuWDUwOUNlcnRpZmljYXRlOwogaW1wb3J0IGphdmEudGV4dC5NZXNzYWdlRm9ybWF0OwogCitpbXBvcnQgamF2YXgubmV0LnNzbC5Ib3N0bmFtZVZlcmlmaWVyOworaW1wb3J0IGphdmF4Lm5ldC5zc2wuU1NMU2Vzc2lvbjsKK2ltcG9ydCBqYXZheC5uZXQuc3NsLlRydXN0TWFuYWdlcjsKK2ltcG9ydCBqYXZheC5uZXQuc3NsLlg1MDlUcnVzdE1hbmFnZXI7CisKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLkpHaXRUZXh0OwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0Lmh0dHAuSHR0cENvbm5lY3Rpb247CiAKQEAgLTYyLDYgKzcwLDE0IEBAIHB1YmxpYyBjbGFzcyBIdHRwU3VwcG9ydCB7CiAJLyoqIFRoZSB7QGNvZGUgR0VUfSBIVFRQIG1ldGhvZC4gKi8KIAlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBNRVRIT0RfR0VUID0gIkdFVCI7IC8vJE5PTi1OTFMtMSQKIAorCS8qKiBUaGUge0Bjb2RlIEhFQUR9IEhUVFAgbWV0aG9kLgorCSAqIEBzaW5jZSA0LjMgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBNRVRIT0RfSEVBRCA9ICJIRUFEIjsgLy8kTk9OLU5MUy0xJAorCisJLyoqIFRoZSB7QGNvZGUgUE9TVH0gSFRUUCBtZXRob2QuCisJICogQHNpbmNlIDQuMyAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE1FVEhPRF9QVVQgPSAiUFVUIjsgLy8kTk9OLU5MUy0xJAorCiAJLyoqIFRoZSB7QGNvZGUgUE9TVH0gSFRUUCBtZXRob2QuICovCiAJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTUVUSE9EX1BPU1QgPSAiUE9TVCI7IC8vJE5PTi1OTFMtMSQKIApAQCAtMjM0LDYgKzI1MCw1MCBAQCBwdWJsaWMgc3RhdGljIFByb3h5IHByb3h5Rm9yKGZpbmFsIFByb3h5U2VsZWN0b3IgcHJveHlTZWxlY3RvciwgZmluYWwgVVJMIHUpCiAJCX0KIAl9CiAKKwkvKioKKwkgKiBEaXNhYmxlIFNTTCBhbmQgaG9zdG5hbWUgdmVyaWZpY2F0aW9uIGZvciBnaXZlbiBIVFRQIGNvbm5lY3Rpb24KKwkgKgorCSAqIEBwYXJhbSBjb25uCisJICogQHRocm93cyBJT0V4Y2VwdGlvbgorCSAqIEBzaW5jZSA0LjMKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgZGlzYWJsZVNzbFZlcmlmeShIdHRwQ29ubmVjdGlvbiBjb25uKQorCQkJdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJZmluYWwgVHJ1c3RNYW5hZ2VyW10gdHJ1c3RBbGxDZXJ0cyA9IG5ldyBUcnVzdE1hbmFnZXJbXSB7CisJCQkJbmV3IER1bW15WDUwOVRydXN0TWFuYWdlcigpIH07CisJCXRyeSB7CisJCQljb25uLmNvbmZpZ3VyZShudWxsLCB0cnVzdEFsbENlcnRzLCBudWxsKTsKKwkJCWNvbm4uc2V0SG9zdG5hbWVWZXJpZmllcihuZXcgRHVtbXlIb3N0bmFtZVZlcmlmaWVyKCkpOworCQl9IGNhdGNoIChLZXlNYW5hZ2VtZW50RXhjZXB0aW9uIGUpIHsKKwkJCXRocm93IG5ldyBJT0V4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CisJCX0gY2F0Y2ggKE5vU3VjaEFsZ29yaXRobUV4Y2VwdGlvbiBlKSB7CisJCQl0aHJvdyBuZXcgSU9FeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOworCQl9CisJfQorCisJcHJpdmF0ZSBzdGF0aWMgY2xhc3MgRHVtbXlYNTA5VHJ1c3RNYW5hZ2VyIGltcGxlbWVudHMgWDUwOVRydXN0TWFuYWdlciB7CisJCXB1YmxpYyBYNTA5Q2VydGlmaWNhdGVbXSBnZXRBY2NlcHRlZElzc3VlcnMoKSB7CisJCQlyZXR1cm4gbnVsbDsKKwkJfQorCisJCXB1YmxpYyB2b2lkIGNoZWNrQ2xpZW50VHJ1c3RlZChYNTA5Q2VydGlmaWNhdGVbXSBjZXJ0cywKKwkJCQlTdHJpbmcgYXV0aFR5cGUpIHsKKwkJCS8vIG5vIGNoZWNrCisJCX0KKworCQlwdWJsaWMgdm9pZCBjaGVja1NlcnZlclRydXN0ZWQoWDUwOUNlcnRpZmljYXRlW10gY2VydHMsCisJCQkJU3RyaW5nIGF1dGhUeXBlKSB7CisJCQkvLyBubyBjaGVjaworCQl9CisJfQorCisJcHJpdmF0ZSBzdGF0aWMgY2xhc3MgRHVtbXlIb3N0bmFtZVZlcmlmaWVyIGltcGxlbWVudHMgSG9zdG5hbWVWZXJpZmllciB7CisJCXB1YmxpYyBib29sZWFuIHZlcmlmeShTdHJpbmcgaG9zdG5hbWUsIFNTTFNlc3Npb24gc2Vzc2lvbikgeworCQkJLy8gYWx3YXlzIGFjY2VwdAorCQkJcmV0dXJuIHRydWU7CisJCX0KKwl9CisKIAlwcml2YXRlIEh0dHBTdXBwb3J0KCkgewogCQkvLyBVdGlsaXR5IGNsYXNzIG9ubHkuCiAJfQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC91dGlsL05CLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3V0aWwvTkIuamF2YQppbmRleCA4NWMxNjQ4Li44NTM2ZjFkIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3V0aWwvTkIuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3V0aWwvTkIuamF2YQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIFNoYXduIE8uIFBlYXJjZSA8c3BlYXJjZUBzcGVhcmNlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxNSBTaGF3biBPLiBQZWFyY2UgPHNwZWFyY2VAc3BlYXJjZS5vcmc+CiAgKiBhbmQgb3RoZXIgY29weXJpZ2h0IG93bmVycyBhcyBkb2N1bWVudGVkIGluIHRoZSBwcm9qZWN0J3MgSVAgbG9nLgogICoKICAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlCkBAIC02Niw2ICs2NiwzNyBAQCBwdWJsaWMgc3RhdGljIGludCBjb21wYXJlVUludDMyKGZpbmFsIGludCBhLCBmaW5hbCBpbnQgYikgewogCX0KIAogCS8qKgorCSAqIENvbXBhcmUgYSA2NCBiaXQgdW5zaWduZWQgaW50ZWdlciBzdG9yZWQgaW4gYSA2NCBiaXQgc2lnbmVkIGludGVnZXIuCisJICogPHA+CisJICogVGhpcyBmdW5jdGlvbiBwZXJmb3JtcyBhbiB1bnNpZ25lZCBjb21wYXJlIG9wZXJhdGlvbiwgZXZlbiB0aG91Z2ggSmF2YQorCSAqIGRvZXMgbm90IG5hdGl2ZWx5IHN1cHBvcnQgdW5zaWduZWQgaW50ZWdlciB2YWx1ZXMuIE5lZ2F0aXZlIG51bWJlcnMgYXJlCisJICogdHJlYXRlZCBhcyBsYXJnZXIgdGhhbiBwb3NpdGl2ZSBvbmVzLgorCSAqCisJICogQHBhcmFtIGEKKwkgKiAgICAgICAgICAgIHRoZSBmaXJzdCB2YWx1ZSB0byBjb21wYXJlLgorCSAqIEBwYXJhbSBiCisJICogICAgICAgICAgICB0aGUgc2Vjb25kIHZhbHVlIHRvIGNvbXBhcmUuCisJICogQHJldHVybiAmbHQ7IDAgaWYgYSAmbHQ7IGI7IDAgaWYgYSA9PSBiOyAmZ3Q7IDAgaWYgYSAmZ3Q7IGIuCisJICogQHNpbmNlIDQuMworCSAqLworCXB1YmxpYyBzdGF0aWMgaW50IGNvbXBhcmVVSW50NjQoZmluYWwgbG9uZyBhLCBmaW5hbCBsb25nIGIpIHsKKwkJbG9uZyBjbXAgPSAoYSA+Pj4gMSkgLSAoYiA+Pj4gMSk7CisJCWlmIChjbXAgPiAwKSB7CisJCQlyZXR1cm4gMTsKKwkJfSBlbHNlIGlmIChjbXAgPCAwKSB7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJY21wID0gKChhICYgMSkgLSAoYiAmIDEpKTsKKwkJaWYgKGNtcCA+IDApIHsKKwkJCXJldHVybiAxOworCQl9IGVsc2UgaWYgKGNtcCA8IDApIHsKKwkJCXJldHVybiAtMTsKKwkJfSBlbHNlIHsKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJLyoqCiAJICogQ29udmVydCBzZXF1ZW5jZSBvZiAyIGJ5dGVzIChuZXR3b3JrIGJ5dGUgb3JkZXIpIGludG8gdW5zaWduZWQgdmFsdWUuCiAJICoKIAkgKiBAcGFyYW0gaW50YnVmCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3V0aWwvUmF3UGFyc2VVdGlscy5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC91dGlsL1Jhd1BhcnNlVXRpbHMuamF2YQppbmRleCBmMjk1NWY3Li44Njc3N2I5IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3V0aWwvUmF3UGFyc2VVdGlscy5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvdXRpbC9SYXdQYXJzZVV0aWxzLmphdmEKQEAgLTM2Niw2ICszNjYsNzIgQEAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgcGFyc2VIZXhJbnQzMihmaW5hbCBieXRlW10gYnMsIGZpbmFsIGludCBwKSB7CiAJfQogCiAJLyoqCisJICogUGFyc2UgMTYgY2hhcmFjdGVyIGJhc2UgMTYgKGhleCkgZm9ybWF0dGVkIHN0cmluZyB0byB1bnNpZ25lZCBsb25nLgorCSAqIDxwPgorCSAqIFRoZSBudW1iZXIgaXMgcmVhZCBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIsIHRoYXQgaXMsIG1vc3Qgc2lnbmlmaWNhbnQKKwkgKiBuaWJibGUgZmlyc3QuCisJICoKKwkgKiBAcGFyYW0gYnMKKwkgKiAgICAgICAgICAgIGJ1ZmZlciB0byBwYXJzZSBkaWdpdHMgZnJvbTsgcG9zaXRpb25zIHtAY29kZSBbcCwgcCsxNil9IHdpbGwKKwkgKiAgICAgICAgICAgIGJlIHBhcnNlZC4KKwkgKiBAcGFyYW0gcAorCSAqICAgICAgICAgICAgZmlyc3QgcG9zaXRpb24gd2l0aGluIHRoZSBidWZmZXIgdG8gcGFyc2UuCisJICogQHJldHVybiB0aGUgaW50ZWdlciB2YWx1ZS4KKwkgKiBAdGhyb3dzIEFycmF5SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbgorCSAqICAgICAgICAgICAgIGlmIHRoZSBzdHJpbmcgaXMgbm90IGhleCBmb3JtYXR0ZWQuCisJICogQHNpbmNlIDQuMworCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgbG9uZyBwYXJzZUhleEludDY0KGZpbmFsIGJ5dGVbXSBicywgZmluYWwgaW50IHApIHsKKwkJbG9uZyByID0gZGlnaXRzMTZbYnNbcF1dIDw8IDQ7CisKKwkJciB8PSBkaWdpdHMxNltic1twICsgMV1dOworCQlyIDw8PSA0OworCisJCXIgfD0gZGlnaXRzMTZbYnNbcCArIDJdXTsKKwkJciA8PD0gNDsKKworCQlyIHw9IGRpZ2l0czE2W2JzW3AgKyAzXV07CisJCXIgPDw9IDQ7CisKKwkJciB8PSBkaWdpdHMxNltic1twICsgNF1dOworCQlyIDw8PSA0OworCisJCXIgfD0gZGlnaXRzMTZbYnNbcCArIDVdXTsKKwkJciA8PD0gNDsKKworCQlyIHw9IGRpZ2l0czE2W2JzW3AgKyA2XV07CisJCXIgPDw9IDQ7CisKKwkJciB8PSBkaWdpdHMxNltic1twICsgN11dOworCQlyIDw8PSA0OworCisJCXIgfD0gZGlnaXRzMTZbYnNbcCArIDhdXTsKKwkJciA8PD0gNDsKKworCQlyIHw9IGRpZ2l0czE2W2JzW3AgKyA5XV07CisJCXIgPDw9IDQ7CisKKwkJciB8PSBkaWdpdHMxNltic1twICsgMTBdXTsKKwkJciA8PD0gNDsKKworCQlyIHw9IGRpZ2l0czE2W2JzW3AgKyAxMV1dOworCQlyIDw8PSA0OworCisJCXIgfD0gZGlnaXRzMTZbYnNbcCArIDEyXV07CisJCXIgPDw9IDQ7CisKKwkJciB8PSBkaWdpdHMxNltic1twICsgMTNdXTsKKwkJciA8PD0gNDsKKworCQlyIHw9IGRpZ2l0czE2W2JzW3AgKyAxNF1dOworCisJCWZpbmFsIGludCBsYXN0ID0gZGlnaXRzMTZbYnNbcCArIDE1XV07CisJCWlmIChyIDwgMCB8fCBsYXN0IDwgMCkKKwkJCXRocm93IG5ldyBBcnJheUluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24oKTsKKwkJcmV0dXJuIChyIDw8IDQpIHwgbGFzdDsKKwl9CisKKwkvKioKIAkgKiBQYXJzZSBhIHNpbmdsZSBoZXggZGlnaXQgdG8gaXRzIG51bWVyaWMgdmFsdWUgKDAtMTUpLgogCSAqCiAJICogQHBhcmFtIGRpZ2l0CmRpZmYgLS1naXQgYS9wb20ueG1sIGIvcG9tLnhtbAppbmRleCAzODA2MGQwLi42YmIzMGZlIDEwMDY0NAotLS0gYS9wb20ueG1sCisrKyBiL3BvbS54bWwKQEAgLTUxLDcgKzUxLDcgQEAKICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC1wYXJlbnQ8L2FydGlmYWN0SWQ+CiAgIDxwYWNrYWdpbmc+cG9tPC9wYWNrYWdpbmc+Ci0gIDx2ZXJzaW9uPjQuMi4xLVNOQVBTSE9UPC92ZXJzaW9uPgorICA8dmVyc2lvbj40LjMuMC1TTkFQU0hPVDwvdmVyc2lvbj4KIAogICA8bmFtZT5KR2l0IC0gUGFyZW50PC9uYW1lPgogICA8dXJsPiR7amdpdC11cmx9PC91cmw+CkBAIC0xOTIsNyArMTkyLDcgQEAKICAgICA8bWF2ZW4uYnVpbGQudGltZXN0YW1wLmZvcm1hdD55eXl5TU1kZEhIbW08L21hdmVuLmJ1aWxkLnRpbWVzdGFtcC5mb3JtYXQ+CiAgICAgPGJ1bmRsZS1tYW5pZmVzdD4ke3Byb2plY3QuYnVpbGQuZGlyZWN0b3J5fS9NRVRBLUlORi9NQU5JRkVTVC5NRjwvYnVuZGxlLW1hbmlmZXN0PgogCi0gICAgPGpnaXQtbGFzdC1yZWxlYXNlLXZlcnNpb24+NC4xLjAuMjAxNTA5MjgwNDQwLXI8L2pnaXQtbGFzdC1yZWxlYXNlLXZlcnNpb24+CisgICAgPGpnaXQtbGFzdC1yZWxlYXNlLXZlcnNpb24+NC4yLjAuMjAxNjAxMjExODAwLXI8L2pnaXQtbGFzdC1yZWxlYXNlLXZlcnNpb24+CiAgICAgPGpzY2gtdmVyc2lvbj4wLjEuNTM8L2pzY2gtdmVyc2lvbj4KICAgICA8amF2YWV3YWgtdmVyc2lvbj4wLjcuOTwvamF2YWV3YWgtdmVyc2lvbj4KICAgICA8anVuaXQtdmVyc2lvbj40LjExPC9qdW5pdC12ZXJzaW9uPgpAQCAtMjA4LDYgKzIwOCw3IEBACiAgICAgPGxvZzRqLXZlcnNpb24+MS4yLjE1PC9sb2c0ai12ZXJzaW9uPgogICAgIDxtYXZlbi1qYXZhZG9jLXBsdWdpbi12ZXJzaW9uPjIuMTAuMTwvbWF2ZW4tamF2YWRvYy1wbHVnaW4tdmVyc2lvbj4KICAgICA8dHljaG8tZXh0cmFzLXZlcnNpb24+MC4yMy4wPC90eWNoby1leHRyYXMtdmVyc2lvbj4KKyAgICA8Z3Nvbi12ZXJzaW9uPjIuMi40PC9nc29uLXZlcnNpb24+CiAKICAgICA8IS0tIFByb3BlcnRpZXMgdG8gZW5hYmxlIGphY29jbyBjb2RlIGNvdmVyYWdlIGFuYWx5c2lzIC0tPgogICAgIDxzb25hci5jb3JlLmNvZGVDb3ZlcmFnZVBsdWdpbj5qYWNvY288L3NvbmFyLmNvcmUuY29kZUNvdmVyYWdlUGx1Z2luPgpAQCAtNjMyLDYgKzYzMywxMiBAQAogICAgICAgICAgIDwvZXhjbHVzaW9uPgogICAgICAgICA8L2V4Y2x1c2lvbnM+CiAgICAgICA8L2RlcGVuZGVuY3k+CisKKyAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICA8Z3JvdXBJZD5jb20uZ29vZ2xlLmNvZGUuZ3NvbjwvZ3JvdXBJZD4KKyAgICAgICAgPGFydGlmYWN0SWQ+Z3NvbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+JHtnc29uLXZlcnNpb259PC92ZXJzaW9uPgorICAgICAgPC9kZXBlbmRlbmN5PgogICAgIDwvZGVwZW5kZW5jaWVzPgogICA8L2RlcGVuZGVuY3lNYW5hZ2VtZW50PgogCkBAIC03NjcsNiArNzc0LDggQEAKICAgICA8bW9kdWxlPm9yZy5lY2xpcHNlLmpnaXQuaHR0cC5hcGFjaGU8L21vZHVsZT4KICAgICA8bW9kdWxlPm9yZy5lY2xpcHNlLmpnaXQuaHR0cC5zZXJ2ZXI8L21vZHVsZT4KICAgICA8bW9kdWxlPm9yZy5lY2xpcHNlLmpnaXQucGdtPC9tb2R1bGU+CisgICAgPG1vZHVsZT5vcmcuZWNsaXBzZS5qZ2l0LmxmczwvbW9kdWxlPgorICAgIDxtb2R1bGU+b3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyPC9tb2R1bGU+CiAgICAgPG1vZHVsZT5vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0PC9tb2R1bGU+CiAgICAgPG1vZHVsZT5vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0Lmh0dHA8L21vZHVsZT4KIApAQCAtNzc0LDYgKzc4Myw4IEBACiAgICAgPG1vZHVsZT5vcmcuZWNsaXBzZS5qZ2l0LmFudC50ZXN0PC9tb2R1bGU+CiAgICAgPG1vZHVsZT5vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAudGVzdDwvbW9kdWxlPgogICAgIDxtb2R1bGU+b3JnLmVjbGlwc2UuamdpdC5wZ20udGVzdDwvbW9kdWxlPgorICAgIDxtb2R1bGU+b3JnLmVjbGlwc2UuamdpdC5sZnMudGVzdDwvbW9kdWxlPgorICAgIDxtb2R1bGU+b3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLnRlc3Q8L21vZHVsZT4KICAgPC9tb2R1bGVzPgogCiA8L3Byb2plY3Q+Cg==