ZGlmZiAtLWdpdCBhL3BvbS54bWwgYi9wb20ueG1sCmluZGV4IGM3MmI1NjcuLmU0NDExYWMgMTAwNjQ0Ci0tLSBhL3BvbS54bWwKKysrIGIvcG9tLnhtbApAQCAtNjksNyArNjksNyBAQAogICA8L2Rpc3RyaWJ1dGlvbk1hbmFnZW1lbnQ+CiAKICAgPHByb3BlcnRpZXM+Ci0gICAgPG1hdmVuRmlsdGVyaW5nVmVyc2lvbj4zLjEuMi1TTkFQU0hPVDwvbWF2ZW5GaWx0ZXJpbmdWZXJzaW9uPgorICAgIDxtYXZlbkZpbHRlcmluZ1ZlcnNpb24+My4yLjAtU05BUFNIT1Q8L21hdmVuRmlsdGVyaW5nVmVyc2lvbj4KICAgICA8bWF2ZW5WZXJzaW9uPjMuMDwvbWF2ZW5WZXJzaW9uPgogICAgIDxqYXZhVmVyc2lvbj43PC9qYXZhVmVyc2lvbj4KICAgICA8cHJvamVjdC5idWlsZC5vdXRwdXRUaW1lc3RhbXA+MjAyMC0wNC0wN1QyMTowNDowMFo8L3Byb2plY3QuYnVpbGQub3V0cHV0VGltZXN0YW1wPgpkaWZmIC0tZ2l0IGEvc3JjL2l0L01SRVNPVVJDRVMtMTcxL3BvbS54bWwgYi9zcmMvaXQvTVJFU09VUkNFUy0xNzEvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWFkNzIxCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2l0L01SRVNPVVJDRVMtMTcxL3BvbS54bWwKQEAgLTAsMCArMSw1MCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKworPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCitkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQordG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQord2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCitzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCitLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKK3NwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKK3VuZGVyIHRoZSBMaWNlbnNlLgorLS0+Cis8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9tYXZlbi12NF8wXzAueHNkIj4KKyAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnMubWF2ZW4tcmVzb3VyY2VzLXBsdWdpbi5pdHM8L2dyb3VwSWQ+CisgIDxhcnRpZmFjdElkPk1SRVNPVVJDRVMtMTcxPC9hcnRpZmFjdElkPgorICA8bmFtZT5CdWcgVGVzdDwvbmFtZT4KKyAgPHZlcnNpb24+MC4wLjEtU05BUFNIT1Q8L3ZlcnNpb24+CisKKyAgPHByb3BlcnRpZXM+CisgICAgPHByb2plY3QuYnVpbGQuc291cmNlRW5jb2Rpbmc+VVRGLTg8L3Byb2plY3QuYnVpbGQuc291cmNlRW5jb2Rpbmc+CisgIDwvcHJvcGVydGllcz4KKworICA8YnVpbGQ+CisgICAgPHJlc291cmNlcz4KKyAgICAgIDxyZXNvdXJjZT4KKyAgICAgICAgPGRpcmVjdG9yeT5zcmMvbWFpbi9yZXNvdXJjZXM8L2RpcmVjdG9yeT4KKyAgICAgICAgPGZpbHRlcmluZz50cnVlPC9maWx0ZXJpbmc+CisgICAgICA8L3Jlc291cmNlPgorICAgIDwvcmVzb3VyY2VzPgorICAgIDxwbHVnaW5zPgorICAgICAgPHBsdWdpbj4KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgorICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1yZXNvdXJjZXMtcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICA8dmVyc2lvbj5AcHJvamVjdC52ZXJzaW9uQDwvdmVyc2lvbj4KKyAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgPHByb3BlcnRpZXNFbmNvZGluZz5JU08tODg1OS0xPC9wcm9wZXJ0aWVzRW5jb2Rpbmc+CisgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgIDwvcGx1Z2luPgorICAgIDwvcGx1Z2lucz4KKyAgPC9idWlsZD4KKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3NyYy9pdC9NUkVTT1VSQ0VTLTE3MS9zcmMvbWFpbi9yZXNvdXJjZXMvdGVzdC5wcm9wZXJ0aWVzIGIvc3JjL2l0L01SRVNPVVJDRVMtMTcxL3NyYy9tYWluL3Jlc291cmNlcy90ZXN0LnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NjMmI0NgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pdC9NUkVTT1VSQ0VTLTE3MS9zcmMvbWFpbi9yZXNvdXJjZXMvdGVzdC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMTkgQEAKKyMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorIyBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyMgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorIyB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisjICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyMgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisjIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisjICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyMgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworIyB1bmRlciB0aGUgTGljZW5zZS4KKworYWN0dWFsPU5vIGhheSBjb25leGnzbgorZXhwZWN0ZWQ9Tm8gaGF5IGNvbmV4aVx1MDBmM24KZGlmZiAtLWdpdCBhL3NyYy9pdC9NUkVTT1VSQ0VTLTE3MS9zcmMvbWFpbi9yZXNvdXJjZXMvdGVzdC50eHQgYi9zcmMvaXQvTVJFU09VUkNFUy0xNzEvc3JjL21haW4vcmVzb3VyY2VzL3Rlc3QudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4MWU2NWMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaXQvTVJFU09VUkNFUy0xNzEvc3JjL21haW4vcmVzb3VyY2VzL3Rlc3QudHh0CkBAIC0wLDAgKzEsMTggQEAKKyMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorIyBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyMgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorIyB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisjICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyMgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisjIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisjICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyMgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworIyB1bmRlciB0aGUgTGljZW5zZS4KKworU29tZSB0ZXh0IGVuY29kZWQgaW4gVVRGLTggY29udGFpbmluZyBub24tYXNjaWkgY2hhcmFjdGVycyBjb25leGnDs24uCmRpZmYgLS1naXQgYS9zcmMvaXQvTVJFU09VUkNFUy0xNzEvdmVyaWZ5Lmdyb292eSBiL3NyYy9pdC9NUkVTT1VSQ0VTLTE3MS92ZXJpZnkuZ3Jvb3Z5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5MDBjNzMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaXQvTVJFU09VUkNFUy0xNzEvdmVyaWZ5Lmdyb292eQpAQCAtMCwwICsxLDI1IEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworYXNzZXJ0IG5ldyBGaWxlKCBiYXNlZGlyLCAndGFyZ2V0L2NsYXNzZXMvdGVzdC5wcm9wZXJ0aWVzJyApLmV4aXN0cygpOworYXNzZXJ0IG5ldyBGaWxlKCBiYXNlZGlyLCAndGFyZ2V0L2NsYXNzZXMvdGVzdC50eHQnICkuZXhpc3RzKCk7CisKK3NvdXJjZVRleHRDb250ZW50ID0gbmV3IEZpbGUoIGJhc2VkaXIsICdzcmMvbWFpbi9yZXNvdXJjZXMvdGVzdC50eHQnICkudGV4dDsKK3RhcmdldFRleHRDb250ZW50ID0gbmV3IEZpbGUoIGJhc2VkaXIsICd0YXJnZXQvY2xhc3Nlcy90ZXN0LnR4dCcgKS50ZXh0OworYXNzZXJ0IHNvdXJjZVRleHRDb250ZW50LmVxdWFscyggdGFyZ2V0VGV4dENvbnRlbnQgKTsKK3JldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3BsdWdpbnMvcmVzb3VyY2VzL1Jlc291cmNlc01vam8uamF2YSBiL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9tYXZlbi9wbHVnaW5zL3Jlc291cmNlcy9SZXNvdXJjZXNNb2pvLmphdmEKaW5kZXggOWZlZDUzNC4uMTEwNTk2NSAxMDA2NDQKLS0tIGEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL21hdmVuL3BsdWdpbnMvcmVzb3VyY2VzL1Jlc291cmNlc01vam8uamF2YQorKysgYi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvbWF2ZW4vcGx1Z2lucy9yZXNvdXJjZXMvUmVzb3VyY2VzTW9qby5qYXZhCkBAIC03MCw2ICs3MCwxMyBAQAogICAgIHByb3RlY3RlZCBTdHJpbmcgZW5jb2Rpbmc7CiAKICAgICAvKioKKyAgICAgKiBUaGUgY2hhcmFjdGVyIGVuY29kaW5nIHRvIHVzZSB3aGVuIHJlYWRpbmcgYW5kIHdyaXRpbmcgZmlsdGVyZWQgcHJvcGVydGllcyBmaWxlcy4KKyAgICAgKiBJZiBub3Qgc3BlY2lmaWVkLCBpdCB3aWxsIGRlZmF1bHQgdG8gdGhlIHZhbHVlIG9mIHRoZSAiZW5jb2RpbmciIHBhcmFtZXRlci4KKyAgICAgKi8KKyAgICBAUGFyYW1ldGVyCisgICAgcHJvdGVjdGVkIFN0cmluZyBwcm9wZXJ0aWVzRW5jb2Rpbmc7CisKKyAgICAvKioKICAgICAgKiBUaGUgb3V0cHV0IGRpcmVjdG9yeSBpbnRvIHdoaWNoIHRvIGNvcHkgdGhlIHJlc291cmNlcy4KICAgICAgKi8KICAgICBAUGFyYW1ldGVyKCBkZWZhdWx0VmFsdWUgPSAiJHtwcm9qZWN0LmJ1aWxkLm91dHB1dERpcmVjdG9yeX0iLCByZXF1aXJlZCA9IHRydWUgKQpAQCAtMzM4LDYgKzM0NSw5IEBACiAgICAgICAgICAgICAvLyBpZiB0aGVzZSBhcmUgTk9UIHNldCwganVzdCB1c2UgdGhlIGRlZmF1bHRzLCB3aGljaCBhcmUgJyR7Kn0nIGFuZCAnQCcuCiAgICAgICAgICAgICBtYXZlblJlc291cmNlc0V4ZWN1dGlvbi5zZXREZWxpbWl0ZXJzKCBkZWxpbWl0ZXJzLCB1c2VEZWZhdWx0RGVsaW1pdGVycyApOwogCisgICAgICAgICAgICAvLyBIYW5kbGUgTVJFU09VUkNFUy0xNzEKKyAgICAgICAgICAgIG1hdmVuUmVzb3VyY2VzRXhlY3V0aW9uLnNldFByb3BlcnRpZXNFbmNvZGluZyggcHJvcGVydGllc0VuY29kaW5nICk7CisKICAgICAgICAgICAgIGlmICggbm9uRmlsdGVyZWRGaWxlRXh0ZW5zaW9ucyAhPSBudWxsICkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBtYXZlblJlc291cmNlc0V4ZWN1dGlvbi5zZXROb25GaWx0ZXJlZEZpbGVFeHRlbnNpb25zKCBub25GaWx0ZXJlZEZpbGVFeHRlbnNpb25zICk7Cg==