ZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCmluZGV4IDZhOTYyMWQuLmNkZGI5OWQgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcwpAQCAtMSw1ICsxLDYgQEAKLSNTYXQgRGVjIDIwIDIxOjIxOjI0IENFVCAyMDA4CiBlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorZW5jb2RpbmcvL3RzdC1yc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi91bWxhdXQucGF0Y2g9SVNPLTg4NTktMQorZW5jb2RpbmcvL3RzdC1yc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi91bWxhdXRfUG9zdEltYWdlPUlTTy04ODU5LTEKIGVuY29kaW5nLy90c3QtcnNyYy9vcmcvZWNsaXBzZS9qZ2l0L3BhdGNoL3Rlc3RHZXRUZXh0X0JvdGhJU084ODU5MS5wYXRjaD1JU08tODg1OS0xCiBlbmNvZGluZy8vdHN0LXJzcmMvb3JnL2VjbGlwc2UvamdpdC9wYXRjaC90ZXN0R2V0VGV4dF9Db252ZXJ0LnBhdGNoPUlTTy04ODU5LTEKIGVuY29kaW5nLy90c3QtcnNyYy9vcmcvZWNsaXBzZS9qZ2l0L3BhdGNoL3Rlc3RHZXRUZXh0X0RpZmZDYy5wYXRjaD1JU08tODg1OS0xCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0LXJzcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL3VtbGF1dC5wYXRjaCBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3QtcnNyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvdW1sYXV0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczODBkYmUKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0LXJzcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL3VtbGF1dC5wYXRjaApAQCAtMCwwICsxLDcgQEAKK2RpZmYgLS1naXQgYS91bWxhdXQgYi91bWxhdXQKK2luZGV4IDAwM2EwNTQuLjU1N2Y3MmYgMTAwNjQ0CistLS0gYS91bWxhdXQKKysrKyBiL3VtbGF1dAorQEAgLTEgKzEgQEAKKy3DhMOWw5wKKyvE1twKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3QtcnNyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvdW1sYXV0X1Bvc3RJbWFnZSBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3QtcnNyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvdW1sYXV0X1Bvc3RJbWFnZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTdmNzJmCi0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC1yc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi91bWxhdXRfUG9zdEltYWdlCkBAIC0wLDAgKzEgQEAKK8TW3ApkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC1yc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi91bWxhdXRfUHJlSW1hZ2UgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0LXJzcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL3VtbGF1dF9QcmVJbWFnZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDNhMDU0Ci0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC1yc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi91bWxhdXRfUHJlSW1hZ2UKQEAgLTAsMCArMSBAQAorw4TDlsOcCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvYXBpL0FwcGx5Q29tbWFuZFRlc3QuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hcGkvQXBwbHlDb21tYW5kVGVzdC5qYXZhCmluZGV4IGU5Yjg5MjQuLmI5OTdhYzAgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hcGkvQXBwbHlDb21tYW5kVGVzdC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hcGkvQXBwbHlDb21tYW5kVGVzdC5qYXZhCkBAIC0yODgsNiArMjg4LDE0IEBACiAJfQogCiAJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0RW5jb2RpbmdDaGFuZ2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJLy8gVGhpcyBpcyBhIHRleHQgcGF0Y2ggdGhhdCBjaGFuZ2VzIGEgZmlsZSBjb250YWluaW5nIMOEw5bDnCBpbiBVVEYtOCB0bworCQkvLyB0aGUgc2FtZSBjaGFyYWN0ZXJzIGluIElTTy04ODU5LTEuIFRoZSBwYXRjaCBmaWxlIGl0c2VsZiB1c2VzIG1peGVkCisJCS8vIGVuY29kaW5nLiBTaW5jZSBjaGVja0ZpbGUoKSB3b3JrcyB3aXRoIHN0cmluZ3MgdXNlIHRoZSBiaW5hcnkgY2hlY2suCisJCWNoZWNrQmluYXJ5KCJ1bWxhdXQiLCB0cnVlKTsKKwl9CisKKwlAVGVzdAogCXB1YmxpYyB2b2lkIHRlc3RBZGRBMSgpIHRocm93cyBFeGNlcHRpb24gewogCQlBcHBseVJlc3VsdCByZXN1bHQgPSBpbml0KCJBMSIsIGZhbHNlLCB0cnVlKTsKIAkJYXNzZXJ0RXF1YWxzKDEsIHJlc3VsdC5nZXRVcGRhdGVkRmlsZXMoKS5zaXplKCkpOwpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9hcGkvQXBwbHlDb21tYW5kLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9BcHBseUNvbW1hbmQuamF2YQppbmRleCBmN2ViYTg4Li5lYzUzNDEyIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9BcHBseUNvbW1hbmQuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9BcHBseUNvbW1hbmQuamF2YQpAQCAtMTAsNyArMTAsNiBAQAogcGFja2FnZSBvcmcuZWNsaXBzZS5qZ2l0LmFwaTsKIAogaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkV3JpdGVyOwogaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5SW5wdXRTdHJlYW07CiBpbXBvcnQgamF2YS5pby5GaWxlOwogaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwpAQCAtMTgsOSArMTcsNyBAQAogaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CiBpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKIGltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbVdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLldyaXRlcjsKLWltcG9ydCBqYXZhLm5pby5jaGFyc2V0LlN0YW5kYXJkQ2hhcnNldHM7CitpbXBvcnQgamF2YS5uaW8uQnl0ZUJ1ZmZlcjsKIGltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVzOwogaW1wb3J0IGphdmEubmlvLmZpbGUuU3RhbmRhcmRDb3B5T3B0aW9uOwogaW1wb3J0IGphdmEudGV4dC5NZXNzYWdlRm9ybWF0OwpAQCAtNTQ5LDExICs1NDYsMTEgQEAKIAlwcml2YXRlIHZvaWQgYXBwbHlUZXh0KFJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU3RyaW5nIHBhdGgsIFJhd1RleHQgcnQsCiAJCQlGaWxlIGYsIEZpbGVIZWFkZXIgZmgsIENoZWNrb3V0TWV0YWRhdGEgY2hlY2tPdXQpCiAJCQl0aHJvd3MgSU9FeGNlcHRpb24sIFBhdGNoQXBwbHlFeGNlcHRpb24gewotCQlMaXN0PFN0cmluZz4gb2xkTGluZXMgPSBuZXcgQXJyYXlMaXN0PD4ocnQuc2l6ZSgpKTsKKwkJTGlzdDxCeXRlQnVmZmVyPiBvbGRMaW5lcyA9IG5ldyBBcnJheUxpc3Q8PihydC5zaXplKCkpOwogCQlmb3IgKGludCBpID0gMDsgaSA8IHJ0LnNpemUoKTsgaSsrKSB7Ci0JCQlvbGRMaW5lcy5hZGQocnQuZ2V0U3RyaW5nKGkpKTsKKwkJCW9sZExpbmVzLmFkZChydC5nZXRSYXdTdHJpbmcoaSkpOwogCQl9Ci0JCUxpc3Q8U3RyaW5nPiBuZXdMaW5lcyA9IG5ldyBBcnJheUxpc3Q8PihvbGRMaW5lcyk7CisJCUxpc3Q8Qnl0ZUJ1ZmZlcj4gbmV3TGluZXMgPSBuZXcgQXJyYXlMaXN0PD4ob2xkTGluZXMpOwogCQlpbnQgYWZ0ZXJMYXN0SHVuayA9IDA7CiAJCWludCBsaW5lTnVtYmVyU2hpZnQgPSAwOwogCQlpbnQgbGFzdEh1bmtOZXdMaW5lID0gLTE7CkBAIC01NzEsOSArNTY4LDkgQEAKIAkJCQkJYi5sZW5ndGgpOwogCQkJUmF3VGV4dCBocnQgPSBuZXcgUmF3VGV4dChiKTsKIAotCQkJTGlzdDxTdHJpbmc+IGh1bmtMaW5lcyA9IG5ldyBBcnJheUxpc3Q8PihocnQuc2l6ZSgpKTsKKwkJCUxpc3Q8Qnl0ZUJ1ZmZlcj4gaHVua0xpbmVzID0gbmV3IEFycmF5TGlzdDw+KGhydC5zaXplKCkpOwogCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBocnQuc2l6ZSgpOyBpKyspIHsKLQkJCQlodW5rTGluZXMuYWRkKGhydC5nZXRTdHJpbmcoaSkpOworCQkJCWh1bmtMaW5lcy5hZGQoaHJ0LmdldFJhd1N0cmluZyhpKSk7CiAJCQl9CiAKIAkJCWlmIChoaC5nZXROZXdTdGFydExpbmUoKSA9PSAwKSB7CkBAIC02NDIsOCArNjM5LDggQEAKIAkJCWxpbmVOdW1iZXJTaGlmdCA9IGFwcGx5QXQgLSBoaC5nZXROZXdTdGFydExpbmUoKSArIDE7CiAJCQlpbnQgc3ogPSBodW5rTGluZXMuc2l6ZSgpOwogCQkJZm9yIChpbnQgaiA9IDE7IGogPCBzejsgaisrKSB7Ci0JCQkJU3RyaW5nIGh1bmtMaW5lID0gaHVua0xpbmVzLmdldChqKTsKLQkJCQlzd2l0Y2ggKGh1bmtMaW5lLmNoYXJBdCgwKSkgeworCQkJCUJ5dGVCdWZmZXIgaHVua0xpbmUgPSBodW5rTGluZXMuZ2V0KGopOworCQkJCXN3aXRjaCAoaHVua0xpbmUuYXJyYXkoKVtodW5rTGluZS5wb3NpdGlvbigpXSkgewogCQkJCWNhc2UgJyAnOgogCQkJCQlhcHBseUF0Kys7CiAJCQkJCWJyZWFrOwpAQCAtNjUxLDcgKzY0OCw3IEBACiAJCQkJCW5ld0xpbmVzLnJlbW92ZShhcHBseUF0KTsKIAkJCQkJYnJlYWs7CiAJCQkJY2FzZSAnKyc6Ci0JCQkJCW5ld0xpbmVzLmFkZChhcHBseUF0KyssIGh1bmtMaW5lLnN1YnN0cmluZygxKSk7CisJCQkJCW5ld0xpbmVzLmFkZChhcHBseUF0KyssIHNsaWNlKGh1bmtMaW5lLCAxKSk7CiAJCQkJCWJyZWFrOwogCQkJCWRlZmF1bHQ6CiAJCQkJCWJyZWFrOwpAQCAtNjYwLDI4ICs2NTcsMjkgQEAKIAkJCWFmdGVyTGFzdEh1bmsgPSBhcHBseUF0OwogCQl9CiAJCWlmICghaXNOb05ld2xpbmVBdEVuZE9mRmlsZShmaCkpIHsKLQkJCW5ld0xpbmVzLmFkZCgiIik7IC8vJE5PTi1OTFMtMSQKKwkJCW5ld0xpbmVzLmFkZChudWxsKTsKIAkJfQogCQlpZiAoIXJ0LmlzTWlzc2luZ05ld2xpbmVBdEVuZCgpKSB7Ci0JCQlvbGRMaW5lcy5hZGQoIiIpOyAvLyROT04tTkxTLTEkCisJCQlvbGRMaW5lcy5hZGQobnVsbCk7CiAJCX0KLQkJaWYgKCFpc0NoYW5nZWQob2xkTGluZXMsIG5ld0xpbmVzKSkgewotCQkJcmV0dXJuOyAvLyBEb24ndCB0b3VjaCB0aGUgZmlsZQorCQlpZiAob2xkTGluZXMuZXF1YWxzKG5ld0xpbmVzKSkgeworCQkJcmV0dXJuOyAvLyBVbmNoYW5nZWQ7IGRvbid0IHRvdWNoIHRoZSBmaWxlCiAJCX0KIAotCQkvLyBUT0RPOiBmb3JjaW5nIFVURi04IGlzIGEgYml0IHN0cmFuZ2UgYW5kIG1heSBsZWFkIHRvIHJlLWNvZGluZyBpZiB0aGUKLQkJLy8gaW5wdXQgd2FzIHNvbWUgb3RoZXIgZW5jb2RpbmcsIGJ1dCBpdCdzIHdoYXQgcHJldmlvdXMgdmVyc2lvbnMgb2YKLQkJLy8gdGhpcyBjb2RlIHVzZWQuIChFdmVuIGVhcmxpZXIgdGhlIGNvZGUgdXNlZCB0aGUgZGVmYXVsdCBlbmNvZGluZywKLQkJLy8gd2hpY2ggaGFzIHRoZSBzYW1lIHByb2JsZW0uKSBQZXJoYXBzIHVzaW5nIGJ5dGVzIGluc3RlYWQgb2YgU3RyaW5ncwotCQkvLyBmb3IgdGhlIGxpbmVzIHdvdWxkIGJlIGJldHRlci4KIAkJVGVtcG9yYXJ5QnVmZmVyIGJ1ZmZlciA9IG5ldyBUZW1wb3JhcnlCdWZmZXIuTG9jYWxGaWxlKG51bGwpOwogCQl0cnkgewotCQkJdHJ5IChXcml0ZXIgdyA9IG5ldyBCdWZmZXJlZFdyaXRlcigKLQkJCQkJbmV3IE91dHB1dFN0cmVhbVdyaXRlcihidWZmZXIsIFN0YW5kYXJkQ2hhcnNldHMuVVRGXzgpKSkgewotCQkJCWZvciAoSXRlcmF0b3I8U3RyaW5nPiBsID0gbmV3TGluZXMuaXRlcmF0b3IoKTsgbC5oYXNOZXh0KCk7KSB7Ci0JCQkJCXcud3JpdGUobC5uZXh0KCkpOworCQkJdHJ5IChPdXRwdXRTdHJlYW0gb3V0ID0gYnVmZmVyKSB7CisJCQkJZm9yIChJdGVyYXRvcjxCeXRlQnVmZmVyPiBsID0gbmV3TGluZXMuaXRlcmF0b3IoKTsgbAorCQkJCQkJLmhhc05leHQoKTspIHsKKwkJCQkJQnl0ZUJ1ZmZlciBsaW5lID0gbC5uZXh0KCk7CisJCQkJCWlmIChsaW5lID09IG51bGwpIHsKKwkJCQkJCS8vIE11c3QgYmUgdGhlIG1hcmtlciBmb3IgdGhlIGZpbmFsIG5ld2xpbmUKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCW91dC53cml0ZShsaW5lLmFycmF5KCksIGxpbmUucG9zaXRpb24oKSwKKwkJCQkJCQlsaW5lLmxpbWl0KCkgLSBsaW5lLnBvc2l0aW9uKCkpOwogCQkJCQlpZiAobC5oYXNOZXh0KCkpIHsKLQkJCQkJCXcud3JpdGUoJ1xuJyk7CisJCQkJCQlvdXQud3JpdGUoJ1xuJyk7CiAJCQkJCX0KIAkJCQl9CiAJCQl9CkBAIC02OTgsMTggKzY5NiwxOCBAQAogCQkJCWZoLmdldE5ld01vZGUoKSA9PSBGaWxlTW9kZS5FWEVDVVRBQkxFX0ZJTEUpOwogCX0KIAotCXByaXZhdGUgYm9vbGVhbiBjYW5BcHBseUF0KExpc3Q8U3RyaW5nPiBodW5rTGluZXMsIExpc3Q8U3RyaW5nPiBuZXdMaW5lcywKLQkJCWludCBsaW5lKSB7CisJcHJpdmF0ZSBib29sZWFuIGNhbkFwcGx5QXQoTGlzdDxCeXRlQnVmZmVyPiBodW5rTGluZXMsCisJCQlMaXN0PEJ5dGVCdWZmZXI+IG5ld0xpbmVzLCBpbnQgbGluZSkgewogCQlpbnQgc3ogPSBodW5rTGluZXMuc2l6ZSgpOwogCQlpbnQgbGltaXQgPSBuZXdMaW5lcy5zaXplKCk7CiAJCWludCBwb3MgPSBsaW5lOwogCQlmb3IgKGludCBqID0gMTsgaiA8IHN6OyBqKyspIHsKLQkJCVN0cmluZyBodW5rTGluZSA9IGh1bmtMaW5lcy5nZXQoaik7Ci0JCQlzd2l0Y2ggKGh1bmtMaW5lLmNoYXJBdCgwKSkgeworCQkJQnl0ZUJ1ZmZlciBodW5rTGluZSA9IGh1bmtMaW5lcy5nZXQoaik7CisJCQlzd2l0Y2ggKGh1bmtMaW5lLmFycmF5KClbaHVua0xpbmUucG9zaXRpb24oKV0pIHsKIAkJCWNhc2UgJyAnOgogCQkJY2FzZSAnLSc6CiAJCQkJaWYgKHBvcyA+PSBsaW1pdAotCQkJCQkJfHwgIW5ld0xpbmVzLmdldChwb3MpLmVxdWFscyhodW5rTGluZS5zdWJzdHJpbmcoMSkpKSB7CisJCQkJCQl8fCAhbmV3TGluZXMuZ2V0KHBvcykuZXF1YWxzKHNsaWNlKGh1bmtMaW5lLCAxKSkpIHsKIAkJCQkJcmV0dXJuIGZhbHNlOwogCQkJCX0KIAkJCQlwb3MrKzsKQEAgLTcyMSwxMyArNzE5LDkgQEAKIAkJcmV0dXJuIHRydWU7CiAJfQogCi0JcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0NoYW5nZWQoTGlzdDxTdHJpbmc+IG9sLCBMaXN0PFN0cmluZz4gbmwpIHsKLQkJaWYgKG9sLnNpemUoKSAhPSBubC5zaXplKCkpCi0JCQlyZXR1cm4gdHJ1ZTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBvbC5zaXplKCk7IGkrKykKLQkJCWlmICghb2wuZ2V0KGkpLmVxdWFscyhubC5nZXQoaSkpKQotCQkJCXJldHVybiB0cnVlOwotCQlyZXR1cm4gZmFsc2U7CisJcHJpdmF0ZSBCeXRlQnVmZmVyIHNsaWNlKEJ5dGVCdWZmZXIgYiwgaW50IG9mZikgeworCQlpbnQgbmV3T2Zmc2V0ID0gYi5wb3NpdGlvbigpICsgb2ZmOworCQlyZXR1cm4gQnl0ZUJ1ZmZlci53cmFwKGIuYXJyYXkoKSwgbmV3T2Zmc2V0LCBiLmxpbWl0KCkgLSBuZXdPZmZzZXQpOwogCX0KIAogCXByaXZhdGUgYm9vbGVhbiBpc05vTmV3bGluZUF0RW5kT2ZGaWxlKEZpbGVIZWFkZXIgZmgpIHsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi9SYXdUZXh0LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvUmF3VGV4dC5qYXZhCmluZGV4IDlmNGIxZmEuLmQwOWRhMDEgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi9SYXdUZXh0LmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL1Jhd1RleHQuamF2YQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDksIEdvb2dsZSBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSwgSm9oYW5uZXMgRS4gU2NoaW5kZWxpbiA8am9oYW5uZXMuc2NoaW5kZWxpbkBnbXguZGU+IGFuZCBvdGhlcnMKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIxLCBKb2hhbm5lcyBFLiBTY2hpbmRlbGluIDxqb2hhbm5lcy5zY2hpbmRlbGluQGdteC5kZT4gYW5kIG90aGVycwogICoKICAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQogICogdGVybXMgb2YgdGhlIEVjbGlwc2UgRGlzdHJpYnV0aW9uIExpY2Vuc2Ugdi4gMS4wIHdoaWNoIGlzIGF2YWlsYWJsZSBhdApAQCAtMTYsNiArMTYsNyBAQAogaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CiBpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKIGltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOwogCiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5lcnJvcnMuQmluYXJ5QmxvYkV4Y2VwdGlvbjsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmVycm9ycy5MYXJnZU9iamVjdEV4Y2VwdGlvbjsKQEAgLTE2NSw2ICsxNjYsMjcgQEAKIAl9CiAKIAkvKioKKwkgKiBHZXQgdGhlIHJhdyB0ZXh0IGZvciBhIHNpbmdsZSBsaW5lLgorCSAqCisJICogQHBhcmFtIGkKKwkgKiAgICAgICAgICAgIGluZGV4IG9mIHRoZSBsaW5lIHRvIGV4dHJhY3QuIE5vdGUgdGhpcyBpcyAwLWJhc2VkLCBzbyBsaW5lCisJICogICAgICAgICAgICBudW1iZXIgMSBpcyBhY3R1YWxseSBpbmRleCAwLgorCSAqIEByZXR1cm4gdGhlIHRleHQgZm9yIHRoZSBsaW5lLCB3aXRob3V0IGEgdHJhaWxpbmcgTEYsIGFzIGEKKwkgKiAgICAgICAgIHtAbGluayBCeXRlQnVmZmVyfSB0aGF0IGlzIGJhY2tlZCBieSBhIHNsaWNlIG9mIHRoZQorCSAqICAgICAgICAge0BsaW5rICNnZXRSYXdDb250ZW50KCkgcmF3IGNvbnRlbnR9LCB3aXRoIHRoZSBidWZmZXIncyBwb3NpdGlvbgorCSAqICAgICAgICAgb24gdGhlIHN0YXJ0IG9mIHRoZSBsaW5lIGFuZCB0aGUgbGltaXQgYXQgdGhlIGVuZC4KKwkgKiBAc2luY2UgNS4xMgorCSAqLworCXB1YmxpYyBCeXRlQnVmZmVyIGdldFJhd1N0cmluZyhpbnQgaSkgeworCQlpbnQgcyA9IGdldFN0YXJ0KGkpOworCQlpbnQgZSA9IGdldEVuZChpKTsKKwkJaWYgKGUgPiAwICYmIGNvbnRlbnRbZSAtIDFdID09ICdcbicpIHsKKwkJCWUtLTsKKwkJfQorCQlyZXR1cm4gQnl0ZUJ1ZmZlci53cmFwKGNvbnRlbnQsIHMsIGUgLSBzKTsKKwl9CisKKwkvKioKIAkgKiBHZXQgdGhlIHRleHQgZm9yIGEgcmVnaW9uIG9mIGxpbmVzLgogCSAqCiAJICogQHBhcmFtIGJlZ2luCg==