ZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53ZWJfdGVzdHMuZmVhdHVyZS9mZWF0dXJlLnhtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC53ZWJfdGVzdHMuZmVhdHVyZS9mZWF0dXJlLnhtbAppbmRleCBiZDVmOTljLi5mZDMwYmMzIDEwMDY0NAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3Qud2ViX3Rlc3RzLmZlYXR1cmUvZmVhdHVyZS54bWwKKysrIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LndlYl90ZXN0cy5mZWF0dXJlL2ZlYXR1cmUueG1sCkBAIC0yLDcgKzIsNyBAQAogPGZlYXR1cmUKICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3Qud2ViX3Rlc3RzLmZlYXR1cmUiCiAgICAgICBsYWJlbD0iJWZlYXR1cmVOYW1lIgotICAgICAgdmVyc2lvbj0iMy4yLjAucXVhbGlmaWVyIgorICAgICAgdmVyc2lvbj0iMy4wLjUucXVhbGlmaWVyIgogICAgICAgcHJvdmlkZXItbmFtZT0iJXByb3ZpZGVyTmFtZSI+CiAKICAgIDxkZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWxfdGVzdHMuZmVhdHVyZS9mZWF0dXJlLnhtbCBiL2ZlYXR1cmVzL29yZy5lY2xpcHNlLndzdC54bWxfdGVzdHMuZmVhdHVyZS9mZWF0dXJlLnhtbAppbmRleCBmMmVlMTMyLi5mNDQ2NGUxIDEwMDY0NAotLS0gYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS53c3QueG1sX3Rlc3RzLmZlYXR1cmUvZmVhdHVyZS54bWwKKysrIGIvZmVhdHVyZXMvb3JnLmVjbGlwc2Uud3N0LnhtbF90ZXN0cy5mZWF0dXJlL2ZlYXR1cmUueG1sCkBAIC0yLDcgKzIsNyBAQAogPGZlYXR1cmUKICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3QueG1sX3Rlc3RzLmZlYXR1cmUiCiAgICAgICBsYWJlbD0iJWZlYXR1cmVOYW1lIgotICAgICAgdmVyc2lvbj0iMy4yLjAucXVhbGlmaWVyIgorICAgICAgdmVyc2lvbj0iMy4wLjQucXVhbGlmaWVyIgogICAgICAgcHJvdmlkZXItbmFtZT0iJXByb3ZpZGVyTmFtZSI+CiAKICAgIDxkZXNjcmlwdGlvbj4KQEAgLTIxLDYgKzIxLDExIEBACiAgICAgICA8dXBkYXRlIGxhYmVsPSIldXBkYXRlU2l0ZU5hbWUiIHVybD0iaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3dlYnRvb2xzL3VwZGF0ZXMvIi8+CiAgICA8L3VybD4KIAorICAgPHJlcXVpcmVzPgorICAgICAgPGltcG9ydCBmZWF0dXJlPSJvcmcuZWNsaXBzZS53c3QueG1sX3VpLmZlYXR1cmUiIHZlcnNpb249IjMuMC41Ii8+CisgICAgICA8aW1wb3J0IGZlYXR1cmU9Im9yZy5lY2xpcHNlLnRlc3QiIHZlcnNpb249IjMuMy4wIi8+CisgICA8L3JlcXVpcmVzPgorCiAgICA8cGx1Z2luCiAgICAgICAgICBpZD0ib3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLnRlc3RzIgogICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgppbmRleCAzYmExYTliLi5iMDllZWRkIDEwMDY0NAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0yLDcgKzIsNyBAQAogQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgogQnVuZGxlLU5hbWU6ICVCdW5kbGUtTmFtZS4wCiBCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuNDAwLnF1YWxpZmllcgorQnVuZGxlLVZlcnNpb246IDEuMC4yMDQucXVhbGlmaWVyCiBCdW5kbGUtQ2xhc3NQYXRoOiBqc3Bjb3JldGVzdHMuamFyCiBCdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMuSlNQQ29yZVRlc3RzUGx1Z2luCiBCdW5kbGUtVmVuZG9yOiAlQnVuZGxlLVZlbmRvci4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9KU1BDb3JlVGVzdFN1aXRlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9KU1BDb3JlVGVzdFN1aXRlLmphdmEKaW5kZXggZGJhNjMwNC4uZDk4Njc5ZiAxMDA2NDQKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvSlNQQ29yZVRlc3RTdWl0ZS5qYXZhCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL0pTUENvcmVUZXN0U3VpdGUuamF2YQpAQCAtMSw1ICsxLDUgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCiAgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKICAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CkBAIC0yNiw3ICsyNiw2IEBACiBpbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLnRyYW5zbGF0aW9uLkpTUEphdmFUcmFuc2xhdG9yQ29yZVRlc3Q7CiBpbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLnZhbGlkYXRpb24uSlNQQWN0aW9uVmFsaWRhdG9yVGVzdDsKIGltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMudmFsaWRhdGlvbi5KU1BCYXRjaFZhbGlkYXRvclRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLnZhbGlkYXRpb24uSlNQRGlyZWN0aXZlVmFsaWRhdG9yVGVzdDsKIGltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMudmFsaWRhdGlvbi5KU1BKYXZhVmFsaWRhdG9yVGVzdDsKIGltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNzcy5jb3JlLnRlc3RzLnNvdXJjZS5KU1BlZENTU1NvdXJjZVBhcnNlclRlc3Q7CiAKQEAgLTM2LDcgKzM1LDcgQEAKIAl9CiAKIAlwdWJsaWMgSlNQQ29yZVRlc3RTdWl0ZSgpIHsKLQkJc3VwZXIoIkpTUCBDb3JlIFRlc3QgU3VpdGUiKTsKKwkJc3VwZXIoIlNTRSBKU1AgQ29yZSBUZXN0IFN1aXRlIik7CiAKIAkJU3RyaW5nIG5vbmludGVyYWN0aXZlID0gU3lzdGVtLmdldFByb3BlcnR5KCJ3dHAuYXV0b3Rlc3Qubm9uaW50ZXJhY3RpdmUiKTsKIAkJU3RyaW5nIHd0cF9hdXRvdGVzdF9ub25pbnRlcmFjdGl2ZSA9IG51bGw7CkBAIC01MCwyMiArNDksMjEgQEAKIAkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RDb250ZW50VHlwZUhhbmRsZXJzLmNsYXNzLCAiVGVzdENvbnRlbnRUeXBlSGFuZGxlcnMiKSk7CiAJCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0TW9kZWxNYW5hZ2VyLmNsYXNzLCAiVGVzdE1vZGVsTWFuYWdlciIpKTsKIAkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKEZvcm1hdFRlc3Rlci5jbGFzcywgIkZvcm1hdFRlc3RlciIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RNb2RlbFJlbGVhc2UuY2xhc3MsICJNb2RlbCBUZXN0cyIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RNb2RlbFdpdGhOb0ZpbGUuY2xhc3MsICJNb2RlbCB3aXRoIG5vIGZpbGUgVGVzdHMiKSk7CisJCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0TW9kZWxSZWxlYXNlLmNsYXNzLCAiSlNQIE1vZGVsIFRlc3RzIikpOworCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdE1vZGVsV2l0aE5vRmlsZS5jbGFzcywgIkpTUCBNb2RlbCB3aXRoIG5vIGZpbGUgVGVzdHMiKSk7CiAJCS8vIHRlbXBvcmFyaWx5IHJlbW92ZWQgc2luY2UgdW5zdGFibGUsIHNlZSBodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MjEzNzU0IAogCQkvLyBhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdEluZGV4LmNsYXNzLCAiVGFnbGliSW5kZXggVGVzdHMiKSk7CiAJCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShKU1BUb2tlbml6ZXJUZXN0LmNsYXNzLCAiU3BlY2lhbCBQYXJzaW5nIFRlc3RzIikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoSlNQSmF2YVRyYW5zbGF0b3JDb3JlVGVzdC5jbGFzcywgIkNvcmUgVHJhbnNsYXRvciBUZXN0cyIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RNb2RlbEluY2x1ZGVzLmNsYXNzLCAiQ29yZSBGcmFnbWVudCBJbmNsdXNpb24gVGVzdHMiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShKU1BDb3JlUHJlZmVyZW5jZXNUZXN0LmNsYXNzLCAiUHJlZmVyZW5jZSBUZXN0cyIpKTsKKwkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKEpTUEphdmFUcmFuc2xhdG9yQ29yZVRlc3QuY2xhc3MpKTsKKwkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RNb2RlbEluY2x1ZGVzLmNsYXNzKSk7CisJCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShKU1BDb3JlUHJlZmVyZW5jZXNUZXN0LmNsYXNzKSk7CiAJCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShKU1BlZENTU1NvdXJjZVBhcnNlclRlc3QuY2xhc3MsICJTcGVjaWFsIFBhcnNpbmcgVGVzdHMgZm9yIEpTUC1DU1MgY29udGVudCIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKEpTUEphdmFWYWxpZGF0b3JUZXN0LmNsYXNzLCAiSmF2YSBWYWxpZGF0b3IgVGVzdHMiKSk7CisJCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShKU1BKYXZhVmFsaWRhdG9yVGVzdC5jbGFzcywgIkpTUCBKYXZhIFZhbGlkYXRvciBUZXN0cyIpKTsKIAkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RJbXBvcnRlZE5vZGVzLmNsYXNzLCAiSW1wb3J0ZWQgTm9kZXMgVGVzdHMiKSk7CiAJCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0Rml4ZWRDTURvY3VtZW50cy5jbGFzcywgIkZpeGVkIENNRG9jdW1lbnQgQ3JlYXRpb24gVGVzdHMiKSk7CiAJCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0VGFnbGliQ01UZXN0cy5jbGFzcywgIkN1c3RvbSBUYWcgTGlicmFyeSBDb250ZW50IE1vZGVsIFRlc3RzIikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoSlNQQWN0aW9uVmFsaWRhdG9yVGVzdC5jbGFzcywgIkFjdGlvbiBWYWxpZGF0b3IgVGVzdHMiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShKU1BCYXRjaFZhbGlkYXRvclRlc3QuY2xhc3MsICJCYXRjaCBWYWxpZGF0b3IgVGVzdHMiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShKU1BEaXJlY3RpdmVWYWxpZGF0b3JUZXN0LmNsYXNzLCAiRGlyZWN0aXZlIFZhbGlkYXRvciBUZXN0cyIpKTsKKwkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKEpTUEFjdGlvblZhbGlkYXRvclRlc3QuY2xhc3MsICJKU1AgQWN0aW9uIFZhbGlkYXRvciBUZXN0cyIpKTsKKwkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKEpTUEJhdGNoVmFsaWRhdG9yVGVzdC5jbGFzcywgIkpTUCBCYXRjaCBWYWxpZGF0b3IgVGVzdHMiKSk7CiAKIAkJaWYgKHd0cF9hdXRvdGVzdF9ub25pbnRlcmFjdGl2ZSAhPSBudWxsKQogCQkJU3lzdGVtLnNldFByb3BlcnR5KCJ3dHAuYXV0b3Rlc3Qubm9uaW50ZXJhY3RpdmUiLCB3dHBfYXV0b3Rlc3Rfbm9uaW50ZXJhY3RpdmUpOwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvVGVzdE1vZGVsTWFuYWdlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvVGVzdE1vZGVsTWFuYWdlci5qYXZhCmluZGV4IGY2MDliNmMuLmMxYzgzOGUgMTAwNjQ0Ci0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL1Rlc3RNb2RlbE1hbmFnZXIuamF2YQorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9UZXN0TW9kZWxNYW5hZ2VyLmphdmEKQEAgLTEsNSArMSw1IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwogICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCiAgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdApAQCAtMTgsNyArMTgsNiBAQAogaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwogaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwogaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5leGNlcHRpb25zLlJlc291cmNlSW5Vc2U7CiAKIC8qKgogICogVGhpcyBjbGFzcyB0ZXN0cyBiYXNpYyBjcmVhdGlvbiBvZiBJTW9kZWxNYW5hZ2VyIHBsdWdpbiBhbmQgdGhlCkBAIC00Myw4ICs0Miw4IEBACiAJCWFzc2VydFRydWUoIm1vZGVsTWFuYWdlciBtdXN0IG5vdCBiZSBudWxsIiwgbW9kZWxNYW5hZ2VyICE9IG51bGwpOwogCiAJCXRyeSB7Ci0JCQltb2RlbCA9IG1vZGVsTWFuYWdlci5nZXRNb2RlbEZvckVkaXQoZ2V0Q2xhc3MoKS5nZXROYW1lKCkgKyAiLiIgKyBnZXROYW1lKCkgKyAiLnRlc3QuanNwIiwgbmV3IE51bGxJbnB1dFN0cmVhbSgpLCBudWxsKTsKLQkJCWFzc2VydFRydWUoImJhc2ljIEpTUCBlbXB0eSBtb2RlbCBjb3VsZCBub3QgYmUgY3JlYXRlZCIsIG1vZGVsICE9IG51bGwpOworCQkJbW9kZWwgPSBtb2RlbE1hbmFnZXIuZ2V0TW9kZWxGb3JFZGl0KCJ0ZXN0LnhtbCIsIG5ldyBOdWxsSW5wdXRTdHJlYW0oKSwgbnVsbCk7CisJCQlhc3NlcnRUcnVlKCJiYXNpYyBYTUwgZW1wdHkgbW9kZWwgY291bGQgbm90IGJlIGNyZWF0ZWQiLCBtb2RlbCAhPSBudWxsKTsKIAkJfSBmaW5hbGx5IHsKIAkJCWlmIChtb2RlbCAhPSBudWxsKSB7CiAJCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7CkBAIC01MywyNiArNTIsNiBAQAogCiAJfQogCi0JcHVibGljIHZvaWQgdGVzdENvcHlKU1BNb2RlbEZvckVkaXQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJCW1vZGVsID0gbW9kZWxNYW5hZ2VyLmdldE1vZGVsRm9yRWRpdCgidGVzdC5qc3AiLCBuZXcgTnVsbElucHV0U3RyZWFtKCksIG51bGwpOwotCQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbENvcHkgPSBtb2RlbE1hbmFnZXIuY29weU1vZGVsRm9yRWRpdChtb2RlbC5nZXRJZCgpLCBnZXROYW1lKCkrIi5uZXdJZCIpOwotCQkJYXNzZXJ0Tm90TnVsbCgiY29waWVkIEpTUCBtb2RlbCB3YXMgbnVsbCIsIG1vZGVsQ29weSk7Ci0JCQlhc3NlcnRFcXVhbHMoIk1vZGVsSGFuZGxlcnMgZGlmZmVyIiwgbW9kZWwuZ2V0TW9kZWxIYW5kbGVyKCksIG1vZGVsQ29weS5nZXRNb2RlbEhhbmRsZXIoKSk7Ci0JCQlhc3NlcnRFcXVhbHMoIlN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25QYXJzZXJzIGRpZmZlciIsIG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLmdldFBhcnNlcigpLmdldENsYXNzKCksIG1vZGVsQ29weS5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5nZXRQYXJzZXIoKS5nZXRDbGFzcygpKTsKLQkJCWFzc2VydEVxdWFscygiVGV4dCBkb2N1bWVudCBjb250ZW50cyBkaWZmZXIiLCBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5nZXQoKSwgbW9kZWxDb3B5LmdldFN0cnVjdHVyZWREb2N1bWVudCgpLmdldCgpKTsKLQkJfQotCQljYXRjaCAoUmVzb3VyY2VJblVzZSBlKSB7Ci0JCQlmYWlsKCJSZXNvdXJjZSBpbiB1c2UgcmVwb3J0ZWQgZm9yICIgKyBtb2RlbC5nZXRJZCgpKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKQotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0JfQotCiAJcHVibGljIHZvaWQgdGVzdE51bGxBcmd1bWVudCgpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAJCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBudWxsOwogCQlFeGNlcHRpb24gZSA9IG51bGw7CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L0Zvcm1hdFRlc3Rlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC9Gb3JtYXRUZXN0ZXIuamF2YQppbmRleCAzNDhhM2Q4Li4zOTRiN2RmIDEwMDY0NAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L0Zvcm1hdFRlc3Rlci5qYXZhCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvRm9ybWF0VGVzdGVyLmphdmEKQEAgLTU4MCw3ICs1ODAsNyBAQAogCQkJCVN5c3RlbS5vdXQucHJpbnRsbihmb3JtYXR0ZWRTdHJpbmcpOwogCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Iik7CiAJCQl9Ci0JCQlhc3NlcnRFcXVhbHMoZXhwZWN0ZWQsIGZvcm1hdHRlZCk7CisJCQlhc3NlcnRUcnVlKGZhbHNlKTsKIAkJfQogCX0KIH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jb250ZW50bW9kZWxzL1Rlc3RUYWdsaWJDTVRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jb250ZW50bW9kZWxzL1Rlc3RUYWdsaWJDTVRlc3RzLmphdmEKaW5kZXggNTU3YTFlNC4uNjg1ODc5MCAxMDA2NDQKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY29udGVudG1vZGVscy9UZXN0VGFnbGliQ01UZXN0cy5qYXZhCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NvbnRlbnRtb2RlbHMvVGVzdFRhZ2xpYkNNVGVzdHMuamF2YQpAQCAtNjQsNyArNjQsNiBAQAogCiAJcHVibGljIHZvaWQgdGVzdExvYWRDdXN0b21UYWdzVGhyb3VnaEpTUFN5bnRheCgpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7CiAJCUlGaWxlIGpzcEZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUoUGF0aC5ST09ULmFwcGVuZChQUk9KRUNUX05BTUUpLmFwcGVuZCgid2ViIHN0dWZmL3Rlc3QxLmpzcCIpKTsKLQkJYXNzZXJ0VHJ1ZSgidGVzdCBmaWxlICIgKyBqc3BGaWxlLmdldEZ1bGxQYXRoKCkgKyAiIGRvZXMgbm90IGV4aXN0IiwganNwRmlsZS5leGlzdHMoKSk7CiAKIAkJSURPTU1vZGVsIG1vZGVsID0gbnVsbDsKIAkJdHJ5IHsKQEAgLTg1LDcgKzg0LDYgQEAKIAogCXB1YmxpYyB2b2lkIHRlc3RMb2FkQ3VzdG9tVGFnc1Rocm91Z2hYTUxTeW50YXgoKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewogCQlJRmlsZSBqc3BGaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKFBhdGguUk9PVC5hcHBlbmQoUFJPSkVDVF9OQU1FKS5hcHBlbmQoIndlYiBzdHVmZi90ZXN0WC5qc3AiKSk7Ci0JCWFzc2VydFRydWUoInRlc3QgZmlsZSAiICsganNwRmlsZS5nZXRGdWxsUGF0aCgpICsgIiBkb2VzIG5vdCBleGlzdCIsIGpzcEZpbGUuZXhpc3RzKCkpOwogCiAJCUlET01Nb2RlbCBtb2RlbCA9IG51bGw7CiAJCXRyeSB7CkBAIC0xMTUsNyArMTEzLDYgQEAKIAkJcHJvamVjdC5yZWZyZXNoTG9jYWwoSVJlc291cmNlLkRFUFRIX0lORklOSVRFLCBudWxsKTsKIAogCQlJRmlsZSBqc3BGaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKFBhdGguUk9PVC5hcHBlbmQoIkR5bmFtaWNXZWJQcm9qZWN0L1dlYkNvbnRlbnQvaW5kZXguanNwIikpOwotCQlhc3NlcnRUcnVlKCJ0ZXN0IGZpbGUgIiArIGpzcEZpbGUuZ2V0RnVsbFBhdGgoKSArICIgZG9lcyBub3QgZXhpc3QiLCBqc3BGaWxlLmV4aXN0cygpKTsKIAogCQlJRE9NTW9kZWwgbW9kZWwgPSBudWxsOwogCQl0cnkgewpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY29udGVudHR5cGVpZGVudGlmaWVyL2NvbnRlbnRzcGVjaWZpYy9UZXN0TW9kZWxIYW5kbGVycy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY29udGVudHR5cGVpZGVudGlmaWVyL2NvbnRlbnRzcGVjaWZpYy9UZXN0TW9kZWxIYW5kbGVycy5qYXZhCmluZGV4IDNlNmM5MzcuLmNmYjU1ZDUgMTAwNjQ0Ci0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NvbnRlbnR0eXBlaWRlbnRpZmllci9jb250ZW50c3BlY2lmaWMvVGVzdE1vZGVsSGFuZGxlcnMuamF2YQorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jb250ZW50dHlwZWlkZW50aWZpZXIvY29udGVudHNwZWNpZmljL1Rlc3RNb2RlbEhhbmRsZXJzLmphdmEKQEAgLTEsNSArMSw1IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwogICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCiAgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdApAQCAtMTAsMjkgKzEwLDIyIEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLmNvbnRlbnR0eXBlaWRlbnRpZmllci5jb250ZW50c3BlY2lmaWM7CiAKLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheUlucHV0U3RyZWFtOwogaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CiAKIGltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CiAKIGltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKIGltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7CiBpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5kb2N1bWVudC5QYWdlRGlyZWN0aXZlQWRhcHRlcjsKIGltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuQ29udGVudFR5cGVJZEZvckpTUDsKIGltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMudGFnbGliaW5kZXguQnVuZGxlUmVzb3VyY2VVdGlsOwogaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9yQ1NTOwogaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuQ29udGVudFR5cGVJZEZvckhUTUw7CiBpbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmx0ay5tb2RlbGhhbmRsZXIuRW1iZWRkZWRUeXBlSGFuZGxlcjsKIGltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwubHRrLm1vZGVsaGFuZGxlci5JTW9kZWxIYW5kbGVyOwogaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5tb2RlbGhhbmRsZXIuTW9kZWxIYW5kbGVyUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklOb2RlTm90aWZpZXI7CiBpbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7CiBpbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmNvbnRlbnR0eXBlLkNvbnRlbnRUeXBlSWRGb3JYTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKIAogcHVibGljIGNsYXNzIFRlc3RNb2RlbEhhbmRsZXJzIGV4dGVuZHMgVGVzdENhc2UgewogCXByaXZhdGUgc3RhdGljIE1vZGVsSGFuZGxlclJlZ2lzdHJ5IGdldE1vZGVsSGFuZGxlclJlZ2lzdHJ5KCkgewpAQCAtMTYxLDEwNSArMTU0LDYgQEAKIAkJcHJvamVjdC5kZWxldGUodHJ1ZSwgbnVsbCk7CiAJfQogCi0JcHVibGljIHZvaWQgdGVzdERpcnR5U3RhdGVGb3JNaXNzcGVsbGVkRW1iZWRkZWRDaGFyc2V0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVN0cmluZyBwcm9qZWN0TmFtZSA9ICJUZXN0TW9kZWxIYW5kbGVycy4iICsgZ2V0TmFtZSgpOwotCQlJUHJvamVjdCBwcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KHByb2plY3ROYW1lKTsKLQkJaWYgKCFwcm9qZWN0LmlzQWNjZXNzaWJsZSgpKSB7Ci0JCQlwcm9qZWN0ID0gQnVuZGxlUmVzb3VyY2VVdGlsLmNyZWF0ZVNpbXBsZVByb2plY3QocHJvamVjdE5hbWUsIG51bGwsIG51bGwpOwotCQl9Ci0JCUlGaWxlIHRlc3RGaWxlID0gcHJvamVjdC5nZXRGaWxlKCJjaGFyYXNldC5qc3AiKTsKLQkJU3RyaW5nIGNvbnRlbnRzID0gIjwlQCBwYWdlIGxhbmd1YWdlPVwiamF2YVwiIGNvbnRlbnRUeXBlPVwidGV4dC94bWw7IGNoYXJhc2V0PVVURi04XCIgcGFnZUVuY29kaW5nPVwiVVRGLThcIiU+XG4iICsgCi0JCQkJIjw/eG1sIHZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cIlVURi04XCI/PlxuIiArIAotCQkJCSI8Q29udGVudHM+XG4iICsgCi0JCQkJIjxFcnJvciBzdGF0ZT1cImZhdGFsXCIgY29kZT1cIlwiPlxuIiArIAotCQkJCSI8L0Vycm9yPlxuIiArIAotCQkJCSI8L0NvbnRlbnRzPiI7Ci0JCWlmICghdGVzdEZpbGUuZXhpc3RzKCkpIHsKLQkJCXRlc3RGaWxlLmNyZWF0ZShuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0oY29udGVudHMuZ2V0Qnl0ZXMoInV0ZjgiKSksIElSZXNvdXJjZS5GT1JDRSwgbnVsbCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQl0ZXN0RmlsZS5zZXRDb250ZW50cyhuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0oY29udGVudHMuZ2V0Qnl0ZXMoInV0ZjgiKSksIElSZXNvdXJjZS5GT1JDRSwgbnVsbCk7Ci0JCX0KLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQltb2RlbCA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuZ2V0TW9kZWxGb3JSZWFkKHRlc3RGaWxlKTsKLQotCQkJRG9jdW1lbnQgZG9jID0gKChJRE9NTW9kZWwpIG1vZGVsKS5nZXREb2N1bWVudCgpOwotCQkJUGFnZURpcmVjdGl2ZUFkYXB0ZXIgcGFnZURpcmVjdGl2ZUFkYXB0ZXIgPSAoUGFnZURpcmVjdGl2ZUFkYXB0ZXIpICgoSU5vZGVOb3RpZmllcikgZG9jKS5nZXRBZGFwdGVyRm9yKFBhZ2VEaXJlY3RpdmVBZGFwdGVyLmNsYXNzKTsKLQkJCUVtYmVkZGVkVHlwZUhhbmRsZXIgZW1iZWRkZWRIYW5kbGVyID0gcGFnZURpcmVjdGl2ZUFkYXB0ZXIuZ2V0RW1iZWRkZWRUeXBlKCk7Ci0KLQkJCWFzc2VydEZhbHNlKCJuZXdseSBvcGVuZWQgbW9kZWwgd2FzIGRpcnR5LCBlbWJlZGRlZCBoYW5kbGVyIGNoYW5nZWQ/IGN1cnJlbnQgZmFtaWx5OiIgKyBlbWJlZGRlZEhhbmRsZXIuZ2V0RmFtaWx5SWQoKSwgbW9kZWwuaXNEaXJ0eSgpKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKQotCQkJCW1vZGVsLnJlbGVhc2VGcm9tUmVhZCgpOwotCQl9Ci0JCXByb2plY3QuZGVsZXRlKHRydWUsIG51bGwpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0RGlydHlTdGF0ZUZvckVtYmVkZGVkQ2hhcnNldFdpdGhvdXRDb250ZW50VHlwZSgpIHRocm93cyBFeGNlcHRpb24gewotCQlTdHJpbmcgcHJvamVjdE5hbWUgPSAiVGVzdE1vZGVsSGFuZGxlcnMuIiArIGdldE5hbWUoKTsKLQkJSVByb2plY3QgcHJvamVjdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChwcm9qZWN0TmFtZSk7Ci0JCWlmICghcHJvamVjdC5pc0FjY2Vzc2libGUoKSkgewotCQkJcHJvamVjdCA9IEJ1bmRsZVJlc291cmNlVXRpbC5jcmVhdGVTaW1wbGVQcm9qZWN0KHByb2plY3ROYW1lLCBudWxsLCBudWxsKTsKLQkJfQotCQlJRmlsZSB0ZXN0RmlsZSA9IHByb2plY3QuZ2V0RmlsZSgiY2hhcmFzZXQuanNwIik7Ci0JCVN0cmluZyBjb250ZW50cyA9ICI8JUAgcGFnZSBsYW5ndWFnZT1cImphdmFcIiBjb250ZW50VHlwZT1cImNoYXJzZXQ9VVRGLThcIiBwYWdlRW5jb2Rpbmc9XCJVVEYtOFwiJT5cbiIgKyAKLQkJCQkiPD94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwiVVRGLThcIj8+XG4iICsgCi0JCQkJIjxDb250ZW50cz5cbiIgKyAKLQkJCQkiPEVycm9yIHN0YXRlPVwiZmF0YWxcIiBjb2RlPVwiXCI+XG4iICsgCi0JCQkJIjwvRXJyb3I+XG4iICsgCi0JCQkJIjwvQ29udGVudHM+IjsKLQkJaWYgKCF0ZXN0RmlsZS5leGlzdHMoKSkgewotCQkJdGVzdEZpbGUuY3JlYXRlKG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShjb250ZW50cy5nZXRCeXRlcygidXRmOCIpKSwgSVJlc291cmNlLkZPUkNFLCBudWxsKTsKLQkJfQotCQllbHNlIHsKLQkJCXRlc3RGaWxlLnNldENvbnRlbnRzKG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShjb250ZW50cy5nZXRCeXRlcygidXRmOCIpKSwgSVJlc291cmNlLkZPUkNFLCBudWxsKTsKLQkJfQotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCW1vZGVsID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5nZXRNb2RlbEZvclJlYWQodGVzdEZpbGUpOwotCi0JCQlEb2N1bWVudCBkb2MgPSAoKElET01Nb2RlbCkgbW9kZWwpLmdldERvY3VtZW50KCk7Ci0JCQlQYWdlRGlyZWN0aXZlQWRhcHRlciBwYWdlRGlyZWN0aXZlQWRhcHRlciA9IChQYWdlRGlyZWN0aXZlQWRhcHRlcikgKChJTm9kZU5vdGlmaWVyKSBkb2MpLmdldEFkYXB0ZXJGb3IoUGFnZURpcmVjdGl2ZUFkYXB0ZXIuY2xhc3MpOwotCQkJRW1iZWRkZWRUeXBlSGFuZGxlciBlbWJlZGRlZEhhbmRsZXIgPSBwYWdlRGlyZWN0aXZlQWRhcHRlci5nZXRFbWJlZGRlZFR5cGUoKTsKLQotCQkJYXNzZXJ0RmFsc2UoIm5ld2x5IG9wZW5lZCBtb2RlbCB3YXMgZGlydHksIGVtYmVkZGVkIGhhbmRsZXIgY2hhbmdlZD8gY3VycmVudCBmYW1pbHk6IiArIGVtYmVkZGVkSGFuZGxlci5nZXRGYW1pbHlJZCgpLCBtb2RlbC5pc0RpcnR5KCkpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpCi0JCQkJbW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JCX0KLQkJcHJvamVjdC5kZWxldGUodHJ1ZSwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdERpcnR5U3RhdGVGb3JVbnN1cHBvcnRlZEVtYmVkZGVkQ29udGVudFR5cGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJU3RyaW5nIHByb2plY3ROYW1lID0gIlRlc3RNb2RlbEhhbmRsZXJzLiIgKyBnZXROYW1lKCk7Ci0JCUlQcm9qZWN0IHByb2plY3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QocHJvamVjdE5hbWUpOwotCQlpZiAoIXByb2plY3QuaXNBY2Nlc3NpYmxlKCkpIHsKLQkJCXByb2plY3QgPSBCdW5kbGVSZXNvdXJjZVV0aWwuY3JlYXRlU2ltcGxlUHJvamVjdChwcm9qZWN0TmFtZSwgbnVsbCwgbnVsbCk7Ci0JCX0KLQkJSUZpbGUgdGVzdEZpbGUgPSBwcm9qZWN0LmdldEZpbGUoInVuc3VwcG9ydGVkLmpzcCIpOwotCQlTdHJpbmcgY29udGVudHMgPSAiPCVAIHBhZ2UgbGFuZ3VhZ2U9XCJqYXZhXCIgY29udGVudFR5cGU9XCJpbWFnZS9naWZcIiU+XG4iICsgCi0JCSJvdXQud3JpdGUoXCJHSUY4OWFcIiI7Ci0JCWlmICghdGVzdEZpbGUuZXhpc3RzKCkpIHsKLQkJCXRlc3RGaWxlLmNyZWF0ZShuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0oY29udGVudHMuZ2V0Qnl0ZXMoInV0ZjgiKSksIElSZXNvdXJjZS5GT1JDRSwgbnVsbCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQl0ZXN0RmlsZS5zZXRDb250ZW50cyhuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0oY29udGVudHMuZ2V0Qnl0ZXMoInV0ZjgiKSksIElSZXNvdXJjZS5GT1JDRSwgbnVsbCk7Ci0JCX0KLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQltb2RlbCA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuZ2V0TW9kZWxGb3JSZWFkKHRlc3RGaWxlKTsKLQkJCWFzc2VydEZhbHNlKCJuZXdseSBvcGVuZWQgbW9kZWwgd2FzIGRpcnR5ICIgKyB0ZXN0RmlsZS5nZXROYW1lKCksIG1vZGVsLmlzRGlydHkoKSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkKLQkJCQltb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQkJfQotCQlwcm9qZWN0LmRlbGV0ZSh0cnVlLCBudWxsKTsKLQl9Ci0KIAlwdWJsaWMgdm9pZCB0ZXN0RGlydHlTdGF0ZUZvckVtYmVkZGVkQ29udGVudFR5cGVTdWJYTUwoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJU3RyaW5nIG5hbWUgPSAiYnVnMjQzMjQzIjsKIAkJSVByb2plY3QgcHJvamVjdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChuYW1lKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL3NvdXJjZS9KU1BUb2tlbml6ZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9zb3VyY2UvSlNQVG9rZW5pemVyVGVzdC5qYXZhCmluZGV4IDcwMGMzYjEuLmVmODFkZjggMTAwNjQ0Ci0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL3NvdXJjZS9KU1BUb2tlbml6ZXJUZXN0LmphdmEKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvc291cmNlL0pTUFRva2VuaXplclRlc3QuamF2YQpAQCAtMjEsNyArMjEsMTQgQEAKIAogaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKIAoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5jb250ZW50dHlwZS5Cb29sZWFuU3RhY2s7CiBpbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLnBhcnNlci5pbnRlcm5hbC5KU1BUb2tlbml6ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLnRhZ2xpYmluZGV4LkJ1bmRsZVJlc291cmNlVXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwogaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklUZXh0UmVnaW9uOwogaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5yZWdpb25zLkRPTVJlZ2lvbkNvbnRleHQ7CiAKQEAgLTQ4LDExICs1NSwxMyBAQAogCiAJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJc3VwZXIuc2V0VXAoKTsKKwkJQm9vbGVhblN0YWNrLm1heERlcHRoID0gNTAwOwogCQl0b2tlbml6ZXIgPSBuZXcgSlNQVG9rZW5pemVyKCk7CiAJfQogCiAJcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJc3VwZXIudGVhckRvd24oKTsKKwkJQm9vbGVhblN0YWNrLm1heERlcHRoID0gMTAwOwogCQl0b2tlbml6ZXIgPSBudWxsOwogCX0KIApAQCAtMTgxLDggKzE5MCw3IEBACiAJfQogCQogCS8vIE5lZWQgdG8gc2ltdWxhdGUgdHlwaW5nIGNoYXJhY3RlcnMgaW50byB0aGUgZG9jdW1lbnQgdG8gY2F1c2UgdGhlIHN0YWNrIG92ZXJmbG93LgotCS8vIFRlc3QgaXMgaXJyZWxldmFudCBkdWUgdG8gY2hhbmdlcyBpbiBbMjgwNDk2XQotCS8qcHVibGljIHZvaWQgdGVzdDI2NTM4MCgpIHRocm93cyBFeGNlcHRpb24geworCXB1YmxpYyB2b2lkIHRlc3QyNjUzODAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJU3RyaW5nIHByb2plY3ROYW1lID0gImJ1Z18yNjUzODAiOwogCQlpbnQgb2xkRGVwdGggPSBCb29sZWFuU3RhY2subWF4RGVwdGg7CiAJCS8vIE1ha2UgdGhlIG1heERlcHRoIGVxdWl2YWxlbnQgdG8gdGhhdCB3ZSdkIHNlZSBpbiBhIG5vcm1hbCBlZGl0b3IKQEAgLTIxNyw1ICsyMjUsNSBAQAogCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwogCQkJQm9vbGVhblN0YWNrLm1heERlcHRoID0gb2xkRGVwdGg7CiAJCX0KLQl9Ki8KKwl9CiB9CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy90cmFuc2xhdGlvbi9KU1BKYXZhVHJhbnNsYXRvckNvcmVUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy90cmFuc2xhdGlvbi9KU1BKYXZhVHJhbnNsYXRvckNvcmVUZXN0LmphdmEKaW5kZXggNjBhYzJhYS4uODE2OWQyOSAxMDA2NDQKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvdHJhbnNsYXRpb24vSlNQSmF2YVRyYW5zbGF0b3JDb3JlVGVzdC5qYXZhCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL3RyYW5zbGF0aW9uL0pTUEphdmFUcmFuc2xhdG9yQ29yZVRlc3QuamF2YQpAQCAtMTMsNyArMTMsNiBAQAogCiBpbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKIGltcG9ydCBqYXZhLmlvLlN0cmluZ1dyaXRlcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIAogaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKIApAQCAtMjEsNyArMjAsNiBAQAogaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklNYXJrZXI7CiBpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7CiBpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZURlbHRhOwogaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2VSb290OwogaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLkluY3JlbWVudGFsUHJvamVjdEJ1aWxkZXI7CiBpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwpAQCAtMzUsNyArMzMsNiBAQAogaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5qYXZhLkpTUFRyYW5zbGF0aW9uOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5qYXZhLkpTUFRyYW5zbGF0aW9uQWRhcHRlcjsKIGltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwuamF2YS5KU1BUcmFuc2xhdGlvbkFkYXB0ZXJGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5tb2RlbGhhbmRsZXIuTW9kZWxIYW5kbGVyRm9ySlNQOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5KU1BDb3JlUHJlZmVyZW5jZU5hbWVzOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLkpTUEphdmFWYWxpZGF0b3I7CiBpbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uSlNQVmFsaWRhdG9yOwpAQCAtNDYsMTAgKzQzLDcgQEAKIGltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKIGltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKIGltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5WYWxpZGF0aW9uRnJhbWV3b3JrOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLlZhbGlkYXRpb25SZXN1bHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uVmFsaWRhdGlvblN0YXRlOwogaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLmludGVybmFsLm9wZXJhdGlvbnMuVmFsaWRhdG9yTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5wcm92aXNpb25hbC5jb3JlLklNZXNzYWdlOwogaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLmludGVybmFsLnByb3Zpc2lvbmFsLmNvcmUuSVJlcG9ydGVyOwogaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NRG9jdW1lbnQ7CiBpbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKQEAgLTU3LDcgKzUxLDYgQEAKIHB1YmxpYyBjbGFzcyBKU1BKYXZhVHJhbnNsYXRvckNvcmVUZXN0IGV4dGVuZHMgVGVzdENhc2UgewogCiAJc3RhdGljIGZpbmFsIFN0cmluZyBXVFBfQVVUT1RFU1RfTk9OSU5URVJBQ1RJVkUgPSAid3RwLmF1dG90ZXN0Lm5vbmludGVyYWN0aXZlIjsKLQlwcml2YXRlIHN0YXRpYyBieXRlW10gY3JlYXRpb25Mb2NrID0gbmV3IGJ5dGVbMF07CiAKIAlwdWJsaWMgSlNQSmF2YVRyYW5zbGF0b3JDb3JlVGVzdCgpIHsKIAl9CkBAIC0xOTYsNyArMTg5LDYgQEAKIAkJCUpvYi5nZXRKb2JNYW5hZ2VyKCkuam9pbihSZXNvdXJjZXNQbHVnaW4uRkFNSUxZX01BTlVBTF9CVUlMRCwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7CiAJCQlKb2IuZ2V0Sm9iTWFuYWdlcigpLmpvaW4oVmFsaWRhdG9yTWFuYWdlci5WQUxJREFUT1JfSk9CX0ZBTUlMWSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7CiAJCQlKb2IuZ2V0Sm9iTWFuYWdlcigpLmpvaW4oUmVzb3VyY2VzUGx1Z2luLkZBTUlMWV9BVVRPX0JVSUxELCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJCVRocmVhZC5zbGVlcCgyMDApOwogCQkJSm9iLmdldEpvYk1hbmFnZXIoKS5iZWdpblJ1bGUocm9vdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCksIG51bGwpOwogCQl9CiAJCWNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7CkBAIC0yNzQsMTQgKzI2NiwxMyBAQAogCiAJCUpTUENvcmVQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFBsdWdpblByZWZlcmVuY2VzKCkuc2V0VmFsdWUoSlNQQ29yZVByZWZlcmVuY2VOYW1lcy5WQUxJREFURV9GUkFHTUVOVFMsIGRvVmFsaWRhdGVTZWdtZW50cyk7CiAJCUlGaWxlIG1haW4gPSBwcm9qZWN0LmdldEZpbGUoIldlYkNvbnRlbnQvbWFpbi5qc3AiKTsKLQkJVmFsaWRhdGlvblJlc3VsdCByZXN1bHQgPSBuZXcgSlNQSmF2YVZhbGlkYXRvcigpLnZhbGlkYXRlKG1haW4sIElSZXNvdXJjZURlbHRhLkFEREVELCBuZXcgVmFsaWRhdGlvblN0YXRlKCksIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQlMaXN0IG1lc3NhZ2VzID0gcmVzdWx0LmdldFJlcG9ydGVyKG51bGwpLmdldE1lc3NhZ2VzKCk7CisJCUlNYXJrZXJbXSBtYXJrZXJzID0gbWFpbi5maW5kTWFya2VycyhJTWFya2VyLlBST0JMRU0sIHRydWUsIElSZXNvdXJjZS5ERVBUSF9aRVJPKTsKIAogCQlTdHJpbmdCdWZmZXIgcyA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBtZXNzYWdlcy5zaXplKCk7IGkrKykgewotCQkJcy5hcHBlbmQoIlxucHJvYmxlbSBvbiBsaW5lICIgKyAoKElNZXNzYWdlKW1lc3NhZ2VzLmdldChpKSkuZ2V0QXR0cmlidXRlKElNYXJrZXIuTElORV9OVU1CRVIpICsgIjogIiArICgoSU1lc3NhZ2UpbWVzc2FnZXMuZ2V0KGkpKS5nZXRUZXh0KCkpOworCQlmb3IgKGludCBpID0gMDsgaSA8IG1hcmtlcnMubGVuZ3RoOyBpKyspIHsKKwkJCXMuYXBwZW5kKCJcbnByb2JsZW0gb24gbGluZSAiICsgbWFya2Vyc1tpXS5nZXRBdHRyaWJ1dGUoSU1hcmtlci5MSU5FX05VTUJFUikgKyAiOiAiICsgbWFya2Vyc1tpXS5nZXRBdHRyaWJ1dGUoSU1hcmtlci5NRVNTQUdFKSk7CiAJCX0KLQkJYXNzZXJ0RXF1YWxzKCJwcm9ibGVtIG1hcmtlcnMgZm91bmQiICsgcy50b1N0cmluZygpLCAwLCBtZXNzYWdlcy5zaXplKCkpOworCQlhc3NlcnRFcXVhbHMoInByb2JsZW0gbWFya2VycyBmb3VuZCIgKyBzLnRvU3RyaW5nKCksIDAsIG1hcmtlcnMubGVuZ3RoKTsKIAl9CiAKIAlwdWJsaWMgdm9pZCB0ZXN0XzE4MTA1N2EoKSB0aHJvd3MgRXhjZXB0aW9uIHsKQEAgLTM0MiwxOCArMzMzLDE1IEBACiAJCQkvLyBsaW5lL3N0YXJ0LWVuZAogCQkJbWFya2VyVGV4dC5hcHBlbmQoIlxuTCIgKyBtYXJrZXJzW2ldLmdldEF0dHJpYnV0ZShJTWFya2VyLkxJTkVfTlVNQkVSKSArICIvbyIgKyBtYXJrZXJzW2ldLmdldEF0dHJpYnV0ZShJTWFya2VyLkNIQVJfU1RBUlQpICsgIi0iICArIG1hcmtlcnNbaV0uZ2V0QXR0cmlidXRlKElNYXJrZXIuQ0hBUl9FTkQpICsgIjoiICsgbWFya2Vyc1tpXS5nZXRBdHRyaWJ1dGUoSU1hcmtlci5NRVNTQUdFKSk7CiAJCX0KLQkJaW50IG51bWJlck9mU3ludGF4RXJyb3JzID0gMDsKIAkJZm9yIChpbnQgaSA9IDA7IGkgPCBtYXJrZXJzLmxlbmd0aDsgaSsrKSB7CiAJCQlPYmplY3QgbWVzc2FnZSA9IG1hcmtlcnNbaV0uZ2V0QXR0cmlidXRlKElNYXJrZXIuTUVTU0FHRSk7CiAJCQlhc3NlcnROb3ROdWxsKCJNYXJrZXIgbWVzc2FnZSB3YXMgbnVsbCEiLCBtZXNzYWdlKTsKIAkJCWlmIChtZXNzYWdlLnRvU3RyaW5nKCkuc3RhcnRzV2l0aCgiU3ludGF4IGVycm9yIikpIHsKLQkJCQludW1iZXJPZlN5bnRheEVycm9ycysrOwogCQkJCWFzc2VydFRydWUoIlN5bnRheCBlcnJvciByZXBvcnRlZCBiZWZvcmUgbGluZSAyNSIgKyBtYXJrZXJUZXh0LCAoKEludGVnZXIpIG1hcmtlcnNbaV0uZ2V0QXR0cmlidXRlKElNYXJrZXIuTElORV9OVU1CRVIpKS5pbnRWYWx1ZSgpID49IDI1KTsKLS8vCQkJCWFzc2VydFRydWUoIlN5bnRheCBlcnJvciByZXBvcnRlZCBiZWZvcmUgb2Zmc2V0IDM3MSIgKyBtYXJrZXJUZXh0LCAoKEludGVnZXIpIG1hcmtlcnNbaV0uZ2V0QXR0cmlidXRlKElNYXJrZXIuQ0hBUl9TVEFSVCkpLmludFZhbHVlKCkgPj0gMzcwKTsKLS8vCQkJCWFzc2VydFRydWUoIlN5bnRheCBlcnJvciByZXBvcnRlZCBhZnRlciA0NTYiICsgbWFya2VyVGV4dCwgKChJbnRlZ2VyKSBtYXJrZXJzW2ldLmdldEF0dHJpYnV0ZShJTWFya2VyLkNIQVJfU1RBUlQpKS5pbnRWYWx1ZSgpIDwgNDU2KTsKKwkJCQlhc3NlcnRUcnVlKCJTeW50YXggZXJyb3IgcmVwb3J0ZWQgYmVmb3JlIG9mZnNldCAzNzEiICsgbWFya2VyVGV4dCwgKChJbnRlZ2VyKSBtYXJrZXJzW2ldLmdldEF0dHJpYnV0ZShJTWFya2VyLkNIQVJfU1RBUlQpKS5pbnRWYWx1ZSgpID49IDM3MCk7CisJCQkJYXNzZXJ0VHJ1ZSgiU3ludGF4IGVycm9yIHJlcG9ydGVkIGFmdGVyIDQ1NiIgKyBtYXJrZXJUZXh0LCAoKEludGVnZXIpIG1hcmtlcnNbaV0uZ2V0QXR0cmlidXRlKElNYXJrZXIuQ0hBUl9TVEFSVCkpLmludFZhbHVlKCkgPCA0NTYpOwogCQkJfQogCQl9Ci0vLwkJYXNzZXJ0RXF1YWxzKCJ3cm9uZyBudW1iZXIgb2Ygc3ludGF4IGVycm9ycyByZXBvcnRlZFxuIiArIG1hcmtlclRleHQsIDMsIG51bWJlck9mU3ludGF4RXJyb3JzKTsKIAogCQkvLyBjbGVhbiB1cCBpZiB3ZSBnb3QgdG8gdGhlIGVuZAogCQlwcm9qZWN0LmRlbGV0ZSh0cnVlLCB0cnVlLCBudWxsKTsKQEAgLTM3NSwxNDkgKzM2Myw5IEBACiAJCWhlbHBlci5zZXRVUkkobWFpbi5nZXRGdWxsUGF0aCgpLnRvT1NTdHJpbmcoKSk7CiAJCXZhbGlkYXRvci52YWxpZGF0ZShoZWxwZXIsIHJlcG9ydGVyKTsKIAotCQlhc3NlcnRUcnVlKCJVbmV4cGVjdGVkIHByb2JsZW1zIGZvdW5kIiwgcmVwb3J0ZXIuZ2V0TWVzc2FnZXMoKS5zaXplKCkgPT0gMCk7CisJCWFzc2VydFRydWUoIlByb2JsZW0gbWFya2VycyBmb3VuZCIsIHJlcG9ydGVyLmdldE1lc3NhZ2VzKCkuc2l6ZSgpID09IDApOwogCiAJCS8vIGNsZWFuIHVwIGlmIHdlIGdvdCB0byB0aGUgZW5kCiAJCXByb2plY3QuZGVsZXRlKHRydWUsIHRydWUsIG51bGwpOwogCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RfcHJlbHVkZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJU3RyaW5nIHRlc3ROYW1lID0gInRlc3RQcmVsdWRlQW5kQ29kYXMiOwotCQlJUHJvamVjdCBwcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KHRlc3ROYW1lKTsKLQkJc3luY2hyb25pemVkIChjcmVhdGlvbkxvY2spIHsKLQkJCWlmICghcHJvamVjdC5pc0FjY2Vzc2libGUoKSkgewotCQkJCS8vIENyZWF0ZSBuZXcgcHJvamVjdAotCQkJCXByb2plY3QgPSBCdW5kbGVSZXNvdXJjZVV0aWwuY3JlYXRlU2ltcGxlUHJvamVjdCh0ZXN0TmFtZSwgbnVsbCwgbnVsbCk7Ci0JCQkJYXNzZXJ0VHJ1ZShwcm9qZWN0LmV4aXN0cygpKTsKLQkJCQlCdW5kbGVSZXNvdXJjZVV0aWwuY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKCIvdGVzdGZpbGVzLyIgKyB0ZXN0TmFtZSwgIi8iICsgdGVzdE5hbWUpOwotCQkJfQotCQl9Ci0KLQkJSUZpbGUgbWFpbiA9IHByb2plY3QuZ2V0RmlsZSgiL3dlYiBzdHVmZi9wcmVsdWRlLXVzZXIvdGVzdC5qc3AiKTsKLQkJYXNzZXJ0VHJ1ZSgic2FtcGxlIHRlc3QgZmlsZSBub3QgYWNjZXNzaWJsZSIsIG1haW4uaXNBY2Nlc3NpYmxlKCkpOwotCi0JCUlET01Nb2RlbCBtb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQltb2RlbCA9IChJRE9NTW9kZWwpIFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuZ2V0TW9kZWxGb3JFZGl0KG1haW4pOwotCQkJCi0JCQlNb2RlbEhhbmRsZXJGb3JKU1AuZW5zdXJlVHJhbnNsYXRpb25BZGFwdGVyRmFjdG9yeShtb2RlbCk7Ci0JCQkKLQkJCUpTUFRyYW5zbGF0aW9uQWRhcHRlciB0cmFuc2xhdGlvbkFkYXB0ZXIgPSAoSlNQVHJhbnNsYXRpb25BZGFwdGVyKSBtb2RlbC5nZXREb2N1bWVudCgpLmdldEFkYXB0ZXJGb3IoSUpTUFRyYW5zbGF0aW9uLmNsYXNzKTsKLQkJCUlKU1BUcmFuc2xhdGlvbiB0cmFuc2xhdGlvbiA9IHRyYW5zbGF0aW9uQWRhcHRlci5nZXRKU1BUcmFuc2xhdGlvbigpOwotCQkJYXNzZXJ0Tm90TnVsbCgibm8gSmF2YSB0cmFuc2xhdGlvbiBmb3VuZCIsIHRyYW5zbGF0aW9uKTsKLQkJCWFzc2VydFRydWUoInByZWx1ZGUwIGNvbnRlbnRzIG5vdCBpbmNsdWRlZCIsIHRyYW5zbGF0aW9uLmdldEphdmFUZXh0KCkuaW5kZXhPZigiaW50IHByZWx1ZGUwIikgPiAwKTsKLQkJCWFzc2VydFRydWUoInByZWx1ZGUxIGNvbnRlbnRzIG5vdCBpbmNsdWRlZCIsIHRyYW5zbGF0aW9uLmdldEphdmFUZXh0KCkuaW5kZXhPZigiaW50IHByZWx1ZGUxIikgPiAwKTsKLQotCQkJYXNzZXJ0VHJ1ZSgiaW1wb3J0IHN0YXRlbWVudCBub3QgZm91bmQiLCB0cmFuc2xhdGlvbi5nZXRKYXZhVGV4dCgpLmluZGV4T2YoImltcG9ydCBqYXZhLmxhbmcucmVmLlJlZmVyZW5jZSIpID4gMCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RfY29kYXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJU3RyaW5nIHRlc3ROYW1lID0gInRlc3RQcmVsdWRlQW5kQ29kYXMiOwotCQlJUHJvamVjdCBwcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KHRlc3ROYW1lKTsKLQkJc3luY2hyb25pemVkIChjcmVhdGlvbkxvY2spIHsKLQkJCWlmICghcHJvamVjdC5pc0FjY2Vzc2libGUoKSkgewotCQkJCS8vIENyZWF0ZSBuZXcgcHJvamVjdAotCQkJCXByb2plY3QgPSBCdW5kbGVSZXNvdXJjZVV0aWwuY3JlYXRlU2ltcGxlUHJvamVjdCh0ZXN0TmFtZSwgbnVsbCwgbnVsbCk7Ci0JCQkJYXNzZXJ0VHJ1ZShwcm9qZWN0LmV4aXN0cygpKTsKLQkJCQlCdW5kbGVSZXNvdXJjZVV0aWwuY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKCIvdGVzdGZpbGVzLyIgKyB0ZXN0TmFtZSwgIi8iICsgdGVzdE5hbWUpOwotCQkJfQotCQl9Ci0KLQkJSUZpbGUgbWFpbiA9IHByb2plY3QuZ2V0RmlsZSgiL3dlYiBzdHVmZi9jb2RhLXVzZXIvdGVzdC5qc3AiKTsKLQkJYXNzZXJ0VHJ1ZSgic2FtcGxlIHRlc3QgZmlsZSBub3QgYWNjZXNzaWJsZSIsIG1haW4uaXNBY2Nlc3NpYmxlKCkpOwotCi0JCUlET01Nb2RlbCBtb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQltb2RlbCA9IChJRE9NTW9kZWwpIFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuZ2V0TW9kZWxGb3JFZGl0KG1haW4pOwotCQkJCi0JCQlNb2RlbEhhbmRsZXJGb3JKU1AuZW5zdXJlVHJhbnNsYXRpb25BZGFwdGVyRmFjdG9yeShtb2RlbCk7Ci0JCQkKLQkJCUpTUFRyYW5zbGF0aW9uQWRhcHRlciB0cmFuc2xhdGlvbkFkYXB0ZXIgPSAoSlNQVHJhbnNsYXRpb25BZGFwdGVyKSBtb2RlbC5nZXREb2N1bWVudCgpLmdldEFkYXB0ZXJGb3IoSUpTUFRyYW5zbGF0aW9uLmNsYXNzKTsKLQkJCUlKU1BUcmFuc2xhdGlvbiB0cmFuc2xhdGlvbiA9IHRyYW5zbGF0aW9uQWRhcHRlci5nZXRKU1BUcmFuc2xhdGlvbigpOwotCQkJYXNzZXJ0Tm90TnVsbCgibm8gSmF2YSB0cmFuc2xhdGlvbiBmb3VuZCIsIHRyYW5zbGF0aW9uKTsKLQkJCWFzc2VydFRydWUoImNvZGEwIGNvbnRlbnRzIG5vdCBpbmNsdWRlZCIsIHRyYW5zbGF0aW9uLmdldEphdmFUZXh0KCkuaW5kZXhPZigiaW50IGNvZGEwIikgPiAwKTsKLQkJCWFzc2VydFRydWUoImNvZGExIGNvbnRlbnRzIG5vdCBpbmNsdWRlZCIsIHRyYW5zbGF0aW9uLmdldEphdmFUZXh0KCkuaW5kZXhPZigiaW50IGNvZGExIikgPiAwKTsKLQotCQkJYXNzZXJ0VHJ1ZSgiaW1wb3J0IHN0YXRlbWVudCBub3QgZm91bmQiLCB0cmFuc2xhdGlvbi5nZXRKYXZhVGV4dCgpLmluZGV4T2YoImltcG9ydCBqYXZhLmxhbmcucmVmLlJlZmVyZW5jZSIpID4gMCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCX0KLQlwdWJsaWMgdm9pZCB0ZXN0X3ByZWx1ZGVfYW5kX2NvZGEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJU3RyaW5nIHRlc3ROYW1lID0gInRlc3RQcmVsdWRlQW5kQ29kYXMiOwotCQlJUHJvamVjdCBwcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KHRlc3ROYW1lKTsKLQkJc3luY2hyb25pemVkIChjcmVhdGlvbkxvY2spIHsKLQkJCWlmICghcHJvamVjdC5pc0FjY2Vzc2libGUoKSkgewotCQkJCS8vIENyZWF0ZSBuZXcgcHJvamVjdAotCQkJCXByb2plY3QgPSBCdW5kbGVSZXNvdXJjZVV0aWwuY3JlYXRlU2ltcGxlUHJvamVjdCh0ZXN0TmFtZSwgbnVsbCwgbnVsbCk7Ci0JCQkJYXNzZXJ0VHJ1ZShwcm9qZWN0LmV4aXN0cygpKTsKLQkJCQlCdW5kbGVSZXNvdXJjZVV0aWwuY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKCIvdGVzdGZpbGVzLyIgKyB0ZXN0TmFtZSwgIi8iICsgdGVzdE5hbWUpOwotCQkJfQotCQl9Ci0KLQkJSUZpbGUgbWFpbiA9IHByb2plY3QuZ2V0RmlsZSgiL3dlYiBzdHVmZi9ib3RoL3Rlc3QuanNwIik7Ci0JCWFzc2VydFRydWUoInNhbXBsZSB0ZXN0IGZpbGUgbm90IGFjY2Vzc2libGUiLCBtYWluLmlzQWNjZXNzaWJsZSgpKTsKLQotCQlJRE9NTW9kZWwgbW9kZWwgPSBudWxsOwotCQl0cnkgewotCQkJbW9kZWwgPSAoSURPTU1vZGVsKSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmdldE1vZGVsRm9yRWRpdChtYWluKTsKLQkJCQotCQkJTW9kZWxIYW5kbGVyRm9ySlNQLmVuc3VyZVRyYW5zbGF0aW9uQWRhcHRlckZhY3RvcnkobW9kZWwpOwotCQkJCi0JCQlKU1BUcmFuc2xhdGlvbkFkYXB0ZXIgdHJhbnNsYXRpb25BZGFwdGVyID0gKEpTUFRyYW5zbGF0aW9uQWRhcHRlcikgbW9kZWwuZ2V0RG9jdW1lbnQoKS5nZXRBZGFwdGVyRm9yKElKU1BUcmFuc2xhdGlvbi5jbGFzcyk7Ci0JCQlJSlNQVHJhbnNsYXRpb24gdHJhbnNsYXRpb24gPSB0cmFuc2xhdGlvbkFkYXB0ZXIuZ2V0SlNQVHJhbnNsYXRpb24oKTsKLQkJCWFzc2VydE5vdE51bGwoIm5vIEphdmEgdHJhbnNsYXRpb24gZm91bmQiLCB0cmFuc2xhdGlvbik7Ci0JCQlhc3NlcnRUcnVlKCJwcmVsdWRlMCBjb250ZW50cyBub3QgaW5jbHVkZWQiLCB0cmFuc2xhdGlvbi5nZXRKYXZhVGV4dCgpLmluZGV4T2YoImludCBwcmVsdWRlMCIpID4gMCk7Ci0JCQlhc3NlcnRUcnVlKCJwcmVsdWRlMSBjb250ZW50cyBpbmNsdWRlZCIsIHRyYW5zbGF0aW9uLmdldEphdmFUZXh0KCkuaW5kZXhPZigiaW50IHByZWx1ZGUxIikgPCAwKTsKLQkJCWFzc2VydFRydWUoImNvZGEwIGNvbnRlbnRzIG5vdCBpbmNsdWRlZCIsIHRyYW5zbGF0aW9uLmdldEphdmFUZXh0KCkuaW5kZXhPZigiaW50IGNvZGEwIikgPiAwKTsKLQkJCWFzc2VydFRydWUoImNvZGExIGNvbnRlbnRzIGluY2x1ZGVkIiwgdHJhbnNsYXRpb24uZ2V0SmF2YVRleHQoKS5pbmRleE9mKCJpbnQgY29kYTEiKSA8IDApOwotCi0JCQlhc3NlcnRUcnVlKCJpbXBvcnQgc3RhdGVtZW50IG5vdCBmb3VuZCIsIHRyYW5zbGF0aW9uLmdldEphdmFUZXh0KCkuaW5kZXhPZigiaW1wb3J0IGphdmEubGFuZy5yZWYuUmVmZXJlbmNlIikgPiAwKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKQotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFZhcmlhYmxlc0Zyb21JbmNsdWRlZEZyYWdtZW50cygpIHRocm93cyBFeGNlcHRpb24gewotCQlTdHJpbmcgdGVzdE5hbWUgPSAidGVzdFZhcmlhYmxlc0Zyb21JbmNsdWRlZEZyYWdtZW50cyI7Ci0JCUlQcm9qZWN0IHByb2plY3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QodGVzdE5hbWUpOwotCQlzeW5jaHJvbml6ZWQgKGNyZWF0aW9uTG9jaykgewotCQkJaWYgKCFwcm9qZWN0LmlzQWNjZXNzaWJsZSgpKSB7Ci0JCQkJLy8gQ3JlYXRlIG5ldyBwcm9qZWN0Ci0JCQkJcHJvamVjdCA9IEJ1bmRsZVJlc291cmNlVXRpbC5jcmVhdGVTaW1wbGVQcm9qZWN0KHRlc3ROYW1lLCBudWxsLCBudWxsKTsKLQkJCQlhc3NlcnRUcnVlKHByb2plY3QuZXhpc3RzKCkpOwotCQkJCUJ1bmRsZVJlc291cmNlVXRpbC5jb3B5QnVuZGxlRW50cmllc0ludG9Xb3Jrc3BhY2UoIi90ZXN0ZmlsZXMvIiArIHRlc3ROYW1lLCAiLyIgKyB0ZXN0TmFtZSk7Ci0JCQl9Ci0JCX0KLQotCQlJRmlsZSBtYWluID0gcHJvamVjdC5nZXRGaWxlKCIvV2ViQ29udGVudC9tYWluLmpzcCIpOwotCQlhc3NlcnRUcnVlKCJzYW1wbGUgdGVzdCBmaWxlIG5vdCBhY2Nlc3NpYmxlIiwgbWFpbi5pc0FjY2Vzc2libGUoKSk7Ci0KLQkJSURPTU1vZGVsIG1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCW1vZGVsID0gKElET01Nb2RlbCkgU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5nZXRNb2RlbEZvckVkaXQobWFpbik7Ci0JCQkKLQkJCU1vZGVsSGFuZGxlckZvckpTUC5lbnN1cmVUcmFuc2xhdGlvbkFkYXB0ZXJGYWN0b3J5KG1vZGVsKTsKLQkJCQotCQkJSlNQVHJhbnNsYXRpb25BZGFwdGVyIHRyYW5zbGF0aW9uQWRhcHRlciA9IChKU1BUcmFuc2xhdGlvbkFkYXB0ZXIpIG1vZGVsLmdldERvY3VtZW50KCkuZ2V0QWRhcHRlckZvcihJSlNQVHJhbnNsYXRpb24uY2xhc3MpOwotCQkJSUpTUFRyYW5zbGF0aW9uIHRyYW5zbGF0aW9uID0gdHJhbnNsYXRpb25BZGFwdGVyLmdldEpTUFRyYW5zbGF0aW9uKCk7Ci0JCQlhc3NlcnROb3ROdWxsKCJubyBKYXZhIHRyYW5zbGF0aW9uIGZvdW5kIiwgdHJhbnNsYXRpb24pOwotCQkJYXNzZXJ0VHJ1ZSgiU3RyaW5nIHZhcmlhYmxlRnJvbUhlYWRlcjEgbm90IGZvdW5kIiwgdHJhbnNsYXRpb24uZ2V0SmF2YVRleHQoKS5pbmRleE9mKCJTdHJpbmcgdmFyaWFibGVGcm9tSGVhZGVyMSIpID4gMCk7Ci0JCQlhc3NlcnRUcnVlKCJoZWFkZXIxIGNvbnRlbnRzIG5vdCBpbmNsdWRlZCIsIHRyYW5zbGF0aW9uLmdldEphdmFUZXh0KCkuaW5kZXhPZigiU3RyaW5nIHZhcmlhYmxlRnJvbUhlYWRlcjEgPSBcImluaXRpYWxpemVkIGluIGhlYWRlciAxXCI7IikgPiAwKTsKLQkJCWFzc2VydFRydWUoImhlYWRlcjIgY29udGVudHMgbm90IGluY2x1ZGVkIiwgdHJhbnNsYXRpb24uZ2V0SmF2YVRleHQoKS5pbmRleE9mKCJ2YXJpYWJsZUZyb21IZWFkZXIxID0gXCJyZWFzc2lnbmVkIGluIGhlYWRlciAyXCI7IikgPiAwKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKQotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0JfQogfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvdmFsaWRhdGlvbi9KU1BBY3Rpb25WYWxpZGF0b3JUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy92YWxpZGF0aW9uL0pTUEFjdGlvblZhbGlkYXRvclRlc3QuamF2YQppbmRleCBlMjJjNTA3Li45NTIwNjQyIDEwMDY0NAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy92YWxpZGF0aW9uL0pTUEFjdGlvblZhbGlkYXRvclRlc3QuamF2YQorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy92YWxpZGF0aW9uL0pTUEFjdGlvblZhbGlkYXRvclRlc3QuamF2YQpAQCAtMTI2LDE1ICsxMjYsOCBAQAogCiAJCWhlbHBlci5zZXRVUkkoZmlsZVBhdGgpOwogCQl2YWxpZGF0b3IudmFsaWRhdGUoaGVscGVyLCByZXBvcnRlcik7Ci0JCQotCQlTdHJpbmdCdWZmZXIgZXJyb3IgPSBuZXcgU3RyaW5nQnVmZmVyKCJqc3AgYWN0aW9uIHZhbGlkYXRvciBmb3VuZCBlcnJvcnMgd2hlbiBpdCBzaG91bGQgbm90IGhhdmUiKTsKLQkJTGlzdCBtZXNzYWdlcyA9IHJlcG9ydGVyLmdldE1lc3NhZ2VzKCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgbWVzc2FnZXMuc2l6ZSgpOyBpKyspIHsKLQkJCWVycm9yLmFwcGVuZCgnXG4nKTsKLQkJCWVycm9yLmFwcGVuZCgoKElNZXNzYWdlKSBtZXNzYWdlcy5nZXQoaSkpLmdldFRleHQoKSk7Ci0JCX0KIAotCQlhc3NlcnRUcnVlKGVycm9yLnRvU3RyaW5nKCksIHJlcG9ydGVyLmdldE1lc3NhZ2VzKCkuaXNFbXB0eSgpKTsKKwkJYXNzZXJ0VHJ1ZSgianNwIGFjdGlvbiB2YWxpZGF0b3IgZm91bmQgZXJyb3JzIHdoZW4gaXQgc2hvdWxkIG5vdCBoYXZlIiwgcmVwb3J0ZXIuZ2V0TWVzc2FnZXMoKS5pc0VtcHR5KCkpOwogCX0KIAogCS8qKgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvdmFsaWRhdGlvbi9KU1BCYXRjaFZhbGlkYXRvclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL3ZhbGlkYXRpb24vSlNQQmF0Y2hWYWxpZGF0b3JUZXN0LmphdmEKaW5kZXggYzRlMDk5OC4uN2Y2NTRlYyAxMDA2NDQKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvdmFsaWRhdGlvbi9KU1BCYXRjaFZhbGlkYXRvclRlc3QuamF2YQorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy92YWxpZGF0aW9uL0pTUEJhdGNoVmFsaWRhdG9yVGVzdC5qYXZhCkBAIC0xMDUsNyArMTA1LDcgQEAKIAkJaGVscGVyLnNldFVSSXMobmV3IFN0cmluZ1tde2ZpbGVQYXRoMSwgZmlsZVBhdGgyfSk7CiAKIAkJdmFsaWRhdG9yLnZhbGlkYXRlKGhlbHBlciwgcmVwb3J0ZXIpOwotCQlhc3NlcnRUcnVlKCJleHBlY3RlZCBqc3AgZXJyb3JzIHdlcmUgbm90IGZvdW5kIGluIGJvdGggZmlsZXM6ICIgKyByZXBvcnRlci5nZXRNZXNzYWdlcygpLnNpemUoKSwgcmVwb3J0ZXIuZ2V0TWVzc2FnZXMoKS5zaXplKCkgPj0gMik7CisJCWFzc2VydFRydWUoImpzcCBlcnJvcnMgd2VyZSBub3QgZm91bmQgaW4gYm90aCBmaWxlcyIsIHJlcG9ydGVyLmdldE1lc3NhZ2VzKCkuc2l6ZSgpID09IDIpOwogCX0KIAogCXB1YmxpYyB2b2lkIHRlc3RGcmFnbWVudFZhbGlkYXRpb25QcmVmZXJlbmNlT25Qcm9qZWN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy92YWxpZGF0aW9uL0pTUERpcmVjdGl2ZVZhbGlkYXRvclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL3ZhbGlkYXRpb24vSlNQRGlyZWN0aXZlVmFsaWRhdG9yVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNjBmNDMyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL3ZhbGlkYXRpb24vSlNQRGlyZWN0aXZlVmFsaWRhdG9yVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLnZhbGlkYXRpb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLkpTUENvcmVNZXNzYWdlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5KU1BEaXJlY3RpdmVWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLnRhZ2xpYmluZGV4LkJ1bmRsZVJlc291cmNlVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnV0aWwuTkxTOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLmludGVybmFsLnByb3Zpc2lvbmFsLmNvcmUuSU1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwucHJvdmlzaW9uYWwuY29yZS5JUmVwb3J0ZXI7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLXB1YmxpYyBjbGFzcyBKU1BEaXJlY3RpdmVWYWxpZGF0b3JUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCQotCXByaXZhdGUgU3RyaW5nIHd0cF9hdXRvdGVzdF9ub25pbnRlcmFjdGl2ZSA9IG51bGw7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBST0pFQ1RfTkFNRSA9ICJ0ZXN0dmFsaWRhdGVqc3BkaXJlY3RpdmVzIjsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRlJBR01FTlRfTkFNRSA9ICJmcmFnbWVudFRoYXREb2VzbnRFeGlzdC5qc3BmIjsKLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnNldFVwKCk7Ci0JCVN0cmluZyBub25pbnRlcmFjdGl2ZSA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgid3RwLmF1dG90ZXN0Lm5vbmludGVyYWN0aXZlIik7Ci0JCWlmIChub25pbnRlcmFjdGl2ZSAhPSBudWxsKQotCQkJd3RwX2F1dG90ZXN0X25vbmludGVyYWN0aXZlID0gbm9uaW50ZXJhY3RpdmU7Ci0JCVN5c3RlbS5zZXRQcm9wZXJ0eSgid3RwLmF1dG90ZXN0Lm5vbmludGVyYWN0aXZlIiwgInRydWUiKTsKLQotCQlpZiAoIVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChQUk9KRUNUX05BTUUpLmV4aXN0cygpKSB7Ci0JCQlCdW5kbGVSZXNvdXJjZVV0aWwuY3JlYXRlU2ltcGxlUHJvamVjdChQUk9KRUNUX05BTUUsIG51bGwsIG5ldyBTdHJpbmdbXXtKYXZhQ29yZS5OQVRVUkVfSUR9KTsKLQkJCUJ1bmRsZVJlc291cmNlVXRpbC5jb3B5QnVuZGxlRW50cmllc0ludG9Xb3Jrc3BhY2UoIi90ZXN0ZmlsZXMvIiArIFBST0pFQ1RfTkFNRSwgIi8iICsgUFJPSkVDVF9OQU1FKTsKLQkJfQotCQlhc3NlcnRUcnVlKCJwcm9qZWN0IGNvdWxkIG5vdCBiZSBjcmVhdGVkIiwgUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KFBST0pFQ1RfTkFNRSkuZXhpc3RzKCkpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnRlYXJEb3duKCk7Ci0JCWlmICh3dHBfYXV0b3Rlc3Rfbm9uaW50ZXJhY3RpdmUgIT0gbnVsbCkKLQkJCVN5c3RlbS5zZXRQcm9wZXJ0eSgid3RwLmF1dG90ZXN0Lm5vbmludGVyYWN0aXZlIiwgd3RwX2F1dG90ZXN0X25vbmludGVyYWN0aXZlKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEJ1ZzI2NTcxMEV4cHJlc3Npb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJSlNQRGlyZWN0aXZlVmFsaWRhdG9yIHZhbGlkYXRvciA9IG5ldyBKU1BEaXJlY3RpdmVWYWxpZGF0b3IoKTsKLQkJSVJlcG9ydGVyIHJlcG9ydGVyID0gbmV3IFJlcG9ydGVyRm9yVGVzdCgpOwotCQlWYWxpZGF0aW9uQ29udGV4dEZvclRlc3QgaGVscGVyID0gbmV3IFZhbGlkYXRpb25Db250ZXh0Rm9yVGVzdCgpOwotCQlTdHJpbmcgZmlsZVBhdGggPSAiLyIgKyBQUk9KRUNUX05BTUUgKyAiL1dlYkNvbnRlbnQvYnVnMjY1NzEwZXhwcmVzc2lvbi5qc3AiOwotCQlhc3NlcnRUcnVlKCJ1bmFibGUgdG8gZmluZCBmaWxlOiAiICsgZmlsZVBhdGgsIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShuZXcgUGF0aChmaWxlUGF0aCkpLmV4aXN0cygpKTsKLQkJaGVscGVyLnNldFVSSShmaWxlUGF0aCk7Ci0JCXZhbGlkYXRvci52YWxpZGF0ZShoZWxwZXIsIHJlcG9ydGVyKTsKLQkJCi0JCWlmIChyZXBvcnRlci5nZXRNZXNzYWdlcygpLnNpemUoKSA+IDApIHsKLQkJCUl0ZXJhdG9yIGl0ID0gcmVwb3J0ZXIuZ2V0TWVzc2FnZXMoKS5pdGVyYXRvcigpOwotCQkJd2hpbGUgKGl0Lmhhc05leHQoKSkgewotCQkJCUlNZXNzYWdlIG1lc3NhZ2UgPSAoSU1lc3NhZ2UpIGl0Lm5leHQoKTsKLQkJCQlpZiAobWVzc2FnZS5nZXRMaW5lTnVtYmVyKCkgPT0gMTQgJiYgbWVzc2FnZS5nZXRTZXZlcml0eSgpID09IElNZXNzYWdlLkhJR0hfU0VWRVJJVFkpIHsKLQkJCQkJZmFpbCgiSlNQIERpcmVjdGl2ZSBWYWxpZGF0b3IgZmxhZ2dlZCBhIEpTUCBleHByZXNzaW9uIGluIHRoZSBpbXBvcnQgZGlyZWN0aXZlIik7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RCdWcyNjU3MTBFbCgpIHRocm93cyBFeGNlcHRpb24gewotCQlKU1BEaXJlY3RpdmVWYWxpZGF0b3IgdmFsaWRhdG9yID0gbmV3IEpTUERpcmVjdGl2ZVZhbGlkYXRvcigpOwotCQlJUmVwb3J0ZXIgcmVwb3J0ZXIgPSBuZXcgUmVwb3J0ZXJGb3JUZXN0KCk7Ci0JCVZhbGlkYXRpb25Db250ZXh0Rm9yVGVzdCBoZWxwZXIgPSBuZXcgVmFsaWRhdGlvbkNvbnRleHRGb3JUZXN0KCk7Ci0JCVN0cmluZyBmaWxlUGF0aCA9ICIvIiArIFBST0pFQ1RfTkFNRSArICIvV2ViQ29udGVudC9idWcyNjU3MTBlbC5qc3AiOwotCQlhc3NlcnRUcnVlKCJ1bmFibGUgdG8gZmluZCBmaWxlOiAiICsgZmlsZVBhdGgsIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShuZXcgUGF0aChmaWxlUGF0aCkpLmV4aXN0cygpKTsKLQkJaGVscGVyLnNldFVSSShmaWxlUGF0aCk7Ci0JCXZhbGlkYXRvci52YWxpZGF0ZShoZWxwZXIsIHJlcG9ydGVyKTsKLQkJCi0JCWlmIChyZXBvcnRlci5nZXRNZXNzYWdlcygpLnNpemUoKSA+IDApIHsKLQkJCUl0ZXJhdG9yIGl0ID0gcmVwb3J0ZXIuZ2V0TWVzc2FnZXMoKS5pdGVyYXRvcigpOwotCQkJd2hpbGUgKGl0Lmhhc05leHQoKSkgewotCQkJCUlNZXNzYWdlIG1lc3NhZ2UgPSAoSU1lc3NhZ2UpIGl0Lm5leHQoKTsKLQkJCQlpZiAobWVzc2FnZS5nZXRMaW5lTnVtYmVyKCkgPT0gMTEgJiYgbWVzc2FnZS5nZXRTZXZlcml0eSgpID09IElNZXNzYWdlLkhJR0hfU0VWRVJJVFkpIHsKLQkJCQkJZmFpbCgiSlNQIERpcmVjdGl2ZSBWYWxpZGF0b3IgZmxhZ2dlZCBKU1AgRUwgaW4gdGhlIGltcG9ydCBkaXJlY3RpdmUiKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEluY2x1ZGVEaXJlY3RpdmUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJSlNQRGlyZWN0aXZlVmFsaWRhdG9yIHZhbGlkYXRvciA9IG5ldyBKU1BEaXJlY3RpdmVWYWxpZGF0b3IoKTsKLQkJSVJlcG9ydGVyIHJlcG9ydGVyID0gbmV3IFJlcG9ydGVyRm9yVGVzdCgpOwotCQlWYWxpZGF0aW9uQ29udGV4dEZvclRlc3QgaGVscGVyID0gbmV3IFZhbGlkYXRpb25Db250ZXh0Rm9yVGVzdCgpOwotCQlTdHJpbmcgZmlsZVBhdGggPSAiLyIgKyBQUk9KRUNUX05BTUUgKyAiL1dlYkNvbnRlbnQvdGVzdGluY2x1ZGUuanNwIjsKLQkJYXNzZXJ0VHJ1ZSgidW5hYmxlIHRvIGZpbmQgZmlsZTogIiArIGZpbGVQYXRoLCBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUobmV3IFBhdGgoZmlsZVBhdGgpKS5leGlzdHMoKSk7Ci0JCWhlbHBlci5zZXRVUkkoZmlsZVBhdGgpOwotCQl2YWxpZGF0b3IudmFsaWRhdGUoaGVscGVyLCByZXBvcnRlcik7Ci0JCQotCQlib29sZWFuIGZvdW5kTWlzc2luZ0luY2x1ZGUgPSBmYWxzZTsKLQkJYm9vbGVhbiBmb3VuZEluY2x1ZGVXaXRoRXJyb3IgPSBmYWxzZTsKLQkJaWYgKHJlcG9ydGVyLmdldE1lc3NhZ2VzKCkuc2l6ZSgpID4gMCkgewotCQkJSXRlcmF0b3IgaXQgPSByZXBvcnRlci5nZXRNZXNzYWdlcygpLml0ZXJhdG9yKCk7Ci0JCQlib29sZWFuIGZvdW5kRXJyb3IgPSBmYWxzZTsKLQkJCXdoaWxlIChpdC5oYXNOZXh0KCkgJiYgIWZvdW5kRXJyb3IpIHsKLQkJCQlJTWVzc2FnZSBtZXNzYWdlID0gKElNZXNzYWdlKSBpdC5uZXh0KCk7Ci0JCQkJaWYgKG1lc3NhZ2UuZ2V0TGluZU51bWJlcigpID09IDExKQotCQkJCQlmb3VuZEluY2x1ZGVXaXRoRXJyb3IgPSB0cnVlOwotCQkJCWVsc2UgaWYgKG1lc3NhZ2UuZ2V0TGluZU51bWJlcigpID09IDEyKSB7Ci0JCQkJCVN0cmluZyBleHBlY3RlZE1zZyA9IE5MUy5iaW5kKEpTUENvcmVNZXNzYWdlcy5KU1BEaXJlY3RpdmVWYWxpZGF0b3JfNCwgbmV3IFN0cmluZ1tdIHsgRlJBR01FTlRfTkFNRSwgIi8iICsgUFJPSkVDVF9OQU1FICsgIi9XZWJDb250ZW50LyIgKyBGUkFHTUVOVF9OQU1FIH0pOwotCQkJCQlpZiAoIWV4cGVjdGVkTXNnLmVxdWFscyhtZXNzYWdlLmdldFRleHQoKSkpCi0JCQkJCQlmYWlsKCJFcnJvciBmb3VuZCBvbiBsaW5lIDEyLCBidXQgd2FzIG5vdCBhIG1pc3NpbmcgZnJhZ21lbnQgZXJyb3IuIik7Ci0JCQkJCWZvdW5kTWlzc2luZ0luY2x1ZGUgPSB0cnVlOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJCi0JCWFzc2VydEZhbHNlKCJKU1AgRGlyZWN0aXZlIFZhbGlkYXRvciByZXBvcnRlZCBhbiBlcnJvciBmb3IgYSBmcmFnbWVudCB0aGF0IHNob3VsZCBiZSBsb2NhdGFibGUuIiwgZm91bmRJbmNsdWRlV2l0aEVycm9yKTsKLQkJYXNzZXJ0VHJ1ZSgiSlNQIERpcmVjdGl2ZSBWYWxpZGF0b3IgZGlkIG5vdCByZXBvcnQgdGhlIG1pc3NpbmcgZnJhZ21lbnQuIiwgZm91bmRNaXNzaW5nSW5jbHVkZSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMjY1MzgwL3Rlc3QyNjUzODAuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMjY1MzgwL3Rlc3QyNjUzODAuanNwCmluZGV4IGQ5Yjc1NGMuLjhlOTcxZTcgMTAwNjQ0Ci0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzI2NTM4MC90ZXN0MjY1MzgwLmpzcAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18yNjUzODAvdGVzdDI2NTM4MC5qc3AKQEAgLTEsMTMgKzEsMTMgQEAKLTwlQCBwYWdlIGxhbmd1YWdlPSJqYXZhIiBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiDQotICAgIHBhZ2VFbmNvZGluZz0iSVNPLTg4NTktMSIlPg0KLTwlQCB0YWdsaWIgdXJpPSJodHRwOi8vamF2YS5zdW4uY29tL2pzcC9qc3RsL2NvcmUiIHByZWZpeD0iYyIgJT4NCi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4NCi08aHRtbD4NCi08aGVhZD4NCi08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4NCi08dGl0bGU+SW5zZXJ0IHRpdGxlIGhlcmU8L3RpdGxlPg0KLTwvaGVhZD4NCi08Ym9keT4NCi0NCi08L2JvZHk+DQorPCVAIHBhZ2UgbGFuZ3VhZ2U9ImphdmEiIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIKKyAgICBwYWdlRW5jb2Rpbmc9IklTTy04ODU5LTEiJT4KKzwlQCB0YWdsaWIgdXJpPSJodHRwOi8vamF2YS5zdW4uY29tL2pzcC9qc3RsL2NvcmUiIHByZWZpeD0iYyIgJT4KKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgorPHRpdGxlPkluc2VydCB0aXRsZSBoZXJlPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorCis8L2JvZHk+CiA8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0UHJlbHVkZUFuZENvZGFzLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RQcmVsdWRlQW5kQ29kYXMvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGQ5MTU0Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RQcmVsdWRlQW5kQ29kYXMvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0id2ViIHN0dWZmL1dFQi1JTkYvY2xhc3NlcyIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RQcmVsdWRlQW5kQ29kYXMvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RQcmVsdWRlQW5kQ29kYXMvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkNjVjOWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0UHJlbHVkZUFuZENvZGFzLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+dGVzdFByZWx1ZGVBbmRDb2RhczwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RQcmVsdWRlQW5kQ29kYXMvd2ViIHN0dWZmL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0UHJlbHVkZUFuZENvZGFzL3dlYiBzdHVmZi9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjU0MjcyZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RQcmVsdWRlQW5kQ29kYXMvd2ViIHN0dWZmL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUNsYXNzLVBhdGg6IAotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RQcmVsdWRlQW5kQ29kYXMvd2ViIHN0dWZmL1dFQi1JTkYvd2ViLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdFByZWx1ZGVBbmRDb2Rhcy93ZWIgc3R1ZmYvV0VCLUlORi93ZWIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZTU3MzgwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdFByZWx1ZGVBbmRDb2Rhcy93ZWIgc3R1ZmYvV0VCLUlORi93ZWIueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3ZWItYXBwIGlkPSJXZWJBcHBfSUQiIHZlcnNpb249IjIuNCIgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL3dlYi1hcHBfMl80LnhzZCI+Ci0JPGRpc3BsYXktbmFtZT50ZXN0UHJlbHVkZUFuZENvZGFzPC9kaXNwbGF5LW5hbWU+Ci0JPHdlbGNvbWUtZmlsZS1saXN0PgotCQk8d2VsY29tZS1maWxlPmluZGV4Lmh0bWw8L3dlbGNvbWUtZmlsZT4KLQkJPHdlbGNvbWUtZmlsZT5pbmRleC5odG08L3dlbGNvbWUtZmlsZT4KLQkJPHdlbGNvbWUtZmlsZT5pbmRleC5qc3A8L3dlbGNvbWUtZmlsZT4KLQkJPHdlbGNvbWUtZmlsZT5kZWZhdWx0Lmh0bWw8L3dlbGNvbWUtZmlsZT4KLQkJPHdlbGNvbWUtZmlsZT5kZWZhdWx0Lmh0bTwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmRlZmF1bHQuanNwPC93ZWxjb21lLWZpbGU+Ci0JPC93ZWxjb21lLWZpbGUtbGlzdD4KLQk8anNwLWNvbmZpZz4KLQkJPGpzcC1wcm9wZXJ0eS1ncm91cD4KLQkJPHVybC1wYXR0ZXJuPi9wcmVsdWRlLXVzZXIvKi5qc3A8L3VybC1wYXR0ZXJuPgotCQk8aW5jbHVkZS1wcmVsdWRlPi9jb21tb24vcHJlbHVkZTAuanNwZjwvaW5jbHVkZS1wcmVsdWRlPgotCQk8aW5jbHVkZS1wcmVsdWRlPi9jb21tb24vcHJlbHVkZTEuanNwZjwvaW5jbHVkZS1wcmVsdWRlPgotCQk8L2pzcC1wcm9wZXJ0eS1ncm91cD4KLQotCQk8anNwLXByb3BlcnR5LWdyb3VwPgotCQk8dXJsLXBhdHRlcm4+L2NvZGEtdXNlci8qLmpzcDwvdXJsLXBhdHRlcm4+Ci0JCTxpbmNsdWRlLWNvZGE+L2NvbW1vbi9jb2RhMC5qc3BmPC9pbmNsdWRlLWNvZGE+Ci0JCTxpbmNsdWRlLWNvZGE+L2NvbW1vbi9jb2RhMS5qc3BmPC9pbmNsdWRlLWNvZGE+Ci0JCTwvanNwLXByb3BlcnR5LWdyb3VwPgotCi0JCTxqc3AtcHJvcGVydHktZ3JvdXA+Ci0JCTx1cmwtcGF0dGVybj4vYm90aC8qLmpzcDwvdXJsLXBhdHRlcm4+Ci0JCTxpbmNsdWRlLXByZWx1ZGU+L2NvbW1vbi9wcmVsdWRlMC5qc3BmPC9pbmNsdWRlLXByZWx1ZGU+Ci0JCTxpbmNsdWRlLWNvZGE+L2NvbW1vbi9jb2RhMC5qc3BmPC9pbmNsdWRlLWNvZGE+Ci0JCTwvanNwLXByb3BlcnR5LWdyb3VwPgotCi0JCTxqc3AtcHJvcGVydHktZ3JvdXA+Ci0JCTxkZXNjcmlwdGlvbj5KU1AgY29uZmlndXJhdGlvbiBvZiBhbGwgdGhlIEpTUCdzIDwvZGVzY3JpcHRpb24+Ci0JCTx1cmwtcGF0dGVybj4qLmpzcDwvdXJsLXBhdHRlcm4+Ci0JCTxpbmNsdWRlLXByZWx1ZGU+L3Rlc3RGcmFnbWVudC5qc3BmPC9pbmNsdWRlLXByZWx1ZGU+Ci0JCTwvanNwLXByb3BlcnR5LWdyb3VwPgotCTwvanNwLWNvbmZpZz4KLTwvd2ViLWFwcD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdFByZWx1ZGVBbmRDb2Rhcy93ZWIgc3R1ZmYvYm90aC90ZXN0LmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdFByZWx1ZGVBbmRDb2Rhcy93ZWIgc3R1ZmYvYm90aC90ZXN0LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTRiNjk1Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RQcmVsdWRlQW5kQ29kYXMvd2ViIHN0dWZmL2JvdGgvdGVzdC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi08JUAgcGFnZSBsYW5ndWFnZT0iamF2YSIgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIiBwYWdlRW5jb2Rpbmc9IklTTy04ODU5LTEiJT4KLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPHRpdGxlPkluc2VydCB0aXRsZSBoZXJlPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotCi08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RQcmVsdWRlQW5kQ29kYXMvd2ViIHN0dWZmL2NvZGEtdXNlci90ZXN0LmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdFByZWx1ZGVBbmRDb2Rhcy93ZWIgc3R1ZmYvY29kYS11c2VyL3Rlc3QuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNGI2OTVmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdFByZWx1ZGVBbmRDb2Rhcy93ZWIgc3R1ZmYvY29kYS11c2VyL3Rlc3QuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotPCVAIHBhZ2UgbGFuZ3VhZ2U9ImphdmEiIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIgcGFnZUVuY29kaW5nPSJJU08tODg1OS0xIiU+Ci08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTx0aXRsZT5JbnNlcnQgdGl0bGUgaGVyZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLQotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0UHJlbHVkZUFuZENvZGFzL3dlYiBzdHVmZi9jb21tb24vY29kYTAuanNwZiBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdFByZWx1ZGVBbmRDb2Rhcy93ZWIgc3R1ZmYvY29tbW9uL2NvZGEwLmpzcGYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlOTgzZWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0UHJlbHVkZUFuZENvZGFzL3dlYiBzdHVmZi9jb21tb24vY29kYTAuanNwZgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLTwlIGludCBjb2RhMCA9IDA7ICU+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RQcmVsdWRlQW5kQ29kYXMvd2ViIHN0dWZmL2NvbW1vbi9jb2RhMS5qc3BmIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0UHJlbHVkZUFuZENvZGFzL3dlYiBzdHVmZi9jb21tb24vY29kYTEuanNwZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmFjMWQ0Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RQcmVsdWRlQW5kQ29kYXMvd2ViIHN0dWZmL2NvbW1vbi9jb2RhMS5qc3BmCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotPCUgaW50IGNvZGExID0gMDsgJT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdFByZWx1ZGVBbmRDb2Rhcy93ZWIgc3R1ZmYvY29tbW9uL3ByZWx1ZGUwLmpzcGYgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RQcmVsdWRlQW5kQ29kYXMvd2ViIHN0dWZmL2NvbW1vbi9wcmVsdWRlMC5qc3BmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZDFhMTBhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdFByZWx1ZGVBbmRDb2Rhcy93ZWIgc3R1ZmYvY29tbW9uL3ByZWx1ZGUwLmpzcGYKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi08JSBpbnQgcHJlbHVkZTAgPSAwOyAlPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0UHJlbHVkZUFuZENvZGFzL3dlYiBzdHVmZi9jb21tb24vcHJlbHVkZTEuanNwZiBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdFByZWx1ZGVBbmRDb2Rhcy93ZWIgc3R1ZmYvY29tbW9uL3ByZWx1ZGUxLmpzcGYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1YmUxNTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0UHJlbHVkZUFuZENvZGFzL3dlYiBzdHVmZi9jb21tb24vcHJlbHVkZTEuanNwZgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLTwlIGludCBwcmVsdWRlMSA9IDE7ICU+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RQcmVsdWRlQW5kQ29kYXMvd2ViIHN0dWZmL3ByZWx1ZGUtdXNlci90ZXN0LmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdFByZWx1ZGVBbmRDb2Rhcy93ZWIgc3R1ZmYvcHJlbHVkZS11c2VyL3Rlc3QuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNGI2OTVmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdFByZWx1ZGVBbmRDb2Rhcy93ZWIgc3R1ZmYvcHJlbHVkZS11c2VyL3Rlc3QuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotPCVAIHBhZ2UgbGFuZ3VhZ2U9ImphdmEiIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIgcGFnZUVuY29kaW5nPSJJU08tODg1OS0xIiU+Ci08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTx0aXRsZT5JbnNlcnQgdGl0bGUgaGVyZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLQotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0UHJlbHVkZUFuZENvZGFzL3dlYiBzdHVmZi90ZXN0LmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdFByZWx1ZGVBbmRDb2Rhcy93ZWIgc3R1ZmYvdGVzdC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0YjY5NWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0UHJlbHVkZUFuZENvZGFzL3dlYiBzdHVmZi90ZXN0LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTwlQCBwYWdlIGxhbmd1YWdlPSJqYXZhIiBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiIHBhZ2VFbmNvZGluZz0iSVNPLTg4NTktMSIlPgotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08dGl0bGU+SW5zZXJ0IHRpdGxlIGhlcmU8L3RpdGxlPgotPC9oZWFkPgotPGJvZHk+Ci0KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdFByZWx1ZGVBbmRDb2Rhcy93ZWIgc3R1ZmYvdGVzdEZyYWdtZW50LmpzcGYgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RQcmVsdWRlQW5kQ29kYXMvd2ViIHN0dWZmL3Rlc3RGcmFnbWVudC5qc3BmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MDlhZjA5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdFByZWx1ZGVBbmRDb2Rhcy93ZWIgc3R1ZmYvdGVzdEZyYWdtZW50LmpzcGYKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi08JUBwYWdlIGltcG9ydD0iamF2YS5sYW5nLnJlZi5SZWZlcmVuY2UiICU+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0VmFyaWFibGVzRnJvbUluY2x1ZGVkRnJhZ21lbnRzLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RWYXJpYWJsZXNGcm9tSW5jbHVkZWRGcmFnbWVudHMvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmQ5ZTQyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RWYXJpYWJsZXNGcm9tSW5jbHVkZWRGcmFnbWVudHMvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdFZhcmlhYmxlc0Zyb21JbmNsdWRlZEZyYWdtZW50cy8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdFZhcmlhYmxlc0Zyb21JbmNsdWRlZEZyYWdtZW50cy8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWFjYzcxNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RWYXJpYWJsZXNGcm9tSW5jbHVkZWRGcmFnbWVudHMvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT50ZXN0VmFyaWFibGVzRnJvbUluY2x1ZGVkRnJhZ21lbnRzPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdFZhcmlhYmxlc0Zyb21JbmNsdWRlZEZyYWdtZW50cy9XZWJDb250ZW50L21haW4uanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0VmFyaWFibGVzRnJvbUluY2x1ZGVkRnJhZ21lbnRzL1dlYkNvbnRlbnQvbWFpbi5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkMDQ1ZDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0VmFyaWFibGVzRnJvbUluY2x1ZGVkRnJhZ21lbnRzL1dlYkNvbnRlbnQvbWFpbi5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08IWRvY3R5cGUgaHRtbCBwdWJsaWMgIi0vL3czYy8vZHRkIGh0bWwgMy4yLy9lbiI+DQotDQotPCUNCi1TdHJpbmcgdmFyaWFibGVGcm9tTWFpbkpTUCA9ICJpbml0aWFsaXplZCBpbiBtYWluIjsNCi0lPg0KLQ0KLTwlQCBpbmNsdWRlIGZpbGU9InRlc3RfaGVhZGVyMS5qc3BmIiAlPg0KLQ0KLTwlDQotdmFyaWFibGVGcm9tTWFpbkpTUCA9ICJyZWFzc2lnbmVkIGluIG1haW4iOw0KLXZhcmlhYmxlRnJvbUhlYWRlcjEgPSAicmVhc3NpZ25lZCBpbiBtYWluIjsNCi0lPg0KLVZhbHVlIG9mIHZhcmlhYmxlRnJvbU1haW5KU1A6ICI8JT12YXJpYWJsZUZyb21NYWluSlNQJT4iDQotPGJyPg0KLVZhbHVlIG9mIHZhcmlhYmxlRnJvbUhlYWRlcjE6ICI8JT12YXJpYWJsZUZyb21IZWFkZXIxJT4iDQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0VmFyaWFibGVzRnJvbUluY2x1ZGVkRnJhZ21lbnRzL1dlYkNvbnRlbnQvdGVzdF9oZWFkZXIxLmpzcGYgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RWYXJpYWJsZXNGcm9tSW5jbHVkZWRGcmFnbWVudHMvV2ViQ29udGVudC90ZXN0X2hlYWRlcjEuanNwZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODQ3NTQ1NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RWYXJpYWJsZXNGcm9tSW5jbHVkZWRGcmFnbWVudHMvV2ViQ29udGVudC90ZXN0X2hlYWRlcjEuanNwZgorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPCUNCi1TdHJpbmcgdmFyaWFibGVGcm9tSGVhZGVyMSA9ICJpbml0aWFsaXplZCBpbiBoZWFkZXIgMSI7DQotJT4NCi08JUAgaW5jbHVkZSBmaWxlPSJ0ZXN0X2hlYWRlcjIuanNwZiIgJT4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RWYXJpYWJsZXNGcm9tSW5jbHVkZWRGcmFnbWVudHMvV2ViQ29udGVudC90ZXN0X2hlYWRlcjIuanNwZiBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdFZhcmlhYmxlc0Zyb21JbmNsdWRlZEZyYWdtZW50cy9XZWJDb250ZW50L3Rlc3RfaGVhZGVyMi5qc3BmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ODA3NGJiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdFZhcmlhYmxlc0Zyb21JbmNsdWRlZEZyYWdtZW50cy9XZWJDb250ZW50L3Rlc3RfaGVhZGVyMi5qc3BmCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08JQ0KLXZhcmlhYmxlRnJvbU1haW5KU1AgPSAicmVhc3NpZ25lZCBpbiBoZWFkZXIgMiI7DQotdmFyaWFibGVGcm9tSGVhZGVyMSA9ICJyZWFzc2lnbmVkIGluIGhlYWRlciAyIjsNCi0lPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdHZhbGlkYXRlanNwZGlyZWN0aXZlcy8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdHZhbGlkYXRlanNwZGlyZWN0aXZlcy8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWYyMDc1YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3R2YWxpZGF0ZWpzcGRpcmVjdGl2ZXMvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT50ZXN0dmFsaWRhdGVqc3BhY3Rpb25zPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24udmFsaWRhdGlvbmJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdHZhbGlkYXRlanNwZGlyZWN0aXZlcy9XZWJDb250ZW50L01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0dmFsaWRhdGVqc3BkaXJlY3RpdmVzL1dlYkNvbnRlbnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1NDI3MmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0dmFsaWRhdGVqc3BkaXJlY3RpdmVzL1dlYkNvbnRlbnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQ2xhc3MtUGF0aDogCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdHZhbGlkYXRlanNwZGlyZWN0aXZlcy9XZWJDb250ZW50L1dFQi1JTkYvd2ViLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdHZhbGlkYXRlanNwZGlyZWN0aXZlcy9XZWJDb250ZW50L1dFQi1JTkYvd2ViLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjJlYmNjOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3R2YWxpZGF0ZWpzcGRpcmVjdGl2ZXMvV2ViQ29udGVudC9XRUItSU5GL3dlYi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdlYi1hcHAgaWQ9IldlYkFwcF9JRCIgdmVyc2lvbj0iMi40IiB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvd2ViLWFwcF8yXzQueHNkIj4KLQk8ZGlzcGxheS1uYW1lPnRlc3R2YWxpZGF0ZWpzcGFjdGlvbnM8L2Rpc3BsYXktbmFtZT4KLQk8d2VsY29tZS1maWxlLWxpc3Q+Ci0JCTx3ZWxjb21lLWZpbGU+aW5kZXguaHRtbDwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmluZGV4Lmh0bTwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmluZGV4LmpzcDwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmRlZmF1bHQuaHRtbDwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmRlZmF1bHQuaHRtPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+ZGVmYXVsdC5qc3A8L3dlbGNvbWUtZmlsZT4KLQk8L3dlbGNvbWUtZmlsZS1saXN0PgotPC93ZWItYXBwPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0dmFsaWRhdGVqc3BkaXJlY3RpdmVzL1dlYkNvbnRlbnQvYnVnMjY1NzEwZWwuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0dmFsaWRhdGVqc3BkaXJlY3RpdmVzL1dlYkNvbnRlbnQvYnVnMjY1NzEwZWwuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhY2ZmZjgxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdHZhbGlkYXRlanNwZGlyZWN0aXZlcy9XZWJDb250ZW50L2J1ZzI2NTcxMGVsLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLTwlQCBwYWdlIGxhbmd1YWdlPSJqYXZhIiBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiCi0gICAgcGFnZUVuY29kaW5nPSJJU08tODg1OS0xIiU+Ci08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTx0aXRsZT5JbnNlcnQgdGl0bGUgaGVyZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLQotPGpzcDppbmNsdWRlIHBhZ2U9IiR7cGFyYW0uZ290b30iPjwvanNwOmluY2x1ZGU+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3R2YWxpZGF0ZWpzcGRpcmVjdGl2ZXMvV2ViQ29udGVudC9idWcyNjU3MTBleHByZXNzaW9uLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdHZhbGlkYXRlanNwZGlyZWN0aXZlcy9XZWJDb250ZW50L2J1ZzI2NTcxMGV4cHJlc3Npb24uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjU5MzU5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdHZhbGlkYXRlanNwZGlyZWN0aXZlcy9XZWJDb250ZW50L2J1ZzI2NTcxMGV4cHJlc3Npb24uanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPCVAIHBhZ2UgbGFuZ3VhZ2U9ImphdmEiIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIKLSAgICBwYWdlRW5jb2Rpbmc9IklTTy04ODU5LTEiJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPHRpdGxlPkluc2VydCB0aXRsZSBoZXJlPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotPCUKLQlTdHJpbmcgcmVkaXJlY3QgPSByZXF1ZXN0LmdldFBhcmFtZXRlcigiZ290byIpOwotJT4KLQotPGpzcDppbmNsdWRlIHBhZ2U9IjwlPSByZWRpcmVjdCAlPiI+PC9qc3A6aW5jbHVkZT4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdHZhbGlkYXRlanNwZGlyZWN0aXZlcy9XZWJDb250ZW50L2ZyYWdtZW50LmpzcGYgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3R2YWxpZGF0ZWpzcGRpcmVjdGl2ZXMvV2ViQ29udGVudC9mcmFnbWVudC5qc3BmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOTNlNGFlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdHZhbGlkYXRlanNwZGlyZWN0aXZlcy9XZWJDb250ZW50L2ZyYWdtZW50LmpzcGYKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi08ZGl2IGlkPSJjb250ZW50Ij48L2Rpdj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3R2YWxpZGF0ZWpzcGRpcmVjdGl2ZXMvV2ViQ29udGVudC90ZXN0aW5jbHVkZS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3R2YWxpZGF0ZWpzcGRpcmVjdGl2ZXMvV2ViQ29udGVudC90ZXN0aW5jbHVkZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmYjdkNzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0dmFsaWRhdGVqc3BkaXJlY3RpdmVzL1dlYkNvbnRlbnQvdGVzdGluY2x1ZGUuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotPCVAIHBhZ2UgbGFuZ3VhZ2U9ImphdmEiIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIKLSAgICBwYWdlRW5jb2Rpbmc9IklTTy04ODU5LTEiJT4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPHRpdGxlPkluc2VydCB0aXRsZSBoZXJlPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotCi08anNwOmluY2x1ZGUgcGFnZT0iZnJhZ21lbnQuanNwZiI+PC9qc3A6aW5jbHVkZT4KLTxqc3A6aW5jbHVkZSBwYWdlPSJmcmFnbWVudFRoYXREb2VzbnRFeGlzdC5qc3BmIj48L2pzcDppbmNsdWRlPgotCi08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0dmFsaWRhdGVqc3BkaXJlY3RpdmVzL3NyYy8ua2VlcG1lIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0dmFsaWRhdGVqc3BkaXJlY3RpdmVzL3NyYy8ua2VlcG1lCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdHZhbGlkYXRlanNwZGlyZWN0aXZlcy9zcmMvLmtlZXBtZQorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy9NRVRBLUlORi9NQU5JRkVTVC5NRgppbmRleCA2ZjMzNzEyLi5kNzkyNWNlIDEwMDY0NAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL01FVEEtSU5GL01BTklGRVNULk1GCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTIsNyArMiw3IEBACiBCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCiBCdW5kbGUtTmFtZTogJUJ1bmRsZS1OYW1lLjAKIEJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuNDAwLnF1YWxpZmllcgorQnVuZGxlLVZlcnNpb246IDEuMC4yMDEucXVhbGlmaWVyCiBCdW5kbGUtQ2xhc3NQYXRoOiBqc3BlbmNvZGluZ3Rlc3RzLmphcgogQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy5KU1BFbmNvZGluZ1Rlc3RzUGx1Z2luCiBCdW5kbGUtVmVuZG9yOiAlQnVuZGxlLVZlbmRvci4wCkBAIC0xMyw4ICsxMyw4IEBACiAgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAogIG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZSwKICBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUsCi0gb3JnLmp1bml0O2J1bmRsZS12ZXJzaW9uPSJbMy44LjIsNC4wLjApIiwKKyBvcmcuanVuaXQ7YnVuZGxlLXZlcnNpb249IlszLjguMCw0LjAuMCkiLAogIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZSwKICBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nCi1CdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQorRWNsaXBzZS1MYXp5U3RhcnQ6IHRydWUKIEJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC90ZXN0cy9lbmNvZGluZy9qc3AvSlNQSGVhZFRva2VuaXplclRlc3Rlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC90ZXN0cy9lbmNvZGluZy9qc3AvSlNQSGVhZFRva2VuaXplclRlc3Rlci5qYXZhCmluZGV4IDAwNzkxZDcuLjBjOTE5YTkgMTAwNjQ0Ci0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdGVzdHMvZW5jb2RpbmcvanNwL0pTUEhlYWRUb2tlbml6ZXJUZXN0ZXIuamF2YQorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3Rlc3RzL2VuY29kaW5nL2pzcC9KU1BIZWFkVG9rZW5pemVyVGVzdGVyLmphdmEKQEAgLTEsNSArMSw1IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwogICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCiAgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdApAQCAtMTIsNyArMTIsNiBAQAogCiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLWltcG9ydCBqYXZhLnV0aWwuU3RyaW5nVG9rZW5pemVyOwogaW1wb3J0IGphdmEudXRpbC5yZWdleC5QYXR0ZXJuOwogCiBpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwpAQCAtMjEsNyArMjAsNiBAQAogaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5jb250ZW50dHlwZS5KU1BIZWFkVG9rZW5pemVyOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5jb250ZW50dHlwZS5KU1BIZWFkVG9rZW5pemVyQ29uc3RhbnRzOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcuSlNQRW5jb2RpbmdUZXN0c1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudXRpbHMuU3RyaW5nVXRpbHM7CiBpbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnR0eXBlLkVuY29kaW5nUGFyc2VyQ29uc3RhbnRzOwogaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50dHlwZS5YTUxIZWFkVG9rZW5pemVyQ29uc3RhbnRzOwogCkBAIC0xNDAsNTEgKzEzOCwzNCBAQAogCSAqIEBwYXJhbSBjb250ZW50VHlwZQogCSAqLwogCXByaXZhdGUgdm9pZCBwYXJzZUNvbnRlbnRUeXBlVmFsdWUoU3RyaW5nIGNvbnRlbnRUeXBlKSB7Ci0JCS8qCi0JCSAqIEJhc2VkIHBhcnRpYWxseSBvbgotCQkgKiBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwuZG9jdW1lbnQuUGFnZURpcmVjdGl2ZUFkYXB0ZXJJbXBsCi0JCSAqIC5nZXRNaW1lVHlwZUZyb21Db250ZW50VHlwZVZhbHVlKFN0cmluZykgLCBkaXZpZGVzIHRoZSBmdWxsIHZhbHVlCi0JCSAqIGludG8gc2VnbWVudHMgYWNjb3JkaW5nIHRvICc7JywgYXNzdW1lcyB0aGUgZmlyc3Qgc3BlY2lmaWVzIHRoZQotCQkgKiBjb250ZW50IHR5cGUgaXRzZWxmIGlmIGl0IGhhcyBubyAnPScsIGFuZCB0aGF0IHRoZSByZW1haW5kZXIgYXJlCi0JCSAqIHBhcmFtZXRlcnMgd2hpY2ggbWF5IHNwZWNpZnkgYSBjaGFyc2V0Ci0JCSAqLwotCQkKLQkJU3RyaW5nIGNsZWFuQ29udGVudFR5cGVWYWx1ZSA9IFN0cmluZ1V0aWxzLnN0cmlwTm9uTGV0dGVyRGlnaXRzKGNvbnRlbnRUeXBlKTsKLQkJLyogQnJlYWsgdGhlIG1pbWUgaGVhZGVyIGludG8gdGhlIG1haW4gdmFsdWUgYW5kIGl0cyBwYXJhbWV0ZXJzLCBzZXBhcmF0ZWQgYnkgJzsnICovCi0JCVN0cmluZ1Rva2VuaXplciB0b2tlbml6ZXIgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGNsZWFuQ29udGVudFR5cGVWYWx1ZSwgIjsiKTsgLy8kTk9OLU5MUy0xJAotCQlpbnQgdExlbiA9IHRva2VuaXplci5jb3VudFRva2VucygpOwotCQlpZiAodExlbiA9PSAwKQotCQkJcmV0dXJuOwotCQlTdHJpbmdbXSB0b2tlbnMgPSBuZXcgU3RyaW5nW3RMZW5dOwotCQlpbnQgaiA9IDA7Ci0JCXdoaWxlICh0b2tlbml6ZXIuaGFzTW9yZVRva2VucygpKSB7Ci0JCQl0b2tlbnNbal0gPSB0b2tlbml6ZXIubmV4dFRva2VuKCk7Ci0JCQlqKys7Ci0JCX0KLQkJCi0JCWludCBmaXJzdFBhcmFtZXRlciA9IDA7Ci0JCWlmICh0b2tlbnNbMF0uaW5kZXhPZignPScpID09IC0xKSB7Ci0JCQkvKgotCQkJICogbm8gZXF1YWwgc2lnbiBpbiB0aGUgZmlyc3Qgc2VnbWVudCwgc28gYXNzdW1lIGl0IGluZGljYXRlcyBhCi0JCQkgKiBjb250ZW50IHR5cGUgcHJvcGVybHkKLQkJCSAqLwotCQkJZkNvbnRlbnRUeXBlID0gdG9rZW5zWzBdLnRyaW0oKTsKLQkJCWZpcnN0UGFyYW1ldGVyID0gMTsKLQkJfQotCQkvKgotCQkgKiBub3cgaGFuZGxlIHBhcmFtZXRlcnMgYXMgbmFtZT12YWx1ZSBwYWlycywgbG9va2luZyBmb3IgImNoYXJzZXQiCi0JCSAqIHNwZWNpZmljYWxseQotCQkgKi8KLQkJUGF0dGVybiBlcXVhbFBhdHRlcm4gPSBQYXR0ZXJuLmNvbXBpbGUoIlxccyo9XFxzKiIpOyAvLyROT04tTkxTLTEkCi0JCWZvciAoaW50IGkgPSBmaXJzdFBhcmFtZXRlcjsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykgewotCQkJU3RyaW5nW10gcGFpciA9IGVxdWFsUGF0dGVybi5zcGxpdCh0b2tlbnNbaV0pOwotCQkJaWYgKHBhaXIubGVuZ3RoIDwgMikKLQkJCQljb250aW51ZTsKLQkJCWlmIChwYWlyWzBdLnRyaW0oKS5lcXVhbHMoImNoYXJzZXQiKSkgeyAvLyROT04tTkxTLTEkCi0JCQkJZkNoYXJzZXQgPSBwYWlyWzFdLnRyaW0oKTsKKwkJUGF0dGVybiBwYXR0ZXJuID0gUGF0dGVybi5jb21waWxlKCI7XFxzKmNoYXJzZXRcXHMqPVxccyoiKTsgLy8kTk9OLU5MUy0xJAorCQlTdHJpbmdbXSBwYXJ0cyA9IHBhdHRlcm4uc3BsaXQoY29udGVudFR5cGUpOworCQlpZiAocGFydHMubGVuZ3RoID4gMCkgeworCQkJLy8gaWYgb25seSBvbmUgaXRlbSwgaXQgY2FuIHN0aWxsIGJlIGNoYXJzZXQgaW5zdGVhZCBvZgorCQkJLy8gY29udGVudFR5cGUKKwkJCWlmIChwYXJ0cy5sZW5ndGggPT0gMSkgeworCQkJCWlmIChwYXJ0c1swXS5sZW5ndGgoKSA+IDYpIHsKKwkJCQkJU3RyaW5nIGNoZWNrRm9yQ2hhcnNldCA9IHBhcnRzWzBdLnN1YnN0cmluZygwLCA3KTsKKwkJCQkJaWYgKGNoZWNrRm9yQ2hhcnNldC5lcXVhbHNJZ25vcmVDYXNlKCJjaGFyc2V0IikpIHsKKwkJCQkJCWludCBlcXBvcyA9IHBhcnRzWzBdLmluZGV4T2YoJz0nKTsKKwkJCQkJCWVxcG9zID0gZXFwb3MgKyAxOworCQkJCQkJaWYgKGVxcG9zIDwgcGFydHNbMF0ubGVuZ3RoKCkpIHsKKwkJCQkJCQlmQ2hhcnNldCA9IHBhcnRzWzBdLnN1YnN0cmluZyhlcXBvcyk7CisJCQkJCQkJZkNoYXJzZXQgPSBmQ2hhcnNldC50cmltKCk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJZWxzZSB7CisJCQkJCQlmQ29udGVudFR5cGUgPSBwYXJ0c1swXTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCWVsc2UgeworCQkJCWZDb250ZW50VHlwZSA9IHBhcnRzWzBdOwogCQkJfQogCQl9Ci0KKwkJaWYgKHBhcnRzLmxlbmd0aCA+IDEpIHsKKwkJCWZDaGFyc2V0ID0gcGFydHNbMV07CisJCX0KIAl9CiAKIAkvKioKQEAgLTM1MSwxMyArMzMyLDEyIEBACiAJCWF0IG9yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcuanNwLkpTUEhlYWRUb2tlbml6ZXJUZXN0ZXIucGFyc2VIZWFkZXIoSlNQSGVhZFRva2VuaXplclRlc3Rlci5qYXZhOjE4MikKIAkJYXQgb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy5qc3AuSlNQSGVhZFRva2VuaXplclRlc3Rlci5kb1Rlc3RGaWxlKEpTUEhlYWRUb2tlbml6ZXJUZXN0ZXIuamF2YTo1OCkKIAkJYXQgb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy5qc3AuSlNQSGVhZFRva2VuaXplclRlc3Rlci50ZXN0VVRGMTZCT00oSlNQSGVhZFRva2VuaXplclRlc3Rlci5qYXZhOjMyNCkKLQkqLwogCiAJcHVibGljIHZvaWQgdGVzdFVURjE2Qk9NKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCS8vIGh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0yNDM3MzUKLS8vCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidXRmMTZCT00uanNwIjsKLS8vCQlkb3Rlc3RmaWxlKGZpbGVuYW1lLCAidXRmLTE2IiwgbnVsbCwgbnVsbCk7CisJCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJ1dGYxNkJPTS5qc3AiOworCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiVVRGLTE2IiwgbnVsbCwgbnVsbCk7CiAJfQorCSovCiAJCiAJcHVibGljIHZvaWQgdGVzdFVURjE2bGVYbWxTdHlsZSgpIHRocm93cyBFeGNlcHRpb24gewogCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidXRmMTZsZV94bWxTdHlsZS5qc3AiOwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3V0ZjE2Qk9NLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC91dGYxNkJPTS5qc3AKaW5kZXggNmVlMjQyZS4uODhlMjcxYSAxMDA2NDQKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3V0ZjE2Qk9NLmpzcAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdXRmMTZCT00uanNwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvLmNsYXNzcGF0aAppbmRleCBlMjdmYWQwLi5jZTczOTMzIDEwMDY0NAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLy5jbGFzc3BhdGgKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy8uY2xhc3NwYXRoCkBAIC0xLDggKzEsNiBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KIDxjbGFzc3BhdGg+CiAJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0idGV4dC50ZXN0cyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9ImpmYWNlLnRleHQudGVzdHMiLz4KIAk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS40Ii8+CiAJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+CiAJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgppbmRleCBjMzU4MzIzLi4wMTBmMjU4IDEwMDY0NAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTIsNyArMiw3IEBACiBCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCiBCdW5kbGUtTmFtZTogJUJ1bmRsZS1OYW1lLjAKIEJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHM7IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC40MDAucXVhbGlmaWVyCitCdW5kbGUtVmVyc2lvbjogMS4wLjIwMy5xdWFsaWZpZXIKIEJ1bmRsZS1DbGFzc1BhdGg6IGpzcHVpdGVzdHMuamFyCiBCdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLkpTUFVJVGVzdHNQbHVnaW4KIEJ1bmRsZS1WZW5kb3I6ICVCdW5kbGUtVmVuZG9yLjAKQEAgLTQzLDcgKzQzLDYgQEAKICBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLAogIG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZSwKICBvcmcuZWNsaXBzZS51aS52aWV3cywKLSBvcmcuZWNsaXBzZS51aS53b3JrYmVuY2gsCiAgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAogIG9yZy5lY2xpcHNlLndzdC54bWwudWksCiAgY29tLmlibS5pY3UsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOTczOTY5OC4uODc0YjJkYSAxMDA2NDQKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvYnVpbGQucHJvcGVydGllcwpAQCAtMSw1ICsxLDUgQEAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCiAjIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKICMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCiAjIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CkBAIC0xNiwxMSArMTYsNyBAQAogICAgICAgICAgICAgICAganNwdWl0ZXN0cy5qYXIsXAogICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKICAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgdGV4dC50ZXN0cy8sXAotICAgICAgICAgICAgICAgamZhY2UudGV4dC50ZXN0cy8KKyAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzCiBqYXJzLmNvbXBpbGUub3JkZXIgPSBqc3B1aXRlc3RzLmphcgotc291cmNlLmpzcHVpdGVzdHMuamFyID0gc3JjLyxcCi0gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LnRlc3RzLyxcCi0gICAgICAgICAgICAgICAgICAgICAgICBqZmFjZS50ZXh0LnRlc3RzLworc291cmNlLmpzcHVpdGVzdHMuamFyID0gc3JjLwogb3V0cHV0LmpzcHVpdGVzdHMuamFyID0gYmluLwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvQWJzdHJhY3RQYWlyTWF0Y2hlclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL0Fic3RyYWN0UGFpck1hdGNoZXJUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkNmUzOTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvQWJzdHJhY3RQYWlyTWF0Y2hlclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM2MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgQ2hyaXN0aWFuIFBsZXNuZXIgSGFuc2VuIChwbGVzbmVyQHF1ZW50YS5vcmcpIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuamZhY2UudGV4dC50ZXN0czsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LkJhZExvY2F0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnRQYXJ0aXRpb25lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JVGV4dFN0b3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQucnVsZXMuRmFzdFBhcnRpdGlvbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQucnVsZXMuSVByZWRpY2F0ZVJ1bGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5ydWxlcy5SdWxlQmFzZWRQYXJ0aXRpb25TY2FubmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQucnVsZXMuU2luZ2xlTGluZVJ1bGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5ydWxlcy5Ub2tlbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnNvdXJjZS5JQ2hhcmFjdGVyUGFpck1hdGNoZXI7Ci0KLS8qKgotICogR2VuZXJpYyB0ZXN0IG9mIHNpbXBsZSBjaGFyYWN0ZXIgcGFpciBtYXRjaGVycwotICoKLSAqIEBzaW5jZSAzLjMKLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIEFic3RyYWN0UGFpck1hdGNoZXJUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCi0JLyoqCi0JICogQ29uc3RydWN0cyBhIG5ldyBjaGFyYWN0ZXIgcGFpciBtYXRjaGVyLgotCSAqIAotCSAqIEBwYXJhbSBjaGFycyB0aGUgY2hhcmFjdGVycyB0byBtYXRjaAotCSAqIEByZXR1cm4gdGhlIGNoYXJhY3RlciBwYWlyIG1hdGNoZXIKLQkgKi8KLQlwcm90ZWN0ZWQgYWJzdHJhY3QgSUNoYXJhY3RlclBhaXJNYXRjaGVyIGNyZWF0ZU1hdGNoZXIoZmluYWwgU3RyaW5nIGNoYXJzKTsKLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHBhcnRpdGlvbmluZyB0cmVhdGVkIGJ5IHRoZSBtYXRjaGVyLgotCSAqIAotCSAqIEByZXR1cm4gdGhlIHBhcnRpdGlvbgotCSAqLwotCXByb3RlY3RlZCBhYnN0cmFjdCBTdHJpbmcgZ2V0RG9jdW1lbnRQYXJ0aXRpb25pbmcoKTsKLQotCXB1YmxpYyBBYnN0cmFjdFBhaXJNYXRjaGVyVGVzdChTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgQWJzdHJhY3RQYWlyTWF0Y2hlclRlc3QoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JLyogLS0tIFQgZSBzIHQgcyAtLS0gKi8KLQotCS8qKiBUZXN0cyB0aGF0IHRoZSB0ZXN0IGNhc2UgcmVhZGVyIHdvcmtzICovCi0JcHVibGljIHZvaWQgdGVzdFRlc3RDYXNlUmVhZGVyKCkgewotCQlwZXJmb3JtUmVhZGVyVGVzdCgiIyggKSUiLCAzLCAgMCwgICIoICkiKTsKLQkJcGVyZm9ybVJlYWRlclRlc3QoIiUoICkjIiwgMCwgIDMsICAiKCApIik7Ci0JCXBlcmZvcm1SZWFkZXJUZXN0KCIoICklIiwgIDMsICAtMSwgIiggKSIpOwotCQlwZXJmb3JtUmVhZGVyVGVzdCgiIyUiLCAgICAwLCAgMCwgICIiKTsKLQl9Ci0KLQkvKioKLQkgKiBWZXJ5IHNpbXBsZSBjaGVja3MuCi0JICogCi0JICogQHRocm93cyBCYWRMb2NhdGlvbkV4Y2VwdGlvbgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RTaW1wbGVNYXRjaFNhbWVNYXRjaGVyKCkgdGhyb3dzIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJZmluYWwgSUNoYXJhY3RlclBhaXJNYXRjaGVyIG1hdGNoZXI9IGNyZWF0ZU1hdGNoZXIoIigpW117fSIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgIiMoICAgKSUiKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICIjWyAgIF0lIik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAiI3sgICB9JSIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgIiglICAgKSMiKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICJbJSAgIF0jIik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAieyUgICB9IyIpOwotCQltYXRjaGVyLmRpc3Bvc2UoKTsKLQl9Ci0KLQkvKioKLQkgKiBWZXJ5IHNpbXBsZSBjaGVja3MuCi0JICogCi0JICogQHRocm93cyBCYWRMb2NhdGlvbkV4Y2VwdGlvbgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RTaW1wbGVNYXRjaERpZmZlcmVudE1hdGNoZXJzKCkgdGhyb3dzIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJcGVyZm9ybU1hdGNoKCIoKVtde30iLCAiIyggICApJSIpOwotCQlwZXJmb3JtTWF0Y2goIigpW117fSIsICIjWyAgIF0lIik7Ci0JCXBlcmZvcm1NYXRjaCgiKClbXXt9IiwgIiN7ICAgfSUiKTsKLQkJcGVyZm9ybU1hdGNoKCIoKVtde30iLCAiKCUgICApIyIpOwotCQlwZXJmb3JtTWF0Y2goIigpW117fSIsICJbJSAgIF0jIik7Ci0JCXBlcmZvcm1NYXRjaCgiKClbXXt9IiwgInslICAgfSMiKTsKLQl9Ci0KLQkvKioKLQkgKiBDbG9zZSBtYXRjaGVzLgotCSAqIAotCSAqIEB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0Q2xvc2VNYXRjaGVzKCkgdGhyb3dzIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJZmluYWwgSUNoYXJhY3RlclBhaXJNYXRjaGVyIG1hdGNoZXI9IGNyZWF0ZU1hdGNoZXIoIigpW117fSIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgIiMoKSUiKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICIoJSkjIik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAiIygoKSklIik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAiKCUoKSkjIik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAiKCglKSMpIik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAiKCMoKSUpIik7Ci0JCW1hdGNoZXIuZGlzcG9zZSgpOwotCX0KLQotCi0JLyoqCi0JICogQ2hlY2tzIG9mIHNpbXBsZSBzaXR1YXRpb25zIHdoZXJlIG5vIG1hdGNoZXMgc2hvdWxkIGJlIGZvdW5kLgotCSAqIAotCSAqIEB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0SW5jb21wbGV0ZU1hdGNoKCkgdGhyb3dzIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJZmluYWwgSUNoYXJhY3RlclBhaXJNYXRjaGVyIG1hdGNoZXI9IGNyZWF0ZU1hdGNoZXIoIigpW117fSIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgIiglICIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgIiUoICApIik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAiKCAlICkiKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICIoICAlKSIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgIiUiKTsKLQkJbWF0Y2hlci5kaXNwb3NlKCk7Ci0JfQotCi0JLyoqCi0JICogVGVzdCB0aGF0IGl0IGRvZXNuJ3QgbWF0Y2ggYWNyb3NzIGRpZmZlcmVudCBwYXJ0aXRpb25zLgotCSAqIAotCSAqIEB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0UGFydGl0aW9uZWQoKSB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlmaW5hbCBJQ2hhcmFjdGVyUGFpck1hdGNoZXIgbWF0Y2hlcj0gY3JlYXRlTWF0Y2hlcigiKClbXXt9Iik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAiKCUgfGEgYXwgKSMiKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICIjKCB8YSBhfCApJSIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgInxiICMoICklIGJ8Iik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAiKCB8YiApJSBifCIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgIiglIHxiICkgYnwiKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICJ8YSAoIGF8ICklIik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAifGEgKCUgYXwgKSIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgInxjICMoIGN8ICkgKCB8YyApJSBjfCIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgInxjICglIGN8ICkgKCB8YyApIyBjfCIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgIiglIHxhICkgYXwgfGIgKSBifCB8YyApIGN8ICkjIik7Ci0JCW1hdGNoZXIuZGlzcG9zZSgpOwotCX0KLQotCS8qKgotCSAqIFRlc3QgdGhhdCBpdCB3b3JrcyBwcm9wZXJseSBuZXh0IHRvIHBhcnRpdGlvbiBib3VuZGFyaWVzLgotCSAqIAotCSAqIEB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0VGlnaHRQYXJ0aXRpb25lZCgpIHRocm93cyBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7Ci0JCWZpbmFsIElDaGFyYWN0ZXJQYWlyTWF0Y2hlciBtYXRjaGVyPSBjcmVhdGVNYXRjaGVyKCIoKVtde30iKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICIofGIpJWJ8Iik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAiKCV8YilifCIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgInxhKGF8KSUiKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICJ8YSglYXwpIik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAifGMjKGN8KSh8YyklY3wiKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICJ8YyglY3wpKHxjKSNjfCIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgIiglfGEpYXx8YilifHxjKWN8KSMiKTsKLQkJbWF0Y2hlci5kaXNwb3NlKCk7Ci0JfQotCi0JLyoqIFRlc3QgdGhhdCBuZXN0aW5nIHdvcmtzIHByb3Blcmx5ICovCi0JcHVibGljIHZvaWQgdGVzdE5lc3RpbmcoKSB7Ci0JCWZpbmFsIElDaGFyYWN0ZXJQYWlyTWF0Y2hlciBtYXRjaGVyPSBjcmVhdGVNYXRjaGVyKCIoKVtde30iKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICIgKCAjKCAoICggKSApICggKSApJSApICIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgIiAoICglICggKCApICkgKCApICkjICkgIik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAiICggIyggeyAoICkgfSBbIF0gKSUgKSAiKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICIgKCAoJSB7ICggKSB9IFsgXSApIyApICIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgIiAoICggI3sgKCApIH0lIFsgXSApICkgIik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAiICggKCB7JSAoICkgfSMgWyBdICkgKSAiKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICJhKGIjKGMoZChlKWYpZyhoKWkpJWopayIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgImEoYiglYyhkKGUpZilnKGgpaSkjailrIik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAiYShiIyhje2QoZSlmfWdbaF1pKSVqKWsiKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICJhKGIoJWN7ZChlKWZ9Z1toXWkpI2opayIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgImEoYihjI3tkKGUpZn0lZ1toXWkpailrIik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAiYShiKGN7JWQoZSlmfSNnW2hdaSlqKWsiKTsKLQkJbWF0Y2hlci5kaXNwb3NlKCk7Ci0JfQotCi0JLyoqCi0JICogVGVzdCBhIGZldyBib3VuZGFyeSBjb25kaXRpb25zLgotCSAqIAotCSAqICogQHRocm93cyBCYWRMb2NhdGlvbkV4Y2VwdGlvbgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RCb3VuZGFyaWVzKCkgdGhyb3dzIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJZmluYWwgSUNoYXJhY3RlclBhaXJNYXRjaGVyIG1hdGNoZXI9IGNyZWF0ZU1hdGNoZXIoIigpW117fSIpOwotCQlmaW5hbCBTdHJpbmdEb2N1bWVudCBkb2M9IG5ldyBTdHJpbmdEb2N1bWVudCgiYWJjZGVmZ2hpamtsIik7Ci0JCWFzc2VydE51bGwobWF0Y2hlci5tYXRjaChudWxsLCAwKSk7Ci0JCWFzc2VydE51bGwobWF0Y2hlci5tYXRjaChkb2MsIC0xKSk7Ci0JCWFzc2VydE51bGwobWF0Y2hlci5tYXRjaChkb2MsIGRvYy5nZXRMZW5ndGgoKSArIDEpKTsKLQkJbWF0Y2hlci5kaXNwb3NlKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEJ1ZzE1NjQyNigpIHsKLQkJZmluYWwgSUNoYXJhY3RlclBhaXJNYXRjaGVyIG1hdGNoZXI9IGNyZWF0ZU1hdGNoZXIoIigpW117fTw+Iik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAiICMoIGEgPCBiICklICIpOwotCQlwZXJmb3JtTWF0Y2gobWF0Y2hlciwgIiAoJSBhIDwgYiApIyAiKTsKLQkJcGVyZm9ybU1hdGNoKG1hdGNoZXIsICIgIyggYSA+IGIgKSUgIik7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCAiICglIGEgPiBiICkjICIpOwotCQltYXRjaGVyLmRpc3Bvc2UoKTsKLQl9Ci0KLQkvKiAtLS0gVSB0IGkgbCBpIHQgaSBlIHMgLS0tICovCi0KLQkvKioKLQkgKiBDaGVja3MgdGhhdCB0aGUgdGVzdCBjYXNlIHJlYWRlciByZWFkcyB0aGUgdGVzdCBjYXNlIGFzIHNwZWNpZmllZC4KLQkgKiAKLQkgKiBAcGFyYW0gdGVzdFN0cmluZyB0aGUgc3RyaW5nIHRvIHRlc3QKLQkgKiBAcGFyYW0gZXhwZWN0ZWRQb3MgdGhlIGV4cGVjdGVkIHBvc2l0aW9uCi0JICogQHBhcmFtIGV4cGVjdGVkTWF0Y2ggdGhlIGV4cGVjdGVkIG1hdGNoCi0JICogQHBhcmFtIGV4cGVjdGVkU3RyaW5nIHRoZSBleHBlY3RlZCBzdHJpbmcKLQkgKi8KLQlwcml2YXRlIHZvaWQgcGVyZm9ybVJlYWRlclRlc3QoU3RyaW5nIHRlc3RTdHJpbmcsIGludCBleHBlY3RlZFBvcywgaW50IGV4cGVjdGVkTWF0Y2gsIFN0cmluZyBleHBlY3RlZFN0cmluZykgewotCQlUZXN0Q2FzZSB0MD0gY3JlYXRlVGVzdENhc2UodGVzdFN0cmluZyk7Ci0JCWFzc2VydEVxdWFscyhleHBlY3RlZFBvcywgdDAuZlBvcyk7Ci0JCWFzc2VydEVxdWFscyhleHBlY3RlZE1hdGNoLCB0MC5mTWF0Y2gpOwotCQlhc3NlcnRFcXVhbHMoZXhwZWN0ZWRTdHJpbmcsIHQwLmZTdHJpbmcpOwotCX0KLQotCS8qKgotCSAqIENoZWNrcyB0aGF0IHRoZSBnaXZlbiBtYXRjaGVyIG1hdGNoZXMgdGhlIGlucHV0IGFzIHNwZWNpZmllZC4KLQkgKiAKLQkgKiBAcGFyYW0gbWF0Y2hlciB0aGUgbWF0Y2hlcgotCSAqIEBwYXJhbSB0ZXN0Q2FzZSB0aGUgdGVzdCBzdHJpbmcKLQkgKi8KLQlwcm90ZWN0ZWQgdm9pZCBwZXJmb3JtTWF0Y2goZmluYWwgSUNoYXJhY3RlclBhaXJNYXRjaGVyIG1hdGNoZXIsIGZpbmFsIFN0cmluZyB0ZXN0Q2FzZSkgewotCQlmaW5hbCBUZXN0Q2FzZSB0ZXN0PSBjcmVhdGVUZXN0Q2FzZSh0ZXN0Q2FzZSk7Ci0JCW1hdGNoZXIuY2xlYXIoKTsKLQkJZmluYWwgSVJlZ2lvbiByZWdpb249IG1hdGNoZXIubWF0Y2godGVzdC5nZXREb2N1bWVudCgpLCB0ZXN0LmZQb3MpOwotCQlpZiAodGVzdC5mTWF0Y2ggPT0gLTEpIHsKLQkJCS8vIGlmIG5vIG1hdGNoIHBvaW50IGhhcyBiZWVuIHNwZWNpZmllZCB0aGVyZSBzaG91bGQgYmUKLQkJCS8vIG5vIG1hdGNoCi0JCQlpZiAocmVnaW9uICE9IG51bGwpIFN5c3RlbS5vdXQucHJpbnRsbihyZWdpb24uZ2V0T2Zmc2V0KCkpOwotCQkJYXNzZXJ0TnVsbChyZWdpb24pOwotCQl9IGVsc2UgewotCQkJYXNzZXJ0Tm90TnVsbChyZWdpb24pOwotCQkJZmluYWwgYm9vbGVhbiBpc0ZvcndhcmQ9IHRlc3QuZlBvcyA+IHRlc3QuZk1hdGNoOwotCQkJYXNzZXJ0RXF1YWxzKGlzRm9yd2FyZCwgbWF0Y2hlci5nZXRBbmNob3IoKSA9PSBJQ2hhcmFjdGVyUGFpck1hdGNoZXIuUklHSFQpOwotCQkJLy8gSWYgdGhlIG1hdGNoIGlzIGZvcndhcmQsIHRoZSBjdXJzZXIgaXMgb25lIGNoYXJhY3RlcgotCQkJLy8gYWZ0ZXIgdGhlIHN0YXJ0IG9mIHRoZSBtYXRjaCwgc28gd2UgbmVlZCB0byBjb3VudCBvbmUKLQkJCS8vIHN0ZXAgYmFja3dhcmRzCi0JCQlmaW5hbCBpbnQgb2Zmc2V0PSBpc0ZvcndhcmQgPyB0ZXN0LmdldE9mZnNldCgpIDogdGVzdC5nZXRPZmZzZXQoKSAtIDE7Ci0JCQlmaW5hbCBpbnQgbGVuZ3RoPSBpc0ZvcndhcmQgPyB0ZXN0LmdldExlbmd0aCgpIDogdGVzdC5nZXRMZW5ndGgoKSArIDE7Ci0JCQlhc3NlcnRFcXVhbHMobGVuZ3RoLCByZWdpb24uZ2V0TGVuZ3RoKCkpOwotCQkJYXNzZXJ0RXF1YWxzKG9mZnNldCwgcmVnaW9uLmdldE9mZnNldCgpKTsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBwZXJmb3JtTWF0Y2goZmluYWwgU3RyaW5nIGRlbGltcywgZmluYWwgU3RyaW5nIHRlc3RDYXNlKSB7Ci0JCWZpbmFsIElDaGFyYWN0ZXJQYWlyTWF0Y2hlciBtYXRjaGVyPSBjcmVhdGVNYXRjaGVyKGRlbGltcyk7Ci0JCXBlcmZvcm1NYXRjaChtYXRjaGVyLCB0ZXN0Q2FzZSk7Ci0JCW1hdGNoZXIuZGlzcG9zZSgpOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYSB0ZXh0IGNhc2UgZnJvbSBhIHN0cmluZy4gSW4gdGhlIGdpdmVuIHN0cmluZyBhICclJyByZXByZXNlbnRzIHRoZSBwb3NpdGlvbiBvZiB0aGUKLQkgKiBjdXJzb3IgYW5kIGEgJyMnIHJlcHJlc2VudHMgdGhlIHBvc2l0aW9uIG9mIHRoZSBleHBlY3RlZCBtYXRjaGluZyBjaGFyYWN0ZXIuCi0JICogCi0JICogQHBhcmFtIHN0ciB0aGUgc3RyaW5nIGZvciB3aGljaCB0byBjcmVhdGUgdGhlIHRlc3QgY2FzZQotCSAqIEByZXR1cm4gdGhlIGNyZWF0ZWQgdGVzdCBjYXNlCi0JICovCi0JcHVibGljIFRlc3RDYXNlIGNyZWF0ZVRlc3RDYXNlKFN0cmluZyBzdHIpIHsKLQkJaW50IHBvcz0gc3RyLmluZGV4T2YoIiUiKTsKLQkJYXNzZXJ0RmFsc2UocG9zID09IC0xKTsKLQkJaW50IG1hdGNoPSBzdHIuaW5kZXhPZigiIyIpOwotCQkvLyBhY2NvdW50IGZvciB0aGUgbGVuZ3RoIG9mIHRoZSBmaXJzdCBwb3NpdGlvbiBtYXJrZXIsCi0JCS8vIGlmIHRoZXJlIGlzIG9uZQotCQlpZiAobWF0Y2ggIT0gLTEgJiYgbWF0Y2ggPCBwb3MpIHBvcyAtPSAxOwotCQlpZiAocG9zIDwgbWF0Y2gpIG1hdGNoIC09IDE7Ci0JCWZpbmFsIFN0cmluZyBzdHJpcHBlZD0gc3RyLnJlcGxhY2VBbGwoIiUiLCAiIikucmVwbGFjZUFsbCgiIyIsICIiKTsKLQkJcmV0dXJuIG5ldyBUZXN0Q2FzZShzdHJpcHBlZCwgcG9zLCBtYXRjaCk7Ci0JfQotCi0JcHJpdmF0ZSBjbGFzcyBUZXN0Q2FzZSB7Ci0KLQkJcHVibGljIGZpbmFsIFN0cmluZyBmU3RyaW5nOwotCQlwdWJsaWMgZmluYWwgaW50IGZQb3MsIGZNYXRjaDsKLQotCQlwdWJsaWMgVGVzdENhc2UoU3RyaW5nIHN0cmluZywgaW50IHBvcywgaW50IG1hdGNoKSB7Ci0JCQlmU3RyaW5nPSBzdHJpbmc7Ci0JCQlmUG9zPSBwb3M7Ci0JCQlmTWF0Y2g9IG1hdGNoOwotCQl9Ci0KLQkJcHVibGljIElEb2N1bWVudCBnZXREb2N1bWVudCgpIHsKLQkJCXJldHVybiBuZXcgU3RyaW5nRG9jdW1lbnQoZlN0cmluZyk7Ci0JCX0KLQotCQlwdWJsaWMgaW50IGdldExlbmd0aCgpIHsKLQkJCXJldHVybiBNYXRoLmFicyhmUG9zIC0gZk1hdGNoKTsKLQkJfQotCi0JCXB1YmxpYyBpbnQgZ2V0T2Zmc2V0KCkgewotCQkJaWYgKGZQb3MgPiBmTWF0Y2gpIHJldHVybiBmTWF0Y2g7Ci0JCQlyZXR1cm4gZlBvczsKLQkJfQotCi0JfQotCi0JcHJpdmF0ZSBjbGFzcyBTdHJpbmdEb2N1bWVudCBleHRlbmRzIERvY3VtZW50IHsKLQotCQlwdWJsaWMgU3RyaW5nRG9jdW1lbnQoU3RyaW5nIHN0cikgewotCQkJdGhpcy5zZXRUZXh0U3RvcmUobmV3IFN0cmluZ1RleHRTdG9yZShzdHIpKTsKLQkJCXRoaXMuc2V0KHN0cik7Ci0JCQlmaW5hbCBJRG9jdW1lbnRQYXJ0aXRpb25lciBwYXJ0PSBjcmVhdGVQYXJ0aXRpb25lcigpOwotCQkJdGhpcy5zZXREb2N1bWVudFBhcnRpdGlvbmVyKGdldERvY3VtZW50UGFydGl0aW9uaW5nKCksIHBhcnQpOwotCQkJcGFydC5jb25uZWN0KHRoaXMpOwotCQl9Ci0KLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBjbGFzcyBTdHJpbmdUZXh0U3RvcmUgaW1wbGVtZW50cyBJVGV4dFN0b3JlIHsKLQotCQlwcml2YXRlIFN0cmluZyBmU3RyaW5nOwotCi0JCXB1YmxpYyBTdHJpbmdUZXh0U3RvcmUoZmluYWwgU3RyaW5nIHN0cikgewotCQkJZlN0cmluZz0gc3RyOwotCQl9Ci0KLQkJcHVibGljIGNoYXIgZ2V0KGludCBvZmZzZXQpIHsKLQkJCXJldHVybiBmU3RyaW5nLmNoYXJBdChvZmZzZXQpOwotCQl9Ci0KLQkJcHVibGljIFN0cmluZyBnZXQoaW50IG9mZnNldCwgaW50IGxlbmd0aCkgewotCQkJcmV0dXJuIGZTdHJpbmcuc3Vic3RyaW5nKG9mZnNldCwgb2Zmc2V0ICsgbGVuZ3RoKTsKLQkJfQotCi0JCXB1YmxpYyBpbnQgZ2V0TGVuZ3RoKCkgewotCQkJcmV0dXJuIGZTdHJpbmcubGVuZ3RoKCk7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCByZXBsYWNlKGludCBvZmZzZXQsIGludCBsZW5ndGgsIFN0cmluZyB0ZXh0KSB7Ci0JCQl0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIHNldChTdHJpbmcgdGV4dCkgewotCQkJZlN0cmluZz0gdGV4dDsKLQkJfQotCi0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIERFRkFVTFRfUEFSVElUSU9OPSBJRG9jdW1lbnQuREVGQVVMVF9DT05URU5UX1RZUEU7Ci0KLQlwcml2YXRlIHN0YXRpYyBJRG9jdW1lbnRQYXJ0aXRpb25lciBjcmVhdGVQYXJ0aXRpb25lcigpIHsKLQkJZmluYWwgUnVsZUJhc2VkUGFydGl0aW9uU2Nhbm5lciBzY2FuPSBuZXcgUnVsZUJhc2VkUGFydGl0aW9uU2Nhbm5lcigpOwotCQlmaW5hbCBMaXN0Lyo8SVByZWRpY2F0ZVJ1bGU+Ki8gcnVsZXM9IG5ldyBBcnJheUxpc3QvKjxJUHJlZGljYXRlUnVsZT4qLygpOwotCQlydWxlcy5hZGQobmV3IFNpbmdsZUxpbmVSdWxlKCJ8YSIsICJhfCIsIG5ldyBUb2tlbigiYSIpKSk7Ci0JCXJ1bGVzLmFkZChuZXcgU2luZ2xlTGluZVJ1bGUoInxiIiwgImJ8IiwgbmV3IFRva2VuKCJiIikpKTsKLQkJcnVsZXMuYWRkKG5ldyBTaW5nbGVMaW5lUnVsZSgifGMiLCAiY3wiLCBuZXcgVG9rZW4oImMiKSkpOwotCQlzY2FuLnNldFByZWRpY2F0ZVJ1bGVzKChJUHJlZGljYXRlUnVsZVtdKSBydWxlcy50b0FycmF5KG5ldyBJUHJlZGljYXRlUnVsZVtydWxlcy5zaXplKCldKSk7Ci0JCXNjYW4uc2V0RGVmYXVsdFJldHVyblRva2VuKG5ldyBUb2tlbihERUZBVUxUX1BBUlRJVElPTikpOwotCQlyZXR1cm4gbmV3IEZhc3RQYXJ0aXRpb25lcihzY2FuLCBuZXcgU3RyaW5nW10geyBERUZBVUxUX1BBUlRJVElPTiwgImEiLCAiYiIsICJjIiB9KTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL0Fic3RyYWN0VW5kb01hbmFnZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9BYnN0cmFjdFVuZG9NYW5hZ2VyVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNjFlNzAxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL0Fic3RyYWN0VW5kb01hbmFnZXJUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpmYWNlLnRleHQudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LkJhZExvY2F0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50RXh0ZW5zaW9uNDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklUZXh0Vmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSVVuZG9NYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuUG9zaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5UZXh0Vmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmx0ay5tb2RlbGhhbmRsZXIuSU1vZGVsSGFuZGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwubW9kZWxoYW5kbGVyLk1vZGVsSGFuZGxlclJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC50ZXh0LkJhc2ljU3RydWN0dXJlZERvY3VtZW50OwotCi0vKioKLSAqIFRlc3RzIGZvciBEZWZhdWx0VW5kb01hbmFnZXIuIENoYW5nZWQgZnJvbSB0aGUgSkZhY2Ugb3JpZ2luYWwgdG8gY3JlYXRlcwotICogYW5kIHRlc3QgYWdhaW5zdCBhIHN0cnVjdHVyZWQgZG9jdW1lbnQuCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFVuZG9NYW5hZ2VyVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQotCS8qKiBUaGUgbWF4aW11bSB1bmRvIGxldmVsLiAqLwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNQVhfVU5ET19MRVZFTD0gMjU2OwotCi0JLyoqIFRoZSBzaGVsbC4gKi8KLQlwcml2YXRlIFNoZWxsIGZTaGVsbDsKLQkvKiogVGhlIHRleHQgdmlld2VyLiAqLwotCXByaXZhdGUgSVRleHRWaWV3ZXIgZlRleHRWaWV3ZXI7Ci0JLyoqIFRoZSB1bmRvIG1hbmFnZXIuICovCi0JcHJpdmF0ZSBJVW5kb01hbmFnZXIgZlVuZG9NYW5hZ2VyOwotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IExPT1BfQ09VTlQ9IDIwOwotCi0JLy8tLS0gU3RhdGljIGRhdGEgc2V0cyBmb3IgY29tcGFyaW5nIHNjZW5hcmlvcyAtIG9idGFpbmVkIGZyb20gY2FwdHVyaW5nIHJhbmRvbSBkYXRhIC0tLQotCS8qKiBPcmlnaW5hbCBkb2N1bWVudCAqLwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBJTklUSUFMX0RPQ1VNRU5UX0NPTlRFTlQ9ICIrN2N5ZzovRiFUNEtuVzswK2F1JHQxRyUoYFp8dSc3J18hLWs/PGNcIjJZLl1Dd3NPLnIiOwotCS8qKiBSZXBsYWNlbWVudCBzdHJpbmcgKi8KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgW10gUkVQTEFDRU1FTlRTPSB7ICI+IiwgIkYiLCAiTS9yLSoiLCAiLSIsICJibCIsICIiLCAifSUvIyIsICIiLCAiayYiLCAiZiIsICJcXGciLCAiYyF4IiwgIlRMRy0iLCAiTlBPIiwgIlJwOXUiLCAiIiwgIlgiLCAiVygiLCAiKXoiLCAib2UiLCAiIiwgImgqIiwgInQiLCAiSSIsICJYPU4+IiwgIjJ5dCIsICImWiIsICIyKVc9IiwgIjpLIiwgIlA5UyIsICJzOHQ4byIsICIiLCAiIiwgIjV7NyIsICIlIiwgIiIsICJ2MyIsICJXeiIsICJzSCIsICIzYyIsICI4IiwgIm9sIiwgIiw2JCIsICI5NFsjIiwgIi5+IiwgIm4iLCAiPiIsICI5IiwgIlciLCAiLChGVyIsICJRIiwgIl4iLCAiQnEiLCAiJCIsICJyZSIsICIiLCAiOSIsICI4WyIsICJNeCIsICI0YiIsICIkNiIsICJGIiwgIjhzXSIsICJvIiwgIi0iLCAiRSY2IiwgIlNcXCIsICIvIiwgInouYSIsICI0YWkiLCAiYiIsICIpIiwgIiIsICJsIiwgIlZVIiwgIjdNK1FsIiwgInhaP3giLCAieHgiLCAibGMiLCAiYiIsICJBIiwgIiEiLCAiNHBTVSIsICIiLCAie0oiLCAiSCIsICJsPl8iLCAibiY5IiwgIiIsICImYCIsICI7aWdReHEiLCAiIiwgIj4iLCAiO1wiIiwgImtcXGBdRyIsICJvez8iLCAiIiwgIksiLCAiXzYiLCAiPSJ9OwotCS8qKiBQb3NpdGlvbi9vZmZzZXQgcGFpcnMgKi8KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgW10gUE9TSVRJT05TPSB7IDE4LCAyLCA0MywgMSwgMywgMiwgMjgsIDMsIDM1LCAxLCAyMywgNSwgMzIsIDIsIDMwLCAxLCAyMiwgMSwgMzcsIDAsIDIzLCAzLCA0MywgMiwgNDYsIDEsIDE3LCAxLCAzNiwgNiwgMTcsIDUsIDMwLCA0LCAyNSwgMSwgMiwgMiwgMzAsIDAsIDM3LCAzLCAyOCwgMSwgMzAsIDIsIDIwLCA1LCAzMywgMSwgMjksIDEsIDE1LCAyLCAyMSwgMiwgMjQsIDQsIDM4LCAzLCA4LCAwLCAzMywgMiwgMTUsIDIsIDI1LCAwLCA4LCAyLCAyMCwgMywgNDMsIDIsIDQ0LCAxLCA0NCwgMiwgMzIsIDIsIDQwLCAyLCAzMiwgMywgMTIsIDIsIDM4LCAzLCAzMywgMiwgNDYsIDAsIDEzLCAzLCA0NSwgMCwgMTYsIDIsIDMsIDIsIDQ0LCAwLCA0OCwgMCwgMTgsIDUsIDcsIDYsIDcsIDMsIDQwLCAwLCA5LCAxLCAxNiwgMywgMjgsIDMsIDM2LCAxLCAzNSwgMiwgMCwgMywgNiwgMSwgMTAsIDQsIDE0LCAyLCAxNSwgMywgMzMsIDEsIDM2LCAwLCAzNywgMCwgNCwgMywgMzEsIDMsIDMzLCAzLCAxMSwgMywgMjAsIDIsIDI1LCAzLCA0LCAzLCA3LCAzLCAxNywgMCwgMywgMSwgMzEsIDMsIDM0LCAxLCAyMSwgMCwgMzMsIDEsIDE3LCA0LCA5LCAxLCAyNiwgMywgMiwgMywgMTIsIDEsIDI2LCAzLCA5LCA1LCA1LCAwLCAzMSwgMywgMCwgMywgMTIsIDEsIDEsIDEsIDMsIDAsIDM5LCAwLCA5LCAyLCAyLCAwLCAyOCwgMn07Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHPSBmYWxzZTsKLQotCi0JLyoKLQkgKiBAc2VlIFRlc3RDYXNlI1Rlc3RDYXNlKFN0cmluZykKLQkgKi8KLQlwdWJsaWMgQWJzdHJhY3RVbmRvTWFuYWdlclRlc3QoZmluYWwgU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JLyoKLQkgKiAgQHNlZSBUZXN0Q2FzZSNzZXRVcCgpCi0JICovCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB7Ci0JCWZTaGVsbD0gbmV3IFNoZWxsKCk7Ci0JCWZVbmRvTWFuYWdlcj0gY3JlYXRlVW5kb01hbmFnZXIoTUFYX1VORE9fTEVWRUwpOwotCQlmVGV4dFZpZXdlcj0gbmV3IFRleHRWaWV3ZXIoZlNoZWxsLCBTV1QuTk9ORSk7Ci0JCWZUZXh0Vmlld2VyLnNldFVuZG9NYW5hZ2VyKGZVbmRvTWFuYWdlcik7Ci0JCWZVbmRvTWFuYWdlci5jb25uZWN0KGZUZXh0Vmlld2VyKTsKLQl9Ci0KLQlhYnN0cmFjdCBwcm90ZWN0ZWQgSVVuZG9NYW5hZ2VyIGNyZWF0ZVVuZG9NYW5hZ2VyKGludCBtYXhVbmRvTGV2ZWwpOwotCi0JLyoKLQkgKiAgQHNlZSBUZXN0Q2FzZSN0ZWFyRG93bigpCi0JICovCi0JcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB7Ci0JCWZVbmRvTWFuYWdlci5kaXNjb25uZWN0KCk7Ci0JCWZVbmRvTWFuYWdlcj0gbnVsbDsKLQkJZlNoZWxsLmRpc3Bvc2UoKTsKLQkJZlNoZWxsPSBudWxsOwotCQlmVGV4dFZpZXdlcj0gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0IGZvciBsaW5lIGRlbGltaXRlciBjb252ZXJzaW9uLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RDb252ZXJ0TGluZURlbGltaXRlcnMoKSB7Ci0JCWZpbmFsIFN0cmluZyBvcmlnaW5hbD0gImFcclxuYlxyXG4iOwotCQlmaW5hbCBJRG9jdW1lbnQgZG9jdW1lbnQ9IGNyZWF0ZURvY3VtZW50KG9yaWdpbmFsKTsKLQkJZlRleHRWaWV3ZXIuc2V0RG9jdW1lbnQoZG9jdW1lbnQpOwotCi0JCXRyeSB7Ci0JCQlkb2N1bWVudC5yZXBsYWNlKDEsIDIsICJcbiIpOwotCQkJZG9jdW1lbnQucmVwbGFjZSgzLCAyLCAiXG4iKTsKLQkJfSBjYXRjaCAoQmFkTG9jYXRpb25FeGNlcHRpb24gZSkgewotCQkJYXNzZXJ0VHJ1ZShmYWxzZSk7Ci0JCX0KLQotCQlhc3NlcnRUcnVlKGZVbmRvTWFuYWdlci51bmRvYWJsZSgpKTsKLQkJZlVuZG9NYW5hZ2VyLnVuZG8oKTsKLQkJYXNzZXJ0VHJ1ZShmVW5kb01hbmFnZXIudW5kb2FibGUoKSk7Ci0JCWZVbmRvTWFuYWdlci51bmRvKCk7Ci0KLQkJZmluYWwgU3RyaW5nIHJldmVydGVkPSBkb2N1bWVudC5nZXQoKTsKLQotCQlhc3NlcnRFcXVhbHMob3JpZ2luYWwsIHJldmVydGVkKTsKLQl9Ci0KLQkvKioKLQkgKiBSYW5kb21seSBhcHBsaWVzIGRvY3VtZW50IGNoYW5nZXMuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFJhbmRvbUFjY2VzcygpIHsKLQkJZmluYWwgaW50IFJBTkRPTV9TVFJJTkdfTEVOR1RIPSA1MDsKLQkJZmluYWwgaW50IFJBTkRPTV9SRVBMQUNFX0NPVU5UPSAxMDA7Ci0KLQkJYXNzZXJ0VHJ1ZShSQU5ET01fUkVQTEFDRV9DT1VOVCA+PSAxKTsKLQkJYXNzZXJ0VHJ1ZShSQU5ET01fUkVQTEFDRV9DT1VOVCA8PSBNQVhfVU5ET19MRVZFTCk7Ci0KLQkJU3RyaW5nIG9yaWdpbmFsPSBjcmVhdGVSYW5kb21TdHJpbmcoUkFORE9NX1NUUklOR19MRU5HVEgpOwotCQlmaW5hbCBJRG9jdW1lbnQgZG9jdW1lbnQ9IGNyZWF0ZURvY3VtZW50KG9yaWdpbmFsKTsKLQkJZlRleHRWaWV3ZXIuc2V0RG9jdW1lbnQoZG9jdW1lbnQpOwotCi0JCWRvQ2hhbmdlKGRvY3VtZW50LCBSQU5ET01fUkVQTEFDRV9DT1VOVCk7Ci0KLQkJYXNzZXJ0VHJ1ZShmVW5kb01hbmFnZXIudW5kb2FibGUoKSk7Ci0JCXdoaWxlIChmVW5kb01hbmFnZXIudW5kb2FibGUoKSkKLQkJCWZVbmRvTWFuYWdlci51bmRvKCk7Ci0KLQkJZmluYWwgU3RyaW5nIHJldmVydGVkPSBkb2N1bWVudC5nZXQoKTsKLQkJYXNzZXJ0RXF1YWxzKG9yaWdpbmFsLCByZXZlcnRlZCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGRvQ2hhbmdlKElEb2N1bWVudCBkb2N1bWVudCwgaW50IGNvdW50KSB7Ci0JCXRyeSB7Ci0JCQlTdHJpbmcgYmVmb3JlPSBkb2N1bWVudC5nZXQoKTsKLQotCQkJaWYgKERFQlVHKQotCQkJCVN5c3RlbS5vdXQucHJpbnRsbihiZWZvcmUpOwotCi0JCQlQb3NpdGlvbiBbXSBwb3NpdGlvbnM9IG5ldyBQb3NpdGlvbltjb3VudF07Ci0JCQlTdHJpbmcgW10gc3RyaW5ncz0gbmV3IFN0cmluZ1tjb3VudF07Ci0JCQlmb3IgKGludCBpPSAwOyBpIDwgY291bnQ7IGkrKykgewotCQkJCWZpbmFsIFBvc2l0aW9uIHBvc2l0aW9uPSBjcmVhdGVSYW5kb21Qb3NpdGlvblBvaXNzb24oZG9jdW1lbnQuZ2V0TGVuZ3RoKCkpOwotCQkJCWZpbmFsIFN0cmluZyBzdHJpbmc9IGNyZWF0ZVJhbmRvbVN0cmluZ1BvaXNzb24oKTsKLQkJCQlkb2N1bWVudC5yZXBsYWNlKHBvc2l0aW9uLmdldE9mZnNldCgpLCBwb3NpdGlvbi5nZXRMZW5ndGgoKSwgc3RyaW5nKTsKLQkJCQlwb3NpdGlvbnNbaV09IHBvc2l0aW9uOwotCQkJCXN0cmluZ3NbaV09IHN0cmluZzsKLQkJCX0KLQotCQkJaWYgKERFQlVHKSB7Ci0JCQkJU3lzdGVtLm91dC5wcmludCgieyAiKTsKLQkJCQlmb3IgKGludCBpPTA7IGk8Y291bnQ7IGkrKykgewotCQkJCQlTeXN0ZW0ub3V0LnByaW50KHBvc2l0aW9uc1tpXS5nZXRPZmZzZXQoKSk7Ci0JCQkJCVN5c3RlbS5vdXQucHJpbnQoIiwgIik7Ci0JCQkJCVN5c3RlbS5vdXQucHJpbnQocG9zaXRpb25zW2ldLmdldExlbmd0aCgpKTsKLQkJCQkJU3lzdGVtLm91dC5wcmludCgiLCAiKTsKLQkJCQl9Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCIgfSIpOwotCQkJCVN5c3RlbS5vdXQucHJpbnQoInsgIik7Ci0JCQkJZm9yIChpbnQgaT0wOyBpPGNvdW50OyBpKyspIHsKLQkJCQkJU3lzdGVtLm91dC5wcmludCgiXCIiKTsKLQkJCQkJU3lzdGVtLm91dC5wcmludChzdHJpbmdzW2ldKTsKLQkJCQkJU3lzdGVtLm91dC5wcmludCgiXCIsICIpOwotCQkJCX0KLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIiB9Iik7Ci0JCQl9Ci0JCX0gY2F0Y2ggKEJhZExvY2F0aW9uRXhjZXB0aW9uIGUpIHsKLQkJCWFzc2VydFRydWUoZmFsc2UpOwotCQl9Ci0JfQotCi0JLy8gcmVwZWF0YWJsZSB0ZXN0IGNhc2UgZm9yIGNvbXBhcmluZyBzdWNjZXNzL2ZhaWx1cmUgYW1vbmcgZGlmZmVyZW50IHRlc3RzCi0JcHJpdmF0ZSB2b2lkIGRvUmVwZWF0YWJsZUNoYW5nZShJRG9jdW1lbnQgZG9jdW1lbnQpIHsKLQkJYXNzZXJ0VHJ1ZShQT1NJVElPTlMubGVuZ3RoID49ICgyICogUkVQTEFDRU1FTlRTLmxlbmd0aCkpOwotCQl0cnkgewotCQkJZm9yIChpbnQgaT0gMDsgaSA8IFJFUExBQ0VNRU5UUy5sZW5ndGg7IGkrKykgewotCQkJCWludCBvZmZzZXQ9IFBPU0lUSU9OU1tpKjJdOwotCQkJCWludCBsZW5ndGg9IFBPU0lUSU9OU1tpKjIrMV07Ci0JCQkJaWYgKGRvY3VtZW50LmdldExlbmd0aCgpID4gb2Zmc2V0ICsgbGVuZ3RoKQotCQkJCQlkb2N1bWVudC5yZXBsYWNlKG9mZnNldCwgbGVuZ3RoLCBSRVBMQUNFTUVOVFNbaV0pOwotCQkJCWVsc2UKLQkJCQkJZG9jdW1lbnQucmVwbGFjZSgwLDAsIFJFUExBQ0VNRU5UU1tpXSk7Ci0JCQl9Ci0JCX0gY2F0Y2ggKEJhZExvY2F0aW9uRXhjZXB0aW9uIGUpIHsKLQkJCWFzc2VydFRydWUoZmFsc2UpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdExvb3BSYW5kb21BY2Nlc3NBc0NvbXBvdW5kKCkgewotCQlpbnQgaT0gMDsKLQkJd2hpbGUgKGkgPCBMT09QX0NPVU5UKSB7Ci0JCQlmVW5kb01hbmFnZXIucmVzZXQoKTsKLQkJCXRlc3RSYW5kb21BY2Nlc3NBc0NvbXBvdW5kKCk7Ci0JCQlpKys7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TG9vcFJhbmRvbUFjY2VzcygpIHsKLQkJaW50IGk9IDA7Ci0JCXdoaWxlIChpIDwgTE9PUF9DT1VOVCkgewotCQkJZlVuZG9NYW5hZ2VyLnJlc2V0KCk7Ci0JCQl0ZXN0UmFuZG9tQWNjZXNzKCk7Ci0JCQlpKys7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TG9vcFJhbmRvbUFjY2Vzc0FzVW5jbG9zZWRDb21wb3VuZCgpIHsKLQkJaW50IGk9IDA7Ci0JCXdoaWxlIChpIDwgTE9PUF9DT1VOVCkgewotCQkJZlVuZG9NYW5hZ2VyLnJlc2V0KCk7Ci0JCQl0ZXN0UmFuZG9tQWNjZXNzQXNVbmNsb3NlZENvbXBvdW5kKCk7Ci0JCQlpKys7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TG9vcENvbnZlcnRMaW5lRGVsaW1pdGVycygpIHsKLQkJaW50IGk9IDA7Ci0JCXdoaWxlIChpIDwgTE9PUF9DT1VOVCkgewotCQkJZlVuZG9NYW5hZ2VyLnJlc2V0KCk7Ci0JCQl0ZXN0Q29udmVydExpbmVEZWxpbWl0ZXJzKCk7Ci0JCQlpKys7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TG9vcFJhbmRvbUFjY2Vzc1dpdGhNaXhlZENvbXBvdW5kKCkgewotCQlpbnQgaT0gMDsKLQkJd2hpbGUgKGkgPCBMT09QX0NPVU5UKSB7Ci0JCQlmVW5kb01hbmFnZXIucmVzZXQoKTsKLQkJCXRlc3RSYW5kb21BY2Nlc3NXaXRoTWl4ZWRDb21wb3VuZCgpOwotCQkJaSsrOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFJhbmRvbUFjY2Vzc0FzQ29tcG91bmQoKSB7Ci0JCWZpbmFsIGludCBSQU5ET01fU1RSSU5HX0xFTkdUSD0gNTA7Ci0JCWZpbmFsIGludCBSQU5ET01fUkVQTEFDRV9DT1VOVD0gMTAwOwotCi0JCWFzc2VydFRydWUoUkFORE9NX1JFUExBQ0VfQ09VTlQgPj0gMSk7Ci0JCWFzc2VydFRydWUoUkFORE9NX1JFUExBQ0VfQ09VTlQgPD0gTUFYX1VORE9fTEVWRUwpOwotCi0JCVN0cmluZyBvcmlnaW5hbD0gY3JlYXRlUmFuZG9tU3RyaW5nKFJBTkRPTV9TVFJJTkdfTEVOR1RIKTsKLQkJZmluYWwgSURvY3VtZW50IGRvY3VtZW50PSBjcmVhdGVEb2N1bWVudChvcmlnaW5hbCk7Ci0JCWZUZXh0Vmlld2VyLnNldERvY3VtZW50KGRvY3VtZW50KTsKLQotCQlmVW5kb01hbmFnZXIuYmVnaW5Db21wb3VuZENoYW5nZSgpOwotCQlkb0NoYW5nZShkb2N1bWVudCwgUkFORE9NX1JFUExBQ0VfQ09VTlQpOwotCQlmVW5kb01hbmFnZXIuZW5kQ29tcG91bmRDaGFuZ2UoKTsKLQotCQlhc3NlcnRUcnVlKGZVbmRvTWFuYWdlci51bmRvYWJsZSgpKTsKLQkJd2hpbGUgKGZVbmRvTWFuYWdlci51bmRvYWJsZSgpKQotCQkJZlVuZG9NYW5hZ2VyLnVuZG8oKTsKLQkJYXNzZXJ0VHJ1ZSghZlVuZG9NYW5hZ2VyLnVuZG9hYmxlKCkpOwotCi0JCWZpbmFsIFN0cmluZyByZXZlcnRlZD0gZG9jdW1lbnQuZ2V0KCk7Ci0KLQkJYXNzZXJ0RXF1YWxzKG9yaWdpbmFsLCByZXZlcnRlZCk7Ci0JfQotCi0JLyoqCi0JICogVGVzdCBjYXNlIGZvciBodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9ODgxNzIKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0UmFuZG9tQWNjZXNzQXNVbmNsb3NlZENvbXBvdW5kKCkgewotCi0JCWZpbmFsIGludCBSQU5ET01fU1RSSU5HX0xFTkdUSD0gNTA7Ci0JCWZpbmFsIGludCBSQU5ET01fUkVQTEFDRV9DT1VOVD0gMTAwOwotCi0JCWFzc2VydFRydWUoUkFORE9NX1JFUExBQ0VfQ09VTlQgPj0gMSk7Ci0JCWFzc2VydFRydWUoUkFORE9NX1JFUExBQ0VfQ09VTlQgPD0gTUFYX1VORE9fTEVWRUwpOwotCi0JCVN0cmluZyBvcmlnaW5hbD0gY3JlYXRlUmFuZG9tU3RyaW5nKFJBTkRPTV9TVFJJTkdfTEVOR1RIKTsKLQkJZmluYWwgSURvY3VtZW50IGRvY3VtZW50PSBjcmVhdGVEb2N1bWVudChvcmlnaW5hbCk7Ci0JCWZUZXh0Vmlld2VyLnNldERvY3VtZW50KGRvY3VtZW50KTsKLQotCQlmVW5kb01hbmFnZXIuYmVnaW5Db21wb3VuZENoYW5nZSgpOwotCQlkb0NoYW5nZShkb2N1bWVudCwgUkFORE9NX1JFUExBQ0VfQ09VTlQpOwotCQkvLyBkbyBub3QgY2xvc2UgdGhlIGNvbXBvdW5kLgotCQkvLyBmVW5kb01hbmFnZXIuZW5kQ29tcG91bmRDaGFuZ2UoKTsKLQotCQlhc3NlcnRUcnVlKGZVbmRvTWFuYWdlci51bmRvYWJsZSgpKTsKLQkJd2hpbGUgKGZVbmRvTWFuYWdlci51bmRvYWJsZSgpKQotCQkJZlVuZG9NYW5hZ2VyLnVuZG8oKTsKLQkJYXNzZXJ0VHJ1ZSghZlVuZG9NYW5hZ2VyLnVuZG9hYmxlKCkpOwotCi0JCWZpbmFsIFN0cmluZyByZXZlcnRlZD0gZG9jdW1lbnQuZ2V0KCk7Ci0KLQkJYXNzZXJ0RXF1YWxzKG9yaWdpbmFsLCByZXZlcnRlZCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFJhbmRvbUFjY2Vzc1dpdGhNaXhlZENvbXBvdW5kKCkgewotCi0JCWZpbmFsIGludCBSQU5ET01fU1RSSU5HX0xFTkdUSD0gNTA7Ci0JCWZpbmFsIGludCBSQU5ET01fUkVQTEFDRV9DT1VOVD0gMTA7Ci0JCWZpbmFsIGludCBOVU1CRVJfQ09NUE9VTkRTPSA1OwotCQlmaW5hbCBpbnQgTlVNQkVSX0FUT01JQ19QRVJfQ09NUE9VTkQ9IDM7Ci0KLQkJYXNzZXJ0VHJ1ZShSQU5ET01fUkVQTEFDRV9DT1VOVCA+PSAxKTsKLQkJYXNzZXJ0VHJ1ZShOVU1CRVJfQ09NUE9VTkRTICogKDEgKyBOVU1CRVJfQVRPTUlDX1BFUl9DT01QT1VORCkgKiBSQU5ET01fUkVQTEFDRV9DT1VOVCA8PSBNQVhfVU5ET19MRVZFTCk7Ci0KLQkJU3RyaW5nIG9yaWdpbmFsPSBjcmVhdGVSYW5kb21TdHJpbmcoUkFORE9NX1NUUklOR19MRU5HVEgpOwotCQlmaW5hbCBJRG9jdW1lbnQgZG9jdW1lbnQ9IGNyZWF0ZURvY3VtZW50KG9yaWdpbmFsKTsKLQkJZlRleHRWaWV3ZXIuc2V0RG9jdW1lbnQoZG9jdW1lbnQpOwotCi0JCWZvciAoaW50IGk9IDA7IGkgPCBOVU1CRVJfQ09NUE9VTkRTOyBpKyspIHsKLQkJCWZVbmRvTWFuYWdlci5iZWdpbkNvbXBvdW5kQ2hhbmdlKCk7Ci0JCQlkb0NoYW5nZShkb2N1bWVudCwgUkFORE9NX1JFUExBQ0VfQ09VTlQpOwotCQkJZlVuZG9NYW5hZ2VyLmVuZENvbXBvdW5kQ2hhbmdlKCk7Ci0JCQlhc3NlcnRUcnVlKGZVbmRvTWFuYWdlci51bmRvYWJsZSgpKTsKLQkJCWZvciAoaW50IGo9IDA7IGogPCBOVU1CRVJfQVRPTUlDX1BFUl9DT01QT1VORDsgaisrKSB7Ci0JCQkJZG9DaGFuZ2UoZG9jdW1lbnQsIFJBTkRPTV9SRVBMQUNFX0NPVU5UKTsKLQkJCQlhc3NlcnRUcnVlKGZVbmRvTWFuYWdlci51bmRvYWJsZSgpKTsKLQkJCX0KLQkJfQotCi0JCWFzc2VydFRydWUoZlVuZG9NYW5hZ2VyLnVuZG9hYmxlKCkpOwotCQl3aGlsZSAoZlVuZG9NYW5hZ2VyLnVuZG9hYmxlKCkpCi0JCQlmVW5kb01hbmFnZXIudW5kbygpOwotCQlhc3NlcnRUcnVlKCFmVW5kb01hbmFnZXIudW5kb2FibGUoKSk7Ci0KLQkJZmluYWwgU3RyaW5nIHJldmVydGVkPSBkb2N1bWVudC5nZXQoKTsKLQotCQlhc3NlcnRFcXVhbHMob3JpZ2luYWwsIHJldmVydGVkKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UmVwZWF0YWJsZUFjY2VzcygpIHsKLQkJYXNzZXJ0VHJ1ZShSRVBMQUNFTUVOVFMubGVuZ3RoIDw9IE1BWF9VTkRPX0xFVkVMKTsKLQotCQlmaW5hbCBJRG9jdW1lbnQgZG9jdW1lbnQ9IGNyZWF0ZURvY3VtZW50KElOSVRJQUxfRE9DVU1FTlRfQ09OVEVOVCk7Ci0JCWZUZXh0Vmlld2VyLnNldERvY3VtZW50KGRvY3VtZW50KTsKLQotCQlkb1JlcGVhdGFibGVDaGFuZ2UoZG9jdW1lbnQpOwotCi0JCWFzc2VydFRydWUoZlVuZG9NYW5hZ2VyLnVuZG9hYmxlKCkpOwotCQl3aGlsZSAoZlVuZG9NYW5hZ2VyLnVuZG9hYmxlKCkpCi0JCQlmVW5kb01hbmFnZXIudW5kbygpOwotCi0JCWZpbmFsIFN0cmluZyByZXZlcnRlZD0gZG9jdW1lbnQuZ2V0KCk7Ci0KLQkJYXNzZXJ0RXF1YWxzKElOSVRJQUxfRE9DVU1FTlRfQ09OVEVOVCwgcmV2ZXJ0ZWQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RSZXBlYXRhYmxlQWNjZXNzQXNDb21wb3VuZCgpIHsKLQkJYXNzZXJ0VHJ1ZShSRVBMQUNFTUVOVFMubGVuZ3RoIDw9IE1BWF9VTkRPX0xFVkVMKTsKLQotCQlmaW5hbCBJRG9jdW1lbnQgZG9jdW1lbnQ9IGNyZWF0ZURvY3VtZW50KElOSVRJQUxfRE9DVU1FTlRfQ09OVEVOVCk7Ci0JCWZUZXh0Vmlld2VyLnNldERvY3VtZW50KGRvY3VtZW50KTsKLQotCQlmVW5kb01hbmFnZXIuYmVnaW5Db21wb3VuZENoYW5nZSgpOwotCQlkb1JlcGVhdGFibGVDaGFuZ2UoZG9jdW1lbnQpOwotCQlmVW5kb01hbmFnZXIuZW5kQ29tcG91bmRDaGFuZ2UoKTsKLQotCQlhc3NlcnRUcnVlKGZVbmRvTWFuYWdlci51bmRvYWJsZSgpKTsKLQkJZlVuZG9NYW5hZ2VyLnVuZG8oKTsKLQkJLy8gd2l0aCBhIHNpbmdsZSBjb21wb3VuZCwgdGhlcmUgc2hvdWxkIGJlIG9ubHkgb25lIHVuZG8KLQkJYXNzZXJ0RmFsc2UoZlVuZG9NYW5hZ2VyLnVuZG9hYmxlKCkpOwotCi0JCWZpbmFsIFN0cmluZyByZXZlcnRlZD0gZG9jdW1lbnQuZ2V0KCk7Ci0KLQkJYXNzZXJ0RXF1YWxzKElOSVRJQUxfRE9DVU1FTlRfQ09OVEVOVCwgcmV2ZXJ0ZWQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RSZXBlYXRhYmxlQWNjZXNzQXNVbmNsb3NlZENvbXBvdW5kKCkgewotCQlhc3NlcnRUcnVlKFJFUExBQ0VNRU5UUy5sZW5ndGggPD0gTUFYX1VORE9fTEVWRUwpOwotCi0JCWZpbmFsIElEb2N1bWVudCBkb2N1bWVudD0gY3JlYXRlRG9jdW1lbnQoSU5JVElBTF9ET0NVTUVOVF9DT05URU5UKTsKLQkJZlRleHRWaWV3ZXIuc2V0RG9jdW1lbnQoZG9jdW1lbnQpOwotCi0JCWZVbmRvTWFuYWdlci5iZWdpbkNvbXBvdW5kQ2hhbmdlKCk7Ci0JCWRvUmVwZWF0YWJsZUNoYW5nZShkb2N1bWVudCk7Ci0KLQkJYXNzZXJ0VHJ1ZShmVW5kb01hbmFnZXIudW5kb2FibGUoKSk7Ci0JCXdoaWxlIChmVW5kb01hbmFnZXIudW5kb2FibGUoKSkKLQkJCWZVbmRvTWFuYWdlci51bmRvKCk7Ci0KLQkJZmluYWwgU3RyaW5nIHJldmVydGVkPSBkb2N1bWVudC5nZXQoKTsKLQotCQlhc3NlcnRFcXVhbHMoSU5JVElBTF9ET0NVTUVOVF9DT05URU5ULCByZXZlcnRlZCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFJlcGVhdGFibGVBY2Nlc3NXaXRoTWl4ZWRBbmRFbXB0eUNvbXBvdW5kKCkgewotCQlhc3NlcnRUcnVlKFJFUExBQ0VNRU5UUy5sZW5ndGggKyAyIDw9IE1BWF9VTkRPX0xFVkVMKTsKLQotCQlmaW5hbCBJRG9jdW1lbnQgZG9jdW1lbnQ9IGNyZWF0ZURvY3VtZW50KElOSVRJQUxfRE9DVU1FTlRfQ09OVEVOVCk7Ci0JCWZUZXh0Vmlld2VyLnNldERvY3VtZW50KGRvY3VtZW50KTsKLQotCQlmVW5kb01hbmFnZXIuYmVnaW5Db21wb3VuZENoYW5nZSgpOwotCQlkb1JlcGVhdGFibGVDaGFuZ2UoZG9jdW1lbnQpOwotCQlmVW5kb01hbmFnZXIuZW5kQ29tcG91bmRDaGFuZ2UoKTsKLQkJYXNzZXJ0VHJ1ZShmVW5kb01hbmFnZXIudW5kb2FibGUoKSk7Ci0KLQkJLy8gaW5zZXJ0IGFuIGVtcHR5IGNvbXBvdW5kCi0JCWZVbmRvTWFuYWdlci5iZWdpbkNvbXBvdW5kQ2hhbmdlKCk7Ci0JCWZVbmRvTWFuYWdlci5lbmRDb21wb3VuZENoYW5nZSgpOwotCi0JICAgIC8vIGluc2VydCB0aGUgYXRvbWljIGNoYW5nZXMKLQkJZG9SZXBlYXRhYmxlQ2hhbmdlKGRvY3VtZW50KTsKLQotCQlhc3NlcnRUcnVlKGZVbmRvTWFuYWdlci51bmRvYWJsZSgpKTsKLQkJd2hpbGUgKGZVbmRvTWFuYWdlci51bmRvYWJsZSgpKQotCQkJZlVuZG9NYW5hZ2VyLnVuZG8oKTsKLQkJYXNzZXJ0VHJ1ZSghZlVuZG9NYW5hZ2VyLnVuZG9hYmxlKCkpOwotCi0JCWZpbmFsIFN0cmluZyByZXZlcnRlZD0gZG9jdW1lbnQuZ2V0KCk7Ci0KLQkJYXNzZXJ0RXF1YWxzKElOSVRJQUxfRE9DVU1FTlRfQ09OVEVOVCwgcmV2ZXJ0ZWQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3REb2N1bWVudFN0YW1wKCkgewotCQlmaW5hbCBJRG9jdW1lbnQgZG9jdW1lbnQ9IGNyZWF0ZURvY3VtZW50KElOSVRJQUxfRE9DVU1FTlRfQ09OVEVOVCk7Ci0JCWZUZXh0Vmlld2VyLnNldERvY3VtZW50KGRvY3VtZW50KTsKLQkJbG9uZyBzdGFtcD0gKChJRG9jdW1lbnRFeHRlbnNpb240KWRvY3VtZW50KS5nZXRNb2RpZmljYXRpb25TdGFtcCgpOwotCQlkb0NoYW5nZShkb2N1bWVudCwgMSk7Ci0JCWZVbmRvTWFuYWdlci51bmRvKCk7Ci0JCWFzc2VydEVxdWFscyhzdGFtcCwgKChJRG9jdW1lbnRFeHRlbnNpb240KWRvY3VtZW50KS5nZXRNb2RpZmljYXRpb25TdGFtcCgpKTsKLQotCX0KLQotCS8vIHNlZTogaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTEwOTEwNAotCXB1YmxpYyB2b2lkIHRlc3REb2N1bWVudFN0YW1wMigpIHRocm93cyBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7Ci0JCWZpbmFsIElEb2N1bWVudCBkb2N1bWVudD0gY3JlYXRlRG9jdW1lbnQoIiIpOwotCQlmaW5hbCBpbnQgc3RyaW5nTGVuZ3RoPSAxMzsKLQkJZlRleHRWaWV3ZXIuc2V0RG9jdW1lbnQoZG9jdW1lbnQpOwotCQlkb2N1bWVudC5yZXBsYWNlKDAsIDAsIGNyZWF0ZVJhbmRvbVN0cmluZyhzdHJpbmdMZW5ndGgpKTsKLQkJbG9uZyBzdGFtcD0gKChJRG9jdW1lbnRFeHRlbnNpb240KWRvY3VtZW50KS5nZXRNb2RpZmljYXRpb25TdGFtcCgpOwotCQlmVW5kb01hbmFnZXIudW5kbygpOwotCQlkb2N1bWVudC5yZXBsYWNlKDAsIDAsIGNyZWF0ZVJhbmRvbVN0cmluZyhzdHJpbmdMZW5ndGgpKTsKLQkJYXNzZXJ0RmFsc2Uoc3RhbXAgPT0gKChJRG9jdW1lbnRFeHRlbnNpb240KWRvY3VtZW50KS5nZXRNb2RpZmljYXRpb25TdGFtcCgpKTsKLQotCX0KLQotCXByaXZhdGUgc3RhdGljIFN0cmluZyBjcmVhdGVSYW5kb21TdHJpbmcoaW50IGxlbmd0aCkgewotCQlmaW5hbCBTdHJpbmdCdWZmZXIgYnVmZmVyPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0KLQkJZm9yIChpbnQgaT0gMDsgaSA8IGxlbmd0aDsgaSsrKQotCQkJYnVmZmVyLmFwcGVuZChnZXRSYW5kb21DaGFyYWN0ZXIoKSk7Ci0KLQkJcmV0dXJuIGJ1ZmZlci50b1N0cmluZygpOwotCX0KLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIGNoYXIgZ2V0UmFuZG9tQ2hhcmFjdGVyKCkgewotCQkvLyBYWFggc2hvdWxkIGluY2x1ZGUgXHQKLQkJcmV0dXJuIChjaGFyKSAoMzIgKyA5NSAqIE1hdGgucmFuZG9tKCkpOwotCX0KLQotCXByaXZhdGUgc3RhdGljIFN0cmluZyBjcmVhdGVSYW5kb21TdHJpbmdQb2lzc29uKCkgewotCQlmaW5hbCBpbnQgbGVuZ3RoPSBnZXRSYW5kb21Qb2lzc29uVmFsdWUoMik7Ci0JCXJldHVybiBjcmVhdGVSYW5kb21TdHJpbmcobGVuZ3RoKTsKLQl9Ci0JCi0JcHJpdmF0ZSBJRG9jdW1lbnQgY3JlYXRlRG9jdW1lbnQoU3RyaW5nIGNvbnRlbnRzKSB7Ci0JCUlNb2RlbEhhbmRsZXIgaGFuZGxlciA9IE1vZGVsSGFuZGxlclJlZ2lzdHJ5LmdldEluc3RhbmNlKCkuZ2V0SGFuZGxlckZvckNvbnRlbnRUeXBlSWQoIm9yZy5lY2xpcHNlLmNvcmUucnVudGltZS54bWwiKTsKLQkJQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQgPSAoQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQpIGhhbmRsZXIuZ2V0RG9jdW1lbnRMb2FkZXIoKS5jcmVhdGVOZXdTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJZG9jdW1lbnQuc2V0KGNvbnRlbnRzKTsKLS8vCQlyZXR1cm4gbmV3IERvY3VtZW50KGNvbnRlbnRzKTsKLQkJcmV0dXJuIGRvY3VtZW50OwotCX0KLQkKLQlwcml2YXRlIHN0YXRpYyBQb3NpdGlvbiBjcmVhdGVSYW5kb21Qb3NpdGlvblBvaXNzb24oaW50IGRvY3VtZW50TGVuZ3RoKSB7Ci0KLQkJZmxvYXQgcmFuZG9tPSAoZmxvYXQpIE1hdGgucmFuZG9tKCk7Ci0JCWludCBvZmZzZXQ9IChpbnQpIChyYW5kb20gKiAoZG9jdW1lbnRMZW5ndGggKyAxKSk7Ci0KLQkJLy8gQ2F0Y2ggcG90ZW50aWFsIHJvdW5kaW5nIGlzc3VlCi0JCWlmIChvZmZzZXQgPT0gZG9jdW1lbnRMZW5ndGggKyAxKQotCQkJb2Zmc2V0PSBkb2N1bWVudExlbmd0aDsKLQotCQlpbnQgbGVuZ3RoPSBnZXRSYW5kb21Qb2lzc29uVmFsdWUoMik7Ci0JCWlmIChvZmZzZXQgKyBsZW5ndGggPiBkb2N1bWVudExlbmd0aCkKLQkJCWxlbmd0aD0gZG9jdW1lbnRMZW5ndGggLSBvZmZzZXQ7Ci0KLQkJcmV0dXJuIG5ldyBQb3NpdGlvbihvZmZzZXQsIGxlbmd0aCk7Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgaW50IGdldFJhbmRvbVBvaXNzb25WYWx1ZShpbnQgbWVhbikgewotCQlmaW5hbCBpbnQgTUFYX1ZBTFVFPSAxMDsKLQotCQlmaW5hbCBmbG9hdCByYW5kb209IChmbG9hdCkgTWF0aC5yYW5kb20oKTsKLQkJZmxvYXQgcHJvYmFiaWxpdHk9IDA7Ci0JCWludCBpPSAwOwotCQl3aGlsZSAocHJvYmFiaWxpdHkgPCAxICYmIGkgPCBNQVhfVkFMVUUpIHsKLQkJCXByb2JhYmlsaXR5ICs9IGdldFBvaXNzb25EaXN0cmlidXRpb24obWVhbiwgaSk7Ci0JCQlpZiAocmFuZG9tIDw9IHByb2JhYmlsaXR5KQotCQkJCWJyZWFrOwotCQkJaSsrOwotCQl9Ci0JCXJldHVybiBpOwotCX0KLQotCXByaXZhdGUgc3RhdGljIGZsb2F0IGdldFBvaXNzb25EaXN0cmlidXRpb24oZmxvYXQgbGFtYmRhLCBpbnQgaykgewotCQlyZXR1cm4gKGZsb2F0KSAoTWF0aC5leHAoLWxhbWJkYSkgKiBNYXRoLnBvdyhsYW1iZGEsIGspIC8gZmFjdWx0eShrKSk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgZmFjdWx0eSBvZiBrLgotCSAqCi0JICogQHBhcmFtIGsgdGhlIDxjb2RlPmludDwvY29kZT4gZm9yIHdoaWNoIHRvIGdldCB0aGUgZmFjdWx0eQotCSAqIEByZXR1cm4gdGhlIGZhY3VsdHkKLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgZmFjdWx0eShpbnQgaykgewotCQlyZXR1cm4gayA9PSAwCi0JCQk/IDEKLQkJCTogayAqIGZhY3VsdHkoayAtIDEpOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvRGVmYXVsdFBhaXJNYXRjaGVyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvRGVmYXVsdFBhaXJNYXRjaGVyVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZWFmYzQ1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL0RlZmF1bHRQYWlyTWF0Y2hlclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBDaHJpc3RpYW4gUGxlc25lciBIYW5zZW4gKHBsZXNuZXJAcXVlbnRhLm9yZykgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50RXh0ZW5zaW9uMzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnNvdXJjZS5EZWZhdWx0Q2hhcmFjdGVyUGFpck1hdGNoZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5zb3VyY2UuSUNoYXJhY3RlclBhaXJNYXRjaGVyOwotCi0vKioKLSAqIFRlc3RzIGZvciB0aGUgZGVmYXVsdCBwYWlyIG1hdGNoZXIuCi0gKgotICogQHNpbmNlIDMuMwotICovCi1wdWJsaWMgY2xhc3MgRGVmYXVsdFBhaXJNYXRjaGVyVGVzdCBleHRlbmRzIEFic3RyYWN0UGFpck1hdGNoZXJUZXN0IHsKLQotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJcmV0dXJuIG5ldyBUZXN0U3VpdGUoRGVmYXVsdFBhaXJNYXRjaGVyVGVzdC5jbGFzcyk7Ci0JfQotCi0JcHJvdGVjdGVkIElDaGFyYWN0ZXJQYWlyTWF0Y2hlciBjcmVhdGVNYXRjaGVyKFN0cmluZyBjaGFycykgewotCQlyZXR1cm4gbmV3IERlZmF1bHRDaGFyYWN0ZXJQYWlyTWF0Y2hlcihjaGFycy50b0NoYXJBcnJheSgpLAotCQkJCWdldERvY3VtZW50UGFydGl0aW9uaW5nKCkpOwotCX0KLQotCS8qCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnRlc3RzLkFic3RyYWN0UGFpck1hdGNoZXJUZXN0I2dldERvY3VtZW50UGFydGl0aW9uaW5nKCkKLQkgKiBAc2luY2UgMy4zCi0JICovCi0JcHJvdGVjdGVkIFN0cmluZyBnZXREb2N1bWVudFBhcnRpdGlvbmluZygpIHsKLQkJcmV0dXJuIElEb2N1bWVudEV4dGVuc2lvbjMuREVGQVVMVF9QQVJUSVRJT05JTkc7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9EZWZhdWx0VW5kb01hbmFnZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9EZWZhdWx0VW5kb01hbmFnZXJUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkYTZiOGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvRGVmYXVsdFVuZG9NYW5hZ2VyVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpmYWNlLnRleHQudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5EZWZhdWx0VW5kb01hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JVW5kb01hbmFnZXI7Ci0KLS8qKgotICogVGVzdHMgZm9yIERlZmF1bHRVbmRvTWFuYWdlci4KLSAqCi0gKiBAc2luY2UgMy4yCi0gKi8KLXB1YmxpYyBjbGFzcyBEZWZhdWx0VW5kb01hbmFnZXJUZXN0IGV4dGVuZHMgQWJzdHJhY3RVbmRvTWFuYWdlclRlc3QgewotCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IFRlc3RTdWl0ZShEZWZhdWx0VW5kb01hbmFnZXJUZXN0LmNsYXNzKTsKLQl9Ci0KLQkvKgotCSAqIEBzZWUgVGVzdENhc2UjVGVzdENhc2UoU3RyaW5nKQotCSAqLwotCXB1YmxpYyBEZWZhdWx0VW5kb01hbmFnZXJUZXN0KGZpbmFsIFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCS8qCi0JICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnRlc3RzLkFic3RyYWN0VW5kb01hbmFnZXJUZXN0I2NyZWF0ZVVuZG9NYW5hZ2VyKGludCkKLQkgKiBAc2luY2UgMy4yCi0JICovCi0JcHJvdGVjdGVkIElVbmRvTWFuYWdlciBjcmVhdGVVbmRvTWFuYWdlcihpbnQgbWF4VW5kb0xldmVsKSB7Ci0JCXJldHVybiBuZXcgRGVmYXVsdFVuZG9NYW5hZ2VyKG1heFVuZG9MZXZlbCk7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9IVE1MMlRleHRSZWFkZXJUZXN0ZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL0hUTUwyVGV4dFJlYWRlclRlc3Rlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZmE0YzRhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL0hUTUwyVGV4dFJlYWRlclRlc3Rlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpmYWNlLnRleHQudGVzdHM7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nUmVhZGVyOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5pbnRlcm5hbC50ZXh0Lmh0bWwuSFRNTDJUZXh0UmVhZGVyOwotCi0KLXB1YmxpYyBjbGFzcyBIVE1MMlRleHRSZWFkZXJUZXN0ZXIgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHPSBmYWxzZTsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBMRD0gU3lzdGVtLmdldFByb3BlcnR5KCJsaW5lLnNlcGFyYXRvciIsICJcbiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQotCXB1YmxpYyBIVE1MMlRleHRSZWFkZXJUZXN0ZXIoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IFRlc3RTdWl0ZShIVE1MMlRleHRSZWFkZXJUZXN0ZXIuY2xhc3MpOwotCX0KLQotCXByaXZhdGUgdm9pZCB2ZXJpZnkoU3RyaW5nIGlucHV0LCBTdHJpbmcgZXhwZWN0ZWRPdXRwdXQpIHRocm93cyBJT0V4Y2VwdGlvbnsKLQkJUmVhZGVyIHJlYWRlcj0gbmV3IFN0cmluZ1JlYWRlcihpbnB1dCk7Ci0JCUhUTUwyVGV4dFJlYWRlciBodG1sUmVhZGVyPSBuZXcgSFRNTDJUZXh0UmVhZGVyKHJlYWRlciwgbnVsbCk7Ci0JCVN0cmluZyByZXN1bHQ9IGh0bWxSZWFkZXIuZ2V0U3RyaW5nKCk7Ci0JCWlmIChERUJVRykKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiPCIrIHJlc3VsdCArIi8+Iik7Ci0JCWFzc2VydEVxdWFscyhleHBlY3RlZE91dHB1dCwgcmVzdWx0KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0MCgpIHRocm93cyBJT0V4Y2VwdGlvbnsKLQkJU3RyaW5nIHN0cmluZz0gIjxjb2RlPjM8NTxjb2RlPiI7Ci0JCVN0cmluZyBleHBlY3RlZD0gIjM8NSI7Ci0JCXZlcmlmeShzdHJpbmcsIGV4cGVjdGVkKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0MSgpIHRocm93cyBJT0V4Y2VwdGlvbnsKLQkJU3RyaW5nIHN0cmluZz0gIjxkbD48ZHQ+QGF1dGhvcjwvZHQ+PGRkPkZvbyBCYXI8L2RkPjwvZGw+IjsKLQkJU3RyaW5nIGV4cGVjdGVkPSBMRCsgIkBhdXRob3IiK0xEKyJcdEZvbyBCYXIiK0xEOwotCQl2ZXJpZnkoc3RyaW5nLCBleHBlY3RlZCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdDIoKSB0aHJvd3MgSU9FeGNlcHRpb257Ci0JCVN0cmluZyBzdHJpbmc9ICI8Y29kZT4zPjU8Y29kZT4iOwotCQlTdHJpbmcgZXhwZWN0ZWQ9ICIzPjUiOwotCQl2ZXJpZnkoc3RyaW5nLCBleHBlY3RlZCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdDMoKSB0aHJvd3MgSU9FeGNlcHRpb257Ci0JCVN0cmluZyBzdHJpbmc9ICI8YSBocmVmPSBcIjxwPnRoaXMgaXMgb25seSBhIHN0cmluZyAtIG5vdCBhIHRhZzxwPlwiPnRleHQ8L2E+IjsKLQkJU3RyaW5nIGV4cGVjdGVkPSAidGV4dCI7Ci0JCXZlcmlmeShzdHJpbmcsIGV4cGVjdGVkKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0NCgpIHRocm93cyBJT0V4Y2VwdGlvbnsKLQkJU3RyaW5nIHN0cmluZz0gCSI8aHRtbD48Ym9keSB0ZXh0PVwiIzAwMDAwMFwiIGJnY29sb3I9XCIjRkZGRjg4XCI+PGZvbnQgc2l6ZT0tMT48aDU+dm9pZCBwLkJiLmZlcygpPC9oNT48cD48ZGw+PGR0PlBhcmFtZXRlcnM6PC9kdD48ZGQ+PGI+aTwvYj4gZnJlZCBvciA8Y29kZT5udWxsPC9jb2RlPjwvZGQ+PC9kbD48L2ZvbnQ+PC9ib2R5PjwvaHRtbD4iOwotCQlTdHJpbmcgZXhwZWN0ZWQ9ICJ2b2lkIHAuQmIuZmVzKCkiKyBMRCArIExEICsgTEQrICJQYXJhbWV0ZXJzOiIrIExEICsgIlx0aSBmcmVkIG9yIG51bGwiK0xEOwotCQl2ZXJpZnkoc3RyaW5nLCBleHBlY3RlZCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdDUoKSB0aHJvd3MgSU9FeGNlcHRpb257Ci0JCVN0cmluZyBzdHJpbmc9ICI8Y29kZT4xPDI8Mzw0PC9jb2RlPiI7Ci0JCVN0cmluZyBleHBlY3RlZD0gIjE8MjwzPDQiOwotCQl2ZXJpZnkoc3RyaW5nLCBleHBlY3RlZCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdDYoKSB0aHJvd3MgSU9FeGNlcHRpb257Ci0JCS8vdGVzdCBmb3IgYnVnIDE5MDcwCi0JCVN0cmluZyBzdHJpbmc9ICI8cD5Tb21ldGhpbmcuPHA+U29tZXRoaW5nIG1vcmUuIjsKLQkJU3RyaW5nIGV4cGVjdGVkPSBMRCArICJTb21ldGhpbmcuIiArIExEICsgIlNvbWV0aGluZyBtb3JlLiI7Ci0JCXZlcmlmeShzdHJpbmcsIGV4cGVjdGVkKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q29tbWVudHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJU3RyaW5nIHN0cmluZz0gIjwhLS0gYmVnaW4tdXNlci1kb2MgLS0+bm8gY29tbWVudDwhLS0gZW5kLXVzZXItZG9jIC0tPiI7Ci0JCVN0cmluZyBleHBlY3RlZD0gIm5vIGNvbW1lbnQiOwotCQl2ZXJpZnkoc3RyaW5nLGV4cGVjdGVkKTsKLQl9Ci0KLX0KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvSkZhY2VUZXh0VGVzdFN1aXRlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9KRmFjZVRleHRUZXN0U3VpdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGRjOTg0ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9KRmFjZVRleHRUZXN0U3VpdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotCi0vKioKLSAqIFRlc3QgU3VpdGUgZm9yIG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuCi0gKgotICogQHNpbmNlIDMuMAotICovCi1wdWJsaWMgY2xhc3MgSkZhY2VUZXh0VGVzdFN1aXRlIGV4dGVuZHMgVGVzdFN1aXRlIHsKLQotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJVGVzdFN1aXRlIHN1aXRlPSBuZXcgVGVzdFN1aXRlKCJvcmcuZWNsaXBzZS5qZmFjZS50ZXh0IFRlc3QgU3VpdGUgdXNpbmcgSlNQIEJhc2ljU3RydWN0dXJlZERvY3VtZW50Iik7IC8vJE5PTi1OTFMtMSQKLS8vCQlzdWl0ZS5hZGRUZXN0KEhUTUwyVGV4dFJlYWRlclRlc3Rlci5zdWl0ZSgpKTsKLS8vCQlzdWl0ZS5hZGRUZXN0KFRleHRIb3ZlclBvcHVwVGVzdC5zdWl0ZSgpKTsKLS8vCQlzdWl0ZS5hZGRUZXN0KFRleHRQcmVzZW50YXRpb25UZXN0LnN1aXRlKCkpOwotCQlzdWl0ZS5hZGRUZXN0KERlZmF1bHRVbmRvTWFuYWdlclRlc3Quc3VpdGUoKSk7Ci0JCXN1aXRlLmFkZFRlc3QoVGV4dFZpZXdlclVuZG9NYW5hZ2VyVGVzdC5zdWl0ZSgpKTsKLS8vCQlzdWl0ZS5hZGRUZXN0KFJ1bGVzVGVzdFN1aXRlLnN1aXRlKCkpOwotLy8JCXN1aXRlLmFkZFRlc3QoUmVjb25jaWxlclRlc3RTdWl0ZS5zdWl0ZSgpKTsKLS8vCQlzdWl0ZS5hZGRUZXN0KERlZmF1bHRQYWlyTWF0Y2hlclRlc3Quc3VpdGUoKSk7Ci0JCXJldHVybiBzdWl0ZTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9UZXN0VGV4dEV2ZW50LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9UZXN0VGV4dEV2ZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4NGQ1YmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvVGVzdFRleHRFdmVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpmYWNlLnRleHQudGVzdHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LkRvY3VtZW50RXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5UZXh0RXZlbnQ7Ci0KLQotcHVibGljIGNsYXNzIFRlc3RUZXh0RXZlbnQgZXh0ZW5kcyBUZXh0RXZlbnQgewotCi0JVGVzdFRleHRFdmVudChEb2N1bWVudEV2ZW50IGV2ZW50LCBTdHJpbmcgcmVwbGFjZWRUZXh0KSB7Ci0JCXN1cGVyKGV2ZW50LmdldE9mZnNldCgpLCBldmVudC5nZXRMZW5ndGgoKSwgZXZlbnQuZ2V0VGV4dCgpLCByZXBsYWNlZFRleHQsIGV2ZW50LCB0cnVlKTsKLQl9Ci0KLQlUZXN0VGV4dEV2ZW50KFN0cmluZyB0ZXh0KSB7Ci0JCXN1cGVyKDAsIDAsIHRleHQsIChTdHJpbmcpIG51bGwsIChEb2N1bWVudEV2ZW50KSBudWxsLCB0cnVlKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9UZXN0VGV4dFZpZXdlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvVGVzdFRleHRWaWV3ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDE4NTliMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9UZXN0VGV4dFZpZXdlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDM2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnRlc3RzOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLlN0eWxlZFRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLkNvbG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Qb2ludDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvblByb3ZpZGVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5CYWRMb2NhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LkRvY3VtZW50RXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JQXV0b0luZGVudFN0cmF0ZWd5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50TGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRXZlbnRDb25zdW1lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklGaW5kUmVwbGFjZVRhcmdldDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JVGV4dERvdWJsZUNsaWNrU3RyYXRlZ3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JVGV4dEhvdmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSVRleHRJbnB1dExpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSVRleHRMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklUZXh0T3BlcmF0aW9uVGFyZ2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSVRleHRWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JVW5kb01hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JVmlld3BvcnRMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LlRleHRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LlRleHRQcmVzZW50YXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5zb3VyY2UuQW5ub3RhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnNvdXJjZS5JQW5ub3RhdGlvbkhvdmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuc291cmNlLklBbm5vdGF0aW9uTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5zb3VyY2UuSVNvdXJjZVZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnNvdXJjZS5Tb3VyY2VWaWV3ZXJDb25maWd1cmF0aW9uOwotCi0KLQotCi1wdWJsaWMgY2xhc3MgVGVzdFRleHRWaWV3ZXIgaW1wbGVtZW50cyBJU291cmNlVmlld2VyLCBJRG9jdW1lbnRMaXN0ZW5lciB7Ci0KLQotCXByb3RlY3RlZCBJRG9jdW1lbnQgZkRvY3VtZW50OwotCXByb3RlY3RlZCBMaXN0IGZJbnB1dExpc3RlbmVycz0gbmV3IEFycmF5TGlzdCgpOwotCXByb3RlY3RlZCBMaXN0IGZUZXh0TGlzdGVuZXJzPSBuZXcgQXJyYXlMaXN0KCk7Ci0JcHJvdGVjdGVkIFRleHRQcmVzZW50YXRpb24gZlRleHRQcmVzZW50YXRpb247Ci0JcHJvdGVjdGVkIFBvaW50IGZTZWxlY3Rpb249IG5ldyBQb2ludCgtMSwgLTEpOwotCXByb3RlY3RlZCBTdHJpbmcgZkRlbGV0aW9uOwotCi0JLyoqCi0JICogQHNlZSBJVGV4dFZpZXdlciNzZXREb2N1bWVudChJRG9jdW1lbnQsIGludCwgaW50KQotCSAqLwotCXB1YmxpYyB2b2lkIHNldERvY3VtZW50KElEb2N1bWVudCBkb2N1bWVudCwgaW50IHAxLCBpbnQgcDIpIHsKLQkJc2V0RG9jdW1lbnQoZG9jdW1lbnQpOwotCX0KLQotCS8qKgotCSAqIEBzZWUgSVRleHRWaWV3ZXIjZ2V0RG9jdW1lbnQoKQotCSAqLwotCXB1YmxpYyBJRG9jdW1lbnQgZ2V0RG9jdW1lbnQoKSB7Ci0JCXJldHVybiBmRG9jdW1lbnQ7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJVGV4dFZpZXdlciNzZXREb2N1bWVudChJRG9jdW1lbnQpCi0JICovCi0JcHVibGljIHZvaWQgc2V0RG9jdW1lbnQoSURvY3VtZW50IGRvY3VtZW50KSB7Ci0JCUlEb2N1bWVudCBvbGREb2M9IGZEb2N1bWVudDsKLQkJZmlyZVRleHRJbnB1dENoYW5nZWQob2xkRG9jLCBkb2N1bWVudCwgdHJ1ZSk7Ci0KLQkJaWYgKG9sZERvYyAhPSBudWxsKQotCQkJb2xkRG9jLnJlbW92ZURvY3VtZW50TGlzdGVuZXIodGhpcyk7Ci0KLQkJZkRvY3VtZW50PSBkb2N1bWVudDsKLQotCQlpZiAoZkRvY3VtZW50ICE9IG51bGwpIHsKLQkJCWZpcmVUZXh0Q2hhbmdlZChuZXcgVGVzdFRleHRFdmVudChmRG9jdW1lbnQuZ2V0KCkpKTsKLQkJCWZEb2N1bWVudC5hZGREb2N1bWVudExpc3RlbmVyKHRoaXMpOwotCQl9Ci0KLQkJZmlyZVRleHRJbnB1dENoYW5nZWQob2xkRG9jLCBkb2N1bWVudCwgZmFsc2UpOwotCX0KLQotCS8qKgotCSAqIEBzZWUgSVRleHRWaWV3ZXIjcmVtb3ZlVGV4dElucHV0TGlzdGVuZXIoSVRleHRJbnB1dExpc3RlbmVyKQotCSAqLwotCXB1YmxpYyB2b2lkIHJlbW92ZVRleHRJbnB1dExpc3RlbmVyKElUZXh0SW5wdXRMaXN0ZW5lciBsaXN0ZW5lcikgewotCQlmSW5wdXRMaXN0ZW5lcnMucmVtb3ZlKGxpc3RlbmVyKTsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElUZXh0Vmlld2VyI2FkZFRleHRJbnB1dExpc3RlbmVyKElUZXh0SW5wdXRMaXN0ZW5lcikKLQkgKi8KLQlwdWJsaWMgdm9pZCBhZGRUZXh0SW5wdXRMaXN0ZW5lcihJVGV4dElucHV0TGlzdGVuZXIgbGlzdGVuZXIpIHsKLQkJaWYgKCFmSW5wdXRMaXN0ZW5lcnMuY29udGFpbnMobGlzdGVuZXIpKQotCQkJZklucHV0TGlzdGVuZXJzLmFkZChsaXN0ZW5lcik7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgZmlyZVRleHRJbnB1dENoYW5nZWQoSURvY3VtZW50IG9sZERvYywgSURvY3VtZW50IG5ld0RvYywgYm9vbGVhbiBhYm91dCkgewotCQlJdGVyYXRvciBlPSBuZXcgQXJyYXlMaXN0KGZJbnB1dExpc3RlbmVycykuaXRlcmF0b3IoKTsKLQkJd2hpbGUgKGUuaGFzTmV4dCgpKSB7Ci0JCQlJVGV4dElucHV0TGlzdGVuZXIgbD0gKElUZXh0SW5wdXRMaXN0ZW5lcikgZS5uZXh0KCk7Ci0JCQlpZiAoYWJvdXQpCi0JCQkJbC5pbnB1dERvY3VtZW50QWJvdXRUb0JlQ2hhbmdlZChvbGREb2MsIG5ld0RvYyk7Ci0JCQllbHNlCi0JCQkJbC5pbnB1dERvY3VtZW50Q2hhbmdlZChvbGREb2MsIG5ld0RvYyk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElUZXh0Vmlld2VyI2NoYW5nZVRleHRQcmVzZW50YXRpb24oVGV4dFByZXNlbnRhdGlvbiwgYm9vbGVhbikKLQkgKi8KLQlwdWJsaWMgdm9pZCBjaGFuZ2VUZXh0UHJlc2VudGF0aW9uKFRleHRQcmVzZW50YXRpb24gcHJlc2VudGF0aW9uLCBib29sZWFuIHAxKSB7Ci0JCWZUZXh0UHJlc2VudGF0aW9uPSBwcmVzZW50YXRpb247Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJVGV4dFZpZXdlciNpbnZhbGlkYXRlVGV4dFByZXNlbnRhdGlvbigpCi0JICovCi0JcHVibGljIHZvaWQgaW52YWxpZGF0ZVRleHRQcmVzZW50YXRpb24oKSB7Ci0JfQotCi0JcHVibGljIFRleHRQcmVzZW50YXRpb24gZ2V0VGV4dFByZXNlbnRhdGlvbigpIHsKLQkJcmV0dXJuIGZUZXh0UHJlc2VudGF0aW9uOwotCX0KLQotCXB1YmxpYyB2b2lkIGRvY3VtZW50QWJvdXRUb0JlQ2hhbmdlZChEb2N1bWVudEV2ZW50IGV2ZW50KSB7Ci0JCXRyeSB7Ci0JCQlmRGVsZXRpb249IGZEb2N1bWVudC5nZXQoZXZlbnQuZ2V0T2Zmc2V0KCksIGV2ZW50LmdldExlbmd0aCgpKTsKLQkJfSBjYXRjaCAoQmFkTG9jYXRpb25FeGNlcHRpb24geCkgewotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgZG9jdW1lbnRDaGFuZ2VkKERvY3VtZW50RXZlbnQgZXZlbnQpIHsKLQkJZmlyZVRleHRDaGFuZ2VkKG5ldyBUZXN0VGV4dEV2ZW50KGV2ZW50LCBmRGVsZXRpb24pKTsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElUZXh0Vmlld2VyI2dldEZpbmRSZXBsYWNlVGFyZ2V0KCkKLQkgKi8KLQlwdWJsaWMgSUZpbmRSZXBsYWNlVGFyZ2V0IGdldEZpbmRSZXBsYWNlVGFyZ2V0KCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElUZXh0Vmlld2VyI2dldFRleHRPcGVyYXRpb25UYXJnZXQoKQotCSAqLwotCXB1YmxpYyBJVGV4dE9wZXJhdGlvblRhcmdldCBnZXRUZXh0T3BlcmF0aW9uVGFyZ2V0KCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElUZXh0Vmlld2VyI3NldFRleHRDb2xvcihDb2xvciwgaW50LCBpbnQsIGJvb2xlYW4pCi0JICovCi0JcHVibGljIHZvaWQgc2V0VGV4dENvbG9yKENvbG9yIHAwLCBpbnQgcDEsIGludCBwMiwgYm9vbGVhbiBwMykgewotCX0KLQotCS8qKgotCSAqIEBzZWUgSVRleHRWaWV3ZXIjc2V0VGV4dENvbG9yKENvbG9yKQotCSAqLwotCXB1YmxpYyB2b2lkIHNldFRleHRDb2xvcihDb2xvciBwMCkgewotCX0KLQotCS8qKgotCSAqIEBzZWUgSVRleHRWaWV3ZXIjb3ZlcmxhcHNXaXRoVmlzaWJsZVJlZ2lvbihpbnQsIGludCkKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBvdmVybGFwc1dpdGhWaXNpYmxlUmVnaW9uKGludCBwMCwgaW50IHAxKSB7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElUZXh0Vmlld2VyI2dldFZpc2libGVSZWdpb24oKQotCSAqLwotCXB1YmxpYyBJUmVnaW9uIGdldFZpc2libGVSZWdpb24oKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIEBzZWUgSVRleHRWaWV3ZXIjcmVzZXRWaXNpYmxlUmVnaW9uKCkKLQkgKi8KLQlwdWJsaWMgdm9pZCByZXNldFZpc2libGVSZWdpb24oKSB7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJVGV4dFZpZXdlciNzZXRWaXNpYmxlUmVnaW9uKGludCwgaW50KQotCSAqLwotCXB1YmxpYyB2b2lkIHNldFZpc2libGVSZWdpb24oaW50IHAwLCBpbnQgcDEpIHsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElUZXh0Vmlld2VyI3NldEluZGVudFByZWZpeGVzKFN0cmluZ1tdLCBTdHJpbmcpCi0JICovCi0JcHVibGljIHZvaWQgc2V0SW5kZW50UHJlZml4ZXMoU3RyaW5nW10gcDAsIFN0cmluZyBwMSkgewotCX0KLQotCS8qKgotCSAqIEBzZWUgSVRleHRWaWV3ZXIjc2V0RGVmYXVsdFByZWZpeGVzKFN0cmluZ1tdLCBTdHJpbmcpCi0JICovCi0JcHVibGljIHZvaWQgc2V0RGVmYXVsdFByZWZpeGVzKFN0cmluZ1tdIHAwLCBTdHJpbmcgcDEpIHsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElUZXh0Vmlld2VyI3NldEF1dG9JbmRlbnRTdHJhdGVneShJQXV0b0luZGVudFN0cmF0ZWd5LCBTdHJpbmcpCi0JICovCi0JcHVibGljIHZvaWQgc2V0QXV0b0luZGVudFN0cmF0ZWd5KElBdXRvSW5kZW50U3RyYXRlZ3kgcDAsIFN0cmluZyBwMSkgewotCX0KLQotCS8qKgotCSAqIEBzZWUgSVRleHRWaWV3ZXIjc2V0VGV4dERvdWJsZUNsaWNrU3RyYXRlZ3koSVRleHREb3VibGVDbGlja1N0cmF0ZWd5LCBTdHJpbmcpCi0JICovCi0JcHVibGljIHZvaWQgc2V0VGV4dERvdWJsZUNsaWNrU3RyYXRlZ3koSVRleHREb3VibGVDbGlja1N0cmF0ZWd5IHAwLCBTdHJpbmcgcDEpIHsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElUZXh0Vmlld2VyI3NldFVuZG9NYW5hZ2VyKElVbmRvTWFuYWdlcikKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRVbmRvTWFuYWdlcihJVW5kb01hbmFnZXIgcDApIHsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElUZXh0Vmlld2VyI2dldFRleHRXaWRnZXQoKQotCSAqLwotCXB1YmxpYyBTdHlsZWRUZXh0IGdldFRleHRXaWRnZXQoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFRleHRIb3ZlcihJVGV4dEhvdmVyIHAwLCBTdHJpbmcgcDEpIHsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElUZXh0Vmlld2VyI2FjdGl2YXRlUGx1Z2lucygpCi0JICovCi0JcHVibGljIHZvaWQgYWN0aXZhdGVQbHVnaW5zKCkgewotCX0KLQotCS8qKgotCSAqIEBzZWUgSVRleHRWaWV3ZXIjcmVzZXRQbHVnaW5zKCkKLQkgKi8KLQlwdWJsaWMgdm9pZCByZXNldFBsdWdpbnMoKSB7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJVGV4dFZpZXdlciNnZXRUb3BJbnNldCgpCi0JICovCi0JcHVibGljIGludCBnZXRUb3BJbnNldCgpIHsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJVGV4dFZpZXdlciNnZXRCb3R0b21JbmRleEVuZE9mZnNldCgpCi0JICovCi0JcHVibGljIGludCBnZXRCb3R0b21JbmRleEVuZE9mZnNldCgpIHsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJVGV4dFZpZXdlciNnZXRCb3R0b21JbmRleCgpCi0JICovCi0JcHVibGljIGludCBnZXRCb3R0b21JbmRleCgpIHsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJVGV4dFZpZXdlciNnZXRUb3BJbmRleFN0YXJ0T2Zmc2V0KCkKLQkgKi8KLQlwdWJsaWMgaW50IGdldFRvcEluZGV4U3RhcnRPZmZzZXQoKSB7Ci0JCXJldHVybiAwOwotCX0KLQotCS8qKgotCSAqIEBzZWUgSVRleHRWaWV3ZXIjZ2V0VG9wSW5kZXgoKQotCSAqLwotCXB1YmxpYyBpbnQgZ2V0VG9wSW5kZXgoKSB7Ci0JCXJldHVybiAwOwotCX0KLQotCS8qKgotCSAqIEBzZWUgSVRleHRWaWV3ZXIjc2V0VG9wSW5kZXgoaW50KQotCSAqLwotCXB1YmxpYyB2b2lkIHNldFRvcEluZGV4KGludCBwMCkgewotCX0KLQotCS8qKgotCSAqIEBzZWUgSVRleHRWaWV3ZXIjcmV2ZWFsUmFuZ2UoaW50LCBpbnQpCi0JICovCi0JcHVibGljIHZvaWQgcmV2ZWFsUmFuZ2UoaW50IHAwLCBpbnQgcDEpIHsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElUZXh0Vmlld2VyI2dldFNlbGVjdGVkUmFuZ2UoKQotCSAqLwotCXB1YmxpYyBQb2ludCBnZXRTZWxlY3RlZFJhbmdlKCkgewotCQlyZXR1cm4gZlNlbGVjdGlvbjsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElUZXh0Vmlld2VyI3NldFNlbGVjdGVkUmFuZ2UoaW50LCBpbnQpCi0JICovCi0JcHVibGljIHZvaWQgc2V0U2VsZWN0ZWRSYW5nZShpbnQgb2Zmc2V0LCBpbnQgbGVuZ3RoKSB7Ci0JCWZTZWxlY3Rpb24ueD0gb2Zmc2V0OwotCQlmU2VsZWN0aW9uLnk9IGxlbmd0aDsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElUZXh0Vmlld2VyI2lzRWRpdGFibGUoKQotCSAqLwotCXB1YmxpYyBib29sZWFuIGlzRWRpdGFibGUoKSB7Ci0JCXJldHVybiB0cnVlOwotCX0KLQotCS8qKgotCSAqIEBzZWUgSVRleHRWaWV3ZXIjc2V0RWRpdGFibGUoYm9vbGVhbikKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRFZGl0YWJsZShib29sZWFuIHAwKSB7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJVGV4dFZpZXdlciNzZXRFdmVudENvbnN1bWVyKElFdmVudENvbnN1bWVyKQotCSAqLwotCXB1YmxpYyB2b2lkIHNldEV2ZW50Q29uc3VtZXIoSUV2ZW50Q29uc3VtZXIgcDApIHsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElUZXh0Vmlld2VyI3JlbW92ZVRleHRMaXN0ZW5lcihJVGV4dExpc3RlbmVyKQotCSAqLwotCXB1YmxpYyB2b2lkIHJlbW92ZVRleHRMaXN0ZW5lcihJVGV4dExpc3RlbmVyIGxpc3RlbmVyKSB7Ci0JCWZUZXh0TGlzdGVuZXJzLnJlbW92ZShsaXN0ZW5lcik7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgZmlyZVRleHRDaGFuZ2VkKFRleHRFdmVudCBldmVudCkgewotCQlJdGVyYXRvciBlPSBuZXcgQXJyYXlMaXN0KGZUZXh0TGlzdGVuZXJzKS5pdGVyYXRvcigpOwotCQl3aGlsZSAoZS5oYXNOZXh0KCkpIHsKLQkJCUlUZXh0TGlzdGVuZXIgbD0gKElUZXh0TGlzdGVuZXIpIGUubmV4dCgpOwotCQkJbC50ZXh0Q2hhbmdlZChldmVudCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElUZXh0Vmlld2VyI2FkZFRleHRMaXN0ZW5lcihJVGV4dExpc3RlbmVyKQotCSAqLwotCXB1YmxpYyB2b2lkIGFkZFRleHRMaXN0ZW5lcihJVGV4dExpc3RlbmVyIGxpc3RlbmVyKSB7Ci0JCWlmICghZlRleHRMaXN0ZW5lcnMuY29udGFpbnMobGlzdGVuZXIpKQotCQkJZlRleHRMaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElUZXh0Vmlld2VyI3JlbW92ZVZpZXdwb3J0TGlzdGVuZXIoSVZpZXdwb3J0TGlzdGVuZXIpCi0JICovCi0JcHVibGljIHZvaWQgcmVtb3ZlVmlld3BvcnRMaXN0ZW5lcihJVmlld3BvcnRMaXN0ZW5lciBwMCkgewotCX0KLQotCS8qKgotCSAqIEBzZWUgSVRleHRWaWV3ZXIjYWRkVmlld3BvcnRMaXN0ZW5lcihJVmlld3BvcnRMaXN0ZW5lcikKLQkgKi8KLQlwdWJsaWMgdm9pZCBhZGRWaWV3cG9ydExpc3RlbmVyKElWaWV3cG9ydExpc3RlbmVyIHAwKSB7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJU291cmNlVmlld2VyI2dldFNlbGVjdGlvblByb3ZpZGVyKCkKLQkgKi8KLQlwdWJsaWMgSVNlbGVjdGlvblByb3ZpZGVyIGdldFNlbGVjdGlvblByb3ZpZGVyKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElTb3VyY2VWaWV3ZXIjc2hvd0Fubm90YXRpb25zKGJvb2xlYW4pCi0JICovCi0JcHVibGljIHZvaWQgc2hvd0Fubm90YXRpb25zKGJvb2xlYW4gcDApIHsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElTb3VyY2VWaWV3ZXIjcmVtb3ZlUmFuZ2VJbmRpY2F0aW9uKCkKLQkgKi8KLQlwdWJsaWMgdm9pZCByZW1vdmVSYW5nZUluZGljYXRpb24oKSB7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBJU291cmNlVmlld2VyI2dldFJhbmdlSW5kaWNhdGlvbigpCi0JICovCi0JcHVibGljIElSZWdpb24gZ2V0UmFuZ2VJbmRpY2F0aW9uKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElTb3VyY2VWaWV3ZXIjc2V0UmFuZ2VJbmRpY2F0aW9uKGludCwgaW50LCBib29sZWFuKQotCSAqLwotCXB1YmxpYyB2b2lkIHNldFJhbmdlSW5kaWNhdGlvbihpbnQgcDAsIGludCBwMSwgYm9vbGVhbiBwMikgewotCX0KLQotCS8qKgotCSAqIEBzZWUgSVNvdXJjZVZpZXdlciNzZXRSYW5nZUluZGljYXRvcihBbm5vdGF0aW9uKQotCSAqLwotCXB1YmxpYyB2b2lkIHNldFJhbmdlSW5kaWNhdG9yKEFubm90YXRpb24gcDApIHsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElTb3VyY2VWaWV3ZXIjZ2V0QW5ub3RhdGlvbk1vZGVsKCkKLQkgKi8KLQlwdWJsaWMgSUFubm90YXRpb25Nb2RlbCBnZXRBbm5vdGF0aW9uTW9kZWwoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIEBzZWUgSVNvdXJjZVZpZXdlciNzZXREb2N1bWVudChJRG9jdW1lbnQsIElBbm5vdGF0aW9uTW9kZWwsIGludCwgaW50KQotCSAqLwotCXB1YmxpYyB2b2lkIHNldERvY3VtZW50KElEb2N1bWVudCBwMCwgSUFubm90YXRpb25Nb2RlbCBwMSwgaW50IHAyLCBpbnQgcDMpIHsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIElTb3VyY2VWaWV3ZXIjc2V0RG9jdW1lbnQoSURvY3VtZW50LCBJQW5ub3RhdGlvbk1vZGVsKQotCSAqLwotCXB1YmxpYyB2b2lkIHNldERvY3VtZW50KElEb2N1bWVudCBwMCwgSUFubm90YXRpb25Nb2RlbCBwMSkgewotCX0KLQotCS8qKgotCSAqIEBzZWUgSVNvdXJjZVZpZXdlciNzZXRBbm5vdGF0aW9uSG92ZXIoSUFubm90YXRpb25Ib3ZlcikKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRBbm5vdGF0aW9uSG92ZXIoSUFubm90YXRpb25Ib3ZlciBwMCkgewotCX0KLQotCS8qKgotCSAqIEBzZWUgSVNvdXJjZVZpZXdlciNjb25maWd1cmUoU291cmNlVmlld2VyQ29uZmlndXJhdGlvbikKLQkgKi8KLQlwdWJsaWMgdm9pZCBjb25maWd1cmUoU291cmNlVmlld2VyQ29uZmlndXJhdGlvbiBwMCkgewotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL1RleHRIb3ZlclBvcHVwVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvVGV4dEhvdmVyUG9wdXBUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiZmE2OTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvVGV4dEhvdmVyUG9wdXBUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuamZhY2UudGV4dC50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi0KLXB1YmxpYyBjbGFzcyBUZXh0SG92ZXJQb3B1cFRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQotCXB1YmxpYyBUZXh0SG92ZXJQb3B1cFRlc3QoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IFRlc3RTdWl0ZShUZXh0SG92ZXJQb3B1cFRlc3QuY2xhc3MpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgewotCX0KLQotCi0JcHJvdGVjdGVkIGludCBzZWFyY2goaW50W10gYXJyYXksIGludCB4KSB7Ci0JCWludCBsb3c9IDA7Ci0JCWludCBoaWdoPSBhcnJheS5sZW5ndGggLTE7Ci0KLQkJd2hpbGUgKGhpZ2ggPiBsb3cpIHsKLQkJCWludCBvZmZzZXQ9IChsb3cgKyBoaWdoKSAvIDI7Ci0JCQlpbnQgbG9va3VwPSBhcnJheVtvZmZzZXRdOwotCQkJaWYgKGxvb2t1cCA+IHgpCi0JCQkJaGlnaD0gb2Zmc2V0IC0gMTsKLQkJCWVsc2UgaWYgKGxvb2t1cCA8IHgpCi0JCQkJbG93PSBvZmZzZXQgKyAxOwotCQkJZWxzZQotCQkJCWxvdz0gaGlnaD0gb2Zmc2V0OwotCQl9Ci0KLQkJcmV0dXJuIGhpZ2g7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlYXJjaCgpIHsKLQkJaW50W10gdmFsdWVzPSB7IDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDkgfTsKLQkJZm9yIChpbnQgaT0gMDsgaSA8IDEwOyBpKyspIHsKLQkJCWludCByZXN1bHQ9IHNlYXJjaCh2YWx1ZXMsIGkpOwotCQkJYXNzZXJ0VHJ1ZShpID09IHJlc3VsdCk7Ci0JCX0KLQotCQlpbnRbXSB2YWx1ZXMyPSB7IDAsIDMsIDYsIDksIDEyLCAxNSwgMTgsIDIxLCAyNCwgMjcgfTsKLQkJZm9yIChpbnQgaT0gMDsgaSA8IDEwOyBpKyspIHsKLQkJCWludCByZXN1bHQ9IHNlYXJjaCh2YWx1ZXMyLCBpICogMyk7Ci0JCQlhc3NlcnRUcnVlKGkgPT0gcmVzdWx0KTsKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL1RleHRQcmVzZW50YXRpb25UZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9UZXh0UHJlc2VudGF0aW9uVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ODllOGRjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL1RleHRQcmVzZW50YXRpb25UZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpmYWNlLnRleHQudGVzdHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5TdHlsZVJhbmdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Db2xvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5SZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5UZXh0UHJlc2VudGF0aW9uOwotCi1wdWJsaWMgY2xhc3MgVGV4dFByZXNlbnRhdGlvblRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTk9STUFMPSBTV1QuTk9STUFMOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBCT0xEPSBTV1QuQk9MRDsKLS8vCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBJVEFMSUM9IFNXVC5JVEFMSUM7Ci0KLQlwcml2YXRlIFRleHRQcmVzZW50YXRpb24gZlRleHRQcmVzZW50YXRpb247Ci0JcHJpdmF0ZSBTdHlsZVJhbmdlW10gZkFsbFJhbmdlczsKLQlwcml2YXRlIFN0eWxlUmFuZ2VbXSBmTm9uRGVmYXVsdFJhbmdlczsKLQotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJcmV0dXJuIG5ldyBUZXN0U3VpdGUoVGV4dFByZXNlbnRhdGlvblRlc3QuY2xhc3MpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgewotCQlzZXRVcFN0eWxlUmFuZ2VzKCk7Ci0JCXNldFVwVGV4dFByZXNlbnRhdGlvbigpOwotCX0KLQotCXByaXZhdGUgdm9pZCBzZXRVcFN0eWxlUmFuZ2VzKCkgewotCQlmQWxsUmFuZ2VzPSBuZXcgU3R5bGVSYW5nZVtdIHsKLQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICAwLCAgIDQsIE5PUk1BTCksCi0JCQljcmVhdGVTdHlsZVJhbmdlKCAgNCwgIDIwLCBCT0xEKSwKLQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDIwLCAgNDcsIE5PUk1BTCksCi0JCQljcmVhdGVTdHlsZVJhbmdlKCA0NywgIDU0LCBCT0xEKSwKLQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDU0LCAgOTYsIE5PUk1BTCksCi0JCQljcmVhdGVTdHlsZVJhbmdlKCA5NiwgMTAyLCBCT0xEKSwKLQkJCWNyZWF0ZVN0eWxlUmFuZ2UoMTAyLCAxNDAsIE5PUk1BTCkKLQkJfTsKLQotCQlmTm9uRGVmYXVsdFJhbmdlcz0gbmV3IFN0eWxlUmFuZ2VbXSB7Ci0JCQljcmVhdGVTdHlsZVJhbmdlKCAgNCwgIDIwLCBCT0xEKSwKLQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDQ3LCAgNTQsIEJPTEQpLAotCQkJY3JlYXRlU3R5bGVSYW5nZSggOTYsIDEwMiwgQk9MRCkKLQkJfTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgc2V0VXBUZXh0UHJlc2VudGF0aW9uKCkgewotCQlmVGV4dFByZXNlbnRhdGlvbj0gbmV3IFRleHRQcmVzZW50YXRpb24oKTsKLQkJZlRleHRQcmVzZW50YXRpb24uc2V0RGVmYXVsdFN0eWxlUmFuZ2UoY3JlYXRlU3R5bGVSYW5nZSgwLCAxNDAsIE5PUk1BTCkpOwotCQlmb3IgKGludCBpPSAwOyBpIDwgZkFsbFJhbmdlcy5sZW5ndGg7IGkrKykKLQkJCWZUZXh0UHJlc2VudGF0aW9uLmFkZFN0eWxlUmFuZ2UoZkFsbFJhbmdlc1tpXSk7Ci0JfQotCi0JcHJpdmF0ZSBTdHlsZVJhbmdlIGNyZWF0ZVN0eWxlUmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kLCBpbnQgc3R5bGUpIHsKLQkJcmV0dXJuIGNyZWF0ZVN0eWxlUmFuZ2Uoc3RhcnQsIGVuZCwgbnVsbCwgbnVsbCwgc3R5bGUpOwotCX0KLQotCXByaXZhdGUgU3R5bGVSYW5nZSBjcmVhdGVTdHlsZVJhbmdlKGludCBzdGFydCwgaW50IGVuZCwgQ29sb3IgZm9yZWdyb3VuZCwgQ29sb3IgYmFja2dyb3VuZCwgaW50IHN0eWxlKSB7Ci0JCXJldHVybiBuZXcgU3R5bGVSYW5nZShzdGFydCwgZW5kIC0gc3RhcnQsIGZvcmVncm91bmQsIGJhY2tncm91bmQsIHN0eWxlKTsKLQl9Ci0KLQlwcml2YXRlIFN0eWxlUmFuZ2UgY3JlYXRlU3R5bGVSYW5nZShpbnQgc3RhcnQsIGludCBlbmQsIGludCBmb3JlZ3JvdW5kLCBpbnQgYmFja2dyb3VuZCwgaW50IHN0eWxlKSB7Ci0JCXJldHVybiBjcmVhdGVTdHlsZVJhbmdlKHN0YXJ0LCBlbmQsIGNyZWF0ZUNvbG9yKGZvcmVncm91bmQsIGZvcmVncm91bmQsIGZvcmVncm91bmQpLCBjcmVhdGVDb2xvcihiYWNrZ3JvdW5kLCBiYWNrZ3JvdW5kLCBiYWNrZ3JvdW5kKSwgc3R5bGUpOwotCX0KLQotCXByaXZhdGUgRGlzcGxheSBmRGlzcGxheT0gRGlzcGxheS5nZXREZWZhdWx0KCk7Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGEgbmV3IGNvbG9yLgotCSAqIAotCSAqIEBwYXJhbSByZWQgdGhlIGFtb3VudCBvZiByZWQgaW4gdGhlIGNvbG9yCi0JICogQHBhcmFtIGdyZWVuIHRoZSBhbW91bnQgb2YgZ3JlZW4gaW4gdGhlIGNvbG9yCi0JICogQHBhcmFtIGJsdWUgdGhlIGFtb3VudCBvZiBibHVlIGluIHRoZSBjb2xvcgotCSAqIEByZXR1cm4gPGNvZGU+bnVsbDwvY29kZT4gaWYgYW55IG9mIHRoZSBwYXJhbWV0ZXJzIGlzIHNtYWxsZXIgdGhhbiAwIG9yIGdyZWF0ZXIgdGhhbiAyNTUKLQkgKi8KLQlwcml2YXRlIENvbG9yIGNyZWF0ZUNvbG9yKGludCByZWQsIGludCBncmVlbiwgaW50IGJsdWUpIHsKLQkJaWYgKHJlZCA8IDAgfHwgcmVkID4gMjU1IHx8IGdyZWVuIDwgMCB8fCBncmVlbiA+IDI1NSB8fCBibHVlIDwgMCB8fCBibHVlID4gMjU1KQotCQkJcmV0dXJuIG51bGw7Ci0JCXJldHVybiBuZXcgQ29sb3IoZkRpc3BsYXksIHJlZCwgZ3JlZW4sIGJsdWUpOwotCX0KLQotCXByaXZhdGUgdm9pZCBjaGVja1JlZ2lvbnMoU3R5bGVSYW5nZVtdIGV4cGVjdGVkQWxsUmFuZ2VzLCBTdHlsZVJhbmdlW10gZXhwZWN0ZWROb25EZWZhdWx0UmFuZ2VzKSB7Ci0JCUl0ZXJhdG9yIGU9IGZUZXh0UHJlc2VudGF0aW9uLmdldEFsbFN0eWxlUmFuZ2VJdGVyYXRvcigpOwotCQlmb3IgKGludCBpPSAwOyBpIDwgZXhwZWN0ZWRBbGxSYW5nZXMubGVuZ3RoOyBpKyspIHsKLQkJCWFzc2VydFRydWUoZS5oYXNOZXh0KCkpOwotCQkJYXNzZXJ0RXF1YWxzKGV4cGVjdGVkQWxsUmFuZ2VzW2ldLCBlLm5leHQoKSk7Ci0JCX0KLQkJYXNzZXJ0VHJ1ZSghZS5oYXNOZXh0KCkpOwotCi0JCWU9IGZUZXh0UHJlc2VudGF0aW9uLmdldE5vbkRlZmF1bHRTdHlsZVJhbmdlSXRlcmF0b3IoKTsKLQkJZm9yIChpbnQgaT0gMDsgaSA8IGV4cGVjdGVkTm9uRGVmYXVsdFJhbmdlcy5sZW5ndGg7IGkrKykgewotCQkJYXNzZXJ0VHJ1ZShlLmhhc05leHQoKSk7Ci0JCQlhc3NlcnRFcXVhbHMoZXhwZWN0ZWROb25EZWZhdWx0UmFuZ2VzW2ldLCBlLm5leHQoKSk7Ci0JCX0KLQkJYXNzZXJ0VHJ1ZSghZS5oYXNOZXh0KCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RVbmNsaXBwZWRSZWdpb25zKCkgewotCQljaGVja1JlZ2lvbnMoZkFsbFJhbmdlcywgZk5vbkRlZmF1bHRSYW5nZXMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDbGlwcGVkUmVnaW9uczEoKSB7Ci0JCWZUZXh0UHJlc2VudGF0aW9uLnNldFJlc3VsdFdpbmRvdyhuZXcgUmVnaW9uKDAsIDE0MCkpOwotCQljaGVja1JlZ2lvbnMoZkFsbFJhbmdlcywgZk5vbkRlZmF1bHRSYW5nZXMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDbGlwcGVkUmVnaW9uczIoKSB7Ci0KLQkJZlRleHRQcmVzZW50YXRpb24uc2V0UmVzdWx0V2luZG93KG5ldyBSZWdpb24oMzAsIDcwKSk7Ci0KLQkJU3R5bGVSYW5nZVtdIGV4cGVjdGVkQWxsUmFuZ2VzPSBuZXcgU3R5bGVSYW5nZVtdIHsKLQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICAwLCAxNywgTk9STUFMKSwKLQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDE3LCAyNCwgQk9MRCksCi0JCQljcmVhdGVTdHlsZVJhbmdlKCAyNCwgNjYsIE5PUk1BTCksCi0JCQljcmVhdGVTdHlsZVJhbmdlKCA2NiwgNzAsIEJPTEQpCi0JCX07Ci0KLQkJU3R5bGVSYW5nZVtdIGV4cGVjdGVkTm9uRGVmYXVsdFJhbmdlcz0gbmV3IFN0eWxlUmFuZ2VbXSB7Ci0JCQljcmVhdGVTdHlsZVJhbmdlKCAxNywgMjQsIEJPTEQpLAotCQkJY3JlYXRlU3R5bGVSYW5nZSggNjYsIDcwLCBCT0xEKQotCQl9OwotCi0JCWNoZWNrUmVnaW9ucyhleHBlY3RlZEFsbFJhbmdlcywgZXhwZWN0ZWROb25EZWZhdWx0UmFuZ2VzKTsKLQl9Ci0KLQkvKioKLQkgKiBNZXJnZSByYW5nZSBhdCBzdGFydCBvZiBmaXJzdCBleGlzdGluZyByYW5nZS4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0TWVyZ2VTdHlsZVJhbmdlMSgpIHsKLQkJU3R5bGVSYW5nZSByYW5nZT0gY3JlYXRlU3R5bGVSYW5nZSgwLCAyLCAxLCAtMSwgTk9STUFMKTsKLQkJZlRleHRQcmVzZW50YXRpb24ubWVyZ2VTdHlsZVJhbmdlKHJhbmdlKTsKLQotCQlTdHlsZVJhbmdlW10gZXhwZWN0ZWRBbGxSYW5nZXM9IG5ldyBTdHlsZVJhbmdlW10gewotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoMCwgMiwgMSwgLTEsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggIDIsICAgNCwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAgNCwgIDIwLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAyMCwgIDQ3LCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDQ3LCAgNTQsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDU0LCAgOTYsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggOTYsIDEwMiwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSgxMDIsIDE0MCwgTk9STUFMKSwKLQkJfTsKLQotCQlTdHlsZVJhbmdlW10gZXhwZWN0ZWROb25EZWZhdWx0UmFuZ2VzPSBuZXcgU3R5bGVSYW5nZVtdIHsKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDAsIDIsIDEsIC0xLCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICA0LCAgMjAsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDQ3LCAgNTQsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDk2LCAxMDIsIEJPTEQpLAotCQl9OwotCi0JCWNoZWNrUmVnaW9ucyhleHBlY3RlZEFsbFJhbmdlcywgZXhwZWN0ZWROb25EZWZhdWx0UmFuZ2VzKTsKLQl9Ci0KLQkvKioKLQkgKiBNZXJnZSByYW5nZSBhdCBlbmQgb2YgbGFzdCBleGlzdGluZyByYW5nZS4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0TWVyZ2VTdHlsZVJhbmdlMigpIHsKLQkJU3R5bGVSYW5nZSByYW5nZT0gY3JlYXRlU3R5bGVSYW5nZSgxMzgsIDE0MCwgMSwgLTEsIE5PUk1BTCk7Ci0JCWZUZXh0UHJlc2VudGF0aW9uLm1lcmdlU3R5bGVSYW5nZShyYW5nZSk7Ci0KLQkJU3R5bGVSYW5nZVtdIGV4cGVjdGVkQWxsUmFuZ2VzPSBuZXcgU3R5bGVSYW5nZVtdIHsKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAgMCwgICA0LCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICA0LCAgMjAsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDIwLCAgNDcsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggNDcsICA1NCwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggNTQsICA5NiwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA5NiwgMTAyLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDEwMiwgMTM4LCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoMTM4LCAxNDAsIDEsIC0xLCBOT1JNQUwpLAotCQl9OwotCi0JCVN0eWxlUmFuZ2VbXSBleHBlY3RlZE5vbkRlZmF1bHRSYW5nZXM9IG5ldyBTdHlsZVJhbmdlW10gewotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICA0LCAgMjAsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDQ3LCAgNTQsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDk2LCAxMDIsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoMTM4LCAxNDAsIDEsIC0xLCBOT1JNQUwpLAotCQl9OwotCi0JCWNoZWNrUmVnaW9ucyhleHBlY3RlZEFsbFJhbmdlcywgZXhwZWN0ZWROb25EZWZhdWx0UmFuZ2VzKTsKLQl9Ci0KLQkvKioKLQkgKiBNZXJnZSByYW5nZSBhdCBzdGFydCBvZiBleGlzdGluZyBkZWZhdWx0IHJhbmdlLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RNZXJnZVN0eWxlUmFuZ2UzKCkgewotCQlTdHlsZVJhbmdlIHJhbmdlPSBjcmVhdGVTdHlsZVJhbmdlKDIwLCAyMiwgMSwgLTEsIE5PUk1BTCk7Ci0JCWZUZXh0UHJlc2VudGF0aW9uLm1lcmdlU3R5bGVSYW5nZShyYW5nZSk7Ci0KLQkJU3R5bGVSYW5nZVtdIGV4cGVjdGVkQWxsUmFuZ2VzPSBuZXcgU3R5bGVSYW5nZVtdIHsKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAgMCwgICA0LCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICA0LCAgMjAsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoMjAsIDIyLCAxLCAtMSwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAyMiwgIDQ3LCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDQ3LCAgNTQsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDU0LCAgOTYsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggOTYsIDEwMiwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSgxMDIsIDE0MCwgTk9STUFMKSwKLQkJfTsKLQotCQlTdHlsZVJhbmdlW10gZXhwZWN0ZWROb25EZWZhdWx0UmFuZ2VzPSBuZXcgU3R5bGVSYW5nZVtdIHsKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAgNCwgIDIwLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDIwLCAyMiwgMSwgLTEsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggNDcsICA1NCwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggOTYsIDEwMiwgQk9MRCksCi0JCX07Ci0KLQkJY2hlY2tSZWdpb25zKGV4cGVjdGVkQWxsUmFuZ2VzLCBleHBlY3RlZE5vbkRlZmF1bHRSYW5nZXMpOwotCX0KLQotCS8qKgotCSAqIE1lcmdlIHJhbmdlIHdpdGhpbiBleGlzdGluZyBkZWZhdWx0IHJhbmdlLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RNZXJnZVN0eWxlUmFuZ2U0KCkgewotCQlTdHlsZVJhbmdlIHJhbmdlPSBjcmVhdGVTdHlsZVJhbmdlKDIyLCAyNCwgMSwgLTEsIE5PUk1BTCk7Ci0JCWZUZXh0UHJlc2VudGF0aW9uLm1lcmdlU3R5bGVSYW5nZShyYW5nZSk7Ci0KLQkJU3R5bGVSYW5nZVtdIGV4cGVjdGVkQWxsUmFuZ2VzPSBuZXcgU3R5bGVSYW5nZVtdIHsKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAgMCwgICA0LCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICA0LCAgMjAsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDIwLCAgMjIsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSgyMiwgMjQsIDEsIC0xLCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDI0LCAgNDcsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggNDcsICA1NCwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggNTQsICA5NiwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA5NiwgMTAyLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDEwMiwgMTQwLCBOT1JNQUwpLAotCQl9OwotCi0JCVN0eWxlUmFuZ2VbXSBleHBlY3RlZE5vbkRlZmF1bHRSYW5nZXM9IG5ldyBTdHlsZVJhbmdlW10gewotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICA0LCAgMjAsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoMjIsIDI0LCAxLCAtMSwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA0NywgIDU0LCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA5NiwgMTAyLCBCT0xEKSwKLQkJfTsKLQotCQljaGVja1JlZ2lvbnMoZXhwZWN0ZWRBbGxSYW5nZXMsIGV4cGVjdGVkTm9uRGVmYXVsdFJhbmdlcyk7Ci0JfQotCi0JLyoqCi0JICogTWVyZ2UgcmFuZ2UgYXQgZW5kIG9mIGV4aXN0aW5nIGRlZmF1bHQgcmFuZ2UuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE1lcmdlU3R5bGVSYW5nZTUoKSB7Ci0JCVN0eWxlUmFuZ2UgcmFuZ2U9IGNyZWF0ZVN0eWxlUmFuZ2UoNDUsIDQ3LCAxLCAtMSwgTk9STUFMKTsKLQkJZlRleHRQcmVzZW50YXRpb24ubWVyZ2VTdHlsZVJhbmdlKHJhbmdlKTsKLQotCQlTdHlsZVJhbmdlW10gZXhwZWN0ZWRBbGxSYW5nZXM9IG5ldyBTdHlsZVJhbmdlW10gewotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICAwLCAgIDQsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggIDQsICAyMCwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggMjAsICA0NSwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDQ1LCA0NywgMSwgLTEsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggNDcsICA1NCwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggNTQsICA5NiwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA5NiwgMTAyLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDEwMiwgMTQwLCBOT1JNQUwpLAotCQl9OwotCi0JCVN0eWxlUmFuZ2VbXSBleHBlY3RlZE5vbkRlZmF1bHRSYW5nZXM9IG5ldyBTdHlsZVJhbmdlW10gewotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICA0LCAgMjAsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoNDUsIDQ3LCAxLCAtMSwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA0NywgIDU0LCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA5NiwgMTAyLCBCT0xEKSwKLQkJfTsKLQotCQljaGVja1JlZ2lvbnMoZXhwZWN0ZWRBbGxSYW5nZXMsIGV4cGVjdGVkTm9uRGVmYXVsdFJhbmdlcyk7Ci0JfQotCi0JLyoqCi0JICogTWVyZ2UgcmFuZ2UgYXQgc3RhcnQgb2YgZXhpc3Rpbmcgbm9uLWRlZmF1bHQgcmFuZ2UuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE1lcmdlU3R5bGVSYW5nZTYoKSB7Ci0JCVN0eWxlUmFuZ2UgcmFuZ2U9IGNyZWF0ZVN0eWxlUmFuZ2UoNDcsIDQ5LCAxLCAtMSwgTk9STUFMKTsKLQkJZlRleHRQcmVzZW50YXRpb24ubWVyZ2VTdHlsZVJhbmdlKHJhbmdlKTsKLQotCQlTdHlsZVJhbmdlW10gZXhwZWN0ZWRBbGxSYW5nZXM9IG5ldyBTdHlsZVJhbmdlW10gewotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICAwLCAgIDQsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggIDQsICAyMCwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggMjAsICA0NywgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDQ3LCA0OSwgMSwgLTEsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDQ5LCAgNTQsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDU0LCAgOTYsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggOTYsIDEwMiwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSgxMDIsIDE0MCwgTk9STUFMKSwKLQkJfTsKLQotCQlTdHlsZVJhbmdlW10gZXhwZWN0ZWROb25EZWZhdWx0UmFuZ2VzPSBuZXcgU3R5bGVSYW5nZVtdIHsKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAgNCwgIDIwLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDQ3LCA0OSwgMSwgLTEsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDQ5LCAgNTQsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDk2LCAxMDIsIEJPTEQpLAotCQl9OwotCi0JCWNoZWNrUmVnaW9ucyhleHBlY3RlZEFsbFJhbmdlcywgZXhwZWN0ZWROb25EZWZhdWx0UmFuZ2VzKTsKLQl9Ci0KLQkvKioKLQkgKiBNZXJnZSByYW5nZSB3aXRoaW4gZXhpc3Rpbmcgbm9uLWRlZmF1bHQgcmFuZ2UuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE1lcmdlU3R5bGVSYW5nZTcoKSB7Ci0JCVN0eWxlUmFuZ2UgcmFuZ2U9IGNyZWF0ZVN0eWxlUmFuZ2UoNDksIDUxLCAxLCAtMSwgTk9STUFMKTsKLQkJZlRleHRQcmVzZW50YXRpb24ubWVyZ2VTdHlsZVJhbmdlKHJhbmdlKTsKLQotCQlTdHlsZVJhbmdlW10gZXhwZWN0ZWRBbGxSYW5nZXM9IG5ldyBTdHlsZVJhbmdlW10gewotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICAwLCAgIDQsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggIDQsICAyMCwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggMjAsICA0NywgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA0NywgIDQ5LCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDQ5LCA1MSwgMSwgLTEsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDUxLCAgNTQsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDU0LCAgOTYsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggOTYsIDEwMiwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSgxMDIsIDE0MCwgTk9STUFMKSwKLQkJfTsKLQotCQlTdHlsZVJhbmdlW10gZXhwZWN0ZWROb25EZWZhdWx0UmFuZ2VzPSBuZXcgU3R5bGVSYW5nZVtdIHsKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAgNCwgIDIwLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA0NywgIDQ5LCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDQ5LCA1MSwgMSwgLTEsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDUxLCAgNTQsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDk2LCAxMDIsIEJPTEQpLAotCQl9OwotCi0JCWNoZWNrUmVnaW9ucyhleHBlY3RlZEFsbFJhbmdlcywgZXhwZWN0ZWROb25EZWZhdWx0UmFuZ2VzKTsKLQl9Ci0KLQkvKioKLQkgKiBNZXJnZSByYW5nZSBhdCBlbmQgb2YgZXhpc3Rpbmcgbm9uLWRlZmF1bHQgcmFuZ2UuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE1lcmdlU3R5bGVSYW5nZTgoKSB7Ci0JCVN0eWxlUmFuZ2UgcmFuZ2U9IGNyZWF0ZVN0eWxlUmFuZ2UoNTIsIDU0LCAxLCAtMSwgTk9STUFMKTsKLQkJZlRleHRQcmVzZW50YXRpb24ubWVyZ2VTdHlsZVJhbmdlKHJhbmdlKTsKLQotCQlTdHlsZVJhbmdlW10gZXhwZWN0ZWRBbGxSYW5nZXM9IG5ldyBTdHlsZVJhbmdlW10gewotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICAwLCAgIDQsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggIDQsICAyMCwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggMjAsICA0NywgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA0NywgIDUyLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDUyLCA1NCwgMSwgLTEsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDU0LCAgOTYsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggOTYsIDEwMiwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSgxMDIsIDE0MCwgTk9STUFMKSwKLQkJfTsKLQotCQlTdHlsZVJhbmdlW10gZXhwZWN0ZWROb25EZWZhdWx0UmFuZ2VzPSBuZXcgU3R5bGVSYW5nZVtdIHsKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAgNCwgIDIwLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA0NywgIDUyLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDUyLCA1NCwgMSwgLTEsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDk2LCAxMDIsIEJPTEQpLAotCQl9OwotCi0JCWNoZWNrUmVnaW9ucyhleHBlY3RlZEFsbFJhbmdlcywgZXhwZWN0ZWROb25EZWZhdWx0UmFuZ2VzKTsKLQl9Ci0KLQkvKioKLQkgKiBNZXJnZSByYW5nZSBmcm9tIGV4aXN0aW5nIGRlZmF1bHQgdG8gbm9uLWRlZmF1bHQgcmFuZ2UuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE1lcmdlU3R5bGVSYW5nZTkoKSB7Ci0JCVN0eWxlUmFuZ2UgcmFuZ2U9IGNyZWF0ZVN0eWxlUmFuZ2UoNDUsIDQ5LCAxLCAtMSwgTk9STUFMKTsKLQkJZlRleHRQcmVzZW50YXRpb24ubWVyZ2VTdHlsZVJhbmdlKHJhbmdlKTsKLQotCQlTdHlsZVJhbmdlW10gZXhwZWN0ZWRBbGxSYW5nZXM9IG5ldyBTdHlsZVJhbmdlW10gewotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICAwLCAgIDQsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggIDQsICAyMCwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggMjAsICA0NSwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDQ1LCA0NywgMSwgLTEsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSg0NywgNDksIDEsIC0xLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA0OSwgIDU0LCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA1NCwgIDk2LCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDk2LCAxMDIsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoMTAyLCAxNDAsIE5PUk1BTCksCi0JCX07Ci0KLQkJU3R5bGVSYW5nZVtdIGV4cGVjdGVkTm9uRGVmYXVsdFJhbmdlcz0gbmV3IFN0eWxlUmFuZ2VbXSB7Ci0JCQkJY3JlYXRlU3R5bGVSYW5nZSggIDQsICAyMCwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSg0NSwgNDcsIDEsIC0xLCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoNDcsIDQ5LCAxLCAtMSwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggNDksICA1NCwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggOTYsIDEwMiwgQk9MRCksCi0JCX07Ci0KLQkJY2hlY2tSZWdpb25zKGV4cGVjdGVkQWxsUmFuZ2VzLCBleHBlY3RlZE5vbkRlZmF1bHRSYW5nZXMpOwotCX0KLQotCS8qKgotCSAqIE1lcmdlIHJhbmdlIGZyb20gZXhpc3Rpbmcgbm9uLWRlZmF1bHQgdG8gZGVmYXVsdCByYW5nZS4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0TWVyZ2VTdHlsZVJhbmdlMTAoKSB7Ci0JCVN0eWxlUmFuZ2UgcmFuZ2U9IGNyZWF0ZVN0eWxlUmFuZ2UoNTIsIDU2LCAxLCAtMSwgTk9STUFMKTsKLQkJZlRleHRQcmVzZW50YXRpb24ubWVyZ2VTdHlsZVJhbmdlKHJhbmdlKTsKLQotCQlTdHlsZVJhbmdlW10gZXhwZWN0ZWRBbGxSYW5nZXM9IG5ldyBTdHlsZVJhbmdlW10gewotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICAwLCAgIDQsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggIDQsICAyMCwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggMjAsICA0NywgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA0NywgIDUyLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDUyLCA1NCwgMSwgLTEsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoNTQsIDU2LCAxLCAtMSwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA1NiwgIDk2LCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDk2LCAxMDIsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoMTAyLCAxNDAsIE5PUk1BTCksCi0JCX07Ci0KLQkJU3R5bGVSYW5nZVtdIGV4cGVjdGVkTm9uRGVmYXVsdFJhbmdlcz0gbmV3IFN0eWxlUmFuZ2VbXSB7Ci0JCQkJY3JlYXRlU3R5bGVSYW5nZSggIDQsICAyMCwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggNDcsICA1MiwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSg1MiwgNTQsIDEsIC0xLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDU0LCA1NiwgMSwgLTEsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggOTYsIDEwMiwgQk9MRCksCi0JCX07Ci0KLQkJY2hlY2tSZWdpb25zKGV4cGVjdGVkQWxsUmFuZ2VzLCBleHBlY3RlZE5vbkRlZmF1bHRSYW5nZXMpOwotCX0KLQotCS8qKgotCSAqIE1lcmdlIHJhbmdlIGZyb20gZXhpc3RpbmcgZGVmYXVsdCBvdmVyIG5vbi1kZWZhdWx0IHRvIGRlZmF1bHQgcmFuZ2UuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE1lcmdlU3R5bGVSYW5nZTExKCkgewotCQlTdHlsZVJhbmdlIHJhbmdlPSBjcmVhdGVTdHlsZVJhbmdlKDQ1LCA1NiwgMSwgLTEsIE5PUk1BTCk7Ci0JCWZUZXh0UHJlc2VudGF0aW9uLm1lcmdlU3R5bGVSYW5nZShyYW5nZSk7Ci0KLQkJU3R5bGVSYW5nZVtdIGV4cGVjdGVkQWxsUmFuZ2VzPSBuZXcgU3R5bGVSYW5nZVtdIHsKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAgMCwgICA0LCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICA0LCAgMjAsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDIwLCAgNDUsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSg0NSwgNDcsIDEsIC0xLCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoNDcsIDU0LCAxLCAtMSwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSg1NCwgNTYsIDEsIC0xLCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDU2LCAgOTYsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggOTYsIDEwMiwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSgxMDIsIDE0MCwgTk9STUFMKSwKLQkJfTsKLQotCQlTdHlsZVJhbmdlW10gZXhwZWN0ZWROb25EZWZhdWx0UmFuZ2VzPSBuZXcgU3R5bGVSYW5nZVtdIHsKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAgNCwgIDIwLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDQ1LCA0NywgMSwgLTEsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSg0NywgNTQsIDEsIC0xLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDU0LCA1NiwgMSwgLTEsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggOTYsIDEwMiwgQk9MRCksCi0JCX07Ci0KLQkJY2hlY2tSZWdpb25zKGV4cGVjdGVkQWxsUmFuZ2VzLCBleHBlY3RlZE5vbkRlZmF1bHRSYW5nZXMpOwotCX0KLQotCS8qKgotCSAqIE1lcmdlIHJhbmdlIGZyb20gZXhpc3Rpbmcgbm9uLWRlZmF1bHQgb3ZlciBkZWZhdWx0IHRvIG5vbi1kZWZhdWx0IHJhbmdlLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RNZXJnZVN0eWxlUmFuZ2UxMigpIHsKLQkJU3R5bGVSYW5nZSByYW5nZT0gY3JlYXRlU3R5bGVSYW5nZSg1MiwgOTgsIDEsIC0xLCBOT1JNQUwpOwotCQlmVGV4dFByZXNlbnRhdGlvbi5tZXJnZVN0eWxlUmFuZ2UocmFuZ2UpOwotCi0JCVN0eWxlUmFuZ2VbXSBleHBlY3RlZEFsbFJhbmdlcz0gbmV3IFN0eWxlUmFuZ2VbXSB7Ci0JCQkJY3JlYXRlU3R5bGVSYW5nZSggIDAsICAgNCwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAgNCwgIDIwLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAyMCwgIDQ3LCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDQ3LCAgNTIsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoNTIsIDU0LCAxLCAtMSwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSg1NCwgOTYsIDEsIC0xLCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoOTYsIDk4LCAxLCAtMSwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggOTgsIDEwMiwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSgxMDIsIDE0MCwgTk9STUFMKSwKLQkJfTsKLQotCQlTdHlsZVJhbmdlW10gZXhwZWN0ZWROb25EZWZhdWx0UmFuZ2VzPSBuZXcgU3R5bGVSYW5nZVtdIHsKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAgNCwgIDIwLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA0NywgIDUyLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDUyLCA1NCwgMSwgLTEsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoNTQsIDk2LCAxLCAtMSwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDk2LCA5OCwgMSwgLTEsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDk4LCAxMDIsIEJPTEQpLAotCQl9OwotCi0JCWNoZWNrUmVnaW9ucyhleHBlY3RlZEFsbFJhbmdlcywgZXhwZWN0ZWROb25EZWZhdWx0UmFuZ2VzKTsKLQl9Ci0KLQkvKioKLQkgKiBNZXJnZSByYW5nZSBvdmVyIGV4aXN0aW5nIGRlZmF1bHQgcmFuZ2UuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE1lcmdlU3R5bGVSYW5nZTEzKCkgewotCQlTdHlsZVJhbmdlIHJhbmdlPSBjcmVhdGVTdHlsZVJhbmdlKDIwLCA0NywgMSwgLTEsIE5PUk1BTCk7Ci0JCWZUZXh0UHJlc2VudGF0aW9uLm1lcmdlU3R5bGVSYW5nZShyYW5nZSk7Ci0KLQkJU3R5bGVSYW5nZVtdIGV4cGVjdGVkQWxsUmFuZ2VzPSBuZXcgU3R5bGVSYW5nZVtdIHsKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAgMCwgICA0LCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICA0LCAgMjAsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoMjAsIDQ3LCAxLCAtMSwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA0NywgIDU0LCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA1NCwgIDk2LCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDk2LCAxMDIsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoMTAyLCAxNDAsIE5PUk1BTCksCi0JCX07Ci0KLQkJU3R5bGVSYW5nZVtdIGV4cGVjdGVkTm9uRGVmYXVsdFJhbmdlcz0gbmV3IFN0eWxlUmFuZ2VbXSB7Ci0JCQkJY3JlYXRlU3R5bGVSYW5nZSggIDQsICAyMCwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSgyMCwgNDcsIDEsIC0xLCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDQ3LCAgNTQsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDk2LCAxMDIsIEJPTEQpLAotCQl9OwotCi0JCWNoZWNrUmVnaW9ucyhleHBlY3RlZEFsbFJhbmdlcywgZXhwZWN0ZWROb25EZWZhdWx0UmFuZ2VzKTsKLQl9Ci0KLQkvKioKLQkgKiBNZXJnZSByYW5nZSBvdmVyIGV4aXN0aW5nIG5vbi1kZWZhdWx0IHJhbmdlLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RNZXJnZVN0eWxlUmFuZ2UxNCgpIHsKLQkJU3R5bGVSYW5nZSByYW5nZT0gY3JlYXRlU3R5bGVSYW5nZSg0NywgNTQsIDEsIC0xLCBOT1JNQUwpOwotCQlmVGV4dFByZXNlbnRhdGlvbi5tZXJnZVN0eWxlUmFuZ2UocmFuZ2UpOwotCi0JCVN0eWxlUmFuZ2VbXSBleHBlY3RlZEFsbFJhbmdlcz0gbmV3IFN0eWxlUmFuZ2VbXSB7Ci0JCQkJY3JlYXRlU3R5bGVSYW5nZSggIDAsICAgNCwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAgNCwgIDIwLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAyMCwgIDQ3LCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoNDcsIDU0LCAxLCAtMSwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggNTQsICA5NiwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA5NiwgMTAyLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDEwMiwgMTQwLCBOT1JNQUwpLAotCQl9OwotCi0JCVN0eWxlUmFuZ2VbXSBleHBlY3RlZE5vbkRlZmF1bHRSYW5nZXM9IG5ldyBTdHlsZVJhbmdlW10gewotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICA0LCAgMjAsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoNDcsIDU0LCAxLCAtMSwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggOTYsIDEwMiwgQk9MRCksCi0JCX07Ci0KLQkJY2hlY2tSZWdpb25zKGV4cGVjdGVkQWxsUmFuZ2VzLCBleHBlY3RlZE5vbkRlZmF1bHRSYW5nZXMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNZXJnZVN0eWxlUmFuZ2VzMSgpIHsKLQkJU3R5bGVSYW5nZVtdIHJhbmdlcz0gbmV3IFN0eWxlUmFuZ2VbXSB7Ci0JCQkJY3JlYXRlU3R5bGVSYW5nZSgwLCAyLCAxLCAtMSwgTk9STUFMKSwgLy8gYXQgc3RhcnQgb2YgZmlyc3QgZXhpc3RpbmcKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDIwLCAyMiwgMSwgLTEsIE5PUk1BTCksIC8vIGF0IHN0YXJ0IG9mIGV4aXN0aW5nIGRlZmF1bHQKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDI0LCAyNiwgMSwgLTEsIE5PUk1BTCksIC8vIHdpdGhpbiBleGlzdGluZyBkZWZhdWx0Ci0JCQkJY3JlYXRlU3R5bGVSYW5nZSg0NSwgNDcsIDEsIC0xLCBOT1JNQUwpLCAvLyBhdCBlbmQgb2YgZXhpc3RpbmcgZGVmYXVsdAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoNDcsIDQ5LCAxLCAtMSwgTk9STUFMKSwgLy8gYXQgc3RhcnQgb2YgZXhpc3Rpbmcgbm9uLWRlZmF1bHQKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDUwLCA1MSwgMSwgLTEsIE5PUk1BTCksIC8vIHdpdGhpbiBleGlzdGluZyBub24tZGVmYXVsdAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoNTIsIDU0LCAxLCAtMSwgTk9STUFMKSwgLy8gYXQgZW5kIG9mIGV4aXN0aW5nIG5vbi1kZWZhdWx0Ci0JCQkJY3JlYXRlU3R5bGVSYW5nZSgxMzgsIDE0MCwgMSwgLTEsIE5PUk1BTCksIC8vIGF0IGVuZCBvZiBsYXN0IGV4aXN0aW5nCi0JCX07Ci0JCWZUZXh0UHJlc2VudGF0aW9uLm1lcmdlU3R5bGVSYW5nZXMocmFuZ2VzKTsKLQotCQlTdHlsZVJhbmdlW10gZXhwZWN0ZWRBbGxSYW5nZXM9IG5ldyBTdHlsZVJhbmdlW10gewotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoMCwgMiwgMSwgLTEsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggIDIsICAgNCwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCAgNCwgIDIwLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDIwLCAyMiwgMSwgLTEsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggMjIsICAyNCwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDI0LCAyNiwgMSwgLTEsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggMjYsICA0NSwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDQ1LCA0NywgMSwgLTEsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSg0NywgNDksIDEsIC0xLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA0OSwgIDUwLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDUwLCA1MSwgMSwgLTEsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDUxLCAgNTIsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoNTIsIDU0LCAxLCAtMSwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggNTQsICA5NiwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA5NiwgMTAyLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDEwMiwgMTM4LCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoMTM4LCAxNDAsIDEsIC0xLCBOT1JNQUwpLAotCQl9OwotCi0JCVN0eWxlUmFuZ2VbXSBleHBlY3RlZE5vbkRlZmF1bHRSYW5nZXM9IG5ldyBTdHlsZVJhbmdlW10gewotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoMCwgMiwgMSwgLTEsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggIDQsICAyMCwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSgyMCwgMjIsIDEsIC0xLCBOT1JNQUwpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoMjQsIDI2LCAxLCAtMSwgTk9STUFMKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDQ1LCA0NywgMSwgLTEsIE5PUk1BTCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSg0NywgNDksIDEsIC0xLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKCA0OSwgIDUwLCBCT0xEKSwKLQkJCQljcmVhdGVTdHlsZVJhbmdlKDUwLCA1MSwgMSwgLTEsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDUxLCAgNTIsIEJPTEQpLAotCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoNTIsIDU0LCAxLCAtMSwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSggOTYsIDEwMiwgQk9MRCksCi0JCQkJY3JlYXRlU3R5bGVSYW5nZSgxMzgsIDE0MCwgMSwgLTEsIE5PUk1BTCksCi0JCX07Ci0KLQkJY2hlY2tSZWdpb25zKGV4cGVjdGVkQWxsUmFuZ2VzLCBleHBlY3RlZE5vbkRlZmF1bHRSYW5nZXMpOwotCX0KLQotLy8gVGVtcGxhdGUKLS8vCi0vLwlwdWJsaWMgdm9pZCB0ZXN0TWVyZ2VTdHlsZVJhbmdlMCgpIHsKLS8vLy8JCVN0eWxlUmFuZ2UgcmFuZ2U9IGNyZWF0ZVN0eWxlUmFuZ2UoMCwgMiwgMSwgLTEsIE5PUk1BTCk7Ci0vLy8vCQlmVGV4dFByZXNlbnRhdGlvbi5tZXJnZVN0eWxlUmFuZ2UocmFuZ2UpOwotLy8KLS8vLy8JCVN0eWxlUmFuZ2VbXSByYW5nZXM9IG5ldyBTdHlsZVJhbmdlW10gewotLy8vLwkJCQljcmVhdGVTdHlsZVJhbmdlKDAsIDIsIDEsIC0xLCBOT1JNQUwpLAotLy8vLwkJfTsKLS8vLy8JCWZUZXh0UHJlc2VudGF0aW9uLm1lcmdlU3R5bGVSYW5nZXMocmFuZ2VzKTsKLS8vCi0vLwkJU3R5bGVSYW5nZVtdIGV4cGVjdGVkQWxsUmFuZ2VzPSBuZXcgU3R5bGVSYW5nZVtdIHsKLS8vCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoICAwLCAgIDQsIE5PUk1BTCksCi0vLwkJCQljcmVhdGVTdHlsZVJhbmdlKCAgNCwgIDIwLCBCT0xEKSwKLS8vCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDIwLCAgNDcsIE5PUk1BTCksCi0vLwkJCQljcmVhdGVTdHlsZVJhbmdlKCA0NywgIDU0LCBCT0xEKSwKLS8vCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDU0LCAgOTYsIE5PUk1BTCksCi0vLwkJCQljcmVhdGVTdHlsZVJhbmdlKCA5NiwgMTAyLCBCT0xEKSwKLS8vCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoMTAyLCAxNDAsIE5PUk1BTCksCi0vLwkJfTsKLS8vCi0vLwkJU3R5bGVSYW5nZVtdIGV4cGVjdGVkTm9uRGVmYXVsdFJhbmdlcz0gbmV3IFN0eWxlUmFuZ2VbXSB7Ci0vLwkJCQljcmVhdGVTdHlsZVJhbmdlKCAgNCwgIDIwLCBCT0xEKSwKLS8vCQkJCWNyZWF0ZVN0eWxlUmFuZ2UoIDQ3LCAgNTQsIEJPTEQpLAotLy8JCQkJY3JlYXRlU3R5bGVSYW5nZSggOTYsIDEwMiwgQk9MRCksCi0vLwkJfTsKLS8vCi0vLwkJY2hlY2tSZWdpb25zKGV4cGVjdGVkQWxsUmFuZ2VzLCBleHBlY3RlZE5vbkRlZmF1bHRSYW5nZXMpOwotLy8JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvVGV4dFZpZXdlclVuZG9NYW5hZ2VyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvVGV4dFZpZXdlclVuZG9NYW5hZ2VyVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZmZkMjg3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL1RleHRWaWV3ZXJVbmRvTWFuYWdlclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2LCAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuamZhY2UudGV4dC50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLm9wZXJhdGlvbnMuQWJzdHJhY3RPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5vcGVyYXRpb25zLklVbmRvYWJsZU9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLm9wZXJhdGlvbnMuT3BlcmF0aW9uSGlzdG9yeUZhY3Rvcnk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UudGV4dC51bmRvLkRvY3VtZW50VW5kb0V2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnRleHQudW5kby5Eb2N1bWVudFVuZG9NYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnRleHQudW5kby5JRG9jdW1lbnRVbmRvTGlzdGVuZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LkRvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSVVuZG9NYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuVGV4dFZpZXdlclVuZG9NYW5hZ2VyOwotCi0vKioKLSAqIFRlc3RzIGZvciBUZXh0Vmlld2VyVW5kb01hbmFnZXIuCi0gKgotICogQHNpbmNlIDMuMgotICovCi1wdWJsaWMgY2xhc3MgVGV4dFZpZXdlclVuZG9NYW5hZ2VyVGVzdCBleHRlbmRzIEFic3RyYWN0VW5kb01hbmFnZXJUZXN0IHsKLQotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJcmV0dXJuIG5ldyBUZXN0U3VpdGUoVGV4dFZpZXdlclVuZG9NYW5hZ2VyVGVzdC5jbGFzcyk7Ci0JfQotCi0JLyoKLQkgKiBAc2VlIFRlc3RDYXNlI1Rlc3RDYXNlKFN0cmluZykKLQkgKi8KLQlwdWJsaWMgVGV4dFZpZXdlclVuZG9NYW5hZ2VyVGVzdChmaW5hbCBTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQkvKgotCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UudGV4dC50ZXN0cy5BYnN0cmFjdFVuZG9NYW5hZ2VyVGVzdCNjcmVhdGVVbmRvTWFuYWdlcihpbnQpCi0JICogQHNpbmNlIDMuMgotCSAqLwotCXByb3RlY3RlZCBJVW5kb01hbmFnZXIgY3JlYXRlVW5kb01hbmFnZXIoaW50IG1heFVuZG9MZXZlbCkgewotCQlyZXR1cm4gbmV3IFRleHRWaWV3ZXJVbmRvTWFuYWdlcihtYXhVbmRvTGV2ZWwpOwotCX0KLQotCS8vLS0tIERvY3VtZW50VW5kb01hbmFnZXIgb25seSAtLS0KLQotCXB1YmxpYyB2b2lkIGludGVybmFsVGVzdFRyYW5zZmVyTm9uVGV4dE9wKGZpbmFsIGJvb2xlYW4gaXNVbmRvYWJsZSkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCU9iamVjdCBjb250ZXh0PSBuZXcgT2JqZWN0KCk7Ci0JCURvY3VtZW50VW5kb01hbmFnZXIgdGVtcFVuZG9NYW5hZ2VyPSBuZXcgRG9jdW1lbnRVbmRvTWFuYWdlcihuZXcgRG9jdW1lbnQoKSk7Ci0JCXRlbXBVbmRvTWFuYWdlci5jb25uZWN0KGNvbnRleHQpOwotCi0JCUlVbmRvYWJsZU9wZXJhdGlvbiBvcGVyYXRpb249IG5ldyBBYnN0cmFjdE9wZXJhdGlvbigiIikgewotCQkJcHVibGljIGJvb2xlYW4gY2FuVW5kbygpIHsKLQkJCQlyZXR1cm4gaXNVbmRvYWJsZTsKLQkJCX0KLQkJCXB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBJQWRhcHRhYmxlIGluZm8pIHRocm93cyBFeGVjdXRpb25FeGNlcHRpb24gewotCQkJCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotCQkJfQotCQkJcHVibGljIElTdGF0dXMgcmVkbyhJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsIElBZGFwdGFibGUgaW5mbykgdGhyb3dzIEV4ZWN1dGlvbkV4Y2VwdGlvbiB7Ci0JCQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0JCQl9Ci0JCQlwdWJsaWMgSVN0YXR1cyB1bmRvKElQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgSUFkYXB0YWJsZSBpbmZvKSB0aHJvd3MgRXhlY3V0aW9uRXhjZXB0aW9uIHsKLQkJCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKLQkJCX0KLQkJfTsKLQkJb3BlcmF0aW9uLmFkZENvbnRleHQodGVtcFVuZG9NYW5hZ2VyLmdldFVuZG9Db250ZXh0KCkpOwotCQlPcGVyYXRpb25IaXN0b3J5RmFjdG9yeS5nZXRPcGVyYXRpb25IaXN0b3J5KCkuYWRkKG9wZXJhdGlvbik7Ci0KLQkJYXNzZXJ0RXF1YWxzKGlzVW5kb2FibGUsIHRlbXBVbmRvTWFuYWdlci51bmRvYWJsZSgpKTsKLQotCQlmaW5hbCBEb2N1bWVudFVuZG9NYW5hZ2VyIHVuZG9NYW5hZ2VyPSBuZXcgRG9jdW1lbnRVbmRvTWFuYWdlcihuZXcgRG9jdW1lbnQoKSk7Ci0JCU9iamVjdCBuZXdDb250ZXh0PSBuZXcgT2JqZWN0KCk7Ci0JCXVuZG9NYW5hZ2VyLmNvbm5lY3QobmV3Q29udGV4dCk7Ci0KLQkJdW5kb01hbmFnZXIuYWRkRG9jdW1lbnRVbmRvTGlzdGVuZXIobmV3IElEb2N1bWVudFVuZG9MaXN0ZW5lcigpIHsKLQkJCXB1YmxpYyB2b2lkIGRvY3VtZW50VW5kb05vdGlmaWNhdGlvbihEb2N1bWVudFVuZG9FdmVudCBldmVudCkgewotCQkJCWZhaWwoKTsKLQkJCX0KLQkJfSk7Ci0KLQkJdW5kb01hbmFnZXIudHJhbnNmZXJVbmRvSGlzdG9yeSh0ZW1wVW5kb01hbmFnZXIpOwotCQl0ZW1wVW5kb01hbmFnZXIuZGlzY29ubmVjdChjb250ZXh0KTsKLQotCQlhc3NlcnRFcXVhbHMoaXNVbmRvYWJsZSwgdW5kb01hbmFnZXIudW5kb2FibGUoKSk7Ci0JCXVuZG9NYW5hZ2VyLnVuZG8oKTsKLQkJYXNzZXJ0RXF1YWxzKGZhbHNlLCB1bmRvTWFuYWdlci51bmRvYWJsZSgpKTsKLQotCQl1bmRvTWFuYWdlci5kaXNjb25uZWN0KG5ld0NvbnRleHQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RUcmFuc2Zlck5vblVuZG9hYmxlTm9uVGV4dE9wKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWludGVybmFsVGVzdFRyYW5zZmVyTm9uVGV4dE9wKGZhbHNlKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0VHJhbnNmZXJVbmRvYWJsZU5vblRleHRPcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlpbnRlcm5hbFRlc3RUcmFuc2Zlck5vblRleHRPcCh0cnVlKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q2FuVW5kbygpIHRocm93cyBFeGNlcHRpb24gewotCQlJRG9jdW1lbnQgZG9jPSBuZXcgRG9jdW1lbnQoKTsKLQkJZmluYWwgRG9jdW1lbnRVbmRvTWFuYWdlciB1bmRvTWFuYWdlcj0gbmV3IERvY3VtZW50VW5kb01hbmFnZXIoZG9jKTsKLQkJT2JqZWN0IGNvbnRleHQ9IG5ldyBPYmplY3QoKTsKLQkJdW5kb01hbmFnZXIuY29ubmVjdChjb250ZXh0KTsKLQotCQl1bmRvTWFuYWdlci5hZGREb2N1bWVudFVuZG9MaXN0ZW5lcihuZXcgSURvY3VtZW50VW5kb0xpc3RlbmVyKCkgewotCi0JCQlwdWJsaWMgdm9pZCBkb2N1bWVudFVuZG9Ob3RpZmljYXRpb24oRG9jdW1lbnRVbmRvRXZlbnQgZXZlbnQpIHsKLQkJCQlpZiAoZXZlbnQuZ2V0RXZlbnRUeXBlKCkgPT0gRG9jdW1lbnRVbmRvRXZlbnQuQUJPVVRfVE9fVU5ETykKLQkJCQkJYXNzZXJ0RXF1YWxzKHRydWUsIHVuZG9NYW5hZ2VyLnVuZG9hYmxlKCkpOwotCQkJCWVsc2UgaWYgKGV2ZW50LmdldEV2ZW50VHlwZSgpID09IERvY3VtZW50VW5kb0V2ZW50LlVORE9ORSkKLQkJCQkJYXNzZXJ0RXF1YWxzKGZhbHNlLCB1bmRvTWFuYWdlci51bmRvYWJsZSgpKTsKLQkJCX0KLQkJfSk7Ci0KLQkJZG9jLnNldCgiZm9vIik7Ci0KLQkJYXNzZXJ0RXF1YWxzKHRydWUsIHVuZG9NYW5hZ2VyLnVuZG9hYmxlKCkpOwotCQl1bmRvTWFuYWdlci51bmRvKCk7Ci0JCWFzc2VydEVxdWFscyhmYWxzZSwgdW5kb01hbmFnZXIudW5kb2FibGUoKSk7Ci0KLQkJdW5kb01hbmFnZXIuZGlzY29ubmVjdChjb250ZXh0KTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL3JlY29uY2lsZXIvQWJzdHJhY3RSZWNvbmNpbGVyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvcmVjb25jaWxlci9BYnN0cmFjdFJlY29uY2lsZXJUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyMGZiYWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvcmVjb25jaWxlci9BYnN0cmFjdFJlY29uY2lsZXJUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwOCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpmYWNlLnRleHQudGVzdHMucmVjb25jaWxlcjsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UudGV4dC50ZXN0cy5BY2Nlc3NvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuQmFkTG9jYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5Eb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklUZXh0Vmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQucmVjb25jaWxlci5BYnN0cmFjdFJlY29uY2lsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5yZWNvbmNpbGVyLkRpcnR5UmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQucmVjb25jaWxlci5JUmVjb25jaWxpbmdTdHJhdGVneTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnRlc3RzLlRlc3RUZXh0Vmlld2VyOwotCi0KLS8qKgotICogUmVjb25jaWxlciB0ZXN0cy4gVXNlcyBiYXJyaWVyIHN5bmNocm9uaXphdGlvbiBhbmQgYSBjYWxsIGxvZyB0byBhc3NlcnQKLSAqIGNvcnJlY3Qgb3JkZXIgb2YgcmVjb25jaWxpbmcgZXZlbnRzLgotICoKLSAqIFRPRE8gdGVzdCByZWNvbmNpbGVyIGFyZ3VtZW50cyAoZGVsYXkgPiAwIGV0Yy4pCi0gKiBUT0RPIGluY3JlbWVudGFsIHJlY29uY2lsZXIgdGVzdHMKLSAqCi0gKiBAc2luY2UgMy4xCi0gKi8KLXB1YmxpYyBjbGFzcyBBYnN0cmFjdFJlY29uY2lsZXJUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCi0JLyoqCi0JICogTW9kaWZpZWQgYmFycmllcjogdGhlcmUgYXJlIHR3byB0aHJlYWRzOiB0aGUgbWFpbiAodGVzdGluZykgdGhyZWFkCi0JICogY3JlYXRpbmcgdGhlIGJhcnJpZXIsIGFuZCB0aGUgcmVjb25jaWxlciB0aHJlYWQuIFdoZW4gYm90aCB0aHJlYWRzIGhhdmUKLQkgKiBtZXQgYXQgdGhlIGJhcnJpZXIsIHRoZSBtYWluIHRocmVhZCBpcyByZWxlYXNlZCBhbmQgY2FuIHBlcmZvcm0KLQkgKiBhc3NlcnRpb25zIHdoaWxlIGJlaW5nIHN1cmUgdGhhdCB0aGUgcmVjb25jaWxlciBpcyBkb3JtYW50LiBBZnRlciB0aGUKLQkgKiB0ZXN0cyBoYXZlIGJlZW4gcGVyZm9ybWVkLCB0aGUgbWFpbiB0aHJlYWQgbXVzdCBjYWxsIDxjb2RlPndha2VBbGw8L2NvZGU+Ci0JICogdG8gcmVsZWFzZSB0aGUgcmVjb25jaWxlciB0aHJlYWQuCi0JICovCi0Jc3RhdGljIGNsYXNzIEJhcnJpZXIgewotCQlwcml2YXRlIGZpbmFsIE9iamVjdCBmTXV0ZXg9IG5ldyBPYmplY3QoKTsKLQkJcHJpdmF0ZSBmaW5hbCBpbnQgZlBhcnRpY2lwYW50czsKLQkJcHJpdmF0ZSBmaW5hbCBUaHJlYWQgZk1haW5UaHJlYWQ7Ci0KLQkJcHJpdmF0ZSBpbnQgZldhaXRpbmc9IDA7Ci0JCXByaXZhdGUgYm9vbGVhbiBmTWFpblRocmVhZEFycml2ZWQ9IGZhbHNlOwotCQlwcml2YXRlIGJvb2xlYW4gZklzSW5hY3RpdmU9IGZhbHNlOwotCi0JCUJhcnJpZXIoKSB7Ci0JCQlmUGFydGljaXBhbnRzPSAyOwotCQkJZk1haW5UaHJlYWQ9IFRocmVhZC5jdXJyZW50VGhyZWFkKCk7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBhd2FpdCgpIHsKLQkJCXN5bmNocm9uaXplZCAoZk11dGV4KSB7Ci0JCQkJaWYgKGZJc0luYWN0aXZlKQotCQkJCQlyZXR1cm47Ci0KLQkJCQlmV2FpdGluZysrOwotCi0JCQkJYm9vbGVhbiBpc01haW5UaHJlYWQ9IFRocmVhZC5jdXJyZW50VGhyZWFkKCkgPT0gZk1haW5UaHJlYWQ7Ci0JCQkJaWYgKGlzTWFpblRocmVhZCkKLQkJCQkJZk1haW5UaHJlYWRBcnJpdmVkPSB0cnVlOwotCi0JCQkJaWYgKGFsbEFycml2ZWQoKSkgewotCQkJCQlpZiAoIWZNYWluVGhyZWFkQXJyaXZlZCkgewotCQkJCQkJZldhaXRpbmctLTsKLQkJCQkJCXRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGdldENsYXNzKCkgKyAiIGNhbid0IGpvaW4gYmFycmllciBpZiBvbmx5IHRoZSBtYWluIHRocmVhZCBpcyBtaXNzaW5nISIpOwotCQkJCQl9Ci0KLQkJCQkJaWYgKCFpc01haW5UaHJlYWQpCi0JCQkJCQlub3RpZnlNYWluVGhyZWFkKCk7Ci0JCQkJfQotCQkJCWlmICghYWxsQXJyaXZlZCgpIHx8ICFpc01haW5UaHJlYWQpIHsKLQkJCQkJdHJ5IHsKLQkJCQkJCWlmICghaXNNYWluVGhyZWFkKQotCQkJCQkJCWZNdXRleC53YWl0KCk7Ci0JCQkJCQllbHNlIHsKLQkJCQkJCQlmTXV0ZXgud2FpdCg1MDAwKTsgLy8gZG9uJ3Qgd2FpdCBmb3JldmVyIGZvciBiYWQgcmVjb25jaWxlcnMKLQkJCQkJCQlpZiAoIWFsbEFycml2ZWQoKSkKLQkJCQkJCQkJZmFpbCgicmVjb25jaWxlciBuZXZlciByYW4gaW4gNSBzZWNvbmRzIik7Ci0JCQkJCQl9Ci0JCQkJCX0gY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpIHsKLQkJCQkJCS8vIHRocmVhZHMgbXVzdCBub3QgYmUgaW50ZXJydXB0ZWQKLQkJCQkJCXRocm93IG5ldyBFcnJvcigpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkJcHJpdmF0ZSBib29sZWFuIGFsbEFycml2ZWQoKSB7Ci0JCQlyZXR1cm4gZldhaXRpbmcgPT0gZlBhcnRpY2lwYW50czsKLQkJfQotCi0JCXByaXZhdGUgdm9pZCBub3RpZnlNYWluVGhyZWFkKCkgewotCQkJZk11dGV4Lm5vdGlmeSgpOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgd2FrZUFsbCgpIHsKLQkJCXN5bmNocm9uaXplZCAoZk11dGV4KSB7Ci0JCQkJZldhaXRpbmc9IDA7Ci0JCQkJZk1haW5UaHJlYWRBcnJpdmVkPSBmYWxzZTsKLQkJCQlmTXV0ZXgubm90aWZ5QWxsKCk7Ci0JCQl9Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBzaHV0ZG93bigpIHsKLQkJCXN5bmNocm9uaXplZCAoZk11dGV4KSB7Ci0JCQkJZklzSW5hY3RpdmU9IHRydWU7Ci0JCQkJZk11dGV4Lm5vdGlmeUFsbCgpOwotCQkJfQotCQl9Ci0JfQotCi0JcHJpdmF0ZSBBY2Nlc3NvciBmQWNjZXNzb3I7Ci0JcHJpdmF0ZSBCYXJyaWVyIGZCYXJyaWVyOwotCXByaXZhdGUgTGlzdCBmQ2FsbExvZzsKLQlwcml2YXRlIElUZXh0Vmlld2VyIGZWaWV3ZXI7Ci0JcHJvdGVjdGVkIEFic3RyYWN0UmVjb25jaWxlciBmUmVjb25jaWxlcjsKLQlwcml2YXRlIERvY3VtZW50IGZEb2N1bWVudDsKLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgewotCQlmQmFycmllcj0gbmV3IEJhcnJpZXIoKTsKLQkJZkNhbGxMb2c9IENvbGxlY3Rpb25zLnN5bmNocm9uaXplZExpc3QobmV3IEFycmF5TGlzdCgpKTsKLQkJZlJlY29uY2lsZXI9IG5ldyBBYnN0cmFjdFJlY29uY2lsZXIoKSB7Ci0JCQkJCXByb3RlY3RlZCB2b2lkIGluaXRpYWxQcm9jZXNzKCkgewotCQkJCQkJZkNhbGxMb2cuYWRkKCJpbml0aWFsUHJvY2VzcyIpOwotCQkJCQkJZkJhcnJpZXIuYXdhaXQoKTsKLQkJCQkJfQotCQkJCQlwcm90ZWN0ZWQgdm9pZCBwcm9jZXNzKERpcnR5UmVnaW9uIGRpcnR5UmVnaW9uKSB7Ci0JCQkJCQlmQ2FsbExvZy5hZGQoInByb2Nlc3MiKTsKLQkJCQkJCWZCYXJyaWVyLmF3YWl0KCk7Ci0JCQkJCX0KLQkJCQkJcHJvdGVjdGVkIHZvaWQgcmVjb25jaWxlckRvY3VtZW50Q2hhbmdlZChJRG9jdW1lbnQgbmV3RG9jdW1lbnQpIHsKLQkJCQkJCWZDYWxsTG9nLmFkZCgicmVjb25jaWxlckRvY3VtZW50Q2hhbmdlZCIpOwotCQkJCQl9Ci0JCQkJCXByb3RlY3RlZCB2b2lkIGFib3V0VG9CZVJlY29uY2lsZWQoKSB7Ci0JCQkJCQlmQ2FsbExvZy5hZGQoImFib3V0VG9CZVJlY29uY2lsZWQiKTsKLQkJCQkJfQotCQkJCQlwcm90ZWN0ZWQgdm9pZCByZWNvbmNpbGVyUmVzZXQoKSB7Ci0JCQkJCQlmQ2FsbExvZy5hZGQoInJlY29uY2lsZXJSZXNldCIpOwotCQkJCQl9Ci0JCQkJCXB1YmxpYyBJUmVjb25jaWxpbmdTdHJhdGVneSBnZXRSZWNvbmNpbGluZ1N0cmF0ZWd5KFN0cmluZyBjb250ZW50VHlwZSkgewotCQkJCQkJcmV0dXJuIG51bGw7Ci0JCQkJCX0KLQkJCQl9OwotCQlmUmVjb25jaWxlci5zZXRJc0luY3JlbWVudGFsUmVjb25jaWxlcihmYWxzZSk7Ci0JCWZSZWNvbmNpbGVyLnNldERlbGF5KDUwKTsgLy8gbWFrZSB0ZXN0cyBydW4gZmFzdGVyCi0KLQkJZlZpZXdlcj0gbmV3IFRlc3RUZXh0Vmlld2VyKCk7Ci0JCWZSZWNvbmNpbGVyLmluc3RhbGwoZlZpZXdlcik7Ci0KLQkJZkFjY2Vzc29yPSBuZXcgQWNjZXNzb3IoZlJlY29uY2lsZXIsIEFic3RyYWN0UmVjb25jaWxlci5jbGFzcyk7Ci0JCU9iamVjdCBvYmplY3Q9IGZBY2Nlc3Nvci5nZXQoImZUaHJlYWQiKTsKLQkJZkFjY2Vzc29yPSBuZXcgQWNjZXNzb3Iob2JqZWN0LCBvYmplY3QuZ2V0Q2xhc3MoKSk7Ci0JfQotCi0KLQlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotCQlmQmFycmllci5zaHV0ZG93bigpOwotCQlmUmVjb25jaWxlci51bmluc3RhbGwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SW5pdGlhbFJlY29uY2lsZSgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0JCS8vIGluaXRpYWxseSB0aGUgcmVjb25jaWxlciBpcyBuZWl0aGVyIGFjdGl2ZSBub3IgZGlydHkKLQkJLy8gWFhYIHNob3VsZG4ndCBpdCBiZSBkaXJ0eT8KLQkJYXNzZXJ0RmFsc2UoaXNBY3RpdmUoKSk7Ci0JCWFzc2VydEZhbHNlKGlzRGlydHkoKSk7Ci0KLQkJLy8gc2V0IHVwIGluaXRpYWwgZG9jdW1lbnQKLQkJZkRvY3VtZW50PSBuZXcgRG9jdW1lbnQoImZvbyIpOwotCQlmVmlld2VyLnNldERvY3VtZW50KGZEb2N1bWVudCk7Ci0JCWFzc2VydEVxdWFscygicmVjb25jaWxlckRvY3VtZW50Q2hhbmdlZCIsIGZDYWxsTG9nLnJlbW92ZSgwKSk7Ci0JCWFzc2VydEVxdWFscygiYWJvdXRUb0JlUmVjb25jaWxlZCIsIGZDYWxsTG9nLnJlbW92ZSgwKSk7Ci0KLQkJZkJhcnJpZXIuYXdhaXQoKTsKLQkJYXNzZXJ0RXF1YWxzKCJpbml0aWFsUHJvY2VzcyIsIGZDYWxsTG9nLnJlbW92ZSgwKSk7Ci0JCS8vIFhYWCBzaG91bGRuJ3QgaXQgYmUgZGlydHkgYW5kIGFjdGl2ZSBkdXJpbmcgaW5pdGlhbFByb2Nlc3M/Ci0JCWFzc2VydEZhbHNlKGlzQWN0aXZlKCkpOwotCQlhc3NlcnRGYWxzZShpc0RpcnR5KCkpOwotCQlmQmFycmllci53YWtlQWxsKCk7Ci0KLQkJLy8gd2FpdCB1bnRpbCBjbGVhbgotCQlwb2xsVW50aWxDbGVhbigpOwotCQlhc3NlcnRGYWxzZShpc0FjdGl2ZSgpKTsKLQkJYXNzZXJ0RmFsc2UoaXNEaXJ0eSgpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RGlydHlpbmdXaGVuQ2xlYW4oKSB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24sIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLQkJaW5zdGFsbERvY3VtZW50KCk7Ci0KLQkJZGlydHkoKTsKLQkJYXNzZXJ0RXF1YWxzKCJhYm91dFRvQmVSZWNvbmNpbGVkIiwgZkNhbGxMb2cucmVtb3ZlKDApKTsKLQkJYXNzZXJ0RXF1YWxzKCJyZWNvbmNpbGVyUmVzZXQiLCBmQ2FsbExvZy5yZW1vdmUoMCkpOwotCi0JCWZCYXJyaWVyLmF3YWl0KCk7Ci0JCWFzc2VydEVxdWFscygicHJvY2VzcyIsIGZDYWxsTG9nLnJlbW92ZSgwKSk7Ci0JCWFzc2VydFRydWUoaXNBY3RpdmUoKSk7Ci0JCWFzc2VydFRydWUoaXNEaXJ0eSgpKTsKLQkJZkJhcnJpZXIud2FrZUFsbCgpOwotCi0JCS8vIHdhaXQgdW50aWwgY2xlYW4KLQkJcG9sbFVudGlsQ2xlYW4oKTsKLQkJYXNzZXJ0RmFsc2UoaXNBY3RpdmUoKSk7Ci0JCWFzc2VydEZhbHNlKGlzRGlydHkoKSk7Ci0JfQotCi0KLQlwcml2YXRlIHZvaWQgZGlydHkoKSB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlmRG9jdW1lbnQucmVwbGFjZSgwLDAsImJhciIpOwotCX0KLQotCi0JcHVibGljIHZvaWQgdGVzdERpcnR5aW5nV2hlblJ1bm5pbmcoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24sIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJaW5zdGFsbERvY3VtZW50KCk7Ci0KLQkJZGlydHkoKTsKLQkJZkJhcnJpZXIuYXdhaXQoKTsKLQkJYXNzZXJ0VHJ1ZShpc0FjdGl2ZSgpKTsKLQkJYXNzZXJ0VHJ1ZShpc0RpcnR5KCkpOwotCQlmQ2FsbExvZy5jbGVhcigpOwotCQlkaXJ0eSgpOwotCQkvLyBubyBhYm91dFRvQmVSZWNvbmNpbGVkIHNpbmNlIHRoZSByZWNvbmNpbGVyIGlzIHN0aWxsIHJ1bm5pbmcKLQkJLy8gd2hlbiB0aGUgc2Vjb25kIGVkaXRpb24gY29tZXMgaW4KLQkJYXNzZXJ0RXF1YWxzKCJyZWNvbmNpbGVyUmVzZXQiLCBmQ2FsbExvZy5yZW1vdmUoMCkpOwotCQlmQmFycmllci53YWtlQWxsKCk7Ci0KLQkJZkJhcnJpZXIuYXdhaXQoKTsKLQkJYXNzZXJ0RXF1YWxzKCJwcm9jZXNzIiwgZkNhbGxMb2cucmVtb3ZlKDApKTsKLQkJZkJhcnJpZXIud2FrZUFsbCgpOwotCQlwb2xsVW50aWxDbGVhbigpOwotCQlhc3NlcnRGYWxzZShpc0FjdGl2ZSgpKTsKLQkJYXNzZXJ0RmFsc2UoaXNEaXJ0eSgpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q2FuY2VsbGluZ1doZW5DbGVhbigpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiwgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlpbnN0YWxsRG9jdW1lbnQoKTsKLQotCQkvLyBkaXJ0eSBhZ2FpbgotCQlkaXJ0eSgpOwotCQlmQmFycmllci5hd2FpdCgpOwotCQlmQmFycmllci53YWtlQWxsKCk7Ci0KLQkJLy8gY2FuY2VsCi0JCWZDYWxsTG9nLmNsZWFyKCk7Ci0JCWZSZWNvbmNpbGVyLnVuaW5zdGFsbCgpOwotCQlwb2xsVW50aWxJbmFjdGl2ZSgpOwotCQlhc3NlcnRUcnVlKGZDYWxsTG9nLmlzRW1wdHkoKSk7Ci0JCWFzc2VydEZhbHNlKGlzQWN0aXZlKCkpOwotCQkvLyBYWFggZmFpbHMgc2luY2UgQWJzdHJhY3RSZWNvbmNpbGVyIGRvZXMgbm90IHVwZGF0ZSBzdGF0ZSBiZWZvcmUgbGVhdmluZwotLy8JCWFzc2VydEZhbHNlKGlzRGlydHkoKSk7IC8vIGZhaWxzCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdENhbmNlbGxpbmdXaGVuUnVubmluZygpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiwgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlpbnN0YWxsRG9jdW1lbnQoKTsKLQotCQkvLyBkaXJ0eSBhbmQgY2FuY2VsCi0JCWRpcnR5KCk7Ci0JCWZCYXJyaWVyLmF3YWl0KCk7Ci0JCWZDYWxsTG9nLmNsZWFyKCk7Ci0JCWZSZWNvbmNpbGVyLnVuaW5zdGFsbCgpOwotCQlmQmFycmllci53YWtlQWxsKCk7Ci0JCXBvbGxVbnRpbEluYWN0aXZlKCk7Ci0JCWFzc2VydFRydWUoZkNhbGxMb2cuaXNFbXB0eSgpKTsKLQkJYXNzZXJ0RmFsc2UoaXNBY3RpdmUoKSk7Ci0JCS8vIFhYWCBmYWlscyBzaW5jZSBBYnN0cmFjdFJlY29uY2lsZXIgZG9lcyBub3QgdXBkYXRlIHN0YXRlIGJlZm9yZSBsZWF2aW5nCi0vLwkJYXNzZXJ0RmFsc2UoaXNEaXJ0eSgpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UmVwbGFjaW5nRG9jdW1lbnRXaGVuQ2xlYW4oKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotCQlpbnN0YWxsRG9jdW1lbnQoKTsKLQotCQkvLyByZXBsYWNlCi0JCWZDYWxsTG9nLmNsZWFyKCk7Ci0JCWZWaWV3ZXIuc2V0RG9jdW1lbnQobmV3IERvY3VtZW50KCJiYXIiKSk7Ci0JCWFzc2VydEVxdWFscygicmVjb25jaWxlckRvY3VtZW50Q2hhbmdlZCIsIGZDYWxsTG9nLnJlbW92ZSgwKSk7Ci0JCWFzc2VydEVxdWFscygiYWJvdXRUb0JlUmVjb25jaWxlZCIsIGZDYWxsTG9nLnJlbW92ZSgwKSk7Ci0JCWFzc2VydEVxdWFscygicmVjb25jaWxlclJlc2V0IiwgZkNhbGxMb2cucmVtb3ZlKDApKTsKLQkJZkJhcnJpZXIuYXdhaXQoKTsKLQkJYXNzZXJ0RXF1YWxzKCJwcm9jZXNzIiwgZkNhbGxMb2cucmVtb3ZlKDApKTsKLQkJZkJhcnJpZXIud2FrZUFsbCgpOwotCi0JCXBvbGxVbnRpbENsZWFuKCk7Ci0JCWFzc2VydEZhbHNlKGlzQWN0aXZlKCkpOwotCQlhc3NlcnRGYWxzZShpc0RpcnR5KCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RSZXBsYWNpbmdEb2N1bWVudFdoZW5SdW5uaW5nKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uLCBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7Ci0JCWluc3RhbGxEb2N1bWVudCgpOwotCi0JCS8vIGRpcnR5IGFuZCByZXBsYWNlCi0JCWRpcnR5KCk7Ci0JCWZCYXJyaWVyLmF3YWl0KCk7Ci0JCWZDYWxsTG9nLmNsZWFyKCk7Ci0JCWZWaWV3ZXIuc2V0RG9jdW1lbnQobmV3IERvY3VtZW50KCJiYXIiKSk7Ci0JCWFzc2VydEVxdWFscygicmVjb25jaWxlckRvY3VtZW50Q2hhbmdlZCIsIGZDYWxsTG9nLnJlbW92ZSgwKSk7Ci0JCWFzc2VydEVxdWFscygicmVjb25jaWxlclJlc2V0IiwgZkNhbGxMb2cucmVtb3ZlKDApKTsKLQkJYXNzZXJ0VHJ1ZShmQ2FsbExvZy5pc0VtcHR5KCkpOwotCQlmQmFycmllci53YWtlQWxsKCk7Ci0KLQkJLy8gWFhYIHRoaXMgZmFpbHMsIHdoaWNoIGlzIGEgYnVnIC0gcmVwbGFjaW5nIHRoZSBkb2N1bWVudCBzaG91bGQKLQkJLy8gY2FuY2VsIHRoZSBwcm9ncmVzcyBtb25pdG9yCi0vLwkJZkJhcnJpZXIuYXdhaXQoKTsKLS8vCQlhc3NlcnRFcXVhbHMoInByb2Nlc3MiLCBmQ2FsbExvZy5yZW1vdmUoMCkpOwotLy8JCWZCYXJyaWVyLndha2VBbGwoKTsKLQl9Ci0KLQl2b2lkIGluc3RhbGxEb2N1bWVudCgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0JCWZEb2N1bWVudD0gbmV3IERvY3VtZW50KCJmb28iKTsKLQkJZlZpZXdlci5zZXREb2N1bWVudChmRG9jdW1lbnQpOwotCi0JCS8vIGluaXRpYWwgcHJvY2VzcwotCQlmQmFycmllci5hd2FpdCgpOwotCQlmQmFycmllci53YWtlQWxsKCk7Ci0KLQkJcG9sbFVudGlsQ2xlYW4oKTsKLQkJZkNhbGxMb2cuY2xlYXIoKTsKLQl9Ci0KLQl2b2lkIHBvbGxVbnRpbENsZWFuKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLQkJLy8gd2FpdCBmb3IgcmVjb25jaWxlciB0byBiZWNvbWUgY2xlYW4KLQkJbG9uZyBzdGFydD0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JCXdoaWxlIChpc0RpcnR5KCkpIHsKLQkJCWxvbmcgY3VycmVudD0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JCQlpZiAoY3VycmVudCA+IHN0YXJ0ICsgNTAwMCkKLQkJCQlmYWlsKCJ3YWl0ZWQgPiA1cyBmb3IgcmVjb25jaWxlciB0byBjb21wbGV0ZSIpOwotCQkJc3luY2hyb25pemVkICh0aGlzKSB7Ci0JCQkJd2FpdCg1MCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQl2b2lkIHBvbGxVbnRpbEluYWN0aXZlKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLQkJLy8gd2FpdCBmb3IgcmVjb25jaWxlciB0byBiZWNvbWUgY2xlYW4KLQkJbG9uZyBzdGFydD0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JCXdoaWxlIChpc0FjdGl2ZSgpKSB7Ci0JCQlsb25nIGN1cnJlbnQ9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCQkJaWYgKGN1cnJlbnQgPiBzdGFydCArIDUwMDApCi0JCQkJZmFpbCgid2FpdGVkID4gNXMgZm9yIHJlY29uY2lsZXIgdG8gY29tcGxldGUiKTsKLQkJCXN5bmNocm9uaXplZCAodGhpcykgewotCQkJCXdhaXQoNTApOwotCQkJfQotCQl9Ci0JfQotCi0JYm9vbGVhbiBpc0FjdGl2ZSgpIHsKLQkJT2JqZWN0IGJvb2w9IGZBY2Nlc3Nvci5pbnZva2UoImlzQWN0aXZlIiwgbnVsbCk7Ci0JCXJldHVybiAoKEJvb2xlYW4pIGJvb2wpLmJvb2xlYW5WYWx1ZSgpOwotCX0KLQotCWJvb2xlYW4gaXNEaXJ0eSgpIHsKLQkJT2JqZWN0IGJvb2w9IGZBY2Nlc3Nvci5pbnZva2UoImlzRGlydHkiLCBudWxsKTsKLQkJcmV0dXJuICgoQm9vbGVhbikgYm9vbCkuYm9vbGVhblZhbHVlKCk7Ci0JfQotCi0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL3JlY29uY2lsZXIvUmVjb25jaWxlclRlc3RTdWl0ZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvcmVjb25jaWxlci9SZWNvbmNpbGVyVGVzdFN1aXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyZGZlMTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvcmVjb25jaWxlci9SZWNvbmNpbGVyVGVzdFN1aXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnRlc3RzLnJlY29uY2lsZXI7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi0KLS8qKgotICoKLSAqIEBzaW5jZSAzLjAKLSAqLwotcHVibGljIGNsYXNzIFJlY29uY2lsZXJUZXN0U3VpdGUgewotCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlUZXN0U3VpdGUgc3VpdGU9IG5ldyBUZXN0U3VpdGUoIlRlc3QgU3VpdGUgb3JnLmVjbGlwc2UuamZhY2UudGV4dC50ZXN0cy5yZWNvbmNpbGVyIik7Ci0JCS8vJEpVbml0LUJFR0lOJAotCQlzdWl0ZS5hZGRUZXN0U3VpdGUoQWJzdHJhY3RSZWNvbmNpbGVyVGVzdC5jbGFzcyk7Ci0JCS8vJEpVbml0LUVORCQKLQkJcmV0dXJuIHN1aXRlOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL3J1bGVzL0RlZmF1bHRQYXJ0aXRpb25lclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL3J1bGVzL0RlZmF1bHRQYXJ0aXRpb25lclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGRjMTE0Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9ydWxlcy9EZWZhdWx0UGFydGl0aW9uZXJUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuamZhY2UudGV4dC50ZXN0cy5ydWxlczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50UGFydGl0aW9uZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5ydWxlcy5EZWZhdWx0UGFydGl0aW9uZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5ydWxlcy5JUGFydGl0aW9uVG9rZW5TY2FubmVyOwotCi1wdWJsaWMgY2xhc3MgRGVmYXVsdFBhcnRpdGlvbmVyVGVzdCBleHRlbmRzIEZhc3RQYXJ0aXRpb25lclRlc3QgewotCXByb3RlY3RlZCBJRG9jdW1lbnRQYXJ0aXRpb25lciBjcmVhdGVQYXJ0aXRpb25lcihJUGFydGl0aW9uVG9rZW5TY2FubmVyIHNjYW5uZXIpIHsKLQkJcmV0dXJuIG5ldyBEZWZhdWx0UGFydGl0aW9uZXIoc2Nhbm5lciwgbmV3IFN0cmluZ1tdIHsgREVGQVVMVCwgQ09NTUVOVCB9KTsKLQl9Ci0KLQkvKgotCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2UudGV4dC50ZXN0cy5ydWxlcy5GYXN0UGFydGl0aW9uZXJUZXN0I3Rlc3RQUjEzMDkwMCgpCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFBSMTMwOTAwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiQnVnMTMwOTAwIG5vdCBmaXhlZCBpbiBEZWZhdWx0UGFydGl0aW9uZXIiKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9ydWxlcy9EZWZhdWx0UGFydGl0aW9uZXJaZXJvTGVuZ3RoVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvcnVsZXMvRGVmYXVsdFBhcnRpdGlvbmVyWmVyb0xlbmd0aFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWUxNzkyYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9ydWxlcy9EZWZhdWx0UGFydGl0aW9uZXJaZXJvTGVuZ3RoVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjY1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpmYWNlLnRleHQudGVzdHMucnVsZXM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LkRvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSVR5cGVkUmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQucnVsZXMuRmFzdFBhcnRpdGlvbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQucnVsZXMuSVBhcnRpdGlvblRva2VuU2Nhbm5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnJ1bGVzLklQcmVkaWNhdGVSdWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQucnVsZXMuSVRva2VuOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQucnVsZXMuTXVsdGlMaW5lUnVsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnJ1bGVzLlJ1bGVCYXNlZFBhcnRpdGlvblNjYW5uZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5ydWxlcy5Ub2tlbjsKLQotCi0vKioKLSAqIEBzaW5jZSAzLjAKLSAqLwotcHVibGljIGNsYXNzIERlZmF1bHRQYXJ0aXRpb25lclplcm9MZW5ndGhUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIENPTU1FTlQ9ICJjb21tZW50IjsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVD0gSURvY3VtZW50LkRFRkFVTFRfQ09OVEVOVF9UWVBFOwotCi0JcHJpdmF0ZSBJRG9jdW1lbnQgZkRvYzsKLQlwcml2YXRlIEZhc3RQYXJ0aXRpb25lciBmUGFydGl0aW9uZXI7Ci0KLQlwdWJsaWMgdm9pZCBzZXRVcCgpIHsKLQkJZkRvYz0gbmV3IERvY3VtZW50KCk7Ci0JCUlQYXJ0aXRpb25Ub2tlblNjYW5uZXIgc2Nhbm5lcj0gbmV3IFJ1bGVCYXNlZFBhcnRpdGlvblNjYW5uZXIoKSB7Ci0JCQl7Ci0JCQkJSVRva2VuIGNvbW1lbnQ9IG5ldyBUb2tlbihDT01NRU5UKTsKLQkJCQlJUHJlZGljYXRlUnVsZVtdIHJ1bGVzPSBuZXcgSVByZWRpY2F0ZVJ1bGVbXSB7IG5ldyBNdWx0aUxpbmVSdWxlKCIvKiIsICIqLyIsIGNvbW1lbnQpIH07Ci0JCQkJc2V0UHJlZGljYXRlUnVsZXMocnVsZXMpOwotCi0JCQl9Ci0JCX07Ci0JCWZQYXJ0aXRpb25lcj0gbmV3IEZhc3RQYXJ0aXRpb25lcihzY2FubmVyLCBuZXcgU3RyaW5nW10geyBERUZBVUxULCBDT01NRU5UIH0pOwotCQlmRG9jLnNldERvY3VtZW50UGFydGl0aW9uZXIoZlBhcnRpdGlvbmVyKTsKLQkJZlBhcnRpdGlvbmVyLmNvbm5lY3QoZkRvYyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldFplcm9MZW5ndGhQYXJ0aXRpb24oKSB7Ci0JCWZEb2Muc2V0KCJkb2N1ICAgICBtZW50LyogY29tbWVudCAqL2RvY3UgICAgIG1lbnQiKTsKLQotCQlpbnRbXSBvZmZzZXRzPSBuZXcgaW50W10geyAxMywgMjYgfTsKLQkJYXNzZXJ0R2V0WmVyb0xlbmd0aFBhcnRpdGlvbl9JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKG9mZnNldHMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRaZXJvTGVuZ3RoUGFydGl0aW9uRW1wdHlNaWRkbGUoKSB7Ci0JCWZEb2Muc2V0KCJkb2N1ICAgICBtZW50LyogY29tbWVudCAqLy8qIGNvbW1lbnQgKi9kb2N1ICAgICBtZW50Iik7Ci0KLQkJaW50W10gb2Zmc2V0cz0gbmV3IGludFtdIHsgMTMsIDI2LCAyNiwgMzkgfTsKLQkJYXNzZXJ0R2V0WmVyb0xlbmd0aFBhcnRpdGlvbl9JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKG9mZnNldHMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRaZXJvTGVuZ3RoUGFydGl0aW9uRW1wdHlTdGFydCgpIHsKLQkJZkRvYy5zZXQoIi8qIGNvbW1lbnQgKi9kb2N1ICAgICBtZW50Iik7Ci0KLQkJaW50W10gb2Zmc2V0cz0gbmV3IGludFtdIHsgMCwgMTMgfTsKLQkJYXNzZXJ0R2V0WmVyb0xlbmd0aFBhcnRpdGlvbl9JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKG9mZnNldHMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRaZXJvTGVuZ3RoUGFydGl0aW9uRW1wdHlFbmQoKSB7Ci0JCWZEb2Muc2V0KCJkb2N1ICAgICBtZW50LyogY29tbWVudCAqLyIpOwotCi0JCWludFtdIG9mZnNldHM9IG5ldyBpbnRbXSB7IDEzLCAyNiB9OwotCQlhc3NlcnRHZXRaZXJvTGVuZ3RoUGFydGl0aW9uX0ludGVybGVhdmluZ1BhcnRpdGlvbnMob2Zmc2V0cyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldFplcm9MZW5ndGhDb250ZW50VHlwZSgpIHsKLQkJZkRvYy5zZXQoImRvY3UgICAgIG1lbnQvKiBjb21tZW50ICovZG9jdSAgICAgbWVudCIpOwotCi0JCWludFtdIG9mZnNldHM9IG5ldyBpbnRbXSB7IDEzLCAyNiB9OwotCQlhc3NlcnRHZXRaZXJvTGVuZ3RoQ29udGVudFR5cGVfSW50ZXJsZWF2aW5nUGFydGl0aW9ucyhvZmZzZXRzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0WmVyb0xlbmd0aENvbnRlbnRUeXBlRW1wdHlNaWRkbGUoKSB7Ci0JCWZEb2Muc2V0KCJkb2N1ICAgICBtZW50LyogY29tbWVudCAqLy8qIGNvbW1lbnQgKi9kb2N1ICAgICBtZW50Iik7Ci0KLQkJaW50W10gb2Zmc2V0cz0gbmV3IGludFtdIHsgMTMsIDI2LCAyNiwgMzkgfTsKLQkJYXNzZXJ0R2V0WmVyb0xlbmd0aENvbnRlbnRUeXBlX0ludGVybGVhdmluZ1BhcnRpdGlvbnMob2Zmc2V0cyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldFplcm9MZW5ndGhDb250ZW50VHlwZUVtcHR5U3RhcnQoKSB7Ci0JCWZEb2Muc2V0KCIvKiBjb21tZW50ICovZG9jdSAgICAgbWVudCIpOwotCi0JCWludFtdIG9mZnNldHM9IG5ldyBpbnRbXSB7IDAsIDEzIH07Ci0JCWFzc2VydEdldFplcm9MZW5ndGhDb250ZW50VHlwZV9JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKG9mZnNldHMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRaZXJvTGVuZ3RoQ29udGVudFR5cGVFbXB0eUVuZCgpIHsKLQkJZkRvYy5zZXQoImRvY3UgICAgIG1lbnQvKiBjb21tZW50ICovIik7Ci0KLQkJaW50W10gb2Zmc2V0cz0gbmV3IGludFtdIHsgMTMsIDI2IH07Ci0JCWFzc2VydEdldFplcm9MZW5ndGhDb250ZW50VHlwZV9JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKG9mZnNldHMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDb21wdXRlWmVyb0xlbmd0aFBhcnRpdGlvbmluZygpIHsKLQkJZkRvYy5zZXQoImRvY3UgICAgIG1lbnQvKiBjb21tZW50ICovZG9jdSAgICAgbWVudCIpOwotCi0JCWludFtdIG9mZnNldHM9IG5ldyBpbnRbXSB7IDEzLCAyNiB9OwotCQlhc3NlcnRDb21wdXRlWmVyb0xlbmd0aFBhcnRpdGlvbmluZ19JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKG9mZnNldHMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDb21wdXRlWmVyb0xlbmd0aFBhcnRpdGlvbmluZ0VtcHR5TWlkZGxlKCkgewotCQlmRG9jLnNldCgiZG9jdSAgICAgbWVudC8qIGNvbW1lbnQgKi8vKiBjb21tZW50ICovZG9jdSAgICAgbWVudCIpOwotCi0JCWludFtdIG9mZnNldHM9IG5ldyBpbnRbXSB7IDEzLCAyNiwgMjYsIDM5IH07Ci0JCWFzc2VydENvbXB1dGVaZXJvTGVuZ3RoUGFydGl0aW9uaW5nX0ludGVybGVhdmluZ1BhcnRpdGlvbnMob2Zmc2V0cyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENvbXB1dGVaZXJvTGVuZ3RoUGFydGl0aW9uaW5nRW1wdHlTdGFydCgpIHsKLQkJZkRvYy5zZXQoIi8qIGNvbW1lbnQgKi9kb2N1ICAgICBtZW50Iik7Ci0KLQkJaW50W10gb2Zmc2V0cz0gbmV3IGludFtdIHsgMCwgMTMgfTsKLQkJYXNzZXJ0Q29tcHV0ZVplcm9MZW5ndGhQYXJ0aXRpb25pbmdfSW50ZXJsZWF2aW5nUGFydGl0aW9ucyhvZmZzZXRzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q29tcHV0ZVplcm9MZW5ndGhQYXJ0aXRpb25pbmdFbXB0eUVuZCgpIHsKLQkJZkRvYy5zZXQoImRvY3UgICAgIG1lbnQvKiBjb21tZW50ICovIik7Ci0KLQkJaW50W10gb2Zmc2V0cz0gbmV3IGludFtdIHsgMTMsIDI2IH07Ci0JCWFzc2VydENvbXB1dGVaZXJvTGVuZ3RoUGFydGl0aW9uaW5nX0ludGVybGVhdmluZ1BhcnRpdGlvbnMob2Zmc2V0cyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENvbXB1dGVQYXJ0aXRpb25pbmdTdWJyYW5nZUJlZm9yZUJvdW5kYXJpZXMoKSB7Ci0JCWZEb2Muc2V0KCJkb2N1ICAgICBtZW50LyogY29tbWVudCAqLy8qIGNvbW1lbnQgKi9kb2N1ICAgICBtZW50Iik7Ci0KLQkJaW50W10gb2Zmc2V0cz0gbmV3IGludFtdIHsgMTMsIDI2LCAyNiB9OwotCQlhc3NlcnRDb21wdXRlWmVyb0xlbmd0aFBhcnRpdGlvbmluZ19JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKDEyLCAzOCwgb2Zmc2V0cywgREVGQVVMVCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENvbXB1dGVQYXJ0aXRpb25pbmdTdWJyYW5nZU9uQm91bmRhcmllcygpIHsKLQkJZkRvYy5zZXQoImRvY3UgICAgIG1lbnQvKiBjb21tZW50ICovLyogY29tbWVudCAqL2RvY3UgICAgIG1lbnQiKTsKLQotCQlpbnRbXSBvZmZzZXRzPSBuZXcgaW50W10geyAxMywgMjYsIDI2LCAzOSB9OwotCQlhc3NlcnRDb21wdXRlWmVyb0xlbmd0aFBhcnRpdGlvbmluZ19JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKDEzLCAzOSwgb2Zmc2V0cywgREVGQVVMVCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENvbXB1dGVQYXJ0aXRpb25pbmdTdWJyYW5nZU9uQm91bmRhcmllczIoKSB7Ci0JCWZEb2Muc2V0KCIvKiBjb21tZW50ICovLyogY29tbWVudCAqLy8qIGNvbW1lbnQgKi8iKTsKLQotCQlpbnRbXSBvZmZzZXRzPSBuZXcgaW50W10geyAxMywgMjYgfTsKLQkJYXNzZXJ0Q29tcHV0ZVplcm9MZW5ndGhQYXJ0aXRpb25pbmdfSW50ZXJsZWF2aW5nUGFydGl0aW9ucygxMywgMjYsIG9mZnNldHMsIERFRkFVTFQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDb21wdXRlUGFydGl0aW9uaW5nU3VicmFuZ2VBZnRlckJvdW5kYXJpZXMoKSB7Ci0JCWZEb2Muc2V0KCJkb2N1ICAgICBtZW50LyogY29tbWVudCAqLy8qIGNvbW1lbnQgKi9kb2N1ICAgICBtZW50Iik7Ci0KLQkJaW50W10gb2Zmc2V0cz0gbmV3IGludFtdIHsgMjYsIDI2LCAzOSB9OwotCQlhc3NlcnRDb21wdXRlWmVyb0xlbmd0aFBhcnRpdGlvbmluZ19JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKDE0LCA0MCwgb2Zmc2V0cywgQ09NTUVOVCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENvbXB1dGVQYXJ0aXRpb25pbmdTdWJyYW5nZUluQm91bmRhcmllczEoKSB7Ci0JCWZEb2Muc2V0KCIvKiBjb21tZW50ICovIik7Ci0KLQkJaW50W10gb2Zmc2V0cz0gbmV3IGludFtdIHsgfTsKLQkJYXNzZXJ0Q29tcHV0ZVplcm9MZW5ndGhQYXJ0aXRpb25pbmdfSW50ZXJsZWF2aW5nUGFydGl0aW9ucygxLCAxMiwgb2Zmc2V0cywgQ09NTUVOVCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENvbXB1dGVQYXJ0aXRpb25pbmdTdWJyYW5nZUluQm91bmRhcmllczIoKSB7Ci0JCWZEb2Muc2V0KCJkb2N1ICAgICBtZW50Iik7Ci0KLQkJaW50W10gb2Zmc2V0cz0gbmV3IGludFtdIHsgfTsKLQkJYXNzZXJ0Q29tcHV0ZVplcm9MZW5ndGhQYXJ0aXRpb25pbmdfSW50ZXJsZWF2aW5nUGFydGl0aW9ucygxLCAxMiwgb2Zmc2V0cywgREVGQVVMVCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGFzc2VydENvbXB1dGVaZXJvTGVuZ3RoUGFydGl0aW9uaW5nX0ludGVybGVhdmluZ1BhcnRpdGlvbnMoaW50W10gb2Zmc2V0cykgewotCQlhc3NlcnRDb21wdXRlWmVyb0xlbmd0aFBhcnRpdGlvbmluZ19JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKDAsIGZEb2MuZ2V0TGVuZ3RoKCksIG9mZnNldHMsIERFRkFVTFQpOwotCX0KLQotCXByaXZhdGUgdm9pZCBhc3NlcnRDb21wdXRlWmVyb0xlbmd0aFBhcnRpdGlvbmluZ19JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKGludCBzdGFydE9mZnNldCwgaW50IGVuZE9mZnNldCwgaW50W10gb2Zmc2V0cywgU3RyaW5nIHN0YXJ0VHlwZSkgewotCQlJVHlwZWRSZWdpb25bXSByZWdpb25zPSBmUGFydGl0aW9uZXIuY29tcHV0ZVBhcnRpdGlvbmluZyhzdGFydE9mZnNldCwgZW5kT2Zmc2V0IC0gc3RhcnRPZmZzZXQsIHRydWUpOwotCi0JCVN0cmluZyB0eXBlPSBzdGFydFR5cGU7Ci0JCWludCBwcmV2aW91c09mZnNldD0gc3RhcnRPZmZzZXQ7Ci0KLQkJYXNzZXJ0RXF1YWxzKG9mZnNldHMubGVuZ3RoICsgMSwgcmVnaW9ucy5sZW5ndGgpOwotCQlmb3IgKGludCBpPSAwOyBpIDw9IG9mZnNldHMubGVuZ3RoOyBpKyspIHsKLQkJCWludCBjdXJyZW50T2Zmc2V0PSAoaSA9PSBvZmZzZXRzLmxlbmd0aCkgPyBlbmRPZmZzZXQgOiBvZmZzZXRzW2ldOwotCQkJSVR5cGVkUmVnaW9uIHJlZ2lvbj0gcmVnaW9uc1tpXTsKLQotCQkJYXNzZXJ0VHlwZWRSZWdpb24ocmVnaW9uLCBwcmV2aW91c09mZnNldCwgY3VycmVudE9mZnNldCwgdHlwZSk7Ci0KLQkJCS8vIGFkdmFuY2UKLQkJCWlmICh0eXBlID09IERFRkFVTFQpCi0JCQkJdHlwZT0gQ09NTUVOVDsKLQkJCWVsc2UKLQkJCQl0eXBlPSBERUZBVUxUOwotCQkJcHJldmlvdXNPZmZzZXQ9IGN1cnJlbnRPZmZzZXQ7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgYXNzZXJ0R2V0WmVyb0xlbmd0aENvbnRlbnRUeXBlX0ludGVybGVhdmluZ1BhcnRpdGlvbnMoaW50W10gb2Zmc2V0cykgewotCQlTdHJpbmcgdHlwZT0gREVGQVVMVDsKLQkJaW50IHByZXZpb3VzT2Zmc2V0PSAwOwotCQlmb3IgKGludCBpPSAwOyBpIDw9IG9mZnNldHMubGVuZ3RoOyBpKyspIHsKLQkJCWludCBvZmZzZXQ9IChpID09IG9mZnNldHMubGVuZ3RoKSA/IGZEb2MuZ2V0TGVuZ3RoKCkgOiBvZmZzZXRzW2ldOwotCQkJYXNzZXJ0RXF1YWxQYXJ0aXRpb25UeXBlKHByZXZpb3VzT2Zmc2V0LCBvZmZzZXQsIHR5cGUpOwotCi0JCQkvLyBhZHZhbmNlCi0JCQlpZiAodHlwZSA9PSBERUZBVUxUKQotCQkJCXR5cGU9IENPTU1FTlQ7Ci0JCQllbHNlCi0JCQkJdHlwZT0gREVGQVVMVDsKLQkJCXByZXZpb3VzT2Zmc2V0PSBvZmZzZXQ7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgYXNzZXJ0R2V0WmVyb0xlbmd0aFBhcnRpdGlvbl9JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKGludFtdIG9mZnNldHMpIHsKLQkJU3RyaW5nIHR5cGU9IERFRkFVTFQ7Ci0JCWludCBwcmV2aW91c09mZnNldD0gMDsKLQkJZm9yIChpbnQgaT0gMDsgaSA8PSBvZmZzZXRzLmxlbmd0aDsgaSsrKSB7Ci0JCQlpbnQgb2Zmc2V0PSAoaSA9PSBvZmZzZXRzLmxlbmd0aCkgPyBmRG9jLmdldExlbmd0aCgpIDogb2Zmc2V0c1tpXTsKLQkJCWFzc2VydEVxdWFsUGFydGl0aW9uKHByZXZpb3VzT2Zmc2V0LCBvZmZzZXQsIHR5cGUpOwotCi0JCQkvLyBhZHZhbmNlCi0JCQlpZiAodHlwZSA9PSBERUZBVUxUKQotCQkJCXR5cGU9IENPTU1FTlQ7Ci0JCQllbHNlCi0JCQkJdHlwZT0gREVGQVVMVDsKLQkJCXByZXZpb3VzT2Zmc2V0PSBvZmZzZXQ7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIGJvb2xlYW4gaXNPcGVuVHlwZShTdHJpbmcgdHlwZSkgewotCQlyZXR1cm4gdHlwZS5lcXVhbHMoREVGQVVMVCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGFzc2VydEVxdWFsUGFydGl0aW9uKGludCBvZmZzZXQsIGludCBpbmNsdXNpdmVFbmQsIFN0cmluZyB0eXBlKSB7Ci0JCWludCBmcm9tPSBpc09wZW5UeXBlKHR5cGUpID8gb2Zmc2V0IDogb2Zmc2V0ICsgMTsKLQkJaW50IHRvPSBpc09wZW5UeXBlKHR5cGUpID8gaW5jbHVzaXZlRW5kIDogaW5jbHVzaXZlRW5kIC0gMTsKLQkJZm9yIChpbnQgaT0gZnJvbTsgaSA8PSB0bzsgaSsrKSB7Ci0JCQlJVHlwZWRSZWdpb24gcmVnaW9uPSBmUGFydGl0aW9uZXIuZ2V0UGFydGl0aW9uKGksIHRydWUpOwotCQkJYXNzZXJ0VHlwZWRSZWdpb24ocmVnaW9uLCBvZmZzZXQsIGluY2x1c2l2ZUVuZCwgdHlwZSk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgYXNzZXJ0VHlwZWRSZWdpb24oSVR5cGVkUmVnaW9uIHJlZ2lvbiwgaW50IG9mZnNldCwgaW50IGluY2x1c2l2ZUVuZCwgU3RyaW5nIHR5cGUpIHsKLQkJYXNzZXJ0RXF1YWxzKG9mZnNldCwgcmVnaW9uLmdldE9mZnNldCgpKTsKLQkJYXNzZXJ0RXF1YWxzKGluY2x1c2l2ZUVuZCAtIG9mZnNldCwgcmVnaW9uLmdldExlbmd0aCgpKTsKLQkJYXNzZXJ0RXF1YWxzKHR5cGUsIHJlZ2lvbi5nZXRUeXBlKCkpOwotCX0KLQotCXByaXZhdGUgdm9pZCBhc3NlcnRFcXVhbFBhcnRpdGlvblR5cGUoaW50IG9mZnNldCwgaW50IGluY2x1c2l2ZUVuZCwgU3RyaW5nIHR5cGUpIHsKLQkJaW50IGZyb209IGlzT3BlblR5cGUodHlwZSkgPyBvZmZzZXQgOiBvZmZzZXQgKyAxOwotCQlpbnQgdG89IGlzT3BlblR5cGUodHlwZSkgPyBpbmNsdXNpdmVFbmQgOiBpbmNsdXNpdmVFbmQgLSAxOwotCQlmb3IgKGludCBpPSBmcm9tOyBpIDw9IHRvOyBpKyspIHsKLQkJCWFzc2VydEVxdWFscyh0eXBlLCBmUGFydGl0aW9uZXIuZ2V0Q29udGVudFR5cGUoaSwgdHJ1ZSkpOwotCQl9Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9ydWxlcy9GYXN0UGFydGl0aW9uZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9ydWxlcy9GYXN0UGFydGl0aW9uZXJUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2NzAxNjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvcnVsZXMvRmFzdFBhcnRpdGlvbmVyVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzA1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpmYWNlLnRleHQudGVzdHMucnVsZXM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LkJhZExvY2F0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnRQYXJ0aXRpb25lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklUeXBlZFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnJ1bGVzLkZhc3RQYXJ0aXRpb25lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnJ1bGVzLklQYXJ0aXRpb25Ub2tlblNjYW5uZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5ydWxlcy5JUHJlZGljYXRlUnVsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnJ1bGVzLklUb2tlbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnJ1bGVzLk11bHRpTGluZVJ1bGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5ydWxlcy5SdWxlQmFzZWRQYXJ0aXRpb25TY2FubmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQucnVsZXMuU2luZ2xlTGluZVJ1bGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5ydWxlcy5Ub2tlbjsKLQotCi0vKioKLSAqIEBzaW5jZSAzLjAKLSAqLwotcHVibGljIGNsYXNzIEZhc3RQYXJ0aXRpb25lclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBDT01NRU5UPSAiY29tbWVudCI7Ci0JcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVD0gSURvY3VtZW50LkRFRkFVTFRfQ09OVEVOVF9UWVBFOwotCi0JcHJpdmF0ZSBJRG9jdW1lbnQgZkRvYzsKLQlwcml2YXRlIElEb2N1bWVudFBhcnRpdGlvbmVyIGZQYXJ0aXRpb25lcjsKLQotCXB1YmxpYyB2b2lkIHNldFVwKCkgewotCQlmRG9jPSBuZXcgRG9jdW1lbnQoKTsKLQkJSVBhcnRpdGlvblRva2VuU2Nhbm5lciBzY2FubmVyPSBuZXcgUnVsZUJhc2VkUGFydGl0aW9uU2Nhbm5lcigpIHsKLQkJCXsKLQkJCQlJVG9rZW4gY29tbWVudD0gbmV3IFRva2VuKENPTU1FTlQpOwotCQkJCUlQcmVkaWNhdGVSdWxlW10gcnVsZXM9IG5ldyBJUHJlZGljYXRlUnVsZVtdIHsgbmV3IE11bHRpTGluZVJ1bGUoIi8qIiwgIiovIiwgY29tbWVudCkgfTsKLQkJCQlzZXRQcmVkaWNhdGVSdWxlcyhydWxlcyk7Ci0KLQkJCX0KLQkJfTsKLQkJZlBhcnRpdGlvbmVyPSBjcmVhdGVQYXJ0aXRpb25lcihzY2FubmVyKTsKLQkJZkRvYy5zZXREb2N1bWVudFBhcnRpdGlvbmVyKGZQYXJ0aXRpb25lcik7Ci0JCWZQYXJ0aXRpb25lci5jb25uZWN0KGZEb2MpOwotCX0KLQotCXByb3RlY3RlZCBJRG9jdW1lbnRQYXJ0aXRpb25lciBjcmVhdGVQYXJ0aXRpb25lcihJUGFydGl0aW9uVG9rZW5TY2FubmVyIHNjYW5uZXIpIHsKLQkJcmV0dXJuIG5ldyBGYXN0UGFydGl0aW9uZXIoc2Nhbm5lciwgbmV3IFN0cmluZ1tdIHsgREVGQVVMVCwgQ09NTUVOVCB9KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0UGFydGl0aW9uKCkgewotCQlmRG9jLnNldCgiZG9jdSAgICAgbWVudC8qIGNvbW1lbnQgKi9kb2N1ICAgICBtZW50Iik7Ci0KLQkJaW50W10gb2Zmc2V0cz0gbmV3IGludFtdIHsgMTMsIDI2IH07Ci0JCWFzc2VydEdldFBhcnRpdGlvbl9JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKG9mZnNldHMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRQYXJ0aXRpb25FbXB0eU1pZGRsZSgpIHsKLQkJZkRvYy5zZXQoImRvY3UgICAgIG1lbnQvKiBjb21tZW50ICovLyogY29tbWVudCAqL2RvY3UgICAgIG1lbnQiKTsKLQotCQlpbnRbXSBvZmZzZXRzPSBuZXcgaW50W10geyAxMywgMjYsIDI2LCAzOSB9OwotCQlhc3NlcnRHZXRQYXJ0aXRpb25fSW50ZXJsZWF2aW5nUGFydGl0aW9ucyhvZmZzZXRzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0UGFydGl0aW9uRW1wdHlTdGFydCgpIHsKLQkJZkRvYy5zZXQoIi8qIGNvbW1lbnQgKi9kb2N1ICAgICBtZW50Iik7Ci0KLQkJaW50W10gb2Zmc2V0cz0gbmV3IGludFtdIHsgMCwgMTMgfTsKLQkJYXNzZXJ0R2V0UGFydGl0aW9uX0ludGVybGVhdmluZ1BhcnRpdGlvbnMob2Zmc2V0cyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldFBhcnRpdGlvbkVtcHR5RW5kKCkgewotCQlmRG9jLnNldCgiZG9jdSAgICAgbWVudC8qIGNvbW1lbnQgKi8iKTsKLQotCQlpbnRbXSBvZmZzZXRzPSBuZXcgaW50W10geyAxMywgMjYgfTsKLQkJYXNzZXJ0R2V0UGFydGl0aW9uX0ludGVybGVhdmluZ1BhcnRpdGlvbnMob2Zmc2V0cyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldENvbnRlbnRUeXBlKCkgewotCQlmRG9jLnNldCgiZG9jdSAgICAgbWVudC8qIGNvbW1lbnQgKi9kb2N1ICAgICBtZW50Iik7Ci0KLQkJaW50W10gb2Zmc2V0cz0gbmV3IGludFtdIHsgMTMsIDI2IH07Ci0JCWFzc2VydEdldENvbnRlbnRUeXBlX0ludGVybGVhdmluZ1BhcnRpdGlvbnMob2Zmc2V0cyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldENvbnRlbnRUeXBlRW1wdHlNaWRkbGUoKSB7Ci0JCWZEb2Muc2V0KCJkb2N1ICAgICBtZW50LyogY29tbWVudCAqLy8qIGNvbW1lbnQgKi9kb2N1ICAgICBtZW50Iik7Ci0KLQkJaW50W10gb2Zmc2V0cz0gbmV3IGludFtdIHsgMTMsIDI2LCAyNiwgMzkgfTsKLQkJYXNzZXJ0R2V0Q29udGVudFR5cGVfSW50ZXJsZWF2aW5nUGFydGl0aW9ucyhvZmZzZXRzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0Q29udGVudFR5cGVFbXB0eVN0YXJ0KCkgewotCQlmRG9jLnNldCgiLyogY29tbWVudCAqL2RvY3UgICAgIG1lbnQiKTsKLQotCQlpbnRbXSBvZmZzZXRzPSBuZXcgaW50W10geyAwLCAxMyB9OwotCQlhc3NlcnRHZXRDb250ZW50VHlwZV9JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKG9mZnNldHMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRDb250ZW50VHlwZUVtcHR5RW5kKCkgewotCQlmRG9jLnNldCgiZG9jdSAgICAgbWVudC8qIGNvbW1lbnQgKi8iKTsKLQotCQlpbnRbXSBvZmZzZXRzPSBuZXcgaW50W10geyAxMywgMjYgfTsKLQkJYXNzZXJ0R2V0Q29udGVudFR5cGVfSW50ZXJsZWF2aW5nUGFydGl0aW9ucyhvZmZzZXRzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q29tcHV0ZVBhcnRpdGlvbmluZygpIHsKLQkJZkRvYy5zZXQoImRvY3UgICAgIG1lbnQvKiBjb21tZW50ICovZG9jdSAgICAgbWVudCIpOwotCi0JCWludFtdIG9mZnNldHM9IG5ldyBpbnRbXSB7IDEzLCAyNiB9OwotCQlhc3NlcnRDb21wdXRlUGFydGl0aW9uaW5nX0ludGVybGVhdmluZ1BhcnRpdGlvbnMob2Zmc2V0cyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENvbXB1dGVQYXJ0aXRpb25pbmdFbXB0eU1pZGRsZSgpIHsKLQkJZkRvYy5zZXQoImRvY3UgICAgIG1lbnQvKiBjb21tZW50ICovLyogY29tbWVudCAqL2RvY3UgICAgIG1lbnQiKTsKLQotCQlpbnRbXSBvZmZzZXRzPSBuZXcgaW50W10geyAxMywgMjYsIDI2LCAzOSB9OwotCQlhc3NlcnRDb21wdXRlUGFydGl0aW9uaW5nX0ludGVybGVhdmluZ1BhcnRpdGlvbnMob2Zmc2V0cyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENvbXB1dGVQYXJ0aXRpb25pbmdFbXB0eVN0YXJ0KCkgewotCQlmRG9jLnNldCgiLyogY29tbWVudCAqL2RvY3UgICAgIG1lbnQiKTsKLQotCQlpbnRbXSBvZmZzZXRzPSBuZXcgaW50W10geyAwLCAxMyB9OwotCQlhc3NlcnRDb21wdXRlUGFydGl0aW9uaW5nX0ludGVybGVhdmluZ1BhcnRpdGlvbnMob2Zmc2V0cyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENvbXB1dGVQYXJ0aXRpb25pbmdFbXB0eUVuZCgpIHsKLQkJZkRvYy5zZXQoImRvY3UgICAgIG1lbnQvKiBjb21tZW50ICovIik7Ci0KLQkJaW50W10gb2Zmc2V0cz0gbmV3IGludFtdIHsgMTMsIDI2IH07Ci0JCWFzc2VydENvbXB1dGVQYXJ0aXRpb25pbmdfSW50ZXJsZWF2aW5nUGFydGl0aW9ucyhvZmZzZXRzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q29tcHV0ZVBhcnRpdGlvbmluZ1N1YnJhbmdlQmVmb3JlQm91bmRhcmllcygpIHsKLQkJZkRvYy5zZXQoImRvY3UgICAgIG1lbnQvKiBjb21tZW50ICovLyogY29tbWVudCAqL2RvY3UgICAgIG1lbnQiKTsKLQotCQlpbnRbXSBvZmZzZXRzPSBuZXcgaW50W10geyAxMywgMjYsIDI2IH07Ci0JCWFzc2VydENvbXB1dGVQYXJ0aXRpb25pbmdfSW50ZXJsZWF2aW5nUGFydGl0aW9ucygxMiwgMzgsIG9mZnNldHMsIERFRkFVTFQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDb21wdXRlUGFydGl0aW9uaW5nU3VicmFuZ2VPbkJvdW5kYXJpZXMoKSB7Ci0JCWZEb2Muc2V0KCJkb2N1ICAgICBtZW50LyogY29tbWVudCAqLy8qIGNvbW1lbnQgKi9kb2N1ICAgICBtZW50Iik7Ci0KLQkJaW50W10gb2Zmc2V0cz0gbmV3IGludFtdIHsgMTMsIDI2LCAyNiwgMzkgfTsKLQkJYXNzZXJ0Q29tcHV0ZVBhcnRpdGlvbmluZ19JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKDEzLCAzOSwgb2Zmc2V0cywgREVGQVVMVCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENvbXB1dGVQYXJ0aXRpb25pbmdTdWJyYW5nZU9uQm91bmRhcmllczIoKSB7Ci0JCWZEb2Muc2V0KCIvKiBjb21tZW50ICovLyogY29tbWVudCAqLy8qIGNvbW1lbnQgKi8iKTsKLQotCQlpbnRbXSBvZmZzZXRzPSBuZXcgaW50W10geyAxMywgMjYgfTsKLQkJYXNzZXJ0Q29tcHV0ZVBhcnRpdGlvbmluZ19JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKDEzLCAyNiwgb2Zmc2V0cywgREVGQVVMVCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENvbXB1dGVQYXJ0aXRpb25pbmdTdWJyYW5nZUFmdGVyQm91bmRhcmllcygpIHsKLQkJZkRvYy5zZXQoImRvY3UgICAgIG1lbnQvKiBjb21tZW50ICovLyogY29tbWVudCAqL2RvY3UgICAgIG1lbnQiKTsKLQotCQlpbnRbXSBvZmZzZXRzPSBuZXcgaW50W10geyAyNiwgMjYsIDM5IH07Ci0JCWFzc2VydENvbXB1dGVQYXJ0aXRpb25pbmdfSW50ZXJsZWF2aW5nUGFydGl0aW9ucygxNCwgNDAsIG9mZnNldHMsIENPTU1FTlQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDb21wdXRlUGFydGl0aW9uaW5nU3VicmFuZ2VJbkJvdW5kYXJpZXMxKCkgewotCQlmRG9jLnNldCgiLyogY29tbWVudCAqLyIpOwotCi0JCWludFtdIG9mZnNldHM9IG5ldyBpbnRbXSB7IH07Ci0JCWFzc2VydENvbXB1dGVQYXJ0aXRpb25pbmdfSW50ZXJsZWF2aW5nUGFydGl0aW9ucygxLCAxMiwgb2Zmc2V0cywgQ09NTUVOVCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENvbXB1dGVQYXJ0aXRpb25pbmdTdWJyYW5nZUluQm91bmRhcmllczIoKSB7Ci0JCWZEb2Muc2V0KCJkb2N1ICAgICBtZW50Iik7Ci0KLQkJaW50W10gb2Zmc2V0cz0gbmV3IGludFtdIHsgfTsKLQkJYXNzZXJ0Q29tcHV0ZVBhcnRpdGlvbmluZ19JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKDEsIDEyLCBvZmZzZXRzLCBERUZBVUxUKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UFIxMDEwMTQoKSB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlmRG9jLnNldCgKLQkJCQkicGFja2FnZSBwcjEwMTAxNDtcbiIgKwotCQkJCSJcbiIgKwotCQkJCSJjbGFzcyBYIHtcbiIgKwotCQkJCSJTdHJpbmcgcz0gXG4iICsKLQkJCQkiCS8qZm9vKi87XG4iICsKLQkJCQkifVxuIik7Ci0KLQkJaW50W10gb2Zmc2V0cz0gezQxLCA0OH07Ci0JCWFzc2VydENvbXB1dGVQYXJ0aXRpb25pbmdfSW50ZXJsZWF2aW5nUGFydGl0aW9ucyhvZmZzZXRzKTsKLQotCQlmRG9jLnJlcGxhY2UoNDAsIDgsICIJLypmb28qLyIpOwotCQlhc3NlcnRDb21wdXRlUGFydGl0aW9uaW5nX0ludGVybGVhdmluZ1BhcnRpdGlvbnMob2Zmc2V0cyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFBSMTMwOTAwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWZQYXJ0aXRpb25lci5kaXNjb25uZWN0KCk7Ci0JCUlQYXJ0aXRpb25Ub2tlblNjYW5uZXIgc2Nhbm5lcj0gbmV3IFJ1bGVCYXNlZFBhcnRpdGlvblNjYW5uZXIoKSB7Ci0JCQl7Ci0JCQkJSVRva2VuIGNvbW1lbnQ9IG5ldyBUb2tlbihDT01NRU5UKTsKLQkJCQlJUHJlZGljYXRlUnVsZVtdIHJ1bGVzPSBuZXcgSVByZWRpY2F0ZVJ1bGVbXSB7IG5ldyBTaW5nbGVMaW5lUnVsZSgiIyIsIG51bGwsIGNvbW1lbnQsIChjaGFyKSAwLCB0cnVlLCBmYWxzZSkgfTsKLQkJCQlzZXRQcmVkaWNhdGVSdWxlcyhydWxlcyk7Ci0JCQl9Ci0JCX07Ci0JCWZQYXJ0aXRpb25lcj0gY3JlYXRlUGFydGl0aW9uZXIoc2Nhbm5lcik7Ci0JCWZEb2Muc2V0RG9jdW1lbnRQYXJ0aXRpb25lcihmUGFydGl0aW9uZXIpOwotCQlmUGFydGl0aW9uZXIuY29ubmVjdChmRG9jKTsKLQotCQlmRG9jLnNldCgiIyIpOwotCQlpbnRbXSBvZmZzZXRzPSBuZXcgaW50W10geyAwLCAxIH07Ci0JCWFzc2VydENvbXB1dGVQYXJ0aXRpb25pbmdfSW50ZXJsZWF2aW5nUGFydGl0aW9ucyhvZmZzZXRzKTsKLQotICAgIH0KLQotCXByaXZhdGUgdm9pZCBhc3NlcnRDb21wdXRlUGFydGl0aW9uaW5nX0ludGVybGVhdmluZ1BhcnRpdGlvbnMoaW50W10gb2Zmc2V0cykgewotCQlhc3NlcnRDb21wdXRlUGFydGl0aW9uaW5nX0ludGVybGVhdmluZ1BhcnRpdGlvbnMoMCwgZkRvYy5nZXRMZW5ndGgoKSwgb2Zmc2V0cywgREVGQVVMVCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGFzc2VydENvbXB1dGVQYXJ0aXRpb25pbmdfSW50ZXJsZWF2aW5nUGFydGl0aW9ucyhpbnQgc3RhcnRPZmZzZXQsIGludCBlbmRPZmZzZXQsIGludFtdIG9mZnNldHMsIFN0cmluZyBzdGFydFR5cGUpIHsKLQkJSVR5cGVkUmVnaW9uW10gcmVnaW9ucz0gZlBhcnRpdGlvbmVyLmNvbXB1dGVQYXJ0aXRpb25pbmcoc3RhcnRPZmZzZXQsIGVuZE9mZnNldCAtIHN0YXJ0T2Zmc2V0KTsKLQotCQlTdHJpbmcgdHlwZT0gc3RhcnRUeXBlOwotCQlpbnQgcHJldmlvdXNPZmZzZXQ9IHN0YXJ0T2Zmc2V0OwotCi0JCWludCBqPSAwOwotCQlmb3IgKGludCBpPSAwOyBpIDw9IG9mZnNldHMubGVuZ3RoOyBpKyspIHsKLQkJCWludCBjdXJyZW50T2Zmc2V0PSAoaSA9PSBvZmZzZXRzLmxlbmd0aCkgPyBlbmRPZmZzZXQgOiBvZmZzZXRzW2ldOwotCQkJaWYgKGN1cnJlbnRPZmZzZXQgLSBwcmV2aW91c09mZnNldCAhPSAwKSB7IC8vIGRvbid0IGRvIGVtcHR5IHBhcnRpdGlvbnMKLQkJCQlJVHlwZWRSZWdpb24gcmVnaW9uPSByZWdpb25zW2orK107Ci0KLQkJCQlhc3NlcnRUeXBlZFJlZ2lvbihyZWdpb24sIHByZXZpb3VzT2Zmc2V0LCBjdXJyZW50T2Zmc2V0LCB0eXBlKTsKLQkJCX0KLQotCQkJLy8gYWR2YW5jZQotCQkJaWYgKHR5cGUgPT0gREVGQVVMVCkKLQkJCQl0eXBlPSBDT01NRU5UOwotCQkJZWxzZQotCQkJCXR5cGU9IERFRkFVTFQ7Ci0JCQlwcmV2aW91c09mZnNldD0gY3VycmVudE9mZnNldDsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBhc3NlcnRHZXRDb250ZW50VHlwZV9JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKGludFtdIG9mZnNldHMpIHsKLQkJU3RyaW5nIHR5cGU9IERFRkFVTFQ7Ci0JCWludCBwcmV2aW91c09mZnNldD0gMDsKLQkJZm9yIChpbnQgaT0gMDsgaSA8PSBvZmZzZXRzLmxlbmd0aDsgaSsrKSB7Ci0JCQlpbnQgb2Zmc2V0PSAoaSA9PSBvZmZzZXRzLmxlbmd0aCkgPyBmRG9jLmdldExlbmd0aCgpIDogb2Zmc2V0c1tpXTsKLQkJCWFzc2VydEVxdWFsUGFydGl0aW9uVHlwZShwcmV2aW91c09mZnNldCwgb2Zmc2V0LCB0eXBlKTsKLQotCQkJLy8gYWR2YW5jZQotCQkJaWYgKHR5cGUgPT0gREVGQVVMVCkKLQkJCQl0eXBlPSBDT01NRU5UOwotCQkJZWxzZQotCQkJCXR5cGU9IERFRkFVTFQ7Ci0JCQlwcmV2aW91c09mZnNldD0gb2Zmc2V0OwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGFzc2VydEdldFBhcnRpdGlvbl9JbnRlcmxlYXZpbmdQYXJ0aXRpb25zKGludFtdIG9mZnNldHMpIHsKLQkJU3RyaW5nIHR5cGU9IERFRkFVTFQ7Ci0JCWludCBwcmV2aW91c09mZnNldD0gMDsKLQkJZm9yIChpbnQgaT0gMDsgaSA8PSBvZmZzZXRzLmxlbmd0aDsgaSsrKSB7Ci0JCQlpbnQgb2Zmc2V0PSAoaSA9PSBvZmZzZXRzLmxlbmd0aCkgPyBmRG9jLmdldExlbmd0aCgpIDogb2Zmc2V0c1tpXTsKLQkJCWFzc2VydEVxdWFsUGFydGl0aW9uKHByZXZpb3VzT2Zmc2V0LCBvZmZzZXQsIHR5cGUpOwotCi0JCQkvLyBhZHZhbmNlCi0JCQlpZiAodHlwZSA9PSBERUZBVUxUKQotCQkJCXR5cGU9IENPTU1FTlQ7Ci0JCQllbHNlCi0JCQkJdHlwZT0gREVGQVVMVDsKLQkJCXByZXZpb3VzT2Zmc2V0PSBvZmZzZXQ7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgYXNzZXJ0RXF1YWxQYXJ0aXRpb24oaW50IG9mZnNldCwgaW50IGVuZCwgU3RyaW5nIHR5cGUpIHsKLQkJaW50IGZyb209IG9mZnNldDsKLQkJaW50IHRvPSBlbmQgLSAxOwotCQlmb3IgKGludCBpPSBmcm9tOyBpIDw9IHRvOyBpKyspIHsKLQkJCUlUeXBlZFJlZ2lvbiByZWdpb249IGZQYXJ0aXRpb25lci5nZXRQYXJ0aXRpb24oaSk7Ci0JCQlhc3NlcnRUeXBlZFJlZ2lvbihyZWdpb24sIG9mZnNldCwgZW5kLCB0eXBlKTsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBhc3NlcnRUeXBlZFJlZ2lvbihJVHlwZWRSZWdpb24gcmVnaW9uLCBpbnQgb2Zmc2V0LCBpbnQgZW5kLCBTdHJpbmcgdHlwZSkgewotCQlhc3NlcnRFcXVhbHMob2Zmc2V0LCByZWdpb24uZ2V0T2Zmc2V0KCkpOwotCQlhc3NlcnRFcXVhbHMoZW5kIC0gb2Zmc2V0LCByZWdpb24uZ2V0TGVuZ3RoKCkpOwotCQlhc3NlcnRFcXVhbHModHlwZSwgcmVnaW9uLmdldFR5cGUoKSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGFzc2VydEVxdWFsUGFydGl0aW9uVHlwZShpbnQgb2Zmc2V0LCBpbnQgZW5kLCBTdHJpbmcgdHlwZSkgewotCQlpbnQgZnJvbT0gb2Zmc2V0OwotCQlpbnQgdG89IGVuZCAtIDE7Ci0JCWZvciAoaW50IGk9IGZyb207IGkgPD0gdG87IGkrKykgewotCQkJYXNzZXJ0RXF1YWxzKHR5cGUsIGZQYXJ0aXRpb25lci5nZXRDb250ZW50VHlwZShpKSk7Ci0JCX0KLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL3J1bGVzL1J1bGVzVGVzdFN1aXRlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL2pmYWNlLnRleHQudGVzdHMvb3JnL2VjbGlwc2UvamZhY2UvdGV4dC90ZXN0cy9ydWxlcy9SdWxlc1Rlc3RTdWl0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OGRlYjZkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL3J1bGVzL1J1bGVzVGVzdFN1aXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuamZhY2UudGV4dC50ZXN0cy5ydWxlczsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLQotLyoqCi0gKiBAc2luY2UgMy4wCi0gKi8KLXB1YmxpYyBjbGFzcyBSdWxlc1Rlc3RTdWl0ZSB7Ci0KLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCVRlc3RTdWl0ZSBzdWl0ZT0gbmV3IFRlc3RTdWl0ZSgKLQkJCQkiVGVzdCBTdWl0ZSBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnRlc3RzLnJ1bGVzIik7Ci0JCS8vICRKVW5pdC1CRUdJTiQKLQkJc3VpdGUuYWRkVGVzdFN1aXRlKEZhc3RQYXJ0aXRpb25lclRlc3QuY2xhc3MpOwotCQlzdWl0ZS5hZGRUZXN0U3VpdGUoRGVmYXVsdFBhcnRpdGlvbmVyVGVzdC5jbGFzcyk7Ci0JCXN1aXRlLmFkZFRlc3RTdWl0ZShEZWZhdWx0UGFydGl0aW9uZXJaZXJvTGVuZ3RoVGVzdC5jbGFzcyk7Ci0JCXN1aXRlLmFkZFRlc3RTdWl0ZShXb3JkUnVsZVRlc3QuY2xhc3MpOwotCQlzdWl0ZS5hZGRUZXN0U3VpdGUoU2Nhbm5lckNvbHVtblRlc3QuY2xhc3MpOwotCQkvLyAkSlVuaXQtRU5EJAotCQlyZXR1cm4gc3VpdGU7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvcnVsZXMvU2Nhbm5lckNvbHVtblRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL3J1bGVzL1NjYW5uZXJDb2x1bW5UZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiMGM4YjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvcnVsZXMvU2Nhbm5lckNvbHVtblRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnRlc3RzLnJ1bGVzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5Eb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnJ1bGVzLkJ1ZmZlcmVkUnVsZUJhc2VkU2Nhbm5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnJ1bGVzLlJ1bGVCYXNlZFNjYW5uZXI7Ci0KLQotLyoqCi0gKiBAc2luY2UgMy40Ci0gKi8KLXB1YmxpYyBjbGFzcyBTY2FubmVyQ29sdW1uVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXByaXZhdGUgSURvY3VtZW50IGZEb2N1bWVudDsKLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWZEb2N1bWVudD0gbmV3IERvY3VtZW50KCJzY2FubmVyIHRlc3QiKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotCQlmRG9jdW1lbnQ9IG51bGw7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFJ1bGVCYXNlZFNjYW5uZXJDb2x1bW5SZWFkKCkgewotCQlfdGVzdFNjYW5uZXJDb2x1bW5SZWFkKG5ldyBSdWxlQmFzZWRTY2FubmVyKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RSdWxlQmFzZWRTY2FubmVyQ29sdW1uVW5yZWFkKCkgewotCQlfdGVzdFNjYW5uZXJDb2x1bW5VbnJlYWQobmV3IFJ1bGVCYXNlZFNjYW5uZXIoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEJ1ZmZlcmVkUnVsZUJhc2VkU2Nhbm5lckNvbHVtblJlYWQoKSB7Ci0JCV90ZXN0U2Nhbm5lckNvbHVtblJlYWQobmV3IEJ1ZmZlcmVkUnVsZUJhc2VkU2Nhbm5lcigxMDApKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QnVmZmVyZWRSdWxlQmFzZWRTY2FubmVyQ29sdW1uVW5yZWFkKCkgewotCQlfdGVzdFNjYW5uZXJDb2x1bW5VbnJlYWQobmV3IEJ1ZmZlcmVkUnVsZUJhc2VkU2Nhbm5lcigxMDApKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgX3Rlc3RTY2FubmVyQ29sdW1uUmVhZChSdWxlQmFzZWRTY2FubmVyIHNjYW5uZXIpIHsKLQkJc2Nhbm5lci5zZXRSYW5nZShmRG9jdW1lbnQsIDAsIDEwKTsKLQkJYXNzZXJ0RXF1YWxzKDAsIHNjYW5uZXIuZ2V0Q29sdW1uKCkpOwotCQlhc3NlcnRFcXVhbHMoJ3MnLCBzY2FubmVyLnJlYWQoKSk7Ci0JCWFzc2VydEVxdWFscygxLCBzY2FubmVyLmdldENvbHVtbigpKTsKLQkJc2Nhbm5lci51bnJlYWQoKTsKLQkJYXNzZXJ0RXF1YWxzKDAsIHNjYW5uZXIuZ2V0Q29sdW1uKCkpOwotCX0KLQotCXByaXZhdGUgdm9pZCBfdGVzdFNjYW5uZXJDb2x1bW5VbnJlYWQoUnVsZUJhc2VkU2Nhbm5lciBzY2FubmVyKSB7Ci0JCXNjYW5uZXIuc2V0UmFuZ2UoZkRvY3VtZW50LCAwLCAxMCk7Ci0JCWFzc2VydEVxdWFscygwLCBzY2FubmVyLmdldENvbHVtbigpKTsKLQkJYXNzZXJ0RXF1YWxzKCdzJywgc2Nhbm5lci5yZWFkKCkpOwotCQlhc3NlcnRFcXVhbHMoMSwgc2Nhbm5lci5nZXRDb2x1bW4oKSk7Ci0JCXNjYW5uZXIudW5yZWFkKCk7Ci0JCWFzc2VydEVxdWFscygwLCBzY2FubmVyLmdldENvbHVtbigpKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvamZhY2UudGV4dC50ZXN0cy9vcmcvZWNsaXBzZS9qZmFjZS90ZXh0L3Rlc3RzL3J1bGVzL1dvcmRSdWxlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvcnVsZXMvV29yZFJ1bGVUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmNWVjZmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9qZmFjZS50ZXh0LnRlc3RzL29yZy9lY2xpcHNlL2pmYWNlL3RleHQvdGVzdHMvcnVsZXMvV29yZFJ1bGVUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMDEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpmYWNlLnRleHQudGVzdHMucnVsZXM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5Eb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LlRleHRBdHRyaWJ1dGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5ydWxlcy5JUnVsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnJ1bGVzLklUb2tlbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnJ1bGVzLklXb3JkRGV0ZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5ydWxlcy5QYXR0ZXJuUnVsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnJ1bGVzLlJ1bGVCYXNlZFNjYW5uZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5ydWxlcy5Ub2tlbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnJ1bGVzLldvcmRSdWxlOwotCi0vKioKLSAqIEBzaW5jZSAzLjMKLSAqLwotcHVibGljIGNsYXNzIFdvcmRSdWxlVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQotCi0JcHJpdmF0ZSBzdGF0aWMgY2xhc3MgU2ltcGxlV29yZERldGVjdG9yIGltcGxlbWVudHMgSVdvcmREZXRlY3RvciB7Ci0JCXB1YmxpYyBib29sZWFuIGlzV29yZFN0YXJ0KGNoYXIgYykgewotCQkJcmV0dXJuICFDaGFyYWN0ZXIuaXNXaGl0ZXNwYWNlKGMpOwotCQl9Ci0KLQkJcHVibGljIGJvb2xlYW4gaXNXb3JkUGFydChjaGFyIGMpIHsKLQkJCXJldHVybiAhQ2hhcmFjdGVyLmlzV2hpdGVzcGFjZShjKTsKLQkJfQotCX0KLQotCi0JLyoKLQkgKiBodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MTYzMTE2Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdEJ1ZzE2MzExNigpIHRocm93cyBFeGNlcHRpb24gewotCQlJV29yZERldGVjdG9yIGRldGVjdG9yPSBuZXcgSVdvcmREZXRlY3RvcigpIHsKLQotCQkJcHVibGljIGJvb2xlYW4gaXNXb3JkUGFydChjaGFyIGMpIHsKLQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCX0KLQotCQkJcHVibGljIGJvb2xlYW4gaXNXb3JkU3RhcnQoY2hhciBjKSB7Ci0JCQkJcmV0dXJuIHRydWU7Ci0JCQl9Ci0KLQkJfTsKLQotCQlXb3JkUnVsZSBydWxlPSBuZXcgV29yZFJ1bGUoZGV0ZWN0b3IsIG5ldyBUb2tlbih0aGlzKSk7Ci0KLQkJUnVsZUJhc2VkU2Nhbm5lciBzY2FubmVyPSBuZXcgUnVsZUJhc2VkU2Nhbm5lcigpOwotCQlzY2FubmVyLnNldFJ1bGVzKG5ldyBJUnVsZVtdIHsgcnVsZSB9KTsKLQkJc2Nhbm5lci5zZXRSYW5nZShuZXcgRG9jdW1lbnQoKSwgMCwgMCk7Ci0KLQkJSVRva2VuIHRva2VuPSBudWxsOwotCQlpbnQgaT0gMDsKLQkJd2hpbGUgKHRva2VuICE9IFRva2VuLkVPRiAmJiBpKysgPCAxMDAwKQotCQkJdG9rZW49IHNjYW5uZXIubmV4dFRva2VuKCk7Ci0KLQkJYXNzZXJ0VHJ1ZShpIDwgMTAwMCk7Ci0KLQl9Ci0KLQkvKgotCSAqIGh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0xNDQzNTUKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0QnVnMTQ0MzU1KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUlXb3JkRGV0ZWN0b3IgZGV0ZWN0b3I9IG5ldyBTaW1wbGVXb3JkRGV0ZWN0b3IoKTsKLQotCQlTdHJpbmcgZGVmYXVsdFRva2VuU3RyaW5nPSAiZGVmYXVsdFRva2VuIjsKLQkJVG9rZW4gZGVmYXVsdFRva2VuPSBuZXcgVG9rZW4oZGVmYXVsdFRva2VuU3RyaW5nKTsKLQotCQlTdHJpbmcgdGVzdFRva2VuU3RyaW5nTm9ybWFsPSAiVGVzdFRva2VuU3RyaW5nIjsKLQkJU3RyaW5nIHRlc3RUb2tlblN0cmluZ0RpZmZlcmVudENhcGl0YWxpemF0aW9uPSAiVGVzdFRPS0VOU3RyaW5nIjsKLQkJU3RyaW5nIHRlc3RUb2tlblN0cmluZ0NvbXBsZXRlbHlEaWZmZXJlbnQ9ICJYWFgiOwotCQlUb2tlbiBub3JtYWxUb2tlbj0gbmV3IFRva2VuKHRlc3RUb2tlblN0cmluZ05vcm1hbCk7Ci0KLQkJV29yZFJ1bGUgcnVsZT0gbmV3IFdvcmRSdWxlKGRldGVjdG9yLCBkZWZhdWx0VG9rZW4sIHRydWUpOwotCQlydWxlLmFkZFdvcmQodGVzdFRva2VuU3RyaW5nTm9ybWFsLCBub3JtYWxUb2tlbik7Ci0KLQkJLy8gc2NlbmFyaW8gMQotCQkvLyBwcmU6IHBhc3MgaW4gYSBub3JtYWwgc3RyaW5nICgiVGVzdFRva2VuU3RyaW5nIikKLQkJLy8gcG9zdDogZXhwZWN0IHRoZSBub3JtYWwgdG9rZW4gdG8gYmUgcmV0dXJuZWQKLQkJUnVsZUJhc2VkU2Nhbm5lciBzY2FubmVyPSBuZXcgUnVsZUJhc2VkU2Nhbm5lcigpOwotCQlzY2FubmVyLnNldFJ1bGVzKG5ldyBJUnVsZVtdIHtydWxlfSk7Ci0JCXNjYW5uZXIuc2V0UmFuZ2UobmV3IERvY3VtZW50KHRlc3RUb2tlblN0cmluZ05vcm1hbCksIDAsIHRlc3RUb2tlblN0cmluZ05vcm1hbC5sZW5ndGgoKSk7Ci0JCWFzc2VydFRydWUoc2Nhbm5lci5uZXh0VG9rZW4oKS5nZXREYXRhKCkuZXF1YWxzKHRlc3RUb2tlblN0cmluZ05vcm1hbCkpOwotCi0JCS8vIHNjZW5hcmlvIDIKLQkJLy8gcHJlOiBwYXNzIGluIGEgbm9ybWFsIHN0cmluZyBidXQgZGlmZmVyZW50IGNhcGl0YWxpemF0aW9uICgiVGVzdFRPS0VOU3RyaW5nIikKLQkJLy8gcG9zdDogZXhwZWN0IHRoZSBub3JtYWwgdG9rZW4gdG8gYmUgcmV0dXJuZWQKLQkJc2Nhbm5lcj0gbmV3IFJ1bGVCYXNlZFNjYW5uZXIoKTsKLQkJc2Nhbm5lci5zZXRSdWxlcyhuZXcgSVJ1bGVbXSB7cnVsZX0pOwotCQlzY2FubmVyLnNldFJhbmdlKG5ldyBEb2N1bWVudCh0ZXN0VG9rZW5TdHJpbmdEaWZmZXJlbnRDYXBpdGFsaXphdGlvbiksIDAsIHRlc3RUb2tlblN0cmluZ0RpZmZlcmVudENhcGl0YWxpemF0aW9uLmxlbmd0aCgpKTsKLQkJYXNzZXJ0VHJ1ZShzY2FubmVyLm5leHRUb2tlbigpLmdldERhdGEoKS5lcXVhbHModGVzdFRva2VuU3RyaW5nTm9ybWFsKSk7Ci0KLQkJLy8gc2NlbmFyaW8gMwotCQkvLyBwcmU6IHBhc3MgaW4gYSBjb21wbGV0ZWx5IGRpZmZlcmVudCBzdHJpbmcgKCJYWFgiKQotCQkvLyBwb3N0OiBleHBlY3QgdGhlIGRlZmF1bHQgdG9rZW4gdG8gYmUgcmV0dXJuZWQgYmVjYXVzZSB0aGUgc3RyaW5nIGNhbid0IGJlIG1hdGNoZWQKLQkJc2Nhbm5lcj0gbmV3IFJ1bGVCYXNlZFNjYW5uZXIoKTsKLQkJc2Nhbm5lci5zZXRSdWxlcyhuZXcgSVJ1bGVbXSB7cnVsZX0pOwotCQlzY2FubmVyLnNldFJhbmdlKG5ldyBEb2N1bWVudCh0ZXN0VG9rZW5TdHJpbmdDb21wbGV0ZWx5RGlmZmVyZW50KSwgMCwgdGVzdFRva2VuU3RyaW5nQ29tcGxldGVseURpZmZlcmVudC5sZW5ndGgoKSk7Ci0JCWFzc2VydFRydWUoc2Nhbm5lci5uZXh0VG9rZW4oKS5nZXREYXRhKCkuZXF1YWxzKGRlZmF1bHRUb2tlblN0cmluZykpOwotCi0JCVdvcmRSdWxlIHJ1bGVXaXRob3V0SWdub3JlQ2FzZT0gbmV3IFdvcmRSdWxlKGRldGVjdG9yLCBkZWZhdWx0VG9rZW4pOwotCQlydWxlV2l0aG91dElnbm9yZUNhc2UuYWRkV29yZCh0ZXN0VG9rZW5TdHJpbmdOb3JtYWwsIG5vcm1hbFRva2VuKTsKLQotCQkvLyBzY2VuYXJpbyA0Ci0JCS8vIHByZTogcGFzcyBpbiBhIG5vcm1hbCBzdHJpbmcgKCJUZXN0VG9rZW5TdHJpbmciKQotCQkvLyBwb3N0OiBleHBlY3QgdGhlIG5vcm1hbCB0b2tlbiB0byBiZSByZXR1cm5lZAotCQlzY2FubmVyPSBuZXcgUnVsZUJhc2VkU2Nhbm5lcigpOwotCQlzY2FubmVyLnNldFJ1bGVzKG5ldyBJUnVsZVtdIHtydWxlV2l0aG91dElnbm9yZUNhc2V9KTsKLQkJc2Nhbm5lci5zZXRSYW5nZShuZXcgRG9jdW1lbnQodGVzdFRva2VuU3RyaW5nTm9ybWFsKSwgMCwgdGVzdFRva2VuU3RyaW5nTm9ybWFsLmxlbmd0aCgpKTsKLQkJYXNzZXJ0VHJ1ZShzY2FubmVyLm5leHRUb2tlbigpLmdldERhdGEoKS5lcXVhbHModGVzdFRva2VuU3RyaW5nTm9ybWFsKSk7Ci0KLQkJLy8gc2NlbmFyaW8gNQotCQkvLyBwcmU6IHBhc3MgaW4gYSBub3JtYWwgc3RyaW5nIGJ1dCBkaWZmZXJlbnQgY2FwaXRhbGl6YXRpb24gKCJUZXN0VE9LRU5TdHJpbmciKQotCQkvLyBwb3N0OiBleHBlY3QgdGhlIGRlZmF1bHQgdG9rZW4gdG8gYmUgcmV0dXJuZWQKLQkJc2Nhbm5lcj0gbmV3IFJ1bGVCYXNlZFNjYW5uZXIoKTsKLQkJc2Nhbm5lci5zZXRSdWxlcyhuZXcgSVJ1bGVbXSB7cnVsZVdpdGhvdXRJZ25vcmVDYXNlfSk7Ci0JCXNjYW5uZXIuc2V0UmFuZ2UobmV3IERvY3VtZW50KHRlc3RUb2tlblN0cmluZ0RpZmZlcmVudENhcGl0YWxpemF0aW9uKSwgMCwgdGVzdFRva2VuU3RyaW5nRGlmZmVyZW50Q2FwaXRhbGl6YXRpb24ubGVuZ3RoKCkpOwotCQlhc3NlcnRUcnVlKHNjYW5uZXIubmV4dFRva2VuKCkuZ2V0RGF0YSgpLmVxdWFscyhkZWZhdWx0VG9rZW5TdHJpbmcpKTsKLQl9Ci0KLQkvLyBodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NzEyCi0JcHVibGljIHZvaWQgdGVzdEJ1ZzE3NTcxMl8xKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUlSdWxlW10gcnVsZXM9IG5ldyBJUnVsZVsyXTsKLQotCQlJVG9rZW4gc3RlcFRva2VuPSBuZXcgVG9rZW4obmV3IFRleHRBdHRyaWJ1dGUobnVsbCwgbnVsbCwgU1dULkJPTEQpKTsKLQkJUGF0dGVyblJ1bGUgc3RlcFJ1bGU9IG5ldyBQYXR0ZXJuUnVsZSgiKCgoIiwgIikiLCBzdGVwVG9rZW4sIChjaGFyKSAwLGZhbHNlKTsKLQkJc3RlcFJ1bGUuc2V0Q29sdW1uQ29uc3RyYWludCgtMSk7Ci0JCXJ1bGVzWzFdPSBzdGVwUnVsZTsKLQotCQlJVG9rZW4gdGl0bGVUb2tlbj0gbmV3IFRva2VuKG5ldyBUZXh0QXR0cmlidXRlKG51bGwsIG51bGwsIFNXVC5CT0xEKSk7Ci0JCVdvcmRSdWxlIHdvcmRSdWxlPSBuZXcgV29yZFJ1bGUobmV3IFNpbXBsZVdvcmREZXRlY3RvcigpKTsKLQkJd29yZFJ1bGUuYWRkV29yZCgiKCgiLCB0aXRsZVRva2VuKTsKLQkJcnVsZXNbMF09IHdvcmRSdWxlOwotCi0JCUlEb2N1bWVudCBkb2N1bWVudD0gbmV3IERvY3VtZW50KCIoKCggXG4oKFxuLSBDaGVlc2Vcbi0gV2luZSIpOwotCQlSdWxlQmFzZWRTY2FubmVyIHNjYW5uZXI9IG5ldyBSdWxlQmFzZWRTY2FubmVyKCk7Ci0JCXNjYW5uZXIuc2V0UnVsZXMocnVsZXMpOwotCQlzY2FubmVyLnNldFJhbmdlKGRvY3VtZW50LCAwLCBkb2N1bWVudC5nZXRMZW5ndGgoKSk7Ci0KLQkJSVRva2VuIGRlZmF1bHRUb2tlbj0gbmV3IFRva2VuKHRoaXMpOwotCQlzY2FubmVyLnNldERlZmF1bHRSZXR1cm5Ub2tlbihkZWZhdWx0VG9rZW4pOwotCi0JCUlUb2tlbiB0b2tlbj0gc2Nhbm5lci5uZXh0VG9rZW4oKTsKLQkJYXNzZXJ0U2FtZShkZWZhdWx0VG9rZW4sIHRva2VuKTsKLQotCQl0b2tlbj0gc2Nhbm5lci5uZXh0VG9rZW4oKTsKLQkJYXNzZXJ0U2FtZShkZWZhdWx0VG9rZW4sIHRva2VuKTsKLQotCQl0b2tlbj0gc2Nhbm5lci5uZXh0VG9rZW4oKTsKLQkJYXNzZXJ0U2FtZShkZWZhdWx0VG9rZW4sIHRva2VuKTsKLQotCQl0b2tlbj0gc2Nhbm5lci5uZXh0VG9rZW4oKTsKLQkJYXNzZXJ0U2FtZSh0aXRsZVRva2VuLCB0b2tlbik7Ci0KLQl9Ci0KLQkvLyBodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NzEyCi0JcHVibGljIHZvaWQgdGVzdEJ1ZzE3NTcxMl8yKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUlSdWxlW10gcnVsZXM9IG5ldyBJUnVsZVsyXTsKLQotCQlJVG9rZW4gc3RlcFRva2VuPSBuZXcgVG9rZW4obmV3IFRleHRBdHRyaWJ1dGUobnVsbCwgbnVsbCwgU1dULkJPTEQpKTsKLQkJUGF0dGVyblJ1bGUgc3RlcFJ1bGU9IG5ldyBQYXR0ZXJuUnVsZSgiKCgoIiwgIikiLCBzdGVwVG9rZW4sIChjaGFyKSAwLGZhbHNlKTsKLQkJc3RlcFJ1bGUuc2V0Q29sdW1uQ29uc3RyYWludCgtMSk7Ci0JCXJ1bGVzWzFdPSBzdGVwUnVsZTsKLQotCQlJVG9rZW4gdGl0bGVUb2tlbj0gbmV3IFRva2VuKG5ldyBUZXh0QXR0cmlidXRlKG51bGwsIG51bGwsIFNXVC5CT0xEKSk7Ci0JCVdvcmRSdWxlIHdvcmRSdWxlPSBuZXcgV29yZFJ1bGUobmV3IFNpbXBsZVdvcmREZXRlY3RvcigpKTsKLQkJd29yZFJ1bGUuYWRkV29yZCgiKCgiLCB0aXRsZVRva2VuKTsKLQkJcnVsZXNbMF09IHdvcmRSdWxlOwotCi0JCUlEb2N1bWVudCBkb2N1bWVudD0gbmV3IERvY3VtZW50KCIoKFxuKChcbi0gQ2hlZXNlXG4tIFdpbmUiKTsKLQkJUnVsZUJhc2VkU2Nhbm5lciBzY2FubmVyPSBuZXcgUnVsZUJhc2VkU2Nhbm5lcigpOwotCQlzY2FubmVyLnNldFJ1bGVzKHJ1bGVzKTsKLQkJc2Nhbm5lci5zZXRSYW5nZShkb2N1bWVudCwgMCwgZG9jdW1lbnQuZ2V0TGVuZ3RoKCkpOwotCi0JCUlUb2tlbiBkZWZhdWx0VG9rZW49IG5ldyBUb2tlbih0aGlzKTsKLQkJc2Nhbm5lci5zZXREZWZhdWx0UmV0dXJuVG9rZW4oZGVmYXVsdFRva2VuKTsKLQotCQlJVG9rZW4gdG9rZW49IHNjYW5uZXIubmV4dFRva2VuKCk7Ci0JCWFzc2VydFNhbWUodGl0bGVUb2tlbiwgdG9rZW4pOwotCi0JfQotCi0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzCmluZGV4IDBmMDllMjMuLmJlMjkxMmEgMTAwNjQ0Ci0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9wbHVnaW4ucHJvcGVydGllcwpAQCAtMSw1ICsxLDUgQEAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCiAjIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKICMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCiAjIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CkBAIC0xMyw0ICsxMyw0IEBACiBCdW5kbGUtTmFtZS4wID0gU3RydWN0dXJlZCBTb3VyY2UgRWRpdG9yIGZvciBKU1AgVGVzdHMKIHZpZXcubmFtZS4wID0gRW1iZWRkZWQgSlNQIFN0cnVjdHVyZWQgVGV4dCBWaWV3ZXIKIHRhZ2xpYnZpZXcubmFtZS4wPVRhZ2xpYkluZGV4IERlbHRhIFRyYWNlIFZpZXcKLV9VSV9TSE9XX1RSQU5TTEFUSU9OPVNob3cgSmF2YSBUcmFuc2xhdGlvbgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK19VSV9TSE9XX1RSQU5TTEFUSU9OPVNob3cgVHJhbnNsYXRpb24KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Byb2plY3R0ZXN0ZmlsZXMvdGVzdEpTUEVMQ29udGVudEFzc2lzdC56aXAgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Byb2plY3R0ZXN0ZmlsZXMvdGVzdEpTUEVMQ29udGVudEFzc2lzdC56aXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0ZWFjMjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9wcm9qZWN0dGVzdGZpbGVzL3Rlc3RKU1BFTENvbnRlbnRBc3Npc3QuemlwCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9KU1BUcmFuc2xhdGlvbkVkaXRvcklucHV0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL0pTUFRyYW5zbGF0aW9uRWRpdG9ySW5wdXQuamF2YQppbmRleCBhMDUzNjM3Li5kMGY3MzgyIDEwMDY0NAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL0pTUFRyYW5zbGF0aW9uRWRpdG9ySW5wdXQuamF2YQorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL0pTUFRyYW5zbGF0aW9uRWRpdG9ySW5wdXQuamF2YQpAQCAtMTI5LDcgKzEyOSw3IEBACiAJICogQHNlZSBvcmcuZWNsaXBzZS51aS5JRWRpdG9ySW5wdXQjZ2V0TmFtZSgpCiAJICovCiAJcHVibGljIFN0cmluZyBnZXROYW1lKCkgewotCQlyZXR1cm4gZlN0b3JhZ2UuZ2V0TmFtZSgpOworCQlyZXR1cm4gbmV3IFBhdGgoZk1vZGVsLmdldEJhc2VMb2NhdGlvbigpKS5sYXN0U2VnbWVudCgpICsgIi5qYXZhIjsKIAl9CiAKIAkvKgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9KU1BVSVByZWZlcmVuY2VzVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9KU1BVSVByZWZlcmVuY2VzVGVzdC5qYXZhCmluZGV4IDRlYzZmZWMuLmIxOGQ0OTcgMTAwNjQ0Ci0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvSlNQVUlQcmVmZXJlbmNlc1Rlc3QuamF2YQorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL0pTUFVJUHJlZmVyZW5jZXNUZXN0LmphdmEKQEAgLTExMSwxMSArMTExLDQgQEAKIAkJLy8gYXR0ZW1wdCB0byByZXN0b3JlIG9yaWdpbmFsIHByZWZlcmVuY2UgdmFsdWUKIAkJc3RvcmUuc2V0VmFsdWUocHJlZktleSwgb3JpZ2luYWxWYWx1ZSk7CiAJfQotCQotCXB1YmxpYyB2b2lkIHRlc3RKYXZhU2V2ZXJpdHlQYWdlSURzTWF0Y2goKSB7Ci0JCS8vIHVzZWQgd2hlbiBsaW5raW5nIGZyb20gb3VyIEpTUCBzZXZlcml0eSBwcmVmZXJlbmNlIHBhZ2UgdG8gdGhlIEphdmEgc2V2ZXJpdHkgcHJlZmVyZW5jZSBwYWdlCi0JCWFzc2VydEVxdWFscyhvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwudWkucHJlZmVyZW5jZXMuUHJvYmxlbVNldmVyaXRpZXNQcmVmZXJlbmNlUGFnZS5QUkVGX0lELG9yZy5lY2xpcHNlLmpzdC5qc3AudWkuaW50ZXJuYWwucHJlZmVyZW5jZXMudWkuSlNQVmFsaWRhdGlvblByZWZlcmVuY2VQYWdlLkpBVkFfU0VWRVJJVFlfUFJFRkVSRU5DRV9QQUdFKTsKLQkJYXNzZXJ0RXF1YWxzKG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC51aS5wcmVmZXJlbmNlcy5Qcm9ibGVtU2V2ZXJpdGllc1ByZWZlcmVuY2VQYWdlLlBST1BfSUQsb3JnLmVjbGlwc2UuanN0LmpzcC51aS5pbnRlcm5hbC5wcmVmZXJlbmNlcy51aS5KU1BWYWxpZGF0aW9uUHJlZmVyZW5jZVBhZ2UuSkFWQV9TRVZFUklUWV9QUk9QRVJUWV9QQUdFKTsKLQkJYXNzZXJ0RXF1YWxzKG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC51aS5wcmVmZXJlbmNlcy5Qcm9wZXJ0eUFuZFByZWZlcmVuY2VQYWdlLkRBVEFfTk9fTElOSywgb3JnLmVjbGlwc2UuanN0LmpzcC51aS5pbnRlcm5hbC5wcmVmZXJlbmNlcy51aS5KU1BWYWxpZGF0aW9uUHJlZmVyZW5jZVBhZ2UuREFUQV9OT19MSU5LKTsKLQl9CiB9CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL0pTUFVJVGVzdFN1aXRlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL0pTUFVJVGVzdFN1aXRlLmphdmEKaW5kZXggNDAyMmVlYy4uMGRjZDkxMSAxMDA2NDQKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9KU1BVSVRlc3RTdWl0ZS5qYXZhCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvSlNQVUlUZXN0U3VpdGUuamF2YQpAQCAtMTMsOSArMTMsNyBAQAogaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwogaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7CiAKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnRlc3RzLkpGYWNlVGV4dFRlc3RTdWl0ZTsKIGltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLmNvbnRlbnRhc3Npc3QuQmVhbkluZm9Qcm92aWRlclRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5jb250ZW50YXNzaXN0LkpTUEVMQ29udGVudEFzc2lzdFRlc3Q7CiBpbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5jb250ZW50YXNzaXN0LkpTUEphdmFUcmFuc2xhdG9yVGVzdDsKIGltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLmNvbnRlbnRhc3Npc3QuSlNQVHJhbnNsYXRpb25UZXN0OwogaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMuY29udGVudGRlc2NyaXB0aW9uLlRlc3RDb250ZW50RGVzY3JpcHRpb247CkBAIC0yOCw4ICsyNiw4IEBACiBpbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5wYXJ0aXRpb25pbmcuVGVzdFN0cnVjdHVyZWRQYXJ0aXRpb25lckpTUDsKIGltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLnJlZ2lzdHJ5LkFkYXB0ZXJGYWN0b3J5UmVnaXN0cnlUZXN0OwogaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMudmFsaWRhdGlvbi5KU1BIVE1MVmFsaWRhdG9yVGVzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLnZhbGlkYXRpb24uVGVzdEpTUE1hcmt1cFZhbGlkYXRvcjsKIGltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLnZpZXdlci5UZXN0Vmlld2VyQ29uZmlndXJhdGlvbkpTUDsKLWltcG9ydCBvcmcuZWNsaXBzZS50ZXh0LnRlc3RzLkVjbGlwc2VUZXh0VGVzdFN1aXRlOwogCiAKIApAQCAtNDAsMzYgKzM4LDMzIEBACiAJfQogCiAJcHVibGljIEpTUFVJVGVzdFN1aXRlKCkgewotCQlzdXBlcigiSlNQIFVJIFRlc3QgU3VpdGUiKTsKKwkJc3VwZXIoIlNTRSBKU1AgVUkgVGVzdCBTdWl0ZSIpOwogCQkKIAkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFNjYW5uZXJVbml0VGVzdHMuY2xhc3MsICJTY2FubmVyVW5pdFRlc3RzIikpOwogCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVW5pdFRlc3RzLmNsYXNzLCAiVW5pdFRlc3RzIikpOwogCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdFN0cnVjdHVyZWRQYXJ0aXRpb25lckpTUC5jbGFzcywgIlRlc3RTdHJ1Y3R1cmVkUGFydGlvbmVyIikpOwogCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoTW9kZWxRdWVyeVRlc3Rlci5jbGFzcywgIk1vZGVsUXVlcnlUZXN0ZXIiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShKU1BKYXZhVHJhbnNsYXRvclRlc3QuY2xhc3MsICJNaXhlZCBKYXZhU2NyaXB0IFRyYW5zbGF0b3IgVGVzdHMiKSk7CisJCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShKU1BKYXZhVHJhbnNsYXRvclRlc3QuY2xhc3MsICJKU1BKYXZhVHJhbnNsYXRvclRlc3QiKSk7CiAJCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0RW1haWxOb3RpY2UuY2xhc3MsICJUZXN0RW1haWxOb3RpY2UiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShCZWFuSW5mb1Byb3ZpZGVyVGVzdC5jbGFzcywgIkJlYW5JbmZvIFByb3ZpZGVyIFRlc3QiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShKU1BUcmFuc2xhdGlvblRlc3QuY2xhc3MsICJUcmFuc2xhdG9yIFRlc3RzIikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoSlNQRUxDb250ZW50QXNzaXN0VGVzdC5jbGFzcywgIkpTUCBFTCBDb250ZW50IEFzc2lzdCBUZXN0cyIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKEFkYXB0ZXJGYWN0b3J5UmVnaXN0cnlUZXN0LmNsYXNzLCAiQWRhcHRlckZhY3RvcnlSZWdpc3RyeSBUZXN0cyIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKEpTUFVJUHJlZmVyZW5jZXNUZXN0LmNsYXNzLCAiUHJlZmVyZW5jZSBUZXN0cyIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RWaWV3ZXJDb25maWd1cmF0aW9uSlNQLmNsYXNzLCAiU291cmNlIFZpZXdlciBDb25maWd1cmF0aW9uIFRlc3RzIikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdEVkaXRvckNvbmZpZ3VyYXRpb25KU1AuY2xhc3MsICJFZGl0b3IgQ29uZmlndXJhdGlvbiBUZXN0cyIpKTsKKwkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKEJlYW5JbmZvUHJvdmlkZXJUZXN0LmNsYXNzLCAiQmVhbkluZm9Qcm92aWRlclRlc3QiKSk7CisJCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShKU1BUcmFuc2xhdGlvblRlc3QuY2xhc3MsICJKU1BUcmFuc2xhdGlvblRlc3QiKSk7CisJCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShBZGFwdGVyRmFjdG9yeVJlZ2lzdHJ5VGVzdC5jbGFzcywgIkFkYXB0ZXJGYWN0b3J5UmVnaXN0cnlUZXh0IikpOworCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoSlNQVUlQcmVmZXJlbmNlc1Rlc3QuY2xhc3MpKTsKKwkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RWaWV3ZXJDb25maWd1cmF0aW9uSlNQLmNsYXNzKSk7CisJCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0RWRpdG9yQ29uZmlndXJhdGlvbkpTUC5jbGFzcykpOwogCQkKIAkJLy8gbW92ZWQgZnJvbSBqc3AgY29yZSB0ZXN0cyBiZWNhdXNlIHRoZXkgcmVxdWlyZSBVSQotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdFBhZ2VEaXJlY3RpdmUuY2xhc3MsICJQYWdlIERpcmVjdGl2ZSBUZXN0cyIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKEZpbGVCdWZmZXJEb2N1bWVudFRlc3Rlci5jbGFzcywgIkZpbGVCdWZmZXIgRG9jdW1lbnQgVGVzdHMiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0TW9kZWxDbG9uZS5jbGFzcywgIk1vZGVsIENsb25lIFRlc3RzIikpOworCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdFBhZ2VEaXJlY3RpdmUuY2xhc3MpKTsKKwkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKEZpbGVCdWZmZXJEb2N1bWVudFRlc3Rlci5jbGFzcykpOworCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdE1vZGVsQ2xvbmUuY2xhc3MpKTsKIAkJCi0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0TW9kZWxzRnJvbUZpbGVzLmNsYXNzLCAiVGVzdCBNb2RlbHMgRnJvbSBGaWxlcyIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RNb2RlbEVtYmVkZGVkQ29udGVudFR5cGUuY2xhc3MsICJUZXN0IE1vZGVsIEVtYmVkZGVkIENvbnRlbnRUeXBlIikpOworCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdE1vZGVsc0Zyb21GaWxlcy5jbGFzcywgIlRlc3RNb2RlbHNGcm9tRmlsZXMiKSk7CisJCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0TW9kZWxFbWJlZGRlZENvbnRlbnRUeXBlLmNsYXNzLCAiVGVzdE1vZGVsRW1iZWRkZWRDb250ZW50VHlwZSIpKTsKIAogCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdENvbnRlbnREZXNjcmlwdGlvbi5jbGFzcywgIkNvbnRlbnQgRGVzY3JpcHRpb24gVGVzdHMiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShKU1BIVE1MVmFsaWRhdG9yVGVzdC5jbGFzcywgIkpTUCBIVE1MIFZhbGlkYXRvciBUZXN0IikpOworCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoSlNQSFRNTFZhbGlkYXRvclRlc3QuY2xhc3MsICJKU1BIVE1MVmFsaWRhdG9yVGVzdCIpKTsKKwkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RKU1BNYXJrdXBWYWxpZGF0b3IuY2xhc3MsICJUZXN0SlNQTWFya3VwVmFsaWRhdG9yIikpOwogCQkvLyBwYV9UT0RPIGZpeCB0aGlzIHRlc3QKIAkJLy9hZGRUZXN0KG5ldyBUZXN0U3VpdGUoSlNQU2VhcmNoVGVzdHMuY2xhc3MpKTsKLQotCQlhZGRUZXN0KEpGYWNlVGV4dFRlc3RTdWl0ZS5zdWl0ZSgpKTsKLQkJYWRkVGVzdChFY2xpcHNlVGV4dFRlc3RTdWl0ZS5zdWl0ZSgpKTsKIAl9CiB9CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL1Nob3dUcmFuc2xhdGlvbkhhbmRsZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvU2hvd1RyYW5zbGF0aW9uSGFuZGxlci5qYXZhCmluZGV4IGM2MjExNjkuLjI5NDA1ZWQgMTAwNjQ0Ci0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvU2hvd1RyYW5zbGF0aW9uSGFuZGxlci5qYXZhCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvU2hvd1RyYW5zbGF0aW9uSGFuZGxlci5qYXZhCkBAIC0xNiwxOCArMTYsMTMgQEAKIGltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkFic3RyYWN0SGFuZGxlcjsKIGltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV2ZW50OwogaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuZXhwcmVzc2lvbnMuRXZhbHVhdGlvbkNvbnRleHQ7CiBpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSU1hcmtlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5qb2JzLkpvYjsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5JUHJvYmxlbTsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZHQudWkuSmF2YVVJOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuUG9zaXRpb247CiBpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5zb3VyY2UuQW5ub3RhdGlvbjsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnNvdXJjZS5JQW5ub3RhdGlvbk1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5qYXZhLklKU1BQcm9ibGVtOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5qYXZhLklKU1BUcmFuc2xhdGlvbjsKIGltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwuamF2YS5KU1BUcmFuc2xhdGlvbkFkYXB0ZXI7CkBAIC0zNyw5ICszMiw3IEBACiBpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVN0b3JhZ2VFZGl0b3JJbnB1dDsKIGltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKIGltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmhhbmRsZXJzLkhhbmRsZXJVdGlsOwogaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmlkZS5JREU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkucHJvZ3Jlc3MuVUlKb2I7CiBpbXBvcnQgb3JnLmVjbGlwc2UudWkudGV4dGVkaXRvci5Bbm5vdGF0aW9uVHlwZUxvb2t1cDsKIGltcG9ydCBvcmcuZWNsaXBzZS51aS50ZXh0ZWRpdG9yLklUZXh0RWRpdG9yOwogaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTm9kZUFkYXB0ZXI7CkBAIC03MCw2MyArNjMsNTcgQEAKIAkgKiBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLklIYW5kbGVyI2V4ZWN1dGUob3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcwogCSAqIC5FeGVjdXRpb25FdmVudCkKIAkgKi8KLQlwdWJsaWMgT2JqZWN0IGV4ZWN1dGUoZmluYWwgRXhlY3V0aW9uRXZlbnQgZXZlbnQpIHRocm93cyBFeGVjdXRpb25FeGNlcHRpb24geworCXB1YmxpYyBPYmplY3QgZXhlY3V0ZShFeGVjdXRpb25FdmVudCBldmVudCkgdGhyb3dzIEV4ZWN1dGlvbkV4Y2VwdGlvbiB7CiAJCS8vIElERS5vcGVuRWRpdG9yKGV2ZW50LmdldEFwcGxpY2F0aW9uQ29udGV4dCgpLCBjcmVhdGVFZGl0b3JJbnB1dCgpLAogCQkvLyBKYXZhVUkuSURfQ1VfRURJVE9SLCB0cnVlKTsKLQkJSVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBIYW5kbGVyVXRpbC5nZXRDdXJyZW50U2VsZWN0aW9uKGV2ZW50KTsKLQkJaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7Ci0JCQlMaXN0IGxpc3QgPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBzZWxlY3Rpb24pLnRvTGlzdCgpOwotCQkJaWYgKCFsaXN0LmlzRW1wdHkoKSkgewotCQkJCWlmIChsaXN0LmdldCgwKSBpbnN0YW5jZW9mIElET01Ob2RlKSB7Ci0JCQkJCWZpbmFsIElET01Nb2RlbCBtb2RlbCA9ICgoSURPTU5vZGUpIGxpc3QuZ2V0KDApKS5nZXRNb2RlbCgpOwotCQkJCQlJTm9kZUFkYXB0ZXIgYWRhcHRlciA9IG1vZGVsLmdldERvY3VtZW50KCkuZ2V0QWRhcHRlckZvcihJSlNQVHJhbnNsYXRpb24uY2xhc3MpOwotCQkJCQlpZiAoYWRhcHRlciAhPSBudWxsKSB7Ci0JCQkJCQlKb2Igb3BlbmVyID0gbmV3IFVJSm9iKCJPcGVuaW5nIEpTUCBKYXZhIFRyYW5zbGF0aW9uIikgewotCQkJCQkJCXB1YmxpYyBJU3RhdHVzIHJ1bkluVUlUaHJlYWQoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7Ci0JCQkJCQkJCUpTUFRyYW5zbGF0aW9uQWRhcHRlciB0cmFuc2xhdGlvbkFkYXB0ZXIgPSAoSlNQVHJhbnNsYXRpb25BZGFwdGVyKSBtb2RlbC5nZXREb2N1bWVudCgpLmdldEFkYXB0ZXJGb3IoSUpTUFRyYW5zbGF0aW9uLmNsYXNzKTsKLQkJCQkJCQkJZmluYWwgSlNQVHJhbnNsYXRpb25FeHRlbnNpb24gdHJhbnNsYXRpb24gPSB0cmFuc2xhdGlvbkFkYXB0ZXIuZ2V0SlNQVHJhbnNsYXRpb24oKTsKLQotCQkJCQkJCQkvLyBjcmVhdGUgYW4gSUVkaXRvcklucHV0IGZvciB0aGUgSmF2YSBlZGl0b3IKLQkJCQkJCQkJZmluYWwgSVN0b3JhZ2VFZGl0b3JJbnB1dCBpbnB1dCA9IG5ldyBKU1BUcmFuc2xhdGlvbkVkaXRvcklucHV0KG1vZGVsKTsKLQkJCQkJCQkJdHJ5IHsKLQkJCQkJCQkJCUlFZGl0b3JQYXJ0IGVkaXRvciA9IElERS5vcGVuRWRpdG9yKFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpLCBpbnB1dCwgSmF2YVVJLklEX0NVX0VESVRPUiwgdHJ1ZSk7Ci0JCQkJCQkJCQkvLyBOb3cgYWRkIHRoZSBwcm9ibGVtcyB3ZSBmb3VuZAotCQkJCQkJCQkJaWYgKGVkaXRvciBpbnN0YW5jZW9mIElUZXh0RWRpdG9yKSB7Ci0JCQkJCQkJCQkJSUFubm90YXRpb25Nb2RlbCBhbm5vdGF0aW9uTW9kZWwgPSAoKElUZXh0RWRpdG9yKSBlZGl0b3IpLmdldERvY3VtZW50UHJvdmlkZXIoKS5nZXRBbm5vdGF0aW9uTW9kZWwoaW5wdXQpOwotCQkJCQkJCQkJCXRyYW5zbGF0aW9uLnJlY29uY2lsZUNvbXBpbGF0aW9uVW5pdCgpOwotCQkJCQkJCQkJCUxpc3QgcHJvYmxlbXNMaXN0ID0gdHJhbnNsYXRpb24uZ2V0UHJvYmxlbXMoKTsKLQkJCQkJCQkJCQlJUHJvYmxlbVtdIHByb2JsZW1zID0gKElQcm9ibGVtW10pIHByb2JsZW1zTGlzdC50b0FycmF5KG5ldyBJUHJvYmxlbVtwcm9ibGVtc0xpc3Quc2l6ZSgpXSk7Ci0JCQkJCQkJCQkJQW5ub3RhdGlvblR5cGVMb29rdXAgbG9va3VwID0gbmV3IEFubm90YXRpb25UeXBlTG9va3VwKCk7Ci0JCQkJCQkJCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBwcm9ibGVtcy5sZW5ndGg7IGkrKykgewotCQkJCQkJCQkJCQlpZiAocHJvYmxlbXNbaV0gaW5zdGFuY2VvZiBJSlNQUHJvYmxlbSkKLQkJCQkJCQkJCQkJCWNvbnRpbnVlOwotCQkJCQkJCQkJCQlpbnQgbGVuZ3RoID0gcHJvYmxlbXNbaV0uZ2V0U291cmNlRW5kKCkgLSBwcm9ibGVtc1tpXS5nZXRTb3VyY2VTdGFydCgpICsgMTsKLQkJCQkJCQkJCQkJUG9zaXRpb24gcG9zaXRpb24gPSBuZXcgUG9zaXRpb24ocHJvYmxlbXNbaV0uZ2V0U291cmNlU3RhcnQoKSwgbGVuZ3RoKTsKLQkJCQkJCQkJCQkJQW5ub3RhdGlvbiBhbm5vdGF0aW9uID0gbnVsbDsKLQkJCQkJCQkJCQkJU3RyaW5nIHR5cGUgPSBsb29rdXAuZ2V0QW5ub3RhdGlvblR5cGUoSU1hcmtlci5QUk9CTEVNLCBJTWFya2VyLlNFVkVSSVRZX0lORk8pOwotCQkJCQkJCQkJCQlpZiAocHJvYmxlbXNbaV0uaXNFcnJvcigpKSB7Ci0JCQkJCQkJCQkJCQl0eXBlID0gbG9va3VwLmdldEFubm90YXRpb25UeXBlKElNYXJrZXIuUFJPQkxFTSwgSU1hcmtlci5TRVZFUklUWV9FUlJPUik7Ci0JCQkJCQkJCQkJCX0KLQkJCQkJCQkJCQkJZWxzZSBpZiAocHJvYmxlbXNbaV0uaXNXYXJuaW5nKCkpIHsKLQkJCQkJCQkJCQkJCXR5cGUgPSBsb29rdXAuZ2V0QW5ub3RhdGlvblR5cGUoSU1hcmtlci5QUk9CTEVNLCBJTWFya2VyLlNFVkVSSVRZX1dBUk5JTkcpOwotCQkJCQkJCQkJCQl9Ci0JCQkJCQkJCQkJCWFubm90YXRpb24gPSBuZXcgQW5ub3RhdGlvbih0eXBlLCBmYWxzZSwgcHJvYmxlbXNbaV0uZ2V0TWVzc2FnZSgpKTsKLQkJCQkJCQkJCQkJaWYgKGFubm90YXRpb24gIT0gbnVsbCkgewotCQkJCQkJCQkJCQkJYW5ub3RhdGlvbk1vZGVsLmFkZEFubm90YXRpb24oYW5ub3RhdGlvbiwgcG9zaXRpb24pOwotCQkJCQkJCQkJCQl9CisJCUV2YWx1YXRpb25Db250ZXh0IGV2YWx1YXRpb25Db250ZXh0ID0gKEV2YWx1YXRpb25Db250ZXh0KSBldmVudC5nZXRBcHBsaWNhdGlvbkNvbnRleHQoKTsKKwkJaWYgKGV2YWx1YXRpb25Db250ZXh0ICE9IG51bGwpIHsKKwkJCU9iamVjdCBzZWxlY3Rpb24gPSBldmFsdWF0aW9uQ29udGV4dC5nZXREZWZhdWx0VmFyaWFibGUoKTsKKwkJCWlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBMaXN0KSB7CisJCQkJTGlzdCBsaXN0ID0gKExpc3QpIHNlbGVjdGlvbjsKKwkJCQlpZiAoIWxpc3QuaXNFbXB0eSgpKSB7CisJCQkJCWlmIChsaXN0LmdldCgwKSBpbnN0YW5jZW9mIElET01Ob2RlKSB7CisJCQkJCQlJRE9NTW9kZWwgbW9kZWwgPSAoKElET01Ob2RlKSBsaXN0LmdldCgwKSkuZ2V0TW9kZWwoKTsKKwkJCQkJCUlOb2RlQWRhcHRlciBhZGFwdGVyID0gbW9kZWwuZ2V0RG9jdW1lbnQoKS5nZXRBZGFwdGVyRm9yKElKU1BUcmFuc2xhdGlvbi5jbGFzcyk7CisJCQkJCQlpZiAoYWRhcHRlciAhPSBudWxsKSB7CisJCQkJCQkJLy8gY3JlYXRlIGFuIElFZGl0b3JJbnB1dCBmb3IgdGhlIEphdmEgZWRpdG9yCisJCQkJCQkJSVN0b3JhZ2VFZGl0b3JJbnB1dCBpbnB1dCA9IG5ldyBKU1BUcmFuc2xhdGlvbkVkaXRvcklucHV0KG1vZGVsKTsKKwkJCQkJCQl0cnkgeworCQkJCQkJCQlJRWRpdG9yUGFydCBlZGl0b3IgPSBJREUub3BlbkVkaXRvcihQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKSwgaW5wdXQsIEphdmFVSS5JRF9DVV9FRElUT1IsIHRydWUpOworCQkJCQkJCQkvLyBOb3cgYWRkIHRoZSBwcm9ibGVtcyB3ZSBmb3VuZAorCQkJCQkJCQlpZiAoZWRpdG9yIGluc3RhbmNlb2YgSVRleHRFZGl0b3IpIHsKKwkJCQkJCQkJCUlBbm5vdGF0aW9uTW9kZWwgYW5ub3RhdGlvbk1vZGVsID0gKChJVGV4dEVkaXRvcikgZWRpdG9yKS5nZXREb2N1bWVudFByb3ZpZGVyKCkuZ2V0QW5ub3RhdGlvbk1vZGVsKGlucHV0KTsKKwkJCQkJCQkJCUpTUFRyYW5zbGF0aW9uQWRhcHRlciB0cmFuc2xhdGlvbkFkYXB0ZXIgPSAoSlNQVHJhbnNsYXRpb25BZGFwdGVyKSBtb2RlbC5nZXREb2N1bWVudCgpLmdldEFkYXB0ZXJGb3IoSUpTUFRyYW5zbGF0aW9uLmNsYXNzKTsKKwkJCQkJCQkJCUpTUFRyYW5zbGF0aW9uRXh0ZW5zaW9uIHRyYW5zbGF0aW9uID0gdHJhbnNsYXRpb25BZGFwdGVyLmdldEpTUFRyYW5zbGF0aW9uKCk7CisJCQkJCQkJCQl0cmFuc2xhdGlvbi5yZWNvbmNpbGVDb21waWxhdGlvblVuaXQoKTsKKwkJCQkJCQkJCUxpc3QgcHJvYmxlbXNMaXN0ID0gdHJhbnNsYXRpb24uZ2V0UHJvYmxlbXMoKTsKKwkJCQkJCQkJCUlQcm9ibGVtW10gcHJvYmxlbXMgPSAoSVByb2JsZW1bXSkgcHJvYmxlbXNMaXN0LnRvQXJyYXkobmV3IElQcm9ibGVtW3Byb2JsZW1zTGlzdC5zaXplKCldKTsKKwkJCQkJCQkJCUFubm90YXRpb25UeXBlTG9va3VwIGxvb2t1cCA9IG5ldyBBbm5vdGF0aW9uVHlwZUxvb2t1cCgpOworCQkJCQkJCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBwcm9ibGVtcy5sZW5ndGg7IGkrKykgeworCQkJCQkJCQkJCWlmIChwcm9ibGVtc1tpXSBpbnN0YW5jZW9mIElKU1BQcm9ibGVtKQorCQkJCQkJCQkJCQljb250aW51ZTsKKwkJCQkJCQkJCQlpbnQgbGVuZ3RoID0gcHJvYmxlbXNbaV0uZ2V0U291cmNlRW5kKCkgLSBwcm9ibGVtc1tpXS5nZXRTb3VyY2VTdGFydCgpICsgMTsKKwkJCQkJCQkJCQlQb3NpdGlvbiBwb3NpdGlvbiA9IG5ldyBQb3NpdGlvbihwcm9ibGVtc1tpXS5nZXRTb3VyY2VTdGFydCgpLCBsZW5ndGgpOworCQkJCQkJCQkJCUFubm90YXRpb24gYW5ub3RhdGlvbiA9IG51bGw7CisJCQkJCQkJCQkJU3RyaW5nIHR5cGUgPSBsb29rdXAuZ2V0QW5ub3RhdGlvblR5cGUoSU1hcmtlci5QUk9CTEVNLCBJTWFya2VyLlNFVkVSSVRZX0lORk8pOworCQkJCQkJCQkJCWlmIChwcm9ibGVtc1tpXS5pc0Vycm9yKCkpIHsKKwkJCQkJCQkJCQkJdHlwZSA9IGxvb2t1cC5nZXRBbm5vdGF0aW9uVHlwZShJTWFya2VyLlBST0JMRU0sIElNYXJrZXIuU0VWRVJJVFlfRVJST1IpOworCQkJCQkJCQkJCX0KKwkJCQkJCQkJCQllbHNlIGlmIChwcm9ibGVtc1tpXS5pc1dhcm5pbmcoKSkgeworCQkJCQkJCQkJCQl0eXBlID0gbG9va3VwLmdldEFubm90YXRpb25UeXBlKElNYXJrZXIuUFJPQkxFTSwgSU1hcmtlci5TRVZFUklUWV9XQVJOSU5HKTsKKwkJCQkJCQkJCQl9CisJCQkJCQkJCQkJYW5ub3RhdGlvbiA9IG5ldyBBbm5vdGF0aW9uKHR5cGUsIGZhbHNlLCBwcm9ibGVtc1tpXS5nZXRNZXNzYWdlKCkpOworCQkJCQkJCQkJCWlmIChhbm5vdGF0aW9uICE9IG51bGwpIHsKKwkJCQkJCQkJCQkJYW5ub3RhdGlvbk1vZGVsLmFkZEFubm90YXRpb24oYW5ub3RhdGlvbiwgcG9zaXRpb24pOwogCQkJCQkJCQkJCX0KIAkJCQkJCQkJCX0KIAkJCQkJCQkJfQotCQkJCQkJCQljYXRjaCAoUGFydEluaXRFeGNlcHRpb24gZSkgewotCQkJCQkJCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCQkJCQkJCURpc3BsYXkuZ2V0Q3VycmVudCgpLmJlZXAoKTsKLQkJCQkJCQkJfQotCQkJCQkJCQlyZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKIAkJCQkJCQl9Ci0JCQkJCQl9OwotCQkJCQkJb3BlbmVyLnNldFN5c3RlbShmYWxzZSk7Ci0JCQkJCQlvcGVuZXIuc2V0VXNlcih0cnVlKTsKLQkJCQkJCW9wZW5lci5zY2hlZHVsZSgpOworCQkJCQkJCWNhdGNoIChQYXJ0SW5pdEV4Y2VwdGlvbiBlKSB7CisJCQkJCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQkJCQkJCURpc3BsYXkuZ2V0Q3VycmVudCgpLmJlZXAoKTsKKwkJCQkJCQl9CisJCQkJCQl9CiAJCQkJCX0KIAkJCQl9CiAJCQl9CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL2NvbnRlbnRhc3Npc3QvSlNQRUxDb250ZW50QXNzaXN0VGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9jb250ZW50YXNzaXN0L0pTUEVMQ29udGVudEFzc2lzdFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODJhMDcxMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL2NvbnRlbnRhc3Npc3QvSlNQRUxDb250ZW50QXNzaXN0VGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLmNvbnRlbnRhc3Npc3Q7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlUm9vdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LmNvbnRlbnRhc3Npc3QuSUNvbXBsZXRpb25Qcm9wb3NhbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuSlNQRUxDb250ZW50QXNzaXN0UHJvY2Vzc29yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMudXRpbC5GaWxlVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLnV0aWwuUHJvamVjdFVuemlwVXRpbGl0eTsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnNlcnZpY2UuZGF0YWxvY2F0aW9uLkxvY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5GaWxlRWRpdG9ySW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5TdHJ1Y3R1cmVkVGV4dEVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLlN0cnVjdHVyZWRUZXh0Vmlld2VyOwotCi1wdWJsaWMgY2xhc3MgSlNQRUxDb250ZW50QXNzaXN0VGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgV1RQX0FVVE9URVNUX05PTklOVEVSQUNUSVZFID0gInd0cC5hdXRvdGVzdC5ub25pbnRlcmFjdGl2ZSI7Ci0JcHJpdmF0ZSBTdHJpbmcgcHJldmlvdXNXVFBBdXRvVGVzdE5vbklOdGVyYWN0aXZlUHJvcFZhbHVlID0gbnVsbDsKLQkKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9QUk9KRUNUX05BTUUgPSAidGVzdEpTUEVMQ29udGVudEFzc2lzdCI7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIENPTlRFTlRfRElSID0gIldlYkNvbnRlbnQiOwotCQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTVFJVQ1RVUkVEX0VESVRPUl9UWVBFID0gIm9yZy5lY2xpcHNlLndzdC5zc2UudWkuU3RydWN0dXJlZFRleHRFZGl0b3IiOwotCQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBGSUxFXzBfUEFUSCA9IENPTlRFTlRfRElSICsgSVBhdGguU0VQQVJBVE9SICsgIlRlc3QwLmpzcCI7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEZJTEVfMV9QQVRIID0gQ09OVEVOVF9ESVIgKyBJUGF0aC5TRVBBUkFUT1IgKyAiVGVzdDEuanNwIjsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRklMRV8yX1BBVEggPSBDT05URU5UX0RJUiArIElQYXRoLlNFUEFSQVRPUiArICJUZXN0Mi5qc3AiOwotCQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdIFRFU1RfMF9FWFBFQ1RFRF9QUk9QUyA9IHsKLQkJImVycm9yRGF0YSIsICJleGNlcHRpb24iLCAiZXhwcmVzc2lvbkV2YWx1YXRvciIsICJvdXQiLCAicGFnZSIsICJyZXF1ZXN0IiwgInJlc3BvbnNlIiwKLQkJInNlcnZsZXRDb25maWciLCAic2VydmxldENvbnRleHQiLCAic2Vzc2lvbiIsICJ2YXJpYWJsZVJlc29sdmVyIn07Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW10gVEVTVF8xX0VYUEVDVEVEX1BST1BTID0geyJyZXF1ZXN0IiwgInJlc3BvbnNlIn07Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW10gVEVTVF8yX0VYUEVDVEVEX1BST1BTID0geyJyZXF1ZXN0In07Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFRFU1RfMF9ET0NfTE9DID0gMzcxOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBURVNUXzFfRE9DX0xPQyA9IDM3MjsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVEVTVF8yX0RPQ19MT0MgPSAzNzQ7Ci0JCi0JcHJpdmF0ZSBJUHJvamVjdCBwcm9qZWN0OwotCXByaXZhdGUgSVdvcmtiZW5jaFBhZ2UgcGFnZTsKLQkKLQlwdWJsaWMgSlNQRUxDb250ZW50QXNzaXN0VGVzdCgpIHsKLQkJc3VwZXIoIkpTUCBFTCBDb250ZW50IEFzc2lzdCBUZXN0cyIpOwotCX0KLQkKLQlwdWJsaWMgSlNQRUxDb250ZW50QXNzaXN0VGVzdChTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0JCi0JLyoqCi0JICogRG8gc2V0IHVwLCBpZ25vcmUgYWxsIHBvcCB1cHMgZHVyaW5nIHRlc3QKLQkgKi8KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zZXRVcCgpOwotCQlpbml0aWFsaXplUmVzb3VyY2UoKTsKLQkJU3RyaW5nIG5vbmludGVyYWN0aXZlID0gU3lzdGVtLmdldFByb3BlcnR5KFdUUF9BVVRPVEVTVF9OT05JTlRFUkFDVElWRSk7Ci0JCQotCQlpZiAobm9uaW50ZXJhY3RpdmUgIT0gbnVsbCkgewotCQkJcHJldmlvdXNXVFBBdXRvVGVzdE5vbklOdGVyYWN0aXZlUHJvcFZhbHVlID0gbm9uaW50ZXJhY3RpdmU7Ci0JCX0gZWxzZSB7Ci0JCQlwcmV2aW91c1dUUEF1dG9UZXN0Tm9uSU50ZXJhY3RpdmVQcm9wVmFsdWUgPSAiZmFsc2UiOwotCQl9Ci0JCVN5c3RlbS5zZXRQcm9wZXJ0eShXVFBfQVVUT1RFU1RfTk9OSU5URVJBQ1RJVkUsICJ0cnVlIik7Ci0JfQotCQotCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnRlYXJEb3duKCk7Ci0JCWlmIChwcmV2aW91c1dUUEF1dG9UZXN0Tm9uSU50ZXJhY3RpdmVQcm9wVmFsdWUgIT0gbnVsbCkgewotCQkJU3lzdGVtLnNldFByb3BlcnR5KFdUUF9BVVRPVEVTVF9OT05JTlRFUkFDVElWRSwgcHJldmlvdXNXVFBBdXRvVGVzdE5vbklOdGVyYWN0aXZlUHJvcFZhbHVlKTsKLQkJfQotCQkKLQkJdHJ5IHsKLQkJCXRoaXMucHJvamVjdC5kZWxldGUodHJ1ZSwgbnVsbCk7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlICkgewotCQkJLy9pZ25vcmUsIHRoaXMgaXMgbm90IHBhcnQgb2YgdGhlIHRlc3QsIGp1c3QgdXNlZnVsIGNsZWFudXAKLQkJfQotCX0KLQkKLQkvKioKLQkgKiBTZXQgdXAgdGhlIHByb2plY3QgYW5kIHdvcmtiZW5jaAotCSAqIAotCSAqIEB0aHJvd3MgRXhjZXB0aW9uCi0JICovCi0JcHJpdmF0ZSB2b2lkIGluaXRpYWxpemVSZXNvdXJjZSgpIHRocm93cyBFeGNlcHRpb24gewotCQlQcm9qZWN0VW56aXBVdGlsaXR5IGZQcm9qVXRpbCA9IG5ldyBQcm9qZWN0VW56aXBVdGlsaXR5KCk7Ci0JCS8vIHJvb3Qgb2Ygd29ya3NwYWNlIGRpcmVjdG9yeQotCQlMb2NhdGlvbiBwbGF0Zm9ybUxvY2F0aW9uID0gUGxhdGZvcm0uZ2V0SW5zdGFuY2VMb2NhdGlvbigpOwotCQkvLyBwbGF0Zm9ybSBsb2NhdGlvbiBtYXkgYmUgbnVsbCAtLSBkZXBlbmRzIG9uICJtb2RlIiBvZiBwbGF0Zm9ybQotCQlpZiAocGxhdGZvcm1Mb2NhdGlvbiAhPSBudWxsKSB7Ci0JCQlGaWxlIHppcEZpbGUgPSBGaWxlVXRpbC5tYWtlRmlsZUZvcigKLQkJCQlQcm9qZWN0VW56aXBVdGlsaXR5LlBST0pFQ1RfWklQU19GT0xERVIsCi0JCQkJVEVTVF9QUk9KRUNUX05BTUUgKyBQcm9qZWN0VW56aXBVdGlsaXR5LlpJUF9FWFRFTlNJT04sCi0JCQkJUHJvamVjdFVuemlwVXRpbGl0eS5QUk9KRUNUX1pJUFNfRk9MREVSKTsKLQkJCWZQcm9qVXRpbC51bnppcEFuZEltcG9ydCh6aXBGaWxlLCBwbGF0Zm9ybUxvY2F0aW9uLmdldFVSTCgpLmdldFBhdGgoKSk7Ci0JCQlmUHJvalV0aWwuaW5pdEphdmFQcm9qZWN0KFRFU1RfUFJPSkVDVF9OQU1FKTsKLQkJCUlXb3Jrc3BhY2VSb290IHJvb3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpOwotCQkJdGhpcy5wcm9qZWN0ID0gcm9vdC5nZXRQcm9qZWN0KFRFU1RfUFJPSkVDVF9OQU1FKTsKLQkJCQotCQkJSVdvcmtiZW5jaFdpbmRvdyB3b3JrYmVuY2hXaW5kb3cgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpOwotCQkJdGhpcy5wYWdlID0gd29ya2JlbmNoV2luZG93LmdldEFjdGl2ZVBhZ2UoKTsKLQkJfQotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0RUxQcm9wb3NhbHNfMCgpIHRocm93cyBFeGNlcHRpb24gewkJCi0JCUlDb21wbGV0aW9uUHJvcG9zYWxbXSBwcm9wcyA9IGdldENvbXBsZXRpb25Qcm9wb3NhbHMoRklMRV8wX1BBVEgsIFRFU1RfMF9ET0NfTE9DKTsKLQkJdmVyaWZ5UHJvcG9zYWxzKHByb3BzLCBURVNUXzBfRVhQRUNURURfUFJPUFMpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0RUxQcm9wb3NhbHNfMSgpIHRocm93cyBFeGNlcHRpb24gewkJCi0JCUlDb21wbGV0aW9uUHJvcG9zYWxbXSBwcm9wcyA9IGdldENvbXBsZXRpb25Qcm9wb3NhbHMoRklMRV8xX1BBVEgsIFRFU1RfMV9ET0NfTE9DKTsKLQkJdmVyaWZ5UHJvcG9zYWxzKHByb3BzLCBURVNUXzFfRVhQRUNURURfUFJPUFMpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0RUxQcm9wb3NhbHNfMigpIHRocm93cyBFeGNlcHRpb24gewkJCi0JCUlDb21wbGV0aW9uUHJvcG9zYWxbXSBwcm9wcyA9IGdldENvbXBsZXRpb25Qcm9wb3NhbHMoRklMRV8yX1BBVEgsIFRFU1RfMl9ET0NfTE9DKTsKLQkJdmVyaWZ5UHJvcG9zYWxzKHByb3BzLCBURVNUXzJfRVhQRUNURURfUFJPUFMpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0RUxDaG9zZW5Qcm9wb3NhbENvbXBsZXRpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJSUZpbGUgZmlsZSA9IGdldEZpbGUoRklMRV8xX1BBVEgpOwotCQlJQ29tcGxldGlvblByb3Bvc2FsW10gcHJvcHMgPSBnZXRDb21wbGV0aW9uUHJvcG9zYWxzKGZpbGUsIFRFU1RfMV9ET0NfTE9DKTsKLQkJdmVyaWZ5UHJvcG9zYWxzKHByb3BzLCBURVNUXzFfRVhQRUNURURfUFJPUFMpOwotCQkKLQkJU3RydWN0dXJlZFRleHRFZGl0b3IgZWRpdG9yID0gZ2V0RWRpdG9yKGZpbGUpOwotCQlTdHJ1Y3R1cmVkVGV4dFZpZXdlciB2aWV3ZXIgPSBlZGl0b3IuZ2V0VGV4dFZpZXdlcigpOwotCQlJRG9jdW1lbnQgZG9jdW1lbnQgPSB2aWV3ZXIuZ2V0RG9jdW1lbnQoKTsKLQkJcHJvcHNbMF0uYXBwbHkoZG9jdW1lbnQpOwotCQkKLQkJU3RyaW5nIGluc2VydGVkID0gZG9jdW1lbnQuZ2V0KFRFU1RfMV9ET0NfTE9DLTEsIFRFU1RfMV9FWFBFQ1RFRF9QUk9QU1swXS5sZW5ndGgoKSk7Ci0JCWFzc2VydEVxdWFscygKLQkJCSJUaGUgY29tcGxldGVkIHByb3Bvc2FsICIgKyBpbnNlcnRlZCArICIgZG9lcyBub3QgbWF0Y2ggdGhlIGV4cGVjdGVkIGNvbXBsZXRpb24gIiArIFRFU1RfMV9FWFBFQ1RFRF9QUk9QU1swXSwKLQkJCVRFU1RfMV9FWFBFQ1RFRF9QUk9QU1swXSwgaW5zZXJ0ZWQpOwotCQkKLQkJZWRpdG9yLmRvU2F2ZShudWxsKTsKLQl9Ci0JCi0JLyoqCi0JICogR2V0IGEgZmlsZSBjb250YWluZWQgaW4gdGhlIHByb2plY3QKLQkgKiAKLQkgKiBAcGFyYW0gZmlsZVBhdGgKLQkgKiBAcmV0dXJuCi0JICovCi0JcHJpdmF0ZSBJRmlsZSBnZXRGaWxlKFN0cmluZyBmaWxlUGF0aCkgewotCQlJRmlsZSByZXRGaWxlID0gdGhpcy5wcm9qZWN0LmdldEZpbGUoZmlsZVBhdGgpOwotCQkKLQkJYXNzZXJ0VHJ1ZShyZXRGaWxlICsgIiB0ZXN0aW5nIGZpbGUgZG9lcyBub3QgZXhpc3QuIiwgcmV0RmlsZS5leGlzdHMoKSk7Ci0JCQotCQlyZXR1cm4gcmV0RmlsZTsKLQl9Ci0JCi0JLyoqCi0JICogdXNlIGEgdmlld2VyIGFuZCBkb2N1bWVudCBsb2NhdGlvbiB0byBnZW5lcmF0ZSBjb21wbGV0aW9uIHByb3Bvc2FscyBmb3IgdGhhdCBsb2NhdGlvbiBpbiB0aGUgdmlld2VyCi0JICogCi0JICogQHBhcmFtIGZpbGVQYXRoCi0JICogQHBhcmFtIGRvY3VtZW50TG9jYXRpb24KLQkgKiBAcmV0dXJuCi0JICogQHRocm93cyBQYXJ0SW5pdEV4Y2VwdGlvbgotCSAqLwotCXByaXZhdGUgSUNvbXBsZXRpb25Qcm9wb3NhbFtdIGdldENvbXBsZXRpb25Qcm9wb3NhbHMoU3RyaW5nIGZpbGVQYXRoLCBpbnQgZG9jdW1lbnRMb2NhdGlvbikgdGhyb3dzIFBhcnRJbml0RXhjZXB0aW9uIHsKLQkJSUZpbGUgZmlsZSA9IGdldEZpbGUoZmlsZVBhdGgpOwotCQlTdHJ1Y3R1cmVkVGV4dEVkaXRvciBlZGl0b3IgPSBnZXRFZGl0b3IoZmlsZSk7Ci0JCVN0cnVjdHVyZWRUZXh0Vmlld2VyIHZpZXdlciA9IGVkaXRvci5nZXRUZXh0Vmlld2VyKCk7Ci0JCXJldHVybiBnZXRDb21wbGV0aW9uUHJvcG9zYWxzKHZpZXdlciwgZG9jdW1lbnRMb2NhdGlvbik7Ci0JfQotCQotCQotCS8qKgotCSAqIHVzZSBhIHZpZXdlciBhbmQgZG9jdW1lbnQgbG9jYXRpb24gdG8gZ2VuZXJhdGUgY29tcGxldGlvbiBwcm9wb3NhbHMgZm9yIHRoYXQgbG9jYXRpb24gaW4gdGhlIHZpZXdlcgotCSAqIAotCSAqIEBwYXJhbSBmaWxlCi0JICogQHBhcmFtIGRvY3VtZW50TG9jYXRpb24KLQkgKiBAcmV0dXJuCi0JICogQHRocm93cyBQYXJ0SW5pdEV4Y2VwdGlvbgotCSAqLwotCXByaXZhdGUgSUNvbXBsZXRpb25Qcm9wb3NhbFtdIGdldENvbXBsZXRpb25Qcm9wb3NhbHMoSUZpbGUgZmlsZSwgaW50IGRvY3VtZW50TG9jYXRpb24pIHRocm93cyBQYXJ0SW5pdEV4Y2VwdGlvbiB7Ci0JCVN0cnVjdHVyZWRUZXh0RWRpdG9yIGVkaXRvciA9IGdldEVkaXRvcihmaWxlKTsKLQkJU3RydWN0dXJlZFRleHRWaWV3ZXIgdmlld2VyID0gZWRpdG9yLmdldFRleHRWaWV3ZXIoKTsKLQkJcmV0dXJuIGdldENvbXBsZXRpb25Qcm9wb3NhbHModmlld2VyLCBkb2N1bWVudExvY2F0aW9uKTsKLQl9Ci0JCi0JLyoqCi0JICogdXNlIGEgdmlld2VyIGFuZCBkb2N1bWVudCBsb2NhdGlvbiB0byBnZW5lcmF0ZSBjb21wbGV0aW9uIHByb3Bvc2FscyBmb3IgdGhhdCBsb2NhdGlvbiBpbiB0aGUgdmlld2VyCi0JICogCi0JICogQHBhcmFtIHZpZXdlcgotCSAqIEBwYXJhbSBkb2N1bWVudExvY2F0aW9uCi0JICogQHJldHVybgotCSAqIEB0aHJvd3MgUGFydEluaXRFeGNlcHRpb24KLQkgKi8KLQlwcml2YXRlIElDb21wbGV0aW9uUHJvcG9zYWxbXSBnZXRDb21wbGV0aW9uUHJvcG9zYWxzKFN0cnVjdHVyZWRUZXh0Vmlld2VyIHZpZXdlciwgaW50IGRvY3VtZW50TG9jYXRpb24pIHRocm93cyBQYXJ0SW5pdEV4Y2VwdGlvbiB7Ci0JCUpTUEVMQ29udGVudEFzc2lzdFByb2Nlc3NvciBwcm9jZXNzb3IgPSBuZXcgSlNQRUxDb250ZW50QXNzaXN0UHJvY2Vzc29yKCk7Ci0JCUlDb21wbGV0aW9uUHJvcG9zYWxbXSBwcm9wcyA9IHByb2Nlc3Nvci5jb21wdXRlQ29tcGxldGlvblByb3Bvc2Fscyh2aWV3ZXIsIGRvY3VtZW50TG9jYXRpb24pOwotCQkKLQkJcmV0dXJuIHByb3BzOwotCX0KLQkKLQkvKioKLQkgKiBHaXZlbiBhIGZpbGUgcmV0dXJucyBhIHZpZXdlciBmb3IgdGhhdCBmaWxlCi0JICogCi0JICogQHBhcmFtIGZpbGUKLQkgKiBAcmV0dXJuCi0JICogQHRocm93cyBQYXJ0SW5pdEV4Y2VwdGlvbgotCSAqLwotCXByaXZhdGUgU3RydWN0dXJlZFRleHRFZGl0b3IgZ2V0RWRpdG9yKElGaWxlIGZpbGUpIHRocm93cyBQYXJ0SW5pdEV4Y2VwdGlvbiB7Ci0JCUlFZGl0b3JJbnB1dCBpbnB1dCA9IG5ldyBGaWxlRWRpdG9ySW5wdXQoZmlsZSk7Ci0JCUlFZGl0b3JQYXJ0IHBhcnQgPSB0aGlzLnBhZ2Uub3BlbkVkaXRvcihpbnB1dCwgU1RSVUNUVVJFRF9FRElUT1JfVFlQRSwgdHJ1ZSk7Ci0JCQotCQlhc3NlcnRUcnVlKCJVbmFibGUgdG8gb3BlbiBzdHJ1Y3R1cmVkIHRleHQgZWRpdG9yIiwgcGFydCBpbnN0YW5jZW9mIFN0cnVjdHVyZWRUZXh0RWRpdG9yKTsKLQkJCi0JCXJldHVybiAoU3RydWN0dXJlZFRleHRFZGl0b3IpIHBhcnQ7Ci0JfQotCQotCS8qKgotCSAqIEdpdmVuIGdlbmVyYXRlZCBwcm9wb3NhbHMgYmUgc3VyZSB0aGF0IGFsbCBvZiB0aGUgZXB4dGVkIHByb3Bvc2FscyBhcmUgY29udGFpbmVkIGluIHRoZSBnZW5lcmF0ZWQgb25lcwotCSAqIEBwYXJhbSBwcm9wcwotCSAqIEBwYXJhbSBleHBlY3RlZFByb3BzCi0JICovCi0JcHJpdmF0ZSB2b2lkIHZlcmlmeVByb3Bvc2FscyhJQ29tcGxldGlvblByb3Bvc2FsW10gcHJvcHMsIFN0cmluZ1tdIGV4cGVjdGVkUHJvcHMpIHsKLQkJZm9yKGludCBpID0gMDsgaSA8IGV4cGVjdGVkUHJvcHMubGVuZ3RoOyArK2kpIHsKLQkJCWFzc2VydFRydWUoIlRoZSBleHBlY3RlZCBwcm9wb3NhbCBcIiIgKyBleHBlY3RlZFByb3BzW2ldICsgIlwiIHdhcyBub3QgZ2l2ZW4iLAotCQkJCWZpbmRQcm9wc29hbChwcm9wcywgZXhwZWN0ZWRQcm9wc1tpXSkpOwotCQl9Ci0JfQotCQotCS8qKgotCSAqIEdpdmVuIGFuIGV4cGVjdGVkIHByb3Bvc2FsIHN0cmluZyBjaGVjayB0byBiZSBzdXJlIGl0IGV4aXN0cyBpbiB0aGUgZ2l2ZW4gcHJvcG9zYWxzCi0JICogCi0JICogQHBhcmFtIHByb3BzCi0JICogQHBhcmFtIGV4cGVjdGVkUHJvcAotCSAqIEByZXR1cm4KLQkgKi8KLQlwcml2YXRlIGJvb2xlYW4gZmluZFByb3Bzb2FsKElDb21wbGV0aW9uUHJvcG9zYWxbXSBwcm9wcywgU3RyaW5nIGV4cGVjdGVkUHJvcCkgewotCQlib29sZWFuIGZvdW5kID0gZmFsc2U7Ci0JCQotCQlmb3IoaW50IGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoICYmICFmb3VuZDsgKytpKSB7Ci0JCQlmb3VuZCA9IHByb3BzW2ldLmdldERpc3BsYXlTdHJpbmcoKS5zdGFydHNXaXRoKGV4cGVjdGVkUHJvcCk7Ci0JCX0KLQkJCi0JCXJldHVybiBmb3VuZDsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL290aGVyL1VuaXRUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9vdGhlci9Vbml0VGVzdHMuamF2YQppbmRleCBiOWYwY2ZiLi4xNWM0OTYzIDEwMDY0NAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL290aGVyL1VuaXRUZXN0cy5qYXZhCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvb3RoZXIvVW5pdFRlc3RzLmphdmEKQEAgLTEwOTEsNyArMTA5MSw4IEBACiAJCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCBzdGFydE9mQ2hhbmdlcywgbGVuZ3RoVG9SZXBsYWNlLCBjaGFuZ2VzKTsKIAkJU3RyaW5nIHJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7CiAKLQkJYXNzZXJ0RXF1YWxzKCJwYXJ0IDE6IHRleHQgdXBkYXRlIiwgZXhwZWN0ZWRTdHJpbmcsIHJlc3VsdFN0cmluZyk7CisJCWJvb2xlYW4gcmVzdWx0ID0gKGV4cGVjdGVkU3RyaW5nLmVxdWFscyhyZXN1bHRTdHJpbmcpKTsKKwkJYXNzZXJ0VHJ1ZSgicGFydCAxOiB0ZXh0IHVwZGF0ZSIsIHJlc3VsdCk7CiAJCWFzc2VydFRydWUoInBhcnQgMTogZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKIAogCQkvLyBzdGVwIDIKQEAgLTExMDcsNyArMTEwOCw4IEBACiAJCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCBzdGFydE9mQ2hhbmdlcywgbGVuZ3RoVG9SZXBsYWNlLCBjaGFuZ2VzKTsKIAkJcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKIAotCQlhc3NlcnRFcXVhbHMoInBhcnQgMjogdGV4dCB1cGRhdGUiLCBleHBlY3RlZFN0cmluZywgcmVzdWx0U3RyaW5nKTsKKwkJcmVzdWx0ID0gKGV4cGVjdGVkU3RyaW5nLmVxdWFscyhyZXN1bHRTdHJpbmcpKTsKKwkJYXNzZXJ0VHJ1ZSgicGFydCAyOiB0ZXh0IHVwZGF0ZSIsIHJlc3VsdCk7CiAJCWFzc2VydFRydWUoInBhcnQgMjogZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKIAogCQlldmVudENhc2UgPSAyOTsKQEAgLTExMjAsNyArMTEyMiw4IEBACiAJCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCBzdGFydE9mQ2hhbmdlcywgbGVuZ3RoVG9SZXBsYWNlLCBjaGFuZ2VzKTsKIAkJcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKIAotCQlhc3NlcnRFcXVhbHMoInBhcnQgMzogdGV4dCB1cGRhdGUiLCBleHBlY3RlZFN0cmluZywgcmVzdWx0U3RyaW5nKTsKKwkJcmVzdWx0ID0gKGV4cGVjdGVkU3RyaW5nLmVxdWFscyhyZXN1bHRTdHJpbmcpKTsKKwkJYXNzZXJ0VHJ1ZSgicGFydCAzOiB0ZXh0IHVwZGF0ZSIsIHJlc3VsdCk7CiAJCWFzc2VydFRydWUoInBhcnQgMzogZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKIAogCQlldmVudENhc2UgPSAzMDsKQEAgLTExMzMsNyArMTEzNiw4IEBACiAJCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCBzdGFydE9mQ2hhbmdlcywgbGVuZ3RoVG9SZXBsYWNlLCBjaGFuZ2VzKTsKIAkJcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKIAotCQlhc3NlcnRFcXVhbHMoInBhcnQgNDogdGV4dCB1cGRhdGUiLCBleHBlY3RlZFN0cmluZywgcmVzdWx0U3RyaW5nKTsKKwkJcmVzdWx0ID0gKGV4cGVjdGVkU3RyaW5nLmVxdWFscyhyZXN1bHRTdHJpbmcpKTsKKwkJYXNzZXJ0VHJ1ZSgicGFydCA0OiB0ZXh0IHVwZGF0ZSIsIHJlc3VsdCk7CiAJCWFzc2VydFRydWUoInBhcnQgNDogZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKIAl9CiAKQEAgLTEyNjQsNyArMTI2OCw5IEBACiAJCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCA5LCA5LCAiIik7CiAJCVN0cmluZyByZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwogCi0JCWFzc2VydEVxdWFscyhleHBlY3RlZFN0cmluZywgcmVzdWx0U3RyaW5nKTsKKwkJYm9vbGVhbiByZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOworCisJCWFzc2VydFRydWUoInRleHQgdXBkYXRlIiwgcmVzdWx0KTsKIAkJYXNzZXJ0VHJ1ZSgiZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKIAl9CiAKQEAgLTEyODQsNyArMTI5MCw5IEBACiAJCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCA1LCA5LCAiIik7CiAJCVN0cmluZyByZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwogCi0JCWFzc2VydEVxdWFscyhleHBlY3RlZFN0cmluZywgcmVzdWx0U3RyaW5nKTsKKwkJYm9vbGVhbiByZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOworCisJCWFzc2VydFRydWUoInRleHQgdXBkYXRlIiwgcmVzdWx0KTsKIAkJYXNzZXJ0VHJ1ZSgiZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKIAl9CiAKQEAgLTEzMDQsNyArMTMxMiw5IEBACiAJCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCAxNCwgOSwgIiIpOwogCQlTdHJpbmcgcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKIAotCQlhc3NlcnRFcXVhbHMoZXhwZWN0ZWRTdHJpbmcsIHJlc3VsdFN0cmluZyk7CisJCWJvb2xlYW4gcmVzdWx0ID0gKGV4cGVjdGVkU3RyaW5nLmVxdWFscyhyZXN1bHRTdHJpbmcpKTsKKworCQlhc3NlcnRUcnVlKCJ0ZXh0IHVwZGF0ZSIsIHJlc3VsdCk7CiAJCWFzc2VydFRydWUoImV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7CiAJfQogCkBAIC0xMzI0LDcgKzEzMzQsOSBAQAogCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgNSwgNSwgIjxKS0w+Iik7CiAJCVN0cmluZyByZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwogCi0JCWFzc2VydEVxdWFscyhleHBlY3RlZFN0cmluZywgcmVzdWx0U3RyaW5nKTsKKwkJYm9vbGVhbiByZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOworCisJCWFzc2VydFRydWUoInRleHQgdXBkYXRlIiwgcmVzdWx0KTsKIAkJYXNzZXJ0VHJ1ZSgiZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKIAl9CiAKQEAgLTEzNDQsNyArMTM1Niw5IEBACiAJCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCA0LCAzLCAiIik7CiAJCVN0cmluZyByZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwogCi0JCWFzc2VydEVxdWFscyhleHBlY3RlZFN0cmluZywgcmVzdWx0U3RyaW5nKTsKKwkJYm9vbGVhbiByZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOworCisJCWFzc2VydFRydWUoInRleHQgdXBkYXRlIiwgcmVzdWx0KTsKIAkJYXNzZXJ0VHJ1ZSgiZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKIAl9CiAKQEAgLTEzNjQsNyArMTM3OCw5IEBACiAJCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCA1LCAwLCAiICIpOwogCQlTdHJpbmcgcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKIAotCQlhc3NlcnRFcXVhbHMoZXhwZWN0ZWRTdHJpbmcsIHJlc3VsdFN0cmluZyk7CisJCWJvb2xlYW4gcmVzdWx0ID0gKGV4cGVjdGVkU3RyaW5nLmVxdWFscyhyZXN1bHRTdHJpbmcpKTsKKworCQlhc3NlcnRUcnVlKCJ0ZXh0IHVwZGF0ZSIsIHJlc3VsdCk7CiAJCWFzc2VydFRydWUoImV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7CiAJfQogCkBAIC0xMzg0LDcgKzE0MDAsOSBAQAogCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgNiwgMCwgInoiKTsKIAkJU3RyaW5nIHJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7CiAKLQkJYXNzZXJ0RXF1YWxzKGV4cGVjdGVkU3RyaW5nLCByZXN1bHRTdHJpbmcpOworCQlib29sZWFuIHJlc3VsdCA9IChleHBlY3RlZFN0cmluZy5lcXVhbHMocmVzdWx0U3RyaW5nKSk7CisKKwkJYXNzZXJ0VHJ1ZSgidGV4dCB1cGRhdGUiLCByZXN1bHQpOwogCQlhc3NlcnRUcnVlKCJldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwogCX0KIApAQCAtMTQwNCw3ICsxNDIyLDkgQEAKIAkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIDYsIDEsICJ6PVwidFwiIik7CiAJCVN0cmluZyByZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwogCi0JCWFzc2VydEVxdWFscyhleHBlY3RlZFN0cmluZywgcmVzdWx0U3RyaW5nKTsKKwkJYm9vbGVhbiByZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOworCisJCWFzc2VydFRydWUoInRleHQgdXBkYXRlIiwgcmVzdWx0KTsKIAkJYXNzZXJ0VHJ1ZSgiZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKIAl9CiAKQEAgLTE0MjQsNyArMTQ0NCw5IEBACiAJCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCA0LCAzLCAiYyB6Iik7CiAJCVN0cmluZyByZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwogCi0JCWFzc2VydEVxdWFscyhleHBlY3RlZFN0cmluZywgcmVzdWx0U3RyaW5nKTsKKwkJYm9vbGVhbiByZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOworCisJCWFzc2VydFRydWUoInRleHQgdXBkYXRlIiwgcmVzdWx0KTsKIAkJYXNzZXJ0VHJ1ZSgiZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKIAl9CiAKQEAgLTE0NDMsNyArMTQ2NSw5IEBACiAJCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCAyMCwgMCwgIlEiKTsKIAkJU3RyaW5nIHJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7CiAKLQkJYXNzZXJ0RXF1YWxzKGV4cGVjdGVkU3RyaW5nLCByZXN1bHRTdHJpbmcpOworCQlib29sZWFuIHJlc3VsdCA9IChleHBlY3RlZFN0cmluZy5lcXVhbHMocmVzdWx0U3RyaW5nKSk7CisKKwkJYXNzZXJ0VHJ1ZSgidGV4dCB1cGRhdGUiLCByZXN1bHQpOwogCQlhc3NlcnRUcnVlKCJldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwogCiAJfQpAQCAtMTQ2NSw3ICsxNDg5LDkgQEAKIAkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIDI4LCAxLCAiXHJCT0RZIHtcclxyfSIpOwogCQlTdHJpbmcgcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKIAotCQlhc3NlcnRFcXVhbHMoZXhwZWN0ZWRTdHJpbmcsIHJlc3VsdFN0cmluZyk7CisJCWJvb2xlYW4gcmVzdWx0ID0gKGV4cGVjdGVkU3RyaW5nLmVxdWFscyhyZXN1bHRTdHJpbmcpKTsKKworCQlhc3NlcnRUcnVlKCJ0ZXh0IHVwZGF0ZSIsIHJlc3VsdCk7CiAJCWFzc2VydFRydWUoImV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7CiAJfQogCkBAIC0xNDg2LDcgKzE1MTIsOSBAQAogCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgMzQzLCAxLCAiXHJCT0RZIHtcclxyfSIpOwogCQlTdHJpbmcgcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKIAotCQlhc3NlcnRFcXVhbHMoZXhwZWN0ZWRTdHJpbmcsIHJlc3VsdFN0cmluZyk7CisJCWJvb2xlYW4gcmVzdWx0ID0gKGV4cGVjdGVkU3RyaW5nLmVxdWFscyhyZXN1bHRTdHJpbmcpKTsKKworCQlhc3NlcnRUcnVlKCJ0ZXh0IHVwZGF0ZSIsIHJlc3VsdCk7CiAJCWFzc2VydFRydWUoImV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7CiAJfQogCkBAIC0xNTA2LDcgKzE1MzQsOSBAQAogCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgMCwgOSwgIiIpOwogCQlTdHJpbmcgcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKIAotCQlhc3NlcnRFcXVhbHMoZXhwZWN0ZWRTdHJpbmcsIHJlc3VsdFN0cmluZyk7CisJCWJvb2xlYW4gcmVzdWx0ID0gKGV4cGVjdGVkU3RyaW5nLmVxdWFscyhyZXN1bHRTdHJpbmcpKTsKKworCQlhc3NlcnRUcnVlKCJ0ZXh0IHVwZGF0ZSIsIHJlc3VsdCk7CiAJCWFzc2VydFRydWUoImV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7CiAJfQogCkBAIC0xNTM0LDcgKzE1NjQsOSBAQAogCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgc3RhcnRPZkNoYW5nZXMsIGxlbmd0aFRvUmVwbGFjZSwgY2hhbmdlcyk7CiAJCVN0cmluZyByZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwogCi0JCWFzc2VydEVxdWFscyhleHBlY3RlZFN0cmluZywgcmVzdWx0U3RyaW5nKTsKKwkJYm9vbGVhbiByZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOworCisJCWFzc2VydFRydWUoInRleHQgdXBkYXRlIiwgcmVzdWx0KTsKIAkJYXNzZXJ0VHJ1ZSgiZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKIAl9CiAKQEAgLTE1NTQsNyArMTU4Niw5IEBACiAJCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCAwLCAxNSwgIjxBQkM+PEpLTD48R0hJPiIpOwogCQlTdHJpbmcgcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKIAotCQlhc3NlcnRFcXVhbHMoZXhwZWN0ZWRTdHJpbmcsIHJlc3VsdFN0cmluZyk7CisJCWJvb2xlYW4gcmVzdWx0ID0gKGV4cGVjdGVkU3RyaW5nLmVxdWFscyhyZXN1bHRTdHJpbmcpKTsKKworCQlhc3NlcnRUcnVlKCJ0ZXh0IHVwZGF0ZSIsIHJlc3VsdCk7CiAJCWFzc2VydFRydWUoImV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7CiAJfQogCkBAIC0xNTczLDcgKzE2MDcsOSBAQAogCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgMTAsIDAsICIiKTsKIAkJU3RyaW5nIHJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7CiAKLQkJYXNzZXJ0RXF1YWxzKGV4cGVjdGVkU3RyaW5nLCByZXN1bHRTdHJpbmcpOworCQlib29sZWFuIHJlc3VsdCA9IChleHBlY3RlZFN0cmluZy5lcXVhbHMocmVzdWx0U3RyaW5nKSk7CisKKwkJYXNzZXJ0VHJ1ZSgidGV4dCB1cGRhdGUiLCByZXN1bHQpOwogCQlhc3NlcnRUcnVlKCJldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwogCX0KIApAQCAtMTU5Myw3ICsxNjI5LDkgQEAKIAkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIDAsIDE1LCAiPEFCQz48REVGPjxHSEk+Iik7CiAJCVN0cmluZyByZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwogCi0JCWFzc2VydEVxdWFscyhleHBlY3RlZFN0cmluZywgcmVzdWx0U3RyaW5nKTsKKwkJYm9vbGVhbiByZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOworCisJCWFzc2VydFRydWUoInRleHQgdXBkYXRlIiwgcmVzdWx0KTsKIAkJYXNzZXJ0VHJ1ZSgiZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKIAl9CiAKQEAgLTE2MTMsNyArMTY1MSw5IEBACiAJCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCAzLCAwLCAiPEI+PC9CPiIpOwogCQlTdHJpbmcgcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKIAotCQlhc3NlcnRFcXVhbHMoZXhwZWN0ZWRTdHJpbmcsIHJlc3VsdFN0cmluZyk7CisJCWJvb2xlYW4gcmVzdWx0ID0gKGV4cGVjdGVkU3RyaW5nLmVxdWFscyhyZXN1bHRTdHJpbmcpKTsKKworCQlhc3NlcnRUcnVlKCJ0ZXh0IHVwZGF0ZSIsIHJlc3VsdCk7CiAJCWFzc2VydFRydWUoImV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7CiAJfQogCkBAIC0xNjMzLDcgKzE2NzMsOSBAQAogCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgNiwgMCwgIjxCPjwvQj4iKTsKIAkJU3RyaW5nIHJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7CiAKLQkJYXNzZXJ0RXF1YWxzKGV4cGVjdGVkU3RyaW5nLCByZXN1bHRTdHJpbmcpOworCQlib29sZWFuIHJlc3VsdCA9IChleHBlY3RlZFN0cmluZy5lcXVhbHMocmVzdWx0U3RyaW5nKSk7CisKKwkJYXNzZXJ0VHJ1ZSgidGV4dCB1cGRhdGUiLCByZXN1bHQpOwogCQlhc3NlcnRUcnVlKCJldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwogCX0KIApAQCAtMTY1Myw3ICsxNjk1LDkgQEAKIAkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIDEwLCAwLCAiPFA+Iik7CiAJCVN0cmluZyByZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwogCi0JCWFzc2VydEVxdWFscyhleHBlY3RlZFN0cmluZywgcmVzdWx0U3RyaW5nKTsKKwkJYm9vbGVhbiByZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOworCisJCWFzc2VydFRydWUoInRleHQgdXBkYXRlIiwgcmVzdWx0KTsKIAkJYXNzZXJ0VHJ1ZSgiZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKIAl9CiAKQEAgLTE2ODAsNyArMTcyNCwxMCBAQAogCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgc3RhcnRPZkNoYW5nZXMsIGxlbmd0aFRvUmVwbGFjZSwgY2hhbmdlcyk7CiAJCVN0cmluZyByZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwogCi0JCWFzc2VydEVxdWFscyhleHBlY3RlZFN0cmluZywgcmVzdWx0U3RyaW5nKTsKKwkJYm9vbGVhbiByZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOworCisJCS8vICA/CWFzc2VydFRydWUocmVzdWx0KTsgLy8gJiYgZXZlbnRSZXN1bHQpOworCQlhc3NlcnRUcnVlKCJ0ZXh0IHVwZGF0ZSIsIHJlc3VsdCk7CiAJCWFzc2VydFRydWUoImV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7CiAKIAl9CkBAIC0xNzAyLDcgKzE3NDksMTAgQEAKIAkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIHN0YXJ0T2ZDaGFuZ2VzLCBsZW5ndGhUb1JlcGxhY2UsIGNoYW5nZXMpOwogCQlTdHJpbmcgcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKIAotCQlhc3NlcnRFcXVhbHMoZXhwZWN0ZWRTdHJpbmcsIHJlc3VsdFN0cmluZyk7CisJCWJvb2xlYW4gcmVzdWx0ID0gKGV4cGVjdGVkU3RyaW5nLmVxdWFscyhyZXN1bHRTdHJpbmcpKTsKKworCQkvLwlhc3NlcnRUcnVlKHJlc3VsdCk7IC8vICYmIGV2ZW50UmVzdWx0KTsKKwkJYXNzZXJ0VHJ1ZSgidGV4dCB1cGRhdGUiLCByZXN1bHQpOwogCQlhc3NlcnRUcnVlKCJldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwogCiAJfQpAQCAtMTcyNCw3ICsxNzc0LDEwIEBACiAJCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCBzdGFydE9mQ2hhbmdlcywgbGVuZ3RoVG9SZXBsYWNlLCBjaGFuZ2VzKTsKIAkJU3RyaW5nIHJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7CiAKLQkJYXNzZXJ0RXF1YWxzKGV4cGVjdGVkU3RyaW5nLCByZXN1bHRTdHJpbmcpOworCQlib29sZWFuIHJlc3VsdCA9IChleHBlY3RlZFN0cmluZy5lcXVhbHMocmVzdWx0U3RyaW5nKSk7CisKKwkJLy8JYXNzZXJ0VHJ1ZShyZXN1bHQpOyAvLyAmJiBldmVudFJlc3VsdCk7CisJCWFzc2VydFRydWUoInRleHQgdXBkYXRlIiwgcmVzdWx0KTsKIAkJYXNzZXJ0VHJ1ZSgiZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKIAogCX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvcGFydGl0aW9uaW5nL1Rlc3RTdHJ1Y3R1cmVkUGFydGl0aW9uZXJKU1AuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvcGFydGl0aW9uaW5nL1Rlc3RTdHJ1Y3R1cmVkUGFydGl0aW9uZXJKU1AuamF2YQppbmRleCA0M2ZmMDYyLi43NjBmZjg3IDEwMDY0NAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3BhcnRpdGlvbmluZy9UZXN0U3RydWN0dXJlZFBhcnRpdGlvbmVySlNQLmphdmEKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9wYXJ0aXRpb25pbmcvVGVzdFN0cnVjdHVyZWRQYXJ0aXRpb25lckpTUC5qYXZhCkBAIC00NywxOSArNDcsMTkgQEAKIAlwdWJsaWMgdm9pZCB0ZXN0SlNQMSgpIHRocm93cyBJT0V4Y2VwdGlvbiwgQmFkTG9jYXRpb25FeGNlcHRpb24geyAvLyBEVyAwNS8wMS8yMDAzIEkgbW9kaWZpZWQgdGhpcyB0ZXN0LCBhZnRlciBjcmVhdGluZyB0ZXN0NiwgCiAJCS8vIGFuZCBjaGFuZ2luZyBwYXJ0aW9uZXIgdG8gcGljayB1cCBlbmQgKj4gYXMgcGFydCBvZiBwYWdlIGRpcmVjdGl2ZQogCQkvLyBwYXJ0aXRpb24gKGZvciBoaWdobGlnaHRpbmcgdG8gd29yayByaWdodCkuCi0JCWludCBleHBlY3RlZFBhcnRpdGlvbnMgPSAxMDsKKwkJaW50IGV4cGVjdGVkUGFydGl0aW9ucyA9IDg7CiAJCWludCBuUGFydGl0aW9ucyA9IGRvQ29tcHV0ZVBhcnRpdGlvbmluZ1Rlc3QoInRlc3RmaWxlcy9qc3AvZXhhbXBsZTAxLmpzcCIpOwogCQlhc3NlcnRFcXVhbHMoIndyb25nIG51bWJlciBvZiBwYXJ0aXRpb25zIiwgZXhwZWN0ZWRQYXJ0aXRpb25zLCBuUGFydGl0aW9ucyk7CiAJCWNoZWNrU2VhbXMoKTsKLQkJdmVyaWZ5UGFydGl0aW9uVHlwZXMocGFydGl0aW9ucywgbmV3IFN0cmluZ1tde0lKU1BQYXJ0aXRpb25zLkpTUF9ESVJFQ1RJVkUsIElIVE1MUGFydGl0aW9ucy5IVE1MX0RFRkFVTFQsIElKU1BQYXJ0aXRpb25zLkpTUF9ESVJFQ1RJVkUsIElIVE1MUGFydGl0aW9ucy5IVE1MX0RFRkFVTFQsIElKU1BQYXJ0aXRpb25zLkpTUF9ERUZBVUxULCBJSlNQUGFydGl0aW9ucy5KU1BfQ09OVEVOVF9ERUxJTUlURVIsIElKU1BQYXJ0aXRpb25zLkpTUF9DT05URU5UX0pBVkEsIElKU1BQYXJ0aXRpb25zLkpTUF9DT05URU5UX0RFTElNSVRFUiwgSUpTUFBhcnRpdGlvbnMuSlNQX0RFRkFVTFQsIElIVE1MUGFydGl0aW9ucy5IVE1MX0RFRkFVTFR9KTsKKwkJdmVyaWZ5UGFydGl0aW9uVHlwZXMocGFydGl0aW9ucywgbmV3IFN0cmluZ1tde0lKU1BQYXJ0aXRpb25zLkpTUF9ESVJFQ1RJVkUsIElIVE1MUGFydGl0aW9ucy5IVE1MX0RFRkFVTFQsIElKU1BQYXJ0aXRpb25zLkpTUF9ESVJFQ1RJVkUsIElIVE1MUGFydGl0aW9ucy5IVE1MX0RFRkFVTFQsIElKU1BQYXJ0aXRpb25zLkpTUF9DT05URU5UX0RFTElNSVRFUiwgSUpTUFBhcnRpdGlvbnMuSlNQX0NPTlRFTlRfSkFWQSwgSUpTUFBhcnRpdGlvbnMuSlNQX0NPTlRFTlRfREVMSU1JVEVSLCBJSFRNTFBhcnRpdGlvbnMuSFRNTF9ERUZBVUxUfSk7CiAJfQogCiAJcHVibGljIHZvaWQgdGVzdEpTUDIoKSB0aHJvd3MgSU9FeGNlcHRpb24sIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJaW50IGV4cGVjdGVkUGFydGl0aW9ucyA9IDEzOworCQlpbnQgZXhwZWN0ZWRQYXJ0aXRpb25zID0gMTE7CiAJCWludCBuUGFydGl0aW9ucyA9IGRvQ29tcHV0ZVBhcnRpdGlvbmluZ1Rlc3QoInRlc3RmaWxlcy9qc3AvZXhhbXBsZTAyLmpzcCIpOwogCQlhc3NlcnRFcXVhbHMoIndyb25nIG51bWJlciBvZiBwYXJ0aXRpb25zIiwgZXhwZWN0ZWRQYXJ0aXRpb25zLCBuUGFydGl0aW9ucyk7CiAJCWNoZWNrU2VhbXMoKTsKLQkJdmVyaWZ5UGFydGl0aW9uVHlwZXMocGFydGl0aW9ucywgbmV3IFN0cmluZ1tde0lIVE1MUGFydGl0aW9ucy5IVE1MX0RFRkFVTFQsIElKU1BQYXJ0aXRpb25zLkpTUF9DT05URU5UX0RFTElNSVRFUiwgSUpTUFBhcnRpdGlvbnMuSlNQX0NPTlRFTlRfSkFWQSwgSUpTUFBhcnRpdGlvbnMuSlNQX0NPTlRFTlRfREVMSU1JVEVSLCBJSFRNTFBhcnRpdGlvbnMuSFRNTF9ERUZBVUxULCBJSFRNTFBhcnRpdGlvbnMuSFRNTF9DT01NRU5ULCBJSFRNTFBhcnRpdGlvbnMuSFRNTF9ERUZBVUxULCBJSlNQUGFydGl0aW9ucy5KU1BfREVGQVVMVCwgSUpTUFBhcnRpdGlvbnMuSlNQX0NPTlRFTlRfREVMSU1JVEVSLCBJSlNQUGFydGl0aW9ucy5KU1BfQ09OVEVOVF9KQVZBLCBJSlNQUGFydGl0aW9ucy5KU1BfQ09OVEVOVF9ERUxJTUlURVIsIElKU1BQYXJ0aXRpb25zLkpTUF9ERUZBVUxULCBJSFRNTFBhcnRpdGlvbnMuSFRNTF9ERUZBVUxUfSk7CisJCXZlcmlmeVBhcnRpdGlvblR5cGVzKHBhcnRpdGlvbnMsIG5ldyBTdHJpbmdbXXtJSFRNTFBhcnRpdGlvbnMuSFRNTF9ERUZBVUxULCBJSlNQUGFydGl0aW9ucy5KU1BfQ09OVEVOVF9ERUxJTUlURVIsIElKU1BQYXJ0aXRpb25zLkpTUF9DT05URU5UX0pBVkEsIElKU1BQYXJ0aXRpb25zLkpTUF9DT05URU5UX0RFTElNSVRFUiwgSUhUTUxQYXJ0aXRpb25zLkhUTUxfREVGQVVMVCwgSUhUTUxQYXJ0aXRpb25zLkhUTUxfQ09NTUVOVCwgSUhUTUxQYXJ0aXRpb25zLkhUTUxfREVGQVVMVCwgSUpTUFBhcnRpdGlvbnMuSlNQX0NPTlRFTlRfREVMSU1JVEVSLCBJSlNQUGFydGl0aW9ucy5KU1BfQ09OVEVOVF9KQVZBLCBJSlNQUGFydGl0aW9ucy5KU1BfQ09OVEVOVF9ERUxJTUlURVIsIElIVE1MUGFydGl0aW9ucy5IVE1MX0RFRkFVTFR9KTsKIAl9CiAKIAlwdWJsaWMgdm9pZCB0ZXN0SlNQMygpIHRocm93cyBJT0V4Y2VwdGlvbiwgQmFkTG9jYXRpb25FeGNlcHRpb24gewpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy91dGlsL1Byb2plY3RVbnppcFV0aWxpdHkuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvdXRpbC9Qcm9qZWN0VW56aXBVdGlsaXR5LmphdmEKaW5kZXggZTYzNjEwOS4uODVkNDhjOSAxMDA2NDQKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy91dGlsL1Byb2plY3RVbnppcFV0aWxpdHkuamF2YQorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3V0aWwvUHJvamVjdFVuemlwVXRpbGl0eS5qYXZhCkBAIC00OCw4ICs0OCw2IEBACiAgKiBAYXV0aG9yIHBhdmVyeQogICovCiBwdWJsaWMgY2xhc3MgUHJvamVjdFVuemlwVXRpbGl0eSB7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgWklQX0VYVEVOU0lPTiA9ICIuemlwIjsKLQkKIAljbGFzcyBXb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IgaW1wbGVtZW50cyBJUHJvZ3Jlc3NNb25pdG9yIHsKIAkJcHJpdmF0ZSBib29sZWFuIGZpbmlzaGVkID0gZmFsc2U7CiAKQEAgLTE0Myw3ICsxNDEsNyBAQAogCS8vIHNwZWNpZnkgYnVmZmVyIHNpemUgZm9yIGV4dHJhY3Rpb24KIAlzdGF0aWMgZmluYWwgaW50IEJVRkZFUiA9IDIwNDg7CiAKLQlwdWJsaWMgdm9pZCB1bnppcEFuZEltcG9ydChGaWxlIGluRmlsZSwgU3RyaW5nIGRlc3RpbmF0aW9uRGlyZWN0b3J5KSB0aHJvd3MgRXhjZXB0aW9uIHsKKwlwdWJsaWMgdm9pZCB1bnppcEFuZEltcG9ydChGaWxlIGluRmlsZSwgU3RyaW5nIGRlc3RpbmF0aW9uRGlyZWN0b3J5KSB7CiAJCXRyeSB7CiAJCQkvLyBTcGVjaWZ5IGZpbGUgdG8gZGVjb21wcmVzcwogCQkJLy8gKG5zZCkgcmVkdW5kYW50PwpAQCAtMjE4LDggKzIxNiwxMyBAQAogCQkJLy8gZml4ZXMgd29ya3NwYWNlIG1ldGFkYXRhIGZvciB0aGUgcHJvamVjdAogCQkJLy8gZm9yIGNsZWFuIHN0YXJ0dXAgbmV4dCBydW4KIAkJCWlmIChjdXJyZW50UHJvamVjdCAhPSBudWxsKSB7Ci0JCQkJUGF0aCBwcm9qZWN0TG9jYXRpb24gPSBuZXcgUGF0aChQbGF0Zm9ybS5nZXRMb2NhdGlvbigpLnRvT1NTdHJpbmcoKSk7Ci0JCQkJY3JlYXRlUHJvamVjdChjdXJyZW50UHJvamVjdCwgcHJvamVjdExvY2F0aW9uLCBuZXcgV29ya3NwYWNlUHJvZ3Jlc3NNb25pdG9yKCkpOworCQkJCXRyeSB7CisJCQkJCVBhdGggcHJvamVjdExvY2F0aW9uID0gbmV3IFBhdGgoUGxhdGZvcm0uZ2V0TG9jYXRpb24oKS50b09TU3RyaW5nKCkpOworCQkJCQljcmVhdGVQcm9qZWN0KGN1cnJlbnRQcm9qZWN0LCBwcm9qZWN0TG9jYXRpb24sIG5ldyBXb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IoKSk7CisJCQkJfQorCQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGNleCkgeworCQkJCQljZXgucHJpbnRTdGFja1RyYWNlKCk7CisJCQkJfQogCQkJfQogCQl9CiAJCWNhdGNoIChJT0V4Y2VwdGlvbiBpb2UpIHsKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvdmFsaWRhdGlvbi9UZXN0SlNQTWFya3VwVmFsaWRhdG9yLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3ZhbGlkYXRpb24vVGVzdEpTUE1hcmt1cFZhbGlkYXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxNGZhMmEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3ZhbGlkYXRpb24vVGVzdEpTUE1hcmt1cFZhbGlkYXRvci5qYXZhCkBAIC0wLDAgKzEsMTExIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCisgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyAqCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy52YWxpZGF0aW9uOworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOworCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5SZWdpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS5pbnRlcm5hbC52YWxpZGF0aW9uLkpTUE1hcmt1cFZhbGlkYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwucmVjb25jaWxlLnZhbGlkYXRvci5JbmNyZW1lbnRhbFJlcG9ydGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLmludGVybmFsLnByb3Zpc2lvbmFsLmNvcmUuSVJlcG9ydGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkuaW50ZXJuYWwudmFsaWRhdGlvbi5NYXJrdXBWYWxpZGF0b3I7CisKK3B1YmxpYyBjbGFzcyBUZXN0SlNQTWFya3VwVmFsaWRhdG9yIGV4dGVuZHMgVGVzdENhc2UgeworCXByaXZhdGUgTWFya3VwVmFsaWRhdG9yIGZWYWxpZGF0b3I7CisJcHJpdmF0ZSBJUmVwb3J0ZXIgZlJlcG9ydGVyOworCXByaXZhdGUgSVN0cnVjdHVyZWREb2N1bWVudCBmRG9jdW1lbnQ7CisKKwkvKioKKwkgKiBWYWxpZGF0ZXMgZG9jdW1lbnQKKwkgKiAKKwkgKiBAcGFyYW0gY29udGVudHMKKwkgKiAgICAgICAgICAgIGNvbnRlbnRzIHRvIHNldCBpbiBkb2N1bWVudAorCSAqIEByZXR1cm4gdHJ1ZSBpZiB0aGVyZSB3YXMgYSB2YWxpZGF0aW9uIGVycm9yIGZhbHNlIG90aGVyd2lzZQorCSAqLworCXByaXZhdGUgYm9vbGVhbiB2YWxpZGF0ZUVycm9yKFN0cmluZyBjb250ZW50cykgeworCQlmRG9jdW1lbnQuc2V0KGNvbnRlbnRzKTsKKwkJZlZhbGlkYXRvci52YWxpZGF0ZShuZXcgUmVnaW9uKDAsIGZEb2N1bWVudC5nZXRMZW5ndGgoKSksIG51bGwsIGZSZXBvcnRlcik7CisJCXJldHVybiBmUmVwb3J0ZXIuZ2V0TWVzc2FnZXMoKS5pc0VtcHR5KCk7CisJfQorCisJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJLy8ganVzdCBjcmVhdGUgb25jZQorCQlpZiAoZlZhbGlkYXRvciA9PSBudWxsKQorCQkJZlZhbGlkYXRvciA9IG5ldyBKU1BNYXJrdXBWYWxpZGF0b3IoKTsKKwkJaWYgKGZSZXBvcnRlciA9PSBudWxsKQorCQkJZlJlcG9ydGVyID0gbmV3IEluY3JlbWVudGFsUmVwb3J0ZXIobnVsbCk7CisJCWlmIChmRG9jdW1lbnQgPT0gbnVsbCkKKwkJCWZEb2N1bWVudCA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuY3JlYXRlU3RydWN0dXJlZERvY3VtZW50Rm9yKCJvbmZpcmUueG1sIiwgIiIsIG51bGwpOworCisJCWZWYWxpZGF0b3IuY29ubmVjdChmRG9jdW1lbnQpOworCX0KKworCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCWZWYWxpZGF0b3IuZGlzY29ubmVjdChmRG9jdW1lbnQpOworCX0KKworCXB1YmxpYyB2b2lkIHRlc3RBdHRyaWJ1dGVzSW5FbmRUYWcoKSB7CisJCS8vIHRlc3QgZm9yIGVycm9yCisJCWFzc2VydFRydWUoIlNob3VsZCBnZXQgYXR0cmlidXRlcyBpbiBlbmQgdGFnIGVycm9yIiwgIXZhbGlkYXRlRXJyb3IoIjxzdG9wPjwvc3RvcCBkcm9wPVwicm9sbFwiPiIpKTsKKworCQkvLyB0ZXN0IGZvciBubyBlcnJvcgorCQlhc3NlcnRUcnVlKCJTaG91bGQgbm90IGdldCBhdHRyaWJ1dGVzIGluIGVuZCB0YWcgZXJyb3IiLCB2YWxpZGF0ZUVycm9yKCI8c3RvcD48L3N0b3A+IikpOworCX0KKworCXB1YmxpYyB2b2lkIHRlc3RDbG9zaW5nQnJhY2tldCgpIHsKKwkJLy8gdGVzdCBmb3IgZXJyb3IKKwkJYXNzZXJ0VHJ1ZSgiU2hvdWxkIGdldCBjbG9zaW5nIGJyYWNrZXQgZXJyb3IiLCAhdmFsaWRhdGVFcnJvcigiPHN0b3AgPC9zdG9wPiIpKTsKKworCQkvLyB0ZXN0IGZvciBubyBlcnJvcgorCQlhc3NlcnRUcnVlKCJTaG91bGQgbm90IGdldCBjbG9zaW5nIGJyYWNrZXQgZXJyb3IiLCB2YWxpZGF0ZUVycm9yKCI8c3RvcD48L3N0b3A+IikpOworCX0KKworCXB1YmxpYyB2b2lkIHRlc3RFbXB0eVRhZygpIHsKKwkJLy8gdGVzdCBmb3IgZXJyb3IKKwkJYXNzZXJ0VHJ1ZSgiU2hvdWxkIGdldCBlbXB0eSB0YWcgZXJyb3IiLCAhdmFsaWRhdGVFcnJvcigiPD4iKSk7CisKKwkJLy8gdGVzdCBmb3Igbm8gZXJyb3IKKwkJYXNzZXJ0VHJ1ZSgiU2hvdWxkIG5vdCBnZXQgZW1wdHkgdGFnIGVycm9yIiwgdmFsaWRhdGVFcnJvcigiPHN0b3A+PC9zdG9wPiIpKTsKKwl9CisKKwlwdWJsaWMgdm9pZCB0ZXN0QXR0cmlidXRlVmFsdWUoKSB7CisJCS8vIHRlc3QgZm9yIGVycm9yCisJCWFzc2VydFRydWUoIlNob3VsZCBnZXQgYXR0cmlidXRlIG1pc3NpbmcgdmFsdWUgZXJyb3IiLCAhdmFsaWRhdGVFcnJvcigiPHN0b3AgZHJvcD0+PC9zdG9wPiIpKTsKKworCQkvLyB0ZXN0IGZvciBubyBlcnJvcgorCQlhc3NlcnRUcnVlKCJTaG91bGQgbm90IGdldCBhdHRyaWJ1dGUgaGFzIG5vIHZhbHVlIGVycm9yIiwgdmFsaWRhdGVFcnJvcigiPHN0b3AgZHJvcD48L3N0b3A+IikpOworCQlhc3NlcnRUcnVlKCJTaG91bGQgbm90IGdldCBhdHRyaWJ1dGUgbWlzc2luZyB2YWx1ZSBlcnJvciIsIHZhbGlkYXRlRXJyb3IoIjxzdG9wIGRyb3A9XCJyb2xsXCI+PC9zdG9wPiIpKTsKKwl9CisKKwlwdWJsaWMgdm9pZCB0ZXN0U3BhY2VCZWZvcmVOYW1lKCkgeworCQkvLyB0ZXN0IGZvciBlcnJvcgorCQlhc3NlcnRUcnVlKCJTaG91bGQgZ2V0IHRhZyBoYXMgc3BhY2UgYmVmb3JlIG5hbWUgZXJyb3IiLCAhdmFsaWRhdGVFcnJvcigiPCAgICBzdG9wPjwvc3RvcD4iKSk7CisKKwkJLy8gdGVzdCBmb3Igbm8gZXJyb3IKKwkJYXNzZXJ0VHJ1ZSgiU2hvdWxkIG5vdCBnZXQgdGFnIGhhcyBzcGFjZSBiZWZvcmUgbmFtZSBlcnJvciIsIHZhbGlkYXRlRXJyb3IoIjxzdG9wPjwvc3RvcD4iKSk7CisJfQorCisJcHVibGljIHZvaWQgdGVzdFF1b3Rlc0ZvckF0dHJpYnV0ZVZhbHVlcygpIHsKKwkJLy8gdGVzdCBmb3IgZXJyb3IKKwkJYXNzZXJ0VHJ1ZSgiU2hvdWxkIGdldCBtaXNzaW5nIGVuZCBxdW90ZSBlcnJvciIsICF2YWxpZGF0ZUVycm9yKCI8c3RvcCBkcm9wPVwiPjwvc3RvcD4iKSk7CisJCWFzc2VydFRydWUoIlNob3VsZCBnZXQgbWlzc2luZyBlbmQgcXVvdGUgZXJyb3IiLCAhdmFsaWRhdGVFcnJvcigiPHN0b3AgZHJvcD1cInJvbGw+PC9zdG9wPiIpKTsKKwkJYXNzZXJ0VHJ1ZSgiU2hvdWxkIGdldCBtaXNzaW5nIGVuZCBxdW90ZSBlcnJvciIsICF2YWxpZGF0ZUVycm9yKCI8c3RvcCBkcm9wPVwnPjwvc3RvcD4iKSk7CisKKwkJLy8gdGVzdCBmb3Igbm8gZXJyb3IKKwkJYXNzZXJ0VHJ1ZSgiU2hvdWxkIG5vdCBnZXQgbWlzc2luZyBxdW90ZXMgZXJyb3IiLCB2YWxpZGF0ZUVycm9yKCI8c3RvcCBkcm9wPXJvbGw+PC9zdG9wPiIpKTsKKwkJYXNzZXJ0VHJ1ZSgiU2hvdWxkIG5vdCBnZXQgbWlzc2luZyBlbmQgcXVvdGUgZXJyb3IiLCB2YWxpZGF0ZUVycm9yKCI8c3RvcCBkcm9wPVwiXCI+PC9zdG9wPiIpKTsKKwkJYXNzZXJ0VHJ1ZSgiU2hvdWxkIG5vdCBnZXQgbWlzc2luZyBlbmQgcXVvdGUgZXJyb3IiLCB2YWxpZGF0ZUVycm9yKCI8c3RvcCBkcm9wPVwicm9sbFwiPjwvc3RvcD4iKSk7CisJCWFzc2VydFRydWUoIlNob3VsZCBub3QgZ2V0IG1pc3NpbmcgZW5kIHF1b3RlIGVycm9yIiwgdmFsaWRhdGVFcnJvcigiPHN0b3AgZHJvcD1cJ1wnPjwvc3RvcD4iKSk7CisJCWFzc2VydFRydWUoIlNob3VsZCBub3QgZ2V0IG1pc3NpbmcgcXVvdGVzIGVycm9yIiwgdmFsaWRhdGVFcnJvcigiPHN0b3AgZHJvcD1cJ3JvbGxcJz48L3N0b3A+IikpOworCX0KK30KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGV4dC50ZXN0cy9vcmcvZWNsaXBzZS90ZXh0L3Rlc3RzL0FjY2Vzc29yLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3RleHQudGVzdHMvb3JnL2VjbGlwc2UvdGV4dC90ZXN0cy9BY2Nlc3Nvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MWU4NjQ3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGV4dC50ZXN0cy9vcmcvZWNsaXBzZS90ZXh0L3Rlc3RzL0FjY2Vzc29yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMzIgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS50ZXh0LnRlc3RzOwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLQotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0LkNvbnN0cnVjdG9yOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0LkZpZWxkOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lkludm9jYXRpb25UYXJnZXRFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkFzc2VydDsKLQotCi0vKioKLSAqIEhlbHBlciBjbGFzcyBmb3IgYWNjZXNzaW5nIGNsYXNzZXMgYW5kIG1lbWJlcnMgd2hpY2ggY2Fubm90Ci0gKiBiZSBhY2Nlc3NlZCB1c2luZyBzdGFuZGFyZCBKYXZhIGFjY2VzcyBjb250cm9sIGxpa2UgcHJpdmF0ZQotICogb3IgcGFja2FnZSB2aXNpYmxlIGVsZW1lbnRzLgotICoKLSAqIEBzaW5jZSAzLjEKLSAqLwotcHVibGljIGNsYXNzIEFjY2Vzc29yIHsKLQotCS8qKiBUaGUgY2xhc3MgdG8gYWNjZXNzLiAqLwotCXByaXZhdGUgQ2xhc3MgZkNsYXNzOwotCS8qKiBUaGUgaW5zdGFuY2UgdG8gYWNjZXNzLiAqLwotCXByaXZhdGUgT2JqZWN0IGZJbnN0YW5jZTsKLQotCS8qKgotCSAqIENyZWF0ZXMgYW4gYWNjZXNzb3IgZm9yIHRoZSBnaXZlbiA8Y29kZT5pbnN0YW5jZTwvY29kZT4gYW5kCi0JICogPGNvZGU+Y2xhc3M8L2NvZGU+LiBPbmx5IG5vbi1pbmhlcml0ZWQgbWVtYmVycyB0aGF0IHBhcnRpY3VsYXIKLQkgKiA8Y29kZT5jbGFzczwvY29kZT4gY2FuIGJlIGFjY2Vzc2VkLgotCSAqCi0JICogQHBhcmFtIGluc3RhbmNlIHRoZSBpbnN0YW5jZQotCSAqIEBwYXJhbSBjbGF6eiB0aGUgY2xhc3MKLQkgKi8KLQlwdWJsaWMgQWNjZXNzb3IoT2JqZWN0IGluc3RhbmNlLCBDbGFzcyBjbGF6eikgewotCQlvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQXNzZXJ0LmlzTm90TnVsbChpbnN0YW5jZSk7Ci0JCUFzc2VydC5pc05vdE51bGwoY2xhenopOwotCQlmSW5zdGFuY2U9IGluc3RhbmNlOwotCQlmQ2xhc3M9IGNsYXp6OwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYW4gYWNjZXNzb3IgZm9yIHRoZSBnaXZlbiA8Y29kZT5pbnN0YW5jZTwvY29kZT4gYW5kCi0JICogPGNvZGU+Y2xhc3M8L2NvZGU+LiBPbmx5IG5vbi1pbmhlcml0ZWQgbWVtYmVycyB0aGF0IHBhcnRpY3VsYXIKLQkgKiA8Y29kZT5jbGFzczwvY29kZT4gY2FuIGJlIGFjY2Vzc2VkLgotCSAqCi0JICogQHBhcmFtIGluc3RhbmNlIHRoZSBpbnN0YW5jZQotCSAqIEBwYXJhbSBjbGFzc05hbWUgdGhlIG5hbWUgb2YgdGhlIGNsYXNzCi0JICogQHBhcmFtIGNsYXNzTG9hZGVyIHRoZSBjbGFzcyBsb2FkZXIgdG8gdXNlIGkuZS4gPGNvZGU+Z2V0Q2xhc3MoKS5nZXRDbGFzc0xvYWRlcigpPC9jb2RlPgotCSAqLwotCXB1YmxpYyBBY2Nlc3NvcihPYmplY3QgaW5zdGFuY2UsIFN0cmluZyBjbGFzc05hbWUsIENsYXNzTG9hZGVyIGNsYXNzTG9hZGVyKSB7Ci0JCUFzc2VydC5pc05vdE51bGwoaW5zdGFuY2UpOwotCQlBc3NlcnQuaXNOb3ROdWxsKGNsYXNzTmFtZSk7Ci0JCUFzc2VydC5pc05vdE51bGwoY2xhc3NMb2FkZXIpOwotCQlmSW5zdGFuY2U9IGluc3RhbmNlOwotCQl0cnkgewotCQkJZkNsYXNzPSBDbGFzcy5mb3JOYW1lKGNsYXNzTmFtZSwgdHJ1ZSwgY2xhc3NMb2FkZXIpOwotCQl9IGNhdGNoIChDbGFzc05vdEZvdW5kRXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoKTsKLQkJfSBjYXRjaCAoRXhjZXB0aW9uSW5Jbml0aWFsaXplckVycm9yIGUpIHsKLQkJCWZhaWwoKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYW4gYWNjZXNzb3IgZm9yIHRoZSBnaXZlbiBjbGFzcy4KLQkgKiA8cD4KLQkgKiBJbiBvcmRlciB0byBnZXQgdGhlIHR5cGUgaW5mb3JtYXRpb24gZnJvbSB0aGUgZ2l2ZW4KLQkgKiBhcmd1bWVudHMgdGhleSBtdXN0IGFsbCBiZSBpbnN0YW5jZW9mIE9iamVjdC4gVXNlCi0JICoge0BsaW5rICNBY2Nlc3NvcihTdHJpbmcsIENsYXNzTG9hZGVyLCBDbGFzc1tdLCBPYmplY3RbXSl9IGlmIHRoaXMKLQkgKiBpcyBub3QgdGhlIGNhc2UuPC9wPgotCSAqCi0JICogQHBhcmFtIGNsYXNzTmFtZSB0aGUgbmFtZSBvZiB0aGUgY2xhc3MKLQkgKiBAcGFyYW0gY2xhc3NMb2FkZXIgdGhlIGNsYXNzIGxvYWRlciB0byB1c2UgaS5lLiA8Y29kZT5nZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCk8L2NvZGU+Ci0JICogQHBhcmFtIGNvbnN0cnVjdG9yQXJncyB0aGUgY29uc3RydWN0b3IgYXJndW1lbnRzIHdoaWNoIG11c3QgYWxsIGJlIGluc3RhbmNlIG9mIE9iamVjdAotCSAqLwotCXB1YmxpYyBBY2Nlc3NvcihTdHJpbmcgY2xhc3NOYW1lLCBDbGFzc0xvYWRlciBjbGFzc0xvYWRlciwgT2JqZWN0W10gY29uc3RydWN0b3JBcmdzKSB7Ci0JCXRoaXMoY2xhc3NOYW1lLCBjbGFzc0xvYWRlciwgZ2V0VHlwZXMoY29uc3RydWN0b3JBcmdzKSwgY29uc3RydWN0b3JBcmdzKTsKLQl9Ci0KLQkvKioKLQkgKiBDcmVhdGVzIGFuIGFjY2Vzc29yIGZvciB0aGUgZ2l2ZW4gY2xhc3MuCi0JICoKLQkgKiBAcGFyYW0gY2xhc3NOYW1lIHRoZSBuYW1lIG9mIHRoZSBjbGFzcwotCSAqIEBwYXJhbSBjbGFzc0xvYWRlciB0aGUgY2xhc3MgbG9hZGVyIHRvIHVzZSBpLmUuIDxjb2RlPmdldENsYXNzKCkuZ2V0Q2xhc3NMb2FkZXIoKTwvY29kZT4KLQkgKiBAcGFyYW0gY29uc3RydWN0b3JUeXBlcyB0aGUgdHlwZXMgb2YgdGhlIGNvbnN0cnVjdG9yIGFyZ3VtZW50cwotCSAqIEBwYXJhbSBjb25zdHJ1Y3RvckFyZ3MgdGhlIGNvbnN0cnVjdG9yIGFyZ3VtZW50cwotCSAqLwotCXB1YmxpYyBBY2Nlc3NvcihTdHJpbmcgY2xhc3NOYW1lLCBDbGFzc0xvYWRlciBjbGFzc0xvYWRlciwgQ2xhc3NbXSBjb25zdHJ1Y3RvclR5cGVzLCBPYmplY3RbXSBjb25zdHJ1Y3RvckFyZ3MpIHsKLQkJdHJ5IHsKLQkJCWZDbGFzcz0gQ2xhc3MuZm9yTmFtZShjbGFzc05hbWUsIHRydWUsIGNsYXNzTG9hZGVyKTsKLQkJfSBjYXRjaCAoQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbkluSW5pdGlhbGl6ZXJFcnJvciBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0KLQkJQ29uc3RydWN0b3IgY29uc3RydWN0b3I9IG51bGw7Ci0JCXRyeSB7Ci0JCQljb25zdHJ1Y3Rvcj0gZkNsYXNzLmdldERlY2xhcmVkQ29uc3RydWN0b3IoY29uc3RydWN0b3JUeXBlcyk7Ci0JCX0gY2F0Y2ggKFNlY3VyaXR5RXhjZXB0aW9uIGUyKSB7Ci0JCQlmYWlsKCk7Ci0JCX0gY2F0Y2ggKE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBlMikgewotCQkJZmFpbCgpOwotCQl9Ci0JCUFzc2VydC5pc05vdE51bGwoY29uc3RydWN0b3IpOwotCQljb25zdHJ1Y3Rvci5zZXRBY2Nlc3NpYmxlKHRydWUpOwotCQl0cnkgewotCQkJZkluc3RhbmNlPSBjb25zdHJ1Y3Rvci5uZXdJbnN0YW5jZShjb25zdHJ1Y3RvckFyZ3MpOwotCQl9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgewotCQkJZmFpbCgpOwotCQl9IGNhdGNoIChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoKTsKLQkJfSBjYXRjaCAoSW5zdGFudGlhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0gY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gZSkgewotCQkJZmFpbCgpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlcyBhbiBhY2Nlc3NvciBmb3IgdGhlIGdpdmVuIGNsYXNzLgotCSAqIDxwPgotCSAqIFRoaXMgY29uc3RydWN0b3IgaXMgdXNlZCB0byBhY2Nlc3Mgc3RhdGljIHN0dWZmLgotCSAqIDwvcD4KLQkgKgotCSAqIEBwYXJhbSBjbGFzc05hbWUgdGhlIG5hbWUgb2YgdGhlIGNsYXNzCi0JICogQHBhcmFtIGNsYXNzTG9hZGVyIHRoZSBjbGFzcyBsb2FkZXIgdG8gdXNlIGkuZS4gPGNvZGU+Z2V0Q2xhc3MoKS5nZXRDbGFzc0xvYWRlcigpPC9jb2RlPgotCSAqLwotCXB1YmxpYyBBY2Nlc3NvcihTdHJpbmcgY2xhc3NOYW1lLCBDbGFzc0xvYWRlciBjbGFzc0xvYWRlcikgewotCQl0cnkgewotCQkJZkNsYXNzPSBDbGFzcy5mb3JOYW1lKGNsYXNzTmFtZSwgdHJ1ZSwgY2xhc3NMb2FkZXIpOwotCQl9IGNhdGNoIChDbGFzc05vdEZvdW5kRXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoKTsKLQkJfSBjYXRjaCAoRXhjZXB0aW9uSW5Jbml0aWFsaXplckVycm9yIGUpIHsKLQkJCWZhaWwoKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIEludm9rZXMgdGhlIG1ldGhvZCB3aXRoIHRoZSBnaXZlbiBtZXRob2QgbmFtZSBhbmQgYXJndW1lbnRzLgotCSAqIDxwPgotCSAqIEluIG9yZGVyIHRvIGdldCB0aGUgdHlwZSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBnaXZlbgotCSAqIGFyZ3VtZW50cyBhbGwgdGhvc2UgYXJndW1lbnRzIG11c3QgYmUgaW5zdGFuY2Ugb2YgT2JqZWN0LiBVc2UKLQkgKiB7QGxpbmsgI2ludm9rZShTdHJpbmcsIENsYXNzW10sIE9iamVjdFtdKX0gaWYgdGhpcwotCSAqIGlzIG5vdCB0aGUgY2FzZS48L3A+Ci0JICoKLQkgKiBAcGFyYW0gbWV0aG9kTmFtZSB0aGUgbWV0aG9kIG5hbWUKLQkgKiBAcGFyYW0gYXJndW1lbnRzIHRoZSBtZXRob2QgYXJndW1lbnRzIHdoaWNoIG11c3QgYWxsIGJlIGluc3RhbmNlIG9mIE9iamVjdAotCSAqIEByZXR1cm4gdGhlIG1ldGhvZCByZXR1cm4gdmFsdWUKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGludm9rZShTdHJpbmcgbWV0aG9kTmFtZSwgT2JqZWN0W10gYXJndW1lbnRzKSB7Ci0JCXJldHVybiBpbnZva2UobWV0aG9kTmFtZSwgZ2V0VHlwZXMoYXJndW1lbnRzKSwgYXJndW1lbnRzKTsKLQl9Ci0KLQkvKioKLQkgKiBJbnZva2VzIHRoZSBtZXRob2Qgd2l0aCB0aGUgZ2l2ZW4gbWV0aG9kIG5hbWUgYW5kIGFyZ3VtZW50cy4KLQkgKgotCSAqIEBwYXJhbSBtZXRob2ROYW1lIHRoZSBtZXRob2QgbmFtZQotCSAqIEBwYXJhbSB0eXBlcyB0aGUgYXJndW1lbnQgdHlwZXMKLQkgKiBAcGFyYW0gYXJndW1lbnRzIHRoZSBtZXRob2QgYXJndW1lbnRzCi0JICogQHJldHVybiB0aGUgbWV0aG9kIHJldHVybiB2YWx1ZQotCSAqLwotCXB1YmxpYyBPYmplY3QgaW52b2tlKFN0cmluZyBtZXRob2ROYW1lLCBDbGFzc1tdIHR5cGVzLCBPYmplY3RbXSBhcmd1bWVudHMpIHsKLQkJTWV0aG9kIG1ldGhvZD0gbnVsbDsKLQkJdHJ5IHsKLQkJCW1ldGhvZD0gZkNsYXNzLmdldERlY2xhcmVkTWV0aG9kKG1ldGhvZE5hbWUsIHR5cGVzKTsKLQkJfSBjYXRjaCAoU2VjdXJpdHlFeGNlcHRpb24gZSkgewotCQkJZmFpbCgpOwotCQl9IGNhdGNoIChOb1N1Y2hNZXRob2RFeGNlcHRpb24gZXgpIHsKLQkJCWZhaWwoKTsKLQkJfQotCQlBc3NlcnQuaXNOb3ROdWxsKG1ldGhvZCk7Ci0JCW1ldGhvZC5zZXRBY2Nlc3NpYmxlKHRydWUpOwotCQl0cnkgewotCQkJcmV0dXJuIG1ldGhvZC5pbnZva2UoZkluc3RhbmNlLCBhcmd1bWVudHMpOwotCQl9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgewotCQkJZmFpbCgpOwotCQl9IGNhdGNoIChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoKTsKLQkJfSBjYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JLyoqCi0JICogQXNzaWducyB0aGUgZ2l2ZW4gdmFsdWUgdG8gdGhlIGZpZWxkIHdpdGggdGhlIGdpdmVuIG5hbWUuCi0JICoKLQkgKiBAcGFyYW0gZmllbGROYW1lIHRoZSBmaWVsZCBuYW1lCi0JICogQHBhcmFtIHZhbHVlIHRoZSB2YWx1ZSB0byBhc3NpZ24gdG8gdGhlIGZpZWxkCi0JICovCi0JcHVibGljIHZvaWQgc2V0KFN0cmluZyBmaWVsZE5hbWUsIE9iamVjdCB2YWx1ZSkgewotCQlGaWVsZCBmaWVsZD0gZ2V0RmllbGQoZmllbGROYW1lKTsKLQkJdHJ5IHsKLQkJCWZpZWxkLnNldChmSW5zdGFuY2UsIHZhbHVlKTsKLQkJfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoKTsKLQkJfSBjYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBBc3NpZ25zIHRoZSBnaXZlbiB2YWx1ZSB0byB0aGUgZmllbGQgd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KLQkgKgotCSAqIEBwYXJhbSBmaWVsZE5hbWUgdGhlIGZpZWxkIG5hbWUKLQkgKiBAcGFyYW0gdmFsdWUgdGhlIHZhbHVlIHRvIGFzc2lnbiB0byB0aGUgZmllbGQKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXQoU3RyaW5nIGZpZWxkTmFtZSwgYm9vbGVhbiB2YWx1ZSkgewotCQlGaWVsZCBmaWVsZD0gZ2V0RmllbGQoZmllbGROYW1lKTsKLQkJdHJ5IHsKLQkJCWZpZWxkLnNldEJvb2xlYW4oZkluc3RhbmNlLCB2YWx1ZSk7Ci0JCX0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0gY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gZSkgewotCQkJZmFpbCgpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQXNzaWducyB0aGUgZ2l2ZW4gdmFsdWUgdG8gdGhlIGZpZWxkIHdpdGggdGhlIGdpdmVuIG5hbWUuCi0JICoKLQkgKiBAcGFyYW0gZmllbGROYW1lIHRoZSBmaWVsZCBuYW1lCi0JICogQHBhcmFtIHZhbHVlIHRoZSB2YWx1ZSB0byBhc3NpZ24gdG8gdGhlIGZpZWxkCi0JICovCi0JcHVibGljIHZvaWQgc2V0KFN0cmluZyBmaWVsZE5hbWUsIGludCB2YWx1ZSkgewotCQlGaWVsZCBmaWVsZD0gZ2V0RmllbGQoZmllbGROYW1lKTsKLQkJdHJ5IHsKLQkJCWZpZWxkLnNldEludChmSW5zdGFuY2UsIHZhbHVlKTsKLQkJfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoKTsKLQkJfSBjYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgZmllbGQgd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KLQkgKgotCSAqIEBwYXJhbSBmaWVsZE5hbWUgdGhlIGZpZWxkIG5hbWUKLQkgKiBAcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgZmllbGQKLQkgKi8KLQlwdWJsaWMgT2JqZWN0IGdldChTdHJpbmcgZmllbGROYW1lKSB7Ci0JCUZpZWxkIGZpZWxkPSBnZXRGaWVsZChmaWVsZE5hbWUpOwotCQl0cnkgewotCQkJcmV0dXJuIGZpZWxkLmdldChmSW5zdGFuY2UpOwotCQl9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgewotCQkJZmFpbCgpOwotCQl9IGNhdGNoIChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoKTsKLQkJfQotCQkvLyBVbnJlYWNoYWJsZSBjb2RlCi0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBmaWVsZCB3aXRoIHRoZSBnaXZlbiBuYW1lLgotCSAqCi0JICogQHBhcmFtIGZpZWxkTmFtZSB0aGUgZmllbGQgbmFtZQotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBmaWVsZAotCSAqLwotCXB1YmxpYyBib29sZWFuIGdldEJvb2xlYW4oU3RyaW5nIGZpZWxkTmFtZSkgewotCQlGaWVsZCBmaWVsZD0gZ2V0RmllbGQoZmllbGROYW1lKTsKLQkJdHJ5IHsKLQkJCXJldHVybiBmaWVsZC5nZXRCb29sZWFuKGZJbnN0YW5jZSk7Ci0JCX0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0gY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gZSkgewotCQkJZmFpbCgpOwotCQl9Ci0JCS8vIFVucmVhY2hhYmxlIGNvZGUKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBmaWVsZCB3aXRoIHRoZSBnaXZlbiBuYW1lLgotCSAqCi0JICogQHBhcmFtIGZpZWxkTmFtZSB0aGUgZmllbGQgbmFtZQotCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBmaWVsZAotCSAqLwotCXB1YmxpYyBpbnQgZ2V0SW50KFN0cmluZyBmaWVsZE5hbWUpIHsKLQkJRmllbGQgZmllbGQ9IGdldEZpZWxkKGZpZWxkTmFtZSk7Ci0JCXRyeSB7Ci0JCQlyZXR1cm4gZmllbGQuZ2V0SW50KGZJbnN0YW5jZSk7Ci0JCX0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCk7Ci0JCX0gY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gZSkgewotCQkJZmFpbCgpOwotCQl9Ci0JCS8vIFVucmVhY2hhYmxlIGNvZGUKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcHJpdmF0ZSBGaWVsZCBnZXRGaWVsZChTdHJpbmcgZmllbGROYW1lKSB7Ci0JCUZpZWxkIGZpZWxkPSBudWxsOwotCQl0cnkgewotCQkJZmllbGQ9IGZDbGFzcy5nZXREZWNsYXJlZEZpZWxkKGZpZWxkTmFtZSk7Ci0JCX0gY2F0Y2ggKFNlY3VyaXR5RXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoKTsKLQkJfSBjYXRjaCAoTm9TdWNoRmllbGRFeGNlcHRpb24gZSkgewotCQkJZmFpbCgpOwotCQl9Ci0JCWZpZWxkLnNldEFjY2Vzc2libGUodHJ1ZSk7Ci0JCXJldHVybiBmaWVsZDsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBDbGFzc1tdIGdldFR5cGVzKE9iamVjdFtdIG9iamVjdHMpIHsKLQkJaWYgKG9iamVjdHMgPT0gbnVsbCkKLQkJCXJldHVybiBudWxsOwotCi0JCWludCBsZW5ndGg9IG9iamVjdHMubGVuZ3RoOwotCQlDbGFzc1tdIGNsYXNzZXM9IG5ldyBDbGFzc1tsZW5ndGhdOwotCQlmb3IgKGludCBpPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLQkJCUFzc2VydC5pc05vdE51bGwob2JqZWN0c1tpXSk7Ci0JCQljbGFzc2VzW2ldPSBvYmplY3RzW2ldLmdldENsYXNzKCk7Ci0JCX0KLQkJcmV0dXJuIGNsYXNzZXM7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGZhaWwoKSB7Ci0JCUFzc2VydC5pc1RydWUoZmFsc2UpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGV4dC50ZXN0cy9vcmcvZWNsaXBzZS90ZXh0L3Rlc3RzL0VjbGlwc2VUZXh0VGVzdFN1aXRlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3RleHQudGVzdHMvb3JnL2VjbGlwc2UvdGV4dC90ZXN0cy9FY2xpcHNlVGV4dFRlc3RTdWl0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMzkxNWIwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGV4dC50ZXN0cy9vcmcvZWNsaXBzZS90ZXh0L3Rlc3RzL0VjbGlwc2VUZXh0VGVzdFN1aXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UudGV4dC50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLQotLyoqCi0gKiBUZXN0IFN1aXRlIGZvciBvcmcuZWNsaXBzZS50ZXh0LgotICoKLSAqIEBzaW5jZSAzLjAKLSAqLwotcHVibGljIGNsYXNzIEVjbGlwc2VUZXh0VGVzdFN1aXRlIHsKLQotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJVGVzdFN1aXRlIHN1aXRlID0gbmV3IFRlc3RTdWl0ZSgib3JnLmVjbGlwc2UudGV4dCBUZXN0IFN1aXRlIHVzaW5nIEpTUCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudCIpOyAvLyROT04tTkxTLTEkCi0JCS8vJEpVbml0LUJFR0lOJAotLy8JCXN1aXRlLmFkZFRlc3QoTGluZVRyYWNrZXJUZXN0NC5zdWl0ZSgpKTsKLS8vCQlzdWl0ZS5hZGRUZXN0KERvY3VtZW50RXh0ZW5zaW9uVGVzdC5zdWl0ZSgpKTsKLS8vCQlzdWl0ZS5hZGRUZXN0KExpbmVUcmFja2VyVGVzdDMuc3VpdGUoKSk7Ci0vLwkJc3VpdGUuYWRkVGVzdChEb2N1bWVudFRlc3Quc3VpdGUoKSk7Ci0vLwkJc3VpdGUuYWRkVGVzdChGaW5kUmVwbGFjZURvY3VtZW50QWRhcHRlclRlc3Quc3VpdGUoKSk7Ci0JCXN1aXRlLmFkZFRlc3QoUG9zaXRpb25VcGRhdGluZ0Nvcm5lckNhc2VzVGVzdC5zdWl0ZSgpKTsKLQkJc3VpdGUuYWRkVGVzdChFeGNsdXNpdmVQb3NpdGlvblVwZGF0ZXJUZXN0LnN1aXRlKCkpOwotLy8JCXN1aXRlLmFkZFRlc3QoVGV4dEVkaXRUZXN0cy5zdWl0ZSgpKTsKLS8vCQlzdWl0ZS5hZGRUZXN0KEdhcFRleHRUZXN0LnN1aXRlKCkpOwotLy8JCXN1aXRlLmFkZFRlc3QoQWRhcHRpdmVHYXBUZXh0VGVzdC5zdWl0ZSgpKTsKLS8vCQlzdWl0ZS5hZGRUZXN0KEdhcFRleHRTdG9yZVRlc3Quc3VpdGUoKSk7Ci0vLwkJc3VpdGUuYWRkVGVzdChDaGlsZERvY3VtZW50VGVzdC5zdWl0ZSgpKTsKLS8vCQlzdWl0ZS5hZGRUZXN0KFByb2plY3Rpb25UZXN0U3VpdGUuc3VpdGUoKSk7Ci0vLwkJc3VpdGUuYWRkVGVzdChMaW5rVGVzdFN1aXRlLnN1aXRlKCkpOwotLy8JCXN1aXRlLmFkZFRlc3QoQ29weU9uV3JpdGVUZXh0U3RvcmVUZXN0LnN1aXRlKCkpOwotLy8JCXN1aXRlLmFkZFRlc3QoVGV4dFV0aWxpdGllc1Rlc3Quc3VpdGUoKSk7Ci0vLwkJc3VpdGUuYWRkVGVzdChBbm5vdGF0aW9uTW9kZWxTdHJlc3NUZXN0LnN1aXRlKCkpOwotLy8JCXN1aXRlLmFkZFRlc3QoQW5ub3RhdGlvbk1vZGVsRXh0ZW5zaW9uMlRlc3Quc3VpdGUoKSk7Ci0vLwkJc3VpdGUuYWRkVGVzdChUZW1wbGF0ZXNUZXN0U3VpdGUuc3VpdGUoKSk7Ci0JCS8vJEpVbml0LUVORCQKLQotCQlyZXR1cm4gc3VpdGU7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXh0LnRlc3RzL29yZy9lY2xpcHNlL3RleHQvdGVzdHMvRXhjbHVzaXZlUG9zaXRpb25VcGRhdGVyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXh0LnRlc3RzL29yZy9lY2xpcHNlL3RleHQvdGVzdHMvRXhjbHVzaXZlUG9zaXRpb25VcGRhdGVyVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZjExZmFiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGV4dC50ZXN0cy9vcmcvZWNsaXBzZS90ZXh0L3Rlc3RzL0V4Y2x1c2l2ZVBvc2l0aW9uVXBkYXRlclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAwLCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UudGV4dC50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5Bc3NlcnQ7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LkJhZExvY2F0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuRGVmYXVsdFBvc2l0aW9uVXBkYXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklQb3NpdGlvblVwZGF0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5Qb3NpdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwubHRrLm1vZGVsaGFuZGxlci5JTW9kZWxIYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5tb2RlbGhhbmRsZXIuTW9kZWxIYW5kbGVyUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnRleHQuQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci0KLS8qKgotICogQHNpbmNlIDMuMwotICovCi1wdWJsaWMgY2xhc3MgRXhjbHVzaXZlUG9zaXRpb25VcGRhdGVyVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgVGVzdFN1aXRlKEV4Y2x1c2l2ZVBvc2l0aW9uVXBkYXRlclRlc3QuY2xhc3MpOwotCX0KLQotCXByaXZhdGUgSVBvc2l0aW9uVXBkYXRlciBmVXBkYXRlcjsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ0FURUdPUlk9ICJ0ZXN0Y2F0ZWdvcnkiOwotCXByaXZhdGUgUG9zaXRpb24gZlBvczsKLQlwcml2YXRlIElEb2N1bWVudCBmRG9jOwotCS8qCi0JICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQotCSAqLwotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWZVcGRhdGVyPSBuZXcgRGVmYXVsdFBvc2l0aW9uVXBkYXRlcihDQVRFR09SWSk7Ci0vLwkJZkRvYyA9IG5ldyBEb2N1bWVudCgiY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjIik7Ci0JCWZEb2M9IGNyZWF0ZURvY3VtZW50KCJjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2MiKTsKLQkJZlBvcz0gbmV3IFBvc2l0aW9uKDUsIDUpOwotCQlmRG9jLmFkZFBvc2l0aW9uVXBkYXRlcihmVXBkYXRlcik7Ci0JCWZEb2MuYWRkUG9zaXRpb25DYXRlZ29yeShDQVRFR09SWSk7Ci0JCWZEb2MuYWRkUG9zaXRpb24oQ0FURUdPUlksIGZQb3MpOwotCX0KLQotCXByaXZhdGUgSURvY3VtZW50IGNyZWF0ZURvY3VtZW50KFN0cmluZyBjb250ZW50cykgewotCQlJTW9kZWxIYW5kbGVyIGhhbmRsZXIgPSBNb2RlbEhhbmRsZXJSZWdpc3RyeS5nZXRJbnN0YW5jZSgpLmdldEhhbmRsZXJGb3JDb250ZW50VHlwZUlkKCJvcmcuZWNsaXBzZS5qc3QuanNwLmpzcHNvdXJjZSIpOwotCQlCYXNpY1N0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCA9IChCYXNpY1N0cnVjdHVyZWREb2N1bWVudCkgaGFuZGxlci5nZXREb2N1bWVudExvYWRlcigpLmNyZWF0ZU5ld1N0cnVjdHVyZWREb2N1bWVudCgpOwotCQlkb2N1bWVudC5zZXQoY29udGVudHMpOwotCQlyZXR1cm4gZG9jdW1lbnQ7Ci0JfQotCi0JLyoKLQkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSN0ZWFyRG93bigpCi0JICovCi0JcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJZkRvYy5yZW1vdmVQb3NpdGlvblVwZGF0ZXIoZlVwZGF0ZXIpOwotCQlmRG9jLnJlbW92ZVBvc2l0aW9uQ2F0ZWdvcnkoQ0FURUdPUlkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3REZWxldGVBZnRlcigpIHRocm93cyBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7Ci0JCWZEb2MucmVwbGFjZSgyMCwgMiwgIiIpOwotCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKDUsIGZQb3Mub2Zmc2V0KTsKLQkJQXNzZXJ0LmFzc2VydEVxdWFscyg1LCBmUG9zLmxlbmd0aCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEFkZEFmdGVyKCkgdGhyb3dzIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJZkRvYy5yZXBsYWNlKDIwLCAwLCAieXkiKTsKLQkJQXNzZXJ0LmFzc2VydEVxdWFscyg1LCBmUG9zLm9mZnNldCk7Ci0JCUFzc2VydC5hc3NlcnRFcXVhbHMoNSwgZlBvcy5sZW5ndGgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3REZWxldGVCZWZvcmUoKSB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlmRG9jLnJlcGxhY2UoMiwgMiwgIiIpOwotCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKDMsIGZQb3Mub2Zmc2V0KTsKLQkJQXNzZXJ0LmFzc2VydEVxdWFscyg1LCBmUG9zLmxlbmd0aCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEFkZEJlZm9yZSgpIHRocm93cyBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7Ci0JCWZEb2MucmVwbGFjZSgyLCAwLCAieXkiKTsKLQkJQXNzZXJ0LmFzc2VydEVxdWFscyg3LCBmUG9zLm9mZnNldCk7Ci0JCUFzc2VydC5hc3NlcnRFcXVhbHMoNSwgZlBvcy5sZW5ndGgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RBZGRSaWdodEJlZm9yZSgpIHRocm93cyBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7Ci0JCWZEb2MucmVwbGFjZSg1LCAwLCAieXkiKTsKLQkJQXNzZXJ0LmFzc2VydEVxdWFscyg3LCBmUG9zLm9mZnNldCk7Ci0JCUFzc2VydC5hc3NlcnRFcXVhbHMoNSwgZlBvcy5sZW5ndGgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3REZWxldGVBdE9mZnNldCgpIHRocm93cyBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7Ci0JCWZEb2MucmVwbGFjZSg1LCAyLCAiIik7Ci0JCUFzc2VydC5hc3NlcnRFcXVhbHMoNSwgZlBvcy5vZmZzZXQpOwotCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKDMsIGZQb3MubGVuZ3RoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RGVsZXRlUmlnaHRCZWZvcmUoKSB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlmRG9jLnJlcGxhY2UoMywgMiwgIiIpOwotCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKDMsIGZQb3Mub2Zmc2V0KTsKLQkJQXNzZXJ0LmFzc2VydEVxdWFscyg1LCBmUG9zLmxlbmd0aCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEFkZFJpZ2h0QWZ0ZXIoKSB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlmRG9jLnJlcGxhY2UoMTAsIDAsICJ5eSIpOwotCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKDUsIGZQb3Mub2Zmc2V0KTsKLQkJQXNzZXJ0LmFzc2VydEVxdWFscyg1LCBmUG9zLmxlbmd0aCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdERlbGV0ZVJpZ2h0QWZ0ZXIoKSB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlmRG9jLnJlcGxhY2UoMTAsIDIsICIiKTsKLQkJQXNzZXJ0LmFzc2VydEVxdWFscyg1LCBmUG9zLm9mZnNldCk7Ci0JCUFzc2VydC5hc3NlcnRFcXVhbHMoNSwgZlBvcy5sZW5ndGgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RBZGRXaXRoaW4oKSB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlmRG9jLnJlcGxhY2UoNiwgMCwgInl5Iik7Ci0JCUFzc2VydC5hc3NlcnRFcXVhbHMoNSwgZlBvcy5vZmZzZXQpOwotCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKDcsIGZQb3MubGVuZ3RoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RGVsZXRlV2l0aGluKCkgdGhyb3dzIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJZkRvYy5yZXBsYWNlKDYsIDIsICIiKTsKLQkJQXNzZXJ0LmFzc2VydEVxdWFscyg1LCBmUG9zLm9mZnNldCk7Ci0JCUFzc2VydC5hc3NlcnRFcXVhbHMoMywgZlBvcy5sZW5ndGgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RSZXBsYWNlTGVmdEJvcmRlcigpIHRocm93cyBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7Ci0JCWZEb2MucmVwbGFjZSg0LCAyLCAieXkiKTsKLQkJQXNzZXJ0LmFzc2VydEVxdWFscyg2LCBmUG9zLm9mZnNldCk7Ci0JCUFzc2VydC5hc3NlcnRFcXVhbHMoNCwgZlBvcy5sZW5ndGgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RSZXBsYWNlUmlnaHRCb3JkZXIoKSB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlmRG9jLnJlcGxhY2UoOSwgMiwgInl5Iik7Ci0JCUFzc2VydC5hc3NlcnRFcXVhbHMoNSwgZlBvcy5vZmZzZXQpOwotCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKDQsIGZQb3MubGVuZ3RoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RGVsZXRlT3ZlclJpZ2h0Qm9yZGVyKCkgdGhyb3dzIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJZkRvYy5yZXBsYWNlKDksIDIsICIiKTsKLQkJQXNzZXJ0LmFzc2VydEVxdWFscyg1LCBmUG9zLm9mZnNldCk7Ci0JCUFzc2VydC5hc3NlcnRFcXVhbHMoNCwgZlBvcy5sZW5ndGgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3REZWxldGVkKCkgdGhyb3dzIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJZkRvYy5yZXBsYWNlKDQsIDcsICIiKTsKLQkJQXNzZXJ0LmFzc2VydFRydWUoZlBvcy5pc0RlbGV0ZWQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RSZXBsYWNlZCgpIHRocm93cyBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7Ci0JCWZEb2MucmVwbGFjZSg0LCA3LCAieXl5eXl5eSIpOwotCQlBc3NlcnQuYXNzZXJ0VHJ1ZShmUG9zLmlzRGVsZXRlZCk7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3RleHQudGVzdHMvb3JnL2VjbGlwc2UvdGV4dC90ZXN0cy9Qb3NpdGlvblVwZGF0aW5nQ29ybmVyQ2FzZXNUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3RleHQudGVzdHMvb3JnL2VjbGlwc2UvdGV4dC90ZXN0cy9Qb3NpdGlvblVwZGF0aW5nQ29ybmVyQ2FzZXNUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3ZDExOTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXh0LnRlc3RzL29yZy9lY2xpcHNlL3RleHQvdGVzdHMvUG9zaXRpb25VcGRhdGluZ0Nvcm5lckNhc2VzVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLnRleHQudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuQmFkUG9zaXRpb25DYXRlZ29yeUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LlBvc2l0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5sdGsubW9kZWxoYW5kbGVyLklNb2RlbEhhbmRsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLm1vZGVsaGFuZGxlci5Nb2RlbEhhbmRsZXJSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwudGV4dC5CYXNpY1N0cnVjdHVyZWREb2N1bWVudDsKLQotCi0KLXB1YmxpYyBjbGFzcyBQb3NpdGlvblVwZGF0aW5nQ29ybmVyQ2FzZXNUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCXByaXZhdGUgSURvY3VtZW50IGZEb2N1bWVudDsKLQotCXB1YmxpYyBQb3NpdGlvblVwZGF0aW5nQ29ybmVyQ2FzZXNUZXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIGNoZWNrUG9zaXRpb25zKFBvc2l0aW9uW10gZXhwZWN0ZWQpIHRocm93cyBCYWRQb3NpdGlvbkNhdGVnb3J5RXhjZXB0aW9uIHsKLQkJUG9zaXRpb25bXSBhY3R1YWw9IGZEb2N1bWVudC5nZXRQb3NpdGlvbnMoSURvY3VtZW50LkRFRkFVTFRfQ0FURUdPUlkpOwotCQlhc3NlcnRUcnVlKCJpbnZhbGlkIG51bWJlciBvZiBwb3NpdGlvbnMiLCBhY3R1YWwubGVuZ3RoID09IGV4cGVjdGVkLmxlbmd0aCk7Ci0KLQkJZm9yIChpbnQgaT0gMDsgaSA8IGV4cGVjdGVkLmxlbmd0aDsgaSsrKSB7Ci0JCQlhc3NlcnRFcXVhbHMocHJpbnQoYWN0dWFsW2ldKSArICIgIT0gIiArIHByaW50KGV4cGVjdGVkW2ldKSwgZXhwZWN0ZWRbaV0sIGFjdHVhbFtpXSk7Ci0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgU3RyaW5nIHByaW50KFBvc2l0aW9uIHApIHsKLQkJcmV0dXJuICJbIiArIHAuZ2V0T2Zmc2V0KCkgKyAiLCIgKyBwLmdldExlbmd0aCgpICsgIl0iOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0vLwkJZkRvY3VtZW50PSBuZXcgRG9jdW1lbnQoIngteC14LXgteC14LXgteC14LXgteCIpOwotCQlmRG9jdW1lbnQ9IGNyZWF0ZURvY3VtZW50KCJ4LXgteC14LXgteC14LXgteC14LXgiKTsKLQkJZkRvY3VtZW50LmFkZFBvc2l0aW9uKG5ldyBQb3NpdGlvbigwLCAwKSk7Ci0JCWZEb2N1bWVudC5hZGRQb3NpdGlvbihuZXcgUG9zaXRpb24oMCwgMSkpOwotCQlmRG9jdW1lbnQuYWRkUG9zaXRpb24obmV3IFBvc2l0aW9uKDUsIDApKTsKLQkJZkRvY3VtZW50LmFkZFBvc2l0aW9uKG5ldyBQb3NpdGlvbig1LCAzKSk7Ci0JfQotCi0JcHJpdmF0ZSBJRG9jdW1lbnQgY3JlYXRlRG9jdW1lbnQoU3RyaW5nIGNvbnRlbnRzKSB7Ci0JCUlNb2RlbEhhbmRsZXIgaGFuZGxlciA9IE1vZGVsSGFuZGxlclJlZ2lzdHJ5LmdldEluc3RhbmNlKCkuZ2V0SGFuZGxlckZvckNvbnRlbnRUeXBlSWQoIm9yZy5lY2xpcHNlLmpzdC5qc3AuanNwc291cmNlIik7Ci0JCUJhc2ljU3RydWN0dXJlZERvY3VtZW50IGRvY3VtZW50ID0gKEJhc2ljU3RydWN0dXJlZERvY3VtZW50KSBoYW5kbGVyLmdldERvY3VtZW50TG9hZGVyKCkuY3JlYXRlTmV3U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCWRvY3VtZW50LnNldChjb250ZW50cyk7Ci0JCXJldHVybiBkb2N1bWVudDsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgVGVzdFN1aXRlKFBvc2l0aW9uVXBkYXRpbmdDb3JuZXJDYXNlc1Rlc3QuY2xhc3MpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgewotCQlmRG9jdW1lbnQ9IG51bGw7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEluc2VydCgpIHRocm93cyBFeGNlcHRpb24gewotCQlmRG9jdW1lbnQucmVwbGFjZSgwLCAwLCAieXkiKTsKLQotCQlQb3NpdGlvbltdIHBvc2l0aW9ucz0gbmV3IFBvc2l0aW9uW10gewotCQkJCW5ldyBQb3NpdGlvbiggMiwgMSksCi0JCQkJbmV3IFBvc2l0aW9uKCAyLCAwKSwKLQkJCQluZXcgUG9zaXRpb24oIDcsIDMpLAotCQkJCW5ldyBQb3NpdGlvbiggNywgMCkKLQkJfTsKLQotCQljaGVja1Bvc2l0aW9ucyhwb3NpdGlvbnMpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgppbmRleCBjOWFlNjVmLi43M2JjYmU1IDEwMDY0NAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0yLDcgKzIsNyBAQAogQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgogQnVuZGxlLU5hbWU6ICVCdW5kbGUtTmFtZS4wCiBCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHM7c2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjQwMC5xdWFsaWZpZXIKK0J1bmRsZS1WZXJzaW9uOiAxLjAuMjAxLnF1YWxpZmllcgogQnVuZGxlLUNsYXNzUGF0aDogY3NzY29yZXRlc3RzLmphcgogQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLkNTU0NvcmVUZXN0c1BsdWdpbgogQnVuZGxlLVZlbmRvcjogJUJ1bmRsZS1WZW5kb3IuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvQ1NTQWxsVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL0NTU0FsbFRlc3RzLmphdmEKaW5kZXggZmFjMDNkMC4uMGE3NjJmZiAxMDA2NDQKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvQ1NTQWxsVGVzdHMuamF2YQorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9DU1NBbGxUZXN0cy5qYXZhCkBAIC0yNSw3ICsyNSw2IEBACiBpbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLnNvdXJjZS5DU1NTb3VyY2VQYXJzZXJUZXN0OwogaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy5zb3VyY2UuQ1NTVGV4dFBhcnNlclRlc3Q7CiBpbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLnNvdXJjZS5DU1NVcmxUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy50ZXN0ZmlsZXMuQ1NTTW9kZWxMb2FkVGVzdDsKIAogCiBwdWJsaWMgY2xhc3MgQ1NTQWxsVGVzdHMgZXh0ZW5kcyBUZXN0U3VpdGUgewpAQCAtNTcsNiArNTYsNSBAQAogCQlzdWl0ZS5hZGRUZXN0U3VpdGUoVGVzdEZvcm1hdFByb2Nlc3NvckNTUy5jbGFzcyk7CiAJCXN1aXRlLmFkZFRlc3RTdWl0ZShUZXN0Q2xlYW51cFByb2Nlc3NvckNTUy5jbGFzcyk7CiAJCXN1aXRlLmFkZFRlc3RTdWl0ZShUZXN0Q1NTRGVjbC5jbGFzcyk7Ci0JCXN1aXRlLmFkZFRlc3RTdWl0ZShDU1NNb2RlbExvYWRUZXN0LmNsYXNzKTsKIAl9CiB9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L1Rlc3RGb3JtYXRQcm9jZXNzb3JDU1MuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL2Zvcm1hdC9UZXN0Rm9ybWF0UHJvY2Vzc29yQ1NTLmphdmEKaW5kZXggZjgzZjhkYS4uMTEyZmRmNiAxMDA2NDQKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L1Rlc3RGb3JtYXRQcm9jZXNzb3JDU1MuamF2YQorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9mb3JtYXQvVGVzdEZvcm1hdFByb2Nlc3NvckNTUy5qYXZhCkBAIC0xLDUgKzEsNSBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKICAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAogICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKQEAgLTE1MywxMiArMTUzLDQgQEAKIAlwdWJsaWMgdm9pZCB0ZXN0QlVHMTEwNTM5bXVsdGlwbGVDbGFzc0Zvcm1hdCgpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7CiAJCWZvcm1hdEFuZEFzc2VydEVxdWFscygidGVzdGZpbGVzL2J1ZzExMDUzOS1tdWx0aXBsZWNsYXNzLmNzcyIsICJ0ZXN0ZmlsZXMvYnVnMTEwNTM5LW11bHRpcGxlY2xhc3MtZm9ybWF0dGVkLmNzcyIpOwogCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0QlVHMjQ4NDY1Y29tYmluZWRQc2V1ZG9DbGFzcygpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCWZvcm1hdEFuZEFzc2VydEVxdWFscygidGVzdGZpbGVzL2J1ZzI0ODQ2NS1jb21iaW5lZC1wc2V1ZG8tY2xhc3Nlcy5jc3MiLCAidGVzdGZpbGVzL2J1ZzI0ODQ2NS1jb21iaW5lZC1wc2V1ZG8tY2xhc3Nlcy1mbXQuY3NzIik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RCVUcxOTY0NzZzZWxlY3RvclBzZXVkb2NsYXNzZXNGb3JtYXQoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3RmaWxlcy9idWcxOTY0NzYtc2VsZWN0b3ItcHNldWRvLWNsYXNzZXMuY3NzIiwgInRlc3RmaWxlcy9idWcxOTY0NzYtc2VsZWN0b3ItcHNldWRvLWNsYXNzZXMtZm10LmNzcyIpOwotCX0KIH0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMvYnVnMTk2NDc2LXNlbGVjdG9yLXBzZXVkby1jbGFzc2VzLWZtdC5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL2J1ZzE5NjQ3Ni1zZWxlY3Rvci1wc2V1ZG8tY2xhc3Nlcy1mbXQuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNzQ1ZjYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMvYnVnMTk2NDc2LXNlbGVjdG9yLXBzZXVkby1jbGFzc2VzLWZtdC5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0jYmxvY2s6YWZ0ZXIgewotCWNvbnRlbnQ6ICIuIjsKLX0KLQotZGl2LmNvbnRlbnQgI2Jsb2NrOmFmdGVyIHsKLQljb250ZW50OiAiLiI7Ci19Ci0KLSNibG9jazo6YWZ0ZXIgewotCWNvbnRlbnQ6ICIuIjsKLX0KLQotZGl2IHNwYW4uZml4LmNsZWFyIHsKLQljbGVhcjogYm90aDsKLX0KLQotZGl2IHNwYW4uZml4LmNsZWFyOmFmdGVyIHsKLQljb250ZW50OiBib3RoOwotfQotCi1kaXY6YWZ0ZXIgewotCWNvbnRlbnQ6ICIuIjsKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL2J1ZzE5NjQ3Ni1zZWxlY3Rvci1wc2V1ZG8tY2xhc3Nlcy5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL2J1ZzE5NjQ3Ni1zZWxlY3Rvci1wc2V1ZG8tY2xhc3Nlcy5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4M2RmM2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9idWcxOTY0NzYtc2VsZWN0b3ItcHNldWRvLWNsYXNzZXMuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0jYmxvY2s6YWZ0ZXIgeyBjb250ZW50OiAiLiI7IH0KLWRpdi5jb250ZW50ICNibG9jazphZnRlciB7IGNvbnRlbnQ6ICIuIjsgfQotI2Jsb2NrOjphZnRlciB7Y29udGVudDogIi4iOyB9Ci1kaXYgc3Bhbi5maXguY2xlYXIgeyBjbGVhcjogYm90aDsgfQotZGl2IHNwYW4uZml4LmNsZWFyOmFmdGVyIHsgY29udGVudDogYm90aDsgfQotZGl2OmFmdGVyIHsgY29udGVudDogIi4iOyB9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9idWcyNDg0NjUtY29tYmluZWQtcHNldWRvLWNsYXNzZXMtZm10LmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMvYnVnMjQ4NDY1LWNvbWJpbmVkLXBzZXVkby1jbGFzc2VzLWZtdC5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzNmU2ZjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9idWcyNDg0NjUtY29tYmluZWQtcHNldWRvLWNsYXNzZXMtZm10LmNzcworKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotYTpmb2N1czpob3ZlcixkaXY6Zm9jdXM6aG92ZXIgew0KLQliYWNrZ3JvdW5kOiB3aGl0ZTsNCi19DQotDQotZGl2IGE6Zm9jdXM6aG92ZXIgew0KLQliYWNrZ3JvdW5kOiBibHVlOw0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL2J1ZzI0ODQ2NS1jb21iaW5lZC1wc2V1ZG8tY2xhc3Nlcy5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL2J1ZzI0ODQ2NS1jb21iaW5lZC1wc2V1ZG8tY2xhc3Nlcy5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwMWUwOTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9idWcyNDg0NjUtY29tYmluZWQtcHNldWRvLWNsYXNzZXMuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi1hOmZvY3VzOmhvdmVyLGRpdjpmb2N1czpob3ZlciB7DQotYmFja2dyb3VuZDogd2hpdGU7DQotfQ0KLQ0KLWRpdiBhOmZvY3VzOmhvdmVyIHsNCi1iYWNrZ3JvdW5kOiBibHVlOw0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvQ1NTTW9kZWxMb2FkVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL0NTU01vZGVsTG9hZFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjRkMzAwNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvQ1NTTW9kZWxMb2FkVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCi0gKiANCi0gKiBDb250cmlidXRvcnM6DQotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLQ0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLnRlc3RmaWxlczsNCi0NCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsNCi1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsNCi1pbXBvcnQgamF2YS5pby5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uOw0KLQ0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7DQotDQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JQ1NTTW9kZWw7DQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOw0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsNCi0NCi1wdWJsaWMgY2xhc3MgQ1NTTW9kZWxMb2FkVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsNCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEhUTUw0X0NTUyA9ICJodG1sNC5jc3MiOw0KLQ0KLQlwdWJsaWMgQ1NTTW9kZWxMb2FkVGVzdCgpIHsNCi0JCXN1cGVyKCJDU1MgTW9kZWwgTG9hZGluZyBTdWl0ZSIpOw0KLQl9DQotDQotCXB1YmxpYyB2b2lkIHRlc3RMb2FkQ1NTZnJvbVN0cmVhbSgpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7DQotCQlJbnB1dFN0cmVhbSBpbnB1dCA9IG51bGw7DQotDQotCQlpbnB1dCA9IENTU01vZGVsTG9hZFRlc3QuY2xhc3MuZ2V0UmVzb3VyY2VBc1N0cmVhbShIVE1MNF9DU1MpOw0KLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuZ2V0TW9kZWxGb3JFZGl0KEhUTUw0X0NTUywgaW5wdXQsIG51bGwpOw0KLQkJYXNzZXJ0Tm90TnVsbChtb2RlbCk7DQotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZE1vZGVsIHdhcyBub3QgYSBJQ1NTTW9kZWwiLCBtb2RlbCBpbnN0YW5jZW9mIElDU1NNb2RlbCk7DQotCQlhc3NlcnRUcnVlKCJjb250ZW50cyBhcmUgaW5jb21wbGV0ZSIsIG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLmdldCgpLmluZGV4T2YoIkJhc2ljIEhUTUwgc3R5bGUgaW5mb3JtYXRpb24iKSA+IDQpOw0KLQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7DQotCX0NCi19DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL2h0bWw0LmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9odG1sNC5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4NGQ4NGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL2h0bWw0LmNzcworKysgL2Rldi9udWxsCkBAIC0xLDE1NSArMCwwIEBACi0vKg0KLSAqIEJhc2ljIEhUTUwgc3R5bGUgaW5mb3JtYXRpb24uDQotICovDQotaHRtbCwNCi1hZGRyZXNzLA0KLWJsb2NrcXVvdGUsbGlzdGluZywNCi1ib2R5LCBkZCwgZGl2LA0KLWRsLCBkdCwgZmllbGRzZXQsIGxlZ2VuZCxmb3JtLA0KLWZyYW1lLCBmcmFtZXNldCwNCi1oMSwgaDIsIGgzLCBoNCwNCi1oNSwgaDYsIG5vZnJhbWVzLG5vc2NyaXB0LA0KLW9sLCBwLCB1bCwgY2VudGVyLA0KLWRpciwgaHIsIG1lbnUsIHByZSwgcGxhaW50ZXh0LCB4bXAgIHsgZGlzcGxheTogYmxvY2sgfQ0KLQ0KLW9sCQkJCXtjb3VudGVyLXJlc2V0OiBfYW5vbnltb3VzOyBsaXN0LXN0eWxlLXR5cGU6IGRlY2ltYWx9DQotdWwsZGlyLG1lbnUgIAl7Y291bnRlci1yZXNldDogX2Fub255bW91czsgbGlzdC1zdHlsZS10eXBlOiBkaXNjfQ0KLWxpICAgICAgICAgICAJe2Rpc3BsYXk6IGxpc3QtaXRlbX0NCi1saQkJCQl7Y291bnRlci1pbmNyZW1lbnQ6IF9hbm9ueW1vdXN9DQotDQotaGVhZCAgICAgICAgICAgIHsgZGlzcGxheTogbm9uZSB9DQotdGFibGUgICAgICAgICAgIHsgZGlzcGxheTogdGFibGUgfQ0KLXRyICAgICAgICAgICAgICB7IGRpc3BsYXk6IHRhYmxlLXJvdyB9DQotdGhlYWQgICAgICAgICAgIHsgZGlzcGxheTogdGFibGUtaGVhZGVyLWdyb3VwIH0NCi10Ym9keSAgICAgICAgICAgeyBkaXNwbGF5OiB0YWJsZS1yb3ctZ3JvdXAgfQ0KLXRmb290ICAgICAgICAgICB7IGRpc3BsYXk6IHRhYmxlLWZvb3Rlci1ncm91cCB9DQotY29sICAgICAgICAgICAgIHsgZGlzcGxheTogdGFibGUtY29sdW1uIH0NCi1jb2xncm91cCAgICAgICAgeyBkaXNwbGF5OiB0YWJsZS1jb2x1bW4tZ3JvdXAgfQ0KLXRkLCB0aCAgICAgICAgICB7IGRpc3BsYXk6IHRhYmxlLWNlbGw7IH0NCi1jYXB0aW9uICAgICAgICAgeyBkaXNwbGF5OiB0YWJsZS1jYXB0aW9uIH0NCi10aCAgICAgICAgICAgICAgeyBmb250LXdlaWdodDogYm9sZGVyO30NCi1jYXB0aW9uICAgICAgICAgeyB0ZXh0LWFsaWduOiBjZW50ZXI7aG9yaXpvbnRhbC1hbGlnbjp0b3AgfQ0KLWJ1dHRvbiwgdGV4dGFyZWEsDQotaW5wdXQsIG9iamVjdCwgDQotc2VsZWN0LCBpbWcgeyBkaXNwbGF5OmlubGluZS1ibG9jazsgfQ0KLXByZSxwbGFpbnRleHQsIHhtcCAgIHsgd2hpdGUtc3BhY2U6IHByZSB9DQotaDEsIGgyLCBoMywgaDQsDQotaDUsIGg2LCBiLA0KLXN0cm9uZyAgICAgICAgICB7IGZvbnQtd2VpZ2h0OiBib2xkIH0NCi1pLCBjaXRlLCBlbSxkZm4sDQotdmFyLCBhZGRyZXNzICAgIHsgZm9udC1zdHlsZTogaXRhbGljIH0NCi1wcmUsIHR0LCBjb2RlLHBsYWludGV4dCwgeG1wLA0KLWtiZCwgc2FtcCAgICAgICB7IGZvbnQtZmFtaWx5OiBtb25vc3BhY2UgfQ0KLW9sICAgICAgICAgICAgICB7IGxpc3Qtc3R5bGUtdHlwZTogZGVjaW1hbCB9DQotYnI6YmVmb3JlICAgICAgIHsgY29udGVudDogIlxBIiB9DQotY2VudGVyICAgICAgICAgIHsgdGV4dC1hbGlnbjogY2VudGVyIH0NCi1zdWIgICAgICAgICAgICAgeyB2ZXJ0aWNhbC1hbGlnbjogc3ViIH0NCi1zdXAgICAgICAgICAgICAgeyB2ZXJ0aWNhbC1hbGlnbjogc3VwZXIgfQ0KLXUsIGlucyAgICAgICAgICB7IHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lIH0NCi1pbnB1dAkJCXsgdGV4dC1kZWNvcmF0aW9uOiBub25lIH0NCi1idXR0b24JCQl7IHdoaXRlLXNwYWNlOiBub3dyYXAgfQ0KLWFbaHJlZl0JCQl7IHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lIH0NCi0NCi0vKg0KLSAqIHN0eWxlcyB0aGF0IG1heSBiZSBkaWZmZXJlbnQgZm9yIGRpZmZlcmVudCB1c2VyIGFnZW50Lg0KLSAqIFRoaXMgcGFydCBtYXkgbmVlZCB0byBtb3ZlIG91dCBhbmQgcHV0IGludG8gZGlmZmVyZW50IGNzcyBmaWxlcy4NCi0gKi8NCi1ib2R5ICAgICAgICAgICAgeyBsaW5lLWhlaWdodDogMS4xMmVtIH0NCi1oMSAgICAgICAgICAgICAgeyBmb250LXNpemU6IDJlbTsgbWFyZ2luOiAuNjdlbSAwIH0NCi1oMiAgICAgICAgICAgICAgeyBmb250LXNpemU6IDEuNWVtOyBtYXJnaW46IC43NWVtIDAgfQ0KLWgzICAgICAgICAgICAgICB7IGZvbnQtc2l6ZTogMS4xN2VtOyBtYXJnaW46IC44M2VtIDAgfQ0KLWg0LCBwLHVsLA0KLWZpZWxkc2V0LCBmb3JtLA0KLW9sLCBkbCwgZGlyLA0KLW1lbnUgICAgICAgICAgICB7IG1hcmdpbjogMS4xMmVtIDAgfQ0KLWJsb2NrcXVvdGUgICAgICB7IG1hcmdpbjogMWVtIDQwcHggfQ0KLWg1ICAgICAgICAgICAgICB7IGZvbnQtc2l6ZTogLjgzZW07IG1hcmdpbjogMS41ZW0gMCB9DQotaDYgICAgICAgICAgICAgIHsgZm9udC1zaXplOiAuNzVlbTsgbWFyZ2luOiAxLjY3ZW0gMCB9DQotYmxvY2txdW90ZSAgICAgIHsgbWFyZ2luLWxlZnQ6IDQwcHg7IG1hcmdpbi1yaWdodDogNDBweCB9DQotYmlnICAgICAgICAgICAgIHsgZm9udC1zaXplOiBsYXJnZXIgfQ0KLXNtYWxsLCBzdWIsIHN1cCB7IGZvbnQtc2l6ZTogc21hbGxlciB9DQotcywgc3RyaWtlLCBkZWwgIHsgdGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2ggfQ0KLWhyICAgICAgICAgICAgICB7IGJvcmRlcjogMXB4IGluc2V0IH0NCi1vbCwgdWwsIGRpciwNCi1tZW51LCBkZCAgICAgICAgeyBtYXJnaW4tbGVmdDogNDBweDtib3JkZXI6MHB4IH0NCi1vbCB1bCwgdWwgb2wsDQotdWwgdWwsIG9sIG9sICAgIHsgbWFyZ2luLXRvcDogMDsgbWFyZ2luLWJvdHRvbTogMCB9DQotYWJiciwgYWNyb255bSAgIHsgZm9udC12YXJpYW50OiBzbWFsbC1jYXBzOyBsZXR0ZXItc3BhY2luZzogMC4xZW0gfQ0KLWFbaHJlZl0gICAgICAgICB7IGNvbG9yOmJsdWU7fQ0KLXNlbGVjdAkJCXtiYWNrZ3JvdW5kLWNvbG9yOiB3aW5kb3c7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjtmb250LXNpemU6MTNweDtmb250LXdlaWdodDogbm9ybWFsO30NCi10ZXh0YXJlYQkJe2JvcmRlcjogMnB4IGluc2V0O2ZvbnQtc2l6ZToxM3B4O2ZvbnQtZmFtaWx5Om1vbm9zcGFjZX0NCi10ZXh0YXJlYSwNCi1pbnB1dCAJCQl7YmFja2dyb3VuZC1jb2xvcjogd2luZG93fQ0KLWlucHV0LA0KLWlucHV0W3R5cGU9dGV4dF0sDQotaW5wdXRbdHlwZT1wYXNzd29yZF0ge2JvcmRlcjogMnB4IGluc2V0O2ZvbnQtc2l6ZToxM3B4O2ZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7Zm9udC13ZWlnaHQ6IG5vcm1hbDt9DQotLyogZm9sbG93aW5nIHVwY2FzZWQgVFlQRSBpcyBmb3Igd29ya2Fyb3VuZCB0aGUgV1RQIE0yIGJ1ZyBvZiBub3Qgc2V0dGluZyBkZWZhdWx0IGNvbnRlbnQgdHlwZSAqLw0KLWlucHV0W1RZUEU9c3VibWl0XSxpbnB1dFtUWVBFPXJlc2V0XSxpbnB1dFtUWVBFPWJ1dHRvbl0saW5wdXRbVFlQRT1jYW5jZWxdLA0KLWJ1dHRvbiwNCi1pbnB1dFt0eXBlPWJ1dHRvbl0sDQotaW5wdXRbdHlwZT1yZXNldF0sDQotaW5wdXRbdHlwZT1jYW5jZWxdLA0KLWlucHV0W3R5cGU9c3VibWl0XSB7YmFja2dyb3VuZC1jb2xvcjogQnV0dG9uRmFjZTsgYm9yZGVyOiAycHggb3V0c2V0OyBmb250LXNpemU6MTNweDsNCi0JCQkJCWZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7dGV4dC1hbGlnbjogY2VudGVyO2ZvbnQtd2VpZ2h0OiBub3JtYWw7fQ0KLWlucHV0W3R5cGU9aW1hZ2VdLA0KLWlucHV0W3R5cGU9Y2hlY2tib3hdLA0KLWlucHV0W3R5cGU9cmFkaW9dICB7Ym9yZGVyOiBub25lIH0NCi1pbnB1dFt0eXBlPWhpZGRlbl0gIHtib3JkZXI6IG5vbmUgfQ0KLWltZwkJCQl7Ym9yZGVyOiAwcHggbm9uZX0NCi1saXN0aW5nICAgICAgICAge2ZvbnQtZmFtaWx5Om1vbm9zcGFjZTtmb250LXNpemU6IG1lZGl1bTt3aGl0ZS1zcGFjZTogcHJlOyBtYXJnaW46IDFlbSAwO30NCi10Ym9keSx0aGVhZCx0Zm9vdCAgICAge3ZlcnRpY2FsLWFsaWduOiBtaWRkbGU7fQ0KLWJsaW5rIAkJCXt0ZXh0LWRlY29yYXRpb246IGJsaW5rO30NCi0NCi1ociAJCXttYXJnaW46IDAuNWVtIGF1dG8gMC41ZW0gYXV0bzt9DQotY2FwdGlvbiAge2JvcmRlcjogMHB4IG5vbmU7bWFyZ2luOiAwcHg7IHBhZGRpbmc6MHB4IDBweCA0cHggMHB4O30NCi10ZCwgdGgsDQotdGFibGUgICAge2JvcmRlcjogNHB4IG5vbmU7fQ0KLWJ1dHRvbiAgIHtwYWRkaW5nOiAzcHggNXB4O3RleHQtYWxpZ246IGNlbnRlcjt2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO30NCi1idXR0b24sdGV4dGFyZWEsaW5wdXQgICB7dmVydGljYWwtYWxpZ246IHRleHQtYm90dG9tO2NvbG9yOmJsYWNrO2ZvbnQtc3R5bGU6bm9uZTt9DQotc2VsZWN0IHt2ZXJ0aWNhbC1hbGlnbjogdGV4dC1ib3R0b207fQ0KLWlucHV0W3R5cGU9aW1hZ2VdICB7dmVydGljYWwtYWxpZ246IGJhc2VsaW5lO30NCi1saSAgIHttaW4taGVpZ2h0OjEuMmVtfQ0KLWJ1dHRvbiB7bWluLWhlaWdodDoxLjhlbX0NCi1kaXYsdHIsZm9ybSB7bWluLWhlaWdodDoxLjJlbX0NCi10YWJsZSx0ZCB7bWluLXdpZHRoOjEuMmVtO21pbi1oZWlnaHQ6MS4yZW19DQotDQotLyogbmVzdGVkIGxpc3RzIGhhdmUgbm8gdG9wL2JvdHRvbSBtYXJnaW5zICovDQotdWwgdWwsICAgdWwgb2wsICAgdWwgZGlyLCAgIHVsIG1lbnUsICAgdWwgZGwsDQotb2wgdWwsICAgb2wgb2wsICAgb2wgZGlyLCAgIG9sIG1lbnUsICAgb2wgZGwsDQotZGlyIHVsLCAgZGlyIG9sLCAgZGlyIGRpciwgIGRpciBtZW51LCAgZGlyIGRsLA0KLW1lbnUgdWwsIG1lbnUgb2wsIG1lbnUgZGlyLCBtZW51IG1lbnUsIG1lbnUgZGwsDQotZGwgdWwsICAgZGwgb2wsICAgZGwgZGlyLCAgIGRsIG1lbnUsICAgZGwgZGwgCXttYXJnaW4tdG9wOiAwOyBtYXJnaW4tYm90dG9tOiAwO30NCi0NCi0vKiAyIGRlZXAgdW5vcmRlcmVkIGxpc3RzIHVzZSBhIGNpcmNsZSAqLw0KLW9sIHVsLCAgIHVsIHVsLCAgIG1lbnUgdWwsICAgZGlyIHVsLA0KLW9sIG1lbnUsIHVsIG1lbnUsIG1lbnUgbWVudSwgZGlyIG1lbnUsDQotb2wgZGlyLCAgdWwgZGlyLCAgbWVudSBkaXIsICBkaXIgZGlyIAl7bGlzdC1zdHlsZS10eXBlOiBjaXJjbGU7fQ0KLQ0KLS8qIDMgZGVlcCAob3IgbW9yZSkgdW5vcmRlcmVkIGxpc3RzIHVzZSBhIHNxdWFyZSAqLw0KLW9sIG9sIHVsLCAgICAgb2wgdWwgdWwsICAgICBvbCBtZW51IHVsLCAgICAgb2wgZGlyIHVsLA0KLW9sIG9sIG1lbnUsICAgb2wgdWwgbWVudSwgICBvbCBtZW51IG1lbnUsICAgb2wgZGlyIG1lbnUsDQotb2wgb2wgZGlyLCAgICBvbCB1bCBkaXIsICAgIG9sIG1lbnUgZGlyLCAgICBvbCBkaXIgZGlyLA0KLXVsIG9sIHVsLCAgICAgdWwgdWwgdWwsICAgICB1bCBtZW51IHVsLCAgICAgdWwgZGlyIHVsLA0KLXVsIG9sIG1lbnUsICAgdWwgdWwgbWVudSwgICB1bCBtZW51IG1lbnUsICAgdWwgZGlyIG1lbnUsDQotdWwgb2wgZGlyLCAgICB1bCB1bCBkaXIsICAgIHVsIG1lbnUgZGlyLCAgICB1bCBkaXIgZGlyLA0KLW1lbnUgb2wgdWwsICAgbWVudSB1bCB1bCwgICBtZW51IG1lbnUgdWwsICAgbWVudSBkaXIgdWwsDQotbWVudSBvbCBtZW51LCBtZW51IHVsIG1lbnUsIG1lbnUgbWVudSBtZW51LCBtZW51IGRpciBtZW51LA0KLW1lbnUgb2wgZGlyLCAgbWVudSB1bCBkaXIsICBtZW51IG1lbnUgZGlyLCAgbWVudSBkaXIgZGlyLA0KLWRpciBvbCB1bCwgICAgZGlyIHVsIHVsLCAgICBkaXIgbWVudSB1bCwgICAgZGlyIGRpciB1bCwNCi1kaXIgb2wgbWVudSwgIGRpciB1bCBtZW51LCAgZGlyIG1lbnUgbWVudSwgIGRpciBkaXIgbWVudSwNCi1kaXIgb2wgZGlyLCAgIGRpciB1bCBkaXIsICAgZGlyIG1lbnUgZGlyLCAgIGRpciBkaXIgZGlyIHsgbGlzdC1zdHlsZS10eXBlOiBzcXVhcmU7fQ0KLQ0KLS8qKg0KLSAqIFdlIGRvIG5vdCB3cml0ZSBjb2RlcyB0byBzdXBwb3J0IHNvbWUgZWxlbWVudHMuIFRoaXMgcGFydCBkZWZpbmVzIHByb3BlcnRpZXMgZm9yIHRoZW0gDQotICogdG8gaW1wcm92ZSB0aGUgbG9vayBvZiB0aGVzZSBlbGVtZW50cy4NCi0gKi8NCi1hcHBsZXQge2JvcmRlcjogMXB4IHNvbGlkO30NCi1maWVsZHNldCB7Ym9yZGVyOiAycHggZ3Jvb3ZlO30NCi1hcHBsZXQsaWZyYW1lIHtkaXNwbGF5OmlubGluZS1ibG9jazsgYm9yZGVyOjNweCBpbnNldDsgfQ0KLW9iamVjdCB7ZGlzcGxheTppbmxpbmUtYmxvY2s7Ym9yZGVyOjBweCBub25lO30NCi0NCi0NCi0vKiANCi0gKiBTZXRzIHJpZ2h0IG1hcmdpbiB0byBoYXZlIGdhcCBiZXR3ZWVuIHdpZGdldHMuDQotICovDQotaW5wdXQsdGV4dGFyZWEsYnV0dG9uCSB7IG1hcmdpbi1yaWdodDogMnB4O30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy9NRVRBLUlORi9NQU5JRkVTVC5NRgppbmRleCA2Nzc3ZjQ4Li42YmNhM2UzIDEwMDY0NAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL01FVEEtSU5GL01BTklGRVNULk1GCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTIsNyArMiw3IEBACiBCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCiBCdW5kbGUtTmFtZTogJUJ1bmRsZS1OYW1lLjAKIEJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuNDAwLnF1YWxpZmllcgorQnVuZGxlLVZlcnNpb246IDEuMC4zMDEucXVhbGlmaWVyCiBCdW5kbGUtQ2xhc3NQYXRoOiBjc3NlbmNvZGluZ3Rlc3RzLmphcgogQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy5DU1NFbmNvZGluZ1Rlc3RzUGx1Z2luCiBCdW5kbGUtVmVuZG9yOiAlQnVuZGxlLVZlbmRvci4wCkBAIC0xNSw1ICsxNSw1IEBACiAgb3JnLmp1bml0O2J1bmRsZS12ZXJzaW9uPSJbMy44LjAsNC4wLjApIiwKICBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUsCiAgb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZwotQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKK0VjbGlwc2UtTGF6eVN0YXJ0OiB0cnVlCiBCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjQKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdGVzdHMvZW5jb2RpbmcvY3NzL0NTU0hlYWRUb2tlbml6ZXJUZXN0ZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdGVzdHMvZW5jb2RpbmcvY3NzL0NTU0hlYWRUb2tlbml6ZXJUZXN0ZXIuamF2YQppbmRleCA0YWZmNmE2Li5kNjNmNjI0IDEwMDY0NAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL3Rlc3RzL2VuY29kaW5nL2Nzcy9DU1NIZWFkVG9rZW5pemVyVGVzdGVyLmphdmEKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy90ZXN0cy9lbmNvZGluZy9jc3MvQ1NTSGVhZFRva2VuaXplclRlc3Rlci5qYXZhCkBAIC0xOTUsMTEgKzE5NSwxMCBAQAogCQlhdCBvcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLmNzcy5DU1NIZWFkVG9rZW5pemVyVGVzdGVyLmRvVGVzdEZpbGUoQ1NTSGVhZFRva2VuaXplclRlc3Rlci5qYXZhOjUyKQogCQlhdCBvcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLmNzcy5DU1NIZWFkVG9rZW5pemVyVGVzdGVyLmRvVGVzdEZpbGUoQ1NTSGVhZFRva2VuaXplclRlc3Rlci5qYXZhOjMxKQogCQlhdCBvcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLmNzcy5DU1NIZWFkVG9rZW5pemVyVGVzdGVyLnRlc3RVVEYxNkJPTShDU1NIZWFkVG9rZW5pemVyVGVzdGVyLmphdmE6MTg2KQotCSovCiAKIAlwdWJsaWMgdm9pZCB0ZXN0VVRGMTZCT00oKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQkvLyBodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MjQzNzM1Ci0vLwkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInV0ZjE2Qk9NLmNzcyI7Ci0vLwkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIlVURi0xNiIpOworCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidXRmMTZCT00uY3NzIjsKKwkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIlVURi0xNiIpOwogCX0KKwkqLwogfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL3V0ZjE2Qk9NLmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy91dGYxNkJPTS5jc3MKaW5kZXggMGJhMzM4OS4uNzI0ZGI4YiAxMDA2NDQKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL3V0ZjE2Qk9NLmNzcworKysgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3MvdXRmMTZCT00uY3NzCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCmluZGV4IDQ3YTI1N2YuLjU1YzE0OTcgMTAwNjQ0Ci0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMiw3ICsyLDcgQEAKIEJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKIEJ1bmRsZS1OYW1lOiAlQnVuZGxlLU5hbWUuMAogQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cwotQnVuZGxlLVZlcnNpb246IDEuMC4zMDAucXVhbGlmaWVyCitCdW5kbGUtVmVyc2lvbjogMS4wLjIwMC5xdWFsaWZpZXIKIEJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMuQ1NTVUlUZXN0c1BsdWdpbgogQnVuZGxlLVZlbmRvcjogJUJ1bmRsZS1WZW5kb3IuMAogQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCkBAIC0yMSw0ICsyMSwzIEBACiBFY2xpcHNlLUxhenlTdGFydDogdHJ1ZQogQnVuZGxlLUNsYXNzUGF0aDogY3NzdWl0ZXN0cy5qYXIKIEJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNAotSW1wb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYjc1OWUxZi4uYTk5Nzc3MCAxMDA2NDQKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvYnVpbGQucHJvcGVydGllcwpAQCAtMyw3ICszLDYgQEAKICAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAogICAgICAgICAgICAgICAgc3JjLyxcCiAgICAgICAgICAgICAgICB0ZXN0LnhtbCxcCi0gICAgICAgICAgICAgICB0ZXN0cmVzb3VyY2VzLyxcCiAgICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcwogamFycy5jb21waWxlLm9yZGVyID0gY3NzdWl0ZXN0cy5qYXIKIHNvdXJjZS5jc3N1aXRlc3RzLmphciA9IHNyYy8KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdWkvdGVzdHMvQ1NTVUlUZXN0U3VpdGUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdWkvdGVzdHMvQ1NTVUlUZXN0U3VpdGUuamF2YQppbmRleCBlMWNjZTBkLi5lMWJlZjVjIDEwMDY0NAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL3VpL3Rlc3RzL0NTU1VJVGVzdFN1aXRlLmphdmEKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy91aS90ZXN0cy9DU1NVSVRlc3RTdWl0ZS5qYXZhCkBAIC0zLDcgKzMsNiBAQAogaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwogaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7CiAKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzLnZpZXdlci5UZXN0Q1NTQ29udGVudEFzc2lzdDsKIGltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzLnZpZXdlci5UZXN0Vmlld2VyQ29uZmlndXJhdGlvbkNTUzsKIAogcHVibGljIGNsYXNzIENTU1VJVGVzdFN1aXRlIGV4dGVuZHMgVGVzdFN1aXRlIHsKQEAgLTE2LDYgKzE1LDUgQEAKIAkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKEV4aXN0ZW5jZVRlc3QuY2xhc3MsICJDU1MgVUkgRXhpc3RlbmNlIFRlc3QiKSk7CiAJCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0Vmlld2VyQ29uZmlndXJhdGlvbkNTUy5jbGFzcykpOwogCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdEVkaXRvckNvbmZpZ3VyYXRpb25DU1MuY2xhc3MpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RDU1NDb250ZW50QXNzaXN0LmNsYXNzKSk7CiAJfQogfQkKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL3VpL3Rlc3RzL1Byb2plY3RVdGlsLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL3VpL3Rlc3RzL1Byb2plY3RVdGlsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2NTVmZDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy91aS90ZXN0cy9Qcm9qZWN0VXRpbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzOwotCi1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGb2xkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3REZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlUnVubmFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLQotcHVibGljIGNsYXNzIFByb2plY3RVdGlsIHsKLQlzdGF0aWMgdm9pZCBfY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKGZpbmFsIFN0cmluZyByb290RW50cnksIGZpbmFsIFN0cmluZyBmdWxsVGFyZ2V0UGF0aCkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlFbnVtZXJhdGlvbiBlbnRyaWVzID0gQ1NTVUlUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkuZ2V0RW50cnlQYXRocyhyb290RW50cnkpOwotCQl3aGlsZSAoZW50cmllcyAhPSBudWxsICYmIGVudHJpZXMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLQkJCVN0cmluZyBlbnRyeVBhdGggPSBlbnRyaWVzLm5leHRFbGVtZW50KCkudG9TdHJpbmcoKTsKLQkJCVN0cmluZyB0YXJnZXRQYXRoID0gbmV3IFBhdGgoZnVsbFRhcmdldFBhdGggKyAiLyIgKyBlbnRyeVBhdGguc3Vic3RyaW5nKHJvb3RFbnRyeS5sZW5ndGgoKSkpLnRvU3RyaW5nKCk7Ci0JCQlpZiAoZW50cnlQYXRoLmVuZHNXaXRoKCIvIikpIHsKLQkJCQlJRm9sZGVyIGZvbGRlciA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0Rm9sZGVyKG5ldyBQYXRoKHRhcmdldFBhdGgpKTsKLQkJCQlpZiAoIWZvbGRlci5leGlzdHMoKSkgewotCQkJCQlmb2xkZXIuY3JlYXRlKHRydWUsIHRydWUsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJCX0KLQkJCQlfY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKGVudHJ5UGF0aCwgdGFyZ2V0UGF0aCk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlfY29weUJ1bmRsZUVudHJ5SW50b1dvcmtzcGFjZShlbnRyeVBhdGgsIHRhcmdldFBhdGgpOwotCQkJfQotCQkJLy8gU3lzdGVtLm91dC5wcmludGxuKGVudHJ5UGF0aCArICIgLT4gIiArIHRhcmdldFBhdGgpOwotCQl9Ci0JfQotCi0Jc3RhdGljIElGaWxlIF9jb3B5QnVuZGxlRW50cnlJbnRvV29ya3NwYWNlKFN0cmluZyBlbnRyeW5hbWUsIFN0cmluZyBmdWxsUGF0aCkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlJRmlsZSBmaWxlID0gbnVsbDsKLQkJVVJMIGVudHJ5ID0gQ1NTVUlUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkuZ2V0RW50cnkoZW50cnluYW1lKTsKLQkJaWYgKGVudHJ5ICE9IG51bGwpIHsKLQkJCXRyeSB7Ci0JCQkJYnl0ZVtdIGIgPSBuZXcgYnl0ZVsyMDQ4XTsKLQkJCQlJbnB1dFN0cmVhbSBpbnB1dCA9IGVudHJ5Lm9wZW5TdHJlYW0oKTsKLQkJCQlCeXRlQXJyYXlPdXRwdXRTdHJlYW0gb3V0cHV0ID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOwotCQkJCWludCBpID0gLTE7Ci0JCQkJd2hpbGUgKChpID0gaW5wdXQucmVhZChiKSkgPiAtMSkgewotCQkJCQlvdXRwdXQud3JpdGUoYiwgMCwgaSk7Ci0JCQkJfQotCQkJCWZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUobmV3IFBhdGgoZnVsbFBhdGgpKTsKLQkJCQlpZiAoZmlsZSAhPSBudWxsKSB7Ci0JCQkJCWlmICghZmlsZS5leGlzdHMoKSkgewotCQkJCQkJZmlsZS5jcmVhdGUobmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKG91dHB1dC50b0J5dGVBcnJheSgpKSwgdHJ1ZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCQkJCX0KLQkJCQkJZWxzZSB7Ci0JCQkJCQlmaWxlLnNldENvbnRlbnRzKG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShvdXRwdXQudG9CeXRlQXJyYXkoKSksIHRydWUsIGZhbHNlLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCX0KLQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJfQotCQl9Ci0JCXJldHVybiBmaWxlOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSByb290RW50cnkgLSBhdm9pZCB0cmFpbGluZyBzZXBhcmF0b3JzCi0JICogQHBhcmFtIGZ1bGxUYXJnZXRQYXRoCi0JICovCi0JcHVibGljIHN0YXRpYyB2b2lkIGNvcHlCdW5kbGVFbnRyaWVzSW50b1dvcmtzcGFjZShmaW5hbCBTdHJpbmcgcm9vdEVudHJ5LCBmaW5hbCBTdHJpbmcgZnVsbFRhcmdldFBhdGgpIHsKLQkJSVdvcmtzcGFjZVJ1bm5hYmxlIHJ1bm5hYmxlID0gbmV3IElXb3Jrc3BhY2VSdW5uYWJsZSgpIHsKLQkJCXB1YmxpYyB2b2lkIHJ1bihJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJCQlfY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKHJvb3RFbnRyeSwgZnVsbFRhcmdldFBhdGgpOwotCQkJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5jaGVja3BvaW50KHRydWUpOwotCQkJfQotCQl9OwotCQl0cnkgewotCQkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnJ1bihydW5uYWJsZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCX0KLQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIAotCSAqIEBwYXJhbSBlbnRyeW5hbWUKLQkgKiAgICAgICAgICAgIHBhdGggcmVsYXRpdmUgdG8gVEVTVCBwbHVnaW4gc3RhcnRpbmcgdy8gYSAiLyIgKGVnLgotCSAqICAgICAgICAgICAgIi90ZXN0ZmlsZXMvYnVnbnVtYmVyL3N0cnV0cy1sb2dpYy50bGQiKQotCSAqIEBwYXJhbSBmdWxsUGF0aAotCSAqICAgICAgICAgICAgcGF0aCByZWxhdGl2ZSB0byBqdW5pdCB0ZXN0IHdvcmtwYWNlIChlZy4KLQkgKiAgICAgICAgICAgICIvbXlydW50aW1lcHJvai9zdHJ1dHMtbG9naWMudGxkIikKLQkgKiBAcmV0dXJuCi0JICovCi0JcHVibGljIHN0YXRpYyBJRmlsZSBjb3B5QnVuZGxlRW50cnlJbnRvV29ya3NwYWNlKGZpbmFsIFN0cmluZyBlbnRyeW5hbWUsIGZpbmFsIFN0cmluZyBmdWxsUGF0aCkgewotCQlmaW5hbCBJRmlsZSBmaWxlW10gPSBuZXcgSUZpbGVbMV07Ci0JCUlXb3Jrc3BhY2VSdW5uYWJsZSBydW5uYWJsZSA9IG5ldyBJV29ya3NwYWNlUnVubmFibGUoKSB7Ci0JCQlwdWJsaWMgdm9pZCBydW4oSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCQkJZmlsZVswXSA9IF9jb3B5QnVuZGxlRW50cnlJbnRvV29ya3NwYWNlKGVudHJ5bmFtZSwgZnVsbFBhdGgpOwotCQkJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5jaGVja3BvaW50KHRydWUpOwotCQkJfQotCQl9OwotCQl0cnkgewotCQkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnJ1bihydW5uYWJsZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCX0KLQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQlyZXR1cm4gZmlsZVswXTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIElQcm9qZWN0IGNyZWF0ZVByb2plY3QoU3RyaW5nIG5hbWUsIElQYXRoIGxvY2F0aW9uLCBTdHJpbmdbXSBuYXR1cmVJZHMpIHsKLQkJSVByb2plY3REZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5uZXdQcm9qZWN0RGVzY3JpcHRpb24obmFtZSk7Ci0JCWlmIChsb2NhdGlvbiAhPSBudWxsKSB7Ci0JCQlkZXNjcmlwdGlvbi5zZXRMb2NhdGlvbihsb2NhdGlvbik7Ci0JCX0KLQkJaWYgKG5hdHVyZUlkcyAhPSBudWxsKSB7Ci0JCQlkZXNjcmlwdGlvbi5zZXROYXR1cmVJZHMobmF0dXJlSWRzKTsKLQkJfQotCQlJUHJvamVjdCBwcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KG5hbWUpOwotCQl0cnkgewotCQkJcHJvamVjdC5jcmVhdGUoZGVzY3JpcHRpb24sIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJcHJvamVjdC5vcGVuKG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQl9Ci0JCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJcmV0dXJuIHByb2plY3Q7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy91aS90ZXN0cy92aWV3ZXIvVGVzdENTU0NvbnRlbnRBc3Npc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdWkvdGVzdHMvdmlld2VyL1Rlc3RDU1NDb250ZW50QXNzaXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiOTkwNGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy91aS90ZXN0cy92aWV3ZXIvVGVzdENTU0NvbnRlbnRBc3Npc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy52aWV3ZXI7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLkFzc2VydDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdERlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LmNvbnRlbnRhc3Npc3QuSUNvbXBsZXRpb25Qcm9wb3NhbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy51aS5TdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25DU1M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy51aS5pbnRlcm5hbC5jb250ZW50YXNzaXN0LkNTU0NvbnRlbnRBc3Npc3RQcm9jZXNzb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy5Qcm9qZWN0VXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXhjZXB0aW9ucy5SZXNvdXJjZUFscmVhZHlFeGlzdHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmV4Y2VwdGlvbnMuUmVzb3VyY2VJblVzZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwuU3RydWN0dXJlZFRleHRWaWV3ZXI7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0Q1NTQ29udGVudEFzc2lzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXByb3RlY3RlZCBTdHJpbmcgcHJvamVjdE5hbWUgPSBudWxsOwotCXByb3RlY3RlZCBTdHJpbmcgZmlsZU5hbWUgPSBudWxsOwotCXByb3RlY3RlZCBTdHJpbmcgcmVzb3VyY2VzRm9sZGVyID0gbnVsbDsKLQlwcml2YXRlIFN0cnVjdHVyZWRUZXh0Vmlld2VyIHNvdXJjZVZpZXdlciA9IG51bGw7Ci0JcHJvdGVjdGVkIElTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQgPSBudWxsOwotCXByaXZhdGUgSVN0cnVjdHVyZWRNb2RlbCBtb2RlbDsKLQlwcm90ZWN0ZWQgSUZpbGUgZmlsZSA9IG51bGw7Ci0KLQlwdWJsaWMgVGVzdENTU0NvbnRlbnRBc3Npc3QoKSB7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQotCQlzdXBlci5zZXRVcCgpOwotCQlwcm9qZWN0TmFtZSA9ICJDU1NDb250ZW50QXNzaXN0Rm9yTWVkaWEiOwotCQlmaWxlTmFtZSA9ICJtZWRpYWV4YW1wbGUuY3NzIjsKLQkJcmVzb3VyY2VzRm9sZGVyID0gIi90ZXN0cmVzb3VyY2VzIjsKLQotCQlTdHJpbmcgZmlsZVBhdGggPSBzZXR1cFByb2plY3QoKTsKLQkJZmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZSgKLQkJCQluZXcgUGF0aChmaWxlUGF0aCkpOwotCi0JCWlmIChmaWxlICE9IG51bGwgJiYgIWZpbGUuZXhpc3RzKCkpIHsKLQkJCUFzc2VydC5mYWlsKCJVbmFibGUgdG8gbG9jYXRlICIgKyBmaWxlICsgIi4iKTsKLQkJfQotCi0JCWxvYWRGaWxlKCk7Ci0KLQkJaW5pdGlhbGl6ZVNvdXJjZVZpZXdlcigpOwotCX0KLQotCXByaXZhdGUgdm9pZCBpbml0aWFsaXplU291cmNlVmlld2VyKCkgewotCQlpZiAoRGlzcGxheS5nZXRDdXJyZW50KCkgIT0gbnVsbCkgewotCi0JCQlTaGVsbCBzaGVsbCA9IG51bGw7Ci0JCQlDb21wb3NpdGUgcGFyZW50ID0gbnVsbDsKLQotCQkJaWYgKFBsYXRmb3JtVUkuaXNXb3JrYmVuY2hSdW5uaW5nKCkpIHsKLQkJCQlzaGVsbCA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0U2hlbGwoKTsKLQkJCX0gZWxzZSB7Ci0JCQkJc2hlbGwgPSBuZXcgU2hlbGwoRGlzcGxheS5nZXRDdXJyZW50KCkpOwotCQkJfQotCQkJcGFyZW50ID0gbmV3IENvbXBvc2l0ZShzaGVsbCwgU1dULk5PTkUpOwotCi0JCQkvLyBkdW1teSB2aWV3ZXIKLQkJCXNvdXJjZVZpZXdlciA9IG5ldyBTdHJ1Y3R1cmVkVGV4dFZpZXdlcihwYXJlbnQsIG51bGwsIG51bGwsIGZhbHNlLCBTV1QuTk9ORSk7Ci0JCX0gZWxzZSB7Ci0JCQlBc3NlcnQuZmFpbCgiVW5hYmxlIHRvIHJ1biB0aGUgdGVzdCBhcyBhIGRpc3BsYXkgbXVzdCBiZSBhdmFpbGFibGUuIik7Ci0JCX0KLQotCQljb25maWd1cmVTb3VyY2VWaWV3ZXIoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBjb25maWd1cmVTb3VyY2VWaWV3ZXIoKSB7Ci0JCXNvdXJjZVZpZXdlci5jb25maWd1cmUobmV3IFN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbkNTUygpKTsKLQotCQlzb3VyY2VWaWV3ZXIuc2V0RG9jdW1lbnQoZG9jdW1lbnQpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIGxvYWRGaWxlKCkgdGhyb3dzIFJlc291cmNlQWxyZWFkeUV4aXN0cywgUmVzb3VyY2VJblVzZSwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCW1vZGVsID0gbW9kZWxNYW5hZ2VyLmdldE1vZGVsRm9yRWRpdChmaWxlKTsKLQkJZG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgU3RyaW5nIHNldHVwUHJvamVjdCgpIHRocm93cyBFeGNlcHRpb257Ci0JCUlQcm9qZWN0RGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkubmV3UHJvamVjdERlc2NyaXB0aW9uKHByb2plY3ROYW1lKTsKLQotCQlJUHJvamVjdCBwcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KHByb2plY3ROYW1lKTsKLQkJdHJ5IHsKLQkJCXByb2plY3QuY3JlYXRlKGRlc2NyaXB0aW9uLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJCXByb2plY3Qub3BlbihuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJfSBjYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0KLQkJfQotCQlTdHJpbmcgZmlsZVBhdGggPSBwcm9qZWN0LmdldEZ1bGxQYXRoKCkuYWRkVHJhaWxpbmdTZXBhcmF0b3IoKS5hcHBlbmQoZmlsZU5hbWUpLnRvU3RyaW5nKCk7Ci0KLQkJUHJvamVjdFV0aWwuY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKHJlc291cmNlc0ZvbGRlciwgcHJvamVjdC5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCkpOwotCi0JCXJldHVybiBmaWxlUGF0aDsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci50ZWFyRG93bigpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDb250ZW50QXNzaXN0SW5zaWRlTWVkaWEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQotCQl0cnkgewotCQkJQ1NTQ29udGVudEFzc2lzdFByb2Nlc3NvciBwcm9jZXNzb3IgPSBuZXcgQ1NTQ29udGVudEFzc2lzdFByb2Nlc3NvcigpOwotCQkJSUNvbXBsZXRpb25Qcm9wb3NhbFtdIHByb3Bvc2FscyA9IHByb2Nlc3Nvci5jb21wdXRlQ29tcGxldGlvblByb3Bvc2Fscyhzb3VyY2VWaWV3ZXIsIDI0KTsKLQkJCWFzc2VydFRydWUoIk5vIHByb3Bvc2FscyBhdCBvZmZzZXQuIiwgcHJvcG9zYWxzLmxlbmd0aCA+IDApOwotCQkJSUNvbXBsZXRpb25Qcm9wb3NhbCBwcm9wb3NhbCA9IHByb3Bvc2Fsc1swXTsKLQkJCWFzc2VydEVxdWFscygiV3JvbmcgcHJvcG9zYWwgcmV0dXJuZWQgZm9yIEFDUk9OWU0uIiwgImF6aW11dGgiLCBwcm9wb3NhbC5nZXREaXNwbGF5U3RyaW5nKCkpOyAKLQkJfSBmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL21lZGlhZXhhbXBsZS5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvbWVkaWFleGFtcGxlLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWVjNGI4Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvbWVkaWFleGFtcGxlLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotQE1FRElBIHsKLQlBQ1JPTllNIHsKLQkJCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQuY29yZS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQuY29yZS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgppbmRleCBlMzYyYjEyLi44MzdmYWQxIDEwMDY0NAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0yLDcgKzIsNyBAQAogQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgogQnVuZGxlLU5hbWU6ICVCdW5kbGUtTmFtZS4wCiBCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUudGVzdHM7c2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjEwMC5xdWFsaWZpZXIKK0J1bmRsZS1WZXJzaW9uOiAxLjAuMC5xdWFsaWZpZXIKIEJ1bmRsZS1DbGFzc1BhdGg6IGR0ZGNvcmV0ZXN0cy5qYXIKIEJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLndzdC5kdGQuY29yZS50ZXN0cy5pbnRlcm5hbC5EVERDb3JlVGVzdHNQbHVnaW4KIEJ1bmRsZS1WZW5kb3I6ICVCdW5kbGUtVmVuZG9yLjAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2R0ZC9jb3JlL3Rlc3RzL0RURENvcmVUZXN0U3VpdGUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2R0ZC9jb3JlL3Rlc3RzL0RURENvcmVUZXN0U3VpdGUuamF2YQppbmRleCA3M2ViNDkwLi42ZDdhMjAyIDEwMDY0NAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9kdGQvY29yZS90ZXN0cy9EVERDb3JlVGVzdFN1aXRlLmphdmEKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvZHRkL2NvcmUvdGVzdHMvRFREQ29yZVRlc3RTdWl0ZS5qYXZhCkBAIC0xOSw4ICsxOSw2IEBACiAJCXN1cGVyKCJEVEQgQ29yZSBUZXN0U3VpdGUiKTsKIAkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFZlcmlmeVBsdWdpbi5jbGFzcykpOwogCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoRFREUGFyc2VyVGVzdC5jbGFzcykpOwotCQlhZGRUZXN0U3VpdGUoRFRERmlsZVRlc3QuY2xhc3MpOwotCQlhZGRUZXN0U3VpdGUoRFRETW9kZWxUZXN0cy5jbGFzcyk7CiAJfQogCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKIAkJcmV0dXJuIG5ldyBEVERDb3JlVGVzdFN1aXRlKCk7CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9kdGQvY29yZS90ZXN0cy9EVERGaWxlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvZHRkL2NvcmUvdGVzdHMvRFRERmlsZVRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmUwNTIzOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9kdGQvY29yZS90ZXN0cy9EVERGaWxlVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIERhdmlkIENhcnZlciAoU1RBUikgLSBidWcgMjQ1MjE2IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLnRlc3RzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLmludGVybmFsLkRUREZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLmludGVybmFsLkRURE5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLmludGVybmFsLmRvY3VtZW50LkRURE1vZGVsSW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuQ29udGVudFR5cGVJZEZvckRURDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1wdWJsaWMgY2xhc3MgRFRERmlsZVRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwdWJsaWMgRFRERmlsZVRlc3QoKSB7Ci0JfQotCi0JcHVibGljIERUREZpbGVUZXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0VG9wTGV2ZWxOb2RlQXQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQlEVERNb2RlbEltcGwgbW9kZWwgPSAoRFRETW9kZWxJbXBsKW1vZGVsTWFuYWdlci5jcmVhdGVVbk1hbmFnZWRTdHJ1Y3R1cmVkTW9kZWxGb3IoQ29udGVudFR5cGVJZEZvckRURC5Db250ZW50VHlwZUlEX0RURCk7Ci0JCVN0cmluZyBkdGRUZXh0ID0gIjwhRUxFTUVOVCBOZXdFbGVtZW50MyAoI1BDREFUQSk+PCFFTlRJVFkgJSBOZXdFbnRpdHkgU1lTVEVNIFwiXCIgPiI7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJZG9jdW1lbnQuc2V0KGR0ZFRleHQpOwotCQkKLQkJbW9kZWwuc2V0U3RydWN0dXJlZERvY3VtZW50KGRvY3VtZW50KTsKLQkJRFRERmlsZSBkdGRGaWxlID0gbW9kZWwuZ2V0RFRERmlsZSgpOwotCQkKLQkJRFRETm9kZSBkdGROb2RlID0gZHRkRmlsZS5nZXRUb3BMZXZlbE5vZGVBdCgzMik7Ci0JCWFzc2VydE5vdE51bGwoIk5vZGUgaXMgbnVsbCIsIGR0ZE5vZGUpOwotCQlhc3NlcnRFcXVhbHMoIlVuZXhwZWN0ZWQgTm9kZSBUeXBlLiIsICAiTmV3RW50aXR5IiwgZHRkTm9kZS5nZXROYW1lKCkpOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvZHRkL2NvcmUvdGVzdHMvRFRETW9kZWxUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvZHRkL2NvcmUvdGVzdHMvRFRETW9kZWxUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ODllNjhmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2R0ZC9jb3JlL3Rlc3RzL0RURE1vZGVsVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgU3RhbmRhcmRzIGZvciBUZWNobm9sb2d5IGluIEF1dG9tb3RpdmUgUmV0YWlsIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyNDUyMTYgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUudGVzdHM7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUuaW50ZXJuYWwuZG9jdW1lbnQuRFRETW9kZWxJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5kdGQuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9yRFREOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1wdWJsaWMgY2xhc3MgRFRETW9kZWxUZXN0cyAgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Y3JlYXRlVW5tYW5hZ2VkRFRETW9kZWwoKSB7Ci0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG1vZGVsTWFuYWdlci5jcmVhdGVVbk1hbmFnZWRTdHJ1Y3R1cmVkTW9kZWxGb3IoQ29udGVudFR5cGVJZEZvckRURC5Db250ZW50VHlwZUlEX0RURCk7Ci0JCWFzc2VydFRydWUoIkRpZCBub3QgZ2V0IERURCBNb2RlbCIsIG1vZGVsIGluc3RhbmNlb2YgRFRETW9kZWxJbXBsICk7Ci0JfQotCQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy8uY2xhc3NwYXRoCmluZGV4IDIzZTYxZmQuLmUyYmRjMTYgMTAwNjQ0Ci0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvLmNsYXNzcGF0aAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLy5jbGFzc3BhdGgKQEAgLTEsNyArMSw3IEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgogPGNsYXNzcGF0aD4KIAk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS41Ii8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNCIvPgogCTxjbGFzc3BhdGhlbnRyeSBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiIGtpbmQ9ImNvbiI+CiAJCTxhY2Nlc3NydWxlcz4KIAkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49Im9yZy9lY2xpcHNlL3dzdC8qKiIvPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwppbmRleCA1MTM0MmUwLi41ZjdiYWM3IDEwMDY0NAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpAQCAtMSw0ICsxLDQgQEAKLSNUdWUgQXByIDIxIDE5OjAxOjUyIEVEVCAyMDA5CisjU2F0IEF1ZyAxOSAxNjozMTo0MyBFRFQgMjAwNgogZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKIG9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuY2xlYW5PdXRwdXRGb2xkZXI9Y2xlYW4KIG9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuZHVwbGljYXRlUmVzb3VyY2VUYXNrPXdhcm5pbmcKQEAgLTcsMjQgKzcsMjQgQEAKIG9yZy5lY2xpcHNlLmpkdC5jb3JlLmNpcmN1bGFyQ2xhc3NwYXRoPWVycm9yCiBvcmcuZWNsaXBzZS5qZHQuY29yZS5jbGFzc3BhdGguZXhjbHVzaW9uUGF0dGVybnM9ZW5hYmxlZAogb3JnLmVjbGlwc2UuamR0LmNvcmUuY2xhc3NwYXRoLm11bHRpcGxlT3V0cHV0TG9jYXRpb25zPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS4yCiBvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjQKIG9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKIG9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKIG9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKIG9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRvYy5jb21tZW50LnN1cHBvcnQ9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIubWF4UHJvYmxlbVBlclVuaXQ9MjAwCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5tYXhQcm9ibGVtUGVyVW5pdD0xMDAKIG9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPXdhcm5pbmcKIG9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz1pZ25vcmUKIG9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249aWdub3JlCiBvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAogb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1lbmFibGVkCiBvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPXdhcm5pbmcKIG9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj13YXJuaW5nCiBvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQogb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPWlnbm9yZQogb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9ZXJyb3IKQEAgLTc1LDYgKzc1LDYgQEAKIG9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZAogb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPWVycm9yCiBvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmluY29tcGF0aWJsZUpES0xldmVsPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjMKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmluY29tcGF0aWJsZUpES0xldmVsPWlnbm9yZQogb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wbGV0ZUNsYXNzcGF0aD1lcnJvcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKaW5kZXggOWRiZTgxMC4uZmVlYjk4YiAxMDA2NDQKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0yLDcgKzIsNyBAQAogQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgogQnVuZGxlLU5hbWU6ICVCdW5kbGUtTmFtZS4wCiBCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzCi1CdW5kbGUtVmVyc2lvbjogMS4wLjMwMC5xdWFsaWZpZXIKK0J1bmRsZS1WZXJzaW9uOiAxLjAuMjAwLnF1YWxpZmllcgogQnVuZGxlLUNsYXNzUGF0aDogZHRkdWl0ZXN0cy5qYXIKIEJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMuaW50ZXJuYWwuRFREVUlUZXN0c1BsdWdpbgogQnVuZGxlLVZlbmRvcjogJUJ1bmRsZS1WZW5kb3IuMApAQCAtMjUsNSArMjUsNCBAQAogIG9yZy5qdW5pdDtidW5kbGUtdmVyc2lvbj0iWzMuOC4wLDQuMC4wKSIsCiAgY29tLmlibS5pY3UKIEVjbGlwc2UtTGF6eVN0YXJ0OiB0cnVlCi1CdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41CitCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjQKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9kdGQvdWkvdGVzdHMvRFREVUlQcmVmZXJlbmNlc1Rlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9kdGQvdWkvdGVzdHMvRFREVUlQcmVmZXJlbmNlc1Rlc3QuamF2YQppbmRleCAzMTcwZjdmLi5lMzMwZWU4IDEwMDY0NAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvZHRkL3VpL3Rlc3RzL0RURFVJUHJlZmVyZW5jZXNUZXN0LmphdmEKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2R0ZC91aS90ZXN0cy9EVERVSVByZWZlcmVuY2VzVGVzdC5qYXZhCkBAIC0yMywxNCArMjMsMTQgQEAKICAqIFRoZSBwdXJwb3NlIG9mIHRoaXMgdGVzdCBpcyB0byB2ZXJpZnkgdGhlIHZhbGlkaXR5IG9mIHRoZSBIVE1MIFNvdXJjZQogICogZWRpdG9yIHByZWZlcmVuY2VzLiBUZXN0cyBpbmNsdWRlIHNldHRpbmcvZ2V0dGluZyBwcmVmZXJlbmNlcy4KICAqIAotICogTk9URTogVGhpcyB0ZXN0IHNob3VsZCBiZSBwZXJmb3JtZWQgb24gYSBjbGVhbiB3b3Jrc3BhY2UuIElmIHBlcmZvcm1lZCBvbgorICogTk9URTogVGhpcyB0ZXN0IHNob3VsZCBiZSBwcmVmb3JtZWQgb24gYSBjbGVhbiB3b3Jrc3BhY2UuIElmIHBlcmZvcm1lZCBvbgogICogYW4gZXhpc3Rpbmcgd29ya3NwYWNlLCB0aGlzIHRlc3Qgd2lsbCBtYW5pcHVsYXRlIHByZWZlcmVuY2VzIGluIHRoZQogICogd29ya3NwYWNlLCB0aG91Z2ggYXR0ZW1wdHMgd2lsbCBiZSBtYWRlIHRvIHJlc3RvcmUgb3JpZ2luYWwgdmFsdWVzIGFmdGVyCiAgKiB0ZXN0aW5nLgogICovCiBwdWJsaWMgY2xhc3MgRFREVUlQcmVmZXJlbmNlc1Rlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CiAJLyoqCi0JICogVGVzdHMgZXhpc3RlbmNlIG9mIHByZWZlcmVuY2UgdmFsdWVzIHdoZW4gZ2V0dGluZyBwcmVmZXJlbmNlIHZhbHVlcworCSAqIFRlc3RzIGV4aXN0YW5jZSBvZiBwcmVmZXJlbmNlIHZhbHVlcyB3aGVuIGdldHRpbmcgcHJlZmVyZW5jZSB2YWx1ZXMKIAkgKiB0aHJvdWdoIFBsYXRmb3JtLmdldFByZWZlcmVuY2VzU2VydmljZSgpCiAJICovCiAJcHVibGljIHZvaWQgdGVzdEJ1bmRsZUdldFByZWZlcmVuY2VzKCkgewpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2R0ZC91aS90ZXN0cy9EVERVSVRlc3RTdWl0ZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2R0ZC91aS90ZXN0cy9EVERVSVRlc3RTdWl0ZS5qYXZhCmluZGV4IGI2YzI5YTIuLjc3MTBhNTQgMTAwNjQ0Ci0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9kdGQvdWkvdGVzdHMvRFREVUlUZXN0U3VpdGUuamF2YQorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvZHRkL3VpL3Rlc3RzL0RURFVJVGVzdFN1aXRlLmphdmEKQEAgLTEsNSArMSw1IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwogICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCiAgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdApAQCAtMTMsNyArMTMsNiBAQAogaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwogaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7CiAKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLnBsdWdpbi5UZXN0UGx1Z2luWE1MUmVxdWlyZW1lbnRzOwogaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMudmlld2VyLlRlc3RWaWV3ZXJDb25maWd1cmF0aW9uRFREOwogCiAKQEAgLTI5LDYgKzI4LDUgQEAKIAkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKERURFVJUHJlZmVyZW5jZXNUZXN0LmNsYXNzKSk7CiAJCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0Vmlld2VyQ29uZmlndXJhdGlvbkRURC5jbGFzcykpOwogCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdEVkaXRvckNvbmZpZ3VyYXRpb25EVEQuY2xhc3MpKTsKLQkJYWRkVGVzdFN1aXRlKFRlc3RQbHVnaW5YTUxSZXF1aXJlbWVudHMuY2xhc3MpOwogCX0KIH0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9kdGQvdWkvdGVzdHMvcGx1Z2luL1Rlc3RQbHVnaW5YTUxSZXF1aXJlbWVudHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9kdGQvdWkvdGVzdHMvcGx1Z2luL1Rlc3RQbHVnaW5YTUxSZXF1aXJlbWVudHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2NkMjQzZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvZHRkL3VpL3Rlc3RzL3BsdWdpbi9UZXN0UGx1Z2luWE1MUmVxdWlyZW1lbnRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqIENvcHlyaWdodCAoYykgMjAwOSBTdGFuZGFyZCBmb3IgVGVjaG5vbG9neSBpbiBBdXRvbW90aXZlIFJldGFpbCBhbmQgb3RoZXJzLg0KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQotICogDQotICogQ29udHJpYnV0b3JzOg0KLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI3MTc4NCAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy5wbHVnaW47DQotDQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247DQotaW1wb3J0IGphdmEubmV0LlVSTDsNCi0NCi1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyOw0KLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXJGYWN0b3J5Ow0KLWltcG9ydCBqYXZheC54bWwueHBhdGguWFBhdGg7DQotaW1wb3J0IGphdmF4LnhtbC54cGF0aC5YUGF0aENvbnN0YW50czsNCi1pbXBvcnQgamF2YXgueG1sLnhwYXRoLlhQYXRoRXhwcmVzc2lvbjsNCi1pbXBvcnQgamF2YXgueG1sLnhwYXRoLlhQYXRoRmFjdG9yeTsNCi0NCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOw0KLQ0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuRmlsZUxvY2F0b3I7DQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5kdGQudWkuaW50ZXJuYWwuRFREVUlQbHVnaW47DQotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50Ow0KLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50Ow0KLQ0KLXB1YmxpYyBjbGFzcyBUZXN0UGx1Z2luWE1MUmVxdWlyZW1lbnRzIGV4dGVuZHMgVGVzdENhc2V7DQotDQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fWE1MID0gInBsdWdpbi54bWwiOw0KLQkNCi0JRG9jdW1lbnQgcGx1Z2luRG9jID0gbnVsbDsNCi0JWFBhdGggeHBhdGggPSBudWxsOw0KLQ0KLQlwdWJsaWMgVGVzdFBsdWdpblhNTFJlcXVpcmVtZW50cygpIHsNCi0JCXN1cGVyKCk7DQotCX0NCi0JDQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7DQotCQlzdXBlci5zZXRVcCgpOw0KLQkJDQotCQlsb2FkUGx1Z2luWE1MKCk7DQotCQlpbml0WFBhdGgoKTsNCi0JfQ0KLQkNCi0JcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsNCi0JCXN1cGVyLnRlYXJEb3duKCk7DQotCQlwbHVnaW5Eb2MgPSBudWxsOw0KLQkJeHBhdGggPSBudWxsOw0KLQl9DQotDQotCXByaXZhdGUgdm9pZCBpbml0WFBhdGgoKSB7DQotCQlYUGF0aEZhY3RvcnkgeHBhdGhGYWN0b3J5ID0gWFBhdGhGYWN0b3J5Lm5ld0luc3RhbmNlKCk7DQotCQl4cGF0aCA9IHhwYXRoRmFjdG9yeS5uZXdYUGF0aCgpOw0KLQl9DQotDQotCXByaXZhdGUgdm9pZCBsb2FkUGx1Z2luWE1MKCkgdGhyb3dzIEV4Y2VwdGlvbiB7DQotCQlVUkwgdXJsID0gZ2V0VGVzdEZpbGUoUExVR0lOX1hNTCk7DQotCQl1cmwub3BlblN0cmVhbSgpOw0KLQkJRG9jdW1lbnRCdWlsZGVyRmFjdG9yeSBkb21GYWN0b3J5ID0gRG9jdW1lbnRCdWlsZGVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpOw0KLQkJRG9jdW1lbnRCdWlsZGVyIGRvbUJ1aWxkZXIgPSBkb21GYWN0b3J5Lm5ld0RvY3VtZW50QnVpbGRlcigpOw0KLQkJcGx1Z2luRG9jID0gZG9tQnVpbGRlci5wYXJzZSh1cmwub3BlblN0cmVhbSgpKTsNCi0JfQ0KLQkNCi0JcHJvdGVjdGVkIFVSTCBnZXRJbnN0YWxsTG9jYXRpb24oU3RyaW5nIHBhdGgpIHsNCi0JCVVSTCBpbnN0YWxsTG9jYXRpb24gPSBEVERVSVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkuZ2V0RW50cnkocGF0aCk7DQotCQlVUkwgcmVzb2x2ZWRMb2NhdGlvbiA9IG51bGw7DQotCQl0cnkgew0KLQkJCXJlc29sdmVkTG9jYXRpb24gPSBGaWxlTG9jYXRvci5yZXNvbHZlKGluc3RhbGxMb2NhdGlvbik7DQotCQl9DQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgew0KLQkJCS8vIGltcG9zc2libGUNCi0JCQl0aHJvdyBuZXcgRXJyb3IoZSk7DQotCQl9DQotCQlyZXR1cm4gcmVzb2x2ZWRMb2NhdGlvbjsNCi0JfQ0KLQ0KLQlwcm90ZWN0ZWQgVVJMIGdldFRlc3RGaWxlKFN0cmluZyBmaWxlcGF0aCkgew0KLQkJVVJMIGluc3RhbGxVUkwgPSBnZXRJbnN0YWxsTG9jYXRpb24oIi8iICsgZmlsZXBhdGgpOw0KLQkJcmV0dXJuIGluc3RhbGxVUkw7DQotCX0NCi0JDQotCQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RFREVG9vbFRpcEV4aXN0cygpIHRocm93cyBFeGNlcHRpb24gew0KLQkJU3RyaW5nIHhwYXRoU3RyaW5nID0gIi8vbWVudUNvbnRyaWJ1dGlvbltAbG9jYXRpb25VUkkgPSAndG9vbGJhcjpvcmcuZWNsaXBzZS53c3QueG1sLnVpLnBlcnNwZWN0aXZlLk5ld0ZpbGVUb29sQmFyJ10vY29tbWFuZFtAaWQgPSAnb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS5uZXdEVERGaWxlJ10iOw0KLQkJWFBhdGhFeHByZXNzaW9uIHhwYXRoRXhwciA9IHhwYXRoLmNvbXBpbGUoeHBhdGhTdHJpbmcpOw0KLQkJRWxlbWVudCBlbGVtZW50ID0gKEVsZW1lbnQpIHhwYXRoRXhwci5ldmFsdWF0ZShwbHVnaW5Eb2MuZ2V0RG9jdW1lbnRFbGVtZW50KCksIFhQYXRoQ29uc3RhbnRzLk5PREUpOw0KLQkJU3RyaW5nIHRvb2xUaXAgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgidG9vbHRpcCIpOw0KLQkJYXNzZXJ0RXF1YWxzKCJVbmV4cGVjdGVkIHZhbHVlIGZvciBEVEQgdG9vbHRpcCIsICIlRFREX05ld19jb250ZXh0X3R5cGVfRXh0ZW5zaW9uX0VsZW1lbnQubmFtZSIsIHRvb2xUaXApOw0KLQl9DQotDQotfQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvLmN2c2lnbm9yZSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvLmN2c2lnbm9yZQppbmRleCAzYTc0ZmViLi44ZmRlMjM0IDEwMDY0NAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLy5jdnNpZ25vcmUKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy8uY3ZzaWdub3JlCkBAIC01LDQgKzUsMyBAQAogaHRtbGNvcmV0ZXN0cy5qYXIKIHRlbXAuZm9sZGVyCiBqYXZhQ29tcGlsZXIuaHRtbGNvcmV0ZXN0cy5qYXIuYXJncwotUGFyc2VyUmVzdWx0czIwMDgqClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKaW5kZXggY2JmYTk2Ni4uNTQzNGVjNSAxMDA2NDQKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0yLDcgKzIsNyBAQAogQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgogQnVuZGxlLU5hbWU6ICVCdW5kbGUtTmFtZS4wCiBCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzO3NpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC4zMDAucXVhbGlmaWVyCitCdW5kbGUtVmVyc2lvbjogMS4wLjIwMC5xdWFsaWZpZXIKIEJ1bmRsZS1DbGFzc1BhdGg6IGh0bWxjb3JldGVzdHMuamFyCiBCdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLkhUTUxDb3JlVGVzdHNQbHVnaW4KIEJ1bmRsZS1WZW5kb3I6ICVCdW5kbGUtVmVuZG9yLjAKQEAgLTI3LDQgKzI3LDMgQEAKICBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcwogRWNsaXBzZS1MYXp5U3RhcnQ6IHRydWUKIEJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNAotQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvYnVpbGQucHJvcGVydGllcwppbmRleCBkZDQwNGMxLi5hMDEzZDQ5IDEwMDY0NAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0xMSw2ICsxMSw3IEBACiBzb3VyY2UuaHRtbGNvcmV0ZXN0cy5qYXIgPSBzcmMvCiBvdXRwdXQuaHRtbGNvcmV0ZXN0cy5qYXIgPSBiaW4vCiBiaW4uaW5jbHVkZXMgPSBodG1sY29yZXRlc3RzLmphcixcCisgICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKICAgICAgICAgICAgICAgIHRlc3QueG1sLFwKICAgICAgICAgICAgICAgIFBhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3LyxcCiAgICAgICAgICAgICAgICBNRVRBLUlORi8sXApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9wbHVnaW4ueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9wbHVnaW4ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjNmFlZjAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3BsdWdpbi54bWwKQEAgLTAsMCArMSw5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgorPHBsdWdpbj4KKworCTwhLS0gbGVhdmUgdGhpcyBlbXB0eSBwbHVnaW4ueG1sIGhlcmUgZm9yIG5vdywgCisJCWJlY2F1c2Ugd2UgZG8gYSBmdW5reSB0aGluZyAKKwkJdG8gZmluZCBpdCBkdXJpbmcgdGhlIHRlc3RzIC0tPgorCis8L3BsdWdpbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvdXRpbHMvRmlsZVV0aWwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvdXRpbHMvRmlsZVV0aWwuamF2YQppbmRleCA3N2I5NzRmLi43YjI0NWEyIDEwMDY0NAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3V0aWxzL0ZpbGVVdGlsLmphdmEKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy91dGlscy9GaWxlVXRpbC5qYXZhCkBAIC02MiwxMSArNjIsMTUgQEAKIAkJaWYgKHByZXZpb3VzUmVzdWx0c0RpcmVjdG9yeSA9PSBudWxsICYmIG5vdFRyaWVkWWV0KSB7CiAJCQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKFBMVUdJTl9JRCk7CiAJCQlVUkwgdXJsID0gYnVuZGxlLmdldEVudHJ5KCIvIik7IC8vJE5PTi1OTFMtMSQKLQotCQkJVVJMIGZpbmFsdXJsID0gRmlsZUxvY2F0b3IudG9GaWxlVVJMKHVybCk7Ci0JCQlTdHJpbmcgZmluYWxGaWxlID0gZmluYWx1cmwuZ2V0UGF0aCgpOwotCi0JCQlGaWxlIHBsdWdpbkhvbWVEaXIgPSBuZXcgRmlsZShmaW5hbEZpbGUpOworCQkJLy9TdHJpbmcgaW5zdGFsbFBhdGggPSB1cmwuZ2V0UGF0aCgpOworCQkJLy8gYWRkIGtub3duIGZpbGUgc28gVVJMIG1ldGhvZCBiZWxvdyBjYW4gYmUgdXNlZAorCQkJLy8gKGRvZXNuJ3Qgc2VlbSB0byB3b3JrIGZvciBkaXJlY3Rvcnk/KQorCQkJVVJMIHRvdGFsVVJMID0gbmV3IFVSTCh1cmwsICJwbHVnaW4ueG1sIik7CisJCQlVUkwgZmluYWx1cmwgPSBGaWxlTG9jYXRvci50b0ZpbGVVUkwodG90YWxVUkwpOworCQkJU3RyaW5nIGZpbmFsRmlsZSA9IGZpbmFsdXJsLmdldEZpbGUoKTsKKwkJCUZpbGUgZmlsZSA9IG5ldyBGaWxlKGZpbmFsRmlsZSk7CisJCQlTdHJpbmcgZmluYWxQYXRoID0gZmlsZS5nZXRQYXJlbnQoKTsKKwkJCUZpbGUgcGx1Z2luSG9tZURpciA9IG5ldyBGaWxlKGZpbmFsUGF0aCk7CiAJCQlGaWxlbmFtZUZpbHRlciBkaXJGaWx0ZXIgPSBuZXcgRGlyRmlsZW5hbWVGaWx0ZXIoZGlyZWN0b3J5Um9vdE5hbWUpOwogCQkJRmlsZVtdIGFsbERpcnMgPSBwbHVnaW5Ib21lRGlyLmxpc3RGaWxlcyhkaXJGaWx0ZXIpOwogCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL01FVEEtSU5GL01BTklGRVNULk1GCmluZGV4IDZkNzRjODUuLjllMzhhYmIgMTAwNjQ0Ci0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL01FVEEtSU5GL01BTklGRVNULk1GCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0yLDcgKzIsNyBAQAogQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgogQnVuZGxlLU5hbWU6ICVCdW5kbGUtTmFtZS4wCiBCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZwotQnVuZGxlLVZlcnNpb246IDEuMC4zMDAucXVhbGlmaWVyCitCdW5kbGUtVmVyc2lvbjogMS4wLjIwMS5xdWFsaWZpZXIKIEJ1bmRsZS1DbGFzc1BhdGg6IGh0bWxlbmNvZGluZ3Rlc3RzLmphcgogQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcuSFRNTEVuY29kaW5nVGVzdHNQbHVnaW4KIEJ1bmRsZS1WZW5kb3I6ICVCdW5kbGUtVmVuZG9yLjAKQEAgLTE2LDUgKzE2LDUgQEAKICBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUsCiAgb3JnLmp1bml0O2J1bmRsZS12ZXJzaW9uPSJbMy44LjAsNC4wLjApIiwKICBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUKLUJ1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5CitFY2xpcHNlLUxhenlTdGFydDogdHJ1ZQogQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS40CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdGVzdHMvZW5jb2RpbmcvaHRtbC9IVE1MSGVhZFRva2VuaXplclRlc3Rlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3Rlc3RzL2VuY29kaW5nL2h0bWwvSFRNTEhlYWRUb2tlbml6ZXJUZXN0ZXIuamF2YQppbmRleCBhY2E1OGE1Li4xODk2M2YyIDEwMDY0NAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdGVzdHMvZW5jb2RpbmcvaHRtbC9IVE1MSGVhZFRva2VuaXplclRlc3Rlci5qYXZhCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC90ZXN0cy9lbmNvZGluZy9odG1sL0hUTUxIZWFkVG9rZW5pemVyVGVzdGVyLmphdmEKQEAgLTMwMiwxMSArMzAyLDEwIEBACiAJCWF0IG9yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nLmh0bWwuSFRNTEhlYWRUb2tlbml6ZXJUZXN0ZXIuZG9UZXN0RmlsZShIVE1MSGVhZFRva2VuaXplclRlc3Rlci5qYXZhOjU3KQogCQlhdCBvcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy5odG1sLkhUTUxIZWFkVG9rZW5pemVyVGVzdGVyLmRvVGVzdEZpbGUoSFRNTEhlYWRUb2tlbml6ZXJUZXN0ZXIuamF2YTozNykKIAkJYXQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcuaHRtbC5IVE1MSGVhZFRva2VuaXplclRlc3Rlci50ZXN0VVRGMTZCT00oSFRNTEhlYWRUb2tlbml6ZXJUZXN0ZXIuamF2YToyOTMpCi0JKi8KIAogCXB1YmxpYyB2b2lkIHRlc3RVVEYxNkJPTSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCS8vIGh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0yNDM3MzUKLS8vCQlTdHJpbmcgZmlsZW5hbWUgPSB0aGlzLmZpbGVMb2NhdGlvbiArICJ1dGYxNkJPTS5odG1sIjsKLS8vCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiVVRGLTE2Iik7CisJCVN0cmluZyBmaWxlbmFtZSA9IHRoaXMuZmlsZUxvY2F0aW9uICsgInV0ZjE2Qk9NLmh0bWwiOworCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiVVRGLTE2Iik7CiAJfQorCSovCiB9CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC91dGYxNkJPTS5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvdXRmMTZCT00uaHRtbAppbmRleCA3MTkxNWY0Li5kOGQ2MmRlIDEwMDY0NAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC91dGYxNkJPTS5odG1sCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL3V0ZjE2Qk9NLmh0bWwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgppbmRleCAyODk4YjQ4Li43OTc4Zjg4IDEwMDY0NAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMiw3ICsyLDcgQEAKIEJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKIEJ1bmRsZS1OYW1lOiAlQnVuZGxlLU5hbWUuMAogQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHM7IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC4zMDAucXVhbGlmaWVyCitCdW5kbGUtVmVyc2lvbjogMS4wLjIwMC5xdWFsaWZpZXIKIEJ1bmRsZS1DbGFzc1BhdGg6IGh0bWx1aXRlc3RzLmphcgogQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMuSFRNTFVJVGVzdHNQbHVnaW4KIEJ1bmRsZS1WZW5kb3I6ICVCdW5kbGUtVmVuZG9yLjAKQEAgLTI1LDQgKzI1LDMgQEAKICBjb20uaWJtLmljdQogRWNsaXBzZS1MYXp5U3RhcnQ6IHRydWUKIEJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNAotQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC91aS90ZXN0cy9UZXN0RWRpdG9yQ29uZmlndXJhdGlvbkhUTUwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC91aS90ZXN0cy9UZXN0RWRpdG9yQ29uZmlndXJhdGlvbkhUTUwuamF2YQppbmRleCBjMDE3YzkxLi44ZThmYjAyIDEwMDY0NAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdWkvdGVzdHMvVGVzdEVkaXRvckNvbmZpZ3VyYXRpb25IVE1MLmphdmEKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3VpL3Rlc3RzL1Rlc3RFZGl0b3JDb25maWd1cmF0aW9uSFRNTC5qYXZhCkBAIC0yOSwyNyArMjksMjcgQEAKIAkJT2JqZWN0IG8gPSBFeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyLmdldEluc3RhbmNlKCkuZ2V0Q29uZmlndXJhdGlvbihFeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyLlNPVVJDRVZJRVdFUkNPTkZJR1VSQVRJT04sIENvbnRlbnRUeXBlSWRGb3JIVE1MLkNvbnRlbnRUeXBlSURfSFRNTCk7CiAJCWFzc2VydE5vdE51bGwoIm5vIHNvdXJjZSB2aWV3ZXIgY29uZmlndXJhdGlvbiBmb3IgIiArIENvbnRlbnRUeXBlSWRGb3JIVE1MLkNvbnRlbnRUeXBlSURfSFRNTCwgbyk7CiAJCS8vIGNoZWNrIGZvciBvdmVyLXF1YWxpZmllZCBzdWJjbGFzc2VzCi0JCWFzc2VydEVxdWFscygidW5leHBlY3RlZCBzb3VyY2Ugdmlld2VyIGNvbmZpZ3VyYXRpb24gZm9yICIgKyBDb250ZW50VHlwZUlkRm9ySFRNTC5Db250ZW50VHlwZUlEX0hUTUwsIFN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbkhUTUwuY2xhc3MsIG8uZ2V0Q2xhc3MoKSk7CisJCWFzc2VydEVxdWFscygidW5leHBlY3RlZCBzb3VyY2Ugdmlld2VyIGNvbmZpZ3VyYXRpb24gZm9yICIgKyBDb250ZW50VHlwZUlkRm9ySFRNTC5Db250ZW50VHlwZUlEX0hUTUwsIG8uZ2V0Q2xhc3MoKSwgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uSFRNTC5jbGFzcyk7CiAJfQogCiAJcHVibGljIHZvaWQgdGVzdEdldENvbnRlbnRPdXRsaW5lVmlld2VyQ29uZmlndXJhdGlvbigpIHsKIAkJT2JqZWN0IG8gPSBFeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyLmdldEluc3RhbmNlKCkuZ2V0Q29uZmlndXJhdGlvbihFeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyLkNPTlRFTlRPVVRMSU5FQ09ORklHVVJBVElPTiwgQ29udGVudFR5cGVJZEZvckhUTUwuQ29udGVudFR5cGVJRF9IVE1MKTsKIAkJYXNzZXJ0Tm90TnVsbCgibm8gY29udGVudCBvdXRsaW5lIHZpZXdlciBjb25maWd1cmF0aW9uIGZvciAiICsgQ29udGVudFR5cGVJZEZvckhUTUwuQ29udGVudFR5cGVJRF9IVE1MLCBvKTsKIAkJLy8gY2hlY2sgZm9yIG92ZXItcXVhbGlmaWVkIHN1YmNsYXNzZXMKLQkJYXNzZXJ0RXF1YWxzKCJ1bmV4cGVjdGVkIGNvbnRlbnQgb3V0bGluZSB2aWV3ZXIgY29uZmlndXJhdGlvbiBmb3IgIiArIENvbnRlbnRUeXBlSWRGb3JIVE1MLkNvbnRlbnRUeXBlSURfSFRNTCwgSFRNTENvbnRlbnRPdXRsaW5lQ29uZmlndXJhdGlvbi5jbGFzcywgby5nZXRDbGFzcygpKTsKKwkJYXNzZXJ0RXF1YWxzKCJ1bmV4cGVjdGVkIGNvbnRlbnQgb3V0bGluZSB2aWV3ZXIgY29uZmlndXJhdGlvbiBmb3IgIiArIENvbnRlbnRUeXBlSWRGb3JIVE1MLkNvbnRlbnRUeXBlSURfSFRNTCwgby5nZXRDbGFzcygpLCBIVE1MQ29udGVudE91dGxpbmVDb25maWd1cmF0aW9uLmNsYXNzKTsKIAl9CiAKIAlwdWJsaWMgdm9pZCB0ZXN0R2V0UHJvcGVydHlTaGVldENvbmZpZ3VyYXRpb24oKSB7CiAJCU9iamVjdCBvID0gRXh0ZW5kZWRDb25maWd1cmF0aW9uQnVpbGRlci5nZXRJbnN0YW5jZSgpLmdldENvbmZpZ3VyYXRpb24oRXh0ZW5kZWRDb25maWd1cmF0aW9uQnVpbGRlci5QUk9QRVJUWVNIRUVUQ09ORklHVVJBVElPTiwgQ29udGVudFR5cGVJZEZvckhUTUwuQ29udGVudFR5cGVJRF9IVE1MKTsKIAkJYXNzZXJ0Tm90TnVsbCgibm8gcHJvcGVydHkgc2hlZXQgY29uZmlndXJhdGlvbiBmb3IgIiArIENvbnRlbnRUeXBlSWRGb3JIVE1MLkNvbnRlbnRUeXBlSURfSFRNTCwgbyk7CiAJCS8vIGNoZWNrIGZvciBvdmVyLXF1YWxpZmllZCBzdWJjbGFzc2VzCi0JCWFzc2VydEVxdWFscygidW5leHBlY3RlZCBwcm9wZXJ0eSBzaGVldCBjb25maWd1cmF0aW9uIGZvciAiICsgQ29udGVudFR5cGVJZEZvckhUTUwuQ29udGVudFR5cGVJRF9IVE1MLCBYTUxQcm9wZXJ0eVNoZWV0Q29uZmlndXJhdGlvbi5jbGFzcywgby5nZXRDbGFzcygpKTsKKwkJYXNzZXJ0RXF1YWxzKCJ1bmV4cGVjdGVkIHByb3BlcnR5IHNoZWV0IGNvbmZpZ3VyYXRpb24gZm9yICIgKyBDb250ZW50VHlwZUlkRm9ySFRNTC5Db250ZW50VHlwZUlEX0hUTUwsIG8uZ2V0Q2xhc3MoKSwgWE1MUHJvcGVydHlTaGVldENvbmZpZ3VyYXRpb24uY2xhc3MpOwogCX0KIAkKIAlwdWJsaWMgdm9pZCB0ZXN0R2V0RG9jdW1lbnRhdGlvblRleHRIb3ZlcigpIHsKIAkJT2JqZWN0IG8gPSBFeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyLmdldEluc3RhbmNlKCkuZ2V0Q29uZmlndXJhdGlvbihFeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyLkRPQ1VNRU5UQVRJT05URVhUSE9WRVIsIElIVE1MUGFydGl0aW9ucy5IVE1MX0RFRkFVTFQpOwogCQlhc3NlcnROb3ROdWxsKCJubyBkb2N1bWVudGF0aW9uIHRleHQgaG92ZXIgZm9yICIgKyBJSFRNTFBhcnRpdGlvbnMuSFRNTF9ERUZBVUxULCBvKTsKIAkJLy8gY2hlY2sgZm9yIG92ZXItcXVhbGlmaWVkIHN1YmNsYXNzZXMKLQkJYXNzZXJ0RXF1YWxzKCJ1bmV4cGVjdGVkIGRvY3VtZW50YXRpb24gdGV4dCBob3ZlciBmb3IgIiArIElIVE1MUGFydGl0aW9ucy5IVE1MX0RFRkFVTFQsIEhUTUxUYWdJbmZvSG92ZXJQcm9jZXNzb3IuY2xhc3MsIG8uZ2V0Q2xhc3MoKSk7CisJCWFzc2VydEVxdWFscygidW5leHBlY3RlZCBkb2N1bWVudGF0aW9uIHRleHQgaG92ZXIgZm9yICIgKyBJSFRNTFBhcnRpdGlvbnMuSFRNTF9ERUZBVUxULCBvLmdldENsYXNzKCksIEhUTUxUYWdJbmZvSG92ZXJQcm9jZXNzb3IuY2xhc3MpOwogCX0KIH0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgppbmRleCBmYTZjNzZlLi40OTgxMmQ3IDEwMDY0NAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0yLDcgKzIsNyBAQAogQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgogQnVuZGxlLU5hbWU6ICVCdW5kbGUtTmFtZS4wCiBCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuNDAwLnF1YWxpZmllcgorQnVuZGxlLVZlcnNpb246IDEuMC4yMDEucXVhbGlmaWVyCiBCdW5kbGUtQ2xhc3NQYXRoOiBzc2Vtb2RlbHRlc3RzLmphcgogQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLlNTRU1vZGVsVGVzdHNQbHVnaW4KIEJ1bmRsZS1WZW5kb3I6ICVCdW5kbGUtVmVuZG9yLjAKQEAgLTE5LDUgKzE5LDUgQEAKICBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUsCiAgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAogIGNvbS5pYm0uaWN1Ci1CdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQorRWNsaXBzZS1MYXp5U3RhcnQ6IHRydWUKIEJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvYnVpbGQucHJvcGVydGllcwppbmRleCA4ODVhZjA5Li5hNDNiMTU5IDEwMDY0NAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvYnVpbGQucHJvcGVydGllcworKysgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvYnVpbGQucHJvcGVydGllcwpAQCAtMSw1ICsxLDUgQEAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorIyBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCiAjIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKICMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCiAjIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9TU0VNb2RlbFRlc3RTdWl0ZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvU1NFTW9kZWxUZXN0U3VpdGUuamF2YQppbmRleCBlYTcyOWE0Li5iOTQwMGY3IDEwMDY0NAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9TU0VNb2RlbFRlc3RTdWl0ZS5qYXZhCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL1NTRU1vZGVsVGVzdFN1aXRlLmphdmEKQEAgLTEzLDcgKzEzLDYgQEAKIGltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKIGltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwogCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLmRvY3VtZW50LlRlc3RPYmplY3RzOwogaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy5ldmVudHMuVGVzdEFib3V0VG9CZUNoYW5nZWRFdmVudDsKIGltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMuZXZlbnRzLlRlc3ROZXdEb2N1bWVudENvbnRlbnRFdmVudDsKIGltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMuZXZlbnRzLlRlc3ROZXdEb2N1bWVudEV2ZW50OwpAQCAtNDYsNyArNDUsNyBAQAogCS8vIFRlc3REb2N1bWVudFJlYWRlci5jbGFzcywgVGVzdENoYXJTZXF1ZW5jZVJlYWRlci5jbGFzcywKIAkvLyBUZXN0UmVnaW9uTWF0Y2hlcy5jbGFzc307CiAKLQlwcml2YXRlIHN0YXRpYyBDbGFzc1tdIGNsYXNzZXMgPSBuZXcgQ2xhc3NbXXtFeGlzdGVuY2VUZXN0LmNsYXNzLCBUZXN0T2JqZWN0cy5jbGFzcywgVGVzdE5ld0RvY3VtZW50Q29udGVudEV2ZW50LmNsYXNzLCBUZXN0QWJvdXRUb0JlQ2hhbmdlZEV2ZW50LmNsYXNzLCBUZXN0TmV3RG9jdW1lbnRFdmVudC5jbGFzcywgVGVzdE5vQ2hhbmdlRXZlbnQuY2xhc3MsIFRlc3RSZWdpb25DaGFuZ2VkRXZlbnQuY2xhc3MsVGVzdFJlZ2lvbnNSZXBsYWNlZEV2ZW50LmNsYXNzLFRlc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudC5jbGFzcywgVGVzdEphclV0aWxpdGllcy5jbGFzcywgVGVzdFVuc3VwcG9ydGVkQ29udGVudFR5cGUuY2xhc3N9OworCXByaXZhdGUgc3RhdGljIENsYXNzW10gY2xhc3NlcyA9IG5ldyBDbGFzc1tde0V4aXN0ZW5jZVRlc3QuY2xhc3MsIFRlc3ROZXdEb2N1bWVudENvbnRlbnRFdmVudC5jbGFzcywgVGVzdEFib3V0VG9CZUNoYW5nZWRFdmVudC5jbGFzcywgVGVzdE5ld0RvY3VtZW50RXZlbnQuY2xhc3MsIFRlc3ROb0NoYW5nZUV2ZW50LmNsYXNzLCBUZXN0UmVnaW9uQ2hhbmdlZEV2ZW50LmNsYXNzLFRlc3RSZWdpb25zUmVwbGFjZWRFdmVudC5jbGFzcyxUZXN0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQuY2xhc3MsIFRlc3RKYXJVdGlsaXRpZXMuY2xhc3N9OwogCiAJcHVibGljIFNTRU1vZGVsVGVzdFN1aXRlKCkgewogCQlzdXBlcigiU1NFIE1vZGVsIEJhc2ljIFRlc3QgU3VpdGUiKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL1Rlc3RVbnN1cHBvcnRlZENvbnRlbnRUeXBlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9UZXN0VW5zdXBwb3J0ZWRDb250ZW50VHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNDI2YThhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL1Rlc3RVbnN1cHBvcnRlZENvbnRlbnRUeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuDQotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscw0KLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMA0KLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0DQotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwNCi0gKg0KLSAqIENvbnRyaWJ1dG9yczoNCi0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHM7DQotDQotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5SW5wdXRTdHJlYW07DQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247DQotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7DQotaW1wb3J0IGphdmEuaW8uU3RyaW5nV3JpdGVyOw0KLQ0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7DQotDQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsNCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3REZXNjcmlwdGlvbjsNCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsNCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7DQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOw0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsNCi0NCi1wdWJsaWMgY2xhc3MgVGVzdFVuc3VwcG9ydGVkQ29udGVudFR5cGUgZXh0ZW5kcyBUZXN0Q2FzZSB7DQotCS8qKg0KLQkgKiBDcmVhdGVzIGEgc2ltcGxlIHByb2plY3QuDQotCSAqIA0KLQkgKiBAcGFyYW0gbmFtZQ0KLQkgKiAgICAgICAgICAgIC0gdGhlIG5hbWUgb2YgdGhlIHByb2plY3QNCi0JICogQHJldHVybg0KLQkgKi8NCi0Jc3RhdGljIElQcm9qZWN0IGNyZWF0ZVNpbXBsZVByb2plY3QoU3RyaW5nIG5hbWUpIHsNCi0JCUlQcm9qZWN0RGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkubmV3UHJvamVjdERlc2NyaXB0aW9uKG5hbWUpOw0KLQkJSVByb2plY3QgcHJvamVjdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChuYW1lKTsNCi0JCXRyeSB7DQotCQkJaWYgKCFwcm9qZWN0LmV4aXN0cygpKQ0KLQkJCQlwcm9qZWN0LmNyZWF0ZShkZXNjcmlwdGlvbiwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7DQotCQkJaWYgKCFwcm9qZWN0LmlzQWNjZXNzaWJsZSgpKQ0KLQkJCQlwcm9qZWN0Lm9wZW4obmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7DQotCQl9DQotCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7DQotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsNCi0JCX0NCi0JCXJldHVybiBwcm9qZWN0Ow0KLQl9DQotDQotDQotCS8qKg0KLQkgKiBWZXJpZnkgdGhhdCBhdHRlbXB0aW5nIHRvIGxvYWQgYSBtb2RlbCBmb3IgYW4gdW5zdXBwb3J0ZWQgY29udGVudCB0eXBlDQotCSAqIHNpbXBseSByZXR1cm5zIG51bGwgd2l0aG91dCBFeGNlcHRpb25zIG9yIGFzc2VydGlvbiBmYWlsdXJlcy4NCi0JICogDQotCSAqIEB0aHJvd3MgQ29yZUV4Y2VwdGlvbg0KLQkgKiBAdGhyb3dzIElPRXhjZXB0aW9uDQotCSAqLw0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0Rm9yUmVhZFdpdGhVbnN1cHBvcnRlZCgpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsNCi0JCUlQcm9qZWN0IHByb2plY3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QoZ2V0TmFtZSgpKTsNCi0JCWlmICghcHJvamVjdC5pc0FjY2Vzc2libGUoKSkgew0KLQkJCXByb2plY3QgPSBjcmVhdGVTaW1wbGVQcm9qZWN0KGdldE5hbWUoKSk7DQotCQl9DQotDQotCQlJRmlsZSBmaWxlID0gcHJvamVjdC5nZXRGaWxlKCJ0ZXN0UmVhZEZpbGUuanMiKTsNCi0JCWZpbGUuY3JlYXRlKG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbSgidmFyIG4gPSAwOyIuZ2V0Qnl0ZXMoKSksIHRydWUsIG51bGwpOw0KLQkJYXNzZXJ0VHJ1ZSgidGVzdCBmaWxlIG5vdCBjcmVhdGVkIiwgZmlsZS5pc0FjY2Vzc2libGUoKSk7DQotCQl0cnkgew0KLQkJCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmdldE1vZGVsRm9yUmVhZChmaWxlKTsNCi0JCQlhc3NlcnROdWxsKCJtb2RlbCByZXR1cm5lZCBldmVuIHRob3VnaCBleHBlY3RlZCB0byBzaWxlbnRseSBnZXQgbnVsbCIsIG1vZGVsKTsNCi0JCQlpZiAobW9kZWwgIT0gbnVsbCkNCi0JCQkJbW9kZWwucmVsZWFzZUZyb21SZWFkKCk7DQotCQl9DQotCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsNCi0JCQlTdHJpbmdXcml0ZXIgb3V0ID0gbmV3IFN0cmluZ1dyaXRlcigpOw0KLQkJCWUucHJpbnRTdGFja1RyYWNlKG5ldyBQcmludFdyaXRlcihvdXQpKTsNCi0JCQlmYWlsKG91dC50b1N0cmluZygpKTsNCi0JCX0NCi0JCXByb2plY3QuZGVsZXRlKHRydWUsIG51bGwpOw0KLQl9DQotDQotCS8qKg0KLQkgKiBWZXJpZnkgdGhhdCBhdHRlbXB0aW5nIHRvIGxvYWQgYSBtb2RlbCBmb3IgYW4gdW5zdXBwb3J0ZWQgY29udGVudCB0eXBlDQotCSAqIHNpbXBseSByZXR1cm5zIG51bGwgd2l0aG91dCBFeGNlcHRpb25zIG9yIGFzc2VydGlvbiBmYWlsdXJlcy4NCi0JICogDQotCSAqIEB0aHJvd3MgQ29yZUV4Y2VwdGlvbg0KLQkgKiBAdGhyb3dzIElPRXhjZXB0aW9uDQotCSAqLw0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0Rm9yRWRpdFdpdGhVbnN1cHBvcnRlZCgpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsNCi0JCUlQcm9qZWN0IHByb2plY3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QoZ2V0TmFtZSgpKTsNCi0JCWlmICghcHJvamVjdC5pc0FjY2Vzc2libGUoKSkgew0KLQkJCXByb2plY3QgPSBjcmVhdGVTaW1wbGVQcm9qZWN0KGdldE5hbWUoKSk7DQotCQl9DQotDQotCQlJRmlsZSBmaWxlID0gcHJvamVjdC5nZXRGaWxlKCJ0ZXN0RWRpdEZpbGUuanMiKTsNCi0JCWZpbGUuY3JlYXRlKG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbSgidmFyIG4gPSAwOyIuZ2V0Qnl0ZXMoKSksIHRydWUsIG51bGwpOw0KLQkJYXNzZXJ0VHJ1ZSgidGVzdCBmaWxlIG5vdCBjcmVhdGVkIiwgZmlsZS5pc0FjY2Vzc2libGUoKSk7DQotCQl0cnkgew0KLQkJCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmdldE1vZGVsRm9yRWRpdChmaWxlKTsNCi0JCQlhc3NlcnROdWxsKCJtb2RlbCByZXR1cm5lZCBldmVuIHRob3VnaCBleHBlY3RlZCB0byBzaWxlbnRseSBnZXQgbnVsbCIsIG1vZGVsKTsNCi0JCQlpZiAobW9kZWwgIT0gbnVsbCkNCi0JCQkJbW9kZWwucmVsZWFzZUZyb21SZWFkKCk7DQotCQl9DQotCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsNCi0JCQlTdHJpbmdXcml0ZXIgb3V0ID0gbmV3IFN0cmluZ1dyaXRlcigpOw0KLQkJCWUucHJpbnRTdGFja1RyYWNlKG5ldyBQcmludFdyaXRlcihvdXQpKTsNCi0JCQlmYWlsKG91dC50b1N0cmluZygpKTsNCi0JCX0NCi0JCXByb2plY3QuZGVsZXRlKHRydWUsIG51bGwpOw0KLQl9DQotfQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2RvY3VtZW50L1Rlc3RPYmplY3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9kb2N1bWVudC9UZXN0T2JqZWN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNTkzYzZmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2RvY3VtZW50L1Rlc3RPYmplY3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCi0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KLSAqIA0KLSAqIENvbnRyaWJ1dG9yczoNCi0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMuZG9jdW1lbnQ7DQotDQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsNCi0NCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnRleHQuQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQ7DQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC50ZXh0LkJhc2ljU3RydWN0dXJlZERvY3VtZW50UmVnaW9uOw0KLQ0KLXB1YmxpYyBjbGFzcyBUZXN0T2JqZWN0cyBleHRlbmRzIFRlc3RDYXNlIHsNCi0NCi0JLyoqDQotCSAqICANCi0JICovDQotCXB1YmxpYyBUZXN0T2JqZWN0cygpIHsNCi0JCXN1cGVyKCk7DQotDQotCX0NCi0NCi0JLyoqDQotCSAqIEBwYXJhbSBuYW1lDQotCSAqLw0KLQlwdWJsaWMgVGVzdE9iamVjdHMoU3RyaW5nIG5hbWUpIHsNCi0JCXN1cGVyKG5hbWUpOw0KLQ0KLQl9DQotDQotCXB1YmxpYyB2b2lkIHRlc3RFbmRlZEZsYWcoKSB7DQotCQlCYXNpY1N0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiByZWdpb24gPSBuZXcgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24oKTsNCi0JCXJlZ2lvbi5zZXRQYXJlbnREb2N1bWVudChuZXcgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQoKSk7DQotCQlib29sZWFuIGRlbGV0ZWQgPSByZWdpb24uaXNEZWxldGVkKCk7DQotCQlib29sZWFuIGVuZGVkID0gcmVnaW9uLmlzRW5kZWQoKTsNCi0JCXJlZ2lvbi5zZXRFbmRlZCghZW5kZWQpOw0KLQkJYXNzZXJ0RXF1YWxzKCFlbmRlZCwgcmVnaW9uLmlzRW5kZWQoKSk7DQotCQlhc3NlcnRFcXVhbHMoZGVsZXRlZCwgcmVnaW9uLmlzRGVsZXRlZCgpKTsNCi0JfQ0KLQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RGVsZXRlZEZsYWcoKSB7DQotCQlCYXNpY1N0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiByZWdpb24gPSBuZXcgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24oKTsNCi0JCXJlZ2lvbi5zZXRQYXJlbnREb2N1bWVudChuZXcgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQoKSk7DQotCQlib29sZWFuIGRlbGV0ZWQgPSByZWdpb24uaXNEZWxldGVkKCk7DQotCQlib29sZWFuIGVuZGVkID0gcmVnaW9uLmlzRW5kZWQoKTsNCi0JCXJlZ2lvbi5zZXREZWxldGVkKCFkZWxldGVkKTsNCi0JCWFzc2VydEVxdWFscyghZGVsZXRlZCwgcmVnaW9uLmlzRGVsZXRlZCgpKTsNCi0JCWFzc2VydEVxdWFscyhlbmRlZCwgcmVnaW9uLmlzRW5kZWQoKSk7DQotCX0NCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvdXRpbC9UZXN0SmFyVXRpbGl0aWVzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy91dGlsL1Rlc3RKYXJVdGlsaXRpZXMuamF2YQppbmRleCBlNDJjZDgzLi5hZTgyMTllIDEwMDY0NAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy91dGlsL1Rlc3RKYXJVdGlsaXRpZXMuamF2YQorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy91dGlsL1Rlc3RKYXJVdGlsaXRpZXMuamF2YQpAQCAtMjY2LDUgKzI2NiwxMSBAQAogCQlhc3NlcnRUcnVlKCJub3QgZW5vdWdoIGNvbnRlbnRzIHJlYWQiLCBjb250ZW50cy5sZW5ndGgoKSA+IDQwKTsKIAkJYXNzZXJ0VHJ1ZSgiY29udGVudHMgbm90IGFzIGV4cGVjdGVkIiArIGNvbnRlbnRzLnN1YnN0cmluZygwLCA0MCksIGNvbnRlbnRzLnN0YXJ0c1dpdGgoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKSk7CiAJfQorCQorCXB1YmxpYyB2b2lkIHRlc3RTYW5pdHkoKSB7CisJCUlGaWxlIHRlc3RKYXIgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUobmV3IFBhdGgoVEVTVF9KQVJfVVRJTElUSUVTX1RFU1RGSUxFX0pBUikpOworCQlhc3NlcnRUcnVlKCJ0ZXN0IGphciByZXNvdXJjZSBpcyBub3QgaW4gd29ya3NwYWNlIiwgdGVzdEphci5leGlzdHMoKSk7CisJCWFzc2VydFRydWUoInRlc3QgamFyIHJlc291cmNlIG5vdCBhY2Nlc3NpYmxlIGZyb20gd29ya3NwYWNlIiwgdGVzdEphci5pc0FjY2Vzc2libGUoKSk7CisJfQogCiB9CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvdGVzdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvdGVzdC54bWwKaW5kZXggNWJhM2U1MC4uNDM0NDc3NCAxMDA2NDQKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3Rlc3QueG1sCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy90ZXN0LnhtbApAQCAtNDgsMTMgKzQ4LDEzIEBACiAgICAgICAgICBUaGVyZSBhcmUgc29tZSBwcm9wZXJ0aWVzIHRoYXQgbXVzdCBiZSBwcm92aWRlZCBieSBjYWxsZXIuIAogICAgIC0tPgogICAgIDxmYWlsCi0gICAgICAgIG1lc3NhZ2U9IkVycm9yOiBtaXNzaW5nIHByb3BlcnR5LiBlY2xpcHNlLWhvbWUgbXVzdCBiZSBwcm92aWRlZCIKKyAgICAgICAgbWVzc2FnZT0iRXJyb3I6IG1pc3NpbmcgcHJvcGVydHkuIGVjbGlwc2UtaG9tZSBtdXN0IGJlIHByb3ZlZCIKICAgICAgICAgdW5sZXNzPSJlY2xpcHNlLWhvbWUiIC8+CiAgICAgPGZhaWwKLSAgICAgICAgbWVzc2FnZT0iRXJyb3I6IG1pc3NpbmcgcHJvcGVydHkuIGJ1aWxkRGlyZWN0b3J5IG11c3QgYmUgcHJvdmlkZWQiCisgICAgICAgIG1lc3NhZ2U9IkVycm9yOiBtaXNzaW5nIHByb3BlcnR5LiBidWlsZERpcmVjdG9yeSBtdXN0IGJlIHByb3ZlZCIKICAgICAgICAgdW5sZXNzPSJidWlsZERpcmVjdG9yeSIgLz4KICAgICA8ZmFpbAotICAgICAgICBtZXNzYWdlPSJFcnJvcjogbWlzc2luZyBwcm9wZXJ0eS4gYnVpbGRMYWJlbCBtdXN0IGJlIHByb3ZpZGVkIgorICAgICAgICBtZXNzYWdlPSJFcnJvcjogbWlzc2luZyBwcm9wZXJ0eS4gYnVpbGRMYWJlbCBtdXN0IGJlIHByb3ZlZCIKICAgICAgICAgdW5sZXNzPSJidWlsZExhYmVsIiAvPgogICAgIDxlY2hvCiAgICAgICAgIG1lc3NhZ2U9ImJhc2VkaXI6ICR7YmFzZWRpcn0iIC8+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgppbmRleCBhNmVmNmE0Li5kMGY3NTViIDEwMDY0NAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTIsNyArMiw3IEBACiBCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCiBCdW5kbGUtTmFtZTogJUJ1bmRsZS1OYW1lLjAKIEJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHM7IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC4zMDAucXVhbGlmaWVyCitCdW5kbGUtVmVyc2lvbjogMS4wLjIwMS5xdWFsaWZpZXIKIEJ1bmRsZS1DbGFzc1BhdGg6IHNzZWVkaXRvcnRlc3RzLmphcgogQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy5TU0VUZXN0c1BsdWdpbgogQnVuZGxlLVZlbmRvcjogJUJ1bmRsZS1WZW5kb3IuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDAxMzZjYWEuLjM3ZDQxZDAgMTAwNjQ0Ci0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvYnVpbGQucHJvcGVydGllcworKysgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTEsNSArMSw1IEBACiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNCwgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KKyMgQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgogIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCiAjIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAogIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdApAQCAtMTAsNyArMTAsNyBAQAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogc291cmNlLnNzZWVkaXRvcnRlc3RzLmphciA9IHNyYy8sXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpmYWNlLnRleHQudGVzdHMvLFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LnRlc3RzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC50ZXN0cy8KIG91dHB1dC5zc2VlZGl0b3J0ZXN0cy5qYXIgPSBiaW4vCiBiaW4uaW5jbHVkZXMgPSBwbHVnaW4ueG1sLFwKICAgICAgICAgICAgICAgIHNzZWVkaXRvcnRlc3RzLmphcixcCkBAIC0xOSw0ICsxOSw1IEBACiAgICAgICAgICAgICAgICBhYm91dC5odG1sLFwKICAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzCiBzcmMuaW5jbHVkZXMgPSBzcmMvLFwKLSAgICAgICAgICAgICAgIGpmYWNlLnRleHQudGVzdHMvCisgICAgICAgICAgICAgICBqZmFjZS50ZXh0LnRlc3RzLyxcCisgICAgICAgICAgICAgICB0ZXh0LnRlc3RzLwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9wbHVnaW4ueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9wbHVnaW4ueG1sCmluZGV4IGYwOTY1N2MuLjFkNjNlYmQgMTAwNjQ0Ci0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvcGx1Z2luLnhtbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3BsdWdpbi54bWwKQEAgLTksNyArOSw2IEBACiAJCQlpY29uPSIkbmwkL2ljb25zL3NvdXJjZUVkaXRvci5naWYiCiAJCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aS5TdHJ1Y3R1cmVkVGV4dEVkaXRvciIKIAkJCWNvbnRyaWJ1dG9yQ2xhc3M9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwuYWN0aW9ucy5BY3Rpb25Db250cmlidXRvciIKLQkJCXN5bWJvbGljRm9udE5hbWU9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkudGV4dGZvbnQiCiAJCQlpZD0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aS5TdHJ1Y3R1cmVkVGV4dEVkaXRvci50ZXN0Ij4KIAkJPC9lZGl0b3I+CiAJPC9leHRlbnNpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL3VpL3Rlc3RzL1NTRVVJVGVzdFN1aXRlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL3VpL3Rlc3RzL1NTRVVJVGVzdFN1aXRlLmphdmEKaW5kZXggNTc2OTVjOS4uYWY0MTUzOSAxMDA2NDQKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9TU0VVSVRlc3RTdWl0ZS5qYXZhCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvdWkvdGVzdHMvU1NFVUlUZXN0U3VpdGUuamF2YQpAQCAtMTUsOSArMTUsMTEgQEAKIGltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwogCiBpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC50ZXN0cy5KRmFjZVRleHRUZXN0U3VpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudGV4dC50ZXN0cy5FY2xpcHNlVGV4dFRlc3RTdWl0ZTsKIGltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLnZpZXdlci5UZXN0Vmlld2VyQ29uZmlndXJhdGlvbjsKIAorLyoqCisgKiBAYXV0aG9yIHBhdmVyeQorICovCiBwdWJsaWMgY2xhc3MgU1NFVUlUZXN0U3VpdGUgZXh0ZW5kcyBUZXN0U3VpdGUgewogCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKIAkJcmV0dXJuIG5ldyBTU0VVSVRlc3RTdWl0ZSgpOwpAQCAtMzAsNiArMzIsNSBAQAogCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdFZpZXdlckNvbmZpZ3VyYXRpb24uY2xhc3MpKTsKIAkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RTdHJ1Y3R1cmVkVGV4dEVkaXRvci5jbGFzcykpOwogCQlhZGRUZXN0KEpGYWNlVGV4dFRlc3RTdWl0ZS5zdWl0ZSgpKTsKLQkJYWRkVGVzdChFY2xpcHNlVGV4dFRlc3RTdWl0ZS5zdWl0ZSgpKTsKIAl9CiB9CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL3VpL3Rlc3RzL1Rlc3RTdHJ1Y3R1cmVkVGV4dEVkaXRvci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9UZXN0U3RydWN0dXJlZFRleHRFZGl0b3IuamF2YQppbmRleCAyM2RlZjVmLi5lNDZjZGI4IDEwMDY0NAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL3VpL3Rlc3RzL1Rlc3RTdHJ1Y3R1cmVkVGV4dEVkaXRvci5qYXZhCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvdWkvdGVzdHMvVGVzdFN0cnVjdHVyZWRUZXh0RWRpdG9yLmphdmEKQEAgLTE1LDM3ICsxNSwyNSBAQAogCiBpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwogCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5maWxlYnVmZmVycy5GaWxlQnVmZmVyczsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmZpbGVidWZmZXJzLklUZXh0RmlsZUJ1ZmZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmZpbGVidWZmZXJzLklUZXh0RmlsZUJ1ZmZlck1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5maWxlYnVmZmVycy5Mb2NhdGlvbktpbmQ7CiBpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7CiBpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7CiBpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3REZXNjcmlwdGlvbjsKIGltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47CiBpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7CiBpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7CiBpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuam9icy5Kb2I7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklNZW51TWFuYWdlcjsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uTWVudU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnQ7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uUHJvdmlkZXI7CiBpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKIGltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9ySW5wdXQ7CiBpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVBhZ2VMYXlvdXQ7CiBpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhZ2U7CiBpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvdzsKIGltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmlkZS5JREU7CiBpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5GaWxlRWRpdG9ySW5wdXQ7CiBpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5JU2hvd0luVGFyZ2V0TGlzdDsKIGltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLlN0cnVjdHVyZWRUZXh0RWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwuU1NFVUlQbHVnaW47CiBpbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5TdHJ1Y3R1cmVkVGV4dFZpZXdlcjsKIAogcHVibGljIGNsYXNzIFRlc3RTdHJ1Y3R1cmVkVGV4dEVkaXRvciBleHRlbmRzIFRlc3RDYXNlIHsKQEAgLTU3LDcgKzQ1LDcgQEAKIAlwcml2YXRlIHN0YXRpYyBib29sZWFuIGZJc1NldHVwID0gZmFsc2U7CiAKIAlwdWJsaWMgVGVzdFN0cnVjdHVyZWRUZXh0RWRpdG9yKCkgewotCQlzdXBlcigiVGVzdFN0cnVjdHVyZWRUZXh0RWRpdG9yIik7CisJCXN1cGVyKCJUZXN0U3RydWN0cmVkVGV4dEVkaXRvciIpOwogCX0KIAogCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CkBAIC0xODksMTE5ICsxNzcsNCBAQAogCQlmRWRpdG9yLnVwZGF0ZSgpOwogCQlhc3NlcnRUcnVlKCJVbmFibGUgdG8gdXBkYXRlIGVkaXRvciIsIHRydWUpOwogCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0U2luZ2xlTm9uVUlUaHJlYWRVcGRhdGVzVG9FZGl0b3JEb2N1bWVudCgpIHRocm93cyBFeGNlcHRpb24gewotCQlJRmlsZSBmaWxlID0gZ2V0T3JDcmVhdGVGaWxlKFBST0pFQ1RfTkFNRSArICIvIiArICJ0ZXN0QmFja2dyb3VuZENoYW5nZXMueG1sIik7Ci0JCUlUZXh0RmlsZUJ1ZmZlck1hbmFnZXIgdGV4dEZpbGVCdWZmZXJNYW5hZ2VyID0gRmlsZUJ1ZmZlcnMuZ2V0VGV4dEZpbGVCdWZmZXJNYW5hZ2VyKCk7Ci0JCXRleHRGaWxlQnVmZmVyTWFuYWdlci5jb25uZWN0KGZpbGUuZ2V0RnVsbFBhdGgoKSwgTG9jYXRpb25LaW5kLklGSUxFLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQotCQlJVGV4dEZpbGVCdWZmZXIgdGV4dEZpbGVCdWZmZXIgPSB0ZXh0RmlsZUJ1ZmZlck1hbmFnZXIuZ2V0VGV4dEZpbGVCdWZmZXIoZmlsZS5nZXRGdWxsUGF0aCgpLCBMb2NhdGlvbktpbmQuSUZJTEUpOwotCQlmaW5hbCBJRG9jdW1lbnQgZG9jdW1lbnQgPSB0ZXh0RmlsZUJ1ZmZlci5nZXREb2N1bWVudCgpOwotCQlkb2N1bWVudC5yZXBsYWNlKDAsIDAsICI8P3htbCBlbmNvZGluZz1cIlVURi04XCIgdmVyc2lvbj1cIjEuMFwiPz5cbiIpOwotCQl0ZXh0RmlsZUJ1ZmZlci5jb21taXQobmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSwgdHJ1ZSk7Ci0KLQkJU3RyaW5nIHRlc3RUZXh0ID0gZG9jdW1lbnQuZ2V0KCkgKyAiPGMvPjxiLz48YS8+IjsKLQkJZmluYWwgaW50IGVuZCA9IGRvY3VtZW50LmdldExlbmd0aCgpOwotCQlJV29ya2JlbmNoUGFnZSBhY3RpdmVQYWdlID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCk7Ci0JCUlFZGl0b3JQYXJ0IG9wZW5lZEVkaXRvciA9IElERS5vcGVuRWRpdG9yKGFjdGl2ZVBhZ2UsIGZpbGUpOwotCi0JCWZpbmFsIGJvb2xlYW4gc3RhdGVbXSA9IG5ldyBib29sZWFuW117ZmFsc2V9OwotCQlKb2IgY2hhbmdlciA9IG5ldyBKb2IoInRleHQgY2hhbmdlciIpIHsKLQkJCXByb3RlY3RlZCBJU3RhdHVzIHJ1bihJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsKLQkJCQl0cnkgewotCQkJCQlkb2N1bWVudC5yZXBsYWNlKGVuZCwgMCwgIjxhLz4iKTsKLQkJCQkJZG9jdW1lbnQucmVwbGFjZShlbmQsIDAsICI8Yi8+Iik7Ci0JCQkJCWRvY3VtZW50LnJlcGxhY2UoZW5kLCAwLCAiPGMvPiIpOwotCQkJCX0KLQkJCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCQkJcmV0dXJuIG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwgU1NFVUlQbHVnaW4uSUQsIGUuZ2V0TWVzc2FnZSgpKTsKLQkJCQl9Ci0JCQkJZmluYWxseSB7Ci0JCQkJCXN0YXRlWzBdID0gdHJ1ZTsKLQkJCQl9Ci0JCQkJcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7Ci0JCQl9Ci0JCX07Ci0JCWNoYW5nZXIuc2V0VXNlcih0cnVlKTsKLQkJY2hhbmdlci5zZXRTeXN0ZW0oZmFsc2UpOwotCQljaGFuZ2VyLnNjaGVkdWxlKCk7Ci0KLQkJd2hpbGUgKCFzdGF0ZVswXSkgewotCQkJb3BlbmVkRWRpdG9yLmdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5yZWFkQW5kRGlzcGF0Y2goKTsKLQkJfQotCi0JCVN0cmluZyBmaW5hbFRleHQgPSBkb2N1bWVudC5nZXQoKTsKLQkJdGV4dEZpbGVCdWZmZXIuY29tbWl0KG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCksIHRydWUpOwotCQl0ZXh0RmlsZUJ1ZmZlck1hbmFnZXIuZGlzY29ubmVjdChmaWxlLmdldEZ1bGxQYXRoKCksIExvY2F0aW9uS2luZC5JRklMRSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCWFjdGl2ZVBhZ2UuY2xvc2VFZGl0b3Iob3BlbmVkRWRpdG9yLCBmYWxzZSk7Ci0JCWFzc2VydEVxdWFscygiTm9uLVVJIGNoYW5nZXMgZGlkIG5vdCBhcHBseSIsIHRlc3RUZXh0LCBmaW5hbFRleHQpOwotCX0KLQotCQotCS8qKgotCSAqIE5vdGU6IFRoaXMgdGVzdCB0YWtlcyBhIHdoaWxlIHRvIHJ1biwgYnV0IGl0J3MgdGVzdGluZyBzY2FsYWJpbGl0eSBhZnRlciBhbGwuCi0JICogQHRocm93cyBFeGNlcHRpb24KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0TWFueU5vblVJVGhyZWFkc1VwZGF0aW5nRWRpdG9yRG9jdW1lbnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJZmluYWwgaW50IG51bWJlck9mSm9icyA9IDMwOwotCQkvKioKLQkJICogMTYgbWludXRlIHRpbWVvdXQgYmVmb3JlIHdlIHN0b3Agd2FpdGluZyBmb3IgdGhlIGNoYW5nZSBqb2JzIHRvCi0JCSAqIGNvbXBsZXRlCi0JCSAqLwotCQlsb25nIHRpbWVvdXQgPSA5NjAwMDA7Ci0KLQkJbG9uZyBzdGFydFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkJSUZpbGUgZmlsZSA9IGdldE9yQ3JlYXRlRmlsZShQUk9KRUNUX05BTUUgKyAiLyIgKyAidGVzdE1hbnlCYWNrZ3JvdW5kQ2hhbmdlcy54bWwiKTsKLQkJSVRleHRGaWxlQnVmZmVyTWFuYWdlciB0ZXh0RmlsZUJ1ZmZlck1hbmFnZXIgPSBGaWxlQnVmZmVycy5nZXRUZXh0RmlsZUJ1ZmZlck1hbmFnZXIoKTsKLQkJdGV4dEZpbGVCdWZmZXJNYW5hZ2VyLmNvbm5lY3QoZmlsZS5nZXRGdWxsUGF0aCgpLCBMb2NhdGlvbktpbmQuSUZJTEUsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCi0JCUlUZXh0RmlsZUJ1ZmZlciB0ZXh0RmlsZUJ1ZmZlciA9IHRleHRGaWxlQnVmZmVyTWFuYWdlci5nZXRUZXh0RmlsZUJ1ZmZlcihmaWxlLmdldEZ1bGxQYXRoKCksIExvY2F0aW9uS2luZC5JRklMRSk7Ci0JCWZpbmFsIElEb2N1bWVudCBkb2N1bWVudCA9IHRleHRGaWxlQnVmZmVyLmdldERvY3VtZW50KCk7Ci0JCWRvY3VtZW50LnJlcGxhY2UoMCwgMCwgIjw/eG1sIGVuY29kaW5nPVwiVVRGLThcIiB2ZXJzaW9uPVwiMS4wXCI/PlxuIik7Ci0JCXRleHRGaWxlQnVmZmVyLmNvbW1pdChuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpLCB0cnVlKTsKLQotCQlmaW5hbCBpbnQgaW5zZXJ0aW9uUG9pbnQgPSBkb2N1bWVudC5nZXRMZW5ndGgoKTsKLQkJLy8gbnVtYmVyT2ZKb2JzIEpvYnMsIGluc2VydGluZyAyNiB0YWdzLCBlYWNoIDQgY2hhcmFjdGVycyBsb25nCi0JCWludCB0ZXN0TGVuZ3RoID0gaW5zZXJ0aW9uUG9pbnQgKyBudW1iZXJPZkpvYnMgKiA0ICogMjY7Ci0JCUlXb3JrYmVuY2hQYWdlIGFjdGl2ZVBhZ2UgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKTsKLQkJYWN0aXZlUGFnZS5zaG93VmlldyhJUGFnZUxheW91dC5JRF9QUk9HUkVTU19WSUVXKTsKLQkJSUVkaXRvclBhcnQgb3BlbmVkRWRpdG9yID0gSURFLm9wZW5FZGl0b3IoYWN0aXZlUGFnZSwgZmlsZSk7Ci0KLQkJZmluYWwgaW50IGZpbmlzaGVkW10gPSBuZXcgaW50W117bnVtYmVyT2ZKb2JzfTsKLQkJSm9iIGNoYW5nZXJzW10gPSBuZXcgSm9iW251bWJlck9mSm9ic107Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgY2hhbmdlcnMubGVuZ3RoOyBpKyspIHsKLQkJCWNoYW5nZXJzW2ldID0gbmV3IEpvYigiVGV4dCBDaGFuZ2VyICIgKyBJbnRlZ2VyLnRvU3RyaW5nKGkpKSB7Ci0JCQkJcHJvdGVjdGVkIElTdGF0dXMgcnVuKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgewotCQkJCQl0cnkgewotCQkJCQkJY2hhciBuYW1lc1tdID0gIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIi50b0NoYXJBcnJheSgpOwotCQkJCQkJZm9yIChpbnQgaiA9IDA7IGogPCBuYW1lcy5sZW5ndGg7IGorKykgewotCQkJCQkJCWRvY3VtZW50LnJlcGxhY2UoaW5zZXJ0aW9uUG9pbnQgKyA0ICogaiwgMCwgIjwiICsgbmFtZXNbal0gKyAiLz4iKTsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCQkJCXJldHVybiBuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIFNTRVVJUGx1Z2luLklELCBlLmdldE1lc3NhZ2UoKSk7Ci0JCQkJCX0KLQkJCQkJZmluYWxseSB7Ci0JCQkJCQlmaW5pc2hlZFswXS0tOwotCQkJCQl9Ci0JCQkJCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotCQkJCX0KLQkJCX07Ci0JCQljaGFuZ2Vyc1tpXS5zZXRVc2VyKHRydWUpOwotCQkJY2hhbmdlcnNbaV0uc2V0U3lzdGVtKGZhbHNlKTsKLQkJCWNoYW5nZXJzW2ldLnNjaGVkdWxlKCk7Ci0JCX0KLQotCQlsb25nIHJ1bnRpbWUgPSAwOwotCQl3aGlsZSAoZmluaXNoZWRbMF0gPiAwICYmIChydW50aW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkpIC0gc3RhcnRUaW1lIDwgdGltZW91dCkgewotCQkJb3BlbmVkRWRpdG9yLmdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5yZWFkQW5kRGlzcGF0Y2goKTsKLQkJfQotCQlhc3NlcnRUcnVlKCJUZXN0IHRpbWVkIG91dCIsIHJ1bnRpbWUgLSBzdGFydFRpbWUgPCB0aW1lb3V0KTsKLQotCQlpbnQgZmluYWxMZW5ndGggPSBkb2N1bWVudC5nZXRMZW5ndGgoKTsKLQkJdGV4dEZpbGVCdWZmZXIuY29tbWl0KG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCksIHRydWUpOwotCQl0ZXh0RmlsZUJ1ZmZlck1hbmFnZXIuZGlzY29ubmVjdChmaWxlLmdldEZ1bGxQYXRoKCksIExvY2F0aW9uS2luZC5JRklMRSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCWFjdGl2ZVBhZ2UuY2xvc2VFZGl0b3Iob3BlbmVkRWRpdG9yLCBmYWxzZSk7Ci0JCWFzc2VydEVxdWFscygiU29tZSBub24tVUkgY2hhbmdlcyBkaWQgbm90IGFwcGx5IiwgdGVzdExlbmd0aCwgZmluYWxMZW5ndGgpOwotCX0KIH0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvdGV4dC50ZXN0cy9vcmcvZWNsaXBzZS90ZXh0L3Rlc3RzL0VjbGlwc2VUZXh0VGVzdFN1aXRlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3RleHQudGVzdHMvb3JnL2VjbGlwc2UvdGV4dC90ZXN0cy9FY2xpcHNlVGV4dFRlc3RTdWl0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwM2I0ODI4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvdGV4dC50ZXN0cy9vcmcvZWNsaXBzZS90ZXh0L3Rlc3RzL0VjbGlwc2VUZXh0VGVzdFN1aXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UudGV4dC50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLQotLyoqCi0gKiBUZXN0IFN1aXRlIGZvciBvcmcuZWNsaXBzZS50ZXh0LgotICoKLSAqIEBzaW5jZSAzLjAKLSAqLwotcHVibGljIGNsYXNzIEVjbGlwc2VUZXh0VGVzdFN1aXRlIHsKLQotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJVGVzdFN1aXRlIHN1aXRlID0gbmV3IFRlc3RTdWl0ZSgib3JnLmVjbGlwc2UudGV4dCBUZXN0IFN1aXRlIHVzaW5nIEJhc2ljU3RydWN0dXJlZERvY3VtZW50Iik7IC8vJE5PTi1OTFMtMSQKLQkJLy8kSlVuaXQtQkVHSU4kCi0vLwkJc3VpdGUuYWRkVGVzdChMaW5lVHJhY2tlclRlc3Q0LnN1aXRlKCkpOwotLy8JCXN1aXRlLmFkZFRlc3QoRG9jdW1lbnRFeHRlbnNpb25UZXN0LnN1aXRlKCkpOwotLy8JCXN1aXRlLmFkZFRlc3QoTGluZVRyYWNrZXJUZXN0My5zdWl0ZSgpKTsKLS8vCQlzdWl0ZS5hZGRUZXN0KERvY3VtZW50VGVzdC5zdWl0ZSgpKTsKLS8vCQlzdWl0ZS5hZGRUZXN0KEZpbmRSZXBsYWNlRG9jdW1lbnRBZGFwdGVyVGVzdC5zdWl0ZSgpKTsKLQkJc3VpdGUuYWRkVGVzdChQb3NpdGlvblVwZGF0aW5nQ29ybmVyQ2FzZXNUZXN0LnN1aXRlKCkpOwotCQlzdWl0ZS5hZGRUZXN0KEV4Y2x1c2l2ZVBvc2l0aW9uVXBkYXRlclRlc3Quc3VpdGUoKSk7Ci0vLwkJc3VpdGUuYWRkVGVzdChUZXh0RWRpdFRlc3RzLnN1aXRlKCkpOwotLy8JCXN1aXRlLmFkZFRlc3QoR2FwVGV4dFRlc3Quc3VpdGUoKSk7Ci0vLwkJc3VpdGUuYWRkVGVzdChBZGFwdGl2ZUdhcFRleHRUZXN0LnN1aXRlKCkpOwotLy8JCXN1aXRlLmFkZFRlc3QoR2FwVGV4dFN0b3JlVGVzdC5zdWl0ZSgpKTsKLS8vCQlzdWl0ZS5hZGRUZXN0KENoaWxkRG9jdW1lbnRUZXN0LnN1aXRlKCkpOwotLy8JCXN1aXRlLmFkZFRlc3QoUHJvamVjdGlvblRlc3RTdWl0ZS5zdWl0ZSgpKTsKLS8vCQlzdWl0ZS5hZGRUZXN0KExpbmtUZXN0U3VpdGUuc3VpdGUoKSk7Ci0vLwkJc3VpdGUuYWRkVGVzdChDb3B5T25Xcml0ZVRleHRTdG9yZVRlc3Quc3VpdGUoKSk7Ci0vLwkJc3VpdGUuYWRkVGVzdChUZXh0VXRpbGl0aWVzVGVzdC5zdWl0ZSgpKTsKLS8vCQlzdWl0ZS5hZGRUZXN0KEFubm90YXRpb25Nb2RlbFN0cmVzc1Rlc3Quc3VpdGUoKSk7Ci0vLwkJc3VpdGUuYWRkVGVzdChBbm5vdGF0aW9uTW9kZWxFeHRlbnNpb24yVGVzdC5zdWl0ZSgpKTsKLS8vCQlzdWl0ZS5hZGRUZXN0KFRlbXBsYXRlc1Rlc3RTdWl0ZS5zdWl0ZSgpKTsKLQkJLy8kSlVuaXQtRU5EJAotCi0JCXJldHVybiBzdWl0ZTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3RleHQudGVzdHMvb3JnL2VjbGlwc2UvdGV4dC90ZXN0cy9FeGNsdXNpdmVQb3NpdGlvblVwZGF0ZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3RleHQudGVzdHMvb3JnL2VjbGlwc2UvdGV4dC90ZXN0cy9FeGNsdXNpdmVQb3NpdGlvblVwZGF0ZXJUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0MGNjMGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy90ZXh0LnRlc3RzL29yZy9lY2xpcHNlL3RleHQvdGVzdHMvRXhjbHVzaXZlUG9zaXRpb25VcGRhdGVyVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTYxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS50ZXh0LnRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLkFzc2VydDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuQmFkTG9jYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5EZWZhdWx0UG9zaXRpb25VcGRhdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSVBvc2l0aW9uVXBkYXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LlBvc2l0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5sdGsubW9kZWxoYW5kbGVyLklNb2RlbEhhbmRsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLm1vZGVsaGFuZGxlci5Nb2RlbEhhbmRsZXJSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwudGV4dC5CYXNpY1N0cnVjdHVyZWREb2N1bWVudDsKLQotLyoqCi0gKiBAc2luY2UgMy4zCi0gKi8KLXB1YmxpYyBjbGFzcyBFeGNsdXNpdmVQb3NpdGlvblVwZGF0ZXJUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJcmV0dXJuIG5ldyBUZXN0U3VpdGUoRXhjbHVzaXZlUG9zaXRpb25VcGRhdGVyVGVzdC5jbGFzcyk7Ci0JfQotCi0JcHJpdmF0ZSBJUG9zaXRpb25VcGRhdGVyIGZVcGRhdGVyOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBDQVRFR09SWT0gInRlc3RjYXRlZ29yeSI7Ci0JcHJpdmF0ZSBQb3NpdGlvbiBmUG9zOwotCXByaXZhdGUgSURvY3VtZW50IGZEb2M7Ci0JLyoKLQkgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCi0JICovCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJZlVwZGF0ZXI9IG5ldyBEZWZhdWx0UG9zaXRpb25VcGRhdGVyKENBVEVHT1JZKTsKLS8vCQlmRG9jID0gbmV3IERvY3VtZW50KCJjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2MiKTsKLQkJZkRvYz0gY3JlYXRlRG9jdW1lbnQoImNjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjYyIpOwotCQlmUG9zPSBuZXcgUG9zaXRpb24oNSwgNSk7Ci0JCWZEb2MuYWRkUG9zaXRpb25VcGRhdGVyKGZVcGRhdGVyKTsKLQkJZkRvYy5hZGRQb3NpdGlvbkNhdGVnb3J5KENBVEVHT1JZKTsKLQkJZkRvYy5hZGRQb3NpdGlvbihDQVRFR09SWSwgZlBvcyk7Ci0JfQotCi0JcHJpdmF0ZSBJRG9jdW1lbnQgY3JlYXRlRG9jdW1lbnQoU3RyaW5nIGNvbnRlbnRzKSB7Ci0JCUlNb2RlbEhhbmRsZXIgaGFuZGxlciA9IE1vZGVsSGFuZGxlclJlZ2lzdHJ5LmdldEluc3RhbmNlKCkuZ2V0SGFuZGxlckZvckNvbnRlbnRUeXBlSWQoIm9yZy5lY2xpcHNlLmNvcmUucnVudGltZS54bWwiKTsKLQkJQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQgPSAoQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQpIGhhbmRsZXIuZ2V0RG9jdW1lbnRMb2FkZXIoKS5jcmVhdGVOZXdTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJZG9jdW1lbnQuc2V0KGNvbnRlbnRzKTsKLQkJcmV0dXJuIGRvY3VtZW50OwotCX0KLQotCS8qCi0JICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQotCSAqLwotCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWZEb2MucmVtb3ZlUG9zaXRpb25VcGRhdGVyKGZVcGRhdGVyKTsKLQkJZkRvYy5yZW1vdmVQb3NpdGlvbkNhdGVnb3J5KENBVEVHT1JZKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RGVsZXRlQWZ0ZXIoKSB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlmRG9jLnJlcGxhY2UoMjAsIDIsICIiKTsKLQkJQXNzZXJ0LmFzc2VydEVxdWFscyg1LCBmUG9zLm9mZnNldCk7Ci0JCUFzc2VydC5hc3NlcnRFcXVhbHMoNSwgZlBvcy5sZW5ndGgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RBZGRBZnRlcigpIHRocm93cyBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7Ci0JCWZEb2MucmVwbGFjZSgyMCwgMCwgInl5Iik7Ci0JCUFzc2VydC5hc3NlcnRFcXVhbHMoNSwgZlBvcy5vZmZzZXQpOwotCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKDUsIGZQb3MubGVuZ3RoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RGVsZXRlQmVmb3JlKCkgdGhyb3dzIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJZkRvYy5yZXBsYWNlKDIsIDIsICIiKTsKLQkJQXNzZXJ0LmFzc2VydEVxdWFscygzLCBmUG9zLm9mZnNldCk7Ci0JCUFzc2VydC5hc3NlcnRFcXVhbHMoNSwgZlBvcy5sZW5ndGgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RBZGRCZWZvcmUoKSB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlmRG9jLnJlcGxhY2UoMiwgMCwgInl5Iik7Ci0JCUFzc2VydC5hc3NlcnRFcXVhbHMoNywgZlBvcy5vZmZzZXQpOwotCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKDUsIGZQb3MubGVuZ3RoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QWRkUmlnaHRCZWZvcmUoKSB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlmRG9jLnJlcGxhY2UoNSwgMCwgInl5Iik7Ci0JCUFzc2VydC5hc3NlcnRFcXVhbHMoNywgZlBvcy5vZmZzZXQpOwotCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKDUsIGZQb3MubGVuZ3RoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RGVsZXRlQXRPZmZzZXQoKSB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlmRG9jLnJlcGxhY2UoNSwgMiwgIiIpOwotCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKDUsIGZQb3Mub2Zmc2V0KTsKLQkJQXNzZXJ0LmFzc2VydEVxdWFscygzLCBmUG9zLmxlbmd0aCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdERlbGV0ZVJpZ2h0QmVmb3JlKCkgdGhyb3dzIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJZkRvYy5yZXBsYWNlKDMsIDIsICIiKTsKLQkJQXNzZXJ0LmFzc2VydEVxdWFscygzLCBmUG9zLm9mZnNldCk7Ci0JCUFzc2VydC5hc3NlcnRFcXVhbHMoNSwgZlBvcy5sZW5ndGgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RBZGRSaWdodEFmdGVyKCkgdGhyb3dzIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJZkRvYy5yZXBsYWNlKDEwLCAwLCAieXkiKTsKLQkJQXNzZXJ0LmFzc2VydEVxdWFscyg1LCBmUG9zLm9mZnNldCk7Ci0JCUFzc2VydC5hc3NlcnRFcXVhbHMoNSwgZlBvcy5sZW5ndGgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3REZWxldGVSaWdodEFmdGVyKCkgdGhyb3dzIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJZkRvYy5yZXBsYWNlKDEwLCAyLCAiIik7Ci0JCUFzc2VydC5hc3NlcnRFcXVhbHMoNSwgZlBvcy5vZmZzZXQpOwotCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKDUsIGZQb3MubGVuZ3RoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QWRkV2l0aGluKCkgdGhyb3dzIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJZkRvYy5yZXBsYWNlKDYsIDAsICJ5eSIpOwotCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKDUsIGZQb3Mub2Zmc2V0KTsKLQkJQXNzZXJ0LmFzc2VydEVxdWFscyg3LCBmUG9zLmxlbmd0aCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdERlbGV0ZVdpdGhpbigpIHRocm93cyBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7Ci0JCWZEb2MucmVwbGFjZSg2LCAyLCAiIik7Ci0JCUFzc2VydC5hc3NlcnRFcXVhbHMoNSwgZlBvcy5vZmZzZXQpOwotCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKDMsIGZQb3MubGVuZ3RoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UmVwbGFjZUxlZnRCb3JkZXIoKSB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlmRG9jLnJlcGxhY2UoNCwgMiwgInl5Iik7Ci0JCUFzc2VydC5hc3NlcnRFcXVhbHMoNiwgZlBvcy5vZmZzZXQpOwotCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKDQsIGZQb3MubGVuZ3RoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UmVwbGFjZVJpZ2h0Qm9yZGVyKCkgdGhyb3dzIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJZkRvYy5yZXBsYWNlKDksIDIsICJ5eSIpOwotCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKDUsIGZQb3Mub2Zmc2V0KTsKLQkJQXNzZXJ0LmFzc2VydEVxdWFscyg0LCBmUG9zLmxlbmd0aCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdERlbGV0ZU92ZXJSaWdodEJvcmRlcigpIHRocm93cyBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7Ci0JCWZEb2MucmVwbGFjZSg5LCAyLCAiIik7Ci0JCUFzc2VydC5hc3NlcnRFcXVhbHMoNSwgZlBvcy5vZmZzZXQpOwotCQlBc3NlcnQuYXNzZXJ0RXF1YWxzKDQsIGZQb3MubGVuZ3RoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RGVsZXRlZCgpIHRocm93cyBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7Ci0JCWZEb2MucmVwbGFjZSg0LCA3LCAiIik7Ci0JCUFzc2VydC5hc3NlcnRUcnVlKGZQb3MuaXNEZWxldGVkKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UmVwbGFjZWQoKSB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlmRG9jLnJlcGxhY2UoNCwgNywgInl5eXl5eXkiKTsKLQkJQXNzZXJ0LmFzc2VydFRydWUoZlBvcy5pc0RlbGV0ZWQpOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy90ZXh0LnRlc3RzL29yZy9lY2xpcHNlL3RleHQvdGVzdHMvUG9zaXRpb25VcGRhdGluZ0Nvcm5lckNhc2VzVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy90ZXh0LnRlc3RzL29yZy9lY2xpcHNlL3RleHQvdGVzdHMvUG9zaXRpb25VcGRhdGluZ0Nvcm5lckNhc2VzVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxODlkYjExLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvdGV4dC50ZXN0cy9vcmcvZWNsaXBzZS90ZXh0L3Rlc3RzL1Bvc2l0aW9uVXBkYXRpbmdDb3JuZXJDYXNlc1Rlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAsIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS50ZXh0LnRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LkJhZFBvc2l0aW9uQ2F0ZWdvcnlFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5Qb3NpdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwubHRrLm1vZGVsaGFuZGxlci5JTW9kZWxIYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5tb2RlbGhhbmRsZXIuTW9kZWxIYW5kbGVyUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnRleHQuQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci0KLQotCi1wdWJsaWMgY2xhc3MgUG9zaXRpb25VcGRhdGluZ0Nvcm5lckNhc2VzVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQlwcml2YXRlIElEb2N1bWVudCBmRG9jdW1lbnQ7Ci0KLQlwdWJsaWMgUG9zaXRpb25VcGRhdGluZ0Nvcm5lckNhc2VzVGVzdChTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBjaGVja1Bvc2l0aW9ucyhQb3NpdGlvbltdIGV4cGVjdGVkKSB0aHJvd3MgQmFkUG9zaXRpb25DYXRlZ29yeUV4Y2VwdGlvbiB7Ci0JCVBvc2l0aW9uW10gYWN0dWFsPSBmRG9jdW1lbnQuZ2V0UG9zaXRpb25zKElEb2N1bWVudC5ERUZBVUxUX0NBVEVHT1JZKTsKLQkJYXNzZXJ0VHJ1ZSgiaW52YWxpZCBudW1iZXIgb2YgcG9zaXRpb25zIiwgYWN0dWFsLmxlbmd0aCA9PSBleHBlY3RlZC5sZW5ndGgpOwotCi0JCWZvciAoaW50IGk9IDA7IGkgPCBleHBlY3RlZC5sZW5ndGg7IGkrKykgewotCQkJYXNzZXJ0RXF1YWxzKHByaW50KGFjdHVhbFtpXSkgKyAiICE9ICIgKyBwcmludChleHBlY3RlZFtpXSksIGV4cGVjdGVkW2ldLCBhY3R1YWxbaV0pOwotCQl9Ci0JfQotCi0JcHJvdGVjdGVkIFN0cmluZyBwcmludChQb3NpdGlvbiBwKSB7Ci0JCXJldHVybiAiWyIgKyBwLmdldE9mZnNldCgpICsgIiwiICsgcC5nZXRMZW5ndGgoKSArICJdIjsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotLy8JCWZEb2N1bWVudD0gbmV3IERvY3VtZW50KCJ4LXgteC14LXgteC14LXgteC14LXgiKTsKLQkJZkRvY3VtZW50PSBjcmVhdGVEb2N1bWVudCgieC14LXgteC14LXgteC14LXgteC14Iik7Ci0JCWZEb2N1bWVudC5hZGRQb3NpdGlvbihuZXcgUG9zaXRpb24oMCwgMCkpOwotCQlmRG9jdW1lbnQuYWRkUG9zaXRpb24obmV3IFBvc2l0aW9uKDAsIDEpKTsKLQkJZkRvY3VtZW50LmFkZFBvc2l0aW9uKG5ldyBQb3NpdGlvbig1LCAwKSk7Ci0JCWZEb2N1bWVudC5hZGRQb3NpdGlvbihuZXcgUG9zaXRpb24oNSwgMykpOwotCX0KLQotCXByaXZhdGUgSURvY3VtZW50IGNyZWF0ZURvY3VtZW50KFN0cmluZyBjb250ZW50cykgewotCQlJTW9kZWxIYW5kbGVyIGhhbmRsZXIgPSBNb2RlbEhhbmRsZXJSZWdpc3RyeS5nZXRJbnN0YW5jZSgpLmdldEhhbmRsZXJGb3JDb250ZW50VHlwZUlkKCJvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUueG1sIik7Ci0JCUJhc2ljU3RydWN0dXJlZERvY3VtZW50IGRvY3VtZW50ID0gKEJhc2ljU3RydWN0dXJlZERvY3VtZW50KSBoYW5kbGVyLmdldERvY3VtZW50TG9hZGVyKCkuY3JlYXRlTmV3U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCWRvY3VtZW50LnNldChjb250ZW50cyk7Ci0JCXJldHVybiBkb2N1bWVudDsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgVGVzdFN1aXRlKFBvc2l0aW9uVXBkYXRpbmdDb3JuZXJDYXNlc1Rlc3QuY2xhc3MpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgewotCQlmRG9jdW1lbnQ9IG51bGw7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEluc2VydCgpIHRocm93cyBFeGNlcHRpb24gewotCQlmRG9jdW1lbnQucmVwbGFjZSgwLCAwLCAieXkiKTsKLQotCQlQb3NpdGlvbltdIHBvc2l0aW9ucz0gbmV3IFBvc2l0aW9uW10gewotCQkJCW5ldyBQb3NpdGlvbiggMiwgMSksCi0JCQkJbmV3IFBvc2l0aW9uKCAyLCAwKSwKLQkJCQluZXcgUG9zaXRpb24oIDcsIDMpLAotCQkJCW5ldyBQb3NpdGlvbiggNywgMCkKLQkJfTsKLQotCQljaGVja1Bvc2l0aW9ucyhwb3NpdGlvbnMpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzLy5jbGFzc3BhdGgKaW5kZXggNzUxYzhmMi4uNjRjNWUzMSAxMDA2NDQKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzLy5jbGFzc3BhdGgKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzLy5jbGFzc3BhdGgKQEAgLTEsNyArMSw3IEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgogPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0oyU0UtMS41Ii8+CiAJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+CisJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+CiAJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+CiA8L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgppbmRleCAwZmU2NDI4Li43YTNhYmY3IDEwMDY0NAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0yLDcgKzIsNyBAQAogQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgogQnVuZGxlLU5hbWU6ICVCdW5kbGUtTmFtZS4wCiBCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHM7IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC40MDAucXVhbGlmaWVyCitCdW5kbGUtVmVyc2lvbjogMS4wLjIwNC5xdWFsaWZpZXIKIEJ1bmRsZS1DbGFzc1BhdGg6IHNzZW1vZGVseG1sdGVzdHMuamFyCiBCdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMuU1NFTW9kZWxYTUxUZXN0c1BsdWdpbgogQnVuZGxlLVZlbmRvcjogJUJ1bmRsZS1WZW5kb3IuMApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3BsdWdpbi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvcGx1Z2luLnhtbAppbmRleCA0OGJmMmNjLi4wM2YxYThjIDEwMDY0NAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvcGx1Z2luLnhtbAorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvcGx1Z2luLnhtbApAQCAtMSw3ICsxLDcgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+CiA8P2VjbGlwc2UgdmVyc2lvbj0iMy4wIj8+CiA8cGx1Z2luPgotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLmNvcmUuY29udGVudHR5cGUuY29udGVudFR5cGVzIj4KKwk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuY29udGVudFR5cGVzIj4KIAkJPCEtLSBhc3NvY2lhdGUgLmZyYWd4IGZpbGVzIHdpdGggdGhlIFhNTCBjb250ZW50IHR5cGUgLS0+CiAJCTxmaWxlLWFzc29jaWF0aW9uCiAJCQljb250ZW50LXR5cGU9Im9yZy5lY2xpcHNlLmNvcmUucnVudGltZS54bWwiCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9TU0VNb2RlbFhNTFRlc3RTdWl0ZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvU1NFTW9kZWxYTUxUZXN0U3VpdGUuamF2YQppbmRleCBkYWE4ZWY0Li4yZjAzMGIwIDEwMDY0NAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9TU0VNb2RlbFhNTFRlc3RTdWl0ZS5qYXZhCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL1NTRU1vZGVsWE1MVGVzdFN1aXRlLmphdmEKQEAgLTEsNSArMSw1IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwogICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCiAgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdApAQCAtMjAsMTAgKzIwLDcgQEAKIGltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMuZG9jdW1lbnQuVGVzdFN0cnVjdHVyZWREb2N1bWVudDsKIGltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMuZG9jdW1lbnQuVGVzdFhNTERvY3VtZW50TG9hZGVyOwogaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5kb2N1bWVudC5UcmFuc2l0aW9uVGVzdHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLmRvbS5BdHRySW1wbFRlc3RzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5kb20uRWxlbWVudEltcGxUZXN0czsKIGltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMuZG9tLk5hbWVWYWxpZGF0b3JUZXN0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMuZG9tLk5vZGVMaXN0SW1wbFRlc3RzOwogaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5mb3JtYXQuVGVzdFBhcnRpdGlvbkZvcm1hdHRlclhNTDsKIGltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMubW9kZWwuVGVzdE1vZGVsTWFuYWdlcjsKIGltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMubW9kZWwuVGVzdE1vZGVsc0Zyb21GaWxlczsKQEAgLTQ5LDkgKzQ2LDYgQEAKIAkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RTdHJ1Y3R1cmVkTW9kZWwuY2xhc3MpKTsKIAkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RTdHJ1Y3R1cmVkUGFydGl0aW9uZXJYTUwuY2xhc3MpKTsKIAkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKE5hbWVWYWxpZGF0b3JUZXN0cy5jbGFzcykpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoRWxlbWVudEltcGxUZXN0cy5jbGFzcykpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoQXR0ckltcGxUZXN0cy5jbGFzcykpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoTm9kZUxpc3RJbXBsVGVzdHMuY2xhc3MpKTsKIAkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRyYW5zaXRpb25UZXN0cy5jbGFzcykpOwogCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoWE1MQ29yZVByZWZlcmVuY2VzVGVzdC5jbGFzcykpOwogCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdENhdGFsb2dSZXRyaXZhbEFuZE1vZGVsQ3JlYXRpb24uY2xhc3MpKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2NvbnRlbnRtb2RlbC9UZXN0Q2F0YWxvZ1JldHJpdmFsQW5kTW9kZWxDcmVhdGlvbi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvY29udGVudG1vZGVsL1Rlc3RDYXRhbG9nUmV0cml2YWxBbmRNb2RlbENyZWF0aW9uLmphdmEKaW5kZXggMzMyZDQ5Yi4uODA5OWQ3MSAxMDA2NDQKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvY29udGVudG1vZGVsL1Rlc3RDYXRhbG9nUmV0cml2YWxBbmRNb2RlbENyZWF0aW9uLmphdmEKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvY29udGVudG1vZGVsL1Rlc3RDYXRhbG9nUmV0cml2YWxBbmRNb2RlbENyZWF0aW9uLmphdmEKQEAgLTEsNSArMSw1IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwogICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCiAgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdApAQCAtNywxNCArNywxMSBAQAogICoKICAqIENvbnRyaWJ1dG9yczoKICAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICBKZXNwZXIgU3RlZW4gTW9lbGxlciAtIEFkZGVkIFhNTCBDYXRhbG9ncyAxLjEgc3VwcG9ydAogICogICAgIAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLmNvbnRlbnRtb2RlbDsKIAotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVXcml0ZXI7CiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247CiAKQEAgLTIyLDEzICsxOSw5IEBACiAKIGltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuWE1MQ29yZVBsdWdpbjsKIGltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY2F0YWxvZy5wcm92aXNpb25hbC5JQ2F0YWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY2F0YWxvZy5wcm92aXNpb25hbC5JRGVsZWdhdGVDYXRhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jYXRhbG9nLnByb3Zpc2lvbmFsLklSZXdyaXRlRW50cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNhdGFsb2cucHJvdmlzaW9uYWwuSVN1ZmZpeEVudHJ5OwogaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01Eb2N1bWVudDsKIGltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNvbnRlbnRNb2RlbE1hbmFnZXI7CiBpbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLm1vZGVscXVlcnkuWE1MQ2F0YWxvZ0lkUmVzb2x2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLnV0aWwuRmlsZVV0aWw7CiAKIHB1YmxpYyBjbGFzcyBUZXN0Q2F0YWxvZ1JldHJpdmFsQW5kTW9kZWxDcmVhdGlvbiBleHRlbmRzIFRlc3RDYXNlIHsKIApAQCAtMTE1LDE0ICsxMDgsMTQgQEAKIAlwdWJsaWMgdm9pZCB0ZXN0RXh0ZXJuYWxEVEQoKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAJCWRvQ01fZGlyZWN0VVJJVGVzdCgiaHR0cDovL2hpYmVybmF0ZS5zb3VyY2Vmb3JnZS5uZXQvaGliZXJuYXRlLWNvbmZpZ3VyYXRpb24tMy4wLmR0ZCIpOwogCX0KLQotCXB1YmxpYyB2b2lkIHRlc3QyMDAxU2NoZW1hQ01EaXJlY3QoKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvQ01fZGlyZWN0VVJJVGVzdCgiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEueHNkIik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3QyMDAxU2NoZW1hQ01DYXRhbG9nKCkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1VSSV9DTVRlc3QoImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIik7Ci0JfQorLy8gQnVnIDEyMzU0NyAtIHRlbXBvcmFyaWx5IGNvbW1lbnQgdGhlc2UgdGVzdHMgb3V0LgorLy8JcHVibGljIHZvaWQgdGVzdDIwMDFTY2hlbWFDTURpcmVjdCgpIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKKy8vCQlkb0NNX2RpcmVjdFVSSVRlc3QoImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLnhzZCIpOworLy8JfQorLy8JCisvLwlwdWJsaWMgdm9pZCB0ZXN0MjAwMVNjaGVtYUNNQ2F0YWxvZygpIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKKy8vCQlkb1VSSV9DTVRlc3QoImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIik7CisvLwl9CiAJCiAJcHVibGljIHZvaWQgdGVzdEludm9pY2VSZW1vdGUoKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAJCWRvQ01fZGlyZWN0VVJJVGVzdF9jaGVja0VsZW1lbnRDb3VudCgiaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy93c3QvY29tcG9uZW50cy94c2QvdGVzdHMvZHRkLXJlZmVyZW5jZXMvSW52b2ljZS5kdGQiLCAxOCk7CkBAIC0xMzEsMTQzICsxMjQsNyBAQAogCXB1YmxpYyB2b2lkIHRlc3RJbnZvaWNlUmVtb3RlSW5kaXJlY3QoKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAJCWRvQ01fZGlyZWN0VVJJVGVzdF9jaGVja0VsZW1lbnRDb3VudCgiaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy93c3QvY29tcG9uZW50cy94c2QvdGVzdHMvZHRkLXJlZmVyZW5jZXMvSW5kaXJlY3RJbnZvaWNlLmR0ZCIsIDE4KTsKIAl9Ci0JcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgTE9DQUxfU0NIRU1BX0ZJTEUgPSAiZmlsZTovLy91c3IvdG1wL215U2NoZW1hU2NoZW1hLnhzZCI7Ci0JcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgTE9DQUxfU0NIRU1BX0RJUiA9ICJmaWxlOi8vL3Vzci90bXAvc2NoZW1hcy8iOwotCXB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIExPQ0FMX1NDSEVNQV9ESVJfUkVXUklUVEVOID0gImZpbGU6Ly8vdXNyL3RtcC9zY2hlbWFzL2V4YW1wbGUuZHRkIjsKIAkKLQlwdWJsaWMgdm9pZCB0ZXN0Q2F0YWxvZzExU3lzdGVtU3VmZml4KCkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlJQ2F0YWxvZyB4bWxDYXRhbG9nID0gWE1MQ29yZVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0RGVmYXVsdFhNTENhdGFsb2coKTsKLQkJSVN1ZmZpeEVudHJ5IHN5c3RlbVN1ZmZpeCA9IChJU3VmZml4RW50cnkpeG1sQ2F0YWxvZy5jcmVhdGVDYXRhbG9nRWxlbWVudChJU3VmZml4RW50cnkuU1VGRklYX1RZUEVfU1lTVEVNKTsKLQkJc3lzdGVtU3VmZml4LnNldFN1ZmZpeCgiWE1MU2NoZW1hLnhzZCIpOwotCQlzeXN0ZW1TdWZmaXguc2V0VVJJKExPQ0FMX1NDSEVNQV9GSUxFKTsKLQkJeG1sQ2F0YWxvZy5hZGRDYXRhbG9nRWxlbWVudChzeXN0ZW1TdWZmaXgpOwotCQl0cnkgewotCQkJU3RyaW5nIHJlc29sdmVkID0geG1sQ2F0YWxvZy5yZXNvbHZlU3lzdGVtKCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS54c2QiKTsKLQkJCWFzc2VydEVxdWFscyhMT0NBTF9TQ0hFTUFfRklMRSwgcmVzb2x2ZWQpOwotCQl9IGZpbmFsbHkgewotCQkJeG1sQ2F0YWxvZy5yZW1vdmVDYXRhbG9nRWxlbWVudChzeXN0ZW1TdWZmaXgpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENhdGFsb2cxMVVyaVN1ZmZpeCgpIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJSUNhdGFsb2cgeG1sQ2F0YWxvZyA9IFhNTENvcmVQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldERlZmF1bHRYTUxDYXRhbG9nKCk7Ci0JCUlTdWZmaXhFbnRyeSB1cmlTdWZmaXggPSAoSVN1ZmZpeEVudHJ5KXhtbENhdGFsb2cuY3JlYXRlQ2F0YWxvZ0VsZW1lbnQoSVN1ZmZpeEVudHJ5LlNVRkZJWF9UWVBFX1VSSSk7Ci0JCXVyaVN1ZmZpeC5zZXRTdWZmaXgoIlhNTFNjaGVtYS54c2QiKTsKLQkJdXJpU3VmZml4LnNldFVSSShMT0NBTF9TQ0hFTUFfRklMRSk7Ci0JCXhtbENhdGFsb2cuYWRkQ2F0YWxvZ0VsZW1lbnQodXJpU3VmZml4KTsKLQkJdHJ5IHsKLQkJCVN0cmluZyByZXNvbHZlZCA9IHhtbENhdGFsb2cucmVzb2x2ZVVSSSgiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEueHNkIik7Ci0JCQlhc3NlcnRFcXVhbHMoTE9DQUxfU0NIRU1BX0ZJTEUsIHJlc29sdmVkKTsKLQkJfSBmaW5hbGx5IHsKLQkJCXhtbENhdGFsb2cucmVtb3ZlQ2F0YWxvZ0VsZW1lbnQodXJpU3VmZml4KTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDYXRhbG9nMTFSZXdyaXRlU3lzdGVtKCkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlJQ2F0YWxvZyB4bWxDYXRhbG9nID0gWE1MQ29yZVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0RGVmYXVsdFhNTENhdGFsb2coKTsKLQkJSVJld3JpdGVFbnRyeSBzeXN0ZW1TdWZmaXggPSAoSVJld3JpdGVFbnRyeSl4bWxDYXRhbG9nLmNyZWF0ZUNhdGFsb2dFbGVtZW50KElSZXdyaXRlRW50cnkuUkVXUklURV9UWVBFX1NZU1RFTSk7Ci0JCXN5c3RlbVN1ZmZpeC5zZXRTdGFydFN0cmluZygiaHR0cDovL3d3dy5leGFtcGxlLm9yZy9kdGRzLyIpOwotCQlzeXN0ZW1TdWZmaXguc2V0UmV3cml0ZVByZWZpeChMT0NBTF9TQ0hFTUFfRElSKTsKLQkJeG1sQ2F0YWxvZy5hZGRDYXRhbG9nRWxlbWVudChzeXN0ZW1TdWZmaXgpOwotCQl0cnkgewotCQkJU3RyaW5nIHJlc29sdmVkID0geG1sQ2F0YWxvZy5yZXNvbHZlU3lzdGVtKCJodHRwOi8vd3d3LmV4YW1wbGUub3JnL2R0ZHMvZXhhbXBsZS5kdGQiKTsKLQkJCWFzc2VydEVxdWFscyhMT0NBTF9TQ0hFTUFfRElSX1JFV1JJVFRFTiwgcmVzb2x2ZWQpOwotCQl9IGZpbmFsbHkgewotCQkJeG1sQ2F0YWxvZy5yZW1vdmVDYXRhbG9nRWxlbWVudChzeXN0ZW1TdWZmaXgpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENhdGFsb2cxMVJld3JpdGVVcmkoKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCUlDYXRhbG9nIHhtbENhdGFsb2cgPSBYTUxDb3JlUGx1Z2luLmdldERlZmF1bHQoKS5nZXREZWZhdWx0WE1MQ2F0YWxvZygpOwotCQlJUmV3cml0ZUVudHJ5IHVyaVN1ZmZpeCA9IChJUmV3cml0ZUVudHJ5KXhtbENhdGFsb2cuY3JlYXRlQ2F0YWxvZ0VsZW1lbnQoSVJld3JpdGVFbnRyeS5SRVdSSVRFX1RZUEVfVVJJKTsKLQkJdXJpU3VmZml4LnNldFN0YXJ0U3RyaW5nKCJ1cm46ZmlzazoiKTsKLQkJdXJpU3VmZml4LnNldFJld3JpdGVQcmVmaXgoTE9DQUxfU0NIRU1BX0RJUik7Ci0JCXhtbENhdGFsb2cuYWRkQ2F0YWxvZ0VsZW1lbnQodXJpU3VmZml4KTsKLQkJdHJ5IHsKLQkJCVN0cmluZyByZXNvbHZlZCA9IHhtbENhdGFsb2cucmVzb2x2ZVVSSSgidXJuOmZpc2s6ZXhhbXBsZS5kdGQiKTsKLQkJCWFzc2VydEVxdWFscyhMT0NBTF9TQ0hFTUFfRElSX1JFV1JJVFRFTiwgcmVzb2x2ZWQpOwotCQl9IGZpbmFsbHkgewotCQkJeG1sQ2F0YWxvZy5yZW1vdmVDYXRhbG9nRWxlbWVudCh1cmlTdWZmaXgpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENhdGFsb2cxMURlbGVnYXRlUHVibGljKCkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlJQ2F0YWxvZyB4bWxDYXRhbG9nID0gWE1MQ29yZVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0RGVmYXVsdFhNTENhdGFsb2coKTsKLQkJSURlbGVnYXRlQ2F0YWxvZyBwdWJsaWNEZWxlZ2F0ZSA9IChJRGVsZWdhdGVDYXRhbG9nKXhtbENhdGFsb2cuY3JlYXRlQ2F0YWxvZ0VsZW1lbnQoSURlbGVnYXRlQ2F0YWxvZy5ERUxFR0FURV9UWVBFX1BVQkxJQyk7Ci0KLQkJLy8gSXJvbmljYWxseSwgd2UgZG9uJ3QgdXNlIFdUUCdzIFJlc29sdmVyIHdoZW4gbG9hZGluZyB0aGUgY2F0YWxvZyBYTUwuCi0JCS8vIEFkZGluZyA8IURPQ1RZUEUgY2F0YWxvZyBQVUJMSUMgIi0vL09BU0lTLy9EVEQgWE1MIENhdGFsb2dzIFYxLjEvL0VOIiAiaHR0cDovL3d3dy5leGFtcGxlLm9yZy9kdGQvY2F0YWxvZy5kdGQiPgotCQkvLyB0byB0aGUgY2F0YWxvZyBiZWxvdyB3aWxsIG1ha2UgdGhlIGxvYWRpbmcgZmFpbC4uLiAKLQotCQlGaWxlIGRlbGVnYXRlQ2F0ID0gbWFrZVRlbXBGaWxlKCJkZWxlZ2F0ZVB1YmxpYyIsICI8Y2F0YWxvZyB4bWxucz1cInVybjpvYXNpczpuYW1lczp0YzplbnRpdHk6eG1sbnM6eG1sOmNhdGFsb2dcIlxyXG4iICsKLQkJCSIgICAgICAgcHJlZmVyPVwicHVibGljXCI+XHJcbiIgKyAKLQkJCSIgICAgPHB1YmxpYyBwdWJsaWNJZD1cIi0vL0V4YW1wbGUvL2FuIGV4YW1wbGUgVjEuMC4wLy9FTlwiXHJcbiIgKyAKLQkJCSIgICAgICAgICAgICB1cmk9XCJmaWxlOi8vL2V4YW1wbGUuZHRkXCIvPlxyXG4iICsgCi0JCQkiPC9jYXRhbG9nPiIpOwotCi0JCXB1YmxpY0RlbGVnYXRlLnNldFN0YXJ0U3RyaW5nKCItLy9FeGFtcGxlLy8iKTsKLQkJcHVibGljRGVsZWdhdGUuc2V0Q2F0YWxvZ0xvY2F0aW9uKGRlbGVnYXRlQ2F0LnRvVVJJKCkudG9TdHJpbmcoKSk7Ci0JCXhtbENhdGFsb2cuYWRkQ2F0YWxvZ0VsZW1lbnQocHVibGljRGVsZWdhdGUpOwotCQl0cnkgewotCQkJU3RyaW5nIHJlc29sdmVkID0geG1sQ2F0YWxvZy5yZXNvbHZlUHVibGljKCItLy9FeGFtcGxlLy9hbiBleGFtcGxlIFYxLjAuMC8vRU4iLCAiZXhhbXBsZS5kdGQiKTsKLQkJCWFzc2VydEVxdWFscygiZmlsZTovLy9leGFtcGxlLmR0ZCIsIHJlc29sdmVkKTsKLQkJfSBmaW5hbGx5IHsKLQkJCXhtbENhdGFsb2cucmVtb3ZlQ2F0YWxvZ0VsZW1lbnQocHVibGljRGVsZWdhdGUpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENhdGFsb2cxMURlbGVnYXRlU3lzdGVtKCkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlJQ2F0YWxvZyB4bWxDYXRhbG9nID0gWE1MQ29yZVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0RGVmYXVsdFhNTENhdGFsb2coKTsKLQkJSURlbGVnYXRlQ2F0YWxvZyBzeXN0ZW1EZWxlZ2F0ZSA9IChJRGVsZWdhdGVDYXRhbG9nKXhtbENhdGFsb2cuY3JlYXRlQ2F0YWxvZ0VsZW1lbnQoSURlbGVnYXRlQ2F0YWxvZy5ERUxFR0FURV9UWVBFX1NZU1RFTSk7Ci0KLQkJRmlsZSBkZWxlZ2F0ZUNhdCA9IG1ha2VUZW1wRmlsZSgiZGVsZWdhdGVTeXN0ZW0iLCAiPGNhdGFsb2cgeG1sbnM9XCJ1cm46b2FzaXM6bmFtZXM6dGM6ZW50aXR5OnhtbG5zOnhtbDpjYXRhbG9nXCI+XHJcbiIgKyAKLQkJCSIgICAgPHN5c3RlbSBzeXN0ZW1JZD1cImh0dHA6Ly9mdW5reS5vcmcvZG9nXCIgdXJpPVwiZmlsZTovLy9mdW5reS1kb2cuZHRkXCIvPlxyXG4iICsgCi0JCQkiICAgIDxzeXN0ZW1TdWZmaXggc3lzdGVtSWRTdWZmaXg9XCIvY2F0LmR0ZFwiIHVyaT1cImZpbGU6Ly8vc21lbGx5Y2F0LnhzZFwiLz5cclxuIiArIAotCQkJIiAgICA8cmV3cml0ZVN5c3RlbSBzeXN0ZW1JZFN0YXJ0U3RyaW5nPVwiaHR0cDovL2Z1bmt5Lm9yZy9wYXJyb3RzL1wiIHJld3JpdGVQcmVmaXg9XCJmaWxlOi8vL2R0ZHMvcGFycm90cy9cIi8+XHJcbiIgKyAKLQkJCSI8L2NhdGFsb2c+Iik7Ci0KLQkJc3lzdGVtRGVsZWdhdGUuc2V0U3RhcnRTdHJpbmcoImh0dHA6Ly9mdW5reS5vcmcvIik7Ci0JCXN5c3RlbURlbGVnYXRlLnNldENhdGFsb2dMb2NhdGlvbihkZWxlZ2F0ZUNhdC50b1VSSSgpLnRvU3RyaW5nKCkpOwotCQl4bWxDYXRhbG9nLmFkZENhdGFsb2dFbGVtZW50KHN5c3RlbURlbGVnYXRlKTsKLQkJdHJ5IHsJCQkKLQkJCWFzc2VydEVxdWFscygidHJ5IHN5c3RlbUlkIGVudHJ5IiwgImZpbGU6Ly8vZnVua3ktZG9nLmR0ZCIsIHhtbENhdGFsb2cucmVzb2x2ZVN5c3RlbSgiaHR0cDovL2Z1bmt5Lm9yZy9kb2ciKSk7Ci0JCQlhc3NlcnRFcXVhbHMoInRyeSBzeXN0ZW1TdWZmaXggZW50cnkiLCAiZmlsZTovLy9zbWVsbHljYXQueHNkIiwgeG1sQ2F0YWxvZy5yZXNvbHZlU3lzdGVtKCJodHRwOi8vZnVua3kub3JnL3NvbWUvY2F0LmR0ZCIpKTsKLQkJCWFzc2VydEVxdWFscygidHJ5IHJld3JpdGVTeXN0ZW0gZW50cnkiLCAiZmlsZTovLy9kdGRzL3BhcnJvdHMvbWFjYXcueHNkIiwgeG1sQ2F0YWxvZy5yZXNvbHZlU3lzdGVtKCJodHRwOi8vZnVua3kub3JnL3BhcnJvdHMvbWFjYXcueHNkIikpOwotCQl9IGZpbmFsbHkgewotCQkJeG1sQ2F0YWxvZy5yZW1vdmVDYXRhbG9nRWxlbWVudChzeXN0ZW1EZWxlZ2F0ZSk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q2F0YWxvZzExRGVsZWdhdGVVcmkoKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCUlDYXRhbG9nIHhtbENhdGFsb2cgPSBYTUxDb3JlUGx1Z2luLmdldERlZmF1bHQoKS5nZXREZWZhdWx0WE1MQ2F0YWxvZygpOwotCQlJRGVsZWdhdGVDYXRhbG9nIHVyaURlbGVnYXRlID0gKElEZWxlZ2F0ZUNhdGFsb2cpeG1sQ2F0YWxvZy5jcmVhdGVDYXRhbG9nRWxlbWVudChJRGVsZWdhdGVDYXRhbG9nLkRFTEVHQVRFX1RZUEVfVVJJKTsKLQotCQlGaWxlIGRlbGVnYXRlQ2F0ID0gbWFrZVRlbXBGaWxlKCJkZWxlZ2F0ZVVyaSIsICI8Y2F0YWxvZyB4bWxucz1cInVybjpvYXNpczpuYW1lczp0YzplbnRpdHk6eG1sbnM6eG1sOmNhdGFsb2dcIj5cclxuIiArIAotCQkJIiAgICA8dXJpIG5hbWU9XCJ1cm46ZnVua3k6ZG9nXCIgdXJpPVwiZmlsZTovLy9mdW5reS1kb2cuZHRkXCIvPlxyXG4iICsgCi0JCQkiICAgIDx1cmlTdWZmaXggdXJpU3VmZml4PVwiOmNhdFwiIHVyaT1cImZpbGU6Ly8vc21lbGx5Y2F0LmR0ZFwiLz5cclxuIiArIAotCQkJIiAgICA8cmV3cml0ZVVSSSB1cmlTdGFydFN0cmluZz1cInVybjpmdW5reTpmaXNoOlwiIHJld3JpdGVQcmVmaXg9XCJmaWxlOi8vL2R0ZHMvXCIvPlxyXG4iICsgCi0JCQkiPC9jYXRhbG9nPiIpOwotCi0JCXVyaURlbGVnYXRlLnNldFN0YXJ0U3RyaW5nKCJ1cm46ZnVua3k6Iik7Ci0JCXVyaURlbGVnYXRlLnNldENhdGFsb2dMb2NhdGlvbihkZWxlZ2F0ZUNhdC50b1VSSSgpLnRvU3RyaW5nKCkpOwotCQl4bWxDYXRhbG9nLmFkZENhdGFsb2dFbGVtZW50KHVyaURlbGVnYXRlKTsKLQkJdHJ5IHsJCQkKLQkJCWFzc2VydEVxdWFscygidXJpIGVudHJ5IiwgImZpbGU6Ly8vZnVua3ktZG9nLmR0ZCIsIHhtbENhdGFsb2cucmVzb2x2ZVVSSSgidXJuOmZ1bmt5OmRvZyIpKTsKLQkJCWFzc2VydEVxdWFscygidXJpU3VmZml4IGVudHJ5IiwgImZpbGU6Ly8vc21lbGx5Y2F0LmR0ZCIsIHhtbENhdGFsb2cucmVzb2x2ZVVSSSgidXJuOmZ1bmt5OndoZXJlLWlzLW15OmNhdCIpKTsKLQkJCWFzc2VydEVxdWFscygicmV3cml0ZVVyaSBlbnRyeSIsICJmaWxlOi8vL2R0ZHMvcGFycm90LmR0ZCIsIHhtbENhdGFsb2cucmVzb2x2ZVVSSSgidXJuOmZ1bmt5OmZpc2g6cGFycm90LmR0ZCIpKTsKLQkJfSBmaW5hbGx5IHsKLQkJCXhtbENhdGFsb2cucmVtb3ZlQ2F0YWxvZ0VsZW1lbnQodXJpRGVsZWdhdGUpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSBGaWxlIG1ha2VUZW1wRmlsZShTdHJpbmcgbmFtZSwgU3RyaW5nIGNvbnRlbnRzKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlGaWxlIGRlbGVnYXRlQ2F0ID0gRmlsZVV0aWwubWFrZUZpbGVGb3IoImNhdGFsb2dzIiwgbmFtZSwgImNhdCIpOwotCQlGaWxlV3JpdGVyIGZ3ID0gbmV3IEZpbGVXcml0ZXIoZGVsZWdhdGVDYXQpOwotCQlmdy53cml0ZShjb250ZW50cyk7Ci0JCWZ3LmNsb3NlKCk7Ci0JCXJldHVybiBkZWxlZ2F0ZUNhdDsKLQl9Ci0KIAlwcml2YXRlIHZvaWQgZG9UZXN0KFN0cmluZyBFWFBFQ1RFRF9QVUJMSUNJRCkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogCQlJQ2F0YWxvZyB4bWxDYXRhbG9nID0gWE1MQ29yZVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0RGVmYXVsdFhNTENhdGFsb2coKTsKIAkJU3RyaW5nIHJlc29sdmVkID0geG1sQ2F0YWxvZy5yZXNvbHZlUHVibGljKEVYUEVDVEVEX1BVQkxJQ0lELCBudWxsKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2RvbS9BdHRySW1wbFRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9kb20vQXR0ckltcGxUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNjk0ZTI2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2RvbS9BdHRySW1wbFRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLmRvbTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9yWE1MOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uQXR0cjsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5hbWVkTm9kZU1hcDsKLQotcHVibGljIGNsYXNzIEF0dHJJbXBsVGVzdHMgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29udGVudHMgPSAiPGVsZW1lbnROYW1lIGF0dHJQcmVmaXg6bG9jYWw9J2xvcmVtJyAvPiI7IC8vJE5PTi1OTFMtMSQKLQotCXB1YmxpYyBBdHRySW1wbFRlc3RzKCkgewotCX0KLQotCXB1YmxpYyBBdHRySW1wbFRlc3RzKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RBdHRySW1wbFByZWZpeCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gKElET01Nb2RlbCkgU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5jcmVhdGVVbk1hbmFnZWRTdHJ1Y3R1cmVkTW9kZWxGb3IoQ29udGVudFR5cGVJZEZvclhNTC5Db250ZW50VHlwZUlEX1hNTCk7Ci0JCW1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLnNldChjb250ZW50cyk7Ci0JCQotCQlFbGVtZW50IGRvY3VtZW50RWxlbWVudCA9IG1vZGVsLmdldERvY3VtZW50KCkuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0JCWFzc2VydE5vdE51bGwoIm5vIGRvY3VtZW50IGVsZW1lbnQgZm91bmQiLCBkb2N1bWVudEVsZW1lbnQpOwotCQlOYW1lZE5vZGVNYXAgYXR0cmlidXRlcyA9IGRvY3VtZW50RWxlbWVudC5nZXRBdHRyaWJ1dGVzKCk7Ci0JCWFzc2VydFRydWUoIm5vIGF0dHJpYnV0ZXMgZm91bmQiLCBhdHRyaWJ1dGVzLmdldExlbmd0aCgpID4gMCk7Ci0JCUF0dHIgYXR0cmlidXRlID0gKEF0dHIpIGF0dHJpYnV0ZXMuaXRlbSgwKTsKLQkJYXNzZXJ0RXF1YWxzKCJhdHRyaWJ1dGUgcHJlZml4IHdhcyBub3QgYXMgZXhwZWN0ZWQiLCAiYXR0clByZWZpeCIsIGF0dHJpYnV0ZS5nZXRQcmVmaXgoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEF0dHJJbXBsTG9jYWxOYW1lKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSAoSURPTU1vZGVsKSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmNyZWF0ZVVuTWFuYWdlZFN0cnVjdHVyZWRNb2RlbEZvcihDb250ZW50VHlwZUlkRm9yWE1MLkNvbnRlbnRUeXBlSURfWE1MKTsKLQkJbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuc2V0KGNvbnRlbnRzKTsKLQotCQlFbGVtZW50IGRvY3VtZW50RWxlbWVudCA9IG1vZGVsLmdldERvY3VtZW50KCkuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0JCWFzc2VydE5vdE51bGwoIm5vIGRvY3VtZW50IGVsZW1lbnQgZm91bmQiLCBkb2N1bWVudEVsZW1lbnQpOwotCQlOYW1lZE5vZGVNYXAgYXR0cmlidXRlcyA9IGRvY3VtZW50RWxlbWVudC5nZXRBdHRyaWJ1dGVzKCk7Ci0JCWFzc2VydFRydWUoIm5vIGF0dHJpYnV0ZXMgZm91bmQiLCBhdHRyaWJ1dGVzLmdldExlbmd0aCgpID4gMCk7Ci0JCUF0dHIgYXR0cmlidXRlID0gKEF0dHIpIGF0dHJpYnV0ZXMuaXRlbSgwKTsKLQkJYXNzZXJ0RXF1YWxzKCJhdHRyaWJ1dGUgbG9jYWwgbmFtZSB3YXMgbm90IGFzIGV4cGVjdGVkIiwgImxvY2FsIiwgYXR0cmlidXRlLmdldExvY2FsTmFtZSgpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TmFtZXNwYWNlVVJJT25DcmVhdGlvbigpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gKElET01Nb2RlbCkgU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5jcmVhdGVVbk1hbmFnZWRTdHJ1Y3R1cmVkTW9kZWxGb3IoQ29udGVudFR5cGVJZEZvclhNTC5Db250ZW50VHlwZUlEX1hNTCk7Ci0JCW1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLnNldChjb250ZW50cyk7Ci0KLQkJQXR0ciBhdHRyID0gbW9kZWwuZ2V0RG9jdW1lbnQoKS5jcmVhdGVBdHRyaWJ1dGUoInNpbXBsZSIpOwotCQlhc3NlcnROdWxsKCJuYW1lc3BhY2Ugd2FzIGZvdW5kIiwgYXR0ci5nZXROYW1lc3BhY2VVUkkoKSk7Ci0JCQotCQlBdHRyIGF0dHIyID0gbW9kZWwuZ2V0RG9jdW1lbnQoKS5jcmVhdGVBdHRyaWJ1dGVOUygiaHR0cDovL2xvcmVtLmlwc3VtIiwgImNvbXBsZXgiKTsKLQkJYXNzZXJ0RXF1YWxzKCJhdHRyaWJ1dGUgbmFtZXNwYWNlIFVSSSB3YXMgbm90IGFzIGV4cGVjdGVkIiwgImh0dHA6Ly9sb3JlbS5pcHN1bSIsIGF0dHIyLmdldE5hbWVzcGFjZVVSSSgpKTsKLQkJQXR0ciBhdHRyMyA9IG1vZGVsLmdldERvY3VtZW50KCkuY3JlYXRlQXR0cmlidXRlTlMobnVsbCwgImNvbXBsZXgiKTsKLQkJYXNzZXJ0RXF1YWxzKCJhdHRyaWJ1dGUgbmFtZXNwYWNlIFVSSSB3YXMgbm90IGFzIGV4cGVjdGVkIiwgbnVsbCwgYXR0cjMuZ2V0TmFtZXNwYWNlVVJJKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3ROdWxsQXR0cmlidXRlVmFsdWUoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IChJRE9NTW9kZWwpIFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKENvbnRlbnRUeXBlSWRGb3JYTUwuQ29udGVudFR5cGVJRF9YTUwpOwotCQlBdHRyIGF0dHJpYnV0ZSA9IG1vZGVsLmdldERvY3VtZW50KCkuY3JlYXRlQXR0cmlidXRlKCJhdHRyIik7Ci0JCXRyeSB7Ci0JCQlhdHRyaWJ1dGUuc2V0Tm9kZVZhbHVlKG51bGwpOwotCQl9IGNhdGNoIChOdWxsUG9pbnRlckV4Y2VwdGlvbiBucGUpIHsKLQkJCWZhaWwoIlNldHRpbmcgYSBudWxsIG5vZGUgdmFsdWUgY2F1c2VkIGEgTnVsbFBvaW50ZXJFeGNlcHRpb24uIik7Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9kb20vRWxlbWVudEltcGxUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZG9tL0VsZW1lbnRJbXBsVGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTM2ZmNjYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9kb20vRWxlbWVudEltcGxUZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5kb207Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuQ29udGVudFR5cGVJZEZvclhNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBFbGVtZW50SW1wbFRlc3RzIGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIGNvbnRlbnRzID0gIjxlbGVtZW50UHJlZml4OmxvY2FsTmFtZSBhdHRyUHJlZml4OmxvY2FsPSdsb3JlbScgeG1sbnM6ZWxlbWVudFByZWZpeD0ndXJuOnByZWZpeCcgeG1sbnM6YXR0cmlidXRlUHJlZml4PSd1cm46YXR0cmlidXRlOnByZWZpeCcgLz4iOyAvLyROT04tTkxTLTEkCi0KLQlwdWJsaWMgRWxlbWVudEltcGxUZXN0cygpIHsKLQl9Ci0KLQlwdWJsaWMgRWxlbWVudEltcGxUZXN0cyhTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RWxlbWVudEltcGxQcmVmaXgoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IChJRE9NTW9kZWwpIFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKENvbnRlbnRUeXBlSWRGb3JYTUwuQ29udGVudFR5cGVJRF9YTUwpOwotCQltb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5zZXQoY29udGVudHMpOwotCi0JCUVsZW1lbnQgZG9jdW1lbnRFbGVtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKS5nZXREb2N1bWVudEVsZW1lbnQoKTsKLQkJYXNzZXJ0Tm90TnVsbCgibm8gZG9jdW1lbnQgZWxlbWVudCBmb3VuZCIsIGRvY3VtZW50RWxlbWVudCk7Ci0JCWFzc2VydEVxdWFscygiYXR0cmlidXRlIHByZWZpeCB3YXMgbm90IGFzIGV4cGVjdGVkIiwgImVsZW1lbnRQcmVmaXgiLCBkb2N1bWVudEVsZW1lbnQuZ2V0UHJlZml4KCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RFbGVtZW50SW1wbExvY2FsTmFtZSgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gKElET01Nb2RlbCkgU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5jcmVhdGVVbk1hbmFnZWRTdHJ1Y3R1cmVkTW9kZWxGb3IoQ29udGVudFR5cGVJZEZvclhNTC5Db250ZW50VHlwZUlEX1hNTCk7Ci0JCW1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLnNldChjb250ZW50cyk7Ci0KLQkJRWxlbWVudCBkb2N1bWVudEVsZW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpLmdldERvY3VtZW50RWxlbWVudCgpOwotCQlhc3NlcnROb3ROdWxsKCJubyBkb2N1bWVudCBlbGVtZW50IGZvdW5kIiwgZG9jdW1lbnRFbGVtZW50KTsKLQkJYXNzZXJ0RXF1YWxzKCJhdHRyaWJ1dGUgbG9jYWwgbmFtZSB3YXMgbm90IGFzIGV4cGVjdGVkIiwgImxvY2FsTmFtZSIsIGRvY3VtZW50RWxlbWVudC5nZXRMb2NhbE5hbWUoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEF0dHJCYXNlZEVsZW1lbnROYW1lc3BhY2UoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IChJRE9NTW9kZWwpIFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKENvbnRlbnRUeXBlSWRGb3JYTUwuQ29udGVudFR5cGVJRF9YTUwpOwotCQltb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5zZXQoY29udGVudHMpOwotCi0JCUVsZW1lbnQgZG9jdW1lbnRFbGVtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKS5nZXREb2N1bWVudEVsZW1lbnQoKTsKLQkJYXNzZXJ0Tm90TnVsbCgibm8gZG9jdW1lbnQgZWxlbWVudCBmb3VuZCIsIGRvY3VtZW50RWxlbWVudCk7Ci0JCWFzc2VydE5vdE51bGwoIk5hbWVzcGFjZSB3YXMgbm90IGZvdW5kLiIsIGRvY3VtZW50RWxlbWVudC5nZXROYW1lc3BhY2VVUkkoKSk7Ci0JCVN0cmluZyBuYW1lc3BhY2UgPSBkb2N1bWVudEVsZW1lbnQuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0JCWFzc2VydEVxdWFscygiYXR0cmlidXRlIGxvY2FsIG5hbWUgd2FzIG5vdCBhcyBleHBlY3RlZCIsICJ1cm46cHJlZml4IiwgbmFtZXNwYWNlKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TmFtZXNwYWNlVVJJT25DcmVhdGlvbigpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gKElET01Nb2RlbCkgU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5jcmVhdGVVbk1hbmFnZWRTdHJ1Y3R1cmVkTW9kZWxGb3IoQ29udGVudFR5cGVJZEZvclhNTC5Db250ZW50VHlwZUlEX1hNTCk7Ci0JCW1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLnNldChjb250ZW50cyk7Ci0KLQkJRWxlbWVudCBlbGVtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKS5jcmVhdGVFbGVtZW50KCJzaW1wbGUiKTsKLQkJYXNzZXJ0TnVsbCgibmFtZXNwYWNlIHdhcyBmb3VuZCIsIGVsZW1lbnQuZ2V0TmFtZXNwYWNlVVJJKCkpOwotCi0JCUVsZW1lbnQgZWxlbWVudDIgPSBtb2RlbC5nZXREb2N1bWVudCgpLmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL2xvcmVtLmlwc3VtIiwgImNvbXBsZXgiKTsKLQkJYXNzZXJ0RXF1YWxzKCJhdHRyaWJ1dGUgbmFtZXNwYWNlIFVSSSB3YXMgbm90IGFzIGV4cGVjdGVkIiwgImh0dHA6Ly9sb3JlbS5pcHN1bSIsIGVsZW1lbnQyLmdldE5hbWVzcGFjZVVSSSgpKTsKLQkJRWxlbWVudCBlbGVtZW50MyA9IG1vZGVsLmdldERvY3VtZW50KCkuY3JlYXRlRWxlbWVudE5TKG51bGwsICJjb21wbGV4Iik7Ci0JCWFzc2VydEVxdWFscygiYXR0cmlidXRlIG5hbWVzcGFjZSBVUkkgd2FzIG5vdCBhcyBleHBlY3RlZCIsIG51bGwsIGVsZW1lbnQzLmdldE5hbWVzcGFjZVVSSSgpKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9kb20vTm9kZUxpc3RJbXBsVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2RvbS9Ob2RlTGlzdEltcGxUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZmVjNmNhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2RvbS9Ob2RlTGlzdEltcGxUZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTg0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMuZG9tOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmRvY3VtZW50Lk5vZGVMaXN0SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuQ29udGVudFR5cGVJZEZvclhNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLXB1YmxpYyBjbGFzcyBOb2RlTGlzdEltcGxUZXN0cyBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXByaXZhdGUgc3RhdGljIGNsYXNzIEFjY2Vzc29yTm9kZUxpc3QgZXh0ZW5kcyBOb2RlTGlzdEltcGwgewotCQlwdWJsaWMgTm9kZSBhcHBlbmROb2RlKE5vZGUgbm9kZSkgewotCQkJcmV0dXJuIHN1cGVyLmFwcGVuZE5vZGUobm9kZSk7Ci0JCX0KLQotCQlwdWJsaWMgTm9kZSBpbnNlcnROb2RlKE5vZGUgbm9kZSwgaW50IGluZGV4KSB7Ci0JCQlyZXR1cm4gc3VwZXIuaW5zZXJ0Tm9kZShub2RlLCBpbmRleCk7Ci0JCX0KLQotCQlwdWJsaWMgTm9kZSByZW1vdmVOb2RlKGludCBpbmRleCkgewotCQkJcmV0dXJuIHN1cGVyLnJlbW92ZU5vZGUoaW5kZXgpOwotCQl9Ci0KLQl9Ci0KLQlwdWJsaWMgTm9kZUxpc3RJbXBsVGVzdHMoKSB7Ci0JfQotCi0JcHVibGljIE5vZGVMaXN0SW1wbFRlc3RzKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RJbnNlcnRBdEluZGV4KCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSAoSURPTU1vZGVsKSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmNyZWF0ZVVuTWFuYWdlZFN0cnVjdHVyZWRNb2RlbEZvcihDb250ZW50VHlwZUlkRm9yWE1MLkNvbnRlbnRUeXBlSURfWE1MKTsKLQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCUFjY2Vzc29yTm9kZUxpc3QgbGlzdCA9IG5ldyBBY2Nlc3Nvck5vZGVMaXN0KCk7Ci0KLQkJYXNzZXJ0RXF1YWxzKCJub24temVybyBsZW5ndGggYXQgc3RhcnQiLCAwLCBsaXN0LmdldExlbmd0aCgpKTsKLQotCQlsaXN0LmFwcGVuZE5vZGUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVzdDAiKSk7Ci0JCWxpc3QuYXBwZW5kTm9kZShkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXN0MSIpKTsKLQkJbGlzdC5hcHBlbmROb2RlKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlc3QyIikpOwotCQlsaXN0LmFwcGVuZE5vZGUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVzdDMiKSk7Ci0JCWxpc3QuYXBwZW5kTm9kZShkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXN0NCIpKTsKLQkJbGlzdC5hcHBlbmROb2RlKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlc3Q1IikpOwotCQlsaXN0LmFwcGVuZE5vZGUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVzdDYiKSk7Ci0KLQkJbGlzdC5pbnNlcnROb2RlKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlc3QiKSwgMyk7Ci0JCQotCQlhc3NlcnRFcXVhbHMoImxpc3Qgc2l6ZSBkaWQgbm90IGluY3JlbWVudCIsIDgsIGxpc3QuZ2V0TGVuZ3RoKCkpOwotCQkKLQkJYXNzZXJ0RXF1YWxzKCJ0ZXN0MCB3YXMgbm90IGF0IGV4cGVjdGVkIGluZGV4IiwgInRlc3QwIiwgbGlzdC5pdGVtKDApLmdldExvY2FsTmFtZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJ0ZXN0MSB3YXMgbm90IGF0IGV4cGVjdGVkIGluZGV4IiwgInRlc3QxIiwgbGlzdC5pdGVtKDEpLmdldExvY2FsTmFtZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJ0ZXN0MiB3YXMgbm90IGF0IGV4cGVjdGVkIGluZGV4IiwgInRlc3QyIiwgbGlzdC5pdGVtKDIpLmdldExvY2FsTmFtZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJ0ZXN0IHdhcyBub3QgYXQgZXhwZWN0ZWQgaW5kZXgiLCAgInRlc3QiLCAgbGlzdC5pdGVtKDMpLmdldExvY2FsTmFtZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJ0ZXN0MyB3YXMgbm90IGF0IGV4cGVjdGVkIGluZGV4IiwgInRlc3QzIiwgbGlzdC5pdGVtKDQpLmdldExvY2FsTmFtZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJ0ZXN0NCB3YXMgbm90IGF0IGV4cGVjdGVkIGluZGV4IiwgInRlc3Q0IiwgbGlzdC5pdGVtKDUpLmdldExvY2FsTmFtZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJ0ZXN0NSB3YXMgbm90IGF0IGV4cGVjdGVkIGluZGV4IiwgInRlc3Q1IiwgbGlzdC5pdGVtKDYpLmdldExvY2FsTmFtZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJ0ZXN0NiB3YXMgbm90IGF0IGV4cGVjdGVkIGluZGV4IiwgInRlc3Q2IiwgbGlzdC5pdGVtKDcpLmdldExvY2FsTmFtZSgpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UmVtb3ZlRnJvbUluZGV4KCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSAoSURPTU1vZGVsKSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmNyZWF0ZVVuTWFuYWdlZFN0cnVjdHVyZWRNb2RlbEZvcihDb250ZW50VHlwZUlkRm9yWE1MLkNvbnRlbnRUeXBlSURfWE1MKTsKLQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCUFjY2Vzc29yTm9kZUxpc3QgbGlzdCA9IG5ldyBBY2Nlc3Nvck5vZGVMaXN0KCk7Ci0KLQkJbGlzdC5hcHBlbmROb2RlKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlc3QwIikpOwotCQlsaXN0LmFwcGVuZE5vZGUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVzdDEiKSk7Ci0JCWxpc3QuYXBwZW5kTm9kZShkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXN0MiIpKTsKLQkJbGlzdC5hcHBlbmROb2RlKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlc3QzIikpOwotCQlsaXN0LmFwcGVuZE5vZGUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVzdDQiKSk7Ci0JCWxpc3QuYXBwZW5kTm9kZShkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXN0NSIpKTsKLQkJbGlzdC5hcHBlbmROb2RlKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlc3Q2IikpOwotCQlhc3NlcnRFcXVhbHMoIndyb25nIGxlbmd0aCBhZnRlciBzZXR1cCIsIDcsIGxpc3QuZ2V0TGVuZ3RoKCkpOwotCi0JCU5vZGUgZXhjaXNlZCA9IGxpc3QucmVtb3ZlTm9kZSgzKTsKLQkJYXNzZXJ0RXF1YWxzKCJ0ZXN0MyB3YXMgbm90IHRoZSBvbmUgcmVtb3ZlZCIsICJ0ZXN0MyIsIGV4Y2lzZWQuZ2V0TG9jYWxOYW1lKCkpOwotCi0JCWFzc2VydEVxdWFscygid3JvbmcgbGVuZ3RoIGFmdGVyIHJlbW92YWwiLCA2LCBsaXN0LmdldExlbmd0aCgpKTsJCQotCQlhc3NlcnRFcXVhbHMoInRlc3QwIHdhcyBub3QgYXQgZXhwZWN0ZWQgaW5kZXgiLCAidGVzdDAiLCBsaXN0Lml0ZW0oMCkuZ2V0TG9jYWxOYW1lKCkpOwotCQlhc3NlcnRFcXVhbHMoInRlc3QxIHdhcyBub3QgYXQgZXhwZWN0ZWQgaW5kZXgiLCAidGVzdDEiLCBsaXN0Lml0ZW0oMSkuZ2V0TG9jYWxOYW1lKCkpOwotCQlhc3NlcnRFcXVhbHMoInRlc3QyIHdhcyBub3QgYXQgZXhwZWN0ZWQgaW5kZXgiLCAidGVzdDIiLCBsaXN0Lml0ZW0oMikuZ2V0TG9jYWxOYW1lKCkpOwotCQlhc3NlcnRFcXVhbHMoInRlc3Q0IHdhcyBub3QgYXQgZXhwZWN0ZWQgaW5kZXgiLCAidGVzdDQiLCBsaXN0Lml0ZW0oMykuZ2V0TG9jYWxOYW1lKCkpOwotCQlhc3NlcnRFcXVhbHMoInRlc3Q1IHdhcyBub3QgYXQgZXhwZWN0ZWQgaW5kZXgiLCAidGVzdDUiLCBsaXN0Lml0ZW0oNCkuZ2V0TG9jYWxOYW1lKCkpOwotCQlhc3NlcnRFcXVhbHMoInRlc3Q2IHdhcyBub3QgYXQgZXhwZWN0ZWQgaW5kZXgiLCAidGVzdDYiLCBsaXN0Lml0ZW0oNSkuZ2V0TG9jYWxOYW1lKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RJbnNlcnRBdE5lZ2F0aXZlSW5kZXgoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IChJRE9NTW9kZWwpIFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKENvbnRlbnRUeXBlSWRGb3JYTUwuQ29udGVudFR5cGVJRF9YTUwpOwotCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJQWNjZXNzb3JOb2RlTGlzdCBsaXN0ID0gbmV3IEFjY2Vzc29yTm9kZUxpc3QoKTsKLQotCQkvLyBhcHBlbmRzIG9uIGJhZCB2YWx1ZQotCQlsaXN0Lmluc2VydE5vZGUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVzdC0xIiksLTEpOwotCQlhc3NlcnRFcXVhbHMoIndyb25nIGxlbmd0aCBhZnRlciBpbnNlcnQgYXQgbmVnYXRpdmUgaW5kZXgiLCAxLCBsaXN0LmdldExlbmd0aCgpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UmVtb3ZlRnJvbU5lZ2F0aXZlSW5kZXgoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IChJRE9NTW9kZWwpIFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKENvbnRlbnRUeXBlSWRGb3JYTUwuQ29udGVudFR5cGVJRF9YTUwpOwotCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJQWNjZXNzb3JOb2RlTGlzdCBsaXN0ID0gbmV3IEFjY2Vzc29yTm9kZUxpc3QoKTsKLQotCQlsaXN0LmFwcGVuZE5vZGUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVzdC0xIikpOwotCQkvLyBpZ25vcmVzIGJhZCBpbmRleAotCQlsaXN0LnJlbW92ZU5vZGUoLTEpOwotCQlhc3NlcnRFcXVhbHMoIndyb25nIGxlbmd0aCBhZnRlciByZW1vdmFsIGF0IG5lZ2F0aXZlIGluZGV4IiwgMSwgbGlzdC5nZXRMZW5ndGgoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEluc2VydEF0RXhjZXNzaXZlSW5kZXgoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IChJRE9NTW9kZWwpIFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKENvbnRlbnRUeXBlSWRGb3JYTUwuQ29udGVudFR5cGVJRF9YTUwpOwotCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJQWNjZXNzb3JOb2RlTGlzdCBsaXN0ID0gbmV3IEFjY2Vzc29yTm9kZUxpc3QoKTsKLQotCQkvLyBhcHBlbmRzIG9uIGJhZCB2YWx1ZQotCQlsaXN0Lmluc2VydE5vZGUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVzdDMiKSwgMyk7Ci0JCWFzc2VydEVxdWFscygid3JvbmcgbGVuZ3RoIGFmdGVyIGluc2VydCBhdCBvdXQgb2YgYm91bmRzIGluZGV4IiwgMSwgbGlzdC5nZXRMZW5ndGgoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFJlbW92ZUZyb21FeGNlc3NpdmVJbmRleCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gKElET01Nb2RlbCkgU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5jcmVhdGVVbk1hbmFnZWRTdHJ1Y3R1cmVkTW9kZWxGb3IoQ29udGVudFR5cGVJZEZvclhNTC5Db250ZW50VHlwZUlEX1hNTCk7Ci0JCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQlBY2Nlc3Nvck5vZGVMaXN0IGxpc3QgPSBuZXcgQWNjZXNzb3JOb2RlTGlzdCgpOwotCi0JCWxpc3QuYXBwZW5kTm9kZShkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXN0MCIpKTsKLQkJLy8gaWdub3JlcyBiYWQgaW5kZXgKLQkJbGlzdC5yZW1vdmVOb2RlKDMpOwotCQlhc3NlcnRFcXVhbHMoIndyb25nIGxlbmd0aCBhZnRlciByZW1vdmFsIGF0IG5vbmV4aXN0ZW50IGluZGV4IiwgMSwgbGlzdC5nZXRMZW5ndGgoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEFwcGVuZCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gKElET01Nb2RlbCkgU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5jcmVhdGVVbk1hbmFnZWRTdHJ1Y3R1cmVkTW9kZWxGb3IoQ29udGVudFR5cGVJZEZvclhNTC5Db250ZW50VHlwZUlEX1hNTCk7Ci0JCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQlBY2Nlc3Nvck5vZGVMaXN0IGxpc3QgPSBuZXcgQWNjZXNzb3JOb2RlTGlzdCgpOwotCi0JCWFzc2VydEVxdWFscygibm9uLXplcm8gbGVuZ3RoIGF0IHN0YXJ0IiwgMCwgbGlzdC5nZXRMZW5ndGgoKSk7Ci0KLQkJbGlzdC5hcHBlbmROb2RlKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlc3QxIikpOwotCQlhc3NlcnRFcXVhbHMoImxpc3Qgc2l6ZSBkaWQgbm90IGluY3JlbWVudCIsIDEsIGxpc3QuZ2V0TGVuZ3RoKCkpOwotCi0JCWxpc3QuYXBwZW5kTm9kZShkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXN0MiIpKTsKLQkJYXNzZXJ0RXF1YWxzKCJsaXN0IHNpemUgZGlkIG5vdCBpbmNyZW1lbnQiLCAyLCBsaXN0LmdldExlbmd0aCgpKTsKLQotCQlsaXN0LmFwcGVuZE5vZGUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVzdDMiKSk7Ci0JCWFzc2VydEVxdWFscygibGlzdCBzaXplIGRpZCBub3QgaW5jcmVtZW50IiwgMywgbGlzdC5nZXRMZW5ndGgoKSk7Ci0KLQkJTm9kZSBlbGVtZW50NCA9IGxpc3QuYXBwZW5kTm9kZShkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXN0NCIpKTsKLQkJYXNzZXJ0RXF1YWxzKCJsaXN0IHNpemUgZGlkIG5vdCBpbmNyZW1lbnQiLCA0LCBsaXN0LmdldExlbmd0aCgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJ0ZXN0NCBub3QgcmV0dXJuZWQgZnJvbSBhcHBlbmQiLCAidGVzdDQiLCBlbGVtZW50NC5nZXRMb2NhbE5hbWUoKSk7Ci0JCQotCQlOb2RlIGVsZW1lbnQ1ID0gbGlzdC5hcHBlbmROb2RlKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlc3Q1IikpOwotCQlhc3NlcnRFcXVhbHMoImxpc3Qgc2l6ZSBkaWQgbm90IGluY3JlbWVudCIsIDUsIGxpc3QuZ2V0TGVuZ3RoKCkpOwotCQlhc3NlcnRFcXVhbHMoInRlc3Q1IG5vdCByZXR1cm5lZCBmcm9tIGFwcGVuZCIsICJ0ZXN0NSIsIGVsZW1lbnQ1LmdldExvY2FsTmFtZSgpKTsKLQkJCi0JCU5vZGUgZWxlbWVudDYgPSBsaXN0LmFwcGVuZE5vZGUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVzdDYiKSk7Ci0JCWFzc2VydEVxdWFscygibGlzdCBzaXplIGRpZCBub3QgaW5jcmVtZW50IiwgNiwgbGlzdC5nZXRMZW5ndGgoKSk7Ci0JCWFzc2VydEVxdWFscygidGVzdDYgbm90IHJldHVybmVkIGZyb20gYXBwZW5kIiwgInRlc3Q2IiwgZWxlbWVudDYuZ2V0TG9jYWxOYW1lKCkpOwotCQkKLQkJTm9kZSBlbGVtZW50NyA9IGxpc3QuYXBwZW5kTm9kZShkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXN0NyIpKTsKLQkJYXNzZXJ0RXF1YWxzKCJsaXN0IHNpemUgZGlkIG5vdCBpbmNyZW1lbnQiLCA3LCBsaXN0LmdldExlbmd0aCgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJ0ZXN0NyBub3QgcmV0dXJuZWQgZnJvbSBhcHBlbmQiLCAidGVzdDciLCBlbGVtZW50Ny5nZXRMb2NhbE5hbWUoKSk7Ci0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvVGVzdFBhcnRpdGlvbkZvcm1hdHRlclhNTC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L1Rlc3RQYXJ0aXRpb25Gb3JtYXR0ZXJYTUwuamF2YQppbmRleCBiMzgyOTQzLi4yZGQ1YjI2IDEwMDY0NAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvVGVzdFBhcnRpdGlvbkZvcm1hdHRlclhNTC5qYXZhCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC9UZXN0UGFydGl0aW9uRm9ybWF0dGVyWE1MLmphdmEKQEAgLTEsNSArMSw1IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwogICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCiAgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdApAQCAtMzE4LDE2ICszMTgsMTEgQEAKIAkJcHJlZnMuc2V0Q2xlYXJBbGxCbGFua0xpbmVzKHRydWUpOwogCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3RmaWxlcy94bWwveG1sLWtlZXAtYmxhbmstbGluZXMueG1sIiwgInRlc3RmaWxlcy94bWwveG1sLWNsZWFyLWJsYW5rLWxpbmVzLWZtdC54bWwiLCBwcmVmcyk7CiAJfQotCQotCXB1YmxpYyB2b2lkIHRlc3RGb3JtYXRNYWxmb3JtZWRFbmRUYWcoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQkvLyBCdWcgMjIxMjc5Ci0JCS8vIFRlc3QgdGhhdCBtYWxmb3JtZWQgZW5kIHRhZ3MgZG8gbm90IGNhdXNlIGEgTlBFIGFuZCBmb3JtYXQgdGhlIGRvY3VtZW50Ci0JCWZvcm1hdEFuZEFzc2VydEVxdWFscygidGVzdGZpbGVzL3htbC94bWwtMjIxMjc5LnhtbCIsICJ0ZXN0ZmlsZXMveG1sL3htbC0yMjEyNzktZm10LnhtbCIpOwotCX0KIAogCXB1YmxpYyB2b2lkIHRlc3RGb3JtYXRXaXRoRnJhY3R1cmVkWE1MQ29udGVudCgpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7CiAJCS8vIEJ1ZyAyMjkxMzUKIAkJLy8gVGVzdCB0aGF0IHRleHQgY29udGVudCB0aGF0IGlzIHNwbGl0IGludG8gbXVsdGlwbGUgZG9jdW1lbnQgcmVnaW9ucyBkb2VzIG5vdCBzdG9wIHRoZSBmb3JtYXR0ZXIKIAkJZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKCJ0ZXN0ZmlsZXMveG1sL3htbC0yMjkxMzUueG1sIiwgInRlc3RmaWxlcy94bWwveG1sLTIyOTEzNS1mbXQueG1sIik7CiAJfQorCiB9CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtMjIxMjc5LWZtdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtMjIxMjc5LWZtdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwMmZjMGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLTIyMTI3OS1mbXQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGxpYnJhcnk+Ci0JPGJvb2tzPgotCQk8Ym9vaz4KLQkJCTx0aXRsZT5UaXRsZTwvdGl0bGU+Ci0JCQk8YXV0aG9yPkF1dGhvcjwvYXV0aG9yPgotCQk8L2Jvb2sgCi0JPC9ib29rcz4KLTwvbGlicmFyeT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtMjIxMjc5LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC0yMjEyNzkueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOTMwYjIyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC0yMjEyNzkueG1sCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGxpYnJhcnk+Ci08Ym9va3M+Ci08Ym9vaz4KLTx0aXRsZT5UaXRsZTwvdGl0bGU+Ci08YXV0aG9yPkF1dGhvcjwvYXV0aG9yPgotCTwvYm9vayA8L2Jvb2tzPgotPC9saWJyYXJ5PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC0yMjkxMzUtZm10LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC0yMjkxMzUtZm10LnhtbAppbmRleCA5NWE1NzFjLi5kZjVlMDI5IDEwMDY0NAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtMjI5MTM1LWZtdC54bWwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLTIyOTEzNS1mbXQueG1sCkBAIC0xMSw0ICsxMSw0IEBACiAJCTxwYXR0ZXJuPiV5eXl5LSVtbS0lZGQ8L3BhdHRlcm4+CiAJCTxkYXRlPjIwMDktMDQtMTM8L2RhdGU+CiAJPC9yZWxlYXNlRGF0ZT4KLTwvYm9vaz4KKzwvYm9vaz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtMjI5MTM1LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC0yMjkxMzUueG1sCmluZGV4IDY3ZWZhMmQuLjkwMjZiMDcgMTAwNjQ0Ci0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC0yMjkxMzUueG1sCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC0yMjkxMzUueG1sCkBAIC0xMSw0ICsxMSw0IEBACiA8cGF0dGVybj4leXl5eS0lbW0tJWRkPC9wYXR0ZXJuPgogPGRhdGU+MjAwOS0wNC0xMzwvZGF0ZT4KIAkJCTwvcmVsZWFzZURhdGU+Ci08L2Jvb2s+Cis8L2Jvb2s+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvTUVUQS1JTkYvTUFOSUZFU1QuTUYKaW5kZXggMGUzZDU3OS4uNzdmZmYyMyAxMDA2NDQKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0yLDcgKzIsNyBAQAogQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgogQnVuZGxlLU5hbWU6ICVCdW5kbGUtTmFtZS4wCiBCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nCi1CdW5kbGUtVmVyc2lvbjogMS4wLjMwMC5xdWFsaWZpZXIKK0J1bmRsZS1WZXJzaW9uOiAxLjAuMjAxLnF1YWxpZmllcgogQnVuZGxlLUNsYXNzUGF0aDogdGVzdHMuamFyCiBCdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLlRlc3RzUGx1Z2luCiBCdW5kbGUtVmVuZG9yOiAlQnVuZGxlLVZlbmRvci4wCkBAIC0xNSwxMiArMTUsMTIgQEAKICBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLndyaXRlLAogIG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcueG1sCiBSZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMsCi0gb3JnLmp1bml0O2J1bmRsZS12ZXJzaW9uPSJbMy44LjEsNC4wLjApIiwKKyBvcmcuanVuaXQ7YnVuZGxlLXZlcnNpb249IlszLjguMCw0LjAuMCkiLAogIG9yZy5lY2xpcHNlLnVpLAogIG9yZy5lY2xpcHNlLnVpLndvcmtiZW5jaCwKICBvcmcuZWNsaXBzZS51aS5pZGUsCiAgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLAogIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKICBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUKLUJ1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5CitFY2xpcHNlLUxhenlTdGFydDogdHJ1ZQogQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS40CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL0VuY29kaW5nVGVzdFN1aXRlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL0VuY29kaW5nVGVzdFN1aXRlLmphdmEKaW5kZXggYTU5OTg1MC4uZjc3YmFjOSAxMDA2NDQKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9FbmNvZGluZ1Rlc3RTdWl0ZS5qYXZhCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvRW5jb2RpbmdUZXN0U3VpdGUuamF2YQpAQCAtMjksMTIgKzI5LDEwIEBACiBwdWJsaWMgY2xhc3MgRW5jb2RpbmdUZXN0U3VpdGUgZXh0ZW5kcyBUZXN0U3VpdGUgewogCiAJLy8gRklYTUU6IGNvbW1lbnRlZCBvdXQgbGFuZy4gc3BlYy4gdGVzdHMsIHVudGlsIGFsbCBtaWdyYXRlZCB0byBvcmcuZWNsaXBzZSAKLQkvLyBbMjU4MzQzXSBqVW5pdCBmYWlsdXJlcyBhZnRlciBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUueG1sIGNvbnRlbnQgdHlwZSBpcyBkaXNhYmxlZAogCXByaXZhdGUgc3RhdGljIENsYXNzW10gY2xhc3NlcyA9IG5ldyBDbGFzc1tde1Rlc3RPdmVycmlkZXMuY2xhc3MsIFRlc3RDb2RlZFJlYWRlci5jbGFzcywgVGVzdENvZGVkV3JpdGUuY2xhc3MsIFhNTEVuY29kaW5nVGVzdHMuY2xhc3MsIFhNTEhlYWRUb2tlbml6ZXJUZXN0ZXIuY2xhc3MsIFRlc3RDb250ZW50VHlwZURlc2NyaXB0aW9uT25HZW5uZWRGaWxlcy5jbGFzcywgVGVzdENvZGVkUmVhZGVyT25HZW5uZWRGaWxlcy5jbGFzcywgVGVzdENvbnRlbnREZXNjcmlwdGlvbi5jbGFzcywgVGVzdENvbnRlbnRUeXBlcy5jbGFzcywgVGVzdENvbW1vbk5hbWVzLmNsYXNzLCBUZXN0Q29udGVudFR5cGVEZXRlY3Rpb25Gb3JYTUwuY2xhc3N9OwotLy8JcHJpdmF0ZSBzdGF0aWMgQ2xhc3NbXSBjbGFzc2VzID0gbmV3IENsYXNzW117VGVzdE92ZXJyaWRlcy5jbGFzcywgVGVzdENvZGVkUmVhZGVyLmNsYXNzLCBUZXN0Q29kZWRXcml0ZS5jbGFzcywgWE1MRW5jb2RpbmdUZXN0cy5jbGFzcywgWE1MSGVhZFRva2VuaXplclRlc3Rlci5jbGFzcywgVGVzdENvbnRlbnRUeXBlRGVzY3JpcHRpb25Pbkdlbm5lZEZpbGVzLmNsYXNzLCBUZXN0Q29kZWRSZWFkZXJPbkdlbm5lZEZpbGVzLmNsYXNzLCBUZXN0Q29udGVudERlc2NyaXB0aW9uLmNsYXNzLCBUZXN0Q29udGVudFR5cGVzLmNsYXNzLCBUZXN0Q29tbW9uTmFtZXMuY2xhc3N9OwogCS8vcHJpdmF0ZSBzdGF0aWMgQ2xhc3NbXSBjbGFzc2VzID0gbmV3IENsYXNzW117VGVzdE92ZXJyaWRlcy5jbGFzcywgQ1NTRW5jb2RpbmdUZXN0ZXIuY2xhc3MsIENTU0hlYWRUb2tlbml6ZXJUZXN0ZXIuY2xhc3MsIEhUTUxFbmNvZGluZ1Rlc3RzLmNsYXNzLCBIVE1MSGVhZFRva2VuaXplclRlc3Rlci5jbGFzcywgSlNQRW5jb2RpbmdUZXN0cy5jbGFzcywgSlNQSGVhZFRva2VuaXplclRlc3Rlci5jbGFzcywgVGVzdENvZGVkUmVhZGVyLmNsYXNzLCBUZXN0Q29kZWRXcml0ZS5jbGFzcywgWE1MRW5jb2RpbmdUZXN0cy5jbGFzcywgWE1MSGVhZFRva2VuaXplclRlc3Rlci5jbGFzcywgWE1MTWFsZm9ybWVkSW5wdXRUZXN0cy5jbGFzcywgVGVzdENvbnRlbnRUeXBlRGVzY3JpcHRpb25Pbkdlbm5lZEZpbGVzLmNsYXNzLCBUZXN0Q29kZWRSZWFkZXJPbkdlbm5lZEZpbGVzLmNsYXNzLCBUZXN0Q29udGVudFR5cGVEZXRlY3Rpb24uY2xhc3MsIFRlc3RDb250ZW50RGVzY3JpcHRpb24uY2xhc3MsIFRlc3RDb250ZW50VHlwZXMuY2xhc3MsIFRlc3RDb21tb25OYW1lcy5jbGFzc307CiAJcHVibGljIEVuY29kaW5nVGVzdFN1aXRlKCkgewotCQlzdXBlcigiWE1MIEVuY29kaW5nIFRlc3QgU3VpdGUiKTsKKwkJc3VwZXIoIkVuY29kaW5nIFRlc3QgU3VpdGUiKTsKIAkJZm9yIChpbnQgaSA9IDA7IGkgPCBjbGFzc2VzLmxlbmd0aDsgaSsrKSB7CiAJCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoY2xhc3Nlc1tpXSwgY2xhc3Nlc1tpXS5nZXROYW1lKCkpKTsKIAkJfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9yZWFkL1Rlc3RDb250ZW50RGVzY3JpcHRpb24uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvcmVhZC9UZXN0Q29udGVudERlc2NyaXB0aW9uLmphdmEKaW5kZXggODVlNmE2ZS4uNzZlYmNjYiAxMDA2NDQKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9yZWFkL1Rlc3RDb250ZW50RGVzY3JpcHRpb24uamF2YQorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3JlYWQvVGVzdENvbnRlbnREZXNjcmlwdGlvbi5qYXZhCkBAIC00NjAsMTAgKzQ2MCwxMCBAQAogCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKIAkJZG9UZXN0KCJVVEYtOCIsICJ0ZXN0ZmlsZXMveG1sL3Rlc3RJbGxGb3JtZWQyLnhtbCIsIG51bGwpOwogCX0KLS8vICBbMjQ5MjE0XSAtIFhNTENvbnRlbnREZXNjcmliZXIgbm8gbG9uZ2VyIHJldHVybnMgY29udGVudCB0eXBlcyBmb3IgaW52YWxpZCBlbmNvZGluZ3MKLS8vCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLS8vCQlkb1Rlc3QoIlVURi04IHN0YW5kYWxvbmU9IiwgInRlc3RmaWxlcy94bWwvdGVzdElsbEZvcm1lZDMueG1sIiwgamF2YS5uaW8uY2hhcnNldC5JbGxlZ2FsQ2hhcnNldE5hbWVFeGNlcHRpb24uY2xhc3MpOwotLy8JfQorCisJcHVibGljIHZvaWQgdGVzdEZpbGUxMTUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geworCQlkb1Rlc3QoIlVURi04IHN0YW5kYWxvbmU9IiwgInRlc3RmaWxlcy94bWwvdGVzdElsbEZvcm1lZDMueG1sIiwgamF2YS5uaW8uY2hhcnNldC5JbGxlZ2FsQ2hhcnNldE5hbWVFeGNlcHRpb24uY2xhc3MpOworCX0KIAogCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKIAkJZG9UZXN0KCJVVEYtOCIsICJ0ZXN0ZmlsZXMveG1sL3Rlc3RJbGxGb3JtZWQ0LnhtbCIsIG51bGwpOwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9yZWFkL1Rlc3RDb250ZW50VHlwZURldGVjdGlvbkZvclhNTC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9yZWFkL1Rlc3RDb250ZW50VHlwZURldGVjdGlvbkZvclhNTC5qYXZhCmluZGV4IGEyMGFmYTIuLjhjZTAwOWMgMTAwNjQ0Ci0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvcmVhZC9UZXN0Q29udGVudFR5cGVEZXRlY3Rpb25Gb3JYTUwuamF2YQorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3JlYWQvVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uRm9yWE1MLmphdmEKQEAgLTE5LDcgKzE5LDcgQEAKIHB1YmxpYyBjbGFzcyBUZXN0Q29udGVudFR5cGVEZXRlY3Rpb25Gb3JYTUwgZXh0ZW5kcyBUZXN0Q29udGVudFR5cGVEZXRlY3Rpb24gewogCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBleHBlY3RlZEN1c3RvbVhNTENvbnRlbnRUeXBlID0gIm9yZy5lY2xpcHNlLndzdC54bWwuY29yZS54bWxzb3VyY2UiOwogCQotLy8JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIGV4cGVjdGVkWFNMQ29udGVudFR5cGUgPSAib3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnhzbHNvdXJjZSI7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIGV4cGVjdGVkWFNMQ29udGVudFR5cGUgPSAib3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnhzbHNvdXJjZSI7CiAJCiAJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIGV4cGVjdGVkWE1MQ29udGVudFR5cGUgPSAib3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnhtbCI7CiAKQEAgLTQyLDEwICs0MiwxMCBAQAogCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKIAkJZG9UZXN0KGV4cGVjdGVkWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL0lsbGZvcm1lZE5vcm1hbE5vbkRlZmF1bHQueG1sIiwgbnVsbCk7CiAJfQotLy8gIFsyNTE3ODZdIC0gTm8gZW5jb2Rpbmcgc2hvdWxkIHRyeSB0byBiZSBwaWNrZWQgdXAgYnkgdGhlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS54bWxzb3VyY2UKLS8vCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLS8vCQlkb1Rlc3QoZXhwZWN0ZWRYTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvTWFsZm9ybWVkTm9FbmNvZGluZy54bWwiLCBudWxsKTsKLS8vCX0KKworCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKKwkJZG9UZXN0KGV4cGVjdGVkWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL01hbGZvcm1lZE5vRW5jb2RpbmcueG1sIiwgbnVsbCk7CisJfQogCiAJLyoqCiAJICogVGhpcyBmaWxlIGlzIGlsbGZvcm1lZCBpbiBpdHMgc3BlY2lmaWVkIGNoYXJzZXQKQEAgLTUzLDE0ICs1MywxMyBAQAogCSAqIEB0aHJvd3MgQ29yZUV4Y2VwdGlvbgogCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KIAkgKi8KLS8vICBbMjUxNzg2XSAtIE5vIGVuY29kaW5nIHNob3VsZCB0cnkgdG8gYmUgcGlja2VkIHVwIGJ5IHRoZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUueG1sc291cmNlCi0vLwlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0vLwkJZG9UZXN0KGV4cGVjdGVkWFNMQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL01hbGZvcm1lZE5vRW5jb2RpbmcueHNsIiwgbnVsbCk7Ci0vLwl9Ci0vLyAgWzI1MTc4Nl0gLSBObyBlbmNvZGluZyBzaG91bGQgdHJ5IHRvIGJlIHBpY2tlZCB1cCBieSB0aGUgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnhtbHNvdXJjZQotLy8JcHVibGljIHZvaWQgdGVzdEZpbGUxMDdQKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLS8vCQlkb1Rlc3RGb3JQYXJlbnQoZXhwZWN0ZWRYTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvTWFsZm9ybWVkTm9FbmNvZGluZy54c2wiLCBudWxsKTsKLS8vCX0KKwlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CisJCWRvVGVzdChleHBlY3RlZFhTTENvbnRlbnRUeXBlLCAidGVzdGZpbGVzL3htbC9NYWxmb3JtZWROb0VuY29kaW5nLnhzbCIsIG51bGwpOworCX0KKworCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA3UCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CisJCWRvVGVzdEZvclBhcmVudChleHBlY3RlZFhNTENvbnRlbnRUeXBlLCAidGVzdGZpbGVzL3htbC9NYWxmb3JtZWROb0VuY29kaW5nLnhzbCIsIG51bGwpOworCX0KIAogCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKIAkJZG9UZXN0KGV4cGVjdGVkWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL05vRW5jb2RpbmcueG1sIiwgbnVsbCk7CkBAIC04MiwyMSArODEsMTggQEAKIAlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAJCWRvVGVzdChleHBlY3RlZFhNTENvbnRlbnRUeXBlLCAidGVzdGZpbGVzL3htbC90ZXN0RXh0cmFWYWxpZFN0dWZmLnhtbCIsIG51bGwpOwogCX0KLQkvLyBbMjUwMzkyXSB0aGUgdmVyc2lvbiBudW1iZXIgaXMgaWxsZm9ybWVkIGFuZCBzaG91bGQgbm90IGJlIHBhcnNlZCBjb3JyZWN0bHkgYnkgdGhlIFhNTENvbnRlbnREZXNjcmliZXIuCi0JLy8gTWlnaHQgYmUgYWJsZSB0byBmaXggd2hlbiBbMjUxNzg2XSBpcyBjb3JyZWN0ZWQKLS8vCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTEzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLS8vCQlkb1Rlc3QoZXhwZWN0ZWRYTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvdGVzdElsbEZvcm1lZC54bWwiLCBudWxsKTsKLS8vCX0KKworCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTEzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKKwkJZG9UZXN0KGV4cGVjdGVkWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL3Rlc3RJbGxGb3JtZWQueG1sIiwgbnVsbCk7CisJfQogCiAJcHVibGljIHZvaWQgdGVzdEZpbGUxMTQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogCQlkb1Rlc3QoZXhwZWN0ZWRYTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvdGVzdElsbEZvcm1lZDIueG1sIiwgbnVsbCk7CiAJfQogCi0JLy8gWzI1MDM5Ml0gdGhlIHZlcnNpb24gbnVtYmVyIGlzIGlsbGZvcm1lZCBhbmQgc2hvdWxkIG5vdCBiZSBwYXJzZWQgY29ycmVjdGx5IGJ5IHRoZSBYTUxDb250ZW50RGVzY3JpYmVyLgotCS8vIE1pZ2h0IGJlIGFibGUgdG8gZml4IHdoZW4gWzI1MTc4Nl0gaXMgY29ycmVjdGVkCi0vLwlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0vLwkJZG9UZXN0KGV4cGVjdGVkWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL3Rlc3RJbGxGb3JtZWQzLnhtbCIsIGphdmEubmlvLmNoYXJzZXQuSWxsZWdhbENoYXJzZXROYW1lRXhjZXB0aW9uLmNsYXNzKTsKLS8vCX0KKwlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CisJCWRvVGVzdChleHBlY3RlZFhNTENvbnRlbnRUeXBlLCAidGVzdGZpbGVzL3htbC90ZXN0SWxsRm9ybWVkMy54bWwiLCBqYXZhLm5pby5jaGFyc2V0LklsbGVnYWxDaGFyc2V0TmFtZUV4Y2VwdGlvbi5jbGFzcyk7CisJfQogCiAJcHVibGljIHZvaWQgdGVzdEZpbGUxMTYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogCQlkb1Rlc3QoZXhwZWN0ZWRYTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvdGVzdElsbEZvcm1lZDQueG1sIiwgbnVsbCk7CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgppbmRleCAwOTgyYjJlLi5hYzliOGExIDEwMDY0NAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTIsNyArMiw3IEBACiBCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCiBCdW5kbGUtTmFtZTogJUJ1bmRsZS1OYW1lLjAKIEJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHM7IHNpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC40MDAucXVhbGlmaWVyCitCdW5kbGUtVmVyc2lvbjogMS4wLjIwMi5xdWFsaWZpZXIKIEJ1bmRsZS1DbGFzc1BhdGg6IHhtbHVpdGVzdHMuamFyCiBCdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLlhNTFVJVGVzdHNQbHVnaW4KIEJ1bmRsZS1WZW5kb3I6ICVwcm92aWRlck5hbWUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvcGx1Z2luLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvcGx1Z2luLnhtbAppbmRleCA3OTM3MWM2Li5mMGJhNTZlIDEwMDY0NAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3BsdWdpbi54bWwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9wbHVnaW4ueG1sCkBAIC01NSw3ICs1NSw3IEBACiAJCTwvZWRpdG9yPgogCTwvZXh0ZW5zaW9uPgogICAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5jb3JlLmNvbnRlbnR0eXBlLmNvbnRlbnRUeXBlcyI+CisgICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmNvbnRlbnRUeXBlcyI+CiAgICAgICAgIDxjb250ZW50LXR5cGUKIAkJCWZpbGUtZXh0ZW5zaW9ucz0ieG1sOTkiCiAJCQlwcmlvcml0eT0ibG93IgpAQCAtNjQsMTEgKzY0LDQgQEAKIAkJCWJhc2UtdHlwZT0ib3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnhtbCI+CiAJCTwvY29udGVudC10eXBlPgogCTwvZXh0ZW5zaW9uPgotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5jb21tZW50RWxlbWVudEhhbmRsZXIiPgotCQk8aGFuZGxlci1jdXN0b20KLQkJCWNvbW1lbnR0eXBlPSJ4bWwiCi0JCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy5jb21tZW50ZWxlbWVudC5Db21tZW50RWxlbWVudEhhbmRsZXJGb3JGb28iPgotCQkJPHN0YXJ0d2l0aCBwcmVmaXg9IiQiPjwvc3RhcnR3aXRoPgotCQk8L2hhbmRsZXItY3VzdG9tPgotCTwvZXh0ZW5zaW9uPgogPC9wbHVnaW4+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL2ludGVybmFsL3ZhbGlkYXRpb24vVGVzdERlbGVnYXRpbmdTb3VyY2VWYWxpZGF0b3JGb3JYTUwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvaW50ZXJuYWwvdmFsaWRhdGlvbi9UZXN0RGVsZWdhdGluZ1NvdXJjZVZhbGlkYXRvckZvclhNTC5qYXZhCmluZGV4IDRkODQwOGUuLmY1OGY5YzUgMTAwNjQ0Ci0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvaW50ZXJuYWwvdmFsaWRhdGlvbi9UZXN0RGVsZWdhdGluZ1NvdXJjZVZhbGlkYXRvckZvclhNTC5qYXZhCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvaW50ZXJuYWwvdmFsaWRhdGlvbi9UZXN0RGVsZWdhdGluZ1NvdXJjZVZhbGlkYXRvckZvclhNTC5qYXZhCkBAIC00OCwxNyArNDgsMTcgQEAKIAkJU3RyaW5nIGZpbGVOYW1lMSA9ICJpbnRlcm5hdGlvbmFsLWluc3RhbmNlLnhtbCI7CiAJCVN0cmluZyBmaWxlTmFtZTIgPSAiaW50ZXJuYXRpb25hbC54c2QiOwogCQkKLQkJSVByb2plY3QgcHJvamVjdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChwcm9qTmFtZSk7Ci0JCWlmICghcHJvamVjdC5pc0FjY2Vzc2libGUoKSkgewotCQkJSVByb2plY3REZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5uZXdQcm9qZWN0RGVzY3JpcHRpb24ocHJvak5hbWUpOworCQlJUHJvamVjdERlc2NyaXB0aW9uIGRlc2NyaXB0aW9uID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLm5ld1Byb2plY3REZXNjcmlwdGlvbihwcm9qTmFtZSk7CiAKLQkJCXRyeSB7CisJCUlQcm9qZWN0IHByb2plY3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QocHJvak5hbWUpOworCQl0cnkgeworCQkJaWYoIXByb2plY3QuZXhpc3RzKCkpCiAJCQkJcHJvamVjdC5jcmVhdGUoZGVzY3JpcHRpb24sIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOworCQkJaWYoIXByb2plY3QuaXNBY2Nlc3NpYmxlKCkpCiAJCQkJcHJvamVjdC5vcGVuKG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJfQotCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQl9CisJCX0KKwkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgeworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKIAkJfQogCQkKIAkJSUZpbGUgZmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShuZXcgUGF0aChwcm9qTmFtZSArICIvIiArIGZpbGVOYW1lMSkpOwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9BYnN0cmFjdFhNTFVJVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9BYnN0cmFjdFhNTFVJVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOGVmNGE0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvQWJzdHJhY3RYTUxVSVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDgsIDIwMDkgQ2hhc2UgVGVjaG5vbG9neSBMdGQgLSBodHRwOi8vd3d3LmNoYXNldGVjaG5vbG9neS5jby51awotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgRG91ZyBTYXRjaHdlbGwgKENoYXNlIFRlY2hub2xvZ3kgTHRkKSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIERhdmlkIENhcnZlciAtIGNvcGllZCBvdmVyIGZyb20gWFNMIFVJIFRlc3RzIGZvciBYTUwgVUkgVGVzdHMKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBtYWtlIHVzZSBvZiAoY29weSBvZiBKU1AgVUkgVGVzdHMnKSBQcm9qZWN0VXRpbCB0byBza2lwCi0gKiAgICAgICAgIGZpbGUtc3lzdGVtIGNhbGxzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotCi0vKiAKLSAqIE1hZGUgYWJzdHJhY3QsIHNvIHdvbid0IGJlIGF1dG9tYXRpY2FsbHkgcGlja2VkIHVwIGFzIHRlc3QgKHNpbmNlIGludGVuZGVkIHRvIGJlIHN1YmNsYXNzZWQpLgotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RYTUxVSVRlc3QgZXh0ZW5kcyBUZXN0Q2FzZQotewotCXByb3RlY3RlZCBzdGF0aWMgSVByb2plY3QgZlRlc3RQcm9qZWN0OwotCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gZlRlc3RQcm9qZWN0SW5pdGlhbGl6ZWQ7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBST0pFQ1RfRklMRVMgPSAidGVzdHJlc291cmNlcyI7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfUFJPSkVDVF9OQU1FID0gIkFic3RyYWN0WE1MVUlUZXN0X3Rlc3RyZXNvdXJjZXMiOwotCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uCi0JewotCQlzdXBlci5zZXRVcCgpOwotCQlpZiAoIWZUZXN0UHJvamVjdEluaXRpYWxpemVkKQotCQl7Ci0JCQlQcm9qZWN0VXRpbC5jcmVhdGVQcm9qZWN0KFRFU1RfUFJPSkVDVF9OQU1FLCBudWxsLCBudWxsKTsKLQkJCVByb2plY3RVdGlsLmNvcHlCdW5kbGVFbnRyaWVzSW50b1dvcmtzcGFjZShQUk9KRUNUX0ZJTEVTLCBURVNUX1BST0pFQ1RfTkFNRSk7Ci0KLQkJCWZUZXN0UHJvamVjdC5yZWZyZXNoTG9jYWwoSVJlc291cmNlLkRFUFRIX0lORklOSVRFLCBudWxsKTsKLQkJCWZUZXN0UHJvamVjdEluaXRpYWxpemVkID0gdHJ1ZTsKLQkJfQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHdvcmtzcGFjZSBpbnN0YW5jZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIElXb3Jrc3BhY2UgZ2V0V29ya3NwYWNlKCkKLQl7Ci0JCXJldHVybiBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9Qcm9qZWN0VXRpbC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9Qcm9qZWN0VXRpbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OTY5YzYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvUHJvamVjdFV0aWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwOSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4NCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wDQotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCi0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbA0KLSAqDQotICogQ29udHJpYnV0b3JzOg0KLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHM7DQotDQotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5SW5wdXRTdHJlYW07DQotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5T3V0cHV0U3RyZWFtOw0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOw0KLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOw0KLWltcG9ydCBqYXZhLm5ldC5VUkw7DQotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsNCi0NCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7DQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGb2xkZXI7DQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0Ow0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdERlc2NyaXB0aW9uOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlUnVubmFibGU7DQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsNCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247DQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsNCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7DQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsNCi0NCi0vKioNCi0gKiBTb21lIHV0aWxpdGllcyBmb3IgY3JlYXRpbmcgcHJvamVjdHMsIGFuZCBjb3B5aW5nIGZpbGVzIGludG8gdGhlIHdvcmtzcGFjZS4NCi0gKiBDb3BpZWQgZnJvbSBKU1AgVUkgdGVzdHMuDQotICovDQotcHVibGljIGNsYXNzIFByb2plY3RVdGlsIHsNCi0NCi0Jc3RhdGljIHZvaWQgX2NvcHlCdW5kbGVFbnRyaWVzSW50b1dvcmtzcGFjZShmaW5hbCBTdHJpbmcgcm9vdEVudHJ5LCBmaW5hbCBTdHJpbmcgZnVsbFRhcmdldFBhdGgpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsNCi0JCUVudW1lcmF0aW9uIGVudHJpZXMgPSBYTUxVSVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRCdW5kbGUoKS5nZXRFbnRyeVBhdGhzKHJvb3RFbnRyeSk7DQotCQl3aGlsZSAoZW50cmllcyAhPSBudWxsICYmIGVudHJpZXMuaGFzTW9yZUVsZW1lbnRzKCkpIHsNCi0JCQlTdHJpbmcgZW50cnlQYXRoID0gZW50cmllcy5uZXh0RWxlbWVudCgpLnRvU3RyaW5nKCk7DQotCQkJU3RyaW5nIHRhcmdldFBhdGggPSBuZXcgUGF0aChmdWxsVGFyZ2V0UGF0aCArICIvIiArIGVudHJ5UGF0aC5zdWJzdHJpbmcocm9vdEVudHJ5Lmxlbmd0aCgpKSkudG9TdHJpbmcoKTsNCi0JCQlpZiAoZW50cnlQYXRoLmVuZHNXaXRoKCIvIikpIHsNCi0JCQkJSUZvbGRlciBmb2xkZXIgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZvbGRlcihuZXcgUGF0aCh0YXJnZXRQYXRoKSk7DQotCQkJCWlmICghZm9sZGVyLmV4aXN0cygpKSB7DQotCQkJCQlmb2xkZXIuY3JlYXRlKHRydWUsIHRydWUsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOw0KLQkJCQl9DQotCQkJCV9jb3B5QnVuZGxlRW50cmllc0ludG9Xb3Jrc3BhY2UoZW50cnlQYXRoLCB0YXJnZXRQYXRoKTsNCi0JCQl9DQotCQkJZWxzZSB7DQotCQkJCV9jb3B5QnVuZGxlRW50cnlJbnRvV29ya3NwYWNlKGVudHJ5UGF0aCwgdGFyZ2V0UGF0aCk7DQotCQkJfQ0KLQkJCS8vIFN5c3RlbS5vdXQucHJpbnRsbihlbnRyeVBhdGggKyAiIC0+ICIgKyB0YXJnZXRQYXRoKTsNCi0JCX0NCi0JfQ0KLQ0KLQlzdGF0aWMgSUZpbGUgX2NvcHlCdW5kbGVFbnRyeUludG9Xb3Jrc3BhY2UoU3RyaW5nIGVudHJ5bmFtZSwgU3RyaW5nIGZ1bGxQYXRoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7DQotCQlJRmlsZSBmaWxlID0gbnVsbDsNCi0JCVVSTCBlbnRyeSA9IFhNTFVJVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldEVudHJ5KGVudHJ5bmFtZSk7DQotCQlpZiAoZW50cnkgIT0gbnVsbCkgew0KLQkJCXRyeSB7DQotCQkJCWJ5dGVbXSBiID0gbmV3IGJ5dGVbMjA0OF07DQotCQkJCUlucHV0U3RyZWFtIGlucHV0ID0gZW50cnkub3BlblN0cmVhbSgpOw0KLQkJCQlCeXRlQXJyYXlPdXRwdXRTdHJlYW0gb3V0cHV0ID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOw0KLQkJCQlpbnQgaSA9IC0xOw0KLQkJCQl3aGlsZSAoKGkgPSBpbnB1dC5yZWFkKGIpKSA+IC0xKSB7DQotCQkJCQlvdXRwdXQud3JpdGUoYiwgMCwgaSk7DQotCQkJCX0NCi0JCQkJZmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShuZXcgUGF0aChmdWxsUGF0aCkpOw0KLQkJCQlpZiAoZmlsZSAhPSBudWxsKSB7DQotCQkJCQlpZiAoIWZpbGUuZXhpc3RzKCkpIHsNCi0JCQkJCQlmaWxlLmNyZWF0ZShuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0ob3V0cHV0LnRvQnl0ZUFycmF5KCkpLCB0cnVlLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsNCi0JCQkJCX0NCi0JCQkJCWVsc2Ugew0KLQkJCQkJCWZpbGUuc2V0Q29udGVudHMobmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKG91dHB1dC50b0J5dGVBcnJheSgpKSwgdHJ1ZSwgZmFsc2UsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOw0KLQkJCQkJfQ0KLQkJCQl9DQotCQkJfQ0KLQkJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7DQotCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7DQotCQkJfQ0KLQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsNCi0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsNCi0JCQl9DQotCQl9DQotCQlyZXR1cm4gZmlsZTsNCi0JfQ0KLQ0KLQkvKioNCi0JICogQHBhcmFtIHJvb3RFbnRyeSAtIGF2b2lkIHRyYWlsaW5nIHNlcGFyYXRvcnMNCi0JICogQHBhcmFtIGZ1bGxUYXJnZXRQYXRoDQotCSAqLw0KLQlwdWJsaWMgc3RhdGljIHZvaWQgY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKGZpbmFsIFN0cmluZyByb290RW50cnksIGZpbmFsIFN0cmluZyBmdWxsVGFyZ2V0UGF0aCkgew0KLQkJSVdvcmtzcGFjZVJ1bm5hYmxlIHJ1bm5hYmxlID0gbmV3IElXb3Jrc3BhY2VSdW5uYWJsZSgpIHsNCi0JCQlwdWJsaWMgdm9pZCBydW4oSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7DQotCQkJCV9jb3B5QnVuZGxlRW50cmllc0ludG9Xb3Jrc3BhY2Uocm9vdEVudHJ5LCBmdWxsVGFyZ2V0UGF0aCk7DQotCQkJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5jaGVja3BvaW50KHRydWUpOw0KLQkJCX0NCi0JCX07DQotCQl0cnkgew0KLQkJCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5ydW4ocnVubmFibGUsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOw0KLQkJfQ0KLQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgew0KLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7DQotCQl9DQotCX0NCi0NCi0JLyoqDQotCSAqIA0KLQkgKiBAcGFyYW0gZW50cnluYW1lDQotCSAqICAgICAgICAgICAgcGF0aCByZWxhdGl2ZSB0byBURVNUIHBsdWdpbiBzdGFydGluZyB3LyBhICIvIiAoZWcuDQotCSAqICAgICAgICAgICAgIi90ZXN0ZmlsZXMvYnVnbnVtYmVyL3N0cnV0cy1sb2dpYy50bGQiKQ0KLQkgKiBAcGFyYW0gZnVsbFBhdGgNCi0JICogICAgICAgICAgICBwYXRoIHJlbGF0aXZlIHRvIGp1bml0IHRlc3Qgd29ya3BhY2UgKGVnLg0KLQkgKiAgICAgICAgICAgICIvbXlydW50aW1lcHJvai9zdHJ1dHMtbG9naWMudGxkIikNCi0JICogQHJldHVybg0KLQkgKi8NCi0JcHVibGljIHN0YXRpYyBJRmlsZSBjb3B5QnVuZGxlRW50cnlJbnRvV29ya3NwYWNlKGZpbmFsIFN0cmluZyBlbnRyeW5hbWUsIGZpbmFsIFN0cmluZyBmdWxsUGF0aCkgew0KLQkJZmluYWwgSUZpbGUgZmlsZVtdID0gbmV3IElGaWxlWzFdOw0KLQkJSVdvcmtzcGFjZVJ1bm5hYmxlIHJ1bm5hYmxlID0gbmV3IElXb3Jrc3BhY2VSdW5uYWJsZSgpIHsNCi0JCQlwdWJsaWMgdm9pZCBydW4oSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7DQotCQkJCWZpbGVbMF0gPSBfY29weUJ1bmRsZUVudHJ5SW50b1dvcmtzcGFjZShlbnRyeW5hbWUsIGZ1bGxQYXRoKTsNCi0JCQkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmNoZWNrcG9pbnQodHJ1ZSk7DQotCQkJfQ0KLQkJfTsNCi0JCXRyeSB7DQotCQkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnJ1bihydW5uYWJsZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7DQotCQl9DQotCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7DQotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsNCi0JCX0NCi0JCXJldHVybiBmaWxlWzBdOw0KLQl9DQotDQotCXB1YmxpYyBzdGF0aWMgSVByb2plY3QgY3JlYXRlUHJvamVjdChTdHJpbmcgbmFtZSwgSVBhdGggbG9jYXRpb24sIFN0cmluZ1tdIG5hdHVyZUlkcykgew0KLQkJSVByb2plY3REZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5uZXdQcm9qZWN0RGVzY3JpcHRpb24obmFtZSk7DQotCQlpZiAobG9jYXRpb24gIT0gbnVsbCkgew0KLQkJCWRlc2NyaXB0aW9uLnNldExvY2F0aW9uKGxvY2F0aW9uKTsNCi0JCX0NCi0JCWlmIChuYXR1cmVJZHMgIT0gbnVsbCkgew0KLQkJCWRlc2NyaXB0aW9uLnNldE5hdHVyZUlkcyhuYXR1cmVJZHMpOw0KLQkJfQ0KLQkJSVByb2plY3QgcHJvamVjdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChuYW1lKTsNCi0JCXRyeSB7DQotCQkJcHJvamVjdC5jcmVhdGUoZGVzY3JpcHRpb24sIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOw0KLQkJCXByb2plY3Qub3BlbihuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsNCi0JCX0NCi0JCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsNCi0JCQllLnByaW50U3RhY2tUcmFjZSgpOw0KLQkJfQ0KLQkJcmV0dXJuIHByb2plY3Q7DQotCX0NCi19DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9UZXN0RWRpdG9yQ29uZmlndXJhdGlvblhNTC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9UZXN0RWRpdG9yQ29uZmlndXJhdGlvblhNTC5qYXZhCmluZGV4IDg3NzZmNzIuLjZiYmUyYjUgMTAwNjQ0Ci0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvVGVzdEVkaXRvckNvbmZpZ3VyYXRpb25YTUwuamF2YQorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL1Rlc3RFZGl0b3JDb25maWd1cmF0aW9uWE1MLmphdmEKQEAgLTQ4LDE3ICs0OCwxMCBAQAogCX0KIAkKIAlwdWJsaWMgdm9pZCB0ZXN0R2V0RG9jdW1lbnRhdGlvblRleHRIb3ZlcigpIHsKLQkJT2JqZWN0W10gaG92ZXJzID0gRXh0ZW5kZWRDb25maWd1cmF0aW9uQnVpbGRlci5nZXRJbnN0YW5jZSgpLmdldENvbmZpZ3VyYXRpb25zKEV4dGVuZGVkQ29uZmlndXJhdGlvbkJ1aWxkZXIuRE9DVU1FTlRBVElPTlRFWFRIT1ZFUiwgSVhNTFBhcnRpdGlvbnMuWE1MX0RFRkFVTFQpLnRvQXJyYXkoKTsKLQkJYXNzZXJ0VHJ1ZSgibm8gZG9jdW1lbnRhdGlvbiB0ZXh0IGhvdmVyIGZvciAiICsgSVhNTFBhcnRpdGlvbnMuWE1MX0RFRkFVTFQsIGhvdmVycy5sZW5ndGggPiAwKTsKLS8vCQkvLyBjaGVjayBmb3Igb3Zlci1xdWFsaWZpZWQgc3ViY2xhc3NlcwotLy8JCWFzc2VydEVxdWFscygidW5leHBlY3RlZCBkb2N1bWVudGF0aW9uIHRleHQgaG92ZXIgZm9yICIgKyBJWE1MUGFydGl0aW9ucy5YTUxfREVGQVVMVCwgby5nZXRDbGFzcygpLCBYTUxUYWdJbmZvSG92ZXJQcm9jZXNzb3IuY2xhc3MpOwotCQlDbGFzcyByZXF1aXJlZCA9IFhNTFRhZ0luZm9Ib3ZlclByb2Nlc3Nvci5jbGFzczsKLQkJYm9vbGVhbiByZXF1aXJlZEZvdW5kID0gZmFsc2U7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgaG92ZXJzLmxlbmd0aDsgaSsrKSB7Ci0JCQlpZihyZXF1aXJlZC5lcXVhbHMoaG92ZXJzW2ldLmdldENsYXNzKCkpKQotCQkJCXJlcXVpcmVkRm91bmQgPSB0cnVlOwotCQl9Ci0JCWFzc2VydFRydWUocmVxdWlyZWQuZ2V0TmFtZSgpICsgIiBub3QgbG9hZGVkIiwgcmVxdWlyZWRGb3VuZCk7CisJCU9iamVjdCBvID0gRXh0ZW5kZWRDb25maWd1cmF0aW9uQnVpbGRlci5nZXRJbnN0YW5jZSgpLmdldENvbmZpZ3VyYXRpb24oRXh0ZW5kZWRDb25maWd1cmF0aW9uQnVpbGRlci5ET0NVTUVOVEFUSU9OVEVYVEhPVkVSLCBJWE1MUGFydGl0aW9ucy5YTUxfREVGQVVMVCk7CisJCWFzc2VydE5vdE51bGwoIm5vIGRvY3VtZW50YXRpb24gdGV4dCBob3ZlciBmb3IgIiArIElYTUxQYXJ0aXRpb25zLlhNTF9ERUZBVUxULCBvKTsKKwkJLy8gY2hlY2sgZm9yIG92ZXItcXVhbGlmaWVkIHN1YmNsYXNzZXMKKwkJYXNzZXJ0RXF1YWxzKCJ1bmV4cGVjdGVkIGRvY3VtZW50YXRpb24gdGV4dCBob3ZlciBmb3IgIiArIElYTUxQYXJ0aXRpb25zLlhNTF9ERUZBVUxULCBvLmdldENsYXNzKCksIFhNTFRhZ0luZm9Ib3ZlclByb2Nlc3Nvci5jbGFzcyk7CiAJfQogCQogCXB1YmxpYyB2b2lkIHRlc3RHZXREb3VibGVDbGlja1N0cmF0ZWd5KCkgewpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9UZXN0T3BlbkVkaXRvclhNTC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9UZXN0T3BlbkVkaXRvclhNTC5qYXZhCmluZGV4IDA0N2E4OTYuLjQxNzVmZGUgMTAwNjQ0Ci0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvVGVzdE9wZW5FZGl0b3JYTUwuamF2YQorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL1Rlc3RPcGVuRWRpdG9yWE1MLmphdmEKQEAgLTQ5LDcgKzQ5LDcgQEAKIAlwcml2YXRlIHN0YXRpYyBib29sZWFuIGZJc1NldHVwID0gZmFsc2U7CiAKIAlwdWJsaWMgVGVzdE9wZW5FZGl0b3JYTUwoKSB7Ci0JCXN1cGVyKCJUZXN0U3RydWN0dXJlZFRleHRFZGl0b3JYTUwiKTsKKwkJc3VwZXIoIlRlc3RTdHJ1Y3RyZWRUZXh0RWRpdG9yWE1MIik7CiAJfQogCiAJcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKQEAgLTYxLDE0ICs2MSwxMyBAQAogCQkJZklzU2V0dXAgPSB0cnVlOwogCQl9CiAKLQkJYXNzZXJ0VHJ1ZSgiSW5wdXQgZmlsZSBub3QgYWNjZXNzaWJsZTogIiArIGZGaWxlLmdldEZ1bGxQYXRoKCksIGZGaWxlLmlzQWNjZXNzaWJsZSgpKTsKLQogCQkvLyBlZGl0b3IgaXMgb3BlbmVkIGVhY2ggdGltZQogCQlpZiAoZklzU2V0dXAgJiYgZkVkaXRvciA9PSBudWxsKSB7CiAJCQlJV29ya2JlbmNoV2luZG93IHdvcmtiZW5jaFdpbmRvdyA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCk7CiAJCQlJV29ya2JlbmNoUGFnZSBwYWdlID0gd29ya2JlbmNoV2luZG93LmdldEFjdGl2ZVBhZ2UoKTsKIAkJCWZFZGl0b3IgPSBJREUub3BlbkVkaXRvcihwYWdlLCBmRmlsZSwgdHJ1ZSwgdHJ1ZSk7Ci0JCQlhc3NlcnRUcnVlKCJVbmFibGUgdG8gb3BlbiBzdHJ1Y3R1cmVkIHRleHQgZWRpdG9yICIgKyBmRWRpdG9yLCAoZkVkaXRvciBpbnN0YW5jZW9mIFhNTE11bHRpUGFnZUVkaXRvclBhcnQpIHx8IChmRWRpdG9yIGluc3RhbmNlb2YgU3RydWN0dXJlZFRleHRFZGl0b3IpKTsKKwkJCWlmICghKChmRWRpdG9yIGluc3RhbmNlb2YgWE1MTXVsdGlQYWdlRWRpdG9yUGFydCkgfHwgKGZFZGl0b3IgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkVGV4dEVkaXRvcikpKQorCQkJCWFzc2VydFRydWUoIlVuYWJsZSB0byBvcGVuIHN0cnVjdHVyZWQgdGV4dCBlZGl0b3IiLCBmYWxzZSk7CiAJCX0KIAl9CiAKQEAgLTgzLDEzICs4MiwxNyBAQAogCQl9CiAJfQogCi0JcHJpdmF0ZSB2b2lkIGNyZWF0ZVByb2plY3QoU3RyaW5nIHByb2pOYW1lKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7CisJcHJpdmF0ZSB2b2lkIGNyZWF0ZVByb2plY3QoU3RyaW5nIHByb2pOYW1lKSB7CiAJCUlQcm9qZWN0RGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkubmV3UHJvamVjdERlc2NyaXB0aW9uKHByb2pOYW1lKTsKIAogCQlJUHJvamVjdCBwcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KHByb2pOYW1lKTsKLQotCQlwcm9qZWN0LmNyZWF0ZShkZXNjcmlwdGlvbiwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCXByb2plY3Qub3BlbihuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKKwkJdHJ5IHsKKwkJCXByb2plY3QuY3JlYXRlKGRlc2NyaXB0aW9uLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKKwkJCXByb2plY3Qub3BlbihuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKKwkJfQorCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7CisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQl9CiAJfQogCiAJcHJpdmF0ZSBJRmlsZSBnZXRPckNyZWF0ZUZpbGUoU3RyaW5nIGZpbGVQYXRoKSB7CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL1Rlc3RQcm9wZXJ0eVNoZWV0Q29uZmlndXJhdGlvbi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9UZXN0UHJvcGVydHlTaGVldENvbmZpZ3VyYXRpb24uamF2YQppbmRleCAxMzcxNzQwLi5lMzAwY2MwIDEwMDY0NAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL1Rlc3RQcm9wZXJ0eVNoZWV0Q29uZmlndXJhdGlvbi5qYXZhCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvVGVzdFByb3BlcnR5U2hlZXRDb25maWd1cmF0aW9uLmphdmEKQEAgLTc0LDcgKzc0LDcgQEAKIAkJCQkJZkVkaXRvciA9IChTdHJ1Y3R1cmVkVGV4dEVkaXRvcikgYWRhcHRlcjsKIAkJCX0KIAkJCWlmIChmRWRpdG9yID09IG51bGwpCi0JCQkJYXNzZXJ0VHJ1ZSgiVW5hYmxlIHRvIG9wZW4gc3RydWN0dXJlZCB0ZXh0IGVkaXRvciAiICsgKChmTWFpbkVkaXRvciAhPSBudWxsKSA/IGZNYWluRWRpdG9yLmdldENsYXNzKCkuZ2V0TmFtZSgpIDogIiIpLCBmYWxzZSk7CisJCQkJYXNzZXJ0VHJ1ZSgiVW5hYmxlIHRvIG9wZW4gc3RydWN0dXJlZCB0ZXh0IGVkaXRvciIsIGZhbHNlKTsKIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9UZXN0U3BlbGxjaGVja0RlbGVnYXRlQWRhcGF0ZXJGYWN0b3J5LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL1Rlc3RTcGVsbGNoZWNrRGVsZWdhdGVBZGFwYXRlckZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTA1YzgyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL1Rlc3RTcGVsbGNoZWNrRGVsZWdhdGVBZGFwYXRlckZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0czsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLnNwZWxsaW5nLklTcGVsbGNoZWNrRGVsZWdhdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS5pbnRlcm5hbC5zcGVsbGluZy5TcGVsbGNoZWNrRGVsZWdhdGVBZGFwdGVyRmFjdG9yeTsKLQotLyoqCi0gKiBUZXN0cyBmb3IgdGhlIDxjb2RlPlNwZWxsY2hlY2tEZWxlZ2F0ZUFkYXBhdGVyRmFjdG9yeTwvY29kZT4KLSAqLwotcHVibGljIGNsYXNzIFRlc3RTcGVsbGNoZWNrRGVsZWdhdGVBZGFwYXRlckZhY3RvcnkgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JLyoqCi0JICogRGVmYXVsdCBjb25zdHJ1Y3RvcgotCSAqLwotCXB1YmxpYyBUZXN0U3BlbGxjaGVja0RlbGVnYXRlQWRhcGF0ZXJGYWN0b3J5KCkgewotCQlzdXBlcigiVGVzdCBTcGVsbGNoZWNrIERlbGVnYXRlIEFkYXBhdGVyRmFjdG9yeSIpOwotCX0KLQkKLQkvKioKLQkgKiBDb25zdHJ1Y3RvcgotCSAqIAotCSAqIEBwYXJhbSBuYW1lIHRoZSBuYW1lIHRvIGdpdmUgdG8gdGhpcyB0ZXN0IHJ1bgotCSAqLwotCXB1YmxpYyBUZXN0U3BlbGxjaGVja0RlbGVnYXRlQWRhcGF0ZXJGYWN0b3J5KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQkKLQkvKioKLQkgKiBUZXN0IHRoZSA8Y29kZT5TcGVsbGNoZWNrRGVsZWdhdGVBZGFwYXRlckZhY3Rvcnk8L2NvZGU+Ci0JICogQHRocm93cyBDb3JlRXhjZXB0aW9uIAotCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24gCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFNwZWxsY2hlY2tEZWxlZ2F0ZUFkYXBhdGVyRmFjdG9yeSgpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiAgewotCQlTdHJpbmcgcHJvamVjdE5hbWUgPSAiVGVzdFNwZWxsY2hlY2tEZWxlZ2F0ZUFkYXBhdGVyRmFjdG9yeSI7Ci0JCUlQcm9qZWN0IHByb2plY3QgPSBQcm9qZWN0VXRpbC5jcmVhdGVQcm9qZWN0KHByb2plY3ROYW1lLCBudWxsLCBudWxsKTsKLQkJCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgc3RydWN0dXJlZE1vZGVsID0gbnVsbDsKLQkJCi0JCXRyeSB7Ci0JCQkvL2dldCB0ZXN0IGZpbGUKLQkJCVByb2plY3RVdGlsLmNvcHlCdW5kbGVFbnRyaWVzSW50b1dvcmtzcGFjZSgidGVzdHJlc291cmNlcy9zcGVsbGNoZWNrIiwgcHJvamVjdE5hbWUpOwotCQkJSUZpbGUgdGVzdEZpbGUgPSBwcm9qZWN0LmdldEZpbGUoInNwZWxsY2hlY2tfY29tbWVudF9lbGVtZW50LnhtbCIpOwotCQkJYXNzZXJ0VHJ1ZSgiVGVzdCBmaWxlICIgKyB0ZXN0RmlsZSArICIgZG9lcyBub3QgZXhpc3QiLCB0ZXN0RmlsZS5leGlzdHMoKSk7Ci0JCQotCQkJLy9nZXQgZGVsZWdhdGUKLQkJCXN0cnVjdHVyZWRNb2RlbCA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKHRlc3RGaWxlKTsKLQkJCVNwZWxsY2hlY2tEZWxlZ2F0ZUFkYXB0ZXJGYWN0b3J5IGZhY3RvcnkgPSBuZXcgU3BlbGxjaGVja0RlbGVnYXRlQWRhcHRlckZhY3RvcnkoKTsKLQkJCUlTcGVsbGNoZWNrRGVsZWdhdGUgZGVsZWdhdGUgPSAoSVNwZWxsY2hlY2tEZWxlZ2F0ZSlmYWN0b3J5LmdldEFkYXB0ZXIoc3RydWN0dXJlZE1vZGVsLCBJU3BlbGxjaGVja0RlbGVnYXRlLmNsYXNzKTsKLQkJCWFzc2VydE5vdE51bGwoIkNvdWxkIG5vdCBnZXQgc3BlbGxjaGVjayBkZWxlZ2F0ZSIsIGRlbGVnYXRlKTsKLQkJCQotCQkJLy9ydW4gdGVzdHMKLQkJCWJvb2xlYW4gc2hvdWxkU3BlbGxjaGVja0NvbW1lbnRFbGVtZW50ID0gZGVsZWdhdGUuc2hvdWxkU3BlbGxjaGVjayg1NCwgc3RydWN0dXJlZE1vZGVsKTsKLQkJCWFzc2VydEZhbHNlKCJTaG91bGQgbm90IGJlIHNwZWxsY2hlY2tpbmcgY29tbWVudCBlbGVtZW50cyIsIHNob3VsZFNwZWxsY2hlY2tDb21tZW50RWxlbWVudCk7Ci0JCQkKLQkJCWJvb2xlYW4gc2hvdWxkU3BlbGxjaGVja0NvbW1lbnQgPSBkZWxlZ2F0ZS5zaG91bGRTcGVsbGNoZWNrKDgwLCBzdHJ1Y3R1cmVkTW9kZWwpOwotCQkJYXNzZXJ0VHJ1ZSgiU2hvdWxkIGJlIHNwZWxsY2hlY2tpbmcgY29tbWVudCByZWdpb25zIiwgc2hvdWxkU3BlbGxjaGVja0NvbW1lbnQpOwotCQl9IGZpbmFsbHkgewotCQkJcHJvamVjdC5kZWxldGUodHJ1ZSwgbnVsbCk7Ci0JCX0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9YTUxVSVRlc3RTdWl0ZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9YTUxVSVRlc3RTdWl0ZS5qYXZhCmluZGV4IDgyZWRiZmQuLmI2OTQxYzkgMTAwNjQ0Ci0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvWE1MVUlUZXN0U3VpdGUuamF2YQorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL1hNTFVJVGVzdFN1aXRlLmphdmEKQEAgLTEsNSArMSw1IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwogICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCiAgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdApAQCAtNyw3ICs3LDYgQEAKICAqCiAgKiBDb250cmlidXRvcnM6CiAgKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgRGF2aWQgQ2FydmVyIChTVEFSKSAtIGJ1ZyAyNTk0NDcgLSBjb250ZW50IGFzc2lzdGFuY2UgdGVzdHMKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzOwogCkBAIC0xNyw3ICsxNiw2IEBACiAKIGltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLnZhbGlkYXRpb24uVGVzdERlbGVnYXRpbmdTb3VyY2VWYWxpZGF0b3JGb3JYTUw7CiBpbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS5pbnRlcm5hbC52YWxpZGF0aW9uLlRlc3RNYXJrdXBWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy5jb250ZW50YXNzaXN0LlRlc3RYTUxDb250ZW50QXNzaXN0OwogaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMudmlld2VyLlRlc3RWaWV3ZXJDb25maWd1cmF0aW9uWE1MOwogCiAKQEAgLTM5LDcgKzM3LDUgQEAKIAkJYWRkVGVzdFN1aXRlKFRlc3RNYXJrdXBWYWxpZGF0b3IuY2xhc3MpOwogCQlhZGRUZXN0U3VpdGUoVGVzdFJlY29uY2lsZXJYTUwuY2xhc3MpOwogCQlhZGRUZXN0U3VpdGUoVGVzdFNvdXJjZVZhbGlkYXRpb25GcmFtZXdvcmsuY2xhc3MpOwotCQlhZGRUZXN0U3VpdGUoVGVzdFhNTENvbnRlbnRBc3Npc3QuY2xhc3MpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdFNwZWxsY2hlY2tEZWxlZ2F0ZUFkYXBhdGVyRmFjdG9yeS5jbGFzcywgIlRlc3QgU3BlbGxjaGVjayBEZWxlZ2F0ZSBBZGFwdGVyIEZhY3RvcnkiKSk7CiAJfQogfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9YTUxVSVRlc3RzUGx1Z2luLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL1hNTFVJVGVzdHNQbHVnaW4uamF2YQppbmRleCBiYmM0ZmNkLi44YTAzYWVkIDEwMDY0NAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL1hNTFVJVGVzdHNQbHVnaW4uamF2YQorKysgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL1hNTFVJVGVzdHNQbHVnaW4uamF2YQpAQCAtMSw1ICsxLDUgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCiAgKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKICAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CkBAIC03LDE0ICs3LDExIEBACiAgKiAKICAqIENvbnRyaWJ1dG9yczoKICAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICBEYXZpZCBDYXJ2ZXIgKFNUQVIpIC0gYnVnIDI1OTQ0NyAtIGNvbnRlbnQgYXNzaXN0YW5jZSB0ZXN0cwogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBwYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHM7CiAKIGltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlOwogaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwogCiBpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkZpbGVMb2NhdG9yOwogaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luOwpAQCAtOTEsMjYgKzg4LDUgQEAKIAkgICAgCXJldHVybiBudWxsOwogCSAgICB9CiAJICB9Ci0gICAgCi0JcHVibGljIHN0YXRpYyBGaWxlIGdldFRlc3RGaWxlKFN0cmluZyBmaWxlcGF0aCkgewotCQlVUkwgaW5zdGFsbFVSTCA9IGdldEluc3RhbGxMb2NhdGlvbigpOwotCQkvL1N0cmluZyBzY2hlbWUgPSBpbnN0YWxsVVJMLmdldFByb3RvY29sKCk7Ci0JCVN0cmluZyBwYXRoID0gaW5zdGFsbFVSTC5nZXRQYXRoKCk7Ci0JCVN0cmluZyBsb2NhdGlvbiA9IHBhdGggKyBmaWxlcGF0aDsKLQkJRmlsZSByZXN1bHQgPSBuZXcgRmlsZShsb2NhdGlvbik7Ci0JCXJldHVybiByZXN1bHQ7Ci0JfSAgICAKIAotCXB1YmxpYyBzdGF0aWMgVVJMIGdldEluc3RhbGxMb2NhdGlvbigpIHsKLQkJVVJMIGluc3RhbGxMb2NhdGlvbiA9IHBsdWdpbkJ1bmRsZS5nZXRFbnRyeSgiLyIpOwotCQlVUkwgcmVzb2x2ZWRMb2NhdGlvbiA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlyZXNvbHZlZExvY2F0aW9uID0gRmlsZUxvY2F0b3IucmVzb2x2ZShpbnN0YWxsTG9jYXRpb24pOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQkvLyBpbXBvc3NpYmxlCi0JCQl0aHJvdyBuZXcgRXJyb3IoZSk7Ci0JCX0KLQkJcmV0dXJuIHJlc29sdmVkTG9jYXRpb247Ci0JfQkKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisJfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvY29tbWVudGVsZW1lbnQvQ29tbWVudEVsZW1lbnRIYW5kbGVyRm9yRm9vLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL2NvbW1lbnRlbGVtZW50L0NvbW1lbnRFbGVtZW50SGFuZGxlckZvckZvby5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNDk3ODM3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvY29tbWVudGVsZW1lbnQvQ29tbWVudEVsZW1lbnRIYW5kbGVyRm9yRm9vLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NCArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMuY29tbWVudGVsZW1lbnQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29tbWVudGVsZW1lbnQuQ29tbWVudEVsZW1lbnRIYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb21tZW50ZWxlbWVudC51dGlsLkNvbW1lbnRFbGVtZW50RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29tbWVudGVsZW1lbnQudXRpbC5UYWdTY2FubmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTmFtZWROb2RlTWFwOwotCi1wdWJsaWMgY2xhc3MgQ29tbWVudEVsZW1lbnRIYW5kbGVyRm9yRm9vIGltcGxlbWVudHMgQ29tbWVudEVsZW1lbnRIYW5kbGVyewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBSRUZJWCA9ICJmb28iOyAvLyROT04tTkxTLTEkCi0JcHVibGljIEVsZW1lbnQgY3JlYXRlRWxlbWVudChEb2N1bWVudCBkb2N1bWVudCwgU3RyaW5nIGRhdGEsIGJvb2xlYW4gaXNKU1BUYWcpIHsKLQotCQlUYWdTY2FubmVyIHNjYW5uZXIgPSBuZXcgVGFnU2Nhbm5lcihkYXRhLCAxKTsKLQkJU3RyaW5nIG5hbWUgPSBzY2FubmVyLm5leHROYW1lKCk7Ci0JCWlmIChuYW1lID09IG51bGwpIHsKLQkJCXJldHVybiBudWxsOwotCQl9Ci0JCVN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKG5hbWUubGVuZ3RoKCkgKyA0KTsKLQkJYnVmZmVyLmFwcGVuZChQUkVGSVgpOwotCQlidWZmZXIuYXBwZW5kKCc6Jyk7Ci0JCWJ1ZmZlci5hcHBlbmQobmFtZSk7Ci0JCVN0cmluZyB0YWdOYW1lID0gYnVmZmVyLnRvU3RyaW5nKCk7Ci0KLQkJQ29tbWVudEVsZW1lbnRGYWN0b3J5IGZhY3RvcnkgPSBuZXcgQ29tbWVudEVsZW1lbnRGYWN0b3J5KGRvY3VtZW50LCBpc0pTUFRhZywgdGhpcyk7Ci0JCUVsZW1lbnQgZWxlbWVudCA9IGZhY3RvcnkuY3JlYXRlKHRhZ05hbWUsIENvbW1lbnRFbGVtZW50RmFjdG9yeS5JU19TVEFSVCk7Ci0KLQkJLy8gc2V0IGF0dHJpYnV0ZXMKLQkJU3RyaW5nIGF0dHJOYW1lID0gc2Nhbm5lci5uZXh0TmFtZSgpOwotCQl3aGlsZSAoYXR0ck5hbWUgIT0gbnVsbCkgewotCQkJU3RyaW5nIGF0dHJWYWx1ZSA9IHNjYW5uZXIubmV4dFZhbHVlKCk7Ci0JCQlBdHRyIGF0dHIgPSBkb2N1bWVudC5jcmVhdGVBdHRyaWJ1dGUoYXR0ck5hbWUpOwotCQkJaWYgKGF0dHIgIT0gbnVsbCkgewotCQkJCWlmIChhdHRyVmFsdWUgIT0gbnVsbCkKLQkJCQkJYXR0ci5zZXRWYWx1ZShhdHRyVmFsdWUpOwotCQkJCWVsZW1lbnQuc2V0QXR0cmlidXRlTm9kZShhdHRyKTsKLQkJCX0KLQkJCWF0dHJOYW1lID0gc2Nhbm5lci5uZXh0TmFtZSgpOwotCQl9Ci0JCXJldHVybiBlbGVtZW50OwotCX0KLQotCXB1YmxpYyBTdHJpbmcgZ2VuZXJhdGVFbmRUYWdDb250ZW50KElET01FbGVtZW50IGVsZW1lbnQpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZW5lcmF0ZVN0YXJ0VGFnQ29udGVudChJRE9NRWxlbWVudCBlbGVtZW50KSB7Ci0JCVN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCWJ1ZmZlci5hcHBlbmQoJyMnKTsKLQkJYnVmZmVyLmFwcGVuZChlbGVtZW50LmdldExvY2FsTmFtZSgpKTsKLQotCQlOYW1lZE5vZGVNYXAgYXR0cmlidXRlcyA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlcygpOwotCQlpbnQgbGVuZ3RoID0gYXR0cmlidXRlcy5nZXRMZW5ndGgoKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotCQkJQXR0ciBhdHRyID0gKEF0dHIpIGF0dHJpYnV0ZXMuaXRlbShpKTsKLQkJCWlmIChhdHRyID09IG51bGwpIHsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCWJ1ZmZlci5hcHBlbmQoJyAnKTsKLQkJCVN0cmluZyBhdHRyTmFtZSA9IGF0dHIuZ2V0Tm9kZU5hbWUoKTsKLQkJCWlmIChhdHRyTmFtZSAhPSBudWxsKSB7Ci0JCQkJYnVmZmVyLmFwcGVuZChhdHRyTmFtZSk7Ci0JCQl9Ci0JCQlTdHJpbmcgYXR0clZhbHVlID0gYXR0ci5nZXROb2RlVmFsdWUoKTsKLQkJCWlmIChhdHRyVmFsdWUgIT0gbnVsbCkgewotCQkJCS8vIGF0dHIgbmFtZSBvbmx5IGZvciBIVE1MIGJvb2xlYW4gYW5kIEpTUAotCQkJCWJ1ZmZlci5hcHBlbmQoJz0nKTsKLQkJCQlidWZmZXIuYXBwZW5kKGF0dHJWYWx1ZSk7Ci0JCQl9Ci0JCX0KLQotCQlyZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCk7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gaXNDb21tZW50RWxlbWVudChJRE9NRWxlbWVudCBlbGVtZW50KSB7Ci0JCVN0cmluZyBwcmVmaXggPSBlbGVtZW50LmdldFByZWZpeCgpOwotCQlpZiAocHJlZml4ID09IG51bGwgfHwgIXByZWZpeC5lcXVhbHMoUFJFRklYKSkgewotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0JCVN0cmluZyB0YWdOYW1lID0gZWxlbWVudC5nZXRUYWdOYW1lKCk7Ci0JCWlmICh0YWdOYW1lLmxlbmd0aCgpIDw9IDQpIHsKLQkJCXJldHVybiBmYWxzZTsKLQkJfQotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBpc0VtcHR5KCkgewotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvY29udGVudGFzc2lzdC9UZXN0WE1MQ29udGVudEFzc2lzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9jb250ZW50YXNzaXN0L1Rlc3RYTUxDb250ZW50QXNzaXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwMDdiNzIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9jb250ZW50YXNzaXN0L1Rlc3RYTUxDb250ZW50QXNzaXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNDkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwOSBTdGFuZGFyZHMgZm9yIFRlY2hub2xvZ3kgaW4gQXV0b21vdGl2ZSBSZXRhaWwgYW5kIG90aGVycwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBEYXZpZCBDYXJ2ZXIgLSBTVEFSIC0gYnVnIDI1OTQ0NyAtIGludGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gbWFrZSB1c2Ugb2YgKGNvcHkgb2YgSlNQIFVJIFRlc3RzJykgUHJvamVjdFV0aWwgdG8gc2tpcAotICogICAgICAgICBmaWxlLXN5c3RlbSBjYWxscwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy5jb250ZW50YXNzaXN0OwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5Bc3NlcnQ7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3REZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5jb250ZW50YXNzaXN0LklDb21wbGV0aW9uUHJvcG9zYWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnRleHRlZGl0b3IuSVRleHRFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmV4Y2VwdGlvbnMuUmVzb3VyY2VBbHJlYWR5RXhpc3RzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5leGNlcHRpb25zLlJlc291cmNlSW5Vc2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLlN0cnVjdHVyZWRUZXh0Vmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwuY29udGVudGFzc2lzdC5Db250ZW50QXNzaXN0VXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmVuY29kaW5nLlhNTERvY3VtZW50TG9hZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLlN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvblhNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuWE1MQ29udGVudEFzc2lzdFByb2Nlc3NvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLlByb2plY3RVdGlsOwotCi0vKioKLSAqIFRlc3RzIGV2ZXJ5dGhpbmcgYWJvdXQgY29kZSBjb21wbGV0aW9uIGFuZCBjb2RlIGFzc2lzdGFuY2UuCi0gKiAKLSAqLwotcHVibGljIGNsYXNzIFRlc3RYTUxDb250ZW50QXNzaXN0IGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHJvdGVjdGVkIFN0cmluZyBwcm9qZWN0TmFtZSA9IG51bGw7Ci0JcHJvdGVjdGVkIFN0cmluZyBmaWxlTmFtZSA9IG51bGw7Ci0JcHJvdGVjdGVkIElGaWxlIGZpbGUgPSBudWxsOwotCXByb3RlY3RlZCBJRWRpdG9yUGFydCB0ZXh0RWRpdG9yUGFydCA9IG51bGw7Ci0JcHJvdGVjdGVkIElUZXh0RWRpdG9yIGVkaXRvciA9IG51bGw7Ci0KLQlwcm90ZWN0ZWQgWE1MRG9jdW1lbnRMb2FkZXIgeG1sRG9jdW1lbnRMb2FkZXIgPSBudWxsOwotCXByb3RlY3RlZCBJU3RydWN0dXJlZERvY3VtZW50IGRvY3VtZW50ID0gbnVsbDsKLQlwcm90ZWN0ZWQgU3RydWN0dXJlZFRleHRWaWV3ZXIgc291cmNlVmlld2VyID0gbnVsbDsKLQlwcml2YXRlIElTdHJ1Y3R1cmVkTW9kZWwgbW9kZWw7Ci0JcHJvdGVjdGVkIFhNTENvbnRlbnRBc3Npc3RQcm9jZXNzb3IgeG1sQ29udGVudEFzc2lzdFByb2Nlc3NvciA9IG51bGw7Ci0KLQlwdWJsaWMgVGVzdFhNTENvbnRlbnRBc3Npc3QoKSB7Ci0JfQotCi0JLyoqCi0JICogU2V0dXAgdGhlIG5lY2Vzc2FyeSBwcm9qZWN0cywgZmlsZXMsIGFuZCBzb3VyY2Ugdmlld2VyIGZvciB0aGUgdGVzdHMuCi0JICovCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc2V0VXAoKTsKLQkJcHJvamVjdE5hbWUgPSAiVGVzdFhNTENvbnRlbnRBc3Npc3QiOwotCQlmaWxlTmFtZSA9ICJ4bWxDb250ZW50QXNzaXN0LXRlc3QxLnhtbCI7Ci0KLQkJLy8gU2V0dXAgdGhlIFByb2plY3QgYW5kIEZpbGUgdG8gYmUgdXNlZCBkdXJpbmcgdGhlIHRlc3QuCi0JCVN0cmluZyB4bWxGaWxlUGF0aCA9IHNldHVwUHJvamVjdCgpOwotCQlmaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKAotCQkJCW5ldyBQYXRoKHhtbEZpbGVQYXRoKSk7Ci0JCWlmIChmaWxlICE9IG51bGwgJiYgIWZpbGUuZXhpc3RzKCkpIHsKLQkJCUFzc2VydC5mYWlsKCJVbmFibGUgdG8gbG9jYXRlICIgKyB4bWxGaWxlUGF0aCArICIuIik7Ci0JCX0KLQotCQlsb2FkWE1MRmlsZSgpOwotCi0JCWluaXRpYWxpemVTb3VyY2VWaWV3ZXIoKTsKLQkJeG1sQ29udGVudEFzc2lzdFByb2Nlc3NvciA9IG5ldyBYTUxDb250ZW50QXNzaXN0UHJvY2Vzc29yKCk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgaW5pdGlhbGl6ZVNvdXJjZVZpZXdlcigpIHsKLQkJLy8gc29tZSB0ZXN0IGVudmlyb25tZW50cyBtaWdodCBub3QgaGF2ZSBhICJyZWFsIiBkaXNwbGF5Ci0JCWlmIChEaXNwbGF5LmdldEN1cnJlbnQoKSAhPSBudWxsKSB7Ci0KLQkJCVNoZWxsIHNoZWxsID0gbnVsbDsKLQkJCUNvbXBvc2l0ZSBwYXJlbnQgPSBudWxsOwotCi0JCQlpZiAoUGxhdGZvcm1VSS5pc1dvcmtiZW5jaFJ1bm5pbmcoKSkgewotCQkJCXNoZWxsID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKQotCQkJCQkJLmdldFNoZWxsKCk7Ci0JCQl9IGVsc2UgewotCQkJCXNoZWxsID0gbmV3IFNoZWxsKERpc3BsYXkuZ2V0Q3VycmVudCgpKTsKLQkJCX0KLQkJCXBhcmVudCA9IG5ldyBDb21wb3NpdGUoc2hlbGwsIFNXVC5OT05FKTsKLQotCQkJLy8gZHVtbXkgdmlld2VyCi0JCQlzb3VyY2VWaWV3ZXIgPSBuZXcgU3RydWN0dXJlZFRleHRWaWV3ZXIocGFyZW50LCBudWxsLCBudWxsLCBmYWxzZSwKLQkJCQkJU1dULk5PTkUpOwotCQl9IGVsc2UgewotCQkJQXNzZXJ0Ci0JCQkJCS5mYWlsKCJVbmFibGUgdG8gcnVuIHRoZSB0ZXN0IGFzIGEgZGlzcGxheSBtdXN0IGJlIGF2YWlsYWJsZS4iKTsKLQkJfQotCi0JCWNvbmZpZ3VyZVNvdXJjZVZpZXdlcigpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIGNvbmZpZ3VyZVNvdXJjZVZpZXdlcigpIHsKLQkJc291cmNlVmlld2VyLmNvbmZpZ3VyZShuZXcgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uWE1MKCkpOwotCi0JCXNvdXJjZVZpZXdlci5zZXREb2N1bWVudChkb2N1bWVudCk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgbG9hZFhNTEZpbGUoKSB0aHJvd3MgUmVzb3VyY2VBbHJlYWR5RXhpc3RzLCBSZXNvdXJjZUluVXNlLAotCQkJSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCW1vZGVsID0gbW9kZWxNYW5hZ2VyLmdldE1vZGVsRm9yRWRpdChmaWxlKTsKLQkJZG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgU3RyaW5nIHNldHVwUHJvamVjdCgpIHsKLQkJSVByb2plY3REZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKQotCQkJCS5uZXdQcm9qZWN0RGVzY3JpcHRpb24ocHJvamVjdE5hbWUpOwotCi0JCUlQcm9qZWN0IHByb2plY3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QocHJvamVjdE5hbWUpOwotCQl0cnkgewotCQkJcHJvamVjdC5jcmVhdGUoZGVzY3JpcHRpb24sIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJcHJvamVjdC5vcGVuKG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQl9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQotCQl9Ci0JCVN0cmluZyB4bWxGaWxlUGF0aCA9IHByb2plY3QuZ2V0RnVsbFBhdGgoKS5hZGRUcmFpbGluZ1NlcGFyYXRvcigpLmFwcGVuZChmaWxlTmFtZSkudG9TdHJpbmcoKTsKLQkJLy8gbmVlZHMgYm90aCB0aGUgdGVzdCBmaWxlIGFuZCBzY2hlbWFzCi0JCVByb2plY3RVdGlsLmNvcHlCdW5kbGVFbnRyaWVzSW50b1dvcmtzcGFjZSgiL3Rlc3RyZXNvdXJjZXMiLCBwcm9qZWN0LmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSk7Ci0JCXJldHVybiB4bWxGaWxlUGF0aDsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci50ZWFyRG93bigpOwotCQl4bWxDb250ZW50QXNzaXN0UHJvY2Vzc29yLnJlbGVhc2UoKTsKLQl9Ci0KLQkvKioKLQkgKiBHZXQgdGhlIGNvbnRlbnQgY29tcGxldGlvbiBwcm9wb3NhbHMgYXQgPGNvZGU+bGluZU51bWJlcjwvY29kZT4sCi0JICogPGNvZGU+Y29sdW1uTnVtYmVyPC9jb2RlPi4KLQkgKiAKLQkgKiBAcGFyYW0gbGluZU51bWJlcgotCSAqIEBwYXJhbSBjb2x1bW5OdW1iZXIKLQkgKiBAcmV0dXJuCi0JICogQHRocm93cyBFeGNlcHRpb24KLQkgKi8KLQlwcml2YXRlIElDb21wbGV0aW9uUHJvcG9zYWxbXSBnZXRQcm9wb3NhbHMoaW50IG9mZnNldCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCQotCQlyZXR1cm4geG1sQ29udGVudEFzc2lzdFByb2Nlc3Nvci5jb21wdXRlQ29tcGxldGlvblByb3Bvc2FscygKLQkJCQlzb3VyY2VWaWV3ZXIsIG9mZnNldCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEF0dHJpYnV0ZVByb3Bvc2FsKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXRyeSB7Ci0JCQlpbnQgb2Zmc2V0ID0gc291cmNlVmlld2VyLmdldERvY3VtZW50KCkuZ2V0TGluZU9mZnNldCgxMCkgKyAxMDsKLQkJCUlET01Ob2RlIG5vZGUgPSAoSURPTU5vZGUpIENvbnRlbnRBc3Npc3RVdGlscy5nZXROb2RlQXQoCi0JCQkJCXNvdXJjZVZpZXdlciwgb2Zmc2V0KTsKLQkJCWFzc2VydEVxdWFscygiV3Jvbmcgbm9kZSBuYW1lIHJldHVybmVkOiIsICJNZW1iZXIiLCBub2RlCi0JCQkJCS5nZXROb2RlTmFtZSgpKTsKLQotCQkJSUNvbXBsZXRpb25Qcm9wb3NhbFtdIHByb3Bvc2FscyA9IGdldFByb3Bvc2FscyhvZmZzZXQpOwotCQkJYXNzZXJ0VHJ1ZSgiTGVuZ3RoIGxlc3MgdGhhbiAxIiwgcHJvcG9zYWxzLmxlbmd0aCA+IDEpOwotCQkJSUNvbXBsZXRpb25Qcm9wb3NhbCBwcm9wb3NhbCA9IHByb3Bvc2Fsc1swXTsKLQkJCWFzc2VydEVxdWFscygiV3JvbmcgYXR0cmlidXRlIHByb3Bvc2FsIHJldHVybmVkIGF0IFsiK3NvdXJjZVZpZXdlci5nZXREb2N1bWVudCgpLmdldChvZmZzZXQtOSwgOSkrInwiK3NvdXJjZVZpZXdlci5nZXREb2N1bWVudCgpLmdldChvZmZzZXQsIDkpKyJdIiwgImhhbmRpY2FwIiwKLQkJCQkJcHJvcG9zYWwuZ2V0RGlzcGxheVN0cmluZygpKTsKLQkJfSBmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENoaWxkRWxlbWVudFByb3Bvc2FsKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXRyeSB7Ci0JCQlpbnQgb2Zmc2V0ID0gc291cmNlVmlld2VyLmdldERvY3VtZW50KCkuZ2V0TGluZU9mZnNldCgxMSkgKyA4OwotCi0JCQlJQ29tcGxldGlvblByb3Bvc2FsW10gcHJvcG9zYWxzID0gZ2V0UHJvcG9zYWxzKG9mZnNldCk7Ci0JCQlhc3NlcnRFcXVhbHMoIlVuZXhwZWN0ZWQgbnVtYmVyIG9mIHByb3Bvc2FscyIsIDUsIHByb3Bvc2Fscy5sZW5ndGgpOwotCQkJSUNvbXBsZXRpb25Qcm9wb3NhbCBwcm9wb3NhbCA9IHByb3Bvc2Fsc1swXTsKLQkJCWFzc2VydEVxdWFscygiV3JvbmcgZWxlbWVudCBwcm9wb3NhbCByZXR1cm5lZC4iLCAiRXhjbHVzaXZlTWVtYmVyIiwKLQkJCQkJcHJvcG9zYWwuZ2V0RGlzcGxheVN0cmluZygpKTsKLQkJfSBmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNoYWZ0RWxlbWVudFByb3Bvc2FsKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXRyeSB7Ci0JCQlpbnQgb2Zmc2V0ID0gc291cmNlVmlld2VyLmdldERvY3VtZW50KCkuZ2V0TGluZU9mZnNldCgyNCkgKyA2OwotCi0JCQlJQ29tcGxldGlvblByb3Bvc2FsW10gcHJvcG9zYWxzID0gZ2V0UHJvcG9zYWxzKG9mZnNldCk7Ci0JCQlhc3NlcnRFcXVhbHMoIlVuZXhwZWN0ZWQgbnVtYmVyIG9mIHByb3Bvc2FscyIsIDcsIHByb3Bvc2Fscy5sZW5ndGgpOwotCQkJSUNvbXBsZXRpb25Qcm9wb3NhbCBwcm9wb3NhbCA9IHByb3Bvc2Fsc1swXTsKLQkJCWFzc2VydEVxdWFscygiV3JvbmcgZWxlbWVudCBwcm9wb3NhbCByZXR1cm5lZC4iLCAiU2hhZnQiLCBwcm9wb3NhbAotCQkJCQkuZ2V0RGlzcGxheVN0cmluZygpKTsKLQkJfSBmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFhNTFRlbXBsYXRlUG9zaXRpb25hbFByb3Bvc2FsKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXRyeSB7Ci0JCQlpbnQgb2Zmc2V0ID0gc291cmNlVmlld2VyLmdldERvY3VtZW50KCkuZ2V0TGluZU9mZnNldCgyNCkgKyA2OwotCi0JCQlJQ29tcGxldGlvblByb3Bvc2FsW10gcHJvcG9zYWxzID0gZ2V0UHJvcG9zYWxzKG9mZnNldCk7Ci0JCQlhc3NlcnRFcXVhbHMoIlVuZXhwZWN0ZWQgbnVtYmVyIG9mIHByb3Bvc2FscyIsIDcsIHByb3Bvc2Fscy5sZW5ndGgpOwotCQkJSUNvbXBsZXRpb25Qcm9wb3NhbCBwcm9wb3NhbCA9IHByb3Bvc2Fsc1s1XTsKLQkJCWFzc2VydEVxdWFscygiV3JvbmcgdGVtcGxhdGUgcHJvcG9zYWwgcmV0dXJuZWQuIiwKLQkJCQkJImNvbW1lbnQgLSB4bWwgY29tbWVudCIsIHByb3Bvc2FsLmdldERpc3BsYXlTdHJpbmcoKSk7Ci0JCX0gZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RYTUxDb21tZW50VGVtcGxhdGVQcm9wb3NhbEV4aXN0cygpIHRocm93cyBFeGNlcHRpb24gewotCQl0cnkgewotCQkJaW50IG9mZnNldCA9IHNvdXJjZVZpZXdlci5nZXREb2N1bWVudCgpLmdldExpbmVPZmZzZXQoMjQpICsgNjsKLQotCQkJSUNvbXBsZXRpb25Qcm9wb3NhbFtdIHByb3Bvc2FscyA9IGdldFByb3Bvc2FscyhvZmZzZXQpOwotCQkJYXNzZXJ0Tm90TnVsbCgiTm8gcHJvcG9zYWxzIHJldHVybmVkLiIsIHByb3Bvc2Fscyk7Ci0JCQlib29sZWFuIGZvdW5kc3cgPSBmYWxzZTsKLQkJCWZvciAoaW50IGNudCA9IDA7IGNudCA8IHByb3Bvc2Fscy5sZW5ndGg7IGNudCsrKSB7Ci0JCQkJSUNvbXBsZXRpb25Qcm9wb3NhbCBwcm9wb3NhbCA9IHByb3Bvc2Fsc1tjbnRdOwotCQkJCWlmIChwcm9wb3NhbC5nZXREaXNwbGF5U3RyaW5nKCkuZXF1YWxzKCJjb21tZW50IC0geG1sIGNvbW1lbnQiKSkgewotCQkJCQlmb3VuZHN3ID0gdHJ1ZTsKLQkJCQl9Ci0JCQl9Ci0JCQlpZiAoZm91bmRzdyA9PSBmYWxzZSkgewotCQkJCWZhaWwoIlhNTCBUZW1wbGF0ZSAneG1sIGNvbW1lbnQnIHdhcyBub3QgZm91bmQgaW4gdGhlIHByb3Bvc2FsIGxpc3QiKTsKLQkJCX0KLQkJfSBmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvdGVzdHJlc291cmNlcy9zcGVsbGNoZWNrL3NwZWxsY2hlY2tfY29tbWVudF9lbGVtZW50LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvdGVzdHJlc291cmNlcy9zcGVsbGNoZWNrL3NwZWxsY2hlY2tfY29tbWVudF9lbGVtZW50LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzI5NjM4YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc3BlbGxjaGVjay9zcGVsbGNoZWNrX2NvbW1lbnRfZWxlbWVudC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdD4KLQk8IS0tJGZvbyBiYXIgYmF6ICAtLT4KLQotCTwhLS0gU3BlbGwgY2hlY2sgbWU6IGZvbyBiYXogLS0+Ci08L3Jvb3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL3htbENvbnRlbnRBc3Npc3QtdGVzdDEueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL3htbENvbnRlbnRBc3Npc3QtdGVzdDEueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODk1Y2ZjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvdGVzdHJlc291cmNlcy94bWxDb250ZW50QXNzaXN0LXRlc3QxLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08dG5zOkdvbGZDb3VudHJ5Q2x1YiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvR29sZkNvdW50cnlDbHViIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvR29sZkNvdW50cnlDbHViIFNjaGVtYTEueHNkICI+Ci0gIDxHb2xmQ291cnNlPgotICAgIDxOYW1lPjwvTmFtZT4KLSAgICA8WWFyZGFnZT48L1lhcmRhZ2U+Ci0gICAgPFBhcj48L1Bhcj4KLSAgICA8SGFuZGljYXA+PC9IYW5kaWNhcD4KLSAgICA8U2xvcGU+PC9TbG9wZT4KLSAgICAKLSAgPC9Hb2xmQ291cnNlPgotICA8TWVtYmVyID4KLSAgCSAgIAkKLSAgPC9NZW1iZXI+Ci0gIDxFbXBsb3llZSA+Ci0gICAgPEZpcnN0TmFtZT48L0ZpcnN0TmFtZT4KLSAgICA8TGFzdE5hbWU+PC9MYXN0TmFtZT4KLSAgICA8RW1wbG95ZWVOdW1iZXI+PC9FbXBsb3llZU51bWJlcj4KLSAgPC9FbXBsb3llZT4KLSAgPFByb1Nob3A+Ci0gICAgPEdvbGZDbHViPgotICAgICAgPE1hbnVmYWN0dXJlck5hbWU+PC9NYW51ZmFjdHVyZXJOYW1lPgotICAgICAgPFF1YW50aXR5PjwvUXVhbnRpdHk+Ci0gICAgICA8Q2x1YktpbmQ+PC9DbHViS2luZD4KLSAgICAgIDxMb2Z0PjwvTG9mdD4KLSAgICAgIAotICAgIDwvR29sZkNsdWI+Ci0gICAgPEJveE9mQmFsbHMgPgotICAgICAgPE1hbnVmYWN0dXJlck5hbWU+PC9NYW51ZmFjdHVyZXJOYW1lPgotICAgICAgPFF1YW50aXR5PjwvUXVhbnRpdHk+Ci0gICAgICA8UHJvZHVjdERldGFpbHM+PC9Qcm9kdWN0RGV0YWlscz4KLSAgICA8L0JveE9mQmFsbHM+Ci0gIDwvUHJvU2hvcD4KLTwvdG5zOkdvbGZDb3VudHJ5Q2x1Yj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgppbmRleCA3Mjk0ZWZjLi4yOGEyMGM5IDEwMDY0NAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0yLDcgKzIsNyBAQAogQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgogQnVuZGxlLU5hbWU6ICVCdW5kbGUtTmFtZS4wCiBCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuNTAwLnF1YWxpZmllcgorQnVuZGxlLVZlcnNpb246IDEuMC40MDAucXVhbGlmaWVyCiBCdW5kbGUtQ2xhc3NQYXRoOiB2YWxpZGF0ZXhtbHRlc3RzLmphcgogQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLmludGVybmFsLlhNTFZhbGlkYXRvclRlc3RzUGx1Z2luCiBCdW5kbGUtVmVuZG9yOiAlQnVuZGxlLVZlbmRvci4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9BbGxYTUxUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvQWxsWE1MVGVzdHMuamF2YQppbmRleCA1Y2NkNmNkLi4xZDI3NmVlIDEwMDY0NAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9BbGxYTUxUZXN0cy5qYXZhCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL0FsbFhNTFRlc3RzLmphdmEKQEAgLTEsNSArMSw1IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgorICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwogICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCiAgKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdApAQCAtNDAsNyArNDAsNyBAQAogICAgKi8KICAgcHVibGljIEFsbFhNTFRlc3RzKCkKICAgewotICAgIHN1cGVyKCJYTUwgVmFsaWRhdGlvbiBUZXN0IFN1aXRlIik7CisgICAgc3VwZXIoIlhNTFRlc3RzVGVzdFN1aXRlIik7CiAgICAgYWRkVGVzdChYTUxWYWxpZGF0aW9uQ29uZmlndXJhdGlvblRlc3Quc3VpdGUoKSk7CiAgICAgYWRkVGVzdChWYWxpZGF0b3JUZXN0LnN1aXRlKCkpOwogICAgIGFkZFRlc3QoWE1MTWVzc2FnZUluZm9IZWxwZXJUZXN0LnN1aXRlKCkpOwpAQCAtNTIsNyArNTIsNSBAQAogICAgIGFkZFRlc3RTdWl0ZShFcnJvck1lc3NhZ2VDdXN0b21pemVyRGVsZWdhdGVUZXN0LmNsYXNzKTsKICAgICBhZGRUZXN0U3VpdGUoRXJyb3JDdXN0b21pemF0aW9uUmVnaXN0cnlUZXN0LmNsYXNzKTsKICAgICBhZGRUZXN0U3VpdGUoTGluZU51bWJlckFkanVzdG1lbnRzVGVzdC5jbGFzcyk7Ci0gICAgYWRkVGVzdFN1aXRlKFhJbmNsdWRlVGVzdC5jbGFzcyk7Ci0gICAgYWRkVGVzdFN1aXRlKEhvbm91ckFsbFNjaGVtYUxvY2F0aW9uc1Rlc3QuY2xhc3MpOwogICB9CiB9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvSG9ub3VyQWxsU2NoZW1hTG9jYXRpb25zVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvSG9ub3VyQWxsU2NoZW1hTG9jYXRpb25zVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOWU2YjhiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL0hvbm91ckFsbFNjaGVtYUxvY2F0aW9uc1Rlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbDsKLQotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLlhNTFZhbGlkYXRpb25Db25maWd1cmF0aW9uOwotCi0KLS8qKgotICogVGVzdHMgdGhlICJob25vdXIgYWxsIHNjaGVtYSBsb2NhdGlvbnMiIGZlYXR1cmUuIAotICovCi1wdWJsaWMgY2xhc3MgSG9ub3VyQWxsU2NoZW1hTG9jYXRpb25zVGVzdCBleHRlbmRzIEJhc2VUZXN0Q2FzZQotewotICBwdWJsaWMgdm9pZCB0ZXN0SG9ub3Vyc0FsbFNjaGVtYUxvY2F0aW9ucygpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBjb25maWd1cmF0aW9uLnNldEZlYXR1cmUoWE1MVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb24uSE9OT1VSX0FMTF9TQ0hFTUFfTE9DQVRJT05TLCB0cnVlKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGZhaWwoKTsKLSAgICB9Ci0KLSAgICBTdHJpbmcgdGVzdEZpbGUgPSBnZXRUZXN0RmlsZSgpOwotICAgIExpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBpbnQgbnVtRXJyb3JzID0gMDsKLSAgICBpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0gICAgcnVuVGVzdCh0ZXN0RmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0Q2FuVHVybk9mZkhvbm91ckFsbFNjaGVtYUxvY2F0aW9ucygpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBjb25maWd1cmF0aW9uLnNldEZlYXR1cmUoWE1MVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb24uSE9OT1VSX0FMTF9TQ0hFTUFfTE9DQVRJT05TLCBmYWxzZSk7Ci0gICAgfQotICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBmYWlsKCk7Ci0gICAgfQotCi0gICAgU3RyaW5nIHRlc3RGaWxlID0gZ2V0VGVzdEZpbGUoKTsKLSAgICBMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAga2V5cy5hZGQobnVsbCk7Ci0gICAga2V5cy5hZGQoImN2Yy1jb21wbGV4LXR5cGUuMi40LmQiKTsgLy8kTk9OLU5MUy0xJAotICAgIGludCBudW1FcnJvcnMgPSAyOwotICAgIGludCBudW1XYXJuaW5ncyA9IDA7Ci0KLSAgICBydW5UZXN0KHRlc3RGaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotCi0gIHByaXZhdGUgU3RyaW5nIGdldFRlc3RGaWxlKCkKLSAgewotICAgIHJldHVybiBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArICJYTUxFeGFtcGxlcy9Ib25vdXJBbGxTY2hlbWFMb2NhdGlvbnMvQS1pbnN0YW5jZS54bWwiOyAvLyROT04tTkxTLTEkCi0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL1hJbmNsdWRlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvWEluY2x1ZGVUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxOWFiNTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvWEluY2x1ZGVUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA5IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMuaW50ZXJuYWw7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5YTUxWYWxpZGF0aW9uQ29uZmlndXJhdGlvbjsKLQotCi0vKioKLSAqIFRlc3RzIHRoZSBYSW5jbHVkZSBmZWF0dXJlLiAKLSAqLwotcHVibGljIGNsYXNzIFhJbmNsdWRlVGVzdCBleHRlbmRzIEJhc2VUZXN0Q2FzZQotewotICBwdWJsaWMgdm9pZCB0ZXN0U3VwcG9ydHNYSW5jbHVkZSgpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBjb25maWd1cmF0aW9uLnNldEZlYXR1cmUoWE1MVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb24uVVNFX1hJTkNMVURFLCB0cnVlKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGZhaWwoKTsKLSAgICB9Ci0KLSAgICBTdHJpbmcgdGVzdEZpbGUgPSBnZXRUZXN0RmlsZSgpOwotICAgIExpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBpbnQgbnVtRXJyb3JzID0gMDsKLSAgICBpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0gICAgcnVuVGVzdCh0ZXN0RmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0Q2FuVHVybk9mZlhJbmNsdWRlKCkKLSAgewotICAgIHRyeQotICAgIHsKLSAgICAgIGNvbmZpZ3VyYXRpb24uc2V0RmVhdHVyZShYTUxWYWxpZGF0aW9uQ29uZmlndXJhdGlvbi5VU0VfWElOQ0xVREUsIGZhbHNlKTsKLSAgICB9Ci0gICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGZhaWwoKTsKLSAgICB9Ci0KLSAgICBTdHJpbmcgdGVzdEZpbGUgPSBnZXRUZXN0RmlsZSgpOwotICAgIExpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBrZXlzLmFkZCgiY3ZjLWNvbXBsZXgtdHlwZS4yLjQuYSIpOwotICAgIGludCBudW1FcnJvcnMgPSAxOwotICAgIGludCBudW1XYXJuaW5ncyA9IDA7Ci0KLSAgICBydW5UZXN0KHRlc3RGaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotCi0gIHByaXZhdGUgU3RyaW5nIGdldFRlc3RGaWxlKCkKLSAgewotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgIlhNTEV4YW1wbGVzL1hJbmNsdWRlL21hc3Rlci54bWwiOwotICAgIHJldHVybiB0ZXN0ZmlsZTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YTUxFeGFtcGxlcy9Ib25vdXJBbGxTY2hlbWFMb2NhdGlvbnMvQS1pbnN0YW5jZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL0hvbm91ckFsbFNjaGVtYUxvY2F0aW9ucy9BLWluc3RhbmNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGFhNzM5NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL0hvbm91ckFsbFNjaGVtYUxvY2F0aW9ucy9BLWluc3RhbmNlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxuc0E6QSB4bWxuczpuc0E9InVybjpuc0EiIHhtbG5zOnA9InVybjpuc0IiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0idXJuOm5zQSBBLnhzZCAiPgotICA8cDpCMT5wOkIxPC9wOkIxPgotICA8cDpCMj5wOkIyPC9wOkIyPgotPC9uc0E6QT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWE1MRXhhbXBsZXMvSG9ub3VyQWxsU2NoZW1hTG9jYXRpb25zL0EueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YTUxFeGFtcGxlcy9Ib25vdXJBbGxTY2hlbWFMb2NhdGlvbnMvQS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBhNDNlNzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YTUxFeGFtcGxlcy9Ib25vdXJBbGxTY2hlbWFMb2NhdGlvbnMvQS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB0YXJnZXROYW1lc3BhY2U9InVybjpuc0EiIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6bnNCPSJ1cm46bnNCIiB4bWxuczpuc0E9InVybjpuc0EiPgotCi0gICAgPGltcG9ydCBuYW1lc3BhY2U9InVybjpuc0IiIHNjaGVtYUxvY2F0aW9uPSJCMS54c2QiLz4KLQk8aW1wb3J0IG5hbWVzcGFjZT0idXJuOm5zQiIgc2NoZW1hTG9jYXRpb249IkIyLnhzZCIvPgotCTxlbGVtZW50IG5hbWU9IkEiPgotCQk8Y29tcGxleFR5cGU+Ci0JCQk8c2VxdWVuY2U+Ci0JCQkJPGVsZW1lbnQgcmVmPSJuc0I6QjEiPjwvZWxlbWVudD4KLQkJCQk8ZWxlbWVudCByZWY9Im5zQjpCMiI+PC9lbGVtZW50PgotCQkJPC9zZXF1ZW5jZT4KLQkJPC9jb21wbGV4VHlwZT4KLQk8L2VsZW1lbnQ+Ci08L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL0hvbm91ckFsbFNjaGVtYUxvY2F0aW9ucy9CMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL0hvbm91ckFsbFNjaGVtYUxvY2F0aW9ucy9CMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4YTg1YTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YTUxFeGFtcGxlcy9Ib25vdXJBbGxTY2hlbWFMb2NhdGlvbnMvQjEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB0YXJnZXROYW1lc3BhY2U9InVybjpuc0IiIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgotICAgIDxlbGVtZW50IG5hbWU9IkIxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD4KLTwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWE1MRXhhbXBsZXMvSG9ub3VyQWxsU2NoZW1hTG9jYXRpb25zL0IyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWE1MRXhhbXBsZXMvSG9ub3VyQWxsU2NoZW1hTG9jYXRpb25zL0IyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzRlY2UwMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL0hvbm91ckFsbFNjaGVtYUxvY2F0aW9ucy9CMi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0idXJuOm5zQiIgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0gICAgPGVsZW1lbnQgbmFtZT0iQjIiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PgotPC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YTUxFeGFtcGxlcy9YSW5jbHVkZS9ib2R5LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWE1MRXhhbXBsZXMvWEluY2x1ZGUvYm9keS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjODU3MzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YTUxFeGFtcGxlcy9YSW5jbHVkZS9ib2R5LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxib2R5IHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0gIHhzaTpub05hbWVzcGFjZVNjaGVtYUxvY2F0aW9uPSJtYXN0ZXIueHNkIi8+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YTUxFeGFtcGxlcy9YSW5jbHVkZS9tYXN0ZXIueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YTUxFeGFtcGxlcy9YSW5jbHVkZS9tYXN0ZXIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZmJhZTcyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWE1MRXhhbXBsZXMvWEluY2x1ZGUvbWFzdGVyLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxtYXN0ZXIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOm5vTmFtZXNwYWNlU2NoZW1hTG9jYXRpb249Im1hc3Rlci54c2QiPgotICA8IS0tIDxib2R5Lz4gLS0+Ci0gIDx4aTppbmNsdWRlIHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hJbmNsdWRlIiBocmVmPSJib2R5LnhtbCIvPgotPC9tYXN0ZXI+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL1hJbmNsdWRlL21hc3Rlci54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL1hJbmNsdWRlL21hc3Rlci54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzNGY1N2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YTUxFeGFtcGxlcy9YSW5jbHVkZS9tYXN0ZXIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4czpzY2hlbWEgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLQotICA8eHM6ZWxlbWVudCBuYW1lPSJtYXN0ZXIiPgotICAgIDx4czpjb21wbGV4VHlwZT4KLSAgICAgIDx4czpzZXF1ZW5jZT4KLSAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJib2R5IiAvPgotICAgICAgPC94czpzZXF1ZW5jZT4KLSAgICA8L3hzOmNvbXBsZXhUeXBlPgotICA8L3hzOmVsZW1lbnQ+Ci0gIDx4czplbGVtZW50IG5hbWU9ImJvZHkiLz4KLTwveHM6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QuY29yZS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QuY29yZS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgppbmRleCBlOWExZmU2Li5kZjdiNDYzIDEwMDY0NAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLmNvcmUudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0yLDcgKzIsNyBAQAogQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgogQnVuZGxlLU5hbWU6ICVCdW5kbGUtTmFtZS4wCiBCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3QueHNkLmNvcmUudGVzdHMKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMTAxLnF1YWxpZmllcgorQnVuZGxlLVZlcnNpb246IDEuMC4yLnF1YWxpZmllcgogQnVuZGxlLUNsYXNzUGF0aDogeHNkY29yZXRlc3RzLmphcgogQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzLmludGVybmFsLlhTRENvcmVUZXN0c1BsdWdpbgogUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZTtidW5kbGUtdmVyc2lvbj0iWzMuNC4wLDQuMC4wKSIsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvY29yZS90ZXN0cy9pbnRlcm5hbC9CdWdGaXhlc1Rlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC9jb3JlL3Rlc3RzL2ludGVybmFsL0J1Z0ZpeGVzVGVzdC5qYXZhCmluZGV4IDEyYjc3YjUuLjI1ZTUwNWQgMTAwNjQ0Ci0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC9jb3JlL3Rlc3RzL2ludGVybmFsL0J1Z0ZpeGVzVGVzdC5qYXZhCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC9jb3JlL3Rlc3RzL2ludGVybmFsL0J1Z0ZpeGVzVGVzdC5qYXZhCkBAIC0yMSwxOCArMjEsMjIgQEAKIAogaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKIGltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNQXR0cmlidXRlRGVjbGFyYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTUNvbnRlbnQ7CiBpbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTURhdGFUeXBlOwogaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01Eb2N1bWVudDsKIGltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNRWxlbWVudERlY2xhcmF0aW9uOwogaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01OYW1lZE5vZGVNYXA7CiBpbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTU5vZGU7CiBpbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTU5vZGVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuaW50ZXJuYWwudXRpbC5DTVZhbGlkYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLnV0aWwuQ01EZXNjcmlwdGlvbkJ1aWxkZXI7CiBpbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC5jb250ZW50bW9kZWwuaW50ZXJuYWwuQ01Eb2N1bWVudEZhY3RvcnlYU0Q7CiBpbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC5jb250ZW50bW9kZWwuaW50ZXJuYWwuWFNESW1wbDsKIGltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLmNvbnRlbnRtb2RlbC5pbnRlcm5hbC5YU0RJbXBsLkRvY3VtZW50YXRpb25JbXBsOwogaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QuY29udGVudG1vZGVsLmludGVybmFsLlhTREltcGwuWFNERWxlbWVudERlY2xhcmF0aW9uQWRhcHRlcjsKIGltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLmNvbnRlbnRtb2RlbC5pbnRlcm5hbC5YU0RJbXBsLlhTRE1vZGVsR3JvdXBBZGFwdGVyOwogaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RDb21wbGV4VHlwZURlZmluaXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTREVsZW1lbnREZWNsYXJhdGlvbjsKIGltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hOwogaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RUeXBlRGVmaW5pdGlvbjsKIGltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOwpAQCAtMzQyLDIxICszNDYsNiBAQAogCQogIH0KICAgCi0gIHB1YmxpYyB2b2lkIHRlc3RGb3JCdWcxNzY0MjAoKSB7Ci0JICAvLyBPYnRhaW4gdGhlIG1vZGVsIGZyb20gL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy90ZXN0U2NoZW1hRm9yQnVnMTc2NDIwLnhzZAotCSAgQnVuZGxlIGJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZSgib3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzIik7Ci0JICBVUkwgdXJsID0gYnVuZGxlLmdldEVudHJ5KCIvdGVzdHJlc291cmNlcy9zYW1wbGVzL3Rlc3RTY2hlbWFGb3JCdWcxNzY0MjAueHNkIik7Ci0JICBDTURvY3VtZW50IGRvY3VtZW50ID0gWFNESW1wbC5idWlsZENNRG9jdW1lbnQodXJsLnRvRXh0ZXJuYWxGb3JtKCkpOwotCSAgYXNzZXJ0Tm90TnVsbCgiQ29udGVudCBtb2RlbCBsb2FkZWQgTnVsbCIsIGRvY3VtZW50KTsKLQkgIAotCSAgLy8gT2J0YWluIHRoZSBlbnVtZXJhdGVkIHZhbHVlcyBvZiB0aGUgcm9vdCBlbGVtZW50Ci0JICBDTU5vZGUgY21Ob2RlID0gZG9jdW1lbnQuZ2V0RWxlbWVudHMoKS5pdGVtKDApOwotCSAgU3RyaW5nW10gZW51bWVyYXRlZFZhbHVlcyA9ICgoQ01FbGVtZW50RGVjbGFyYXRpb24pY21Ob2RlKS5nZXREYXRhVHlwZSgpLmdldEVudW1lcmF0ZWRWYWx1ZXMoKTsKLQotCSAgLy8gVmVyaWZ5IHRoYXQgYWxsIDEyIGVudW1lcmF0ZWQgdmFsdWVzIGFyZSBpbmNsdWRlZAotCSAgYXNzZXJ0RXF1YWxzKDEyLCBlbnVtZXJhdGVkVmFsdWVzLmxlbmd0aCk7Ci0gIH0KLSAgCiAJcHJpdmF0ZSB2b2lkIHRlc3RMb2NhbEF0dHJEb2N1bWVudGF0aW9uKENNTmFtZWROb2RlTWFwIGF0dHJpYnV0ZXMpIHsKIAkJQ01BdHRyaWJ1dGVEZWNsYXJhdGlvbiBhdHRyaWJ1dGUgPSAoQ01BdHRyaWJ1dGVEZWNsYXJhdGlvbikgYXR0cmlidXRlcy5nZXROYW1lZEl0ZW0oImxvY2FsQXR0ciIpOwogCQlhc3NlcnROb3ROdWxsKCJNaXNzaW5nIGxvY2FsQXR0ciBhdHRyaWJ1dGUuIik7CkBAIC00MzIsNSArNDIxLDc3IEBACiAJCWFzc2VydE51bGwoImdsb2JhbEF0dHI0IHJldHVybmVkIGRhdGEgd2hlbiBub24gZXhwZWN0ZWQuIiwgKChEb2N1bWVudGF0aW9uSW1wbClkb2N1bWVudGF0aW9uLml0ZW0oMCkpLmdldFZhbHVlKCkpOwogCX0KIAkKLQkJCisKKyAgcHVibGljIHZvaWQgdGVzdENNVmlzaXRvckZvckN5Y2xpY0dyb3VwUmVmZXJlbmNlcygpCisgIHsKKyAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTI0NTg1MQorICAgIEJ1bmRsZSBidW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoIm9yZy5lY2xpcHNlLndzdC54c2QuY29yZS50ZXN0cyIpOworICAgIFVSTCB1cmwgPSBidW5kbGUuZ2V0RW50cnkoIi90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvZ3JvdXBzL0N5Y2xpY01vZGVsR3JvdXBEZWZpbml0aW9uUmVmZXJlbmNlcy54c2QiKTsKKyAgICAKKyAgICBDTURvY3VtZW50IGRvY3VtZW50ID0gWFNESW1wbC5idWlsZENNRG9jdW1lbnQodXJsLnRvRXh0ZXJuYWxGb3JtKCkpOworICAgIGFzc2VydE5vdE51bGwoIkNvbnRlbnQgbW9kZWwgbG9hZGVkIE51bGwiLCBkb2N1bWVudCk7CisgICAgCisgICAgQ01OYW1lZE5vZGVNYXAgZWxlbWVudHMgPSBkb2N1bWVudC5nZXRFbGVtZW50cygpOworICAgIAorICAgIENNRWxlbWVudERlY2xhcmF0aW9uIHJvb3RFbGVtZW50ID0gIChDTUVsZW1lbnREZWNsYXJhdGlvbillbGVtZW50cy5nZXROYW1lZEl0ZW0oIlJvb3RFbGVtZW50Iik7CisgICAgYXNzZXJ0Tm90TnVsbCgiTWlzc2luZyBvYmplY3QgZWxlbWVudCIsIHJvb3RFbGVtZW50KTsKKyAgICAKKyAgICB0cnkKKyAgICB7CisgICAgICAvLyBUZXN0cyBHcmFwaEdlbmVyYXRvcidzIHZpc2l0Q01Ob2RlCisgICAgICBDTVZhbGlkYXRvciBjbVZhbGlkYXRvciA9IG5ldyBDTVZhbGlkYXRvcigpOyAgLy8gaW50ZXJuYWwKKyAgICAgIGNtVmFsaWRhdG9yLmNyZWF0ZUdyYXBoKHJvb3RFbGVtZW50KTsKKyAgICAgIAorICAgICAgLy8gVGVzdHMgQ01EZXNjcmlwdGlvbkJ1aWxkZXIncyB2aXNpdENNTm9kZQorICAgICAgQ01EZXNjcmlwdGlvbkJ1aWxkZXIgZGVzY3JpcHRpb25CdWlsZGVyID0gbmV3IENNRGVzY3JpcHRpb25CdWlsZGVyKCk7IC8vIGludGVybmFsCisgICAgICBkZXNjcmlwdGlvbkJ1aWxkZXIuYnVpbGREZXNjcmlwdGlvbihyb290RWxlbWVudCk7CisgICAgfQorICAgIGNhdGNoIChTdGFja092ZXJmbG93RXJyb3IgZSkKKyAgICB7CisgICAgICBmYWlsKGUuZ2V0TG9jYWxpemVkTWVzc2FnZSgpKTsgCisgICAgfQorICB9CisgIAorICBwdWJsaWMgdm9pZCB0ZXN0WFNEVmlzaXRvckZvckN5Y2xpY0dyb3VwUmVmZXJlbmNlcygpCisgIHsKKyAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTI0NTg1MQorICAgIEJ1bmRsZSBidW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoIm9yZy5lY2xpcHNlLndzdC54c2QuY29yZS50ZXN0cyIpOworICAgIFVSTCB1cmwgPSBidW5kbGUuZ2V0RW50cnkoIi90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvZ3JvdXBzL0N5Y2xpY01vZGVsR3JvdXBEZWZpbml0aW9uUmVmZXJlbmNlcy54c2QiKTsKKworICAgIFhTRFNjaGVtYSB4c2RTY2hlbWEgPSBYU0RJbXBsLmJ1aWxkWFNETW9kZWwodXJsLnRvRXh0ZXJuYWxGb3JtKCkpOworICAgIGFzc2VydE5vdE51bGwoeHNkU2NoZW1hKTsKKworICAgIFN0cmluZyB0eXBlTmFtZSA9ICJSb290RWxlbWVudCI7CisgICAgdHJ5CisgICAgeworICAgICAgZm9yIChJdGVyYXRvciBlbGVtZW50cyA9IHhzZFNjaGVtYS5nZXRFbGVtZW50RGVjbGFyYXRpb25zKCkuaXRlcmF0b3IoKTsgZWxlbWVudHMuaGFzTmV4dCgpOykKKyAgICAgIHsKKyAgICAgICAgT2JqZWN0IG9iaiA9IGVsZW1lbnRzLm5leHQoKTsKKyAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIFhTREVsZW1lbnREZWNsYXJhdGlvbikKKyAgICAgICAgeworICAgICAgICAgIFhTREVsZW1lbnREZWNsYXJhdGlvbiBlbGVtZW50ID0gKFhTREVsZW1lbnREZWNsYXJhdGlvbikgb2JqOworICAgICAgICAgIGlmICh0eXBlTmFtZS5lcXVhbHMoZWxlbWVudC5nZXROYW1lKCkpKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIENNTm9kZSBjbU5vZGUgPSBYU0RJbXBsLmdldEFkYXB0ZXIoZWxlbWVudCk7CisgICAgICAgICAgICBpZiAoY21Ob2RlIGluc3RhbmNlb2YgWFNERWxlbWVudERlY2xhcmF0aW9uQWRhcHRlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgWFNERWxlbWVudERlY2xhcmF0aW9uQWRhcHRlciBhZGFwdGVyID0gKFhTREVsZW1lbnREZWNsYXJhdGlvbkFkYXB0ZXIpIGNtTm9kZTsKKyAgICAgICAgICAgICAgQ01Db250ZW50IGNvbnRlbnQgPSBhZGFwdGVyLmdldENvbnRlbnQoKTsKKyAgICAgICAgICAgICAgYXNzZXJ0Tm90TnVsbCgiQ29udGVudCBpcyBudWxsIiwgY29udGVudCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgQ01OYW1lZE5vZGVNYXAgbG9jYWxFbGVtZW50cyA9IGFkYXB0ZXIuZ2V0TG9jYWxFbGVtZW50cygpOworICAgICAgICAgICAgICBhc3NlcnROb3ROdWxsKCJsb2NhbEVsZW1lbnRzIGlzIG51bGwiLCBsb2NhbEVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgICBjYXRjaCAoU3RhY2tPdmVyZmxvd0Vycm9yIGUpCisgICAgeworICAgICAgZmFpbChlLmdldExvY2FsaXplZE1lc3NhZ2UoKSk7CisgICAgfQorICAgIGZhaWwoIlVuZXhwZWN0ZWQgZmFpbHVyZSIpOworICB9CisKIH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLmNvcmUudGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL2dyb3Vwcy9DeWNsaWNNb2RlbEdyb3VwRGVmaW5pdGlvblJlZmVyZW5jZXMueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9ncm91cHMvQ3ljbGljTW9kZWxHcm91cERlZmluaXRpb25SZWZlcmVuY2VzLnhzZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDk1NTM5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9ncm91cHMvQ3ljbGljTW9kZWxHcm91cERlZmluaXRpb25SZWZlcmVuY2VzLnhzZApAQCAtMCwwICsxLDYzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9jeWNsaWNHcm91cFJlZmVyZW5jZXMiCisJZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6dG5zPSJodHRwOi8vY3ljbGljR3JvdXBSZWZlcmVuY2VzIj4KKworCTxncm91cCBuYW1lPSJOZXdHcm91cERlZmluaXRpb24wIj4KKwkJPHNlcXVlbmNlPgorCQkJPGVsZW1lbnQgbmFtZT0iZ3IwZTEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PgorCQkJPGdyb3VwIHJlZj0idG5zOk5ld0dyb3VwRGVmaW5pdGlvbjEiPjwvZ3JvdXA+CisJCTwvc2VxdWVuY2U+CisJPC9ncm91cD4KKworCTxncm91cCBuYW1lPSJOZXdHcm91cERlZmluaXRpb24xIj4KKwkJPHNlcXVlbmNlPgorCQkJPGVsZW1lbnQgbmFtZT0iZ3IxZTEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PgorCQkJPGVsZW1lbnQgbmFtZT0iZ3IxZTIiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PgorCQkJPGdyb3VwIHJlZj0idG5zOk5ld0dyb3VwRGVmaW5pdGlvbjIiPjwvZ3JvdXA+CisJCQk8ZWxlbWVudCBuYW1lPSJncjFlMyIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+CisJCTwvc2VxdWVuY2U+CisJPC9ncm91cD4KKworCTxjb21wbGV4VHlwZSBuYW1lPSJHbG9iYWxDb21wbGV4VHlwZSI+CisJCTxzZXF1ZW5jZT4KKwkJCTxlbGVtZW50IG5hbWU9ImN0ZTEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PgorCQkJPGdyb3VwIHJlZj0idG5zOk5ld0dyb3VwRGVmaW5pdGlvbjEiPjwvZ3JvdXA+CisJCQk8ZWxlbWVudCBuYW1lPSJjdGUyIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD4KKwkJCTxlbGVtZW50IG5hbWU9ImN0ZTMiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PgorCQk8L3NlcXVlbmNlPgorCTwvY29tcGxleFR5cGU+CisKKwk8Z3JvdXAgbmFtZT0iTmV3R3JvdXBEZWZpbml0aW9uMiI+CisJCTxzZXF1ZW5jZT4KKwkJCTxlbGVtZW50IG5hbWU9ImdyMmUxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD4KKwkJCTxlbGVtZW50IG5hbWU9ImdyMmUyIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD4KKwkJCTxncm91cCByZWY9InRuczpOZXdHcm91cERlZmluaXRpb24wIj48L2dyb3VwPgorCQk8L3NlcXVlbmNlPgorCTwvZ3JvdXA+CisKKwk8Z3JvdXAgbmFtZT0iVmFsaWRHcm91cDAwMSI+CisJCTxzZXF1ZW5jZT4KKwkJCTxlbGVtZW50IG5hbWU9InZlMSIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+CisJCQk8ZWxlbWVudCBuYW1lPSJ2ZTIiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PgorCQkJPGdyb3VwIHJlZj0idG5zOlZhbGlkR3JvdXAwMDIiPjwvZ3JvdXA+CisJCTwvc2VxdWVuY2U+CisJPC9ncm91cD4KKworCTxncm91cCBuYW1lPSJWYWxpZEdyb3VwMDAyIj4KKwkJPHNlcXVlbmNlPgorCQkJPGVsZW1lbnQgbmFtZT0idjJlMiIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+CisJCQk8ZWxlbWVudCBuYW1lPSJ2MmUxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD4KKwkJCTxncm91cCByZWY9InRuczpWYWxpZEdyb3VwMDAzIj48L2dyb3VwPgorCQk8L3NlcXVlbmNlPgorCTwvZ3JvdXA+CisKKwk8Z3JvdXAgbmFtZT0iVmFsaWRHcm91cDAwMyI+CisJCTxzZXF1ZW5jZT4KKwkJCTxlbGVtZW50IG5hbWU9InYzZTEiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PgorCQkJPGVsZW1lbnQgbmFtZT0idjNlMiIgdHlwZT0ic3RyaW5nIj48L2VsZW1lbnQ+CisJCTwvc2VxdWVuY2U+CisJPC9ncm91cD4KKworCTxlbGVtZW50IG5hbWU9IlJvb3RFbGVtZW50IiB0eXBlPSJ0bnM6R2xvYmFsQ29tcGxleFR5cGUiPgorCTwvZWxlbWVudD4KKzwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy90ZXN0U2NoZW1hRm9yQnVnMTc2NDIwLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QuY29yZS50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvdGVzdFNjaGVtYUZvckJ1ZzE3NjQyMC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiY2FmNTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy90ZXN0U2NoZW1hRm9yQnVnMTc2NDIwLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3Rlc3RTY2hlbWFGb3JCdWcxNzY0MjAiCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL3Rlc3RTY2hlbWFGb3JCdWcxNzY0MjAiCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiPgotCTxzaW1wbGVUeXBlIG5hbWU9Im51bWJlcnNUeXBlIj4KLQkJPHJlc3RyaWN0aW9uIGJhc2U9InN0cmluZyI+Ci0JCQk8ZW51bWVyYXRpb24gdmFsdWU9IjEiLz4KLQkJCTxlbnVtZXJhdGlvbiB2YWx1ZT0iMiIvPgotCQkJPGVudW1lcmF0aW9uIHZhbHVlPSIzIi8+Ci0JCQk8ZW51bWVyYXRpb24gdmFsdWU9IjQiLz4KLQkJPC9yZXN0cmljdGlvbj4KLQk8L3NpbXBsZVR5cGU+Ci0JPHNpbXBsZVR5cGUgbmFtZT0ibGV0dGVyc1R5cGUiPgotCQk8cmVzdHJpY3Rpb24gYmFzZT0ic3RyaW5nIj4KLQkJCTxlbnVtZXJhdGlvbiB2YWx1ZT0iYSIvPgotCQkJPGVudW1lcmF0aW9uIHZhbHVlPSJiIi8+Ci0JCQk8ZW51bWVyYXRpb24gdmFsdWU9ImMiLz4KLQkJCTxlbnVtZXJhdGlvbiB2YWx1ZT0iZCIvPgotCQk8L3Jlc3RyaWN0aW9uPgotCTwvc2ltcGxlVHlwZT4KLQk8c2ltcGxlVHlwZSBuYW1lPSJ1bmlvblR5cGUiPgotCQk8dW5pb24gbWVtYmVyVHlwZXM9InRuczpsZXR0ZXJzVHlwZSB0bnM6bnVtYmVyc1R5cGUgdG5zOnVuaW9uMlR5cGUiIC8+Ci0JPC9zaW1wbGVUeXBlPgotCTxlbGVtZW50IG5hbWU9ImVsZW1lbnQiIHR5cGU9InRuczp1bmlvblR5cGUiPjwvZWxlbWVudD4KLSAgICA8c2ltcGxlVHlwZSBuYW1lPSJudW1iZXJzMlR5cGUiPgotICAgIAk8cmVzdHJpY3Rpb24gYmFzZT0ic3RyaW5nIj4KLSAgICAJCTxlbnVtZXJhdGlvbiB2YWx1ZT0iNCIvPgotICAgIAkJPGVudW1lcmF0aW9uIHZhbHVlPSI1Ii8+Ci0gICAgCQk8ZW51bWVyYXRpb24gdmFsdWU9IjYiLz4KLSAgICAJPC9yZXN0cmljdGlvbj4KLSAgICA8L3NpbXBsZVR5cGU+Ci0gICAgPHNpbXBsZVR5cGUgbmFtZT0ibGV0dGVyczJUeXBlIj4KLSAgICAJPHJlc3RyaWN0aW9uIGJhc2U9InN0cmluZyI+Ci0gICAgCQk8ZW51bWVyYXRpb24gdmFsdWU9ImQiLz4KLSAgICAJCTxlbnVtZXJhdGlvbiB2YWx1ZT0iZSIvPgotICAgIAkJPGVudW1lcmF0aW9uIHZhbHVlPSJmIi8+Ci0gICAgCTwvcmVzdHJpY3Rpb24+Ci0gICAgPC9zaW1wbGVUeXBlPgotICAgIDxzaW1wbGVUeXBlIG5hbWU9InVuaW9uMlR5cGUiPgotICAgIAk8dW5pb24gbWVtYmVyVHlwZXM9InRuczpsZXR0ZXJzMlR5cGUgdG5zOm51bWJlcnMyVHlwZSIvPjwvc2ltcGxlVHlwZT4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NGM1ZTMxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTlhYTE3OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0czwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTAwZjIxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotI1dlZCBKdWwgMjMgMTE6MTk6MTMgRURUIDIwMDgKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5udWxsUmVmZXJlbmNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucmVkdW5kYW50TnVsbENoZWNrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG90ZW50aWFsTnVsbFJlZmVyZW5jZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTG9jYWw9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wYXJhbWV0ZXJBc3NpZ25tZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS41Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTGFiZWw9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS41Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFdhcm5pbmdUb2tlbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlckluY2x1ZGVEb2NDb21tZW50UmVmZXJlbmNlPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25JbmNsdWRlRG9jQ29tbWVudFJlZmVyZW5jZT1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5yYXdUeXBlUmVmZXJlbmNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5yZWR1bmRhbnRTdXBlcmludGVyZmFjZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmF0YWxPcHRpb25hbEVycm9yPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZGlzYWJsZWQKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uRXhlbXB0RXhjZXB0aW9uQW5kVGhyb3dhYmxlPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmFsbHRocm91Z2hDYXNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZGlzYWJsZWQKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWI0NGIxNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUdWUgSnVsIDIyIDEyOjEzOjUxIEVEVCAyMDA4Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LnVpLnRleHQuY3VzdG9tX2NvZGVfdGVtcGxhdGVzPTw/eG1sIHZlcnNpb25cPSIxLjAiIGVuY29kaW5nXD0iVVRGLTgiIHN0YW5kYWxvbmVcPSJubyI/Pjx0ZW1wbGF0ZXMvPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlYzkwODUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVCdW5kbGUtTmFtZS4wCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzCi1CdW5kbGUtVmVyc2lvbjogMS4wLjAucXVhbGlmaWVyCi1CdW5kbGUtQ2xhc3NQYXRoOiB4c2R1aXRlc3RzLmphcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy5BY3RpdmF0b3IKLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS51aTtidW5kbGUtdmVyc2lvbj0iWzMuNC4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lO2J1bmRsZS12ZXJzaW9uPSJbMy40LjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcztidW5kbGUtdmVyc2lvbj0iWzMuNC4wLDQuMC4wKSIsCi0gb3JnLmp1bml0O2J1bmRsZS12ZXJzaW9uPSJbMy44LjEsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3QueHNkLnVpO2J1bmRsZS12ZXJzaW9uPSJbMS4yLjAsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS54c2Q7YnVuZGxlLXZlcnNpb249IlsyLjQuMCwzLjAuMCkiCi1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjUKLUJ1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5Ci1CdW5kbGUtVmVuZG9yOiAlQnVuZGxlLVZlbmRvci4wCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL2Fib3V0Lmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxOTlkZjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+SnVuZSwgMjAwODwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkNTZkOGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotYmluLmluY2x1ZGVzID0gTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIGJ1aWxkLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgdGVzdHJlc291cmNlcy8sXAotICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAotICAgICAgICAgICAgICAgdGVzdC54bWwsXAotICAgICAgICAgICAgICAgeHNkdWl0ZXN0cy5qYXIsXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbAotamFycy5jb21waWxlLm9yZGVyID0geHNkdWl0ZXN0cy5qYXIKLXNvdXJjZS54c2R1aXRlc3RzLmphciA9IHNyYy8KLW91dHB1dC54c2R1aXRlc3RzLmphciA9IGJpbi8KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy9wbHVnaW4ucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiZTE2NjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIwotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgcHJvcGVydGllcyBmaWxlIGZvciBvcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzCi1CdW5kbGUtVmVuZG9yLjAgPSBFY2xpcHNlLm9yZwotQnVuZGxlLU5hbWUuMCA9IFhTRCBVSSBUZXN0cyBQbHVnLWluClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC91aS90ZXN0cy9BY3RpdmF0b3IuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvdWkvdGVzdHMvQWN0aXZhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3MDgxYWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC91aS90ZXN0cy9BY3RpdmF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5GaWxlTG9jYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbjsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0OwotCi0vKioKLSAqIFRoZSBhY3RpdmF0b3IgY2xhc3MgY29udHJvbHMgdGhlIHBsdWctaW4gbGlmZSBjeWNsZQotICovCi1wdWJsaWMgY2xhc3MgQWN0aXZhdG9yIGV4dGVuZHMgQWJzdHJhY3RVSVBsdWdpbgotewotCi0gIC8vIFRoZSBwbHVnLWluIElECi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzIjsKLSAgcHJpdmF0ZSBzdGF0aWMgQnVuZGxlIHBsdWdpbkJ1bmRsZSA9IG51bGw7Ci0KLSAgLy8gVGhlIHNoYXJlZCBpbnN0YW5jZQotICBwcml2YXRlIHN0YXRpYyBBY3RpdmF0b3IgcGx1Z2luOwotCi0gIC8qKgotICAgKiBUaGUgY29uc3RydWN0b3IKLSAgICovCi0gIHB1YmxpYyBBY3RpdmF0b3IoKQotICB7Ci0gICAgcGx1Z2luID0gdGhpczsKLSAgfQotCi0gIC8qCi0gICAqIChub24tSmF2YWRvYykKLSAgICogCi0gICAqIEBzZWUKLSAgICogb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW4jc3RhcnQob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQKLSAgICogKQotICAgKi8KLSAgcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uCi0gIHsKLSAgICBzdXBlci5zdGFydChjb250ZXh0KTsKLSAgICBwbHVnaW4gPSB0aGlzOwotICAgIHBsdWdpbkJ1bmRsZSA9IGNvbnRleHQuZ2V0QnVuZGxlKCk7Ci0gIH0KLQotICAvKgotICAgKiAobm9uLUphdmFkb2MpCi0gICAqIAotICAgKiBAc2VlCi0gICAqIG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luI3N0b3Aob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQKLSAgICogKQotICAgKi8KLSAgcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24KLSAgewotICAgIHBsdWdpbiA9IG51bGw7Ci0gICAgc3VwZXIuc3RvcChjb250ZXh0KTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UKLSAgICogCi0gICAqIEByZXR1cm4gdGhlIHNoYXJlZCBpbnN0YW5jZQotICAgKi8KLSAgcHVibGljIHN0YXRpYyBBY3RpdmF0b3IgZ2V0RGVmYXVsdCgpCi0gIHsKLSAgICByZXR1cm4gcGx1Z2luOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCB0aGUgaW5zdGFsbCBVUkwgb2YgdGhpcyBwbHVnaW4uCi0gICAqIAotICAgKiBAcmV0dXJuIHRoZSBpbnN0YWxsIHVybCBvZiB0aGlzIHBsdWdpbgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0SW5zdGFsbFVSTCgpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICByZXR1cm4gRmlsZUxvY2F0b3IucmVzb2x2ZShwbHVnaW5CdW5kbGUuZ2V0RW50cnkoIi8iKSkuZ2V0RmlsZSgpOwotICAgIH0KLSAgICBjYXRjaCAoSU9FeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvdWkvdGVzdHMvaW50ZXJuYWwvQWxsWFNEVUlUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC91aS90ZXN0cy9pbnRlcm5hbC9BbGxYU0RVSVRlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExMmZiODYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC91aS90ZXN0cy9pbnRlcm5hbC9BbGxYU0RVSVRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy5pbnRlcm5hbDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLS8qKgotICogV3JhcHBlciB0ZXN0IHN1aXRlIGZvciBhbGwgWFNEIFVJIHRlc3RzLgotICovCi1wdWJsaWMgY2xhc3MgQWxsWFNEVUlUZXN0cyBleHRlbmRzIFRlc3RTdWl0ZQotewotICAvKioKLSAgICogQ3JlYXRlIHRoaXMgdGVzdCBzdWl0ZS4KLSAgICogCi0gICAqIEByZXR1cm4gVGhpcyB0ZXN0IHN1aXRlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkKLSAgewotICAgIHJldHVybiBuZXcgQWxsWFNEVUlUZXN0cygpOwotICB9Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yCi0gICAqLwotICBwdWJsaWMgQWxsWFNEVUlUZXN0cygpCi0gIHsKLSAgICBzdXBlcigiQWxsWFNEVUlUZXN0cyIpOwotICAgIC8vIFhTRCBJbmNsdWRlcyB0ZXN0cwotICAgIGFkZFRlc3QoQ2hhbWVsZW9uSW5jbHVkZXNUZXN0LnN1aXRlKCkpOwotICAgIC8vIFRlc3RpbmcgdXNlZCBpbXBvcnRzIGFyZW4ndCByZW1vdmVkIChlbnN1cmUgbG9naWMgdG8gZGV0ZXJtaW5lCi0gICAgLy8gd2hhdCBpcyBvciB3aGF0IGlzIG5vdCB1c2VkIGlzIGNvcnJlY3QpCi0gICAgYWRkVGVzdChJbXBvcnRzVGVzdC5zdWl0ZSgpKTsKLSAgICAvLyBVbnVzZWQgWFNEIGltcG9ydHMgdGVzdHMKLSAgICBhZGRUZXN0KFhTRFVudXNlZFRlc3RzLnN1aXRlKCkpOwotICAgIC8vIFhTRCB4bWwgbnMgdGFibGUgY2xlYW51cAotICAgIGFkZFRlc3QoWFNEWE1MTlNDbGVhbnVwVGVzdHMuc3VpdGUoKSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvdWkvdGVzdHMvaW50ZXJuYWwvQmFzZVRlc3RDYXNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL3VpL3Rlc3RzL2ludGVybmFsL0Jhc2VUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNjM0YjNkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvdWkvdGVzdHMvaW50ZXJuYWwvQmFzZVRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy5pbnRlcm5hbDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlU2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5pbXBsLlJlc291cmNlU2V0SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLnVpLmludGVybmFsLmNvbW1vbi51dGlsLlhTRERpcmVjdGl2ZXNNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMuQWN0aXZhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWE7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLnV0aWwuWFNEUmVzb3VyY2VJbXBsOwotCi1wdWJsaWMgY2xhc3MgQmFzZVRlc3RDYXNlIGV4dGVuZHMgVGVzdENhc2UKLXsKLSAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExVR0lOX0FCU09MVVRFX1BBVEggPSBBY3RpdmF0b3IuZ2V0SW5zdGFsbFVSTCgpOwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBSRVNPVVJDRVNfRk9MREVSID0gInRlc3RyZXNvdXJjZXMiOyAvLyROT04tTkxTLTEkCi0gIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFRDX1JPT1RfRk9MREVSID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyAiLyIgKyBSRVNPVVJDRVNfRk9MREVSICsgIi9YU0QiOyAvLyROT04tTkxTLTEkCi0gIHByb3RlY3RlZCBYU0REaXJlY3RpdmVzTWFuYWdlciBpbXBvcnRNYW5hZ2VyID0gbmV3IFhTRERpcmVjdGl2ZXNNYW5hZ2VyKCk7Ci0KLSAgcHVibGljIEJhc2VUZXN0Q2FzZSgpCi0gIHsKLSAgfQotCi0gIHB1YmxpYyBCYXNlVGVzdENhc2UoU3RyaW5nIG5hbWUpCi0gIHsKLSAgICBzdXBlcihuYW1lKTsKLSAgfQotCi0gIHByb3RlY3RlZCBYU0RTY2hlbWEgZ2V0WFNEU2NoZW1hKFN0cmluZyBwYXRoKQotICB7Ci0gICAgVVJJIHVyaSA9IFVSSS5jcmVhdGVGaWxlVVJJKHBhdGgpOwotICAgIFJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOwotICAgIFhTRFJlc291cmNlSW1wbCByZXNvdXJjZSA9IChYU0RSZXNvdXJjZUltcGwpIHJlc291cmNlU2V0LmdldFJlc291cmNlKHVyaSwgdHJ1ZSk7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IHJlc291cmNlLmdldFNjaGVtYSgpOwotICAgIGFzc2VydE5vdE51bGwoc2NoZW1hKTsKLSAgICByZXR1cm4gc2NoZW1hOwotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL3VpL3Rlc3RzL2ludGVybmFsL0NoYW1lbGVvbkluY2x1ZGVzVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC91aS90ZXN0cy9pbnRlcm5hbC9DaGFtZWxlb25JbmNsdWRlc1Rlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjRkMThmNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL3VpL3Rlc3RzL2ludGVybmFsL0NoYW1lbGVvbkluY2x1ZGVzVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjI0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYTsKLQotcHVibGljIGNsYXNzIENoYW1lbGVvbkluY2x1ZGVzVGVzdCBleHRlbmRzIEJhc2VUZXN0Q2FzZQotewotICAvKioKLSAgICogQ3JlYXRlIGEgdGVzdHMgc3VpdGUgZnJvbSB0aGlzIHRlc3QgY2xhc3MuCi0gICAqIAotICAgKiBAcmV0dXJuIEEgdGVzdCBzdWl0ZSBjb250YWluaW5nIHRoaXMgdGVzdCBjbGFzcy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IFRlc3RTdWl0ZShDaGFtZWxlb25JbmNsdWRlc1Rlc3QuY2xhc3MpOwotICB9Ci0gIAotICBwdWJsaWMgdm9pZCB0ZXN0Q2hhbWVsZW9uVGVzdDAwMSgpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlBdHRyaWJ1dGUvVXNlZC9NYWluLnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDApOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdENoYW1lbGVvblRlc3QwMDIoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5QXR0cmlidXRlL1VudXNlZC9NYWluLnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDEpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdENoYW1lbGVvblRlc3QwMDMoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5QXR0cmlidXRlR3JvdXAvVXNlZC9NYWluLnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDApOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdENoYW1lbGVvblRlc3QwMDQoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5QXR0cmlidXRlR3JvdXAvVW51c2VkL01haW4ueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0Q2hhbWVsZW9uVGVzdDAwNSgpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tQmFzZVR5cGUxLnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDApOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdENoYW1lbGVvblRlc3QwMDYoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUJhc2VUeXBlMi54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAwKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RDaGFtZWxlb25UZXN0MDA3KCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1CYXNlVHlwZTMueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0Q2hhbWVsZW9uVGVzdDAwOCgpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tR2xvYmFsRWxlbWVudFR5cGUueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0Q2hhbWVsZW9uVGVzdDAwOSgpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTEueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0Q2hhbWVsZW9uVGVzdDAxMCgpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTIueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0Q2hhbWVsZW9uVGVzdDAxMSgpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlFbGVtZW50L1VzZWQvTWFpbi1DVC54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAwKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RDaGFtZWxlb25UZXN0MDEyKCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUVsZW1lbnQvVXNlZC9NYWluLUdyb3VwLnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDApOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdENoYW1lbGVvblRlc3QwMTMoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5R3JvdXBEZWZpbml0aW9uL1VzZWQvTWFpbi1DVC54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAwKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RDaGFtZWxlb25UZXN0MDE0KCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUdyb3VwRGVmaW5pdGlvbi9Vc2VkL01haW4tR3JvdXAueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0Q2hhbWVsZW9uVGVzdDAxNSgpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1HbG9iYWxBdHRyaWJ1dGVUeXBlLnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDApOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdENoYW1lbGVvblRlc3QwMTYoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tR2xvYmFsRWxlbWVudFR5cGUueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0Q2hhbWVsZW9uVGVzdDAxNygpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1MaXN0LnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDApOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdENoYW1lbGVvblRlc3QwMTgoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tTG9jYWxBdHRyaWJ1dGVUeXBlMS54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAwKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RDaGFtZWxlb25UZXN0MDE5KCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUxLnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDApOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdENoYW1lbGVvblRlc3QwMjAoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTIueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0Q2hhbWVsZW9uVGVzdDAyMSgpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1SZXN0cmljdGlvbi54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAwKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RDaGFtZWxlb25UZXN0MDIyKCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLVVuaW9uMS54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAwKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RDaGFtZWxlb25UZXN0MDIzKCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLVVuaW9uMi54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAwKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RDaGFtZWxlb25UZXN0MDI0KCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLVVuaW9uMy54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAwKTsKLSAgfQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC91aS90ZXN0cy9pbnRlcm5hbC9JbXBvcnRzVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC91aS90ZXN0cy9pbnRlcm5hbC9JbXBvcnRzVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OWUzM2JlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvdWkvdGVzdHMvaW50ZXJuYWwvSW1wb3J0c1Rlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWE7Ci0KLXB1YmxpYyBjbGFzcyBJbXBvcnRzVGVzdCBleHRlbmRzIEJhc2VUZXN0Q2FzZQotewotICAvKioKLSAgICogQ3JlYXRlIGEgdGVzdHMgc3VpdGUgZnJvbSB0aGlzIHRlc3QgY2xhc3MuCi0gICAqIAotICAgKiBAcmV0dXJuIEEgdGVzdCBzdWl0ZSBjb250YWluaW5nIHRoaXMgdGVzdCBjbGFzcy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IFRlc3RTdWl0ZShJbXBvcnRzVGVzdC5jbGFzcyk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0MDAxKCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5QXR0cmlidXRlL1VzZWQvTWFpbi54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAwKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnQwMDIoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlBdHRyaWJ1dGUvVW51c2VkL01haW4ueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0MDAzKCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5QXR0cmlidXRlR3JvdXAvVXNlZC9NYWluLnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDApOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydDAwNCgpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUF0dHJpYnV0ZUdyb3VwL1VudXNlZC9NYWluLnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDEpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydDAwNSgpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1CYXNlVHlwZTEueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0MDA2KCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUJhc2VUeXBlMi54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAwKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnQwMDcoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tQmFzZVR5cGUzLnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDApOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydDAwOCgpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1HbG9iYWxFbGVtZW50VHlwZS54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAwKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnQwMDkoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTEueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0MDEwKCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUyLnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDApOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydDAxMSgpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUVsZW1lbnQvVXNlZC9NYWluLUNULnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDApOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydDAxMigpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUVsZW1lbnQvVXNlZC9NYWluLUdyb3VwLnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDApOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydDAxMygpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUdyb3VwRGVmaW5pdGlvbi9Vc2VkL01haW4tQ1QueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0MDE0KCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5R3JvdXBEZWZpbml0aW9uL1VzZWQvTWFpbi1Hcm91cC54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAwKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnQwMTUoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1HbG9iYWxBdHRyaWJ1dGVUeXBlLnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDApOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydDAxNigpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLUdsb2JhbEVsZW1lbnRUeXBlLnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDApOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydDAxNygpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLUxpc3QueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0MDE4KCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tTG9jYWxBdHRyaWJ1dGVUeXBlMS54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAwKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnQwMTkoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMS54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAwKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnQwMjAoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMi54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAwKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnQwMjEoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1SZXN0cmljdGlvbi54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAwKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnQwMjIoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1VbmlvbjEueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0MDIzKCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tVW5pb24yLnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDApOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydDAyNCgpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLVVuaW9uMy54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAwKTsKLSAgfQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC91aS90ZXN0cy9pbnRlcm5hbC9YU0RVbnVzZWRUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC91aS90ZXN0cy9pbnRlcm5hbC9YU0RVbnVzZWRUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NjQ0OTQ3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvdWkvdGVzdHMvaW50ZXJuYWwvWFNEVW51c2VkVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMxNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5YU0RTY2hlbWE7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHNkLlhTRFNjaGVtYURpcmVjdGl2ZTsKLQotcHVibGljIGNsYXNzIFhTRFVudXNlZFRlc3RzIGV4dGVuZHMgQmFzZVRlc3RDYXNlCi17Ci0gIC8qKgotICAgKiBDcmVhdGUgYSB0ZXN0cyBzdWl0ZSBmcm9tIHRoaXMgdGVzdCBjbGFzcy4KLSAgICogCi0gICAqIEByZXR1cm4gQSB0ZXN0IHN1aXRlIGNvbnRhaW5pbmcgdGhpcyB0ZXN0IGNsYXNzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkKLSAgewotICAgIHJldHVybiBuZXcgVGVzdFN1aXRlKFhTRFVudXNlZFRlc3RzLmNsYXNzKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnQwMDEoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvU2ltcGxlL1Rlc3QueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMSk7Ci0gICAgWFNEU2NoZW1hRGlyZWN0aXZlIGQxID0gKFhTRFNjaGVtYURpcmVjdGl2ZSkgbGlzdC5nZXQoMCk7Ci0gICAgYXNzZXJ0VHJ1ZSgiSW1wb3J0MDAxLnhzZCIuZXF1YWxzKGQxLmdldFNjaGVtYUxvY2F0aW9uKCkpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnQwMDFSZXBlYXRSZW1vdmFsT25jZSgpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9TaW1wbGUvVGVzdC54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAxKTsKLSAgICBYU0RTY2hlbWFEaXJlY3RpdmUgZDEgPSAoWFNEU2NoZW1hRGlyZWN0aXZlKSBsaXN0LmdldCgwKTsKLSAgICBhc3NlcnRUcnVlKCJJbXBvcnQwMDEueHNkIi5lcXVhbHMoZDEuZ2V0U2NoZW1hTG9jYXRpb24oKSkpOwotICAgIAotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAwKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnQwMDFSZXBlYXRSZW1vdmFsVHdpY2UoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvU2ltcGxlL1Rlc3QueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMSk7Ci0gICAgWFNEU2NoZW1hRGlyZWN0aXZlIGQxID0gKFhTRFNjaGVtYURpcmVjdGl2ZSkgbGlzdC5nZXQoMCk7Ci0gICAgYXNzZXJ0VHJ1ZSgiSW1wb3J0MDAxLnhzZCIuZXF1YWxzKGQxLmdldFNjaGVtYUxvY2F0aW9uKCkpKTsKLSAgICAKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMCk7Ci0gICAgCi0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDApOwotICB9Ci0KLSAKLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydDAwMigpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9VbnVzZWQvdGVzdC9NYWluMDAxLnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDEpOwotICAgIFhTRFNjaGVtYURpcmVjdGl2ZSBkMSA9IChYU0RTY2hlbWFEaXJlY3RpdmUpIGxpc3QuZ2V0KDApOwotICAgIGFzc2VydFRydWUoIi4uL0luY2x1ZGUxLnhzZCIuZXF1YWxzKGQxLmdldFNjaGVtYUxvY2F0aW9uKCkpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnQwMDMoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvVW51c2VkL3Rlc3QvTWFpbjAwMi54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAxKTsKLSAgICBYU0RTY2hlbWFEaXJlY3RpdmUgZDEgPSAoWFNEU2NoZW1hRGlyZWN0aXZlKSBsaXN0LmdldCgwKTsKLSAgICBhc3NlcnRUcnVlKCIuLi9JbXBvcnQxLnhzZCIuZXF1YWxzKGQxLmdldFNjaGVtYUxvY2F0aW9uKCkpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnQwMDQoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvVW51c2VkL3Rlc3QvTWFpbjAwMy54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAyKTsKLSAgICBYU0RTY2hlbWFEaXJlY3RpdmUgZDEgPSAoWFNEU2NoZW1hRGlyZWN0aXZlKSBsaXN0LmdldCgxKTsKLSAgICBhc3NlcnRUcnVlKCIuLi9JbXBvcnQxLnhzZCIuZXF1YWxzKGQxLmdldFNjaGVtYUxvY2F0aW9uKCkpKTsKLSAgICBYU0RTY2hlbWFEaXJlY3RpdmUgZDIgPSAoWFNEU2NoZW1hRGlyZWN0aXZlKSBsaXN0LmdldCgwKTsKLSAgICBhc3NlcnRUcnVlKCIuLi9JbmNsdWRlMS54c2QiLmVxdWFscyhkMi5nZXRTY2hlbWFMb2NhdGlvbigpKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0MDA1KCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL1VudXNlZC90ZXN0L01haW4wMDQueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMik7Ci0gICAgWFNEU2NoZW1hRGlyZWN0aXZlIGQxID0gKFhTRFNjaGVtYURpcmVjdGl2ZSkgbGlzdC5nZXQoMSk7Ci0gICAgYXNzZXJ0VHJ1ZSgiLi4vSW1wb3J0My54c2QiLmVxdWFscyhkMS5nZXRTY2hlbWFMb2NhdGlvbigpKSk7Ci0gICAgWFNEU2NoZW1hRGlyZWN0aXZlIGQyID0gKFhTRFNjaGVtYURpcmVjdGl2ZSkgbGlzdC5nZXQoMCk7Ci0gICAgYXNzZXJ0VHJ1ZSgiLi4vSW5jbHVkZTEueHNkIi5lcXVhbHMoZDIuZ2V0U2NoZW1hTG9jYXRpb24oKSkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydDAwNigpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9VbnVzZWQvdGVzdC9NYWluMDA1LnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDUpOwotICAgIFhTRFNjaGVtYURpcmVjdGl2ZSBkMSA9IChYU0RTY2hlbWFEaXJlY3RpdmUpIGxpc3QuZ2V0KDEpOwotICAgIGFzc2VydFRydWUoIi4uL0ltcG9ydDEueHNkIi5lcXVhbHMoZDEuZ2V0U2NoZW1hTG9jYXRpb24oKSkpOwotICAgIFhTRFNjaGVtYURpcmVjdGl2ZSBkMiA9IChYU0RTY2hlbWFEaXJlY3RpdmUpIGxpc3QuZ2V0KDIpOwotICAgIGFzc2VydFRydWUoIi4uL0ltcG9ydDIueHNkIi5lcXVhbHMoZDIuZ2V0U2NoZW1hTG9jYXRpb24oKSkpOwotICAgIFhTRFNjaGVtYURpcmVjdGl2ZSBkMyA9IChYU0RTY2hlbWFEaXJlY3RpdmUpIGxpc3QuZ2V0KDMpOwotICAgIGFzc2VydFRydWUoIi4uL0ltcG9ydDMueHNkIi5lcXVhbHMoZDMuZ2V0U2NoZW1hTG9jYXRpb24oKSkpOwotICAgIFhTRFNjaGVtYURpcmVjdGl2ZSBkNCA9IChYU0RTY2hlbWFEaXJlY3RpdmUpIGxpc3QuZ2V0KDQpOwotICAgIGFzc2VydFRydWUoIi4uL0ltcG9ydDQueHNkIi5lcXVhbHMoZDQuZ2V0U2NoZW1hTG9jYXRpb24oKSkpOwotICAgIFhTRFNjaGVtYURpcmVjdGl2ZSBkNSA9IChYU0RTY2hlbWFEaXJlY3RpdmUpIGxpc3QuZ2V0KDApOwotICAgIGFzc2VydFRydWUoIi4uL0luY2x1ZGUxLnhzZCIuZXF1YWxzKGQ1LmdldFNjaGVtYUxvY2F0aW9uKCkpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnQwMDcoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvVW51c2VkL3Rlc3QvTWFpbjAwNi54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAxKTsKLSAgICBYU0RTY2hlbWFEaXJlY3RpdmUgZDEgPSAoWFNEU2NoZW1hRGlyZWN0aXZlKSBsaXN0LmdldCgwKTsKLSAgICBhc3NlcnRUcnVlKCIuLi9JbXBvcnQxLnhzZCIuZXF1YWxzKGQxLmdldFNjaGVtYUxvY2F0aW9uKCkpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnQwMDgoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvVW51c2VkL3Rlc3QvTWFpbjAwNy54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAyKTsKLSAgICBYU0RTY2hlbWFEaXJlY3RpdmUgZDEgPSAoWFNEU2NoZW1hRGlyZWN0aXZlKSBsaXN0LmdldCgwKTsKLSAgICBhc3NlcnRUcnVlKCIuLi9JbXBvcnQxLnhzZCIuZXF1YWxzKGQxLmdldFNjaGVtYUxvY2F0aW9uKCkpKTsKLSAgICBYU0RTY2hlbWFEaXJlY3RpdmUgZDIgPSAoWFNEU2NoZW1hRGlyZWN0aXZlKSBsaXN0LmdldCgxKTsKLSAgICBhc3NlcnRUcnVlKCIuLi9JbmNsdWRlMi54c2QiLmVxdWFscyhkMi5nZXRTY2hlbWFMb2NhdGlvbigpKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0MDA5KCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL1VudXNlZC90ZXN0L01haW4wMDgueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMik7Ci0gICAgWFNEU2NoZW1hRGlyZWN0aXZlIGQxID0gKFhTRFNjaGVtYURpcmVjdGl2ZSkgbGlzdC5nZXQoMCk7Ci0gICAgYXNzZXJ0VHJ1ZSgiLi4vSW1wb3J0MS54c2QiLmVxdWFscyhkMS5nZXRTY2hlbWFMb2NhdGlvbigpKSk7Ci0gICAgWFNEU2NoZW1hRGlyZWN0aXZlIGQyID0gKFhTRFNjaGVtYURpcmVjdGl2ZSkgbGlzdC5nZXQoMSk7Ci0gICAgYXNzZXJ0VHJ1ZSgiLi4vSW5jbHVkZTIueHNkIi5lcXVhbHMoZDIuZ2V0U2NoZW1hTG9jYXRpb24oKSkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydDAxMCgpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9VbnVzZWQvdGVzdC9NYWluMDA5LnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDEpOwotICAgIFhTRFNjaGVtYURpcmVjdGl2ZSBkMSA9IChYU0RTY2hlbWFEaXJlY3RpdmUpIGxpc3QuZ2V0KDApOwotICAgIGFzc2VydFRydWUoIi4uL0ltcG9ydDEueHNkIi5lcXVhbHMoZDEuZ2V0U2NoZW1hTG9jYXRpb24oKSkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydDAxMSgpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9VbnVzZWQvdGVzdC9NYWluMDA5YS54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSAwKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnQwMTIoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvVW51c2VkL3Rlc3QvTWFpbjAwOWIueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMik7Ci0gICAgWFNEU2NoZW1hRGlyZWN0aXZlIGQxID0gKFhTRFNjaGVtYURpcmVjdGl2ZSkgbGlzdC5nZXQoMCk7Ci0gICAgYXNzZXJ0VHJ1ZSgiLi4vSW5jbHVkZTIueHNkIi5lcXVhbHMoZDEuZ2V0U2NoZW1hTG9jYXRpb24oKSkpOwotICAgIFhTRFNjaGVtYURpcmVjdGl2ZSBkMiA9IChYU0RTY2hlbWFEaXJlY3RpdmUpIGxpc3QuZ2V0KDEpOwotICAgIGFzc2VydFRydWUoIi4uL0luY2x1ZGUzLnhzZCIuZXF1YWxzKGQyLmdldFNjaGVtYUxvY2F0aW9uKCkpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnQwMTMoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvVW51c2VkL3Rlc3QvTWFpbjAwOWMueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gMyk7Ci0gICAgWFNEU2NoZW1hRGlyZWN0aXZlIGQxID0gKFhTRFNjaGVtYURpcmVjdGl2ZSkgbGlzdC5nZXQoMCk7Ci0gICAgYXNzZXJ0VHJ1ZSgiLi4vSW5jbHVkZTEueHNkIi5lcXVhbHMoZDEuZ2V0U2NoZW1hTG9jYXRpb24oKSkpOwotICAgIFhTRFNjaGVtYURpcmVjdGl2ZSBkMiA9IChYU0RTY2hlbWFEaXJlY3RpdmUpIGxpc3QuZ2V0KDEpOwotICAgIGFzc2VydFRydWUoIi4uL0luY2x1ZGUyLnhzZCIuZXF1YWxzKGQyLmdldFNjaGVtYUxvY2F0aW9uKCkpKTsKLSAgICBYU0RTY2hlbWFEaXJlY3RpdmUgZDMgPSAoWFNEU2NoZW1hRGlyZWN0aXZlKSBsaXN0LmdldCgyKTsKLSAgICBhc3NlcnRUcnVlKCIuLi9JbmNsdWRlMy54c2QiLmVxdWFscyhkMy5nZXRTY2hlbWFMb2NhdGlvbigpKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0MDE0KCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL1VudXNlZC90ZXN0L01haW4wMDlkLnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDIpOwotICAgIFhTRFNjaGVtYURpcmVjdGl2ZSBkMSA9IChYU0RTY2hlbWFEaXJlY3RpdmUpIGxpc3QuZ2V0KDApOwotICAgIGFzc2VydFRydWUoIi4uL0luY2x1ZGUxLnhzZCIuZXF1YWxzKGQxLmdldFNjaGVtYUxvY2F0aW9uKCkpKTsKLSAgICBYU0RTY2hlbWFEaXJlY3RpdmUgZDIgPSAoWFNEU2NoZW1hRGlyZWN0aXZlKSBsaXN0LmdldCgxKTsKLSAgICBhc3NlcnRUcnVlKCIuLi9JbmNsdWRlMy54c2QiLmVxdWFscyhkMi5nZXRTY2hlbWFMb2NhdGlvbigpKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0MDE1KCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL1VudXNlZC90ZXN0L01haW4wMDllLnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDEpOwotICAgIFhTRFNjaGVtYURpcmVjdGl2ZSBkMSA9IChYU0RTY2hlbWFEaXJlY3RpdmUpIGxpc3QuZ2V0KDApOwotICAgIGFzc2VydFRydWUoIi4uL0luY2x1ZGUyLnhzZCIuZXF1YWxzKGQxLmdldFNjaGVtYUxvY2F0aW9uKCkpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnQwMTYoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvVW51c2VkL3Rlc3QvTWFpbjAwOWYueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIExpc3QgbGlzdCA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkWFNERGlyZWN0aXZlcygpOwotICAgIGFzc2VydFRydWUobGlzdC5zaXplKCkgPT0gNSk7Ci0gICAgWFNEU2NoZW1hRGlyZWN0aXZlIGQxID0gKFhTRFNjaGVtYURpcmVjdGl2ZSkgbGlzdC5nZXQoMCk7Ci0gICAgYXNzZXJ0VHJ1ZSgiLi4vSW5jbHVkZTEueHNkIi5lcXVhbHMoZDEuZ2V0U2NoZW1hTG9jYXRpb24oKSkpOwotICAgIFhTRFNjaGVtYURpcmVjdGl2ZSBkMiA9IChYU0RTY2hlbWFEaXJlY3RpdmUpIGxpc3QuZ2V0KDEpOwotICAgIGFzc2VydFRydWUoIi4uL0EueHNkIi5lcXVhbHMoZDIuZ2V0U2NoZW1hTG9jYXRpb24oKSkpOwotICAgIFhTRFNjaGVtYURpcmVjdGl2ZSBkMyA9IChYU0RTY2hlbWFEaXJlY3RpdmUpIGxpc3QuZ2V0KDIpOwotICAgIGFzc2VydFRydWUoIi4uL0luY2x1ZGU1LnhzZCIuZXF1YWxzKGQzLmdldFNjaGVtYUxvY2F0aW9uKCkpKTsKLQotICAgIFhTRFNjaGVtYURpcmVjdGl2ZSBkNCA9IChYU0RTY2hlbWFEaXJlY3RpdmUpIGxpc3QuZ2V0KDMpOwotICAgIGFzc2VydFRydWUoIi4uL0luY2x1ZGUyLnhzZCIuZXF1YWxzKGQ0LmdldFNjaGVtYUxvY2F0aW9uKCkpKTsKLSAgICBYU0RTY2hlbWFEaXJlY3RpdmUgZDUgPSAoWFNEU2NoZW1hRGlyZWN0aXZlKSBsaXN0LmdldCg0KTsKLSAgICBhc3NlcnRUcnVlKCIuLi9JbmNsdWRlMy54c2QiLmVxdWFscyhkNS5nZXRTY2hlbWFMb2NhdGlvbigpKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0MDE3KCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL1VudXNlZC90ZXN0L01haW4wMDlnLnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDIpOwotICAgIFhTRFNjaGVtYURpcmVjdGl2ZSBkMSA9IChYU0RTY2hlbWFEaXJlY3RpdmUpIGxpc3QuZ2V0KDApOwotICAgIGFzc2VydFRydWUoIi4uL0luY2x1ZGUxLnhzZCIuZXF1YWxzKGQxLmdldFNjaGVtYUxvY2F0aW9uKCkpKTsKLSAgICBYU0RTY2hlbWFEaXJlY3RpdmUgZDIgPSAoWFNEU2NoZW1hRGlyZWN0aXZlKSBsaXN0LmdldCgxKTsKLSAgICBhc3NlcnRUcnVlKCIuLi9JbmNsdWRlMi54c2QiLmVxdWFscyhkMi5nZXRTY2hlbWFMb2NhdGlvbigpKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0MDE4KCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL1VudXNlZC90ZXN0L01haW4wMDloLnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDMpOwotICAgIFhTRFNjaGVtYURpcmVjdGl2ZSBkMSA9IChYU0RTY2hlbWFEaXJlY3RpdmUpIGxpc3QuZ2V0KDApOwotICAgIGFzc2VydFRydWUoIi4uL0luY2x1ZGUxLnhzZCIuZXF1YWxzKGQxLmdldFNjaGVtYUxvY2F0aW9uKCkpKTsKLSAgICBYU0RTY2hlbWFEaXJlY3RpdmUgZDIgPSAoWFNEU2NoZW1hRGlyZWN0aXZlKSBsaXN0LmdldCgxKTsKLSAgICBhc3NlcnRUcnVlKCIuLi9JbmNsdWRlNS54c2QiLmVxdWFscyhkMi5nZXRTY2hlbWFMb2NhdGlvbigpKSk7Ci0gICAgWFNEU2NoZW1hRGlyZWN0aXZlIGQzID0gKFhTRFNjaGVtYURpcmVjdGl2ZSkgbGlzdC5nZXQoMik7Ci0gICAgYXNzZXJ0VHJ1ZSgiLi4vSW5jbHVkZTMueHNkIi5lcXVhbHMoZDMuZ2V0U2NoZW1hTG9jYXRpb24oKSkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdENpcmN1bGFySW5jbHVkZXMwMDEoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvSW5jbHVkZXMvY2lyY3VsYXIvdGVzdC9NYWluMDAxLnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBMaXN0IGxpc3QgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFhTRERpcmVjdGl2ZXMoKTsKLSAgICBhc3NlcnRUcnVlKGxpc3Quc2l6ZSgpID09IDEpOwotICAgIFhTRFNjaGVtYURpcmVjdGl2ZSBkMSA9IChYU0RTY2hlbWFEaXJlY3RpdmUpIGxpc3QuZ2V0KDApOwotICAgIGFzc2VydFRydWUoIi4uL0luY2x1ZGU0LnhzZCIuZXF1YWxzKGQxLmdldFNjaGVtYUxvY2F0aW9uKCkpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RDaXJjdWxhckluY2x1ZGVzMDAyKCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL0luY2x1ZGVzL2NpcmN1bGFyL3Rlc3QvTWFpbjAwMi54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgTGlzdCBsaXN0ID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRYU0REaXJlY3RpdmVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0LnNpemUoKSA9PSA2KTsKLSAgICBYU0RTY2hlbWFEaXJlY3RpdmUgZDEgPSAoWFNEU2NoZW1hRGlyZWN0aXZlKSBsaXN0LmdldCgwKTsKLSAgICBhc3NlcnRUcnVlKCIuLi9JbmNsdWRlMS54c2QiLmVxdWFscyhkMS5nZXRTY2hlbWFMb2NhdGlvbigpKSk7Ci0gICAgWFNEU2NoZW1hRGlyZWN0aXZlIGQyID0gKFhTRFNjaGVtYURpcmVjdGl2ZSkgbGlzdC5nZXQoMSk7Ci0gICAgYXNzZXJ0VHJ1ZSgiLi4vSW5jbHVkZTIueHNkIi5lcXVhbHMoZDIuZ2V0U2NoZW1hTG9jYXRpb24oKSkpOwotICAgIFhTRFNjaGVtYURpcmVjdGl2ZSBkMyA9IChYU0RTY2hlbWFEaXJlY3RpdmUpIGxpc3QuZ2V0KDIpOwotICAgIGFzc2VydFRydWUoIi4uL0luY2x1ZGUzLnhzZCIuZXF1YWxzKGQzLmdldFNjaGVtYUxvY2F0aW9uKCkpKTsKLSAgICBYU0RTY2hlbWFEaXJlY3RpdmUgZDQgPSAoWFNEU2NoZW1hRGlyZWN0aXZlKSBsaXN0LmdldCgzKTsKLSAgICBhc3NlcnRUcnVlKCIuLi9JbmNsdWRlNC54c2QiLmVxdWFscyhkNC5nZXRTY2hlbWFMb2NhdGlvbigpKSk7Ci0gICAgWFNEU2NoZW1hRGlyZWN0aXZlIGQ1ID0gKFhTRFNjaGVtYURpcmVjdGl2ZSkgbGlzdC5nZXQoNCk7Ci0gICAgYXNzZXJ0VHJ1ZSgiLi4vSW5jbHVkZTUueHNkIi5lcXVhbHMoZDUuZ2V0U2NoZW1hTG9jYXRpb24oKSkpOwotICAgIFhTRFNjaGVtYURpcmVjdGl2ZSBkNiA9IChYU0RTY2hlbWFEaXJlY3RpdmUpIGxpc3QuZ2V0KDUpOwotICAgIGFzc2VydFRydWUoIi4uL0luY2x1ZGU2LnhzZCIuZXF1YWxzKGQ2LmdldFNjaGVtYUxvY2F0aW9uKCkpKTsKLQotICB9Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL3VpL3Rlc3RzL2ludGVybmFsL1hTRFhNTE5TQ2xlYW51cFRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL3VpL3Rlc3RzL2ludGVybmFsL1hTRFhNTE5TQ2xlYW51cFRlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwYzQ3NDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC91aS90ZXN0cy9pbnRlcm5hbC9YU0RYTUxOU0NsZWFudXBUZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjgzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQgamF2YS51dGlsLlNldDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS54c2QuWFNEU2NoZW1hOwotCi1wdWJsaWMgY2xhc3MgWFNEWE1MTlNDbGVhbnVwVGVzdHMgZXh0ZW5kcyBCYXNlVGVzdENhc2UKLXsKLSAgLyoqCi0gICAqIENyZWF0ZSBhIHRlc3RzIHN1aXRlIGZyb20gdGhpcyB0ZXN0IGNsYXNzLgotICAgKiAKLSAgICogQHJldHVybiBBIHRlc3Qgc3VpdGUgY29udGFpbmluZyB0aGlzIHRlc3QgY2xhc3MuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBUZXN0U3VpdGUoWFNEWE1MTlNDbGVhbnVwVGVzdHMuY2xhc3MpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdENsZWFudXAwMDEoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIveG1sbnNDbGVhbnVwL3Rlc3QvTWFpbjAwMS54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgU2V0IHVudXNlZFByZWZpeGVzID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRQcmVmaXhlcygpOwotICAgIFNldCB1c2VkUHJlZml4ZXMgPSBpbXBvcnRNYW5hZ2VyLmdldFVzZWRQcmVmaXhlcygpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMuc2l6ZSgpID09IDApOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLnNpemUoKSA9PSAxNCk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMobnVsbCkpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ0bnMwMSIpKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucygidG5zMDIiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMoInRuczAzIikpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ0bnMwNCIpKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucygidG5zMDUiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMoInRuczA2IikpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ0bnMwNyIpKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucygidG5zMDgiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMoInRuczA5IikpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ0bnMxMCIpKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucygidG5zMTEiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMoInRuczEyIikpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKCJwIikpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdENsZWFudXAwMDIoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIveG1sbnNDbGVhbnVwL3Rlc3QvTWFpbjAwMi54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgU2V0IHVudXNlZFByZWZpeGVzID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRQcmVmaXhlcygpOwotICAgIFNldCB1c2VkUHJlZml4ZXMgPSBpbXBvcnRNYW5hZ2VyLmdldFVzZWRQcmVmaXhlcygpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMuc2l6ZSgpID09IDEpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMuY29udGFpbnMoInRuczA1IikpOwotCi0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuc2l6ZSgpID09IDYpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKG51bGwpKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucygidG5zMDEiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMoInRuczAyIikpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ0bnMwMyIpKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucygidG5zMDQiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMoInAiKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0Q2xlYW51cDAwMygpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi94bWxuc0NsZWFudXAvdGVzdC9NYWluMDAzLnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBTZXQgdW51c2VkUHJlZml4ZXMgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFByZWZpeGVzKCk7Ci0gICAgU2V0IHVzZWRQcmVmaXhlcyA9IGltcG9ydE1hbmFnZXIuZ2V0VXNlZFByZWZpeGVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRQcmVmaXhlcy5zaXplKCkgPT0gMCk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuc2l6ZSgpID09IDE0KTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucygieHNkIikpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ0bnMwMSIpKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucygidG5zMDIiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMoInRuczAzIikpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ0bnMwNCIpKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucygidG5zMDUiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMoInRuczA2IikpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ0bnMwNyIpKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucygidG5zMDgiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMoInRuczA5IikpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ0bnMxMCIpKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucygidG5zMTEiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMoInRuczEyIikpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKCJwIikpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdENsZWFudXAwMDQoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIveG1sbnNDbGVhbnVwL3Rlc3QvTWFpbjAwNC54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgU2V0IHVudXNlZFByZWZpeGVzID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRQcmVmaXhlcygpOwotICAgIFNldCB1c2VkUHJlZml4ZXMgPSBpbXBvcnRNYW5hZ2VyLmdldFVzZWRQcmVmaXhlcygpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMuc2l6ZSgpID09IDEyKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ0bnMwMiIpKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ0bnMwMyIpKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ0bnMwNCIpKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ0bnMwNSIpKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ0bnMwNiIpKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ0bnMwNyIpKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ0bnMwOCIpKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ0bnMwOSIpKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ0bnMxMCIpKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ0bnMxMSIpKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ0bnMxMiIpKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFByZWZpeGVzLmNvbnRhaW5zKG51bGwpKTsKLQotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLnNpemUoKSA9PSAzKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucygieHNkIikpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ0bnMwMSIpKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucygicCIpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRlc3RDbGVhbnVwMDA1KCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL3htbG5zQ2xlYW51cC90ZXN0L01haW4wMDUueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIFNldCB1bnVzZWRQcmVmaXhlcyA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkUHJlZml4ZXMoKTsKLSAgICBTZXQgdXNlZFByZWZpeGVzID0gaW1wb3J0TWFuYWdlci5nZXRVc2VkUHJlZml4ZXMoKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFByZWZpeGVzLnNpemUoKSA9PSAxMik7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRQcmVmaXhlcy5jb250YWlucygidG5zMDEiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRQcmVmaXhlcy5jb250YWlucygidG5zMDIiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRQcmVmaXhlcy5jb250YWlucygidG5zMDMiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRQcmVmaXhlcy5jb250YWlucygidG5zMDQiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRQcmVmaXhlcy5jb250YWlucygidG5zMDUiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRQcmVmaXhlcy5jb250YWlucygidG5zMDYiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRQcmVmaXhlcy5jb250YWlucygidG5zMDciKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRQcmVmaXhlcy5jb250YWlucygidG5zMDgiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRQcmVmaXhlcy5jb250YWlucygidG5zMDkiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRQcmVmaXhlcy5jb250YWlucygidG5zMTAiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRQcmVmaXhlcy5jb250YWlucygidG5zMTEiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRQcmVmaXhlcy5jb250YWlucygidG5zMTIiKSk7Ci0KLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5zaXplKCkgPT0gMyk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMoInhzZCIpKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucygicCIpKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucyhudWxsKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXN0Q2xlYW51cDAwNigpCi0gIHsKLSAgICAvLyBOdWxsIHRhcmdldCBuYW1lc3BhY2Ugc2NoZW1hCi0KLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi94bWxuc0NsZWFudXAvdGVzdC9NYWluMDA2LnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBTZXQgdW51c2VkUHJlZml4ZXMgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFByZWZpeGVzKCk7Ci0gICAgU2V0IHVzZWRQcmVmaXhlcyA9IGltcG9ydE1hbmFnZXIuZ2V0VXNlZFByZWZpeGVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRQcmVmaXhlcy5zaXplKCkgPT0gMSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRQcmVmaXhlcy5jb250YWlucygidG5zMDEiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuc2l6ZSgpID09IDMpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ4c2QiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMoInAiKSk7Ci0gICAgLy8gVGhpcyB3YXMgYWRkZWQgc2luY2UgcmVmZXJlbmNlcyB3ZXJlIG1hZGUgd2l0aG91dCBhIHByZWZpeAotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKG51bGwpKTsKLQotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdENsZWFudXAwMDcoKQotICB7Ci0gICAgLy8gVGVzdCBVbnVzZWQgTnVsbCBQcmVmaXgKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi94bWxuc0NsZWFudXAvdGVzdC9NYWluMDA3LnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBTZXQgdW51c2VkUHJlZml4ZXMgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFByZWZpeGVzKCk7Ci0gICAgU2V0IHVzZWRQcmVmaXhlcyA9IGltcG9ydE1hbmFnZXIuZ2V0VXNlZFByZWZpeGVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRQcmVmaXhlcy5zaXplKCkgPT0gMSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRQcmVmaXhlcy5jb250YWlucyhudWxsKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuc2l6ZSgpID09IDMpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ4c2QiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMoInAiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMoInRucyIpKTsKLQotICB9Ci0KLSAgcHVibGljIHZvaWQgdGVzdENsZWFudXAwMDgoKQotICB7Ci0gICAgLy8gVGVzdCBVc2VkIE51bGwgUHJlZml4Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIveG1sbnNDbGVhbnVwL3Rlc3QvTWFpbjAwOC54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgU2V0IHVudXNlZFByZWZpeGVzID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRQcmVmaXhlcygpOwotICAgIFNldCB1c2VkUHJlZml4ZXMgPSBpbXBvcnRNYW5hZ2VyLmdldFVzZWRQcmVmaXhlcygpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMuc2l6ZSgpID09IDEpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMuY29udGFpbnMoInAiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuc2l6ZSgpID09IDMpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ4c2QiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMobnVsbCkpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ0bnMiKSk7Ci0gIH0KLQotICAvLyBVc2luZyB0aGUgdGVzdCBYU0RzIGZyb20gdGhlIFVudXNlZCBmb2xkZXIKLSAgcHVibGljIHZvaWQgdGVzdENsZWFudXAwMDkoKQotICB7Ci0gICAgWFNEU2NoZW1hIHNjaGVtYSA9IGdldFhTRFNjaGVtYShUQ19ST09UX0ZPTERFUiArICIvVW51c2VkL3Rlc3QvTWFpbjAwMS54c2QiKTsKLSAgICBpbXBvcnRNYW5hZ2VyLnBlcmZvcm1SZW1vdmFsKHNjaGVtYSk7Ci0gICAgU2V0IHVudXNlZFByZWZpeGVzID0gaW1wb3J0TWFuYWdlci5nZXRVbnVzZWRQcmVmaXhlcygpOwotICAgIFNldCB1c2VkUHJlZml4ZXMgPSBpbXBvcnRNYW5hZ2VyLmdldFVzZWRQcmVmaXhlcygpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMuc2l6ZSgpID09IDApOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLnNpemUoKSA9PSAyKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucyhudWxsKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMoInRucyIpKTsKLSAgfQotCi0gIC8vIFVzaW5nIHRoZSB0ZXN0IFhTRHMgZnJvbSB0aGUgVW51c2VkIGZvbGRlcgotICBwdWJsaWMgdm9pZCB0ZXN0Q2xlYW51cDAxMCgpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9VbnVzZWQvdGVzdC9NYWluMDAyLnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBTZXQgdW51c2VkUHJlZml4ZXMgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFByZWZpeGVzKCk7Ci0gICAgU2V0IHVzZWRQcmVmaXhlcyA9IGltcG9ydE1hbmFnZXIuZ2V0VXNlZFByZWZpeGVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRQcmVmaXhlcy5zaXplKCkgPT0gMSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRQcmVmaXhlcy5jb250YWlucygiaW1wIikpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLnNpemUoKSA9PSAyKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucyhudWxsKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMoInRucyIpKTsKLSAgfQotCi0gIC8vIFVzaW5nIHRoZSB0ZXN0IFhTRHMgZnJvbSB0aGUgVW51c2VkIGZvbGRlcgotICBwdWJsaWMgdm9pZCB0ZXN0Q2xlYW51cDAxMSgpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9VbnVzZWQvdGVzdC9NYWluMDAzLnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBTZXQgdW51c2VkUHJlZml4ZXMgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFByZWZpeGVzKCk7Ci0gICAgU2V0IHVzZWRQcmVmaXhlcyA9IGltcG9ydE1hbmFnZXIuZ2V0VXNlZFByZWZpeGVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRQcmVmaXhlcy5zaXplKCkgPT0gMSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRQcmVmaXhlcy5jb250YWlucygiaW1wIikpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLnNpemUoKSA9PSAyKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucyhudWxsKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMoInRucyIpKTsKLSAgfQotCi0gIC8vIFVzaW5nIHRoZSB0ZXN0IFhTRHMgZnJvbSB0aGUgVW51c2VkIGZvbGRlcgotICBwdWJsaWMgdm9pZCB0ZXN0Q2xlYW51cDAxMigpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9VbnVzZWQvdGVzdC9NYWluMDA0LnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBTZXQgdW51c2VkUHJlZml4ZXMgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFByZWZpeGVzKCk7Ci0gICAgU2V0IHVzZWRQcmVmaXhlcyA9IGltcG9ydE1hbmFnZXIuZ2V0VXNlZFByZWZpeGVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRQcmVmaXhlcy5zaXplKCkgPT0gMSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRQcmVmaXhlcy5jb250YWlucygiaW1wIikpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLnNpemUoKSA9PSAyKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucyhudWxsKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMoInRucyIpKTsKLSAgfQotCi0gIC8vIFVzaW5nIHRoZSB0ZXN0IFhTRHMgZnJvbSB0aGUgVW51c2VkIGZvbGRlcgotICBwdWJsaWMgdm9pZCB0ZXN0Q2xlYW51cDAxMygpCi0gIHsKLSAgICBYU0RTY2hlbWEgc2NoZW1hID0gZ2V0WFNEU2NoZW1hKFRDX1JPT1RfRk9MREVSICsgIi9VbnVzZWQvdGVzdC9NYWluMDA1LnhzZCIpOwotICAgIGltcG9ydE1hbmFnZXIucGVyZm9ybVJlbW92YWwoc2NoZW1hKTsKLSAgICBTZXQgdW51c2VkUHJlZml4ZXMgPSBpbXBvcnRNYW5hZ2VyLmdldFVudXNlZFByZWZpeGVzKCk7Ci0gICAgU2V0IHVzZWRQcmVmaXhlcyA9IGltcG9ydE1hbmFnZXIuZ2V0VXNlZFByZWZpeGVzKCk7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRQcmVmaXhlcy5zaXplKCkgPT0gMik7Ci0gICAgYXNzZXJ0VHJ1ZSh1bnVzZWRQcmVmaXhlcy5jb250YWlucygiaW1wIikpOwotICAgIGFzc2VydFRydWUodW51c2VkUHJlZml4ZXMuY29udGFpbnMoImltcDQiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuc2l6ZSgpID09IDIpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKG51bGwpKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5jb250YWlucygidG5zIikpOwotICB9Ci0KLSAgLy8gVXNpbmcgdGhlIHRlc3QgWFNEcyBmcm9tIHRoZSBVbnVzZWQgZm9sZGVyCi0gIHB1YmxpYyB2b2lkIHRlc3RDbGVhbnVwMDE0KCkKLSAgewotICAgIFhTRFNjaGVtYSBzY2hlbWEgPSBnZXRYU0RTY2hlbWEoVENfUk9PVF9GT0xERVIgKyAiL1VudXNlZC90ZXN0L01haW4wMDYueHNkIik7Ci0gICAgaW1wb3J0TWFuYWdlci5wZXJmb3JtUmVtb3ZhbChzY2hlbWEpOwotICAgIFNldCB1bnVzZWRQcmVmaXhlcyA9IGltcG9ydE1hbmFnZXIuZ2V0VW51c2VkUHJlZml4ZXMoKTsKLSAgICBTZXQgdXNlZFByZWZpeGVzID0gaW1wb3J0TWFuYWdlci5nZXRVc2VkUHJlZml4ZXMoKTsKLSAgICBhc3NlcnRUcnVlKHVudXNlZFByZWZpeGVzLnNpemUoKSA9PSAwKTsKLSAgICBhc3NlcnRUcnVlKHVzZWRQcmVmaXhlcy5zaXplKCkgPT0gMyk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMobnVsbCkpOwotICAgIGFzc2VydFRydWUodXNlZFByZWZpeGVzLmNvbnRhaW5zKCJ0bnMiKSk7Ci0gICAgYXNzZXJ0VHJ1ZSh1c2VkUHJlZml4ZXMuY29udGFpbnMoInAiKSk7Ci0gIH0KLQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3QueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMjIyNDc3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMTQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLQotPHByb2plY3QKLSAgICBuYW1lPSJ0ZXN0c3VpdGUiCi0gICAgZGVmYXVsdD0icnVuIgotICAgIGJhc2VkaXI9Ii4iPgotICAgIAotICAgIDwhLS0gVGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIHNob3VsZCBiZSBwYXNzZWQgaW50byB0aGlzIHNjcmlwdCAtLT4KLSAgICA8IS0tICR7ZWNsaXBzZS1ob21lfSAgIC0tPgotICAgIDwhLS0gJHtidWlsZERpcmVjdG9yeX0gIC0tPgotICAgIDwhLS0gJHtidWlsZExhYmVsfSAgICAgICAgLS0+Ci0KLSAgICA8IS0tIHNob3VsZCBiZSBsaXR0bGUgbmVlZCB0byBjaGFuZ2Ugd2hhdCdzIGFib3ZlICAtLT4KLQk8cHJvcGVydHkKLQkJbmFtZT0icGx1Z2luLW5hbWUiCi0JCXZhbHVlPSJvcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzIiAvPgotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJjbGFzc25hbWUiCi0gICAgICAgIHZhbHVlPSJvcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzLmludGVybmFsLkFsbFhTRFVJVGVzdHMiIC8+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9InRlc3RUeXBlIgotICAgICAgICB2YWx1ZT0idWktdGVzdCIgLz4KLQotICAgIDwhLS0gc2hvdWxkIGJlIGxpdHRsZSBuZWVkIHRvIGNoYW5nZSB3aGF0J3MgYmVsb3cgLS0+Ci0KLSAgICA8ZWNobyBtZXNzYWdlPSJiYXNlZGlyOiAke2Jhc2VkaXJ9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9ImVjbGlwc2UtaG9tZTogJHtlY2xpcHNlLWhvbWV9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9ImJ1aWxkRGlyZWN0b3J5OiAke2J1aWxkRGlyZWN0b3J5fSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJwbHVnaW4tbmFtZTogJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iY2xhc3NuYW1lOiAke2NsYXNzbmFtZX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0idGVzdFR5cGUgJHt0ZXN0VHlwZX0iIC8+Ci0KLQotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJsaWJyYXJ5LWZpbGUiCi0gICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy9vcmcuZWNsaXBzZS50ZXN0XzMuMS4wL2xpYnJhcnkueG1sIiAvPgotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJ3b3Jrc3BhY2UiCi0gICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vanVuaXR3b3Jrc3BhY2VzLyR7cGx1Z2luLW5hbWV9IiAvPgotICAgICAgICAKLSAgICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGFsbCBpbml0aWFsaXphdGlvbiBjb2RlIHRoYXQgbmVlZHMgdG8gYmUgZG9uZSBmb3IgLS0+Ci0gICAgPCEtLSBhbGwgdGVzdHMgdGhhdCBhcmUgdG8gYmUgcnVuLiBJbml0aWFsaXphdGlvbiBmb3IgaW5kaXZpZHVhbCB0ZXN0cyAtLT4KLSAgICA8IS0tIHNob3VsZCBiZSBkb25lIHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgc3VpdGUgdGFyZ2V0LiAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9ImluaXQiPgotICAgICAgICA8dHN0YW1wIC8+Ci0gICAgICAgIDxkZWxldGU+Ci0gICAgICAgICAgICA8ZmlsZXNldAotICAgICAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9IgotICAgICAgICAgICAgICAgIGluY2x1ZGVzPSIke3BsdWdpbi1uYW1lfS4qeG1sIiAvPgotICAgICAgICA8L2RlbGV0ZT4KLSAgICAgICAgPCEtLSBtYWtlIGRpcmVjdG9yeSwgaW4gY2FzZSBwYXRoIGRvZXNuJ3QgZXhpc3QgeWV0IC0tPgotICAgICAgICA8bWtkaXIgZGlyPSIke3dvcmtzcGFjZX0iIC8+Ci0gICAgICAgIDwhLS0gIGJ1dCBkZWxldGUgdG8gbWFrZSBzdXJlIGZyZXNoIGNvbnRlbnRzLS0+Ci0gICAgICAgIDxkZWxldGUKLSAgICAgICAgICAgIGRpcj0iJHt3b3Jrc3BhY2V9IgotICAgICAgICAgICAgcXVpZXQ9InRydWUiIC8+Ci0KLSAgICA8L3RhcmdldD4KLQotICAgIDwhLS0gVGhpcyB0YXJnZXQgZGVmaW5lcyB0aGUgdGVzdHMgdGhhdCBuZWVkIHRvIGJlIHJ1bi4gLS0+Ci0gICAgPHRhcmdldCBuYW1lPSJzdWl0ZSI+Ci0KLSAgICAgICAgPGFudAotICAgICAgICAgICAgdGFyZ2V0PSIke3Rlc3RUeXBlfSIKLSAgICAgICAgICAgIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIKLSAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImRhdGEtZGlyIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3dvcmtzcGFjZX0iIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJwbHVnaW4tbmFtZSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJjbGFzc25hbWUiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7Y2xhc3NuYW1lfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9InBsdWdpbi1wYXRoIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy8ke3BsdWdpbi1uYW1lfSIgLz4KLSAgICAgICAgPC9hbnQ+Ci0KLSAgICAgICAgPGNvcHkKLSAgICAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIKLSAgICAgICAgICAgIGZpbGU9IiR7d29ya3NwYWNlfS8ubWV0YWRhdGEvLmxvZyIKLSAgICAgICAgICAgIHRvZmlsZT0iJHtidWlsZERpcmVjdG9yeX0vJHtidWlsZExhYmVsfS90ZXN0UmVzdWx0cy9jb25zb2xlbG9ncy8ke3BsdWdpbi1uYW1lfS5jb25zb2xlbG9nLnR4dCIgLz4KLQotICAgIDwvdGFyZ2V0PgotCi0gICAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBjb2RlIHRvIGNsZWFudXAgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQgYWZ0ZXIgLS0+Ci0gICAgPCEtLSBhZnRlciBhbGwgb2YgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4uIFlvdSBjYW4gdXNlIHRoaXMgdGFyZ2V0IHRvIC0tPgotICAgIDwhLS0gZGVsZXRlIHRlbXBvcmFyeSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBjcmVhdGVkLiAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9ImNsZWFudXAiPgotICAgICAgICA8IS0tIHVzdWFsbHkgbm8gbmVlZCB0byBkZWxldGUgd29ya3NwYWNlIHVudGlsIG5leHQgcnVuLCBhbmQgbGVhdmluZyBpdCBhbGxvd3MgaW5zcGVjdGlvbiAtLT4KLSAgICAgICAgPCEtLSA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIgLz4gLS0+Ci0gICAgPC90YXJnZXQ+Ci0KLSAgICA8IS0tIFRoaXMgdGFyZ2V0IHJ1bnMgdGhlIHRlc3Qgc3VpdGUuIEFueSBhY3Rpb25zIHRoYXQgbmVlZCB0byBoYXBwZW4gLS0+Ci0gICAgPCEtLSBhZnRlciBhbGwgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4gc2hvdWxkIGdvIGhlcmUuIC0tPgotICAgIDx0YXJnZXQKLSAgICAgICAgbmFtZT0icnVuIgotICAgICAgICBkZXBlbmRzPSJpbml0LHN1aXRlLGNsZWFudXAiPgotICAgICAgICA8YW50Ci0gICAgICAgICAgICB0YXJnZXQ9ImNvbGxlY3QiCi0gICAgICAgICAgICBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iCi0gICAgICAgICAgICBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJpbmNsdWRlcyIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0uKnhtbCIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9Im91dHB1dC1maWxlIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfS54bWwiIC8+Ci0gICAgICAgIDwvYW50PgotICAgIDwvdGFyZ2V0PgotCi08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9JbmNsdWRlMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9JbmNsdWRlMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyYmZjMmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvSW5jbHVkZTEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiAKLSAgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSW1wQ1QxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyIgbWF4T2NjdXJzPSIyNSI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0KLSAgICA8eHNkOmdyb3VwIG5hbWU9IkltcEdyMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmdyb3VwPgotCi0gICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0iSW1wQXR0cjEiIHR5cGU9IkltcFNUMSI+PC94c2Q6YXR0cmlidXRlPgotCi0gICAgPHhzZDphdHRyaWJ1dGVHcm91cCBuYW1lPSJJbXBBdHRyR3IxIj4KLSAgICAJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXQxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0gICAgPC94c2Q6YXR0cmlidXRlR3JvdXA+Ci0KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iSW1wRWxlbTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iSW1wU1QxIj4KLSAgICAJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkltcFNUMiI+Ci0gICAgCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSW1wQ1QyIj4KLSAgICAJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXR0cjEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUF0dHJpYnV0ZS9VbnVzZWQvTWFpbi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUF0dHJpYnV0ZS9VbnVzZWQvTWFpbi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5MjkyNWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlBdHRyaWJ1dGUvVW51c2VkL01haW4ueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0JPHhzZDplbGVtZW50IG5hbWU9Ik1haW5FbGVtZW50MSIgdHlwZT0iTWFpbkNUIj48L3hzZDplbGVtZW50PgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QiPgotCQk8eHNkOmF0dHJpYnV0ZSByZWY9Ik1haW5BdHRyaWJ1dGUiPjwveHNkOmF0dHJpYnV0ZT4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLQotICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9Ik1haW5BdHRyaWJ1dGUiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUF0dHJpYnV0ZS9Vc2VkL01haW4ueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlBdHRyaWJ1dGUvVXNlZC9NYWluLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2QxNmMzMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUF0dHJpYnV0ZS9Vc2VkL01haW4ueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0JPHhzZDplbGVtZW50IG5hbWU9Ik1haW5FbGVtZW50MSIgdHlwZT0iTWFpbkNUIj48L3hzZDplbGVtZW50PgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QiPgotCQk8eHNkOmF0dHJpYnV0ZSByZWY9IkltcEF0dHIxIj48L3hzZDphdHRyaWJ1dGU+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlBdHRyaWJ1dGVHcm91cC9VbnVzZWQvTWFpbi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUF0dHJpYnV0ZUdyb3VwL1VudXNlZC9NYWluLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTU2MmRhMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUF0dHJpYnV0ZUdyb3VwL1VudXNlZC9NYWluLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCTx4c2Q6ZWxlbWVudCBuYW1lPSJNYWluRWxlbWVudDEiIHR5cGU9Ik1haW5DVCI+PC94c2Q6ZWxlbWVudD4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUIj4KLSAgICAgICAgPHhzZDphdHRyaWJ1dGVHcm91cCByZWY9Ik1haW5BdHRyaWJ1dGVHcm91cDEiPjwveHNkOmF0dHJpYnV0ZUdyb3VwPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotCi0JPHhzZDphdHRyaWJ1dGVHcm91cCBuYW1lPSJNYWluQXR0cmlidXRlR3JvdXAxIj4KLQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXRyMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotCQk8eHNkOmFueUF0dHJpYnV0ZT48L3hzZDphbnlBdHRyaWJ1dGU+Ci0JPC94c2Q6YXR0cmlidXRlR3JvdXA+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlBdHRyaWJ1dGVHcm91cC9Vc2VkL01haW4ueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlBdHRyaWJ1dGVHcm91cC9Vc2VkL01haW4ueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMzlkMjRhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5QXR0cmlidXRlR3JvdXAvVXNlZC9NYWluLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCTx4c2Q6ZWxlbWVudCBuYW1lPSJNYWluRWxlbWVudDEiIHR5cGU9Ik1haW5DVCI+PC94c2Q6ZWxlbWVudD4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUIj4KLSAgICAgICAgPHhzZDphdHRyaWJ1dGVHcm91cCByZWY9IkltcEF0dHJHcjEiPjwveHNkOmF0dHJpYnV0ZUdyb3VwPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotCi0JPHhzZDphdHRyaWJ1dGVHcm91cCBuYW1lPSJNYWluQXR0cmlidXRlR3JvdXAxIj4KLQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXRyMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotCQk8eHNkOmFueUF0dHJpYnV0ZT48L3hzZDphbnlBdHRyaWJ1dGU+Ci0JPC94c2Q6YXR0cmlidXRlR3JvdXA+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9VbnVzZWQvTWFpbi1CYXNlVHlwZTEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9VbnVzZWQvTWFpbi1CYXNlVHlwZTEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MzlhMWFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVW51c2VkL01haW4tQmFzZVR5cGUxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotICAgIAotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMSI+Ci0gICAgCTx4c2Q6Y29tcGxleENvbnRlbnQ+Ci0gICAgCQk8eHNkOmV4dGVuc2lvbiBiYXNlPSJNYWluQ1QyIj48L3hzZDpleHRlbnNpb24+Ci0gICAgCTwveHNkOmNvbXBsZXhDb250ZW50PgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QyIj48L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VudXNlZC9NYWluLUJhc2VUeXBlMi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VudXNlZC9NYWluLUJhc2VUeXBlMi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczZTI4MjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9VbnVzZWQvTWFpbi1CYXNlVHlwZTIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0gICAgCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QxIj4KLSAgICAJPHhzZDpjb21wbGV4Q29udGVudD4KLSAgICAJCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0iTWFpbkNUMiI+Ci0gICAgCQkJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCQkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiBtaW5PY2N1cnM9IjEiPgotICAgIAkJCQkJPHhzZDpzaW1wbGVUeXBlPgotICAgIAkJCQkJCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0gICAgCQkJCQkJCTx4c2Q6bWluTGVuZ3RoIHZhbHVlPSIxIj48L3hzZDptaW5MZW5ndGg+Ci0gICAgCQkJCQkJCTx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIxMCI+PC94c2Q6bWF4TGVuZ3RoPgotICAgIAkJCQkJCTwveHNkOnJlc3RyaWN0aW9uPgotICAgIAkJCQkJPC94c2Q6c2ltcGxlVHlwZT4KLSAgICAJCQkJPC94c2Q6ZWxlbWVudD4KLSAgICAJCQk8L3hzZDpzZXF1ZW5jZT4KLSAgICAJCTwveHNkOnJlc3RyaWN0aW9uPgotICAgIAk8L3hzZDpjb21wbGV4Q29udGVudD4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMiI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVW51c2VkL01haW4tQmFzZVR5cGUzLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVW51c2VkL01haW4tQmFzZVR5cGUzLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzg3NjlmYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VudXNlZC9NYWluLUJhc2VUeXBlMy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJNYWluRWxlbWVudCI+Ci0gICAgCTx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgCQk8eHNkOnNlcXVlbmNlPgotICAgIAkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlbGVtMSI+Ci0gICAgCQkJCTx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgCQkJCQk8eHNkOnNlcXVlbmNlPgotICAgIAkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlbGVtMSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAk8eHNkOmNvbXBsZXhDb250ZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCTx4c2Q6ZXh0ZW5zaW9uIGJhc2U9Ik1haW5DVDEiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQk8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJPHhzZDplbGVtZW50Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJbmFtZT0iZWxlbTEiIHR5cGU9InhzZDpzdHJpbmciPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJPC94c2Q6ZXh0ZW5zaW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJPC94c2Q6Y29tcGxleENvbnRlbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIAkJCQkJCTwveHNkOmVsZW1lbnQ+Ci0gICAgCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLSAgICAJCQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgCQkJPC94c2Q6ZWxlbWVudD4KLSAgICAJCTwveHNkOnNlcXVlbmNlPgotICAgIAk8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8L3hzZDplbGVtZW50PgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QxIj48L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VudXNlZC9NYWluLUdsb2JhbEVsZW1lbnRUeXBlLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVW51c2VkL01haW4tR2xvYmFsRWxlbWVudFR5cGUueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNGE2MTY3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVW51c2VkL01haW4tR2xvYmFsRWxlbWVudFR5cGUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTWFpbkVsZW1lbnQxIiB0eXBlPSJNYWluQ1QxIj48L3hzZDplbGVtZW50PgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QxIj48L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VudXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVW51c2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjBmZTJlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVW51c2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImxvY2FsRWxlbTEiIHR5cGU9Ik1haW5DVDIiPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QyIj48L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VudXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVW51c2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZDdmZWE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVW51c2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOmdyb3VwIG5hbWU9Ik1haW5Hcm91cDEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImxvY2FsRWxlbTEiIHR5cGU9Ik1haW5DVDEiPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmdyb3VwPgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QxIj48L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1CYXNlVHlwZTEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tQmFzZVR5cGUxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTNlODQyMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1CYXNlVHlwZTEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0gICAgCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QxIj4KLSAgICAJPHhzZDpjb21wbGV4Q29udGVudD4KLSAgICAJCTx4c2Q6ZXh0ZW5zaW9uIGJhc2U9IkltcENUMSI+PC94c2Q6ZXh0ZW5zaW9uPgotICAgIAk8L3hzZDpjb21wbGV4Q29udGVudD4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1CYXNlVHlwZTIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tQmFzZVR5cGUyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2NkMmExZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1CYXNlVHlwZTIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0gICAgCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QxIj4KLSAgICAJPHhzZDpjb21wbGV4Q29udGVudD4KLSAgICAJCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0iSW1wQ1QxIj4KLSAgICAJCQk8eHNkOnNlcXVlbmNlPgotICAgIAkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIG1pbk9jY3Vycz0iMSI+Ci0gICAgCQkJCQk8eHNkOnNpbXBsZVR5cGU+Ci0gICAgCQkJCQkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLSAgICAJCQkJCQkJPHhzZDptaW5MZW5ndGggdmFsdWU9IjEiPjwveHNkOm1pbkxlbmd0aD4KLSAgICAJCQkJCQkJPHhzZDptYXhMZW5ndGggdmFsdWU9IjEwIj48L3hzZDptYXhMZW5ndGg+Ci0gICAgCQkJCQkJPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgCQkJCQk8L3hzZDpzaW1wbGVUeXBlPgotICAgIAkJCQk8L3hzZDplbGVtZW50PgotICAgIAkJCTwveHNkOnNlcXVlbmNlPgotICAgIAkJPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgCTwveHNkOmNvbXBsZXhDb250ZW50PgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUJhc2VUeXBlMy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1CYXNlVHlwZTMueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ODU0Nzc1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUJhc2VUeXBlMy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJNYWluRWxlbWVudCI+Ci0gICAgCTx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgCQk8eHNkOnNlcXVlbmNlPgotICAgIAkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlbGVtMSI+Ci0gICAgCQkJCTx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgCQkJCQk8eHNkOnNlcXVlbmNlPgotICAgIAkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlbGVtMSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAk8eHNkOmNvbXBsZXhDb250ZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCTx4c2Q6ZXh0ZW5zaW9uIGJhc2U9IkltcENUMSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCTx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQk8eHNkOmVsZW1lbnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQluYW1lPSJlbGVtMSIgdHlwZT0ieHNkOnN0cmluZyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQk8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQk8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQk8L3hzZDpleHRlbnNpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAk8L3hzZDpjb21wbGV4Q29udGVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgCQkJCQkJPC94c2Q6ZWxlbWVudD4KLSAgICAJCQkJCTwveHNkOnNlcXVlbmNlPgotICAgIAkJCQk8L3hzZDpjb21wbGV4VHlwZT48L3hzZDplbGVtZW50PgotICAgIAkJPC94c2Q6c2VxdWVuY2U+Ci0gICAgCTwveHNkOmNvbXBsZXhUeXBlPgotICAgIDwveHNkOmVsZW1lbnQ+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tR2xvYmFsRWxlbWVudFR5cGUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tR2xvYmFsRWxlbWVudFR5cGUueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNDIyNzRhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUdsb2JhbEVsZW1lbnRUeXBlLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTWFpbkVsZW1lbnQxIiB0eXBlPSJJbXBDVDEiPjwveHNkOmVsZW1lbnQ+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZWQ2NWJlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJsb2NhbEVsZW0xIiB0eXBlPSJJbXBDVDEiPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjIyYjVhYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotICAgIDx4c2Q6Z3JvdXAgbmFtZT0iTWFpbkdyb3VwMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0ibG9jYWxFbGVtMSIgdHlwZT0iSW1wQ1QxIj48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpncm91cD4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUVsZW1lbnQvVW51c2VkL01haW4tQ1QueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlFbGVtZW50L1VudXNlZC9NYWluLUNULnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmVlNGQyNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUVsZW1lbnQvVW51c2VkL01haW4tQ1QueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCByZWY9Ik1haW5FbGVtZW50MSI+PC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTWFpbkVsZW1lbnQxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5RWxlbWVudC9VbnVzZWQvTWFpbi1Hcm91cC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUVsZW1lbnQvVW51c2VkL01haW4tR3JvdXAueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNDk3YjAxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5RWxlbWVudC9VbnVzZWQvTWFpbi1Hcm91cC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDpncm91cCBuYW1lPSJNYWluR3JvdXAxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJsb2NhbEVsZW0xIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotICAgICAgICAgICAgPHhzZDpjaG9pY2U+Ci0gICAgCQkJPHhzZDplbGVtZW50IG5hbWU9ImxvY2FsRWxlbTIiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0gICAgCQkJPHhzZDplbGVtZW50IHJlZj0iTWFpbkVsZW1lbnQxIj48L3hzZDplbGVtZW50PgotICAgIAkJPC94c2Q6Y2hvaWNlPgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpncm91cD4KLQotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJNYWluRWxlbWVudDEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlFbGVtZW50L1VzZWQvTWFpbi1DVC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUVsZW1lbnQvVXNlZC9NYWluLUNULnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGZlNDNmMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUVsZW1lbnQvVXNlZC9NYWluLUNULnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVCI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgcmVmPSJJbXBFbGVtMSI+PC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlFbGVtZW50L1VzZWQvTWFpbi1Hcm91cC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUVsZW1lbnQvVXNlZC9NYWluLUdyb3VwLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGY2NDgyYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUVsZW1lbnQvVXNlZC9NYWluLUdyb3VwLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOmdyb3VwIG5hbWU9Ik1haW5Hcm91cDEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImxvY2FsRWxlbTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICA8eHNkOmNob2ljZT4KLSAgICAJCQk8eHNkOmVsZW1lbnQgbmFtZT0ibG9jYWxFbGVtMiIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLSAgICAJCQk8eHNkOmVsZW1lbnQgcmVmPSJJbXBFbGVtMSI+PC94c2Q6ZWxlbWVudD4KLSAgICAJCTwveHNkOmNob2ljZT4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Z3JvdXA+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlHcm91cERlZmluaXRpb24vVW51c2VkL01haW4tQ1QueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlHcm91cERlZmluaXRpb24vVW51c2VkL01haW4tQ1QueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDU1ZDdlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5R3JvdXBEZWZpbml0aW9uL1VudXNlZC9NYWluLUNULnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVCI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmdyb3VwIHJlZj0iTWFpbkdyb3VwRGVmaW5pdGlvbjEiPjwveHNkOmdyb3VwPgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLQotCTx4c2Q6Z3JvdXAgbmFtZT0iTWFpbkdyb3VwRGVmaW5pdGlvbjEiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IG5hbWU9ImdyRWxlbTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmdyb3VwPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5R3JvdXBEZWZpbml0aW9uL1VudXNlZC9NYWluLUdyb3VwLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5R3JvdXBEZWZpbml0aW9uL1VudXNlZC9NYWluLUdyb3VwLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGQ3NDkxOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUdyb3VwRGVmaW5pdGlvbi9VbnVzZWQvTWFpbi1Hcm91cC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0JPHhzZDpncm91cCBuYW1lPSJNYWluR3JvdXBEZWZpbml0aW9uMSI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iZ3JFbGVtMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Z3JvdXA+Ci0KLQk8eHNkOmdyb3VwIG5hbWU9Ik1haW5Hcm91cERlZmluaXRpb24yIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJnckVsZW0xIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCQkJPHhzZDpncm91cCByZWY9Ik1haW5Hcm91cERlZmluaXRpb24xIj48L3hzZDpncm91cD4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Z3JvdXA+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlHcm91cERlZmluaXRpb24vVXNlZC9NYWluLUNULnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5R3JvdXBEZWZpbml0aW9uL1VzZWQvTWFpbi1DVC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzMGZhNWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlHcm91cERlZmluaXRpb24vVXNlZC9NYWluLUNULnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVCI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmdyb3VwIHJlZj0iSW1wR3IxIj48L3hzZDpncm91cD4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLQk8eHNkOmdyb3VwIG5hbWU9Ik1haW5Hcm91cERlZmluaXRpb24xIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJnckVsZW0xIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpncm91cD4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUdyb3VwRGVmaW5pdGlvbi9Vc2VkL01haW4tR3JvdXAueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlHcm91cERlZmluaXRpb24vVXNlZC9NYWluLUdyb3VwLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDJiYWE2YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeUdyb3VwRGVmaW5pdGlvbi9Vc2VkL01haW4tR3JvdXAueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotCTx4c2Q6Z3JvdXAgbmFtZT0iTWFpbkdyb3VwRGVmaW5pdGlvbjEiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IG5hbWU9ImdyRWxlbTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmdyb3VwPgotCi0JPHhzZDpncm91cCBuYW1lPSJNYWluR3JvdXBEZWZpbml0aW9uMiI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iZ3JFbGVtMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQkJCTx4c2Q6Z3JvdXAgcmVmPSJJbXBHcjEiPjwveHNkOmdyb3VwPgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpncm91cD4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tR2xvYmFsQXR0cmlidXRlVHlwZS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tR2xvYmFsQXR0cmlidXRlVHlwZS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxNTZkOWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLUdsb2JhbEF0dHJpYnV0ZVR5cGUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9Ik1haW5BdHRyaWJ1dGUxIiB0eXBlPSJ4c2Q6ZGF0ZSI+PC94c2Q6YXR0cmlidXRlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1HbG9iYWxFbGVtZW50VHlwZS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tR2xvYmFsRWxlbWVudFR5cGUueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZmM1MjcyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1HbG9iYWxFbGVtZW50VHlwZS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDplbGVtZW50IG5hbWU9Ik1haW5FbGVtZW50MSIgdHlwZT0ieHNkOnVuc2lnbmVkQnl0ZSI+PC94c2Q6ZWxlbWVudD4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tTGlzdC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tTGlzdC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiOTMxNzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLUxpc3QueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCQotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVCI+Ci0gICAgCTx4c2Q6bGlzdCBpdGVtVHlwZT0ieHNkOmJvb2xlYW4iPgotICAgIAk8L3hzZDpsaXN0PgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLUxvY2FsQXR0cmlidXRlVHlwZTEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLUxvY2FsQXR0cmlidXRlVHlwZTEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTJhYTVkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1Mb2NhbEF0dHJpYnV0ZVR5cGUxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDEiPgotICAgIAk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJsb2NhbEF0dHJpYnV0ZTEiIHR5cGU9InhzZDpzaG9ydCI+PC94c2Q6YXR0cmlidXRlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYWYyYTJkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0ibG9jYWxFbGVtMSIgdHlwZT0ieHNkOmxhbmd1YWdlIj48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2Y4NmFmYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOmdyb3VwIG5hbWU9Ik1haW5Hcm91cDEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImxvY2FsRWxlbTEiIHR5cGU9InhzZDpkb3VibGUiPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmdyb3VwPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1SZXN0cmljdGlvbi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tUmVzdHJpY3Rpb24ueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYjEzZjYwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1SZXN0cmljdGlvbi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVCI+Ci0gICAgCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnRpbWUiPjwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLVVuaW9uMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tVW5pb24xLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTM4N2UxNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tVW5pb24xLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUIj4KLSAgICAgIDx4c2Q6dW5pb24gbWVtYmVyVHlwZXM9InhzZDpib29sZWFuIj4KLSAgICAgICAgIDx4c2Q6c2ltcGxlVHlwZT4KLSAgICAgICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0gICAgICAgICAgICAgIDx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSI1Ij48L3hzZDptYXhMZW5ndGg+Ci0gICAgICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICAgICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgICA8L3hzZDp1bmlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1VbmlvbjIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLVVuaW9uMi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlMjhkOGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLVVuaW9uMi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVCI+Ci0gICAgICA8eHNkOnVuaW9uIG1lbWJlclR5cGVzPSJ4c2Q6Ym9vbGVhbiB4c2Q6ZGF0ZSI+Ci0gICAgICAgICA8eHNkOnNpbXBsZVR5cGU+Ci0gICAgICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPgotICAgICAgICAgICAgICA8eHNkOm1heExlbmd0aCB2YWx1ZT0iNSI+PC94c2Q6bWF4TGVuZ3RoPgotICAgICAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgICAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgICAgPC94c2Q6dW5pb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tVW5pb24zLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1VbmlvbjMueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZTI4ZDhhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1VbmlvbjMueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QiPgotICAgICAgPHhzZDp1bmlvbiBtZW1iZXJUeXBlcz0ieHNkOmJvb2xlYW4geHNkOmRhdGUiPgotICAgICAgICAgPHhzZDpzaW1wbGVUeXBlPgotICAgICAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLSAgICAgICAgICAgICAgPHhzZDptYXhMZW5ndGggdmFsdWU9IjUiPjwveHNkOm1heExlbmd0aD4KLSAgICAgICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgICAgICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICAgIDwveHNkOnVuaW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1HbG9iYWxBdHRyaWJ1dGVUeXBlLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tR2xvYmFsQXR0cmlidXRlVHlwZS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1NzgzOTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1HbG9iYWxBdHRyaWJ1dGVUeXBlLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJNYWluQXR0cmlidXRlMSIgdHlwZT0iSW1wU1QxIj48L3hzZDphdHRyaWJ1dGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1HbG9iYWxFbGVtZW50VHlwZS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLUdsb2JhbEVsZW1lbnRUeXBlLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDRlODU0ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLUdsb2JhbEVsZW1lbnRUeXBlLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTWFpbkVsZW1lbnQxIiB0eXBlPSJJbXBTVDEiPjwveHNkOmVsZW1lbnQ+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1MaXN0LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tTGlzdC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3ODQ2NTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1MaXN0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQkKLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QiPgotICAgIAk8eHNkOmxpc3QgaXRlbVR5cGU9IkltcFNUMSI+Ci0gICAgCTwveHNkOmxpc3Q+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLUxvY2FsQXR0cmlidXRlVHlwZTEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1Mb2NhbEF0dHJpYnV0ZVR5cGUxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTBmZThmZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLUxvY2FsQXR0cmlidXRlVHlwZTEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMSI+Ci0gICAgCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImxvY2FsQXR0cmlidXRlMSIgdHlwZT0iSW1wU1QxIj48L3hzZDphdHRyaWJ1dGU+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmRiMTYwMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJsb2NhbEVsZW0xIiB0eXBlPSJJbXBTVDEiPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhNTNlNjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotICAgIDx4c2Q6Z3JvdXAgbmFtZT0iTWFpbkdyb3VwMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0ibG9jYWxFbGVtMSIgdHlwZT0iSW1wU1QxIj48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpncm91cD4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLVJlc3RyaWN0aW9uLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tUmVzdHJpY3Rpb24ueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOGY3YTE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tUmVzdHJpY3Rpb24ueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QiPgotICAgIAk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9IkltcFNUMSI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLVVuaW9uMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLVVuaW9uMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkOTA0ZjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1VbmlvbjEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QiPgotICAgICAgPHhzZDp1bmlvbiBtZW1iZXJUeXBlcz0iSW1wU1QxIHhzZDpib29sZWFuIj4KLSAgICAgICAgIDx4c2Q6c2ltcGxlVHlwZT4KLSAgICAgICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0gICAgICAgICAgICAgIDx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSI1Ij48L3hzZDptYXhMZW5ndGg+Ci0gICAgICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICAgICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgICA8L3hzZDp1bmlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tVW5pb24yLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tVW5pb24yLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZThjMGIzMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0NoYW1lbGVvbi1Ob05hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLVVuaW9uMi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVCI+Ci0gICAgICA8eHNkOnVuaW9uIG1lbWJlclR5cGVzPSJ4c2Q6Ym9vbGVhbiB4c2Q6ZGF0ZSBJbXBTVDEiPgotICAgICAgICAgPHhzZDpzaW1wbGVUeXBlPgotICAgICAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLSAgICAgICAgICAgICAgPHhzZDptYXhMZW5ndGggdmFsdWU9IjUiPjwveHNkOm1heExlbmd0aD4KLSAgICAgICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgICAgICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICAgIDwveHNkOnVuaW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1VbmlvbjMueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9DaGFtZWxlb24tTm9OYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1VbmlvbjMueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MTdmNDBiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvQ2hhbWVsZW9uLU5vTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tVW5pb24zLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUIj4KLSAgICAgIDx4c2Q6dW5pb24gbWVtYmVyVHlwZXM9InhzZDpib29sZWFuIHhzZDpkYXRlIj4KLSAgICAgICAgIDx4c2Q6c2ltcGxlVHlwZT4KLSAgICAgICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0iSW1wU1QxIj4KLSAgICAgICAgICAgICAgPHhzZDptYXhMZW5ndGggdmFsdWU9IjUiPjwveHNkOm1heExlbmd0aD4KLSAgICAgICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgICAgICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICAgIDwveHNkOnVuaW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9JbXBvcnQxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvSW1wb3J0MS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2OWZjY2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9JbXBvcnQxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgCi0gICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIgCi0gICAgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCi0gICAgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkltcENUMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciIG1heE9jY3Vycz0iMjUiPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotCi0gICAgPHhzZDpncm91cCBuYW1lPSJJbXBHcjEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpncm91cD4KLQotICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9IkltcEF0dHIxIiB0eXBlPSJ0bnM6SW1wU1QxIj48L3hzZDphdHRyaWJ1dGU+Ci0KLSAgICA8eHNkOmF0dHJpYnV0ZUdyb3VwIG5hbWU9IkltcEF0dHJHcjEiPgotICAgIAk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdDEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLSAgICA8L3hzZDphdHRyaWJ1dGVHcm91cD4KLQotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJJbXBFbGVtMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJJbXBTVDEiPgotICAgIAk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iSW1wU1QyIj4KLSAgICAJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJJbXBDVDIiPgotICAgIAk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdHRyMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlBdHRyaWJ1dGUvVW51c2VkL01haW4ueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUF0dHJpYnV0ZS9VbnVzZWQvTWFpbi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhYWJkMWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUF0dHJpYnV0ZS9VbnVzZWQvTWFpbi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxuczppbXA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbXBvcnQgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0ltcG9ydDEueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L3hzZDppbXBvcnQ+Ci0KLQk8eHNkOmVsZW1lbnQgbmFtZT0iTWFpbkVsZW1lbnQxIiB0eXBlPSJNYWluQ1QiPjwveHNkOmVsZW1lbnQ+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVCI+Ci0JCTx4c2Q6YXR0cmlidXRlIHJlZj0iTWFpbkF0dHJpYnV0ZSI+PC94c2Q6YXR0cmlidXRlPgotCTwveHNkOmNvbXBsZXhUeXBlPgotCi0gICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0iTWFpbkF0dHJpYnV0ZSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlBdHRyaWJ1dGUvVXNlZC9NYWluLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlBdHRyaWJ1dGUvVXNlZC9NYWluLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2JmNzFjNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5QXR0cmlidXRlL1VzZWQvTWFpbi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxuczppbXA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbXBvcnQgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0ltcG9ydDEueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L3hzZDppbXBvcnQ+Ci0KLQk8eHNkOmVsZW1lbnQgbmFtZT0iTWFpbkVsZW1lbnQxIiB0eXBlPSJNYWluQ1QiPjwveHNkOmVsZW1lbnQ+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVCI+Ci0JCTx4c2Q6YXR0cmlidXRlIHJlZj0iaW1wOkltcEF0dHIxIj48L3hzZDphdHRyaWJ1dGU+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUF0dHJpYnV0ZUdyb3VwL1VudXNlZC9NYWluLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlBdHRyaWJ1dGVHcm91cC9VbnVzZWQvTWFpbi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlNjdhZDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUF0dHJpYnV0ZUdyb3VwL1VudXNlZC9NYWluLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zOmltcD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW1wb3J0MS54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPjwveHNkOmltcG9ydD4KLQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJNYWluRWxlbWVudDEiIHR5cGU9Ik1haW5DVCI+PC94c2Q6ZWxlbWVudD4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUIj4KLSAgICAgICAgPHhzZDphdHRyaWJ1dGVHcm91cCByZWY9Ik1haW5BdHRyaWJ1dGVHcm91cDEiPjwveHNkOmF0dHJpYnV0ZUdyb3VwPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotCi0JPHhzZDphdHRyaWJ1dGVHcm91cCBuYW1lPSJNYWluQXR0cmlidXRlR3JvdXAxIj4KLQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXRyMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotCQk8eHNkOmFueUF0dHJpYnV0ZT48L3hzZDphbnlBdHRyaWJ1dGU+Ci0JPC94c2Q6YXR0cmlidXRlR3JvdXA+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUF0dHJpYnV0ZUdyb3VwL1VzZWQvTWFpbi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5QXR0cmlidXRlR3JvdXAvVXNlZC9NYWluLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmI1Y2ZlMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5QXR0cmlidXRlR3JvdXAvVXNlZC9NYWluLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zOmltcD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW1wb3J0MS54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPjwveHNkOmltcG9ydD4KLQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJNYWluRWxlbWVudDEiIHR5cGU9Ik1haW5DVCI+PC94c2Q6ZWxlbWVudD4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUIj4KLSAgICAgICAgPHhzZDphdHRyaWJ1dGVHcm91cCByZWY9ImltcDpJbXBBdHRyR3IxIj48L3hzZDphdHRyaWJ1dGVHcm91cD4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLQotCTx4c2Q6YXR0cmlidXRlR3JvdXAgbmFtZT0iTWFpbkF0dHJpYnV0ZUdyb3VwMSI+Ci0JCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0cjEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLQkJPHhzZDphbnlBdHRyaWJ1dGU+PC94c2Q6YW55QXR0cmlidXRlPgotCTwveHNkOmF0dHJpYnV0ZUdyb3VwPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9VbnVzZWQvTWFpbi1CYXNlVHlwZTEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VudXNlZC9NYWluLUJhc2VUeXBlMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjZWQ4NTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VudXNlZC9NYWluLUJhc2VUeXBlMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxuczppbXA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIDx4c2Q6aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbXBvcnQxLnhzZCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+PC94c2Q6aW1wb3J0PgotICAgIAotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMSI+Ci0gICAgCTx4c2Q6Y29tcGxleENvbnRlbnQ+Ci0gICAgCQk8eHNkOmV4dGVuc2lvbiBiYXNlPSJNYWluQ1QyIj48L3hzZDpleHRlbnNpb24+Ci0gICAgCTwveHNkOmNvbXBsZXhDb250ZW50PgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QyIj48L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVW51c2VkL01haW4tQmFzZVR5cGUyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9VbnVzZWQvTWFpbi1CYXNlVHlwZTIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTBmZTkxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9VbnVzZWQvTWFpbi1CYXNlVHlwZTIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM6aW1wPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLSAgICA8eHNkOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW1wb3J0MS54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPjwveHNkOmltcG9ydD4KLSAgICAKLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDEiPgotICAgIAk8eHNkOmNvbXBsZXhDb250ZW50PgotICAgIAkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJNYWluQ1QyIj4KLSAgICAJCQk8eHNkOnNlcXVlbmNlPgotICAgIAkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIG1pbk9jY3Vycz0iMSI+Ci0gICAgCQkJCQk8eHNkOnNpbXBsZVR5cGU+Ci0gICAgCQkJCQkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLSAgICAJCQkJCQkJPHhzZDptaW5MZW5ndGggdmFsdWU9IjEiPjwveHNkOm1pbkxlbmd0aD4KLSAgICAJCQkJCQkJPHhzZDptYXhMZW5ndGggdmFsdWU9IjEwIj48L3hzZDptYXhMZW5ndGg+Ci0gICAgCQkJCQkJPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgCQkJCQk8L3hzZDpzaW1wbGVUeXBlPgotICAgIAkJCQk8L3hzZDplbGVtZW50PgotICAgIAkJCTwveHNkOnNlcXVlbmNlPgotICAgIAkJPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgCTwveHNkOmNvbXBsZXhDb250ZW50PgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QyIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VudXNlZC9NYWluLUJhc2VUeXBlMy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVW51c2VkL01haW4tQmFzZVR5cGUzLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmU0ZjBjZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVW51c2VkL01haW4tQmFzZVR5cGUzLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zOmltcD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0gICAgPHhzZDppbXBvcnQgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0ltcG9ydDEueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L3hzZDppbXBvcnQ+Ci0KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTWFpbkVsZW1lbnQiPgotICAgIAk8eHNkOmNvbXBsZXhUeXBlPgotICAgIAkJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCQk8eHNkOmVsZW1lbnQgbmFtZT0iZWxlbTEiPgotICAgIAkJCQk8eHNkOmNvbXBsZXhUeXBlPgotICAgIAkJCQkJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iZWxlbTEiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJPHhzZDpjb21wbGV4Q29udGVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQk8eHNkOmV4dGVuc2lvbiBiYXNlPSJNYWluQ1QxIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCTx4c2Q6ZWxlbWVudAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCW5hbWU9ImVsZW0xIiB0eXBlPSJ4c2Q6c3RyaW5nIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCTwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCTwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCTwveHNkOmV4dGVuc2lvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCTwveHNkOmNvbXBsZXhDb250ZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAJCQkJCQk8L3hzZDplbGVtZW50PgotICAgIAkJCQkJPC94c2Q6c2VxdWVuY2U+Ci0gICAgCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotICAgIAkJCTwveHNkOmVsZW1lbnQ+Ci0gICAgCQk8L3hzZDpzZXF1ZW5jZT4KLSAgICAJPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPC94c2Q6ZWxlbWVudD4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMSI+PC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VudXNlZC9NYWluLUdsb2JhbEVsZW1lbnRUeXBlLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9VbnVzZWQvTWFpbi1HbG9iYWxFbGVtZW50VHlwZS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyZWFmMWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VudXNlZC9NYWluLUdsb2JhbEVsZW1lbnRUeXBlLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zOmltcD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0gICAgPHhzZDppbXBvcnQgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0ltcG9ydDEueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L3hzZDppbXBvcnQ+Ci0KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTWFpbkVsZW1lbnQxIiB0eXBlPSJNYWluQ1QxIj48L3hzZDplbGVtZW50PgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QxIj48L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVW51c2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VudXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWEyZGY1Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVW51c2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM6aW1wPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLSAgICA8eHNkOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW1wb3J0MS54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPjwveHNkOmltcG9ydD4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0ibG9jYWxFbGVtMSIgdHlwZT0iTWFpbkNUMiI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDIiPjwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9VbnVzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVW51c2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Njg4NDdkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9VbnVzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxuczppbXA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIDx4c2Q6aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbXBvcnQxLnhzZCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+PC94c2Q6aW1wb3J0PgotCi0gICAgPHhzZDpncm91cCBuYW1lPSJNYWluR3JvdXAxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJsb2NhbEVsZW0xIiB0eXBlPSJNYWluQ1QxIj48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpncm91cD4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMSI+PC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1CYXNlVHlwZTEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1CYXNlVHlwZTEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNzhjODdhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tQmFzZVR5cGUxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zOmltcD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0gICAgPHhzZDppbXBvcnQgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0ltcG9ydDEueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L3hzZDppbXBvcnQ+Ci0gICAgCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QxIj4KLSAgICAJPHhzZDpjb21wbGV4Q29udGVudD4KLSAgICAJCTx4c2Q6ZXh0ZW5zaW9uIGJhc2U9ImltcDpJbXBDVDEiPjwveHNkOmV4dGVuc2lvbj4KLSAgICAJPC94c2Q6Y29tcGxleENvbnRlbnQ+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1CYXNlVHlwZTIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1CYXNlVHlwZTIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNTJlZmQ2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tQmFzZVR5cGUyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zOmltcD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW1wb3J0MS54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPjwveHNkOmltcG9ydD4KLSAgICAKLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVHlwZTEiPgotICAgIAk8eHNkOmNvbXBsZXhDb250ZW50PgotICAgIAkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJpbXA6SW1wQ1QyIj4KLSAgICAJCSAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0dHIxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0gICAgCQk8L3hzZDpyZXN0cmljdGlvbj4KLSAgICAJPC94c2Q6Y29tcGxleENvbnRlbnQ+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QyIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyIgbWF4T2NjdXJzPSIyMSI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJJbXBDVDEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtYXhPY2N1cnM9IjI1Ij48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLQotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tQmFzZVR5cGUzLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tQmFzZVR5cGUzLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmFlYjI0OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUJhc2VUeXBlMy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxuczppbXA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIDx4c2Q6aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbXBvcnQxLnhzZCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+PC94c2Q6aW1wb3J0PgotCi0gICAgPHhzZDplbGVtZW50IG5hbWU9Ik1haW5FbGVtZW50Ij4KLSAgICAJPHhzZDpjb21wbGV4VHlwZT4KLSAgICAJCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQkJPHhzZDplbGVtZW50IG5hbWU9ImVsZW0xIj4KLSAgICAJCQkJPHhzZDpjb21wbGV4VHlwZT4KLSAgICAJCQkJCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9ImVsZW0xIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCTx4c2Q6Y29tcGxleENvbnRlbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJPHhzZDpleHRlbnNpb24gYmFzZT0iaW1wOkltcENUMSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCTx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQk8eHNkOmVsZW1lbnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQluYW1lPSJlbGVtMSIgdHlwZT0ieHNkOnN0cmluZyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQk8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQk8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQk8L3hzZDpleHRlbnNpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAk8L3hzZDpjb21wbGV4Q29udGVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgCQkJCQkJPC94c2Q6ZWxlbWVudD4KLSAgICAJCQkJCTwveHNkOnNlcXVlbmNlPgotICAgIAkJCQk8L3hzZDpjb21wbGV4VHlwZT48L3hzZDplbGVtZW50PgotICAgIAkJPC94c2Q6c2VxdWVuY2U+Ci0gICAgCTwveHNkOmNvbXBsZXhUeXBlPgotICAgIDwveHNkOmVsZW1lbnQ+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1HbG9iYWxFbGVtZW50VHlwZS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUdsb2JhbEVsZW1lbnRUeXBlLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjMwZDVkZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUdsb2JhbEVsZW1lbnRUeXBlLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zOmltcD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0gICAgPHhzZDppbXBvcnQgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0ltcG9ydDEueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L3hzZDppbXBvcnQ+Ci0KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTWFpbkVsZW1lbnQxIiB0eXBlPSJpbXA6SW1wQ1QxIj48L3hzZDplbGVtZW50PgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzY2M0ZTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxuczppbXA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIDx4c2Q6aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbXBvcnQxLnhzZCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+PC94c2Q6aW1wb3J0PgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJsb2NhbEVsZW0xIiB0eXBlPSJpbXA6SW1wQ1QxIj48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMjNkM2YyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM6aW1wPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLSAgICA8eHNkOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW1wb3J0MS54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPjwveHNkOmltcG9ydD4KLQotICAgIDx4c2Q6Z3JvdXAgbmFtZT0iTWFpbkdyb3VwMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0ibG9jYWxFbGVtMSIgdHlwZT0iaW1wOkltcENUMSI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Z3JvdXA+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUVsZW1lbnQvVW51c2VkL01haW4tQ1QueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUVsZW1lbnQvVW51c2VkL01haW4tQ1QueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzY2VmNmIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlFbGVtZW50L1VudXNlZC9NYWluLUNULnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zOmltcD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW1wb3J0MS54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPjwveHNkOmltcG9ydD4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCByZWY9Ik1haW5FbGVtZW50MSI+PC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTWFpbkVsZW1lbnQxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlFbGVtZW50L1VudXNlZC9NYWluLUdyb3VwLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlFbGVtZW50L1VudXNlZC9NYWluLUdyb3VwLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWQwZjQ5Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5RWxlbWVudC9VbnVzZWQvTWFpbi1Hcm91cC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxuczppbXA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbXBvcnQgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0ltcG9ydDEueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L3hzZDppbXBvcnQ+Ci0KLSAgICA8eHNkOmdyb3VwIG5hbWU9Ik1haW5Hcm91cDEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImxvY2FsRWxlbTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICA8eHNkOmNob2ljZT4KLSAgICAJCQk8eHNkOmVsZW1lbnQgbmFtZT0ibG9jYWxFbGVtMiIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLSAgICAJCQk8eHNkOmVsZW1lbnQgcmVmPSJNYWluRWxlbWVudDEiPjwveHNkOmVsZW1lbnQ+Ci0gICAgCQk8L3hzZDpjaG9pY2U+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmdyb3VwPgotCi0gICAgPHhzZDplbGVtZW50IG5hbWU9Ik1haW5FbGVtZW50MSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5RWxlbWVudC9Vc2VkL01haW4tQ1QueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUVsZW1lbnQvVXNlZC9NYWluLUNULnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTExNjE3Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5RWxlbWVudC9Vc2VkL01haW4tQ1QueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0gICAgeG1sbnM6aW1wPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbXBvcnQxLnhzZCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+PC94c2Q6aW1wb3J0PgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IHJlZj0iaW1wOkltcEVsZW0xIj48L3hzZDplbGVtZW50PgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5RWxlbWVudC9Vc2VkL01haW4tR3JvdXAueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUVsZW1lbnQvVXNlZC9NYWluLUdyb3VwLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTYzNTVlOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5RWxlbWVudC9Vc2VkL01haW4tR3JvdXAueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM6aW1wPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbXBvcnQxLnhzZCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+PC94c2Q6aW1wb3J0PgotCi0gICAgPHhzZDpncm91cCBuYW1lPSJNYWluR3JvdXAxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJsb2NhbEVsZW0xIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotICAgICAgICAgICAgPHhzZDpjaG9pY2U+Ci0gICAgCQkJPHhzZDplbGVtZW50IG5hbWU9ImxvY2FsRWxlbTIiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0gICAgCQkJPHhzZDplbGVtZW50IHJlZj0iaW1wOkltcEVsZW0xIj48L3hzZDplbGVtZW50PgotICAgIAkJPC94c2Q6Y2hvaWNlPgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpncm91cD4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5R3JvdXBEZWZpbml0aW9uL1VudXNlZC9NYWluLUNULnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlHcm91cERlZmluaXRpb24vVW51c2VkL01haW4tQ1QueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNGNkYTZhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlHcm91cERlZmluaXRpb24vVW51c2VkL01haW4tQ1QueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM6aW1wPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbXBvcnQxLnhzZCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+PC94c2Q6aW1wb3J0PgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QiPgotCQk8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDpncm91cCByZWY9Ik1haW5Hcm91cERlZmluaXRpb24xIj48L3hzZDpncm91cD4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLQk8eHNkOmdyb3VwIG5hbWU9Ik1haW5Hcm91cERlZmluaXRpb24xIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJnckVsZW0xIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpncm91cD4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5R3JvdXBEZWZpbml0aW9uL1VudXNlZC9NYWluLUdyb3VwLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlHcm91cERlZmluaXRpb24vVW51c2VkL01haW4tR3JvdXAueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNWU2MmM3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlHcm91cERlZmluaXRpb24vVW51c2VkL01haW4tR3JvdXAueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM6aW1wPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbXBvcnQxLnhzZCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+PC94c2Q6aW1wb3J0PgotCi0JPHhzZDpncm91cCBuYW1lPSJNYWluR3JvdXBEZWZpbml0aW9uMSI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iZ3JFbGVtMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Z3JvdXA+Ci0KLQk8eHNkOmdyb3VwIG5hbWU9Ik1haW5Hcm91cERlZmluaXRpb24yIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJnckVsZW0xIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCQkJPHhzZDpncm91cCByZWY9Ik1haW5Hcm91cERlZmluaXRpb24xIj48L3hzZDpncm91cD4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Z3JvdXA+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUdyb3VwRGVmaW5pdGlvbi9Vc2VkL01haW4tQ1QueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUdyb3VwRGVmaW5pdGlvbi9Vc2VkL01haW4tQ1QueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZTZmN2I4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlHcm91cERlZmluaXRpb24vVXNlZC9NYWluLUNULnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zOmltcD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW1wb3J0MS54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPjwveHNkOmltcG9ydD4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6Z3JvdXAgcmVmPSJpbXA6SW1wR3IxIj48L3hzZDpncm91cD4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLQk8eHNkOmdyb3VwIG5hbWU9Ik1haW5Hcm91cERlZmluaXRpb24xIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJnckVsZW0xIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpncm91cD4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5R3JvdXBEZWZpbml0aW9uL1VzZWQvTWFpbi1Hcm91cC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5R3JvdXBEZWZpbml0aW9uL1VzZWQvTWFpbi1Hcm91cC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwODY4ZjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeUdyb3VwRGVmaW5pdGlvbi9Vc2VkL01haW4tR3JvdXAueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM6aW1wPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbXBvcnQxLnhzZCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+PC94c2Q6aW1wb3J0PgotCi0JPHhzZDpncm91cCBuYW1lPSJNYWluR3JvdXBEZWZpbml0aW9uMSI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iZ3JFbGVtMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Z3JvdXA+Ci0KLQk8eHNkOmdyb3VwIG5hbWU9Ik1haW5Hcm91cERlZmluaXRpb24yIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJnckVsZW0xIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCQkJPHhzZDpncm91cCByZWY9ImltcDpJbXBHcjEiPjwveHNkOmdyb3VwPgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpncm91cD4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1HbG9iYWxBdHRyaWJ1dGVUeXBlLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLUdsb2JhbEF0dHJpYnV0ZVR5cGUueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Y2Q3MDdlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLUdsb2JhbEF0dHJpYnV0ZVR5cGUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM6aW1wPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbXBvcnQxLnhzZCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+PC94c2Q6aW1wb3J0PgotCi0gICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0iTWFpbkF0dHJpYnV0ZTEiIHR5cGU9InhzZDpkYXRlIj48L3hzZDphdHRyaWJ1dGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tR2xvYmFsRWxlbWVudFR5cGUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tR2xvYmFsRWxlbWVudFR5cGUueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4M2Q0OGJhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLUdsb2JhbEVsZW1lbnRUeXBlLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zOmltcD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0gICAgCi0gICAgPHhzZDppbXBvcnQgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0ltcG9ydDEueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L3hzZDppbXBvcnQ+Ci0KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTWFpbkVsZW1lbnQxIiB0eXBlPSJ4c2Q6dW5zaWduZWRCeXRlIj48L3hzZDplbGVtZW50PgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLUxpc3QueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tTGlzdC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0YzZiZjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tTGlzdC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM6aW1wPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQkKLQk8eHNkOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW1wb3J0MS54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPjwveHNkOmltcG9ydD4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QiPgotICAgIAk8eHNkOmxpc3QgaXRlbVR5cGU9InhzZDpib29sZWFuIj4KLSAgICAJPC94c2Q6bGlzdD4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLUxvY2FsQXR0cmlidXRlVHlwZTEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tTG9jYWxBdHRyaWJ1dGVUeXBlMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5NjcxNTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tTG9jYWxBdHRyaWJ1dGVUeXBlMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxuczppbXA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbXBvcnQgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0ltcG9ydDEueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L3hzZDppbXBvcnQ+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDEiPgotICAgIAk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJsb2NhbEF0dHJpYnV0ZTEiIHR5cGU9InhzZDpzaG9ydCI+PC94c2Q6YXR0cmlidXRlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjdlMzhmMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxuczppbXA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIAotICAgIDx4c2Q6aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbXBvcnQxLnhzZCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+PC94c2Q6aW1wb3J0PgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJsb2NhbEVsZW0xIiB0eXBlPSJ4c2Q6bGFuZ3VhZ2UiPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTFiM2JjMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxuczppbXA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIAotICAgIDx4c2Q6aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbXBvcnQxLnhzZCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+PC94c2Q6aW1wb3J0PgotCi0gICAgPHhzZDpncm91cCBuYW1lPSJNYWluR3JvdXAxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJsb2NhbEVsZW0xIiB0eXBlPSJ4c2Q6ZG91YmxlIj48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpncm91cD4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1SZXN0cmljdGlvbi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1SZXN0cmljdGlvbi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwODQyNmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tUmVzdHJpY3Rpb24ueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM6aW1wPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbXBvcnQxLnhzZCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+PC94c2Q6aW1wb3J0PgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVCI+Ci0gICAgCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnRpbWUiPjwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tVW5pb24xLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLVVuaW9uMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhZGRkNzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tVW5pb24xLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zOmltcD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW1wb3J0MS54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPjwveHNkOmltcG9ydD4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QiPgotICAgICAgPHhzZDp1bmlvbiBtZW1iZXJUeXBlcz0ieHNkOmJvb2xlYW4iPgotICAgICAgICAgPHhzZDpzaW1wbGVUeXBlPgotICAgICAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLSAgICAgICAgICAgICAgPHhzZDptYXhMZW5ndGggdmFsdWU9IjUiPjwveHNkOm1heExlbmd0aD4KLSAgICAgICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgICAgICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICAgIDwveHNkOnVuaW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tVW5pb24yLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLVVuaW9uMi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5MTE1YTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tVW5pb24yLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zOmltcD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW1wb3J0MS54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPjwveHNkOmltcG9ydD4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QiPgotICAgICAgPHhzZDp1bmlvbiBtZW1iZXJUeXBlcz0ieHNkOmJvb2xlYW4geHNkOmRhdGUiPgotICAgICAgICAgPHhzZDpzaW1wbGVUeXBlPgotICAgICAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLSAgICAgICAgICAgICAgPHhzZDptYXhMZW5ndGggdmFsdWU9IjUiPjwveHNkOm1heExlbmd0aD4KLSAgICAgICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgICAgICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICAgIDwveHNkOnVuaW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tVW5pb24zLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLVVuaW9uMy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5MTE1YTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tVW5pb24zLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zOmltcD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW1wb3J0MS54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPjwveHNkOmltcG9ydD4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QiPgotICAgICAgPHhzZDp1bmlvbiBtZW1iZXJUeXBlcz0ieHNkOmJvb2xlYW4geHNkOmRhdGUiPgotICAgICAgICAgPHhzZDpzaW1wbGVUeXBlPgotICAgICAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLSAgICAgICAgICAgICAgPHhzZDptYXhMZW5ndGggdmFsdWU9IjUiPjwveHNkOm1heExlbmd0aD4KLSAgICAgICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgICAgICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICAgIDwveHNkOnVuaW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLUdsb2JhbEF0dHJpYnV0ZVR5cGUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLUdsb2JhbEF0dHJpYnV0ZVR5cGUueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjkxMGNiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1HbG9iYWxBdHRyaWJ1dGVUeXBlLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zOmltcD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW1wb3J0MS54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPjwveHNkOmltcG9ydD4KLQotICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9Ik1haW5BdHRyaWJ1dGUxIiB0eXBlPSJpbXA6SW1wU1QxIj48L3hzZDphdHRyaWJ1dGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLUdsb2JhbEVsZW1lbnRUeXBlLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1HbG9iYWxFbGVtZW50VHlwZS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1ODRhMTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLUdsb2JhbEVsZW1lbnRUeXBlLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zOmltcD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW1wb3J0MS54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPjwveHNkOmltcG9ydD4KLQotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJNYWluRWxlbWVudDEiIHR5cGU9ImltcDpJbXBTVDEiPjwveHNkOmVsZW1lbnQ+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLUxpc3QueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLUxpc3QueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwN2M0MDJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1MaXN0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxuczppbXA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCQotCTx4c2Q6aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbXBvcnQxLnhzZCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+PC94c2Q6aW1wb3J0PgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVCI+Ci0gICAgCTx4c2Q6bGlzdCBpdGVtVHlwZT0iaW1wOkltcFNUMSI+Ci0gICAgCTwveHNkOmxpc3Q+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tTG9jYWxBdHRyaWJ1dGVUeXBlMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tTG9jYWxBdHRyaWJ1dGVUeXBlMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkODc2NDkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLUxvY2FsQXR0cmlidXRlVHlwZTEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM6aW1wPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbXBvcnQxLnhzZCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+PC94c2Q6aW1wb3J0PgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QxIj4KLSAgICAJPHhzZDphdHRyaWJ1dGUgbmFtZT0ibG9jYWxBdHRyaWJ1dGUxIiB0eXBlPSJpbXA6SW1wU1QxIj48L3hzZDphdHRyaWJ1dGU+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0YmM0MTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zOmltcD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW1wb3J0MS54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPjwveHNkOmltcG9ydD4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0ibG9jYWxFbGVtMSIgdHlwZT0iaW1wOkltcFNUMSI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwM2MzNGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zOmltcD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0gICAgCi0gICAgPHhzZDppbXBvcnQgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0ltcG9ydDEueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L3hzZDppbXBvcnQ+Ci0KLSAgICA8eHNkOmdyb3VwIG5hbWU9Ik1haW5Hcm91cDEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImxvY2FsRWxlbTEiIHR5cGU9ImltcDpJbXBTVDEiPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmdyb3VwPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1SZXN0cmljdGlvbi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tUmVzdHJpY3Rpb24ueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MDc4NDE0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1SZXN0cmljdGlvbi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxuczppbXA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbXBvcnQgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0ltcG9ydDEueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L3hzZDppbXBvcnQ+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUIj4KLSAgICAJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJpbXA6SW1wU1QxIj48L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1VbmlvbjEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLVVuaW9uMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMzkyOTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLVVuaW9uMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxuczppbXA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbXBvcnQgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0ltcG9ydDEueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L3hzZDppbXBvcnQ+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUIj4KLSAgICAgIDx4c2Q6dW5pb24gbWVtYmVyVHlwZXM9ImltcDpJbXBTVDEgeHNkOmJvb2xlYW4iPgotICAgICAgICAgPHhzZDpzaW1wbGVUeXBlPgotICAgICAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLSAgICAgICAgICAgICAgPHhzZDptYXhMZW5ndGggdmFsdWU9IjUiPjwveHNkOm1heExlbmd0aD4KLSAgICAgICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgICAgICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICAgIDwveHNkOnVuaW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbXBvcnRzV2l0aE5hbWVzcGFjZS9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLVVuaW9uMi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tVW5pb24yLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2ZlZmY0MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tVW5pb24yLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zOmltcD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW1wb3J0MS54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPjwveHNkOmltcG9ydD4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QiPgotICAgICAgPHhzZDp1bmlvbiBtZW1iZXJUeXBlcz0ieHNkOmJvb2xlYW4geHNkOmRhdGUgaW1wOkltcFNUMSI+Ci0gICAgICAgICA8eHNkOnNpbXBsZVR5cGU+Ci0gICAgICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPgotICAgICAgICAgICAgICA8eHNkOm1heExlbmd0aCB2YWx1ZT0iNSI+PC94c2Q6bWF4TGVuZ3RoPgotICAgICAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgICAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgICAgPC94c2Q6dW5pb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0ltcG9ydHNXaXRoTmFtZXNwYWNlL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tVW5pb24zLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1VbmlvbjMueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyN2UyMzEyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW1wb3J0c1dpdGhOYW1lc3BhY2UvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1VbmlvbjMueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM6aW1wPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbXBvcnQxLnhzZCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+PC94c2Q6aW1wb3J0PgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVCI+Ci0gICAgICA8eHNkOnVuaW9uIG1lbWJlclR5cGVzPSJ4c2Q6Ym9vbGVhbiB4c2Q6ZGF0ZSI+Ci0gICAgICAgICA8eHNkOnNpbXBsZVR5cGU+Ci0gICAgICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9ImltcDpJbXBTVDEiPgotICAgICAgICAgICAgICA8eHNkOm1heExlbmd0aCB2YWx1ZT0iNSI+PC94c2Q6bWF4TGVuZ3RoPgotICAgICAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgICAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgICAgPC94c2Q6dW5pb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL0luY2x1ZGUxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvSW5jbHVkZTEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYTJlZWUyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvSW5jbHVkZTEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiAKLSAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIgCi0gICAgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCi0gICAgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJJbXBDVDEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtYXhPY2N1cnM9IjI1Ij48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLQotICAgIDx4c2Q6Z3JvdXAgbmFtZT0iSW1wR3IxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Z3JvdXA+Ci0KLSAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJJbXBBdHRyMSIgdHlwZT0idG5zOkltcFNUMSI+PC94c2Q6YXR0cmlidXRlPgotCi0gICAgPHhzZDphdHRyaWJ1dGVHcm91cCBuYW1lPSJJbXBBdHRyR3IxIj4KLSAgICAJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXQxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0gICAgPC94c2Q6YXR0cmlidXRlR3JvdXA+Ci0KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iSW1wRWxlbTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iSW1wU1QxIj4KLSAgICAJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkltcFNUMiI+Ci0gICAgCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSW1wQ1QyIj4KLSAgICAJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXR0cjEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5QXR0cmlidXRlL1VudXNlZC9NYWluLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlBdHRyaWJ1dGUvVW51c2VkL01haW4ueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTI5MjVmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlBdHRyaWJ1dGUvVW51c2VkL01haW4ueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0JPHhzZDplbGVtZW50IG5hbWU9Ik1haW5FbGVtZW50MSIgdHlwZT0iTWFpbkNUIj48L3hzZDplbGVtZW50PgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QiPgotCQk8eHNkOmF0dHJpYnV0ZSByZWY9Ik1haW5BdHRyaWJ1dGUiPjwveHNkOmF0dHJpYnV0ZT4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLQotICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9Ik1haW5BdHRyaWJ1dGUiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5QXR0cmlidXRlL1VzZWQvTWFpbi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5QXR0cmlidXRlL1VzZWQvTWFpbi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkMTZjMzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUF0dHJpYnV0ZS9Vc2VkL01haW4ueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0JPHhzZDplbGVtZW50IG5hbWU9Ik1haW5FbGVtZW50MSIgdHlwZT0iTWFpbkNUIj48L3hzZDplbGVtZW50PgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QiPgotCQk8eHNkOmF0dHJpYnV0ZSByZWY9IkltcEF0dHIxIj48L3hzZDphdHRyaWJ1dGU+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUF0dHJpYnV0ZUdyb3VwL1VudXNlZC9NYWluLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlBdHRyaWJ1dGVHcm91cC9VbnVzZWQvTWFpbi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1NjJkYTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUF0dHJpYnV0ZUdyb3VwL1VudXNlZC9NYWluLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCTx4c2Q6ZWxlbWVudCBuYW1lPSJNYWluRWxlbWVudDEiIHR5cGU9Ik1haW5DVCI+PC94c2Q6ZWxlbWVudD4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUIj4KLSAgICAgICAgPHhzZDphdHRyaWJ1dGVHcm91cCByZWY9Ik1haW5BdHRyaWJ1dGVHcm91cDEiPjwveHNkOmF0dHJpYnV0ZUdyb3VwPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotCi0JPHhzZDphdHRyaWJ1dGVHcm91cCBuYW1lPSJNYWluQXR0cmlidXRlR3JvdXAxIj4KLQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXRyMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotCQk8eHNkOmFueUF0dHJpYnV0ZT48L3hzZDphbnlBdHRyaWJ1dGU+Ci0JPC94c2Q6YXR0cmlidXRlR3JvdXA+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUF0dHJpYnV0ZUdyb3VwL1VzZWQvTWFpbi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5QXR0cmlidXRlR3JvdXAvVXNlZC9NYWluLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDM5ZDI0YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5QXR0cmlidXRlR3JvdXAvVXNlZC9NYWluLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCTx4c2Q6ZWxlbWVudCBuYW1lPSJNYWluRWxlbWVudDEiIHR5cGU9Ik1haW5DVCI+PC94c2Q6ZWxlbWVudD4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUIj4KLSAgICAgICAgPHhzZDphdHRyaWJ1dGVHcm91cCByZWY9IkltcEF0dHJHcjEiPjwveHNkOmF0dHJpYnV0ZUdyb3VwPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotCi0JPHhzZDphdHRyaWJ1dGVHcm91cCBuYW1lPSJNYWluQXR0cmlidXRlR3JvdXAxIj4KLQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXRyMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotCQk8eHNkOmFueUF0dHJpYnV0ZT48L3hzZDphbnlBdHRyaWJ1dGU+Ci0JPC94c2Q6YXR0cmlidXRlR3JvdXA+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUNvbXBsZXhUeXBlL1VudXNlZC9NYWluLUJhc2VUeXBlMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5Q29tcGxleFR5cGUvVW51c2VkL01haW4tQmFzZVR5cGUxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODM5YTFhYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5Q29tcGxleFR5cGUvVW51c2VkL01haW4tQmFzZVR5cGUxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotICAgIAotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMSI+Ci0gICAgCTx4c2Q6Y29tcGxleENvbnRlbnQ+Ci0gICAgCQk8eHNkOmV4dGVuc2lvbiBiYXNlPSJNYWluQ1QyIj48L3hzZDpleHRlbnNpb24+Ci0gICAgCTwveHNkOmNvbXBsZXhDb250ZW50PgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QyIj48L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5Q29tcGxleFR5cGUvVW51c2VkL01haW4tQmFzZVR5cGUyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlDb21wbGV4VHlwZS9VbnVzZWQvTWFpbi1CYXNlVHlwZTIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3M2UyODI1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlDb21wbGV4VHlwZS9VbnVzZWQvTWFpbi1CYXNlVHlwZTIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0gICAgCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QxIj4KLSAgICAJPHhzZDpjb21wbGV4Q29udGVudD4KLSAgICAJCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0iTWFpbkNUMiI+Ci0gICAgCQkJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCQkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiBtaW5PY2N1cnM9IjEiPgotICAgIAkJCQkJPHhzZDpzaW1wbGVUeXBlPgotICAgIAkJCQkJCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0gICAgCQkJCQkJCTx4c2Q6bWluTGVuZ3RoIHZhbHVlPSIxIj48L3hzZDptaW5MZW5ndGg+Ci0gICAgCQkJCQkJCTx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIxMCI+PC94c2Q6bWF4TGVuZ3RoPgotICAgIAkJCQkJCTwveHNkOnJlc3RyaWN0aW9uPgotICAgIAkJCQkJPC94c2Q6c2ltcGxlVHlwZT4KLSAgICAJCQkJPC94c2Q6ZWxlbWVudD4KLSAgICAJCQk8L3hzZDpzZXF1ZW5jZT4KLSAgICAJCTwveHNkOnJlc3RyaWN0aW9uPgotICAgIAk8L3hzZDpjb21wbGV4Q29udGVudD4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMiI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlDb21wbGV4VHlwZS9VbnVzZWQvTWFpbi1CYXNlVHlwZTMueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUNvbXBsZXhUeXBlL1VudXNlZC9NYWluLUJhc2VUeXBlMy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4NzY5ZmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUNvbXBsZXhUeXBlL1VudXNlZC9NYWluLUJhc2VUeXBlMy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJNYWluRWxlbWVudCI+Ci0gICAgCTx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgCQk8eHNkOnNlcXVlbmNlPgotICAgIAkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlbGVtMSI+Ci0gICAgCQkJCTx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgCQkJCQk8eHNkOnNlcXVlbmNlPgotICAgIAkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlbGVtMSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAk8eHNkOmNvbXBsZXhDb250ZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCTx4c2Q6ZXh0ZW5zaW9uIGJhc2U9Ik1haW5DVDEiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQk8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJPHhzZDplbGVtZW50Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJbmFtZT0iZWxlbTEiIHR5cGU9InhzZDpzdHJpbmciPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJPC94c2Q6ZXh0ZW5zaW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJPC94c2Q6Y29tcGxleENvbnRlbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIAkJCQkJCTwveHNkOmVsZW1lbnQ+Ci0gICAgCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLSAgICAJCQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgCQkJPC94c2Q6ZWxlbWVudD4KLSAgICAJCTwveHNkOnNlcXVlbmNlPgotICAgIAk8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8L3hzZDplbGVtZW50PgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QxIj48L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5Q29tcGxleFR5cGUvVW51c2VkL01haW4tR2xvYmFsRWxlbWVudFR5cGUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUNvbXBsZXhUeXBlL1VudXNlZC9NYWluLUdsb2JhbEVsZW1lbnRUeXBlLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTRhNjE2Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5Q29tcGxleFR5cGUvVW51c2VkL01haW4tR2xvYmFsRWxlbWVudFR5cGUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTWFpbkVsZW1lbnQxIiB0eXBlPSJNYWluQ1QxIj48L3hzZDplbGVtZW50PgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QxIj48L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5Q29tcGxleFR5cGUvVW51c2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUNvbXBsZXhUeXBlL1VudXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzIwZmUyZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5Q29tcGxleFR5cGUvVW51c2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImxvY2FsRWxlbTEiIHR5cGU9Ik1haW5DVDIiPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QyIj48L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5Q29tcGxleFR5cGUvVW51c2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUNvbXBsZXhUeXBlL1VudXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmQ3ZmVhNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5Q29tcGxleFR5cGUvVW51c2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOmdyb3VwIG5hbWU9Ik1haW5Hcm91cDEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImxvY2FsRWxlbTEiIHR5cGU9Ik1haW5DVDEiPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmdyb3VwPgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QxIj48L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUJhc2VUeXBlMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUJhc2VUeXBlMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzZTg0MjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1CYXNlVHlwZTEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0gICAgCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QxIj4KLSAgICAJPHhzZDpjb21wbGV4Q29udGVudD4KLSAgICAJCTx4c2Q6ZXh0ZW5zaW9uIGJhc2U9IkltcENUMSI+PC94c2Q6ZXh0ZW5zaW9uPgotICAgIAk8L3hzZDpjb21wbGV4Q29udGVudD4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUJhc2VUeXBlMi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUJhc2VUeXBlMi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjZDJhMWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1CYXNlVHlwZTIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0gICAgCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QxIj4KLSAgICAJPHhzZDpjb21wbGV4Q29udGVudD4KLSAgICAJCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0iSW1wQ1QxIj4KLSAgICAJCQk8eHNkOnNlcXVlbmNlPgotICAgIAkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIG1pbk9jY3Vycz0iMSI+Ci0gICAgCQkJCQk8eHNkOnNpbXBsZVR5cGU+Ci0gICAgCQkJCQkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLSAgICAJCQkJCQkJPHhzZDptaW5MZW5ndGggdmFsdWU9IjEiPjwveHNkOm1pbkxlbmd0aD4KLSAgICAJCQkJCQkJPHhzZDptYXhMZW5ndGggdmFsdWU9IjEwIj48L3hzZDptYXhMZW5ndGg+Ci0gICAgCQkJCQkJPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgCQkJCQk8L3hzZDpzaW1wbGVUeXBlPgotICAgIAkJCQk8L3hzZDplbGVtZW50PgotICAgIAkJCTwveHNkOnNlcXVlbmNlPgotICAgIAkJPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgCTwveHNkOmNvbXBsZXhDb250ZW50PgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tQmFzZVR5cGUzLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tQmFzZVR5cGUzLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTg1NDc3NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUJhc2VUeXBlMy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJNYWluRWxlbWVudCI+Ci0gICAgCTx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgCQk8eHNkOnNlcXVlbmNlPgotICAgIAkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlbGVtMSI+Ci0gICAgCQkJCTx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgCQkJCQk8eHNkOnNlcXVlbmNlPgotICAgIAkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlbGVtMSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAk8eHNkOmNvbXBsZXhDb250ZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCTx4c2Q6ZXh0ZW5zaW9uIGJhc2U9IkltcENUMSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCTx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQk8eHNkOmVsZW1lbnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQluYW1lPSJlbGVtMSIgdHlwZT0ieHNkOnN0cmluZyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQk8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQk8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQk8L3hzZDpleHRlbnNpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAk8L3hzZDpjb21wbGV4Q29udGVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgCQkJCQkJPC94c2Q6ZWxlbWVudD4KLSAgICAJCQkJCTwveHNkOnNlcXVlbmNlPgotICAgIAkJCQk8L3hzZDpjb21wbGV4VHlwZT48L3hzZDplbGVtZW50PgotICAgIAkJPC94c2Q6c2VxdWVuY2U+Ci0gICAgCTwveHNkOmNvbXBsZXhUeXBlPgotICAgIDwveHNkOmVsZW1lbnQ+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1HbG9iYWxFbGVtZW50VHlwZS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUdsb2JhbEVsZW1lbnRUeXBlLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDQyMjc0YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUdsb2JhbEVsZW1lbnRUeXBlLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTWFpbkVsZW1lbnQxIiB0eXBlPSJJbXBDVDEiPjwveHNkOmVsZW1lbnQ+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGVkNjViZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5Q29tcGxleFR5cGUvVXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJsb2NhbEVsZW0xIiB0eXBlPSJJbXBDVDEiPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlDb21wbGV4VHlwZS9Vc2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyMmI1YWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUNvbXBsZXhUeXBlL1VzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotICAgIDx4c2Q6Z3JvdXAgbmFtZT0iTWFpbkdyb3VwMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0ibG9jYWxFbGVtMSIgdHlwZT0iSW1wQ1QxIj48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpncm91cD4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5RWxlbWVudC9VbnVzZWQvTWFpbi1DVC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5RWxlbWVudC9VbnVzZWQvTWFpbi1DVC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlZTRkMjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUVsZW1lbnQvVW51c2VkL01haW4tQ1QueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCByZWY9Ik1haW5FbGVtZW50MSI+PC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTWFpbkVsZW1lbnQxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlFbGVtZW50L1VudXNlZC9NYWluLUdyb3VwLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlFbGVtZW50L1VudXNlZC9NYWluLUdyb3VwLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjQ5N2IwMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5RWxlbWVudC9VbnVzZWQvTWFpbi1Hcm91cC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDpncm91cCBuYW1lPSJNYWluR3JvdXAxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJsb2NhbEVsZW0xIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotICAgICAgICAgICAgPHhzZDpjaG9pY2U+Ci0gICAgCQkJPHhzZDplbGVtZW50IG5hbWU9ImxvY2FsRWxlbTIiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0gICAgCQkJPHhzZDplbGVtZW50IHJlZj0iTWFpbkVsZW1lbnQxIj48L3hzZDplbGVtZW50PgotICAgIAkJPC94c2Q6Y2hvaWNlPgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpncm91cD4KLQotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJNYWluRWxlbWVudDEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUVsZW1lbnQvVXNlZC9NYWluLUNULnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlFbGVtZW50L1VzZWQvTWFpbi1DVC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmZTQzZjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUVsZW1lbnQvVXNlZC9NYWluLUNULnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVCI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgcmVmPSJJbXBFbGVtMSI+PC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUVsZW1lbnQvVXNlZC9NYWluLUdyb3VwLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlFbGVtZW50L1VzZWQvTWFpbi1Hcm91cC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmNjQ4MmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUVsZW1lbnQvVXNlZC9NYWluLUdyb3VwLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOmdyb3VwIG5hbWU9Ik1haW5Hcm91cDEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImxvY2FsRWxlbTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICA8eHNkOmNob2ljZT4KLSAgICAJCQk8eHNkOmVsZW1lbnQgbmFtZT0ibG9jYWxFbGVtMiIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLSAgICAJCQk8eHNkOmVsZW1lbnQgcmVmPSJJbXBFbGVtMSI+PC94c2Q6ZWxlbWVudD4KLSAgICAJCTwveHNkOmNob2ljZT4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Z3JvdXA+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUdyb3VwRGVmaW5pdGlvbi9VbnVzZWQvTWFpbi1DVC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5R3JvdXBEZWZpbml0aW9uL1VudXNlZC9NYWluLUNULnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQ1NWQ3ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5R3JvdXBEZWZpbml0aW9uL1VudXNlZC9NYWluLUNULnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVCI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmdyb3VwIHJlZj0iTWFpbkdyb3VwRGVmaW5pdGlvbjEiPjwveHNkOmdyb3VwPgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLQotCTx4c2Q6Z3JvdXAgbmFtZT0iTWFpbkdyb3VwRGVmaW5pdGlvbjEiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IG5hbWU9ImdyRWxlbTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmdyb3VwPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlHcm91cERlZmluaXRpb24vVW51c2VkL01haW4tR3JvdXAueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUdyb3VwRGVmaW5pdGlvbi9VbnVzZWQvTWFpbi1Hcm91cC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkNzQ5MTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUdyb3VwRGVmaW5pdGlvbi9VbnVzZWQvTWFpbi1Hcm91cC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0JPHhzZDpncm91cCBuYW1lPSJNYWluR3JvdXBEZWZpbml0aW9uMSI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iZ3JFbGVtMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Z3JvdXA+Ci0KLQk8eHNkOmdyb3VwIG5hbWU9Ik1haW5Hcm91cERlZmluaXRpb24yIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJnckVsZW0xIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCQkJPHhzZDpncm91cCByZWY9Ik1haW5Hcm91cERlZmluaXRpb24xIj48L3hzZDpncm91cD4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Z3JvdXA+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUdyb3VwRGVmaW5pdGlvbi9Vc2VkL01haW4tQ1QueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUdyb3VwRGVmaW5pdGlvbi9Vc2VkL01haW4tQ1QueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMzBmYTViLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlHcm91cERlZmluaXRpb24vVXNlZC9NYWluLUNULnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVCI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmdyb3VwIHJlZj0iSW1wR3IxIj48L3hzZDpncm91cD4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLQk8eHNkOmdyb3VwIG5hbWU9Ik1haW5Hcm91cERlZmluaXRpb24xIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJnckVsZW0xIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpncm91cD4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5R3JvdXBEZWZpbml0aW9uL1VzZWQvTWFpbi1Hcm91cC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5R3JvdXBEZWZpbml0aW9uL1VzZWQvTWFpbi1Hcm91cC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyYmFhNmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeUdyb3VwRGVmaW5pdGlvbi9Vc2VkL01haW4tR3JvdXAueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotCTx4c2Q6Z3JvdXAgbmFtZT0iTWFpbkdyb3VwRGVmaW5pdGlvbjEiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IG5hbWU9ImdyRWxlbTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmdyb3VwPgotCi0JPHhzZDpncm91cCBuYW1lPSJNYWluR3JvdXBEZWZpbml0aW9uMiI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iZ3JFbGVtMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQkJCTx4c2Q6Z3JvdXAgcmVmPSJJbXBHcjEiPjwveHNkOmdyb3VwPgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpncm91cD4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1HbG9iYWxBdHRyaWJ1dGVUeXBlLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLUdsb2JhbEF0dHJpYnV0ZVR5cGUueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MTU2ZDljLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLUdsb2JhbEF0dHJpYnV0ZVR5cGUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9Ik1haW5BdHRyaWJ1dGUxIiB0eXBlPSJ4c2Q6ZGF0ZSI+PC94c2Q6YXR0cmlidXRlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLUdsb2JhbEVsZW1lbnRUeXBlLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLUdsb2JhbEVsZW1lbnRUeXBlLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTQ2ZTA5MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1HbG9iYWxFbGVtZW50VHlwZS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDplbGVtZW50IG5hbWU9Ik1haW5FbGVtZW50MSIgdHlwZT0ieHNkOnVuc2lnbmVkQnl0ZSI+PC94c2Q6ZWxlbWVudD4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1MaXN0LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLUxpc3QueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYjkzMTczLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLUxpc3QueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCQotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVCI+Ci0gICAgCTx4c2Q6bGlzdCBpdGVtVHlwZT0ieHNkOmJvb2xlYW4iPgotICAgIAk8L3hzZDpsaXN0PgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tTG9jYWxBdHRyaWJ1dGVUeXBlMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1Mb2NhbEF0dHJpYnV0ZVR5cGUxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTkyYWE1ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1Mb2NhbEF0dHJpYnV0ZVR5cGUxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDEiPgotICAgIAk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJsb2NhbEF0dHJpYnV0ZTEiIHR5cGU9InhzZDpzaG9ydCI+PC94c2Q6YXR0cmlidXRlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmFmMmEyZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0ibG9jYWxFbGVtMSIgdHlwZT0ieHNkOmxhbmd1YWdlIj48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmODZhZmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOmdyb3VwIG5hbWU9Ik1haW5Hcm91cDEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImxvY2FsRWxlbTEiIHR5cGU9InhzZDpkb3VibGUiPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmdyb3VwPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLVJlc3RyaWN0aW9uLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLVJlc3RyaWN0aW9uLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWIxM2Y2MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1SZXN0cmljdGlvbi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVCI+Ci0gICAgCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnRpbWUiPjwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tVW5pb24xLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLVVuaW9uMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzODdlMTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tVW5pb24xLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUIj4KLSAgICAgIDx4c2Q6dW5pb24gbWVtYmVyVHlwZXM9InhzZDpib29sZWFuIj4KLSAgICAgICAgIDx4c2Q6c2ltcGxlVHlwZT4KLSAgICAgICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0gICAgICAgICAgICAgIDx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSI1Ij48L3hzZDptYXhMZW5ndGg+Ci0gICAgICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICAgICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgICA8L3hzZDp1bmlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLVVuaW9uMi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1VbmlvbjIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZTI4ZDhhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlTaW1wbGVUeXBlL1VudXNlZC9NYWluLVVuaW9uMi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVCI+Ci0gICAgICA8eHNkOnVuaW9uIG1lbWJlclR5cGVzPSJ4c2Q6Ym9vbGVhbiB4c2Q6ZGF0ZSI+Ci0gICAgICAgICA8eHNkOnNpbXBsZVR5cGU+Ci0gICAgICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPgotICAgICAgICAgICAgICA8eHNkOm1heExlbmd0aCB2YWx1ZT0iNSI+PC94c2Q6bWF4TGVuZ3RoPgotICAgICAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgICAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgICAgPC94c2Q6dW5pb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1VbmlvbjMueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeVNpbXBsZVR5cGUvVW51c2VkL01haW4tVW5pb24zLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGUyOGQ4YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9VbnVzZWQvTWFpbi1VbmlvbjMueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QiPgotICAgICAgPHhzZDp1bmlvbiBtZW1iZXJUeXBlcz0ieHNkOmJvb2xlYW4geHNkOmRhdGUiPgotICAgICAgICAgPHhzZDpzaW1wbGVUeXBlPgotICAgICAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLSAgICAgICAgICAgICAgPHhzZDptYXhMZW5ndGggdmFsdWU9IjUiPjwveHNkOm1heExlbmd0aD4KLSAgICAgICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgICAgICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICAgIDwveHNkOnVuaW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLUdsb2JhbEF0dHJpYnV0ZVR5cGUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLUdsb2JhbEF0dHJpYnV0ZVR5cGUueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTc4Mzk1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1HbG9iYWxBdHRyaWJ1dGVUeXBlLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJNYWluQXR0cmlidXRlMSIgdHlwZT0iSW1wU1QxIj48L3hzZDphdHRyaWJ1dGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLUdsb2JhbEVsZW1lbnRUeXBlLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1HbG9iYWxFbGVtZW50VHlwZS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0ZTg1NGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLUdsb2JhbEVsZW1lbnRUeXBlLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTWFpbkVsZW1lbnQxIiB0eXBlPSJJbXBTVDEiPjwveHNkOmVsZW1lbnQ+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLUxpc3QueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLUxpc3QueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNzg0NjUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1MaXN0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQkKLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QiPgotICAgIAk8eHNkOmxpc3QgaXRlbVR5cGU9IkltcFNUMSI+Ci0gICAgCTwveHNkOmxpc3Q+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tTG9jYWxBdHRyaWJ1dGVUeXBlMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tTG9jYWxBdHRyaWJ1dGVUeXBlMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwZmU4ZmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLUxvY2FsQXR0cmlidXRlVHlwZTEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMSI+Ci0gICAgCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImxvY2FsQXR0cmlidXRlMSIgdHlwZT0iSW1wU1QxIj48L3hzZDphdHRyaWJ1dGU+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkYjE2MDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLUxvY2FsRWxlbWVudFR5cGUxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJsb2NhbEVsZW0xIiB0eXBlPSJJbXBTVDEiPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tTG9jYWxFbGVtZW50VHlwZTIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYTUzZTY0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1Mb2NhbEVsZW1lbnRUeXBlMi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotICAgIDx4c2Q6Z3JvdXAgbmFtZT0iTWFpbkdyb3VwMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0ibG9jYWxFbGVtMSIgdHlwZT0iSW1wU1QxIj48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpncm91cD4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tUmVzdHJpY3Rpb24ueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLVJlc3RyaWN0aW9uLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMThmN2ExNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tUmVzdHJpY3Rpb24ueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QiPgotICAgIAk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9IkltcFNUMSI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tVW5pb24xLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1VbmlvbjEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZDkwNGY0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1VbmlvbjEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uLy4uL0luY2x1ZGUxLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QiPgotICAgICAgPHhzZDp1bmlvbiBtZW1iZXJUeXBlcz0iSW1wU1QxIHhzZDpib29sZWFuIj4KLSAgICAgICAgIDx4c2Q6c2ltcGxlVHlwZT4KLSAgICAgICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0gICAgICAgICAgICAgIDx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSI1Ij48L3hzZDptYXhMZW5ndGg+Ci0gICAgICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICAgICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgICA8L3hzZDp1bmlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvUmVmQnlTaW1wbGVUeXBlL1VzZWQvTWFpbi1VbmlvbjIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLVVuaW9uMi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4YzBiMzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLVVuaW9uMi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vLi4vSW5jbHVkZTEueHNkIj48L3hzZDppbmNsdWRlPgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVCI+Ci0gICAgICA8eHNkOnVuaW9uIG1lbWJlclR5cGVzPSJ4c2Q6Ym9vbGVhbiB4c2Q6ZGF0ZSBJbXBTVDEiPgotICAgICAgICAgPHhzZDpzaW1wbGVUeXBlPgotICAgICAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLSAgICAgICAgICAgICAgPHhzZDptYXhMZW5ndGggdmFsdWU9IjUiPjwveHNkOm1heExlbmd0aD4KLSAgICAgICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgICAgICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICAgIDwveHNkOnVuaW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9SZWZCeVNpbXBsZVR5cGUvVXNlZC9NYWluLVVuaW9uMy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tVW5pb24zLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTE3ZjQwYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL1JlZkJ5U2ltcGxlVHlwZS9Vc2VkL01haW4tVW5pb24zLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0gICAgPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi8uLi9JbmNsdWRlMS54c2QiPjwveHNkOmluY2x1ZGU+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUIj4KLSAgICAgIDx4c2Q6dW5pb24gbWVtYmVyVHlwZXM9InhzZDpib29sZWFuIHhzZDpkYXRlIj4KLSAgICAgICAgIDx4c2Q6c2ltcGxlVHlwZT4KLSAgICAgICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0iSW1wU1QxIj4KLSAgICAgICAgICAgICAgPHhzZDptYXhMZW5ndGggdmFsdWU9IjUiPjwveHNkOm1heExlbmd0aD4KLSAgICAgICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgICAgICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICAgIDwveHNkOnVuaW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9jaXJjdWxhci9JbmNsdWRlMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL2NpcmN1bGFyL0luY2x1ZGUxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTRkOTZkNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL2NpcmN1bGFyL0luY2x1ZGUxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgCi0gICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iIAotICAgIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAotICAgIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSW5jMUNUMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciIG1heE9jY3Vycz0iMjUiPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotCi0gICAgPHhzZDpncm91cCBuYW1lPSJJbmMxR3IxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Z3JvdXA+Ci0KLSAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJJbmMxQXR0cjEiIHR5cGU9InRuczpJbmMxU1QxIj48L3hzZDphdHRyaWJ1dGU+Ci0KLSAgICA8eHNkOmF0dHJpYnV0ZUdyb3VwIG5hbWU9IkluYzFBdHRyR3IxIj4KLSAgICAJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXQxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0gICAgPC94c2Q6YXR0cmlidXRlR3JvdXA+Ci0KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iSW5jMUVsZW0xIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkluYzFTVDEiPgotICAgIAk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iSW5jMVNUMiI+Ci0gICAgCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSW5jMUNUMiI+Ci0gICAgCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0dHIxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9jaXJjdWxhci9JbmNsdWRlMi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL2NpcmN1bGFyL0luY2x1ZGUyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzZhZDRhMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL2NpcmN1bGFyL0luY2x1ZGUyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotCTx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iSW5jbHVkZTMueHNkIj48L3hzZDppbmNsdWRlPgotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSW5jMkNUMSI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciIG1heE9jY3Vycz0iMjUiPjwveHNkOmVsZW1lbnQ+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmNvbXBsZXhUeXBlPgotCi0JPHhzZDpncm91cCBuYW1lPSJJbmMyR3IxIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Z3JvdXA+Ci0KLQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJJbmMyQXR0cjEiIHR5cGU9InRuczpJbmMyU1QxIj48L3hzZDphdHRyaWJ1dGU+Ci0KLQk8eHNkOmF0dHJpYnV0ZUdyb3VwIG5hbWU9IkluYzJBdHRyR3IxIj4KLQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXQxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0JPC94c2Q6YXR0cmlidXRlR3JvdXA+Ci0KLQk8eHNkOmVsZW1lbnQgbmFtZT0iSW5jMkVsZW0xIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCi0JPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkluYzJTVDEiPgotCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjwveHNkOnJlc3RyaWN0aW9uPgotCTwveHNkOnNpbXBsZVR5cGU+Ci0KLQk8eHNkOnNpbXBsZVR5cGUgbmFtZT0iSW5jMlNUMiI+Ci0JCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0JPC94c2Q6c2ltcGxlVHlwZT4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSW5jMkNUMiI+Ci0JCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0dHIxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9jaXJjdWxhci9JbmNsdWRlMy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL2NpcmN1bGFyL0luY2x1ZGUzLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTllMDIwNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL2NpcmN1bGFyL0luY2x1ZGUzLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotCTx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iSW5jbHVkZTQueHNkIj48L3hzZDppbmNsdWRlPgotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSW5jM0NUMSI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciIG1heE9jY3Vycz0iMjUiPjwveHNkOmVsZW1lbnQ+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmNvbXBsZXhUeXBlPgotCi0JPHhzZDpncm91cCBuYW1lPSJJbmMzR3IxIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Z3JvdXA+Ci0KLQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJJbmMzQXR0cjEiIHR5cGU9InRuczpJbmMzU1QxIj48L3hzZDphdHRyaWJ1dGU+Ci0KLQk8eHNkOmF0dHJpYnV0ZUdyb3VwIG5hbWU9IkluYzNBdHRyR3IxIj4KLQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXQxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0JPC94c2Q6YXR0cmlidXRlR3JvdXA+Ci0KLQk8eHNkOmVsZW1lbnQgbmFtZT0iSW5jM0VsZW0xIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCi0JPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkluYzNTVDEiPgotCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjwveHNkOnJlc3RyaWN0aW9uPgotCTwveHNkOnNpbXBsZVR5cGU+Ci0KLQk8eHNkOnNpbXBsZVR5cGUgbmFtZT0iSW5jM1NUMiI+Ci0JCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0JPC94c2Q6c2ltcGxlVHlwZT4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSW5jM0NUMiI+Ci0JCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0dHIxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9jaXJjdWxhci9JbmNsdWRlNC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL2NpcmN1bGFyL0luY2x1ZGU0LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzY1MDk4NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL2NpcmN1bGFyL0luY2x1ZGU0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgCi0gICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iIAotICAgIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAotICAgIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotCTx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iSW5jbHVkZTUueHNkIj48L3hzZDppbmNsdWRlPgotCQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSW5jNENUMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciIG1heE9jY3Vycz0iMjUiPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotCi0gICAgPHhzZDpncm91cCBuYW1lPSJJbmM0R3IxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Z3JvdXA+Ci0KLSAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJJbmM0QXR0cjEiIHR5cGU9InRuczpJbmM0U1QxIj48L3hzZDphdHRyaWJ1dGU+Ci0KLSAgICA8eHNkOmF0dHJpYnV0ZUdyb3VwIG5hbWU9IkluYzRBdHRyR3IxIj4KLSAgICAJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXQxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0gICAgPC94c2Q6YXR0cmlidXRlR3JvdXA+Ci0KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iSW5jNEVsZW0xIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkluYzRTVDEiPgotICAgIAk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iSW5jNFNUMiI+Ci0gICAgCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSW5jNENUMiI+Ci0gICAgCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0dHIxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9jaXJjdWxhci9JbmNsdWRlNS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL2NpcmN1bGFyL0luY2x1ZGU1LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTgxN2FiZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL2NpcmN1bGFyL0luY2x1ZGU1LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgCi0gICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iIAotICAgIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAotICAgIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIj4KLQotCTx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iSW5jbHVkZTYueHNkIj48L3hzZDppbmNsdWRlPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSW5jNUNUMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciIG1heE9jY3Vycz0iMjUiPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotCi0gICAgPHhzZDpncm91cCBuYW1lPSJJbmM1R3IxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Z3JvdXA+Ci0KLSAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJJbmM1QXR0cjEiIHR5cGU9InRuczpJbmM1U1QxIj48L3hzZDphdHRyaWJ1dGU+Ci0KLSAgICA8eHNkOmF0dHJpYnV0ZUdyb3VwIG5hbWU9IkluYzVBdHRyR3IxIj4KLSAgICAJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXQxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0gICAgPC94c2Q6YXR0cmlidXRlR3JvdXA+Ci0KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iSW5jNUVsZW0xIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkluYzVTVDEiPgotICAgIAk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iSW5jNVNUMiI+Ci0gICAgCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSW5jNUNUMiI+Ci0gICAgCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0dHIxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9jaXJjdWxhci9JbmNsdWRlNi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL2NpcmN1bGFyL0luY2x1ZGU2LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzIzMDMzYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL2NpcmN1bGFyL0luY2x1ZGU2LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgCi0gICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iIAotICAgIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAotICAgIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIiB4bWxuczpRMT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPgotPCEtLSAKLSAgICA8eHNkOmltcG9ydCBzY2hlbWFMb2NhdGlvbj0iSW1wb3J0MS54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPjwveHNkOmltcG9ydD4KLSAtLT4KLSAgIAk8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249IkluY2x1ZGUyLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQk8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249IkluY2x1ZGU1LnhzZCI+PC94c2Q6aW5jbHVkZT4KLQkKLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkluYzZDVDEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtYXhPY2N1cnM9IjI1Ij48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLQotICAgIDx4c2Q6Z3JvdXAgbmFtZT0iSW5jNkdyMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmdyb3VwPgotCi0gICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0iSW5jNkF0dHIxIiB0eXBlPSJ0bnM6SW5jNlNUMSI+PC94c2Q6YXR0cmlidXRlPgotCi0gICAgPHhzZDphdHRyaWJ1dGVHcm91cCBuYW1lPSJJbmM2QXR0ckdyMSI+Ci0gICAgCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0MSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotICAgIDwveHNkOmF0dHJpYnV0ZUdyb3VwPgotCi0gICAgPHhzZDplbGVtZW50IG5hbWU9IkluYzZFbGVtMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLTwhLS0gICAgPHhzZDplbGVtZW50IG5hbWU9IkluYzZFbGVtMSIgdHlwZT0iUTE6SW1wQ1QxIj48L3hzZDplbGVtZW50Pi0tPgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkluYzZTVDEiPgotICAgIAk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iSW5jNlNUMiI+Ci0gICAgCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSW5jNkNUMiI+Ci0gICAgCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0dHIxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9jaXJjdWxhci90ZXN0L01haW4wMDEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9JbmNsdWRlcy9jaXJjdWxhci90ZXN0L01haW4wMDEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZWZkMzJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvY2lyY3VsYXIvdGVzdC9NYWluMDAxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgeG1sbnM6cD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPgotCi0JPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uL0luY2x1ZGU0LnhzZCI+PC9pbmNsdWRlPgotCi0JPGVsZW1lbnQgbmFtZT0iTWFpbkVsZW0xIiB0eXBlPSJzdHJpbmciPgotCQk8YW5ub3RhdGlvbj4KLQkJCTxhcHBpbmZvPgotCQkJCTxwOkltcEVsZW0xPjwvcDpJbXBFbGVtMT4KLQkJCTwvYXBwaW5mbz4KLQkJPC9hbm5vdGF0aW9uPgotCTwvZWxlbWVudD4KLTwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvY2lyY3VsYXIvdGVzdC9NYWluMDAyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvSW5jbHVkZXMvY2lyY3VsYXIvdGVzdC9NYWluMDAyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWFlODJhMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL0luY2x1ZGVzL2NpcmN1bGFyL3Rlc3QvTWFpbjAwMi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHhtbG5zOnA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij4KLQotCTxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi9JbmNsdWRlMS54c2QiPjwvaW5jbHVkZT4KLQotCTxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi9JbmNsdWRlMi54c2QiPjwvaW5jbHVkZT4KLQkKLQk8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vSW5jbHVkZTMueHNkIj48L2luY2x1ZGU+Ci0KLQk8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vSW5jbHVkZTQueHNkIj48L2luY2x1ZGU+Ci0JCi0JPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uL0luY2x1ZGU1LnhzZCI+PC9pbmNsdWRlPgotCQotCTxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi9JbmNsdWRlNi54c2QiPjwvaW5jbHVkZT4KLQkKLQk8ZWxlbWVudCBuYW1lPSJNYWluRWxlbTEiIHR5cGU9InN0cmluZyI+Ci0JCTxhbm5vdGF0aW9uPgotCQkJPGFwcGluZm8+Ci0JCQkJPHA6SW1wRWxlbTE+PC9wOkltcEVsZW0xPgotCQkJPC9hcHBpbmZvPgotCQk8L2Fubm90YXRpb24+Ci0JPC9lbGVtZW50PgotPC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9TaW1wbGUvSW1wb3J0MDAxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvU2ltcGxlL0ltcG9ydDAwMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwMTMxNDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9TaW1wbGUvSW1wb3J0MDAxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3dzZGxUZXN0L0ltcG9ydCIgCi0JeG1sbnM6dG5zPSJodHRwOi8vd3NkbFRlc3QvSW1wb3J0Ij4KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9ImN0MDEiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iZmllbGQxIgotCQkJCXR5cGU9InhzZDpzdHJpbmciPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJCTx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9ImZpZWxkMiIKLQkJCQl0eXBlPSJ4c2Q6c3RyaW5nIj4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQk8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJmaWVsZDMiCi0JCQkJdHlwZT0ieHNkOnN0cmluZyI+Ci0JCQk8L3hzZDplbGVtZW50PgotCQkJPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iZmllbGQ0IgotCQkJCXR5cGU9InhzZDpzdHJpbmciPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJCTx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9ImZpZWxkNSIKLQkJCQl0eXBlPSJ4c2Q6c3RyaW5nIj4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmNvbXBsZXhUeXBlPgotCTx4c2Q6ZWxlbWVudCBuYW1lPSJpbXAxRWxlbWVudCIgdHlwZT0idG5zOmN0MDEiIC8+Ci08L3hzZDpzY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1NpbXBsZS9JbXBvcnQwMDIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9TaW1wbGUvSW1wb3J0MDAyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQ2NjNmZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1NpbXBsZS9JbXBvcnQwMDIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3NkbFRlc3QvSW1wb3J0Ij4KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9ImN0MDIiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iZmllbGQxIgotCQkJCXR5cGU9InhzZDpzdHJpbmciPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJCTx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9ImZpZWxkMiIKLQkJCQl0eXBlPSJ4c2Q6c3RyaW5nIj4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQk8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJmaWVsZDMiCi0JCQkJdHlwZT0ieHNkOnN0cmluZyI+Ci0JCQk8L3hzZDplbGVtZW50PgotCQkJPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iZmllbGQ0IgotCQkJCXR5cGU9InhzZDpzdHJpbmciPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJCTx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9ImZpZWxkNSIKLQkJCQl0eXBlPSJ4c2Q6c3RyaW5nIj4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9TaW1wbGUvSW1wb3J0MDAzLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvU2ltcGxlL0ltcG9ydDAwMy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5MmJlZGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9TaW1wbGUvSW1wb3J0MDAzLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3dzZGxUZXN0L0ltcG9ydCIgeG1sbnM6dG5zPSJodHRwOi8vd3NkbFRlc3QvSW1wb3J0Ij4KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9ImN0MDMiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iZmllbGQxIgotCQkJCXR5cGU9InhzZDpzdHJpbmciPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJCTx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9ImZpZWxkMiIKLQkJCQl0eXBlPSJ4c2Q6c3RyaW5nIj4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQk8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJmaWVsZDMiCi0JCQkJdHlwZT0ieHNkOnN0cmluZyI+Ci0JCQk8L3hzZDplbGVtZW50PgotCQkJPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iZmllbGQ0IgotCQkJCXR5cGU9InhzZDpzdHJpbmciPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJCTx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9ImZpZWxkNSIKLQkJCQl0eXBlPSJ4c2Q6c3RyaW5nIj4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmNvbXBsZXhUeXBlPgotCi0JPHhzZDplbGVtZW50IG5hbWU9ImltcDNFbGVtZW50Ij4KLQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ0bnM6Y3QwMyI+PC94c2Q6ZWxlbWVudD4KLQkJCTwveHNkOnNlcXVlbmNlPgotCQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8L3hzZDplbGVtZW50PgotPC94c2Q6c2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9TaW1wbGUvVGVzdC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1NpbXBsZS9UZXN0LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjBhNTY3Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1NpbXBsZS9UZXN0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93c2RsVGVzdCIKLQl4bWxuczppbXA9Imh0dHA6Ly93c2RsVGVzdC9JbXBvcnQiIHhtbG5zOnRucz0iaHR0cDovL3dzZGxUZXN0IgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgotCTx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3dzZGxUZXN0L0ltcG9ydCIKLQkJc2NoZW1hTG9jYXRpb249IkltcG9ydDAwMS54c2QiIC8+Ci0JPHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3NkbFRlc3QvSW1wb3J0IgotCQlzY2hlbWFMb2NhdGlvbj0iSW1wb3J0MDAyLnhzZCIgLz4KLQk8eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93c2RsVGVzdC9JbXBvcnQiCi0JCXNjaGVtYUxvY2F0aW9uPSJJbXBvcnQwMDMueHNkIiAvPgotCTx4c2Q6ZWxlbWVudCBuYW1lPSJvcGVyYXRpb24xIj4KLQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJPHhzZDplbGVtZW50IG5hbWU9ImlucHV0MSIgbmlsbGFibGU9InRydWUiIHR5cGU9InhzZDppbnQiIC8+Ci0JCQkJPHhzZDplbGVtZW50IG5hbWU9ImluIiB0eXBlPSJpbXA6Y3QwMyIgLz4KLQkJCTwveHNkOnNlcXVlbmNlPgotCQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8L3hzZDplbGVtZW50PgotCTx4c2Q6ZWxlbWVudCBuYW1lPSJvcGVyYXRpb24xUmVzcG9uc2UiPgotCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0ib3V0cHV0MSIgbmlsbGFibGU9InRydWUiIHR5cGU9ImltcDpjdDAyIiAvPgotCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCTwveHNkOmNvbXBsZXhUeXBlPgotCTwveHNkOmVsZW1lbnQ+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvSW1wb3J0MS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC9JbXBvcnQxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjY5ZmNjZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC9JbXBvcnQxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgCi0gICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIgCi0gICAgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCi0gICAgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkltcENUMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciIG1heE9jY3Vycz0iMjUiPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotCi0gICAgPHhzZDpncm91cCBuYW1lPSJJbXBHcjEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpncm91cD4KLQotICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9IkltcEF0dHIxIiB0eXBlPSJ0bnM6SW1wU1QxIj48L3hzZDphdHRyaWJ1dGU+Ci0KLSAgICA8eHNkOmF0dHJpYnV0ZUdyb3VwIG5hbWU9IkltcEF0dHJHcjEiPgotICAgIAk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdDEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLSAgICA8L3hzZDphdHRyaWJ1dGVHcm91cD4KLQotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJJbXBFbGVtMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJJbXBTVDEiPgotICAgIAk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iSW1wU1QyIj4KLSAgICAJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJJbXBDVDIiPgotICAgIAk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdHRyMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL0ltcG9ydDIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvSW1wb3J0Mi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkYmE3NzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvSW1wb3J0Mi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIAotICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiIAotICAgIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAotICAgIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJJbXAyQ1QxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyIgbWF4T2NjdXJzPSIyNSI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0KLSAgICA8eHNkOmdyb3VwIG5hbWU9IkltcDJHcjEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpncm91cD4KLQotICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9IkltcDJBdHRyMSIgdHlwZT0idG5zOkltcDJTVDEiPjwveHNkOmF0dHJpYnV0ZT4KLQotICAgIDx4c2Q6YXR0cmlidXRlR3JvdXAgbmFtZT0iSW1wMkF0dHJHcjEiPgotICAgIAk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdDEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLSAgICA8L3hzZDphdHRyaWJ1dGVHcm91cD4KLQotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJJbXAyRWxlbTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iSW1wMlNUMSI+Ci0gICAgCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJJbXAyU1QyIj4KLSAgICAJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJJbXAyQ1QyIj4KLSAgICAJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXR0cjEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC9JbXBvcnQzLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL0ltcG9ydDMueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MzE1ZDIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL0ltcG9ydDMueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IiB4bWxuczpRMT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQ0Ij4KLQotICAgIDx4c2Q6aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSJJbXBvcnQ0LnhzZCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydDQiPjwveHNkOmltcG9ydD4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkltcDNDVDEiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtYXhPY2N1cnM9IjI1Ij48L3hzZDplbGVtZW50PgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLQotCTx4c2Q6Z3JvdXAgbmFtZT0iSW1wM0dyMSI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmdyb3VwPgotCi0JPHhzZDphdHRyaWJ1dGUgbmFtZT0iSW1wM0F0dHIxIiB0eXBlPSJ0bnM6SW1wM1NUMSI+PC94c2Q6YXR0cmlidXRlPgotCi0JPHhzZDphdHRyaWJ1dGVHcm91cCBuYW1lPSJJbXAzQXR0ckdyMSI+Ci0JCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0MSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotCTwveHNkOmF0dHJpYnV0ZUdyb3VwPgotCi0JPHhzZDplbGVtZW50IG5hbWU9IkltcDNFbGVtMSIgdHlwZT0iUTE6SW1wNENUMSI+PC94c2Q6ZWxlbWVudD4KLQotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJJbXAzU1QxIj4KLQkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48L3hzZDpyZXN0cmljdGlvbj4KLQk8L3hzZDpzaW1wbGVUeXBlPgotCi0JPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkltcDNTVDIiPgotCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjwveHNkOnJlc3RyaWN0aW9uPgotCTwveHNkOnNpbXBsZVR5cGU+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkltcDNDVDIiPgotCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdHRyMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotCTwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL0ltcG9ydDQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvSW1wb3J0NC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0NTE5NTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvSW1wb3J0NC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIAotICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQ0IiAKLSAgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgICB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0NCIgeG1sbnM6UTE9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij4KLQotICAgIDx4c2Q6aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSJJbXBvcnQzLnhzZCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+PC94c2Q6aW1wb3J0PgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSW1wNENUMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciIG1heE9jY3Vycz0iMjUiPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotCi0gICAgPHhzZDpncm91cCBuYW1lPSJJbXA0R3IxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Z3JvdXA+Ci0KLSAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJJbXA0QXR0cjEiIHR5cGU9InRuczpJbXA0U1QxIj48L3hzZDphdHRyaWJ1dGU+Ci0KLSAgICA8eHNkOmF0dHJpYnV0ZUdyb3VwIG5hbWU9IkltcDRBdHRyR3IxIj4KLSAgICAJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXQxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0gICAgPC94c2Q6YXR0cmlidXRlR3JvdXA+Ci0KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iSW1wNEVsZW0xIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkltcDRTVDEiPgotICAgIAk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iSW1wNFNUMiI+Ci0gICAgCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSW1wNENUMiI+Ci0gICAgCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0dHIxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0KLQotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJJbXA0RWxlbTIiIHR5cGU9IlExOkltcDNDVDIiPjwveHNkOmVsZW1lbnQ+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvSW1wb3J0NS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC9JbXBvcnQ1LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWUyMGU4NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC9JbXBvcnQ1LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgCi0gICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydDUiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAotICAgIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQ1IiB4bWxuczpRMT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQ2Ij4KLQotICAgIDx4c2Q6aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSJJbXBvcnQ2LnhzZCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydDYiPjwveHNkOmltcG9ydD4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkltcDVDVDEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtYXhPY2N1cnM9IjI1Ij48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLQotICAgIDx4c2Q6Z3JvdXAgbmFtZT0iSW1wNUdyMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmdyb3VwPgotCi0gICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0iSW1wNUF0dHIxIiB0eXBlPSJ0bnM6SW1wNVNUMSI+PC94c2Q6YXR0cmlidXRlPgotCi0gICAgPHhzZDphdHRyaWJ1dGVHcm91cCBuYW1lPSJJbXA1QXR0ckdyMSI+Ci0gICAgCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0MSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotICAgIDwveHNkOmF0dHJpYnV0ZUdyb3VwPgotCi0gICAgPHhzZDplbGVtZW50IG5hbWU9IkltcDVFbGVtMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJJbXA1U1QxIj4KLSAgICAJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkltcDVTVDIiPgotICAgIAk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkltcDVDVDIiPgotICAgIAk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdHRyMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotCi0KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iSW1wNUVsZW0yIiB0eXBlPSJRMTpJbXA2Q1QxIj48L3hzZDplbGVtZW50PgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL0ltcG9ydDYueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvSW1wb3J0Ni54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkMTVlYWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvSW1wb3J0Ni54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIAotICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQ2IiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0NiI+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkltcDZDVDEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtYXhPY2N1cnM9IjI1Ij48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLQotICAgIDx4c2Q6Z3JvdXAgbmFtZT0iSW1wNkdyMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmdyb3VwPgotCi0gICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0iSW1wNkF0dHIxIiB0eXBlPSJ0bnM6SW1wNlNUMSI+PC94c2Q6YXR0cmlidXRlPgotCi0gICAgPHhzZDphdHRyaWJ1dGVHcm91cCBuYW1lPSJJbXA2QXR0ckdyMSI+Ci0gICAgCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0MSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotICAgIDwveHNkOmF0dHJpYnV0ZUdyb3VwPgotCi0gICAgPHhzZDplbGVtZW50IG5hbWU9IkltcDZFbGVtMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJJbXA2U1QxIj4KLSAgICAJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkltcDZTVDIiPgotICAgIAk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkltcDZDVDIiPgotICAgIAk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdHRyMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotCi0KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iSW1wNkVsZW0yIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL0luY2x1ZGUxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL0luY2x1ZGUxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTRkOTZkNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC9JbmNsdWRlMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIAotICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIiAKLSAgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgICB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkluYzFDVDEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtYXhPY2N1cnM9IjI1Ij48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLQotICAgIDx4c2Q6Z3JvdXAgbmFtZT0iSW5jMUdyMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmdyb3VwPgotCi0gICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0iSW5jMUF0dHIxIiB0eXBlPSJ0bnM6SW5jMVNUMSI+PC94c2Q6YXR0cmlidXRlPgotCi0gICAgPHhzZDphdHRyaWJ1dGVHcm91cCBuYW1lPSJJbmMxQXR0ckdyMSI+Ci0gICAgCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0MSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotICAgIDwveHNkOmF0dHJpYnV0ZUdyb3VwPgotCi0gICAgPHhzZDplbGVtZW50IG5hbWU9IkluYzFFbGVtMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJJbmMxU1QxIj4KLSAgICAJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkluYzFTVDIiPgotICAgIAk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkluYzFDVDIiPgotICAgIAk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdHRyMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL0luY2x1ZGUyLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL0luY2x1ZGUyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzZhZDRhMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC9JbmNsdWRlMi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLQk8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249IkluY2x1ZGUzLnhzZCI+PC94c2Q6aW5jbHVkZT4KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkluYzJDVDEiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtYXhPY2N1cnM9IjI1Ij48L3hzZDplbGVtZW50PgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLQotCTx4c2Q6Z3JvdXAgbmFtZT0iSW5jMkdyMSI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmdyb3VwPgotCi0JPHhzZDphdHRyaWJ1dGUgbmFtZT0iSW5jMkF0dHIxIiB0eXBlPSJ0bnM6SW5jMlNUMSI+PC94c2Q6YXR0cmlidXRlPgotCi0JPHhzZDphdHRyaWJ1dGVHcm91cCBuYW1lPSJJbmMyQXR0ckdyMSI+Ci0JCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0MSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotCTwveHNkOmF0dHJpYnV0ZUdyb3VwPgotCi0JPHhzZDplbGVtZW50IG5hbWU9IkluYzJFbGVtMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJJbmMyU1QxIj4KLQkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48L3hzZDpyZXN0cmljdGlvbj4KLQk8L3hzZDpzaW1wbGVUeXBlPgotCi0JPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkluYzJTVDIiPgotCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjwveHNkOnJlc3RyaWN0aW9uPgotCTwveHNkOnNpbXBsZVR5cGU+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkluYzJDVDIiPgotCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdHRyMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotCTwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL0luY2x1ZGUzLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL0luY2x1ZGUzLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTllMDIwNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC9JbmNsdWRlMy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLQk8eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249IkluY2x1ZGU0LnhzZCI+PC94c2Q6aW5jbHVkZT4KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkluYzNDVDEiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtYXhPY2N1cnM9IjI1Ij48L3hzZDplbGVtZW50PgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLQotCTx4c2Q6Z3JvdXAgbmFtZT0iSW5jM0dyMSI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmdyb3VwPgotCi0JPHhzZDphdHRyaWJ1dGUgbmFtZT0iSW5jM0F0dHIxIiB0eXBlPSJ0bnM6SW5jM1NUMSI+PC94c2Q6YXR0cmlidXRlPgotCi0JPHhzZDphdHRyaWJ1dGVHcm91cCBuYW1lPSJJbmMzQXR0ckdyMSI+Ci0JCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0MSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotCTwveHNkOmF0dHJpYnV0ZUdyb3VwPgotCi0JPHhzZDplbGVtZW50IG5hbWU9IkluYzNFbGVtMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJJbmMzU1QxIj4KLQkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48L3hzZDpyZXN0cmljdGlvbj4KLQk8L3hzZDpzaW1wbGVUeXBlPgotCi0JPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkluYzNTVDIiPgotCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjwveHNkOnJlc3RyaWN0aW9uPgotCTwveHNkOnNpbXBsZVR5cGU+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkluYzNDVDIiPgotCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdHRyMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotCTwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL0luY2x1ZGU0LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL0luY2x1ZGU0LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjQ1OWIxNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC9JbmNsdWRlNC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIAotICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIiAKLSAgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgICB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkluYzRDVDEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtYXhPY2N1cnM9IjI1Ij48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLQotICAgIDx4c2Q6Z3JvdXAgbmFtZT0iSW5jNEdyMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmdyb3VwPgotCi0gICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0iSW5jNEF0dHIxIiB0eXBlPSJ0bnM6SW5jNFNUMSI+PC94c2Q6YXR0cmlidXRlPgotCi0gICAgPHhzZDphdHRyaWJ1dGVHcm91cCBuYW1lPSJJbmM0QXR0ckdyMSI+Ci0gICAgCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0MSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotICAgIDwveHNkOmF0dHJpYnV0ZUdyb3VwPgotCi0gICAgPHhzZDplbGVtZW50IG5hbWU9IkluYzRFbGVtMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJJbmM0U1QxIj4KLSAgICAJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkluYzRTVDIiPgotICAgIAk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkluYzRDVDIiPgotICAgIAk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdHRyMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL0luY2x1ZGU1LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL0luY2x1ZGU1LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzgyYzM2NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC9JbmNsdWRlNS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIAotICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIiAKLSAgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgICB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkluYzVDVDEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtYXhPY2N1cnM9IjI1Ij48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLQotICAgIDx4c2Q6Z3JvdXAgbmFtZT0iSW5jNUdyMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmdyb3VwPgotCi0gICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0iSW5jNUF0dHIxIiB0eXBlPSJ0bnM6SW5jNVNUMSI+PC94c2Q6YXR0cmlidXRlPgotCi0gICAgPHhzZDphdHRyaWJ1dGVHcm91cCBuYW1lPSJJbmM1QXR0ckdyMSI+Ci0gICAgCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0MSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotICAgIDwveHNkOmF0dHJpYnV0ZUdyb3VwPgotCi0gICAgPHhzZDplbGVtZW50IG5hbWU9IkluYzVFbGVtMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJJbmM1U1QxIj4KLSAgICAJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkluYzVTVDIiPgotICAgIAk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkluYzVDVDIiPgotICAgIAk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdHRyMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL0luY2x1ZGU2LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL0luY2x1ZGU2LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmI2ZDRmMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC9JbmNsdWRlNi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIAotICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIiAKLSAgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgICB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIgeG1sbnM6UTE9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij4KLQotICAgIDx4c2Q6aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSJJbXBvcnQxLnhzZCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+PC94c2Q6aW1wb3J0PgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSW5jNkNUMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciIG1heE9jY3Vycz0iMjUiPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotCi0gICAgPHhzZDpncm91cCBuYW1lPSJJbmM2R3IxIj4KLSAgICAJPHhzZDpzZXF1ZW5jZT4KLSAgICAJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Z3JvdXA+Ci0KLSAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJJbmM2QXR0cjEiIHR5cGU9InRuczpJbmM2U1QxIj48L3hzZDphdHRyaWJ1dGU+Ci0KLSAgICA8eHNkOmF0dHJpYnV0ZUdyb3VwIG5hbWU9IkluYzZBdHRyR3IxIj4KLSAgICAJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXQxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0gICAgPC94c2Q6YXR0cmlidXRlR3JvdXA+Ci0KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iSW5jNkVsZW0xIiB0eXBlPSJRMTpJbXBDVDEiPjwveHNkOmVsZW1lbnQ+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iSW5jNlNUMSI+Ci0gICAgCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJJbmM2U1QyIj4KLSAgICAJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJJbmM2Q1QyIj4KLSAgICAJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYXR0cjEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC90ZXN0L01haW4wMDEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvdGVzdC9NYWluMDAxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTU1YTlkNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC90ZXN0L01haW4wMDEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiPgotCTxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi9JbmNsdWRlMS54c2QiPjwvaW5jbHVkZT4KLTwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL3Rlc3QvTWFpbjAwMi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC90ZXN0L01haW4wMDIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTJhOGIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL3Rlc3QvTWFpbjAwMi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLSAgICB4bWxuczppbXA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIj4KLQk8aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSIuLi9JbXBvcnQxLnhzZCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+PC9pbXBvcnQ+Ci08L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC90ZXN0L01haW4wMDMueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvdGVzdC9NYWluMDAzLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjFkZDM2OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC90ZXN0L01haW4wMDMueHNkCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0gICAgeG1sbnM6aW1wPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCI+Ci0JPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uL0luY2x1ZGUxLnhzZCI+PC9pbmNsdWRlPgotCTxpbXBvcnQgc2NoZW1hTG9jYXRpb249Ii4uL0ltcG9ydDEueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L2ltcG9ydD4KLTwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL3Rlc3QvTWFpbjAwNC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC90ZXN0L01haW4wMDQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNzliY2VhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL3Rlc3QvTWFpbjAwNC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLSAgICB4bWxuczppbXA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIj4KLQk8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vSW5jbHVkZTEueHNkIj48L2luY2x1ZGU+Ci0JPGltcG9ydCBzY2hlbWFMb2NhdGlvbj0iLi4vSW1wb3J0My54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPjwvaW1wb3J0PgotPC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvdGVzdC9NYWluMDA1LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL3Rlc3QvTWFpbjAwNS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjZWFlMTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvdGVzdC9NYWluMDA1LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLSAgICB4bWxuczppbXA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IgotICAgIHhtbG5zOmltcDQ9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0NCIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCI+Ci0JPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uL0luY2x1ZGUxLnhzZCI+PC9pbmNsdWRlPgotCTxpbXBvcnQgc2NoZW1hTG9jYXRpb249Ii4uL0ltcG9ydDEueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L2ltcG9ydD4KLQk8aW1wb3J0IHNjaGVtYUxvY2F0aW9uPSIuLi9JbXBvcnQyLnhzZCIgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+PC9pbXBvcnQ+Ci0JPGltcG9ydCBzY2hlbWFMb2NhdGlvbj0iLi4vSW1wb3J0My54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPjwvaW1wb3J0PgotCTxpbXBvcnQgc2NoZW1hTG9jYXRpb249Ii4uL0ltcG9ydDQueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0NCI+PC9pbXBvcnQ+Ci08L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC90ZXN0L01haW4wMDYueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvdGVzdC9NYWluMDA2LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjI5ZDMzOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC90ZXN0L01haW4wMDYueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB4bWxuczpwPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+Ci0JPGltcG9ydCBzY2hlbWFMb2NhdGlvbj0iLi4vSW1wb3J0MS54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPjwvaW1wb3J0PgotCi0JPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uL0luY2x1ZGUxLnhzZCI+PC9pbmNsdWRlPgotCi0JPGVsZW1lbnQgbmFtZT0iTWFpbkVsZW0xIiB0eXBlPSJ0bnM6SW5jMUNUMSI+Ci0JCTxhbm5vdGF0aW9uPgotCQkJPGFwcGluZm8+Ci0JCQkJPHA6SW1wRWxlbTE+PC9wOkltcEVsZW0xPgotCQkJPC9hcHBpbmZvPgotCQk8L2Fubm90YXRpb24+Ci0JPC9lbGVtZW50PgotPC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvdGVzdC9NYWluMDA3LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL3Rlc3QvTWFpbjAwNy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyMmE2ODcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvdGVzdC9NYWluMDA3LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgeG1sbnM6cD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPgotCTxpbXBvcnQgc2NoZW1hTG9jYXRpb249Ii4uL0ltcG9ydDEueHNkIiBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij48L2ltcG9ydD4KLQotCTxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi9JbmNsdWRlMS54c2QiPjwvaW5jbHVkZT4KLQkKLQk8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vSW5jbHVkZTIueHNkIj48L2luY2x1ZGU+Ci0KLQk8ZWxlbWVudCBuYW1lPSJNYWluRWxlbTEiIHR5cGU9InRuczpJbmMxQ1QxIj4KLQkJPGFubm90YXRpb24+Ci0JCQk8YXBwaW5mbz4KLQkJCQk8cDpJbXBFbGVtMT48L3A6SW1wRWxlbTE+Ci0JCQk8L2FwcGluZm8+Ci0JCTwvYW5ub3RhdGlvbj4KLQk8L2VsZW1lbnQ+Ci08L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC90ZXN0L01haW4wMDgueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvdGVzdC9NYWluMDA4LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODU4OWMwNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC90ZXN0L01haW4wMDgueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB4bWxuczpwPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+Ci0JPGltcG9ydCBzY2hlbWFMb2NhdGlvbj0iLi4vSW1wb3J0MS54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPjwvaW1wb3J0PgotCi0JPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uL0luY2x1ZGUxLnhzZCI+PC9pbmNsdWRlPgotCQotCTxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi9JbmNsdWRlMi54c2QiPjwvaW5jbHVkZT4KLQkKLQk8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vSW5jbHVkZTMueHNkIj48L2luY2x1ZGU+Ci0KLQk8ZWxlbWVudCBuYW1lPSJNYWluRWxlbTEiIHR5cGU9InRuczpJbmMxQ1QxIj4KLQkJPGFubm90YXRpb24+Ci0JCQk8YXBwaW5mbz4KLQkJCQk8cDpJbXBFbGVtMT48L3A6SW1wRWxlbTE+Ci0JCQk8L2FwcGluZm8+Ci0JCTwvYW5ub3RhdGlvbj4KLQk8L2VsZW1lbnQ+Ci0KLSAgICA8YXR0cmlidXRlIG5hbWU9Ik1haW44QXR0cmlidXRlIiB0eXBlPSJ0bnM6SW5jM1NUMSI+PC9hdHRyaWJ1dGU+Ci08L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC90ZXN0L01haW4wMDkueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvdGVzdC9NYWluMDA5LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDE4NmE0YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC90ZXN0L01haW4wMDkueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB4bWxuczpwPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+Ci0JPGltcG9ydCBzY2hlbWFMb2NhdGlvbj0iLi4vSW1wb3J0MS54c2QiIG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPjwvaW1wb3J0PgotCi0JPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uL0luY2x1ZGUxLnhzZCI+PC9pbmNsdWRlPgotCQotCTxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi9JbmNsdWRlMi54c2QiPjwvaW5jbHVkZT4KLQotCTxlbGVtZW50IG5hbWU9Ik1haW5FbGVtMSIgdHlwZT0idG5zOkluYzFDVDEiPgotCQk8YW5ub3RhdGlvbj4KLQkJCTxhcHBpbmZvPgotCQkJCTxwOkltcEVsZW0xPjwvcDpJbXBFbGVtMT4KLQkJCTwvYXBwaW5mbz4KLQkJPC9hbm5vdGF0aW9uPgotCTwvZWxlbWVudD4KLQotCTxjb21wbGV4VHlwZSBuYW1lPSJNYWluOUNUMSI+Ci0JCTxjb21wbGV4Q29udGVudD4KLQkJCTxleHRlbnNpb24gYmFzZT0idG5zOkluYzNDVDEiPjwvZXh0ZW5zaW9uPgotCQk8L2NvbXBsZXhDb250ZW50PgotCTwvY29tcGxleFR5cGU+Ci08L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC90ZXN0L01haW4wMDlhLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL3Rlc3QvTWFpbjAwOWEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxY2IwOTFjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL3Rlc3QvTWFpbjAwOWEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB4bWxuczpwPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+Ci0JPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uL0luY2x1ZGUxLnhzZCI+PC9pbmNsdWRlPgotCQotCTxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi9JbmNsdWRlMi54c2QiPjwvaW5jbHVkZT4KLQkKLQk8ZWxlbWVudCBuYW1lPSJNYWluRWxlbTEiIHR5cGU9InRuczpJbmMxQ1QxIj4KLQkJPGFubm90YXRpb24+Ci0JCQk8YXBwaW5mbz4KLQkJCQk8cDpJbXBFbGVtMT48L3A6SW1wRWxlbTE+Ci0JCQk8L2FwcGluZm8+Ci0JCTwvYW5ub3RhdGlvbj4KLQk8L2VsZW1lbnQ+Ci0KLQk8Y29tcGxleFR5cGUgbmFtZT0iTWFpbjlDVDEiPgotCQk8Y29tcGxleENvbnRlbnQ+Ci0JCQk8ZXh0ZW5zaW9uIGJhc2U9InRuczpJbmM0Q1QxIj48L2V4dGVuc2lvbj4KLQkJPC9jb21wbGV4Q29udGVudD4KLQk8L2NvbXBsZXhUeXBlPgotPC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvdGVzdC9NYWluMDA5Yi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC90ZXN0L01haW4wMDliLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjhhYmYwMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC90ZXN0L01haW4wMDliLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgeG1sbnM6cD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPgotCTxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi9JbmNsdWRlMS54c2QiPjwvaW5jbHVkZT4KLQkKLQk8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vSW5jbHVkZTIueHNkIj48L2luY2x1ZGU+Ci0KLQk8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vSW5jbHVkZTMueHNkIj48L2luY2x1ZGU+Ci0JCi0JPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uL0luY2x1ZGU0LnhzZCI+PC9pbmNsdWRlPgotCQotCTxlbGVtZW50IG5hbWU9Ik1haW5FbGVtMSIgdHlwZT0idG5zOkluYzFDVDEiPgotCQk8YW5ub3RhdGlvbj4KLQkJCTxhcHBpbmZvPgotCQkJCTxwOkltcEVsZW0xPjwvcDpJbXBFbGVtMT4KLQkJCTwvYXBwaW5mbz4KLQkJPC9hbm5vdGF0aW9uPgotCTwvZWxlbWVudD4KLQotCTxjb21wbGV4VHlwZSBuYW1lPSJNYWluOUNUMSI+Ci0JCTxjb21wbGV4Q29udGVudD4KLQkJCTxleHRlbnNpb24gYmFzZT0idG5zOkluYzRDVDEiPjwvZXh0ZW5zaW9uPgotCQk8L2NvbXBsZXhDb250ZW50PgotCTwvY29tcGxleFR5cGU+Ci08L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC90ZXN0L01haW4wMDljLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL3Rlc3QvTWFpbjAwOWMueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NTBjMjI1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL3Rlc3QvTWFpbjAwOWMueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB4bWxuczpwPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+Ci0JPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uL0luY2x1ZGUxLnhzZCI+PC9pbmNsdWRlPgotCQotCTxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi9JbmNsdWRlMi54c2QiPjwvaW5jbHVkZT4KLQotCTxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi9JbmNsdWRlMy54c2QiPjwvaW5jbHVkZT4KLQkKLQk8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vSW5jbHVkZTQueHNkIj48L2luY2x1ZGU+Ci0JCi0JPGVsZW1lbnQgbmFtZT0iTWFpbkVsZW0xIiB0eXBlPSJzdHJpbmciPgotCQk8YW5ub3RhdGlvbj4KLQkJCTxhcHBpbmZvPgotCQkJCTxwOkltcEVsZW0xPjwvcDpJbXBFbGVtMT4KLQkJCTwvYXBwaW5mbz4KLQkJPC9hbm5vdGF0aW9uPgotCTwvZWxlbWVudD4KLQotCTxjb21wbGV4VHlwZSBuYW1lPSJNYWluOUNUMSI+Ci0JCTxjb21wbGV4Q29udGVudD4KLQkJCTxleHRlbnNpb24gYmFzZT0idG5zOkluYzRDVDEiPjwvZXh0ZW5zaW9uPgotCQk8L2NvbXBsZXhDb250ZW50PgotCTwvY29tcGxleFR5cGU+Ci08L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC90ZXN0L01haW4wMDlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL3Rlc3QvTWFpbjAwOWQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYzljMzI4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL3Rlc3QvTWFpbjAwOWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB4bWxuczpwPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+Ci0JPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uL0luY2x1ZGUxLnhzZCI+PC9pbmNsdWRlPgotCQotCTxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi9JbmNsdWRlMi54c2QiPjwvaW5jbHVkZT4KLQotCTxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi9JbmNsdWRlMy54c2QiPjwvaW5jbHVkZT4KLQotCTxlbGVtZW50IG5hbWU9Ik1haW5FbGVtMSIgdHlwZT0ic3RyaW5nIj4KLQkJPGFubm90YXRpb24+Ci0JCQk8YXBwaW5mbz4KLQkJCQk8cDpJbXBFbGVtMT48L3A6SW1wRWxlbTE+Ci0JCQk8L2FwcGluZm8+Ci0JCTwvYW5ub3RhdGlvbj4KLQk8L2VsZW1lbnQ+Ci0KLQk8Y29tcGxleFR5cGUgbmFtZT0iTWFpbjlDVDEiPgotCQk8Y29tcGxleENvbnRlbnQ+Ci0JCQk8ZXh0ZW5zaW9uIGJhc2U9InRuczpJbmM0Q1QxIj48L2V4dGVuc2lvbj4KLQkJPC9jb21wbGV4Q29udGVudD4KLQk8L2NvbXBsZXhUeXBlPgotPC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvdGVzdC9NYWluMDA5ZS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC90ZXN0L01haW4wMDllLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWEzZWNjMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC90ZXN0L01haW4wMDllLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgeG1sbnM6cD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPgotCTxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi9JbmNsdWRlMS54c2QiPjwvaW5jbHVkZT4KLQkKLQk8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vSW5jbHVkZTIueHNkIj48L2luY2x1ZGU+Ci0KLQk8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vSW5jbHVkZTQueHNkIj48L2luY2x1ZGU+Ci0JCi0JPGVsZW1lbnQgbmFtZT0iTWFpbkVsZW0xIiB0eXBlPSJ0bnM6SW5jMUNUMSI+Ci0JCTxhbm5vdGF0aW9uPgotCQkJPGFwcGluZm8+Ci0JCQkJPHA6SW1wRWxlbTE+PC9wOkltcEVsZW0xPgotCQkJPC9hcHBpbmZvPgotCQk8L2Fubm90YXRpb24+Ci0JPC9lbGVtZW50PgotCi0JPGNvbXBsZXhUeXBlIG5hbWU9Ik1haW45Q1QxIj4KLQkJPGNvbXBsZXhDb250ZW50PgotCQkJPGV4dGVuc2lvbiBiYXNlPSJ0bnM6SW5jNENUMSI+PC9leHRlbnNpb24+Ci0JCTwvY29tcGxleENvbnRlbnQ+Ci0JPC9jb21wbGV4VHlwZT4KLTwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL3Rlc3QvTWFpbjAwOWYueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvdGVzdC9NYWluMDA5Zi54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyZWRjNTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvdGVzdC9NYWluMDA5Zi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHhtbG5zOnA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij4KLQk8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vSW5jbHVkZTEueHNkIj48L2luY2x1ZGU+Ci0JCi0JPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uL0luY2x1ZGUyLnhzZCI+PC9pbmNsdWRlPgotCi0JPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uL0luY2x1ZGUzLnhzZCI+PC9pbmNsdWRlPgotCi0JPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uL0EueHNkIj48L2luY2x1ZGU+Ci0JCi0JPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uL0luY2x1ZGU1LnhzZCI+PC9pbmNsdWRlPgotCQotCTxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi9JbmNsdWRlNC54c2QiPjwvaW5jbHVkZT4KLQkKLQk8ZWxlbWVudCBuYW1lPSJNYWluRWxlbTEiIHR5cGU9InN0cmluZyI+Ci0JCTxhbm5vdGF0aW9uPgotCQkJPGFwcGluZm8+Ci0JCQkJPHA6SW1wRWxlbTE+PC9wOkltcEVsZW0xPgotCQkJPC9hcHBpbmZvPgotCQk8L2Fubm90YXRpb24+Ci0JPC9lbGVtZW50PgotCi0JPGNvbXBsZXhUeXBlIG5hbWU9Ik1haW45Q1QxIj4KLQkJPGNvbXBsZXhDb250ZW50PgotCQkJPGV4dGVuc2lvbiBiYXNlPSJ0bnM6SW5jNENUMSI+PC9leHRlbnNpb24+Ci0JCTwvY29tcGxleENvbnRlbnQ+Ci0JPC9jb21wbGV4VHlwZT4KLTwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QvVW51c2VkL3Rlc3QvTWFpbjAwOWcueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvdGVzdC9NYWluMDA5Zy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzMWZhN2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvdGVzdC9NYWluMDA5Zy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHhtbG5zOnA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0Ij4KLQk8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vSW5jbHVkZTEueHNkIj48L2luY2x1ZGU+Ci0JCi0JPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uL0luY2x1ZGUyLnhzZCI+PC9pbmNsdWRlPgotCi0JPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uL0luY2x1ZGUzLnhzZCI+PC9pbmNsdWRlPgotCQotCTxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi9JbmNsdWRlNC54c2QiPjwvaW5jbHVkZT4KLQkKLQk8ZWxlbWVudCBuYW1lPSJNYWluRWxlbTEiIHR5cGU9InRuczpJbmMzQ1QxIj4KLQkJPGFubm90YXRpb24+Ci0JCQk8YXBwaW5mbz4KLQkJCQk8cDpJbXBFbGVtMT48L3A6SW1wRWxlbTE+Ci0JCQk8L2FwcGluZm8+Ci0JCTwvYW5ub3RhdGlvbj4KLQk8L2VsZW1lbnQ+Ci0KLQk8Y29tcGxleFR5cGUgbmFtZT0iTWFpbjlDVDEiPgotCQk8Y29tcGxleENvbnRlbnQ+Ci0JCQk8ZXh0ZW5zaW9uIGJhc2U9InRuczpJbmM0Q1QxIj48L2V4dGVuc2lvbj4KLQkJPC9jb21wbGV4Q29udGVudD4KLQk8L2NvbXBsZXhUeXBlPgotPC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC9VbnVzZWQvdGVzdC9NYWluMDA5aC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC90ZXN0L01haW4wMDloLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjk0OTdkOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL1VudXNlZC90ZXN0L01haW4wMDloLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgeG1sbnM6cD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiPgotCTxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi9JbmNsdWRlMS54c2QiPjwvaW5jbHVkZT4KLQkKLQk8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vSW5jbHVkZTIueHNkIj48L2luY2x1ZGU+Ci0KLQk8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vSW5jbHVkZTMueHNkIj48L2luY2x1ZGU+Ci0JCi0JPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249Ii4uL0luY2x1ZGU0LnhzZCI+PC9pbmNsdWRlPgotCQotCTxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSIuLi9JbmNsdWRlNS54c2QiPjwvaW5jbHVkZT4KLQkKLQk8ZWxlbWVudCBuYW1lPSJNYWluRWxlbTEiIHR5cGU9InRuczpJbmMyQ1QxIj4KLQkJPGFubm90YXRpb24+Ci0JCQk8YXBwaW5mbz4KLQkJCQk8cDpJbXBFbGVtMT48L3A6SW1wRWxlbTE+Ci0JCQk8L2FwcGluZm8+Ci0JCTwvYW5ub3RhdGlvbj4KLQk8L2VsZW1lbnQ+Ci0KLQk8Y29tcGxleFR5cGUgbmFtZT0iTWFpbjlDVDEiPgotCQk8Y29tcGxleENvbnRlbnQ+Ci0JCQk8ZXh0ZW5zaW9uIGJhc2U9InRuczpJbmM0Q1QxIj48L2V4dGVuc2lvbj4KLQkJPC9jb21wbGV4Q29udGVudD4KLQk8L2NvbXBsZXhUeXBlPgotPC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC94bWxuc0NsZWFudXAvSW1wb3J0MS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL3htbG5zQ2xlYW51cC9JbXBvcnQxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjY5ZmNjZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL3htbG5zQ2xlYW51cC9JbXBvcnQxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgCi0gICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIgCi0gICAgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCi0gICAgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkltcENUMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciIG1heE9jY3Vycz0iMjUiPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotCi0gICAgPHhzZDpncm91cCBuYW1lPSJJbXBHcjEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpncm91cD4KLQotICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9IkltcEF0dHIxIiB0eXBlPSJ0bnM6SW1wU1QxIj48L3hzZDphdHRyaWJ1dGU+Ci0KLSAgICA8eHNkOmF0dHJpYnV0ZUdyb3VwIG5hbWU9IkltcEF0dHJHcjEiPgotICAgIAk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdDEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLSAgICA8L3hzZDphdHRyaWJ1dGVHcm91cD4KLQotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJJbXBFbGVtMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJJbXBTVDEiPgotICAgIAk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iSW1wU1QyIj4KLSAgICAJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotCi0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJJbXBDVDIiPgotICAgIAk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdHRyMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QveG1sbnNDbGVhbnVwL0luY2x1ZGUxLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QveG1sbnNDbGVhbnVwL0luY2x1ZGUxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTRkOTZkNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL3htbG5zQ2xlYW51cC9JbmNsdWRlMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIAotICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIiAKLSAgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgICB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiI+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkluYzFDVDEiPgotICAgIAk8eHNkOnNlcXVlbmNlPgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtYXhPY2N1cnM9IjI1Ij48L3hzZDplbGVtZW50PgotICAgIAk8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLQotICAgIDx4c2Q6Z3JvdXAgbmFtZT0iSW5jMUdyMSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0gICAgCTwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmdyb3VwPgotCi0gICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0iSW5jMUF0dHIxIiB0eXBlPSJ0bnM6SW5jMVNUMSI+PC94c2Q6YXR0cmlidXRlPgotCi0gICAgPHhzZDphdHRyaWJ1dGVHcm91cCBuYW1lPSJJbmMxQXR0ckdyMSI+Ci0gICAgCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0MSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotICAgIDwveHNkOmF0dHJpYnV0ZUdyb3VwPgotCi0gICAgPHhzZDplbGVtZW50IG5hbWU9IkluYzFFbGVtMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJJbmMxU1QxIj4KLSAgICAJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotCi0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkluYzFTVDIiPgotICAgIAk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkluYzFDVDIiPgotICAgIAk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdHRyMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QveG1sbnNDbGVhbnVwL3Rlc3QvTWFpbjAwMS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL3htbG5zQ2xlYW51cC90ZXN0L01haW4wMDEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YjY2YjFjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QveG1sbnNDbGVhbnVwL3Rlc3QvTWFpbjAwMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRuczAxPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zMDI9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnMwMz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRuczA0PSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zMDU9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnMwNj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRuczA3PSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zMDg9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnMwOT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRuczEwPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zMTE9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnMxMj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IgotCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIj4KLQotCTxlbGVtZW50IG5hbWU9Ik1haW5FbGVtMDAxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD4KLQkKLQk8Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMDAxIj4KLQkJPHNlcXVlbmNlPgotCQkJPGVsZW1lbnQgbmFtZT0iQ1QwMDFFbGVtMDAxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD4KLQkJCTxlbGVtZW50IHJlZj0idG5zMDE6TWFpbkVsZW0wMDEiPjwvZWxlbWVudD4KLQkJCTxhbnk+PC9hbnk+Ci0JCTwvc2VxdWVuY2U+Ci0JPC9jb21wbGV4VHlwZT4KLQotCTxjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QwMDIiPgotCQk8Y29tcGxleENvbnRlbnQ+Ci0JCQk8ZXh0ZW5zaW9uIGJhc2U9InRuczAyOk1haW5DVDAwMSI+PC9leHRlbnNpb24+Ci0JCTwvY29tcGxleENvbnRlbnQ+Ci0JPC9jb21wbGV4VHlwZT4KLQotCTxjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QwMDMiPgotCQk8Y29tcGxleENvbnRlbnQ+Ci0JCQk8cmVzdHJpY3Rpb24gYmFzZT0idG5zMDM6TWFpbkNUMDAxIj48L3Jlc3RyaWN0aW9uPgotCQk8L2NvbXBsZXhDb250ZW50PgotCTwvY29tcGxleFR5cGU+Ci0KLQk8Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMDA0Ij4KLQkJPHNpbXBsZUNvbnRlbnQ+Ci0JCQk8ZXh0ZW5zaW9uIGJhc2U9InN0cmluZyI+Ci0JCQkJPGFubm90YXRpb24+Ci0JCQkJCTxhcHBpbmZvPjwvYXBwaW5mbz4KLQkJCQk8L2Fubm90YXRpb24+Ci0JCQkJPGF0dHJpYnV0ZSBuYW1lPSJhdHRyMSIgdHlwZT0ic2hvcnQiPjwvYXR0cmlidXRlPgotCQkJCTxhdHRyaWJ1dGVHcm91cCByZWY9InRuczA0Ok1haW5BdHRyR3IwMDEiPjwvYXR0cmlidXRlR3JvdXA+Ci0JCQkJPGFueUF0dHJpYnV0ZT48L2FueUF0dHJpYnV0ZT4KLQkJCTwvZXh0ZW5zaW9uPgotCQk8L3NpbXBsZUNvbnRlbnQ+Ci0JPC9jb21wbGV4VHlwZT4KLQotCTxzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVDAwMSI+Ci0JCTxyZXN0cmljdGlvbiBiYXNlPSJzdHJpbmciPgotCQkJPGVudW1lcmF0aW9uIHZhbHVlPSJlbnVtMSI+PC9lbnVtZXJhdGlvbj4KLQkJPC9yZXN0cmljdGlvbj4KLQk8L3NpbXBsZVR5cGU+Ci0KLQk8c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QwMDIiPgotCQk8cmVzdHJpY3Rpb24gYmFzZT0idG5zMDU6TWFpblNUMDAxIj48L3Jlc3RyaWN0aW9uPgotCTwvc2ltcGxlVHlwZT4KLQotCTxzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVDAwMyI+Ci0JCTxsaXN0IGl0ZW1UeXBlPSJ0bnMwNjpNYWluU1QwMDEiPjwvbGlzdD4KLQk8L3NpbXBsZVR5cGU+Ci0KLQk8c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QwMDQiPgotCQk8bGlzdD4KLQkJCTxzaW1wbGVUeXBlPgotCQkJCTxyZXN0cmljdGlvbiBiYXNlPSJ0bnMwNzpNYWluU1QwMDEiPjwvcmVzdHJpY3Rpb24+Ci0JCQk8L3NpbXBsZVR5cGU+Ci0JCTwvbGlzdD4KLQk8L3NpbXBsZVR5cGU+Ci0KLQotCTxzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVDAwNSI+Ci0JCTx1bmlvbiBtZW1iZXJUeXBlcz0idG5zMDg6TWFpblNUMDAxIHRuczA5Ok1haW5TVDAwMiI+PC91bmlvbj4KLQk8L3NpbXBsZVR5cGU+Ci0KLQk8YXR0cmlidXRlIG5hbWU9Ik1haW5BdHRyMDAxIiB0eXBlPSJzdHJpbmciPjwvYXR0cmlidXRlPgotCi0JPGF0dHJpYnV0ZSBuYW1lPSJNYWluQXR0cjAwMiIgdHlwZT0ic3RyaW5nIj48L2F0dHJpYnV0ZT4KLQotCTxhdHRyaWJ1dGVHcm91cCBuYW1lPSJNYWluQXR0ckdyMDAxIj4KLQkJPGF0dHJpYnV0ZSByZWY9InRuczEwOk1haW5BdHRyMDAxIj48L2F0dHJpYnV0ZT4KLQk8L2F0dHJpYnV0ZUdyb3VwPgotCi0JPGF0dHJpYnV0ZUdyb3VwIG5hbWU9Ik1haW5BdHRyR3IwMDIiPjwvYXR0cmlidXRlR3JvdXA+Ci0KLQk8Z3JvdXAgbmFtZT0iTWFpbkdyb3VwMDAxIj4KLQkJPHNlcXVlbmNlPgotCQkJPGdyb3VwIHJlZj0idG5zMTE6TWFpbkdyb3VwMDAyIj48L2dyb3VwPgotCQk8L3NlcXVlbmNlPgotCTwvZ3JvdXA+Ci0JCi0JPGVsZW1lbnQgbmFtZT0iTWFpbkVsZW0wMDIiIHR5cGU9InN0cmluZyIgc3Vic3RpdHV0aW9uR3JvdXA9InRuczEyOk1haW5FbGVtMDAxIj48L2VsZW1lbnQ+Ci0JCi0JPGdyb3VwIG5hbWU9Ik1haW5Hcm91cDAwMiI+Ci0JCTxzZXF1ZW5jZT4KLQkJCTxlbGVtZW50IG5hbWU9ImUxIiB0eXBlPSJzdHJpbmciPgotCQkJCTxhbm5vdGF0aW9uPgotCQkJCQk8YXBwaW5mbz4KLQkJCQkJCTxwOkltcEVsZW0xPjwvcDpJbXBFbGVtMT4KLQkJCQkJPC9hcHBpbmZvPgotCQkJCTwvYW5ub3RhdGlvbj4KLQkJCTwvZWxlbWVudD4KLQkJPC9zZXF1ZW5jZT4KLQk8L2dyb3VwPgotCi08L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL3htbG5zQ2xlYW51cC90ZXN0L01haW4wMDIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC94bWxuc0NsZWFudXAvdGVzdC9NYWluMDAyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWEwMzhjYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL3htbG5zQ2xlYW51cC90ZXN0L01haW4wMDIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRuczAxPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zMDI9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnMwMz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRuczA0PSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zMDU9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczpwPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCI+Ci0KLQk8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iLi4vSW5jbHVkZTEueHNkIj48L2luY2x1ZGU+Ci0JCi0JPGVsZW1lbnQgbmFtZT0iTWFpbkVsZW0wMDEiIHR5cGU9InRuczAxOkluYzFDVDEiPgotCQk8YW5ub3RhdGlvbj4KLQkJCTxhcHBpbmZvPgotCQkJCTxwOkltcEVsZW0xPjwvcDpJbXBFbGVtMT4KLQkJCTwvYXBwaW5mbz4KLQkJPC9hbm5vdGF0aW9uPgotCTwvZWxlbWVudD4KLQotCTxzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVDAwMSI+Ci0JCTxyZXN0cmljdGlvbiBiYXNlPSJzdHJpbmciPjwvcmVzdHJpY3Rpb24+Ci0JPC9zaW1wbGVUeXBlPgotCi0JPHNpbXBsZVR5cGUgbmFtZT0iTWFpblNUMDAyIj4KLQkJPHJlc3RyaWN0aW9uIGJhc2U9InRuczAyOk1haW5TVDAwMSI+PC9yZXN0cmljdGlvbj4KLQk8L3NpbXBsZVR5cGU+Ci0KLQk8c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QwMDUiPgotCQk8dW5pb24gbWVtYmVyVHlwZXM9InRuczAzOk1haW5TVDAwMSAgIAotCQl0bnMwNDpNYWluU1QwMDIgICAKLQkJc3RyaW5nICAKLSAgICAgICAgaW50ZWdlciAgICAgICAgIj48L3VuaW9uPgotCTwvc2ltcGxlVHlwZT4KLQotPC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC94bWxuc0NsZWFudXAvdGVzdC9NYWluMDAzLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QveG1sbnNDbGVhbnVwL3Rlc3QvTWFpbjAwMy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4OGIwMzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC94bWxuc0NsZWFudXAvdGVzdC9NYWluMDAzLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDExMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zMDE9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnMwMj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRuczAzPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zMDQ9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnMwNT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRuczA2PSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zMDc9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnMwOD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRuczA5PSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zMTA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnMxMT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRuczEyPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6cD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgotCi0JPHhzZDplbGVtZW50IG5hbWU9Ik1haW5FbGVtMDAxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QwMDEiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IG5hbWU9IkNUMDAxRWxlbTAwMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQkJCTx4c2Q6ZWxlbWVudCByZWY9InRuczAxOk1haW5FbGVtMDAxIj48L3hzZDplbGVtZW50PgotCQkJPHhzZDphbnk+PC94c2Q6YW55PgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMDAyIj4KLQkJPHhzZDpjb21wbGV4Q29udGVudD4KLQkJCTx4c2Q6ZXh0ZW5zaW9uIGJhc2U9InRuczAyOk1haW5DVDAwMSI+PC94c2Q6ZXh0ZW5zaW9uPgotCQk8L3hzZDpjb21wbGV4Q29udGVudD4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMDAzIj4KLQkJPHhzZDpjb21wbGV4Q29udGVudD4KLQkJCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0idG5zMDM6TWFpbkNUMDAxIj48L3hzZDpyZXN0cmljdGlvbj4KLQkJPC94c2Q6Y29tcGxleENvbnRlbnQ+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDAwNCI+Ci0JCTx4c2Q6c2ltcGxlQ29udGVudD4KLQkJCTx4c2Q6ZXh0ZW5zaW9uIGJhc2U9InhzZDpzdHJpbmciPgotCQkJCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCQkJPHhzZDphcHBpbmZvPjwveHNkOmFwcGluZm8+Ci0JCQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdHRyMSIgdHlwZT0ieHNkOnNob3J0Ij48L3hzZDphdHRyaWJ1dGU+Ci0JCQkJPHhzZDphdHRyaWJ1dGVHcm91cCByZWY9InRuczA0Ok1haW5BdHRyR3IwMDEiPjwveHNkOmF0dHJpYnV0ZUdyb3VwPgotCQkJCTx4c2Q6YW55QXR0cmlidXRlPjwveHNkOmFueUF0dHJpYnV0ZT4KLQkJCTwveHNkOmV4dGVuc2lvbj4KLQkJPC94c2Q6c2ltcGxlQ29udGVudD4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLQotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QwMDEiPgotCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPgotCQkJPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iZW51bTEiPjwveHNkOmVudW1lcmF0aW9uPgotCQk8L3hzZDpyZXN0cmljdGlvbj4KLQk8L3hzZDpzaW1wbGVUeXBlPgotCi0JPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVDAwMiI+Ci0JCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0idG5zMDU6TWFpblNUMDAxIj48L3hzZDpyZXN0cmljdGlvbj4KLQk8L3hzZDpzaW1wbGVUeXBlPgotCi0JPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVDAwMyI+Ci0JCTx4c2Q6bGlzdCBpdGVtVHlwZT0idG5zMDY6TWFpblNUMDAxIj48L3hzZDpsaXN0PgotCTwveHNkOnNpbXBsZVR5cGU+Ci0KLQk8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUMDA0Ij4KLQkJPHhzZDpsaXN0PgotCQkJPHhzZDpzaW1wbGVUeXBlPgotCQkJCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0idG5zMDc6TWFpblNUMDAxIj48L3hzZDpyZXN0cmljdGlvbj4KLQkJCTwveHNkOnNpbXBsZVR5cGU+Ci0JCTwveHNkOmxpc3Q+Ci0JPC94c2Q6c2ltcGxlVHlwZT4KLQotCi0JPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVDAwNSI+Ci0JCTx4c2Q6dW5pb24gbWVtYmVyVHlwZXM9InRuczA4Ok1haW5TVDAwMSB0bnMwOTpNYWluU1QwMDIiPjwveHNkOnVuaW9uPgotCTwveHNkOnNpbXBsZVR5cGU+Ci0KLQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJNYWluQXR0cjAwMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotCi0JPHhzZDphdHRyaWJ1dGUgbmFtZT0iTWFpbkF0dHIwMDIiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLQotCTx4c2Q6YXR0cmlidXRlR3JvdXAgbmFtZT0iTWFpbkF0dHJHcjAwMSI+Ci0JCTx4c2Q6YXR0cmlidXRlIHJlZj0idG5zMTA6TWFpbkF0dHIwMDEiPjwveHNkOmF0dHJpYnV0ZT4KLQk8L3hzZDphdHRyaWJ1dGVHcm91cD4KLQotCTx4c2Q6YXR0cmlidXRlR3JvdXAgbmFtZT0iTWFpbkF0dHJHcjAwMiI+PC94c2Q6YXR0cmlidXRlR3JvdXA+Ci0KLQk8eHNkOmdyb3VwIG5hbWU9Ik1haW5Hcm91cDAwMSI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmdyb3VwIHJlZj0idG5zMTE6TWFpbkdyb3VwMDAyIj48L3hzZDpncm91cD4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Z3JvdXA+Ci0KLQk8eHNkOmVsZW1lbnQgbmFtZT0iTWFpbkVsZW0wMDIiIHR5cGU9InhzZDpzdHJpbmciIHN1YnN0aXR1dGlvbkdyb3VwPSJ0bnMxMjpNYWluRWxlbTAwMSI+PC94c2Q6ZWxlbWVudD4KLQkKLQk8eHNkOmdyb3VwIG5hbWU9Ik1haW5Hcm91cDAwMiI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciPgotCQkJCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCQkJPHhzZDphcHBpbmZvPgotCQkJCQkJPHA6SW1wRWxlbTE+PC9wOkltcEVsZW0xPgotCQkJCQk8L3hzZDphcHBpbmZvPgotCQkJCTwveHNkOmFubm90YXRpb24+Ci0JCQk8L3hzZDplbGVtZW50PgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpncm91cD4KLQotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QveG1sbnNDbGVhbnVwL3Rlc3QvTWFpbjAwNC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL3htbG5zQ2xlYW51cC90ZXN0L01haW4wMDQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZGNmMGY3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QveG1sbnNDbGVhbnVwL3Rlc3QvTWFpbjAwNC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRuczAxPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zMDI9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnMwMz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRuczA0PSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zMDU9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnMwNj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRuczA3PSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zMDg9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnMwOT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRuczEwPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zMTE9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnMxMj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IiBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0JPHhzZDplbGVtZW50IG5hbWU9Ik1haW5FbGVtMDAxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QwMDEiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IG5hbWU9IkNUMDAxRWxlbTAwMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQkJCTx4c2Q6ZWxlbWVudCByZWY9InRuczAxOk1haW5FbGVtMDAxIj48L3hzZDplbGVtZW50PgotCQkJPHhzZDphbnk+PC94c2Q6YW55PgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMDAyIj4KLQkJPHhzZDpjb21wbGV4Q29udGVudD4KLQkJCTx4c2Q6ZXh0ZW5zaW9uIGJhc2U9InRuczAxOk1haW5DVDAwMSI+PC94c2Q6ZXh0ZW5zaW9uPgotCQk8L3hzZDpjb21wbGV4Q29udGVudD4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMDAzIj4KLQkJPHhzZDpjb21wbGV4Q29udGVudD4KLQkJCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0idG5zMDE6TWFpbkNUMDAxIj48L3hzZDpyZXN0cmljdGlvbj4KLQkJPC94c2Q6Y29tcGxleENvbnRlbnQ+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDAwNCI+Ci0JCTx4c2Q6c2ltcGxlQ29udGVudD4KLQkJCTx4c2Q6ZXh0ZW5zaW9uIGJhc2U9InhzZDpzdHJpbmciPgotCQkJCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCQkJPHhzZDphcHBpbmZvPjwveHNkOmFwcGluZm8+Ci0JCQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdHRyMSIgdHlwZT0ieHNkOnNob3J0Ij48L3hzZDphdHRyaWJ1dGU+Ci0JCQkJPHhzZDphdHRyaWJ1dGVHcm91cCByZWY9InRuczAxOk1haW5BdHRyR3IwMDEiPjwveHNkOmF0dHJpYnV0ZUdyb3VwPgotCQkJCTx4c2Q6YW55QXR0cmlidXRlPjwveHNkOmFueUF0dHJpYnV0ZT4KLQkJCTwveHNkOmV4dGVuc2lvbj4KLQkJPC94c2Q6c2ltcGxlQ29udGVudD4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLQotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QwMDEiPgotCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPgotCQkJPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iZW51bTEiPjwveHNkOmVudW1lcmF0aW9uPgotCQk8L3hzZDpyZXN0cmljdGlvbj4KLQk8L3hzZDpzaW1wbGVUeXBlPgotCi0JPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVDAwMiI+Ci0JCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0idG5zMDE6TWFpblNUMDAxIj48L3hzZDpyZXN0cmljdGlvbj4KLQk8L3hzZDpzaW1wbGVUeXBlPgotCi0JPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVDAwMyI+Ci0JCTx4c2Q6bGlzdCBpdGVtVHlwZT0idG5zMDE6TWFpblNUMDAxIj48L3hzZDpsaXN0PgotCTwveHNkOnNpbXBsZVR5cGU+Ci0KLQk8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUMDA0Ij4KLQkJPHhzZDpsaXN0PgotCQkJPHhzZDpzaW1wbGVUeXBlPgotCQkJCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0idG5zMDE6TWFpblNUMDAxIj48L3hzZDpyZXN0cmljdGlvbj4KLQkJCTwveHNkOnNpbXBsZVR5cGU+Ci0JCTwveHNkOmxpc3Q+Ci0JPC94c2Q6c2ltcGxlVHlwZT4KLQotCi0JPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVDAwNSI+Ci0JCTx4c2Q6dW5pb24gbWVtYmVyVHlwZXM9InRuczAxOk1haW5TVDAwMSB0bnMwMTpNYWluU1QwMDIiPjwveHNkOnVuaW9uPgotCTwveHNkOnNpbXBsZVR5cGU+Ci0KLQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJNYWluQXR0cjAwMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotCi0JPHhzZDphdHRyaWJ1dGUgbmFtZT0iTWFpbkF0dHIwMDIiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLQotCTx4c2Q6YXR0cmlidXRlR3JvdXAgbmFtZT0iTWFpbkF0dHJHcjAwMSI+Ci0JCTx4c2Q6YXR0cmlidXRlIHJlZj0idG5zMDE6TWFpbkF0dHIwMDEiPjwveHNkOmF0dHJpYnV0ZT4KLQk8L3hzZDphdHRyaWJ1dGVHcm91cD4KLQotCTx4c2Q6YXR0cmlidXRlR3JvdXAgbmFtZT0iTWFpbkF0dHJHcjAwMiI+PC94c2Q6YXR0cmlidXRlR3JvdXA+Ci0KLQk8eHNkOmdyb3VwIG5hbWU9Ik1haW5Hcm91cDAwMSI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmdyb3VwIHJlZj0idG5zMDE6TWFpbkdyb3VwMDAyIj48L3hzZDpncm91cD4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Z3JvdXA+Ci0JCi0JPHhzZDplbGVtZW50IG5hbWU9Ik1haW5FbGVtMDAyIiB0eXBlPSJ4c2Q6c3RyaW5nIiBzdWJzdGl0dXRpb25Hcm91cD0idG5zMDE6TWFpbkVsZW0wMDEiPjwveHNkOmVsZW1lbnQ+Ci0KLQk8eHNkOmdyb3VwIG5hbWU9Ik1haW5Hcm91cDAwMiI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciPgotCQkJCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCQkJPHhzZDphcHBpbmZvPgotCQkJCQkJPHA6SW1wRWxlbTE+PC9wOkltcEVsZW0xPgotCQkJCQk8L3hzZDphcHBpbmZvPgotCQkJCTwveHNkOmFubm90YXRpb24+Ci0JCQk8L3hzZDplbGVtZW50PgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpncm91cD4KLQotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QveG1sbnNDbGVhbnVwL3Rlc3QvTWFpbjAwNS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL3htbG5zQ2xlYW51cC90ZXN0L01haW4wMDUueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NzEzOTNjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QveG1sbnNDbGVhbnVwL3Rlc3QvTWFpbjAwNS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRuczAxPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zMDI9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnMwMz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRuczA0PSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zMDU9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnMwNj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRuczA3PSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zMDg9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnMwOT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnRuczEwPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6dG5zMTE9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczp0bnMxMj0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IiBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iPgotCi0JPHhzZDplbGVtZW50IG5hbWU9Ik1haW5FbGVtMDAxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QwMDEiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IG5hbWU9IkNUMDAxRWxlbTAwMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQkJCTx4c2Q6ZWxlbWVudCByZWY9Ik1haW5FbGVtMDAxIj48L3hzZDplbGVtZW50PgotCQkJPHhzZDphbnk+PC94c2Q6YW55PgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMDAyIj4KLQkJPHhzZDpjb21wbGV4Q29udGVudD4KLQkJCTx4c2Q6ZXh0ZW5zaW9uIGJhc2U9Ik1haW5DVDAwMSI+PC94c2Q6ZXh0ZW5zaW9uPgotCQk8L3hzZDpjb21wbGV4Q29udGVudD4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMDAzIj4KLQkJPHhzZDpjb21wbGV4Q29udGVudD4KLQkJCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0iTWFpbkNUMDAxIj48L3hzZDpyZXN0cmljdGlvbj4KLQkJPC94c2Q6Y29tcGxleENvbnRlbnQ+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDAwNCI+Ci0JCTx4c2Q6c2ltcGxlQ29udGVudD4KLQkJCTx4c2Q6ZXh0ZW5zaW9uIGJhc2U9InhzZDpzdHJpbmciPgotCQkJCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCQkJPHhzZDphcHBpbmZvPjwveHNkOmFwcGluZm8+Ci0JCQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdHRyMSIgdHlwZT0ieHNkOnNob3J0Ij48L3hzZDphdHRyaWJ1dGU+Ci0JCQkJPHhzZDphdHRyaWJ1dGVHcm91cCByZWY9Ik1haW5BdHRyR3IwMDEiPjwveHNkOmF0dHJpYnV0ZUdyb3VwPgotCQkJCTx4c2Q6YW55QXR0cmlidXRlPjwveHNkOmFueUF0dHJpYnV0ZT4KLQkJCTwveHNkOmV4dGVuc2lvbj4KLQkJPC94c2Q6c2ltcGxlQ29udGVudD4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLQotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QwMDEiPgotCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPgotCQkJPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iZW51bTEiPjwveHNkOmVudW1lcmF0aW9uPgotCQk8L3hzZDpyZXN0cmljdGlvbj4KLQk8L3hzZDpzaW1wbGVUeXBlPgotCi0JPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVDAwMiI+Ci0JCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0iTWFpblNUMDAxIj48L3hzZDpyZXN0cmljdGlvbj4KLQk8L3hzZDpzaW1wbGVUeXBlPgotCi0JPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVDAwMyI+Ci0JCTx4c2Q6bGlzdCBpdGVtVHlwZT0iTWFpblNUMDAxIj48L3hzZDpsaXN0PgotCTwveHNkOnNpbXBsZVR5cGU+Ci0KLQk8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUMDA0Ij4KLQkJPHhzZDpsaXN0PgotCQkJPHhzZDpzaW1wbGVUeXBlPgotCQkJCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0iTWFpblNUMDAxIj48L3hzZDpyZXN0cmljdGlvbj4KLQkJCTwveHNkOnNpbXBsZVR5cGU+Ci0JCTwveHNkOmxpc3Q+Ci0JPC94c2Q6c2ltcGxlVHlwZT4KLQotCi0JPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVDAwNSI+Ci0JCTx4c2Q6dW5pb24gbWVtYmVyVHlwZXM9Ik1haW5TVDAwMSBNYWluU1QwMDIiPjwveHNkOnVuaW9uPgotCTwveHNkOnNpbXBsZVR5cGU+Ci0KLQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJNYWluQXR0cjAwMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotCi0JPHhzZDphdHRyaWJ1dGUgbmFtZT0iTWFpbkF0dHIwMDIiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLQotCTx4c2Q6YXR0cmlidXRlR3JvdXAgbmFtZT0iTWFpbkF0dHJHcjAwMSI+Ci0JCTx4c2Q6YXR0cmlidXRlIHJlZj0iTWFpbkF0dHIwMDEiPjwveHNkOmF0dHJpYnV0ZT4KLQk8L3hzZDphdHRyaWJ1dGVHcm91cD4KLQotCTx4c2Q6YXR0cmlidXRlR3JvdXAgbmFtZT0iTWFpbkF0dHJHcjAwMiI+PC94c2Q6YXR0cmlidXRlR3JvdXA+Ci0KLQk8eHNkOmdyb3VwIG5hbWU9Ik1haW5Hcm91cDAwMSI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmdyb3VwIHJlZj0iTWFpbkdyb3VwMDAyIj48L3hzZDpncm91cD4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Z3JvdXA+Ci0JCi0JPHhzZDplbGVtZW50IG5hbWU9Ik1haW5FbGVtMDAyIiB0eXBlPSJ4c2Q6c3RyaW5nIiBzdWJzdGl0dXRpb25Hcm91cD0iTWFpbkVsZW0wMDEiPjwveHNkOmVsZW1lbnQ+Ci0KLQk8eHNkOmdyb3VwIG5hbWU9Ik1haW5Hcm91cDAwMiI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciPgotCQkJCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCQkJPHhzZDphcHBpbmZvPgotCQkJCQkJPHA6SW1wRWxlbTE+PC9wOkltcEVsZW0xPgotCQkJCQk8L3hzZDphcHBpbmZvPgotCQkJCTwveHNkOmFubm90YXRpb24+Ci0JCQk8L3hzZDplbGVtZW50PgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpncm91cD4KLQotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QveG1sbnNDbGVhbnVwL3Rlc3QvTWFpbjAwNi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL3htbG5zQ2xlYW51cC90ZXN0L01haW4wMDYueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZGJiMmU3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QveG1sbnNDbGVhbnVwL3Rlc3QvTWFpbjAwNi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgCi0gICAgeG1sbnM6dG5zMDE9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTWFpbiIKLQl4bWxuczpwPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0ltcG9ydCIgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0JeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0KLQk8eHNkOmVsZW1lbnQgbmFtZT0iTWFpbkVsZW0wMDEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDAwMSI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iQ1QwMDFFbGVtMDAxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCQkJPHhzZDplbGVtZW50IHJlZj0iTWFpbkVsZW0wMDEiPjwveHNkOmVsZW1lbnQ+Ci0JCQk8eHNkOmFueT48L3hzZDphbnk+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmNvbXBsZXhUeXBlPgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QwMDIiPgotCQk8eHNkOmNvbXBsZXhDb250ZW50PgotCQkJPHhzZDpleHRlbnNpb24gYmFzZT0iTWFpbkNUMDAxIj48L3hzZDpleHRlbnNpb24+Ci0JCTwveHNkOmNvbXBsZXhDb250ZW50PgotCTwveHNkOmNvbXBsZXhUeXBlPgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QwMDMiPgotCQk8eHNkOmNvbXBsZXhDb250ZW50PgotCQkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJNYWluQ1QwMDEiPjwveHNkOnJlc3RyaWN0aW9uPgotCQk8L3hzZDpjb21wbGV4Q29udGVudD4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMDA0Ij4KLQkJPHhzZDpzaW1wbGVDb250ZW50PgotCQkJPHhzZDpleHRlbnNpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0JCQkJPHhzZDphbm5vdGF0aW9uPgotCQkJCQk8eHNkOmFwcGluZm8+PC94c2Q6YXBwaW5mbz4KLQkJCQk8L3hzZDphbm5vdGF0aW9uPgotCQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0dHIxIiB0eXBlPSJ4c2Q6c2hvcnQiPjwveHNkOmF0dHJpYnV0ZT4KLQkJCQk8eHNkOmF0dHJpYnV0ZUdyb3VwIHJlZj0iTWFpbkF0dHJHcjAwMSI+PC94c2Q6YXR0cmlidXRlR3JvdXA+Ci0JCQkJPHhzZDphbnlBdHRyaWJ1dGU+PC94c2Q6YW55QXR0cmlidXRlPgotCQkJPC94c2Q6ZXh0ZW5zaW9uPgotCQk8L3hzZDpzaW1wbGVDb250ZW50PgotCTwveHNkOmNvbXBsZXhUeXBlPgotCi0JPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVDAwMSI+Ci0JCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0JCQk8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJlbnVtMSI+PC94c2Q6ZW51bWVyYXRpb24+Ci0JCTwveHNkOnJlc3RyaWN0aW9uPgotCTwveHNkOnNpbXBsZVR5cGU+Ci0KLQk8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUMDAyIj4KLQkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJNYWluU1QwMDEiPjwveHNkOnJlc3RyaWN0aW9uPgotCTwveHNkOnNpbXBsZVR5cGU+Ci0KLQk8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUMDAzIj4KLQkJPHhzZDpsaXN0IGl0ZW1UeXBlPSJNYWluU1QwMDEiPjwveHNkOmxpc3Q+Ci0JPC94c2Q6c2ltcGxlVHlwZT4KLQotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QwMDQiPgotCQk8eHNkOmxpc3Q+Ci0JCQk8eHNkOnNpbXBsZVR5cGU+Ci0JCQkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJNYWluU1QwMDEiPjwveHNkOnJlc3RyaWN0aW9uPgotCQkJPC94c2Q6c2ltcGxlVHlwZT4KLQkJPC94c2Q6bGlzdD4KLQk8L3hzZDpzaW1wbGVUeXBlPgotCi0KLQk8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUMDA1Ij4KLQkJPHhzZDp1bmlvbiBtZW1iZXJUeXBlcz0iTWFpblNUMDAxIE1haW5TVDAwMiI+PC94c2Q6dW5pb24+Ci0JPC94c2Q6c2ltcGxlVHlwZT4KLQotCTx4c2Q6YXR0cmlidXRlIG5hbWU9Ik1haW5BdHRyMDAxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0KLQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJNYWluQXR0cjAwMiIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotCi0JPHhzZDphdHRyaWJ1dGVHcm91cCBuYW1lPSJNYWluQXR0ckdyMDAxIj4KLQkJPHhzZDphdHRyaWJ1dGUgcmVmPSJNYWluQXR0cjAwMSI+PC94c2Q6YXR0cmlidXRlPgotCTwveHNkOmF0dHJpYnV0ZUdyb3VwPgotCi0JPHhzZDphdHRyaWJ1dGVHcm91cCBuYW1lPSJNYWluQXR0ckdyMDAyIj48L3hzZDphdHRyaWJ1dGVHcm91cD4KLQotCTx4c2Q6Z3JvdXAgbmFtZT0iTWFpbkdyb3VwMDAxIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6Z3JvdXAgcmVmPSJNYWluR3JvdXAwMDIiPjwveHNkOmdyb3VwPgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpncm91cD4KLQkKLQk8eHNkOmVsZW1lbnQgbmFtZT0iTWFpbkVsZW0wMDIiIHR5cGU9InhzZDpzdHJpbmciIHN1YnN0aXR1dGlvbkdyb3VwPSJNYWluRWxlbTAwMSI+PC94c2Q6ZWxlbWVudD4KLQotCTx4c2Q6Z3JvdXAgbmFtZT0iTWFpbkdyb3VwMDAyIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyI+Ci0JCQkJPHhzZDphbm5vdGF0aW9uPgotCQkJCQk8eHNkOmFwcGluZm8+Ci0JCQkJCQk8cDpJbXBFbGVtMT48L3A6SW1wRWxlbTE+Ci0JCQkJCTwveHNkOmFwcGluZm8+Ci0JCQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJCTwveHNkOmVsZW1lbnQ+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmdyb3VwPgotCi08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC94bWxuc0NsZWFudXAvdGVzdC9NYWluMDA3LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QveG1sbnNDbGVhbnVwL3Rlc3QvTWFpbjAwNy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlM2FjY2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL1hTRC94bWxuc0NsZWFudXAvdGVzdC9NYWluMDA3LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM6cD0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9JbXBvcnQiIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL01haW4iCi0JeG1sbnM9Imh0dHA6Ly9VbnVzZWQiPgotCi0JPHhzZDplbGVtZW50IG5hbWU9Ik1haW5FbGVtMDAxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QwMDEiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IG5hbWU9IkNUMDAxRWxlbTAwMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLQkJCTx4c2Q6ZWxlbWVudCByZWY9InRuczpNYWluRWxlbTAwMSI+PC94c2Q6ZWxlbWVudD4KLQkJCTx4c2Q6YW55PjwveHNkOmFueT4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDAwMiI+Ci0JCTx4c2Q6Y29tcGxleENvbnRlbnQ+Ci0JCQk8eHNkOmV4dGVuc2lvbiBiYXNlPSJ0bnM6TWFpbkNUMDAxIj48L3hzZDpleHRlbnNpb24+Ci0JCTwveHNkOmNvbXBsZXhDb250ZW50PgotCTwveHNkOmNvbXBsZXhUeXBlPgotCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNYWluQ1QwMDMiPgotCQk8eHNkOmNvbXBsZXhDb250ZW50PgotCQkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ0bnM6TWFpbkNUMDAxIj48L3hzZDpyZXN0cmljdGlvbj4KLQkJPC94c2Q6Y29tcGxleENvbnRlbnQ+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDAwNCI+Ci0JCTx4c2Q6c2ltcGxlQ29udGVudD4KLQkJCTx4c2Q6ZXh0ZW5zaW9uIGJhc2U9InhzZDpzdHJpbmciPgotCQkJCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCQkJPHhzZDphcHBpbmZvPjwveHNkOmFwcGluZm8+Ci0JCQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJhdHRyMSIgdHlwZT0ieHNkOnNob3J0Ij48L3hzZDphdHRyaWJ1dGU+Ci0JCQkJPHhzZDphdHRyaWJ1dGVHcm91cCByZWY9InRuczpNYWluQXR0ckdyMDAxIj48L3hzZDphdHRyaWJ1dGVHcm91cD4KLQkJCQk8eHNkOmFueUF0dHJpYnV0ZT48L3hzZDphbnlBdHRyaWJ1dGU+Ci0JCQk8L3hzZDpleHRlbnNpb24+Ci0JCTwveHNkOnNpbXBsZUNvbnRlbnQ+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLQk8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUMDAxIj4KLQkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLQkJCTx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImVudW0xIj48L3hzZDplbnVtZXJhdGlvbj4KLQkJPC94c2Q6cmVzdHJpY3Rpb24+Ci0JPC94c2Q6c2ltcGxlVHlwZT4KLQotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QwMDIiPgotCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InRuczpNYWluU1QwMDEiPjwveHNkOnJlc3RyaWN0aW9uPgotCTwveHNkOnNpbXBsZVR5cGU+Ci0KLQk8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUMDAzIj4KLQkJPHhzZDpsaXN0IGl0ZW1UeXBlPSJ0bnM6TWFpblNUMDAxIj48L3hzZDpsaXN0PgotCTwveHNkOnNpbXBsZVR5cGU+Ci0KLQk8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTWFpblNUMDA0Ij4KLQkJPHhzZDpsaXN0PgotCQkJPHhzZDpzaW1wbGVUeXBlPgotCQkJCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0idG5zOk1haW5TVDAwMSI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0JCQk8L3hzZDpzaW1wbGVUeXBlPgotCQk8L3hzZDpsaXN0PgotCTwveHNkOnNpbXBsZVR5cGU+Ci0KLQotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QwMDUiPgotCQk8eHNkOnVuaW9uIG1lbWJlclR5cGVzPSJ0bnM6TWFpblNUMDAxIHRuczpNYWluU1QwMDIiPjwveHNkOnVuaW9uPgotCTwveHNkOnNpbXBsZVR5cGU+Ci0KLQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJNYWluQXR0cjAwMSIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotCi0JPHhzZDphdHRyaWJ1dGUgbmFtZT0iTWFpbkF0dHIwMDIiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmF0dHJpYnV0ZT4KLQotCTx4c2Q6YXR0cmlidXRlR3JvdXAgbmFtZT0iTWFpbkF0dHJHcjAwMSI+Ci0JCTx4c2Q6YXR0cmlidXRlIHJlZj0idG5zOk1haW5BdHRyMDAxIj48L3hzZDphdHRyaWJ1dGU+Ci0JPC94c2Q6YXR0cmlidXRlR3JvdXA+Ci0KLQk8eHNkOmF0dHJpYnV0ZUdyb3VwIG5hbWU9Ik1haW5BdHRyR3IwMDIiPjwveHNkOmF0dHJpYnV0ZUdyb3VwPgotCi0JPHhzZDpncm91cCBuYW1lPSJNYWluR3JvdXAwMDEiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDpncm91cCByZWY9InRuczpNYWluR3JvdXAwMDIiPjwveHNkOmdyb3VwPgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpncm91cD4KLQkKLQk8eHNkOmVsZW1lbnQgbmFtZT0iTWFpbkVsZW0wMDIiIHR5cGU9InhzZDpzdHJpbmciIHN1YnN0aXR1dGlvbkdyb3VwPSJ0bnM6TWFpbkVsZW0wMDEiPjwveHNkOmVsZW1lbnQ+Ci0KLQk8eHNkOmdyb3VwIG5hbWU9Ik1haW5Hcm91cDAwMiI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iZTEiIHR5cGU9InhzZDpzdHJpbmciPgotCQkJCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCQkJPHhzZDphcHBpbmZvPgotCQkJCQkJPHA6SW1wRWxlbTE+PC9wOkltcEVsZW0xPgotCQkJCQk8L3hzZDphcHBpbmZvPgotCQkJCTwveHNkOmFubm90YXRpb24+Ci0JCQk8L3hzZDplbGVtZW50PgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpncm91cD4KLQotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QveG1sbnNDbGVhbnVwL3Rlc3QvTWFpbjAwOC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvWFNEL3htbG5zQ2xlYW51cC90ZXN0L01haW4wMDgueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YTU5OTQ0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudWkudGVzdHMvdGVzdHJlc291cmNlcy9YU0QveG1sbnNDbGVhbnVwL3Rlc3QvTWFpbjAwOC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zOnA9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvSW1wb3J0IiBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLQl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9NYWluIgotCXhtbG5zPSJodHRwOi8vVXNlZCI+Ci0KLQk8eHNkOmVsZW1lbnQgbmFtZT0iTWFpbkVsZW0wMDEiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDAwMSI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iQ1QwMDFFbGVtMDAxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotCQkJPHhzZDplbGVtZW50IHJlZj0idG5zOk1haW5FbGVtMDAxIj48L3hzZDplbGVtZW50PgotCQkJPHhzZDphbnk+PC94c2Q6YW55PgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMDAyIj4KLQkJPHhzZDpjb21wbGV4Q29udGVudD4KLQkJCTx4c2Q6ZXh0ZW5zaW9uIGJhc2U9InRuczpNYWluQ1QwMDEiPjwveHNkOmV4dGVuc2lvbj4KLQkJPC94c2Q6Y29tcGxleENvbnRlbnQ+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1haW5DVDAwMyI+Ci0JCTx4c2Q6Y29tcGxleENvbnRlbnQ+Ci0JCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InRuczpNYWluQ1QwMDEiPjwveHNkOnJlc3RyaWN0aW9uPgotCQk8L3hzZDpjb21wbGV4Q29udGVudD4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFpbkNUMDA0Ij4KLQkJPHhzZDpzaW1wbGVDb250ZW50PgotCQkJPHhzZDpleHRlbnNpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0JCQkJPHhzZDphbm5vdGF0aW9uPgotCQkJCQk8eHNkOmFwcGluZm8+PC94c2Q6YXBwaW5mbz4KLQkJCQk8L3hzZDphbm5vdGF0aW9uPgotCQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImF0dHIxIiB0eXBlPSJ4c2Q6c2hvcnQiPjwveHNkOmF0dHJpYnV0ZT4KLQkJCQk8eHNkOmF0dHJpYnV0ZUdyb3VwIHJlZj0idG5zOk1haW5BdHRyR3IwMDEiPjwveHNkOmF0dHJpYnV0ZUdyb3VwPgotCQkJCTx4c2Q6YW55QXR0cmlidXRlPjwveHNkOmFueUF0dHJpYnV0ZT4KLQkJCTwveHNkOmV4dGVuc2lvbj4KLQkJPC94c2Q6c2ltcGxlQ29udGVudD4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLQotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QwMDEiPgotCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPgotCQkJPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iZW51bTEiPjwveHNkOmVudW1lcmF0aW9uPgotCQk8L3hzZDpyZXN0cmljdGlvbj4KLQk8L3hzZDpzaW1wbGVUeXBlPgotCi0JPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVDAwMiI+Ci0JCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0idG5zOk1haW5TVDAwMSI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0JPC94c2Q6c2ltcGxlVHlwZT4KLQotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QwMDMiPgotCQk8eHNkOmxpc3QgaXRlbVR5cGU9InRuczpNYWluU1QwMDEiPjwveHNkOmxpc3Q+Ci0JPC94c2Q6c2ltcGxlVHlwZT4KLQotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNYWluU1QwMDQiPgotCQk8eHNkOmxpc3Q+Ci0JCQk8eHNkOnNpbXBsZVR5cGU+Ci0JCQkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ0bnM6TWFpblNUMDAxIj48L3hzZDpyZXN0cmljdGlvbj4KLQkJCTwveHNkOnNpbXBsZVR5cGU+Ci0JCTwveHNkOmxpc3Q+Ci0JPC94c2Q6c2ltcGxlVHlwZT4KLQotCi0JPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik1haW5TVDAwNSI+Ci0JCTx4c2Q6dW5pb24gbWVtYmVyVHlwZXM9InRuczpNYWluU1QwMDEgdG5zOk1haW5TVDAwMiI+PC94c2Q6dW5pb24+Ci0JPC94c2Q6c2ltcGxlVHlwZT4KLQotCTx4c2Q6YXR0cmlidXRlIG5hbWU9Ik1haW5BdHRyMDAxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDphdHRyaWJ1dGU+Ci0KLQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJNYWluQXR0cjAwMiIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6YXR0cmlidXRlPgotCi0JPHhzZDphdHRyaWJ1dGVHcm91cCBuYW1lPSJNYWluQXR0ckdyMDAxIj4KLQkJPHhzZDphdHRyaWJ1dGUgcmVmPSJ0bnM6TWFpbkF0dHIwMDEiPjwveHNkOmF0dHJpYnV0ZT4KLQk8L3hzZDphdHRyaWJ1dGVHcm91cD4KLQotCTx4c2Q6YXR0cmlidXRlR3JvdXAgbmFtZT0iTWFpbkF0dHJHcjAwMiI+PC94c2Q6YXR0cmlidXRlR3JvdXA+Ci0KLQk8eHNkOmdyb3VwIG5hbWU9Ik1haW5Hcm91cDAwMSI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmdyb3VwIHJlZj0idG5zOk1haW5Hcm91cDAwMiI+PC94c2Q6Z3JvdXA+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmdyb3VwPgotCQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJNYWluRWxlbTAwMiIgdHlwZT0ieHNkOnN0cmluZyIgc3Vic3RpdHV0aW9uR3JvdXA9InRuczpNYWluRWxlbTAwMSI+PC94c2Q6ZWxlbWVudD4KLQotCTx4c2Q6Z3JvdXAgbmFtZT0iTWFpbkdyb3VwMDAyIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJlMSIgdHlwZT0ieHNkOnN0cmluZyI+Ci0JCQkJPHhzZDphbm5vdGF0aW9uPgotCQkJCQk8eHNkOmFwcGluZm8+Ci0JCQkJCQk8SW1wRWxlbTE+PC9JbXBFbGVtMT4KLQkJCQkJPC94c2Q6YXBwaW5mbz4KLQkJCQk8L3hzZDphbm5vdGF0aW9uPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Z3JvdXA+Ci0KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKaW5kZXggYWY4ZjdjYy4uZDJlYmQ1NyAxMDA2NDQKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMiw3ICsyLDcgQEAKIEJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKIEJ1bmRsZS1OYW1lOiAlQnVuZGxlLU5hbWUuMAogQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzCi1CdW5kbGUtVmVyc2lvbjogMS4wLjQwMS5xdWFsaWZpZXIKK0J1bmRsZS1WZXJzaW9uOiAxLjAuNDAwLnF1YWxpZmllcgogQnVuZGxlLUNsYXNzUGF0aDogdmFsaWRhdGV4c2R0ZXN0cy5qYXIKIEJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbC5YU0RWYWxpZGF0aW9uVGVzdHNQbHVnaW4KIEJ1bmRsZS1WZW5kb3I6ICVCdW5kbGUtVmVuZG9yLjAKQEAgLTE5LDQgKzE5LDMgQEAKICBvcmcuZWNsaXBzZS53c3QueHNkLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lY2xpcHNlO3gtaW50ZXJuYWw6PXRydWUsCiAgb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzLmludGVybmFsO3gtaW50ZXJuYWw6PXRydWUKIEJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNAotQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggYzZjZmVhZi4uNjNmNWQ2NiAxMDA2NDQKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKQEAgLTE1LDMgKzE1LDYgQEAKICAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAogICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMKIHNvdXJjZS52YWxpZGF0ZXhzZHRlc3RzLmphciA9IHNyYy8gCisKK2Jpbi5leGNsdWRlcyA9IHRlc3RyZXNvdXJjZXMvLmN2c2lnbm9yZSxcCisgICAgICAgICAgICAgICB0ZXN0cmVzb3VyY2VzL2dlbmVyYXRlZFJlc3VsdHMvCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0ltcG9ydEFuZ2xlSGF0XkluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0ltcG9ydEFuZ2xlSGF0XkluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cKaW5kZXggZGUzYWMzYi4uZDU5NGM5OSAxMDA2NDQKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9JbXBvcnRBbmdsZUhhdF5JbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvSW1wb3J0QW5nbGVIYXReSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZwpAQCAtMSw2ICsxLDYgQEAKIG51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKIAogLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVJlZmVyZW5jZWQgZmlsZSBjb250YWlucyBlcnJvcnMgKHRlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvQW5nbGVIYXReSW5GaWxlbmFtZUludmFsaWQueHNkKS4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCByaWdodCBjbGljayBvbiB0aGUgbWVzc2FnZSBpbiB0aGUgUHJvYmxlbXMgVmlldyBhbmQgc2VsZWN0ICJTaG93IERldGFpbHMuLi4iIFsxLCAwXQorUmVmZXJlbmNlZCBmaWxlIGNvbnRhaW5zIGVycm9ycyAodGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9BbmdsZUhhdF5JbkZpbGVuYW1lSW52YWxpZC54c2QpLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJpZ2h0IGNsaWNrIG9uIHRoZSBtZXNzYWdlIGFuZCBzZWxlY3QgIlNob3cgRGV0YWlscy4uLiIgWzEsIDBdCiAtPiBYTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9JbXBvcnRBbmdsZUhhdEluUGF0aEludmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9BbmdsZUhhdF5JblBhdGgvSW1wb3J0QW5nbGVIYXRJblBhdGhJbnZhbGlkLnhzZC1sb2cKaW5kZXggMzBhZWMwOS4uOGZhNjEzNSAxMDA2NDQKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9JbXBvcnRBbmdsZUhhdEluUGF0aEludmFsaWQueHNkLWxvZworKysgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0ltcG9ydEFuZ2xlSGF0SW5QYXRoSW52YWxpZC54c2QtbG9nCkBAIC0xLDYgKzEsNiBAQAogbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQogCiAtLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotUmVmZXJlbmNlZCBmaWxlIGNvbnRhaW5zIGVycm9ycyAodGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9BbmdsZUhhdEluUGF0aEludmFsaWQueHNkKS4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCByaWdodCBjbGljayBvbiB0aGUgbWVzc2FnZSBpbiB0aGUgUHJvYmxlbXMgVmlldyBhbmQgc2VsZWN0ICJTaG93IERldGFpbHMuLi4iIFsxLCAwXQorUmVmZXJlbmNlZCBmaWxlIGNvbnRhaW5zIGVycm9ycyAodGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9BbmdsZUhhdEluUGF0aEludmFsaWQueHNkKS4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCByaWdodCBjbGljayBvbiB0aGUgbWVzc2FnZSBhbmQgc2VsZWN0ICJTaG93IERldGFpbHMuLi4iIFsxLCAwXQogLT4gWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQ2xvc2VCcmFja2V0XDA1MUluUGF0aC9JbXBvcnRDbG9zZUJyYWNrZXRJblBhdGhJbnZhbGlkLnhzZC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9DbG9zZUJyYWNrZXRcMDUxSW5QYXRoL0ltcG9ydENsb3NlQnJhY2tldEluUGF0aEludmFsaWQueHNkLWxvZyIKaW5kZXggZGMxYTM4Zi4uNDNhNjcyZSAxMDA2NDQKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9DbG9zZUJyYWNrZXRcMDUxSW5QYXRoL0ltcG9ydENsb3NlQnJhY2tldEluUGF0aEludmFsaWQueHNkLWxvZyIKKysrICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9DbG9zZUJyYWNrZXRcMDUxSW5QYXRoL0ltcG9ydENsb3NlQnJhY2tldEluUGF0aEludmFsaWQueHNkLWxvZyIKQEAgLTEsNiArMSw2IEBACiBudW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCiAKIC0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1SZWZlcmVuY2VkIGZpbGUgY29udGFpbnMgZXJyb3JzICh0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0KUluUGF0aC9DbG9zZUJyYWNrZXRJblBhdGhJbnZhbGlkLnhzZCkuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmlnaHQgY2xpY2sgb24gdGhlIG1lc3NhZ2UgaW4gdGhlIFByb2JsZW1zIFZpZXcgYW5kIHNlbGVjdCAiU2hvdyBEZXRhaWxzLi4uIiBbMSwgMF0KK1JlZmVyZW5jZWQgZmlsZSBjb250YWlucyBlcnJvcnMgKHRlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9DbG9zZUJyYWNrZXQpSW5QYXRoL0Nsb3NlQnJhY2tldEluUGF0aEludmFsaWQueHNkKS4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCByaWdodCBjbGljayBvbiB0aGUgbWVzc2FnZSBhbmQgc2VsZWN0ICJTaG93IERldGFpbHMuLi4iIFsxLCAwXQogLT4gWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9JbXBvcnRDbG9zZUJyYWNrZXRcMDUxSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvSW1wb3J0Q2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2ciCmluZGV4IGI0ZTRhMGUuLjJmY2Y0OWIgMTAwNjQ0Ci0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9JbXBvcnRDbG9zZUJyYWNrZXRcMDUxSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyIKKysrICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9DbG9zZUJyYWNrZXRJbkZpbGVuYW1lL0ltcG9ydENsb3NlQnJhY2tldFwwNTFJbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIgpAQCAtMSw2ICsxLDYgQEAKIG51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKIAogLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVJlZmVyZW5jZWQgZmlsZSBjb250YWlucyBlcnJvcnMgKHRlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9DbG9zZUJyYWNrZXRJbkZpbGVuYW1lL0Nsb3NlQnJhY2tldClJbkZpbGVuYW1lSW52YWxpZC54c2QpLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJpZ2h0IGNsaWNrIG9uIHRoZSBtZXNzYWdlIGluIHRoZSBQcm9ibGVtcyBWaWV3IGFuZCBzZWxlY3QgIlNob3cgRGV0YWlscy4uLiIgWzEsIDBdCitSZWZlcmVuY2VkIGZpbGUgY29udGFpbnMgZXJyb3JzICh0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9DbG9zZUJyYWNrZXQpSW5GaWxlbmFtZUludmFsaWQueHNkKS4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCByaWdodCBjbGljayBvbiB0aGUgbWVzc2FnZSBhbmQgc2VsZWN0ICJTaG93IERldGFpbHMuLi4iIFsxLCAwXQogLT4gWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9EYXNoLUluUGF0aC9JbXBvcnREYXNoSW5QYXRoSW52YWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Rhc2gtSW5QYXRoL0ltcG9ydERhc2hJblBhdGhJbnZhbGlkLnhzZC1sb2cKaW5kZXggYjQxZTIwOS4uM2RjZWYxOCAxMDA2NDQKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Rhc2gtSW5QYXRoL0ltcG9ydERhc2hJblBhdGhJbnZhbGlkLnhzZC1sb2cKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Rhc2gtSW5QYXRoL0ltcG9ydERhc2hJblBhdGhJbnZhbGlkLnhzZC1sb2cKQEAgLTEsNiArMSw2IEBACiBudW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCiAKIC0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1SZWZlcmVuY2VkIGZpbGUgY29udGFpbnMgZXJyb3JzICh0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaC1JblBhdGgvRGFzaEluUGF0aEludmFsaWQueHNkKS4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCByaWdodCBjbGljayBvbiB0aGUgbWVzc2FnZSBpbiB0aGUgUHJvYmxlbXMgVmlldyBhbmQgc2VsZWN0ICJTaG93IERldGFpbHMuLi4iIFsxLCAwXQorUmVmZXJlbmNlZCBmaWxlIGNvbnRhaW5zIGVycm9ycyAodGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2gtSW5QYXRoL0Rhc2hJblBhdGhJbnZhbGlkLnhzZCkuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmlnaHQgY2xpY2sgb24gdGhlIG1lc3NhZ2UgYW5kIHNlbGVjdCAiU2hvdyBEZXRhaWxzLi4uIiBbMSwgMF0KIC0+IFhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRGFzaEluRmlsZW5hbWUvSW1wb3J0RGFzaC1JbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0ltcG9ydERhc2gtSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZwppbmRleCBlNTk4MjBlLi44MjY5N2RmIDEwMDY0NAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRGFzaEluRmlsZW5hbWUvSW1wb3J0RGFzaC1JbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9EYXNoSW5GaWxlbmFtZS9JbXBvcnREYXNoLUluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cKQEAgLTEsNiArMSw2IEBACiBudW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCiAKIC0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1SZWZlcmVuY2VkIGZpbGUgY29udGFpbnMgZXJyb3JzICh0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaEluRmlsZW5hbWUvRGFzaC1JbkZpbGVuYW1lSW52YWxpZC54c2QpLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJpZ2h0IGNsaWNrIG9uIHRoZSBtZXNzYWdlIGluIHRoZSBQcm9ibGVtcyBWaWV3IGFuZCBzZWxlY3QgIlNob3cgRGV0YWlscy4uLiIgWzEsIDBdCitSZWZlcmVuY2VkIGZpbGUgY29udGFpbnMgZXJyb3JzICh0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaEluRmlsZW5hbWUvRGFzaC1JbkZpbGVuYW1lSW52YWxpZC54c2QpLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJpZ2h0IGNsaWNrIG9uIHRoZSBtZXNzYWdlIGFuZCBzZWxlY3QgIlNob3cgRGV0YWlscy4uLiIgWzEsIDBdCiAtPiBYTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9FeGNsYW1hdGlvblwwNDFJblBhdGgvSW1wb3J0RXhjbGFtYXRpb25JblBhdGhJbnZhbGlkLnhzZC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9FeGNsYW1hdGlvblwwNDFJblBhdGgvSW1wb3J0RXhjbGFtYXRpb25JblBhdGhJbnZhbGlkLnhzZC1sb2ciCmluZGV4IGQ2NjllN2QuLmQwNjI3ZDQgMTAwNjQ0Ci0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRXhjbGFtYXRpb25cMDQxSW5QYXRoL0ltcG9ydEV4Y2xhbWF0aW9uSW5QYXRoSW52YWxpZC54c2QtbG9nIgorKysgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0V4Y2xhbWF0aW9uXDA0MUluUGF0aC9JbXBvcnRFeGNsYW1hdGlvbkluUGF0aEludmFsaWQueHNkLWxvZyIKQEAgLTEsNiArMSw2IEBACiBudW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCiAKIC0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1SZWZlcmVuY2VkIGZpbGUgY29udGFpbnMgZXJyb3JzICh0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb24hSW5QYXRoL0V4Y2xhbWF0aW9uSW5QYXRoSW52YWxpZC54c2QpLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJpZ2h0IGNsaWNrIG9uIHRoZSBtZXNzYWdlIGluIHRoZSBQcm9ibGVtcyBWaWV3IGFuZCBzZWxlY3QgIlNob3cgRGV0YWlscy4uLiIgWzEsIDBdCitSZWZlcmVuY2VkIGZpbGUgY29udGFpbnMgZXJyb3JzICh0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb24hSW5QYXRoL0V4Y2xhbWF0aW9uSW5QYXRoSW52YWxpZC54c2QpLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJpZ2h0IGNsaWNrIG9uIHRoZSBtZXNzYWdlIGFuZCBzZWxlY3QgIlNob3cgRGV0YWlscy4uLiIgWzEsIDBdCiAtPiBYTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvSW1wb3J0RXhjbGFtYXRpb25cMDQxSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9JbXBvcnRFeGNsYW1hdGlvblwwNDFJbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIgppbmRleCA2OTkwZmRlLi44MGE4ZjQyIDEwMDY0NAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9JbXBvcnRFeGNsYW1hdGlvblwwNDFJbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIgorKysgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9JbXBvcnRFeGNsYW1hdGlvblwwNDFJbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIgpAQCAtMSw2ICsxLDYgQEAKIG51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKIAogLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVJlZmVyZW5jZWQgZmlsZSBjb250YWlucyBlcnJvcnMgKHRlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvRXhjbGFtYXRpb24hSW5GaWxlbmFtZUludmFsaWQueHNkKS4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCByaWdodCBjbGljayBvbiB0aGUgbWVzc2FnZSBpbiB0aGUgUHJvYmxlbXMgVmlldyBhbmQgc2VsZWN0ICJTaG93IERldGFpbHMuLi4iIFsxLCAwXQorUmVmZXJlbmNlZCBmaWxlIGNvbnRhaW5zIGVycm9ycyAodGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9FeGNsYW1hdGlvbiFJbkZpbGVuYW1lSW52YWxpZC54c2QpLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJpZ2h0IGNsaWNrIG9uIHRoZSBtZXNzYWdlIGFuZCBzZWxlY3QgIlNob3cgRGV0YWlscy4uLiIgWzEsIDBdCiAtPiBYTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9PcGVuQnJhY2tldFwwNTBJblBhdGgvSW1wb3J0T3BlbkJyYWNrZXRJblBhdGhJbnZhbGlkLnhzZC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9PcGVuQnJhY2tldFwwNTBJblBhdGgvSW1wb3J0T3BlbkJyYWNrZXRJblBhdGhJbnZhbGlkLnhzZC1sb2ciCmluZGV4IGZkNGM0MTQuLjdlZDliZTggMTAwNjQ0Ci0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvT3BlbkJyYWNrZXRcMDUwSW5QYXRoL0ltcG9ydE9wZW5CcmFja2V0SW5QYXRoSW52YWxpZC54c2QtbG9nIgorKysgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL09wZW5CcmFja2V0XDA1MEluUGF0aC9JbXBvcnRPcGVuQnJhY2tldEluUGF0aEludmFsaWQueHNkLWxvZyIKQEAgLTEsNiArMSw2IEBACiBudW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCiAKIC0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1SZWZlcmVuY2VkIGZpbGUgY29udGFpbnMgZXJyb3JzICh0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXQoSW5QYXRoL09wZW5CcmFja2V0SW5QYXRoSW52YWxpZC54c2QpLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJpZ2h0IGNsaWNrIG9uIHRoZSBtZXNzYWdlIGluIHRoZSBQcm9ibGVtcyBWaWV3IGFuZCBzZWxlY3QgIlNob3cgRGV0YWlscy4uLiIgWzEsIDBdCitSZWZlcmVuY2VkIGZpbGUgY29udGFpbnMgZXJyb3JzICh0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXQoSW5QYXRoL09wZW5CcmFja2V0SW5QYXRoSW52YWxpZC54c2QpLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJpZ2h0IGNsaWNrIG9uIHRoZSBtZXNzYWdlIGFuZCBzZWxlY3QgIlNob3cgRGV0YWlscy4uLiIgWzEsIDBdCiAtPiBYTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvSW1wb3J0T3BlbkJyYWNrZXRcMDUwSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9JbXBvcnRPcGVuQnJhY2tldFwwNTBJbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIgppbmRleCA0NDYxMTc1Li45ZGQ4YmNlIDEwMDY0NAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9JbXBvcnRPcGVuQnJhY2tldFwwNTBJbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIgorKysgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9JbXBvcnRPcGVuQnJhY2tldFwwNTBJbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIgpAQCAtMSw2ICsxLDYgQEAKIG51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKIAogLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVJlZmVyZW5jZWQgZmlsZSBjb250YWlucyBlcnJvcnMgKHRlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvT3BlbkJyYWNrZXQoSW5GaWxlbmFtZUludmFsaWQueHNkKS4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCByaWdodCBjbGljayBvbiB0aGUgbWVzc2FnZSBpbiB0aGUgUHJvYmxlbXMgVmlldyBhbmQgc2VsZWN0ICJTaG93IERldGFpbHMuLi4iIFsxLCAwXQorUmVmZXJlbmNlZCBmaWxlIGNvbnRhaW5zIGVycm9ycyAodGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9PcGVuQnJhY2tldChJbkZpbGVuYW1lSW52YWxpZC54c2QpLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJpZ2h0IGNsaWNrIG9uIHRoZSBtZXNzYWdlIGFuZCBzZWxlY3QgIlNob3cgRGV0YWlscy4uLiIgWzEsIDBdCiAtPiBYTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1BlcmlvZC5JblBhdGgvSW1wb3J0UGVyaW9kSW5QYXRoSW52YWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1BlcmlvZC5JblBhdGgvSW1wb3J0UGVyaW9kSW5QYXRoSW52YWxpZC54c2QtbG9nCmluZGV4IDE2NTc0MDUuLjYwYTcwMjEgMTAwNjQ0Ci0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QZXJpb2QuSW5QYXRoL0ltcG9ydFBlcmlvZEluUGF0aEludmFsaWQueHNkLWxvZworKysgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUGVyaW9kLkluUGF0aC9JbXBvcnRQZXJpb2RJblBhdGhJbnZhbGlkLnhzZC1sb2cKQEAgLTEsNiArMSw2IEBACiBudW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCiAKIC0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1SZWZlcmVuY2VkIGZpbGUgY29udGFpbnMgZXJyb3JzICh0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUGVyaW9kLkluUGF0aC9QZXJpb2RJblBhdGhJbnZhbGlkLnhzZCkuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmlnaHQgY2xpY2sgb24gdGhlIG1lc3NhZ2UgaW4gdGhlIFByb2JsZW1zIFZpZXcgYW5kIHNlbGVjdCAiU2hvdyBEZXRhaWxzLi4uIiBbMSwgMF0KK1JlZmVyZW5jZWQgZmlsZSBjb250YWlucyBlcnJvcnMgKHRlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2QuSW5QYXRoL1BlcmlvZEluUGF0aEludmFsaWQueHNkKS4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCByaWdodCBjbGljayBvbiB0aGUgbWVzc2FnZSBhbmQgc2VsZWN0ICJTaG93IERldGFpbHMuLi4iIFsxLCAwXQogLT4gWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL0ltcG9ydFBlcmlvZC5JbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvSW1wb3J0UGVyaW9kLkluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cKaW5kZXggZmVmODMxOS4uZmU3OWFlYSAxMDA2NDQKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvSW1wb3J0UGVyaW9kLkluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvSW1wb3J0UGVyaW9kLkluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cKQEAgLTEsNiArMSw2IEBACiBudW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCiAKIC0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1SZWZlcmVuY2VkIGZpbGUgY29udGFpbnMgZXJyb3JzICh0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9QZXJpb2QuSW5GaWxlbmFtZUludmFsaWQueHNkKS4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCByaWdodCBjbGljayBvbiB0aGUgbWVzc2FnZSBpbiB0aGUgUHJvYmxlbXMgVmlldyBhbmQgc2VsZWN0ICJTaG93IERldGFpbHMuLi4iIFsxLCAwXQorUmVmZXJlbmNlZCBmaWxlIGNvbnRhaW5zIGVycm9ycyAodGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvUGVyaW9kLkluRmlsZW5hbWVJbnZhbGlkLnhzZCkuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmlnaHQgY2xpY2sgb24gdGhlIG1lc3NhZ2UgYW5kIHNlbGVjdCAiU2hvdyBEZXRhaWxzLi4uIiBbMSwgMF0KIC0+IFhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1F1b3RlXDA0N0luUGF0aC9JbXBvcnRRdW90ZUluUGF0aEludmFsaWQueHNkLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1F1b3RlXDA0N0luUGF0aC9JbXBvcnRRdW90ZUluUGF0aEludmFsaWQueHNkLWxvZyIKaW5kZXggZDk1ODRjOC4uOWM3MzlmOSAxMDA2NDQKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9RdW90ZVwwNDdJblBhdGgvSW1wb3J0UXVvdGVJblBhdGhJbnZhbGlkLnhzZC1sb2ciCisrKyAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUXVvdGVcMDQ3SW5QYXRoL0ltcG9ydFF1b3RlSW5QYXRoSW52YWxpZC54c2QtbG9nIgpAQCAtMSw2ICsxLDYgQEAKIG51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKIAogLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVJlZmVyZW5jZWQgZmlsZSBjb250YWlucyBlcnJvcnMgKHRlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZSdJblBhdGgvUXVvdGVJblBhdGhJbnZhbGlkLnhzZCkuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmlnaHQgY2xpY2sgb24gdGhlIG1lc3NhZ2UgaW4gdGhlIFByb2JsZW1zIFZpZXcgYW5kIHNlbGVjdCAiU2hvdyBEZXRhaWxzLi4uIiBbMSwgMF0KK1JlZmVyZW5jZWQgZmlsZSBjb250YWlucyBlcnJvcnMgKHRlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZSdJblBhdGgvUXVvdGVJblBhdGhJbnZhbGlkLnhzZCkuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmlnaHQgY2xpY2sgb24gdGhlIG1lc3NhZ2UgYW5kIHNlbGVjdCAiU2hvdyBEZXRhaWxzLi4uIiBbMSwgMF0KIC0+IFhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9JbXBvcnRRdW90ZVwwNDdJbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL0ltcG9ydFF1b3RlXDA0N0luRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2ciCmluZGV4IDM2MWQ3NTcuLmY4MDcxZTIgMTAwNjQ0Ci0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL0ltcG9ydFF1b3RlXDA0N0luRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2ciCisrKyAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL0ltcG9ydFF1b3RlXDA0N0luRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2ciCkBAIC0xLDYgKzEsNiBAQAogbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQogCiAtLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotUmVmZXJlbmNlZCBmaWxlIGNvbnRhaW5zIGVycm9ycyAodGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9RdW90ZSdJbkZpbGVuYW1lSW52YWxpZC54c2QpLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJpZ2h0IGNsaWNrIG9uIHRoZSBtZXNzYWdlIGluIHRoZSBQcm9ibGVtcyBWaWV3IGFuZCBzZWxlY3QgIlNob3cgRGV0YWlscy4uLiIgWzEsIDBdCitSZWZlcmVuY2VkIGZpbGUgY29udGFpbnMgZXJyb3JzICh0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL1F1b3RlJ0luRmlsZW5hbWVJbnZhbGlkLnhzZCkuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmlnaHQgY2xpY2sgb24gdGhlIG1lc3NhZ2UgYW5kIHNlbGVjdCAiU2hvdyBEZXRhaWxzLi4uIiBbMSwgMF0KIC0+IFhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvU3BhY2UgSW5QYXRoL0ltcG9ydFNwYWNlSW5QYXRoSW52YWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1NwYWNlIEluUGF0aC9JbXBvcnRTcGFjZUluUGF0aEludmFsaWQueHNkLWxvZwppbmRleCA4ODRkOGE1Li41NjlhNmUyIDEwMDY0NAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvU3BhY2UgSW5QYXRoL0ltcG9ydFNwYWNlSW5QYXRoSW52YWxpZC54c2QtbG9nCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9TcGFjZSBJblBhdGgvSW1wb3J0U3BhY2VJblBhdGhJbnZhbGlkLnhzZC1sb2cKQEAgLTEsNiArMSw2IEBACiBudW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCiAKIC0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1SZWZlcmVuY2VkIGZpbGUgY29udGFpbnMgZXJyb3JzICh0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvU3BhY2UgSW5QYXRoL1NwYWNlSW5QYXRoSW52YWxpZC54c2QpLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJpZ2h0IGNsaWNrIG9uIHRoZSBtZXNzYWdlIGluIHRoZSBQcm9ibGVtcyBWaWV3IGFuZCBzZWxlY3QgIlNob3cgRGV0YWlscy4uLiIgWzEsIDBdCitSZWZlcmVuY2VkIGZpbGUgY29udGFpbnMgZXJyb3JzICh0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvU3BhY2UgSW5QYXRoL1NwYWNlSW5QYXRoSW52YWxpZC54c2QpLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJpZ2h0IGNsaWNrIG9uIHRoZSBtZXNzYWdlIGFuZCBzZWxlY3QgIlNob3cgRGV0YWlscy4uLiIgWzEsIDBdCiAtPiBYTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9JbXBvcnRTcGFjZSBJbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9JbXBvcnRTcGFjZSBJbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nCmluZGV4IDBhZGY1MjIuLmJiNzgxMjQgMTAwNjQ0Ci0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9TcGFjZUluRmlsZW5hbWUvSW1wb3J0U3BhY2UgSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZworKysgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL0ltcG9ydFNwYWNlIEluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cKQEAgLTEsNiArMSw2IEBACiBudW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCiAKIC0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1SZWZlcmVuY2VkIGZpbGUgY29udGFpbnMgZXJyb3JzICh0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL1NwYWNlIEluRmlsZW5hbWVJbnZhbGlkLnhzZCkuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmlnaHQgY2xpY2sgb24gdGhlIG1lc3NhZ2UgaW4gdGhlIFByb2JsZW1zIFZpZXcgYW5kIHNlbGVjdCAiU2hvdyBEZXRhaWxzLi4uIiBbMSwgMF0KK1JlZmVyZW5jZWQgZmlsZSBjb250YWlucyBlcnJvcnMgKHRlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZUluRmlsZW5hbWUvU3BhY2UgSW5GaWxlbmFtZUludmFsaWQueHNkKS4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCByaWdodCBjbGljayBvbiB0aGUgbWVzc2FnZSBhbmQgc2VsZWN0ICJTaG93IERldGFpbHMuLi4iIFsxLCAwXQogLT4gWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9UaWxkZUluRmlsZW5hbWUvQ29weSBvZiAtZm9yWGVyY2VzMi42LjItIEltcG9ydFRpbGRlfkluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL0NvcHkgb2YgLWZvclhlcmNlczIuNi4yLSBJbXBvcnRUaWxkZX5JbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nCmluZGV4IDdmODllZTguLjBiOWIxMDkgMTAwNjQ0Ci0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9UaWxkZUluRmlsZW5hbWUvQ29weSBvZiAtZm9yWGVyY2VzMi42LjItIEltcG9ydFRpbGRlfkluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9Db3B5IG9mIC1mb3JYZXJjZXMyLjYuMi0gSW1wb3J0VGlsZGV+SW5GaWxlbmFtZUludmFsaWQueHNkLWxvZwpAQCAtMSw2ICsxLDYgQEAKIG51bWJlciBvZiBlcnJvcnMgICAgICA6IDENCiANCiAtLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLVJlZmVyZW5jZWQgZmlsZSBjb250YWlucyBlcnJvcnMgKHRlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZUluRmlsZW5hbWUvVGlsZGUlN0VJbkZpbGVuYW1lSW52YWxpZC54c2QpLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJpZ2h0IGNsaWNrIG9uIHRoZSBtZXNzYWdlIGluIHRoZSBQcm9ibGVtcyBWaWV3IGFuZCBzZWxlY3QgIlNob3cgRGV0YWlscy4uLiIgWzEsIDBdDQorUmVmZXJlbmNlZCBmaWxlIGNvbnRhaW5zIGVycm9ycyAodGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9UaWxkZSU3RUluRmlsZW5hbWVJbnZhbGlkLnhzZCkuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmlnaHQgY2xpY2sgb24gdGhlIG1lc3NhZ2UgYW5kIHNlbGVjdCAiU2hvdyBEZXRhaWxzLi4uIiBbMSwgMF0NCiAtPiBYTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdDQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL0ltcG9ydFRpbGRlfkluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL0ltcG9ydFRpbGRlfkluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cKaW5kZXggOTNhNzVlMC4uNjNmNmU5MSAxMDA2NDQKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9JbXBvcnRUaWxkZX5JbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9UaWxkZUluRmlsZW5hbWUvSW1wb3J0VGlsZGV+SW5GaWxlbmFtZUludmFsaWQueHNkLWxvZwpAQCAtMSw2ICsxLDYgQEAKIG51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKIAogLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVJlZmVyZW5jZWQgZmlsZSBjb250YWlucyBlcnJvcnMgKHRlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZUluRmlsZW5hbWUvVGlsZGV+SW5GaWxlbmFtZUludmFsaWQueHNkKS4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCByaWdodCBjbGljayBvbiB0aGUgbWVzc2FnZSBpbiB0aGUgUHJvYmxlbXMgVmlldyBhbmQgc2VsZWN0ICJTaG93IERldGFpbHMuLi4iIFsxLCAwXQorUmVmZXJlbmNlZCBmaWxlIGNvbnRhaW5zIGVycm9ycyAodGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9UaWxkZX5JbkZpbGVuYW1lSW52YWxpZC54c2QpLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJpZ2h0IGNsaWNrIG9uIHRoZSBtZXNzYWdlIGFuZCBzZWxlY3QgIlNob3cgRGV0YWlscy4uLiIgWzEsIDBdCiAtPiBYTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1RpbGRlfkluUGF0aC9JbXBvcnRUaWxkZUluUGF0aEludmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9UaWxkZX5JblBhdGgvSW1wb3J0VGlsZGVJblBhdGhJbnZhbGlkLnhzZC1sb2cKaW5kZXggMTIwMDA5Ni4uMTU5NzEzMCAxMDA2NDQKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1RpbGRlfkluUGF0aC9JbXBvcnRUaWxkZUluUGF0aEludmFsaWQueHNkLWxvZworKysgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGV+SW5QYXRoL0ltcG9ydFRpbGRlSW5QYXRoSW52YWxpZC54c2QtbG9nCkBAIC0xLDYgKzEsNiBAQAogbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQogCiAtLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotUmVmZXJlbmNlZCBmaWxlIGNvbnRhaW5zIGVycm9ycyAodGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlfkluUGF0aC9UaWxkZUluUGF0aEludmFsaWQueHNkKS4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCByaWdodCBjbGljayBvbiB0aGUgbWVzc2FnZSBpbiB0aGUgUHJvYmxlbXMgVmlldyBhbmQgc2VsZWN0ICJTaG93IERldGFpbHMuLi4iIFsxLCAwXQorUmVmZXJlbmNlZCBmaWxlIGNvbnRhaW5zIGVycm9ycyAodGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlfkluUGF0aC9UaWxkZUluUGF0aEludmFsaWQueHNkKS4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCByaWdodCBjbGljayBvbiB0aGUgbWVzc2FnZSBhbmQgc2VsZWN0ICJTaG93IERldGFpbHMuLi4iIFsxLCAwXQogLT4gWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9JbXBvcnRVbmRlcnNjb3JlX0luRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvSW1wb3J0VW5kZXJzY29yZV9JbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nCmluZGV4IDhkMTg1ZDYuLjQ5ZWEzZjcgMTAwNjQ0Ci0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9JbXBvcnRVbmRlcnNjb3JlX0luRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cKKysrIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL0ltcG9ydFVuZGVyc2NvcmVfSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZwpAQCAtMSw2ICsxLDYgQEAKIG51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKIAogLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVJlZmVyZW5jZWQgZmlsZSBjb250YWlucyBlcnJvcnMgKHRlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9VbmRlcnNjb3JlX0luRmlsZW5hbWVJbnZhbGlkLnhzZCkuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmlnaHQgY2xpY2sgb24gdGhlIG1lc3NhZ2UgaW4gdGhlIFByb2JsZW1zIFZpZXcgYW5kIHNlbGVjdCAiU2hvdyBEZXRhaWxzLi4uIiBbMSwgMF0KK1JlZmVyZW5jZWQgZmlsZSBjb250YWlucyBlcnJvcnMgKHRlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9VbmRlcnNjb3JlX0luRmlsZW5hbWVJbnZhbGlkLnhzZCkuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmlnaHQgY2xpY2sgb24gdGhlIG1lc3NhZ2UgYW5kIHNlbGVjdCAiU2hvdyBEZXRhaWxzLi4uIiBbMSwgMF0KIC0+IFhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvSW1wb3J0VW5kZXJzY29yZUluUGF0aEludmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9JbXBvcnRVbmRlcnNjb3JlSW5QYXRoSW52YWxpZC54c2QtbG9nCmluZGV4IGUwYjA1NTkuLjkxZTc3ODYgMTAwNjQ0Ci0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9JbXBvcnRVbmRlcnNjb3JlSW5QYXRoSW52YWxpZC54c2QtbG9nCisrKyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9JbXBvcnRVbmRlcnNjb3JlSW5QYXRoSW52YWxpZC54c2QtbG9nCkBAIC0xLDYgKzEsNiBAQAogbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQogCiAtLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotUmVmZXJlbmNlZCBmaWxlIGNvbnRhaW5zIGVycm9ycyAodGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL1VuZGVyc2NvcmVJblBhdGhJbnZhbGlkLnhzZCkuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmlnaHQgY2xpY2sgb24gdGhlIG1lc3NhZ2UgaW4gdGhlIFByb2JsZW1zIFZpZXcgYW5kIHNlbGVjdCAiU2hvdyBEZXRhaWxzLi4uIiBbMSwgMF0KK1JlZmVyZW5jZWQgZmlsZSBjb250YWlucyBlcnJvcnMgKHRlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9VbmRlcnNjb3JlSW5QYXRoSW52YWxpZC54c2QpLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJpZ2h0IGNsaWNrIG9uIHRoZSBtZXNzYWdlIGFuZCBzZWxlY3QgIlNob3cgRGV0YWlscy4uLiIgWzEsIDBdCiAtPiBYTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo=