From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-0.2 required=5.0 tests=ALL_TRUSTED, DKIM_ADSP_NXDOMAIN,T_SCC_BODY_TEXT_LINE autolearn=no autolearn_force=no version=3.4.4 Received: from inbox.vuxu.org (inbox.vuxu.org [IPv6:::1]) by inbox.vuxu.org (Postfix) with ESMTP id 65BF021E8C for ; Thu, 15 Feb 2024 19:15:39 +0100 (CET) Content-Type: multipart/mixed; boundary="===============3698273168925287063==" MIME-Version: 1.0 Subject: =?utf8?q?Re=3A_=5BPR_PATCH=5D_=5BUpdated=5D_lbreakouthd=3A_update_to_1=2E1=2E6=2C_adopt?= To: ml@inbox.vuxu.org From: MIvanchev Reply-to: ml@inbox.vuxu.org In-Reply-To: References: Date: Thu, 15 Feb 2024 19:15:39 +0100 List-Id: Message-Id: <20240215181539.65BF021E8C@inbox.vuxu.org> GitHub notification mails are now in MIME to allow UTF8. --===============3698273168925287063== Content-Type: text/plain; charset="utf8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 VGhlcmUgaXMgYW4gdXBkYXRlZCBwdWxsIHJlcXVlc3QgYnkgTUl2YW5jaGV2IGFnYWluc3QgbWFz dGVyIG9uIHRoZSB2b2lkLXBhY2thZ2VzIHJlcG9zaXRvcnkKCmh0dHBzOi8vZ2l0aHViLmNvbS9N SXZhbmNoZXYvdm9pZC1wYWNrYWdlcyBsYnJlYWtvdXRoZC11cGRhdGUKaHR0cHM6Ly9naXRodWIu Y29tL3ZvaWQtbGludXgvdm9pZC1wYWNrYWdlcy9wdWxsLzQ4MDExCgpsYnJlYWtvdXRoZDogdXBk YXRlIHRvIDEuMS42LCBhZG9wdAojIyMjIFRlc3RpbmcgdGhlIGNoYW5nZXMNCi0gSSB0ZXN0ZWQg dGhlIGNoYW5nZXMgaW4gdGhpcyBQUjogKipZRVMqKg0KDQojIyMjIExvY2FsIGJ1aWxkIHRlc3Rp bmcNCi0gSSBidWlsdCB0aGlzIFBSIGxvY2FsbHkgZm9yIG15IG5hdGl2ZSBhcmNoaXRlY3R1cmUs ICh4ODZfNjQtR0xJQkMpCgpBIHBhdGNoIGZpbGUgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vdm9p ZC1saW51eC92b2lkLXBhY2thZ2VzL3B1bGwvNDgwMTEucGF0Y2ggaXMgYXR0YWNoZWQ= --===============3698273168925287063== Content-Type: text/x-diff MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="github-pr-lbreakouthd-update-48011.patch" RnJvbSA4ODA0ZWRjZWIxN2NiNWI1ZGE5OTFmN2MwMjIyZjA1NTY0NGRhNzRlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNaWhhaWwgSXZhbmNoZXYgPGNvbnRhY3RAaXZhbmNoZXYubmV0 PgpEYXRlOiBTdW4sIDMxIERlYyAyMDIzIDExOjQxOjEwICswMTAwClN1YmplY3Q6IFtQQVRDSF0g bGJyZWFrb3V0aGQ6IHVwZGF0ZSB0byAxLjEuNiwgYWRvcHQKCi0tLQogc3JjcGtncy9sYnJlYWtv dXRoZC9wYXRjaGVzL211c2wucGF0Y2ggfCA3NDMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQog c3JjcGtncy9sYnJlYWtvdXRoZC9wYXRjaGVzL3VpbnQucGF0Y2ggfCAgMTggKwogc3JjcGtncy9s YnJlYWtvdXRoZC90ZW1wbGF0ZSAgICAgICAgICAgfCAgIDkgKy0KIDMgZmlsZXMgY2hhbmdlZCwg MjMgaW5zZXJ0aW9ucygrKSwgNzQ3IGRlbGV0aW9ucygtKQogZGVsZXRlIG1vZGUgMTAwNjQ0IHNy Y3BrZ3MvbGJyZWFrb3V0aGQvcGF0Y2hlcy9tdXNsLnBhdGNoCiBjcmVhdGUgbW9kZSAxMDA2NDQg c3JjcGtncy9sYnJlYWtvdXRoZC9wYXRjaGVzL3VpbnQucGF0Y2gKCmRpZmYgLS1naXQgYS9zcmNw a2dzL2xicmVha291dGhkL3BhdGNoZXMvbXVzbC5wYXRjaCBiL3NyY3BrZ3MvbGJyZWFrb3V0aGQv cGF0Y2hlcy9tdXNsLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZDlhZGUy ZWRjYTIyMC4uMDAwMDAwMDAwMDAwMDAKLS0tIGEvc3JjcGtncy9sYnJlYWtvdXRoZC9wYXRjaGVz L211c2wucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw3NDMgKzAsMCBAQAotdWludCBpcyBub3Qg cG9ydGFibGUsIHVzZSB1bnNpZ25lZCBpbnQgaW5zdGVhZC4gRml4ZXMgbXVzbC4KLQktLXh0cmFl bWUKLQotLS0tIGEvc3JjL2NsaWVudGdhbWUuY3BwCTIwMTgtMTItMjEgMTk6NDM6NTEuMDAwMDAw MDAwICswMTAwCi0rKysgYi9zcmMvY2xpZW50Z2FtZS5jcHAJMjAxOS0wNi0xMCAxMTowNDoyNS4y MzA1NTE4NTAgKzAyMDAKLUBAIC04OCw3ICs4OCw3IEBAIGludCBDbGllbnRHYW1lOjppbml0KGNv bnN0IHN0cmluZyYgc2V0bmEKLSBDbGllbnRQbGF5ZXIgKkNsaWVudEdhbWU6OmdldE5leHRQbGF5 ZXIoKQotIHsKLSAJQ2xpZW50UGxheWVyICpwID0gTlVMTDsKLS0JdWludCBzdGFydElkID0gY3Vy UGxheWVyOwotKwl1bnNpZ25lZCBpbnQgc3RhcnRJZCA9IGN1clBsYXllcjsKLSAKLSAJZG8gewot IAkJY3VyUGxheWVyKys7Ci1AQCAtMTA3LDcgKzEwNyw3IEBAIENsaWVudFBsYXllciAqQ2xpZW50 R2FtZTo6Z2V0TmV4dFBsYXllcigKLSAgKiBwaXMgaXMgd2hhdCBjb250cm9scyBoYXZlIGJlZW4g YWN0aXZhdGVkCi0gICogcmV0dXJuIGZsYWdzIHdoYXQgaGFzIHRvIGJlIHJlbmRlcmVkIG5ldwot ICAqLwotLWludCBDbGllbnRHYW1lOjp1cGRhdGUodWludCBtcywgZG91YmxlIHJ4LCBQYWRkbGVJ bnB1dFN0YXRlICZwaXMpCi0raW50IENsaWVudEdhbWU6OnVwZGF0ZSh1bnNpZ25lZCBpbnQgbXMs IGRvdWJsZSByeCwgUGFkZGxlSW5wdXRTdGF0ZSAmcGlzKQotIHsKLSAJaW50IG9sZFNjb3JlID0g Z2FtZS0+cGFkZGxlc1swXS0+c2NvcmU7Ci0gCWludCByZXQgPSAwOwotLS0tIGEvc3JjL2NsaWVu dGdhbWUuaAkyMDE5LTAzLTA3IDE1OjM2OjAxLjAwMDAwMDAwMCArMDEwMAotKysrIGIvc3JjL2Ns aWVudGdhbWUuaAkyMDE5LTA2LTEwIDExOjA0OjI1LjIyNjU1MTgwMiArMDIwMAotQEAgLTIxLDE5 ICsyMSwxOSBAQAotIAotIGNsYXNzIENsaWVudFBsYXllciB7Ci0gCXN0cmluZyBuYW1lOwotLQl1 aW50IGxpdmVzOwotLQl1aW50IG1heExpdmVzOwotKwl1bnNpZ25lZCBpbnQgbGl2ZXM7Ci0rCXVu c2lnbmVkIGludCBtYXhMaXZlczsKLSAJaW50IHNjb3JlOwotLQl1aW50IGxldmVsOwotKwl1bnNp Z25lZCBpbnQgbGV2ZWw7Ci0gCUxldmVsIHNuYXBzaG90OwotIHB1YmxpYzoKLS0JQ2xpZW50UGxh eWVyKGNvbnN0IHN0cmluZyAmbiwgdWludCBsLCB1aW50IG1sKSA6Ci0rCUNsaWVudFBsYXllcihj b25zdCBzdHJpbmcgJm4sIHVuc2lnbmVkIGludCBsLCB1bnNpZ25lZCBpbnQgbWwpIDoKLSAJCQlu YW1lKG4pLCBsaXZlcyhsKSwgbWF4TGl2ZXMobWwpLCBzY29yZSgwKSwgbGV2ZWwoMCkgewotIAkJ X2xvZ2luZm8oIkFkZGVkIHBsYXllciAlc1xuIixuLmNfc3RyKCkpOwotIAl9OwotIAljb25zdCBz dHJpbmcmIGdldE5hbWUoKSB7IHJldHVybiBuYW1lOyB9Ci0tCXVpbnQgZ2V0TGl2ZXMoKSB7IHJl dHVybiBsaXZlczsgfQotLQl1aW50IGdldE1heExpdmVzKCkgeyByZXR1cm4gbWF4TGl2ZXM7IH0K LSsJdW5zaWduZWQgaW50IGdldExpdmVzKCkgeyByZXR1cm4gbGl2ZXM7IH0KLSsJdW5zaWduZWQg aW50IGdldE1heExpdmVzKCkgeyByZXR1cm4gbWF4TGl2ZXM7IH0KLSAJdm9pZCBnYWluTGlmZSgp IHsKLSAJCWlmIChsaXZlcyA8IG1heExpdmVzKQotIAkJCWxpdmVzKys7Ci1AQCAtNDgsMTEgKzQ4 LDExIEBAIHB1YmxpYzoKLSAJCXNjb3JlICs9IHM7Ci0gCQlyZXR1cm4gc2NvcmU7Ci0gCX0KLS0J dm9pZCBzZXRMaXZlcyh1aW50IGwpIHsgbGl2ZXMgPSBsOyB9Ci0rCXZvaWQgc2V0TGl2ZXModW5z aWduZWQgaW50IGwpIHsgbGl2ZXMgPSBsOyB9Ci0gCXZvaWQgc2V0U2NvcmUoaW50IHMpIHsgc2Nv cmUgPSBzOyB9Ci0tCXVpbnQgZ2V0TGV2ZWwoKSB7IHJldHVybiBsZXZlbDsgfQotLQl1aW50IG5l eHRMZXZlbCgpIHsgcmV0dXJuICsrbGV2ZWw7IH0KLS0Jdm9pZCBzZXRMZXZlbCh1aW50IGwpIHsg bGV2ZWwgPSBsOyB9Ci0rCXVuc2lnbmVkIGludCBnZXRMZXZlbCgpIHsgcmV0dXJuIGxldmVsOyB9 Ci0rCXVuc2lnbmVkIGludCBuZXh0TGV2ZWwoKSB7IHJldHVybiArK2xldmVsOyB9Ci0rCXZvaWQg c2V0TGV2ZWwodW5zaWduZWQgaW50IGwpIHsgbGV2ZWwgPSBsOyB9Ci0gCXZvaWQgc2V0TGV2ZWxT bmFwc2hvdChjb25zdCBMZXZlbCAqbCkgewotIAkJaWYgKGwgPT0gTlVMTCkKLSAJCQlnYW1lX2dl dF9sZXZlbF9zbmFwc2hvdCgmc25hcHNob3QpOwotQEAgLTEwMCw3ICsxMDAsNyBAQCBjbGFzcyBD bGllbnRHYW1lIHsKLSAJR2FtZSAqZ2FtZTsgLyogY3VycmVudCBnYW1lIGNvbnRleHQgKi8KLSAJ SGlzY29yZXMgaGlzY29yZXM7Ci0gCXZlY3Rvcjx1bmlxdWVfcHRyPENsaWVudFBsYXllcj4+IHBs YXllcnM7Ci0tCXVpbnQgY3VyUGxheWVyOwotKwl1bnNpZ25lZCBpbnQgY3VyUGxheWVyOwotIAlD bGllbnRQbGF5ZXIgKmxhc3REZWFkUGxheWVyOwotIAlzdHJpbmcgbXNnOwotIAlUaW1lb3V0IGZy aWN0aW9uVGltZW91dDsKLUBAIC0xMTQsMTIgKzExNCwxMiBAQCBwdWJsaWM6Ci0gCUNsaWVudEdh bWUoQ29uZmlnICZjZmcpOwotIAl+Q2xpZW50R2FtZSgpOwotIAlpbnQgaW5pdChjb25zdCBzdHJp bmcmIHNldG5hbWUsIGludCBsZXZlbGlkID0gMCk7Ci0tCWludCB1cGRhdGUodWludCBtcywgZG91 YmxlIHJ4LCBQYWRkbGVJbnB1dFN0YXRlICZwaXMpOwotKwlpbnQgdXBkYXRlKHVuc2lnbmVkIGlu dCBtcywgZG91YmxlIHJ4LCBQYWRkbGVJbnB1dFN0YXRlICZwaXMpOwotIAlHYW1lICpnZXRHYW1l Q29udGV4dCgpIHsgcmV0dXJuIGdhbWU7IH0KLSAJc3RyaW5nIGdldExldmVsc2V0TmFtZSgpIHsg cmV0dXJuIGxldmVsc2V0LT5uYW1lOyB9Ci0gCXZvaWQgZ2V0Q3VycmVudExldmVsTmFtZUFuZEF1 dGhvcihzdHJpbmcgJm5hbWUsIHN0cmluZyAmYXV0aG9yKSB7Ci0gCQlDbGllbnRQbGF5ZXIgKnAg PSBwbGF5ZXJzW2N1clBsYXllcl0uZ2V0KCk7Ci0tCQl1aW50IGxpZCA9IHAtPmdldExldmVsKCk7 Ci0rCQl1bnNpZ25lZCBpbnQgbGlkID0gcC0+Z2V0TGV2ZWwoKTsKLSAJCWlmIChsaWQgPj0gKHVp bnQpbGV2ZWxzZXQtPmNvdW50KSB7Ci0gCQkJbmFtZSA9ICJub25lIjsKLSAJCQlhdXRob3IgPSAi bm9uZSI7IC8qIGlzIGRvbmUsIHNob3VsZCBub3QgaGFwcGVuICovCi1AQCAtMTMxLDggKzEzMSw4 IEBAIHB1YmxpYzoKLSAJaW50IGdldExldmVsQ291bnQoKSB7IHJldHVybiBsZXZlbHNldC0+Y291 bnQ7IH0KLSAJSGlzY29yZUNoYXJ0ICpnZXRIaXNjb3JlQ2hhcnQoKSB7IHJldHVybiBoaXNjb3Jl cy5nZXQobGV2ZWxzZXQtPm5hbWUpOyB9Ci0gCUNsaWVudFBsYXllciogZ2V0Q3VycmVudFBsYXll cigpIHtyZXR1cm4gcGxheWVyc1tjdXJQbGF5ZXJdLmdldCgpOyB9Ci0tCXVpbnQgZ2V0Q3VycmVu dFBsYXllcklkKCkge3JldHVybiBjdXJQbGF5ZXI7IH0KLS0Jdm9pZCBzZXRDdXJyZW50UGxheWVy SWQodWludCBpZCkgewotKwl1bnNpZ25lZCBpbnQgZ2V0Q3VycmVudFBsYXllcklkKCkge3JldHVy biBjdXJQbGF5ZXI7IH0KLSsJdm9pZCBzZXRDdXJyZW50UGxheWVySWQodW5zaWduZWQgaW50IGlk KSB7Ci0gCQljdXJQbGF5ZXIgPSBpZDsKLSAJCS8qIGFkanVzdCBwYWRkbGUgc2NvcmUgKi8KLSAJ CWdhbWUtPnBhZGRsZXNbMF0tPnNjb3JlID0gcGxheWVyc1tjdXJQbGF5ZXJdLT5nZXRTY29yZSgp OwotQEAgLTE0Myw3ICsxNDMsNyBAQCBwdWJsaWM6Ci0gCXZvaWQgdXBkYXRlSGlzY29yZXMoKTsK LSAJY29uc3Qgc3RyaW5nJiBnZXRQbGF5ZXJNZXNzYWdlKCkgeyByZXR1cm4gbXNnOyB9Ci0gCXZl Y3Rvcjx1bmlxdWVfcHRyPENsaWVudFBsYXllcj4+JiBnZXRQbGF5ZXJzKCkgeyByZXR1cm4gcGxh eWVyczsgfQotLQl2b2lkIHJlc3VtZVBsYXllcih1aW50IHBpZCwgdWludCBsaXZlcywgaW50IHNj b3JlLCB1aW50IGxldmVsKSB7Ci0rCXZvaWQgcmVzdW1lUGxheWVyKHVuc2lnbmVkIGludCBwaWQs IHVuc2lnbmVkIGludCBsaXZlcywgaW50IHNjb3JlLCB1bnNpZ25lZCBpbnQgbGV2ZWwpIHsKLSAJ CXBsYXllcnNbcGlkXS0+c2V0TGl2ZXMobGl2ZXMpOwotIAkJcGxheWVyc1twaWRdLT5zZXRTY29y ZShzY29yZSk7Ci0gCQlwbGF5ZXJzW3BpZF0tPnNldExldmVsKGxldmVsKTsKLS0tLSBhL3NyYy9t ZW51LmNwcAkyMDE4LTExLTI0IDE0OjM1OjQ0LjAwMDAwMDAwMCArMDEwMAotKysrIGIvc3JjL21l bnUuY3BwCTIwMTktMDYtMTAgMTE6MDQ6MjUuMjMxNTUxODYyICswMjAwCi1AQCAtMjQsNyArMjQs NyBAQCBleHRlcm4gU0RMX1JlbmRlcmVyICptcmM7Ci0gRm9udCAqTWVudUl0ZW06OmZOb3JtYWwg PSBOVUxMOwotIEZvbnQgKk1lbnVJdGVtOjpmRm9jdXMgPSBOVUxMOwotIEZvbnQgKk1lbnVJdGVt OjpmVG9vbHRpcCA9IE5VTEw7Ci0tdWludCBNZW51SXRlbTo6dG9vbHRpcFdpZHRoID0gMzAwOwot K3Vuc2lnbmVkIGludCBNZW51SXRlbTo6dG9vbHRpcFdpZHRoID0gMzAwOwotIAotIC8qKiBIZWxw ZXIgdG8gcmVuZGVyIGEgcGFydCBvZiB0aGUgbWVudSBpdGVtLiBQb3NpdGlvbiBpcyBkZXRlcm1p bmVkCi0gICogYnkgZ2l2ZW4gYWxpZ25tZW50LiAqLwotLS0tIGEvc3JjL21lbnUuaAkyMDE4LTEy LTIyIDEzOjMwOjU4LjAwMDAwMDAwMCArMDEwMAotKysrIGIvc3JjL21lbnUuaAkyMDE5LTA2LTEw IDExOjA0OjI1LjIyNzU1MTgxNCArMDIwMAotQEAgLTU5LDcgKzU5LDcgQEAgcHJvdGVjdGVkOgot IAl9Ci0gcHVibGljOgotIAlzdGF0aWMgRm9udCAqZk5vcm1hbCwgKmZGb2N1cywgKmZUb29sdGlw OwotLQlzdGF0aWMgdWludCB0b29sdGlwV2lkdGg7Ci0rCXN0YXRpYyB1bnNpZ25lZCBpbnQgdG9v bHRpcFdpZHRoOwotIAotIAlNZW51SXRlbShjb25zdCBzdHJpbmcgJmMsIGNvbnN0IHN0cmluZyAm dHQsIGludCBhaWQgPSBBSURfTk9ORSkgOgotIAkJCWNhcHRpb24oYyksIGxibE5vcm1hbCh0cnVl KSwgbGJsRm9jdXModHJ1ZSksCi1AQCAtOTcsNyArOTcsNyBAQCBwdWJsaWM6Ci0gCQl9Ci0gCi0g CX0KLS0JdmlydHVhbCB2b2lkIHVwZGF0ZSh1aW50IG1zKSB7Ci0rCXZpcnR1YWwgdm9pZCB1cGRh dGUodW5zaWduZWQgaW50IG1zKSB7Ci0gCQlpZiAoIWZvY3VzICYmIGZhZGluZ0FscGhhID4gMCkg ewotIAkJCWZhZGluZ0FscGhhIC09IDAuNyptczsKLSAJCQlpZiAoZmFkaW5nQWxwaGEgPCAwKQot QEAgLTIxMSw5ICsyMTEsOSBAQCBwdWJsaWM6Ci0gCQlzZXRWYWx1ZShvcHRpb25zW3ZdKTsKLSAJ fQotIAlNZW51SXRlbUxpc3QoY29uc3Qgc3RyaW5nICZjLCBjb25zdCBzdHJpbmcgJnR0LCBpbnQg YWlkLAotLQkJCQkJaW50ICZ2LCBjb25zdCBjaGFyICoqb3B0cywgdWludCBvcHROdW0pCi0rCQkJ CQlpbnQgJnYsIGNvbnN0IGNoYXIgKipvcHRzLCB1bnNpZ25lZCBpbnQgb3B0TnVtKQotIAkJCTog TWVudUl0ZW1SYW5nZShjLHR0LGFpZCx2LDAsb3B0TnVtLTEsMSkgewotLQkJZm9yICh1aW50IGkg PSAwOyBpIDwgb3B0TnVtOyBpKyspCi0rCQlmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG9w dE51bTsgaSsrKQotIAkJCW9wdGlvbnMucHVzaF9iYWNrKG9wdHNbaV0pOwotIAkJc2V0VmFsdWUo b3B0aW9uc1t2XSk7Ci0gCX0KLUBAIC0yNDcsMTAgKzI0NywxMCBAQCBjbGFzcyBNZW51SXRlbUlu dExpc3QgOiBwdWJsaWMgTWVudUl0ZW1SCi0gCXZlY3RvcjxpbnQ+IG9wdGlvbnM7Ci0gcHVibGlj OgotIAlNZW51SXRlbUludExpc3QoY29uc3Qgc3RyaW5nICZjLCBjb25zdCBzdHJpbmcgJnR0LAot LQkJCQkJaW50ICZ2LCBjb25zdCBpbnQgKm9wdHMsIHVpbnQgb3B0TnVtKQotKwkJCQkJaW50ICZ2 LCBjb25zdCBpbnQgKm9wdHMsIHVuc2lnbmVkIGludCBvcHROdW0pCi0gCQkJCTogTWVudUl0ZW1S YW5nZShjLHR0LEFJRF9OT05FLGlkeCwwLG9wdE51bS0xLDEpLCB2YWwodikgewotIAkJaWR4ID0g MDsKLS0JCWZvciAodWludCBpID0gMDsgaSA8IG9wdE51bTsgaSsrKSB7Ci0rCQlmb3IgKHVuc2ln bmVkIGludCBpID0gMDsgaSA8IG9wdE51bTsgaSsrKSB7Ci0gCQkJaWYgKG9wdHNbaV0gPT0gdmFs KQotIAkJCQlpZHggPSBpOwotIAkJCW9wdGlvbnMucHVzaF9iYWNrKG9wdHNbaV0pOwotQEAgLTMz NCw3ICszMzQsNyBAQCBwdWJsaWM6Ci0gCQlpbnQgdyA9IHRoZW1lLm1lbnVJdGVtV2lkdGg7Ci0g CQlpbnQgeCA9IHRoZW1lLm1lbnVYIC0gdy8yOwotIAkJaW50IHkgPSB0aGVtZS5tZW51WSAtIGgv MjsKLS0JCWZvciAodWludCBpID0gMDsgaSA8IGl0ZW1zLnNpemUoKTsgaSsrKSB7Ci0rCQlmb3Ig KHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGl0ZW1zLnNpemUoKTsgaSsrKSB7Ci0gCQkJTWVudUl0 ZW1TdWIgKnN1YiA9IGR5bmFtaWNfY2FzdDxNZW51SXRlbVN1Yio+KGl0ZW1zW2ldLmdldCgpKTsK LSAJCQlpdGVtc1tpXS0+c2V0R2VvbWV0cnkoeCwgeSArIGkqdGhlbWUubWVudUl0ZW1IZWlnaHQs Ci0gCQkJCQkJdywgdGhlbWUubWVudUl0ZW1IZWlnaHQpOwotQEAgLTM0Miw3ICszNDIsNyBAQCBw dWJsaWM6Ci0gCQkJCXN1Yi0+Z2V0U3ViTWVudSgpLT5hZGp1c3QoKTsKLSAJCX0KLSAJfQotLQl2 b2lkIHVwZGF0ZSh1aW50IG1zKSB7Ci0rCXZvaWQgdXBkYXRlKHVuc2lnbmVkIGludCBtcykgewot IAkJZm9yIChhdXRvJiBpIDogaXRlbXMpCi0gCQkJaS0+dXBkYXRlKG1zKTsKLSAJfQotLS0tIGEv c3JjL21peGVyLmgJMjAxOS0wMy0wNyAyMDo1NDo0NS4wMDAwMDAwMDAgKzAxMDAKLSsrKyBiL3Ny Yy9taXhlci5oCTIwMTktMDYtMTAgMTE6MDQ6MjUuMjI4NTUxODI2ICswMjAwCi1AQCAtNjMsNyAr NjMsNyBAQCBwdWJsaWM6Ci0gCQkJX2xvZ2luZm8oIk1peGVyIGNsb3NlZFxuIik7Ci0gCQl9Ci0g CX0KLS0Jdm9pZCBzZXRWb2x1bWUodWludCB2KSB7IC8qIHYgaXMgMC4uMTAwICovCi0rCXZvaWQg c2V0Vm9sdW1lKHVuc2lnbmVkIGludCB2KSB7IC8qIHYgaXMgMC4uMTAwICovCi0gCQlpZiAodiA+ IDEwMCkKLSAJCQl2ID0gMTAwOwotIAkJdiA9IHYgKiBNSVhfTUFYX1ZPTFVNRSAvIDEwMDsKLS0t LSBhL3NyYy9zZGwuY3BwCTIwMTktMDMtMDcgMTQ6MDc6MDUuMDAwMDAwMDAwICswMTAwCi0rKysg Yi9zcmMvc2RsLmNwcAkyMDE5LTA2LTEwIDExOjA0OjI1LjIzMTU1MTg2MiArMDIwMAotQEAgLTQ4 NCw3ICs0ODQsNyBAQCB2b2lkIEZvbnQ6OndyaXRlVGV4dChpbnQgeCwgaW50IHksIGNvbnN0Ci0g CVNETF9EZXN0cm95VGV4dHVyZSh0ZXgpOwotIH0KLSAKLS12b2lkIExhYmVsOjpzZXRUZXh0KEZv bnQgJmZvbnQsIGNvbnN0IHN0cmluZyAmc3RyLCB1aW50IG1heHcpCi0rdm9pZCBMYWJlbDo6c2V0 VGV4dChGb250ICZmb250LCBjb25zdCBzdHJpbmcgJnN0ciwgdW5zaWduZWQgaW50IG1heHcpCi0g ewotIAlpZiAoc3RyID09ICIiKSB7Ci0gCQllbXB0eSA9IHRydWU7Ci0tLS0gYS9zcmMvc2RsLmgJ MjAxOS0wMy0wNyAxMzoxNTowNy4wMDAwMDAwMDAgKzAxMDAKLSsrKyBiL3NyYy9zZGwuaAkyMDE5 LTA2LTEwIDExOjA0OjI1LjIyODU1MTgyNiArMDIwMAotQEAgLTIwOSw3ICsyMDksNyBAQCBwdWJs aWM6Ci0gCQkJcmV0dXJuIFRURl9TaXplVGV4dChmb250LHN0ci5jX3N0cigpLHcsaCk7Ci0gCQly ZXR1cm4gMDsKLSAJfTsKLS0JaW50IGdldFdyYXBwZWRUZXh0U2l6ZShjb25zdCBzdHJpbmcmIHN0 ciwgdWludCBtYXh3LCBpbnQgKncsIGludCAqaCkgewotKwlpbnQgZ2V0V3JhcHBlZFRleHRTaXpl KGNvbnN0IHN0cmluZyYgc3RyLCB1bnNpZ25lZCBpbnQgbWF4dywgaW50ICp3LCBpbnQgKmgpIHsK LSAJCSp3ID0gKmggPSAwOwotIAkJU0RMX1N1cmZhY2UgKnN1cmYgPSBUVEZfUmVuZGVyVVRGOF9C bGVuZGVkX1dyYXBwZWQoCi0gCQkJCQkJZm9udCwgc3RyLmNfc3RyKCksIGNsciwgbWF4dyk7Ci1A QCAtMjc1LDcgKzI3NSw3IEBAIHB1YmxpYzoKLSAJCQliID0gLTE7Ci0gCQlib3JkZXIgPSBiOwot IAl9Ci0tCXZvaWQgc2V0VGV4dChGb250ICZmLCBjb25zdCBzdHJpbmcgJnN0ciwgdWludCBtYXgg PSAwKTsKLSsJdm9pZCBzZXRUZXh0KEZvbnQgJmYsIGNvbnN0IHN0cmluZyAmc3RyLCB1bnNpZ25l ZCBpbnQgbWF4ID0gMCk7Ci0gCXZvaWQgY2xlYXJUZXh0KCkgewotIAkJZW1wdHkgPSB0cnVlOwot IAl9Ci1AQCAtMjk1LDEyICsyOTUsMTIgQEAgcHVibGljOgotIAl2b2lkIHNldEFscGhhKGludCBh KSB7Ci0gCQlpbWcuc2V0QWxwaGEoYSk7Ci0gCX0KLS0JdWludCBnZXRIZWlnaHQoKSB7Ci0rCXVu c2lnbmVkIGludCBnZXRIZWlnaHQoKSB7Ci0gCQlpZiAoZW1wdHkpCi0gCQkJcmV0dXJuIDA7Ci0g CQlyZXR1cm4gaW1nLmdldEhlaWdodCgpOwotIAl9Ci0tCXVpbnQgZ2V0V2lkdGgoKSB7Ci0rCXVu c2lnbmVkIGludCBnZXRXaWR0aCgpIHsKLSAJCWlmIChlbXB0eSkKLSAJCQlyZXR1cm4gMDsKLSAJ CXJldHVybiBpbWcuZ2V0V2lkdGgoKTsKLS0tLSBhL3NyYy9zZWxlY3RkbGcuY3BwCTIwMTgtMTIt MjEgMjA6MDI6NDguMDAwMDAwMDAwICswMTAwCi0rKysgYi9zcmMvc2VsZWN0ZGxnLmNwcAkyMDE5 LTA2LTEwIDExOjA0OjI1LjIzMjU1MTg3NCArMDIwMAotQEAgLTMxLDE3ICszMSwxNyBAQCBTZXRJ bmZvOjpTZXRJbmZvKGNvbnN0IHN0cmluZyAmbiwgVGhlbWUKLSAJYXV0aG9yID0gIj8iOwotIAot IAkvKiBjcmVhdGUgZW1wdHkgcHJldmlldyAqLwotLQl1aW50IHN3ID0gdGhlbWUubWVudUJhY2tn cm91bmQuZ2V0V2lkdGgoKTsKLS0JdWludCBzaCA9IHRoZW1lLm1lbnVCYWNrZ3JvdW5kLmdldEhl aWdodCgpOwotLQl1aW50IGJ3ID0gdGhlbWUuYnJpY2tzLmdldEdyaWRXaWR0aCgpOwotLQl1aW50 IGJoID0gdGhlbWUuYnJpY2tzLmdldEdyaWRIZWlnaHQoKTsKLS0JdWludCBzb2ZmID0gYmgvMzsK LSsJdW5zaWduZWQgaW50IHN3ID0gdGhlbWUubWVudUJhY2tncm91bmQuZ2V0V2lkdGgoKTsKLSsJ dW5zaWduZWQgaW50IHNoID0gdGhlbWUubWVudUJhY2tncm91bmQuZ2V0SGVpZ2h0KCk7Ci0rCXVu c2lnbmVkIGludCBidyA9IHRoZW1lLmJyaWNrcy5nZXRHcmlkV2lkdGgoKTsKLSsJdW5zaWduZWQg aW50IGJoID0gdGhlbWUuYnJpY2tzLmdldEdyaWRIZWlnaHQoKTsKLSsJdW5zaWduZWQgaW50IHNv ZmYgPSBiaC8zOwotIAlwcmV2aWV3LmNyZWF0ZShNQVBXSURUSCp0aGVtZS5icmlja3MuZ2V0R3Jp ZFdpZHRoKCksCi0gCQkJTUFQSEVJR0hUKnRoZW1lLmJyaWNrcy5nZXRHcmlkSGVpZ2h0KCkpOwot IAlTRExfU2V0UmVuZGVyVGFyZ2V0KG1yYywgcHJldmlldy5nZXRUZXgoKSk7Ci0gCUltYWdlJiB3 YWxscGFwZXIgPSB0aGVtZS53YWxscGFwZXJzW3JhbmQoKSV0aGVtZS5udW1XYWxscGFwZXJzXTsK LS0JZm9yICh1aW50IHd5ID0gMDsgd3kgPCBzaDsgd3kgKz0gd2FsbHBhcGVyLmdldEhlaWdodCgp KQotLQkJZm9yICh1aW50IHd4ID0gMDsgd3ggPCBzdzsgd3ggKz0gd2FsbHBhcGVyLmdldFdpZHRo KCkpCi0rCWZvciAodW5zaWduZWQgaW50IHd5ID0gMDsgd3kgPCBzaDsgd3kgKz0gd2FsbHBhcGVy LmdldEhlaWdodCgpKQotKwkJZm9yICh1bnNpZ25lZCBpbnQgd3ggPSAwOyB3eCA8IHN3OyB3eCAr PSB3YWxscGFwZXIuZ2V0V2lkdGgoKSkKLSAJCQl3YWxscGFwZXIuY29weSh3eCx3eSk7Ci0gCXRo ZW1lLmZyYW1lU2hhZG93LmNvcHkoc29mZixzb2ZmKTsKLSAKLUBAIC02NCw3ICs2NCw3IEBAIFNl dEluZm86OlNldEluZm8oY29uc3Qgc3RyaW5nICZuLCBUaGVtZQotIAlzdHJpbmcgZnBhdGggPSBn ZXRGdWxsTGV2ZWxzZXRQYXRoKG4pOwotIAlzdHJpbmcgbGluZXNbNStFRElUX0hFSUdIVF07Ci0g CWlmc3RyZWFtIGlmcyhmcGF0aCk7Ci0tCXVpbnQgb2Zmc2V0ID0gMDsKLSsJdW5zaWduZWQgaW50 IG9mZnNldCA9IDA7Ci0gCi0gCWlmICghaWZzLmlzX29wZW4oKSkgewotIAkJX2xvZ2VycigiTGV2 ZWxzZXQgJXMgbm90IGZvdW5kLCBubyBwcmV2aWV3IGNyZWF0ZWRcbiIsbi5jX3N0cigpKTsKLUBA IC03Miw3ICs3Miw3IEBAIFNldEluZm86OlNldEluZm8oY29uc3Qgc3RyaW5nICZuLCBUaGVtZQot IAkJU0RMX1NldFJlbmRlclRhcmdldChtcmMsIE5VTEwpOwotIAkJcmV0dXJuOwotIAl9Ci0tCWZv ciAodWludCBpID0gMDsgaSA8IDUrRURJVF9IRUlHSFQ7IGkrKykKLSsJZm9yICh1bnNpZ25lZCBp bnQgaSA9IDA7IGkgPCA1K0VESVRfSEVJR0hUOyBpKyspCi0gCQlnZXRsaW5lKGlmcyxsaW5lc1tp XSk7Ci0gCWlmIChsaW5lc1swXS5maW5kKCJWZXJzaW9uIikgIT0gc3RyaW5nOjpucG9zKSB7Ci0g CQl2ZXJzaW9uID0gdHJpbVN0cmluZyhsaW5lc1swXS5zdWJzdHIobGluZXNbMF0uZmluZCgnOicp KzEpKTsKLUBAIC04OSw4ICs4OSw4IEBAIFNldEluZm86OlNldEluZm8oY29uc3Qgc3RyaW5nICZu LCBUaGVtZQotIAotIAkvKiBhZGQgYnJpY2tzIG9mIGZpcnN0IGxldmVsCi0gCSAqIFhYWCBkaXJl Y3QgYWNjZXNzIHRvIGJyaWNrIGNvbnZlcnNpb24gdGFibGUgZnJvbSBsaWJnYW1lICovCi0tCWZv ciAodWludCBqID0gMDsgaiA8IEVESVRIRUlHSFQ7IGorKykKLS0JCWZvciAodWludCBpID0gMDsg aSA8IEVESVRXSURUSDsgaSsrKSB7Ci0rCWZvciAodW5zaWduZWQgaW50IGogPSAwOyBqIDwgRURJ VEhFSUdIVDsgaisrKQotKwkJZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBFRElUV0lEVEg7 IGkrKykgewotIAkJCWludCBrID0gLTE7Ci0gCQkJZm9yICggayA9IDA7IGsgPCBCUklDS19DT1VO VDsgaysrICkKLSAJCQkJaWYgKGxpbmVzWzQrb2Zmc2V0K2pdW2ldID09IGJyaWNrX2NvbnZfdGFi bGVba10uYykKLUBAIC05OSw4ICs5OSw4IEBAIFNldEluZm86OlNldEluZm8oY29uc3Qgc3RyaW5n ICZuLCBUaGVtZQotIAkJCQl0aGVtZS5icmlja3NTaGFkb3cuY29weShicmlja19jb252X3RhYmxl W2tdLmlkLDAsCi0gCQkJCQkJKGkrMSkqYncrYmgvMywgKDEraikqYmgrYmgvMyk7Ci0gCQl9Ci0t CWZvciAodWludCBqID0gMDsgaiA8IEVESVRIRUlHSFQ7IGorKykKLS0JCWZvciAodWludCBpID0g MDsgaSA8IEVESVRXSURUSDsgaSsrKSB7Ci0rCWZvciAodW5zaWduZWQgaW50IGogPSAwOyBqIDwg RURJVEhFSUdIVDsgaisrKQotKwkJZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBFRElUV0lE VEg7IGkrKykgewotIAkJCWludCBrID0gLTE7Ci0gCQkJZm9yICggayA9IDA7IGsgPCBCUklDS19D T1VOVDsgaysrICkKLSAJCQkJaWYgKGxpbmVzWzQrb2Zmc2V0K2pdW2ldID09IGJyaWNrX2NvbnZf dGFibGVba10uYykKLUBAIC0xMTcsOCArMTE3LDggQEAgU2V0SW5mbzo6U2V0SW5mbyhjb25zdCBz dHJpbmcgJm4sIFRoZW1lCi0gLyoqIENyZWF0ZSBsZXZlbHNldCBsaXN0IGFuZCBwcmV2aWV3cyAr IGxheW91dC4gKi8KLSB2b2lkIFNlbGVjdERpYWxvZzo6aW5pdCgpCi0gewotLQl1aW50IHN3ID0g dGhlbWUubWVudUJhY2tncm91bmQuZ2V0V2lkdGgoKTsKLS0JdWludCBzaCA9IHRoZW1lLm1lbnVC YWNrZ3JvdW5kLmdldEhlaWdodCgpOwotKwl1bnNpZ25lZCBpbnQgc3cgPSB0aGVtZS5tZW51QmFj a2dyb3VuZC5nZXRXaWR0aCgpOwotKwl1bnNpZ25lZCBpbnQgc2ggPSB0aGVtZS5tZW51QmFja2dy b3VuZC5nZXRIZWlnaHQoKTsKLSAJdmVjdG9yPHN0cmluZz4gbGlzdCwgbGlzdDI7Ci0gCi0gCWxp c3QucHVzaF9iYWNrKF8oVE9VUk5BTUVOVCkpOwotQEAgLTE4NSw3ICsxODUsNyBAQCB2b2lkIFNl bGVjdERpYWxvZzo6cmVuZGVyKCkKLSAJCQlmb250LnNldENvbG9yKHRoZW1lLm1lbnVGb250Q29s b3JOb3JtYWwpOwotIAkJZm9udC53cml0ZShseCwgbHktY2gsIF8oIjxQcmV2aW91cyBQYWdlPiIp KTsKLSAJfQotLQlmb3IgKHVpbnQgaSA9IDA7IGkgPCB2bGVuOyBpKyssIHkgKz0gY2gpIHsKLSsJ Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCB2bGVuOyBpKyssIHkgKz0gY2gpIHsKLSAJCWlm IChwb3MgKyBpIDwgZW50cmllcy5zaXplKCkgJiYgc2VsID09IChpbnQpKHBvcyArIGkpKQotIAkJ CWZvbnQuc2V0Q29sb3IodGhlbWUubWVudUZvbnRDb2xvckZvY3VzKTsKLSAJCWVsc2UKLS0tLSBh L3NyYy9zZWxlY3RkbGcuaAkyMDE4LTEwLTMxIDE4OjQ5OjM0LjAwMDAwMDAwMCArMDEwMAotKysr IGIvc3JjL3NlbGVjdGRsZy5oCTIwMTktMDYtMTAgMTE6MDQ6MjUuMjI4NTUxODI2ICswMjAwCi1A QCAtMjEsNyArMjEsNyBAQCBjbGFzcyBTZXRJbmZvIHsKLSAJc3RyaW5nIG5hbWU7Ci0gCXN0cmlu ZyB2ZXJzaW9uOwotIAlzdHJpbmcgYXV0aG9yOwotLQl1aW50IGxldmVsczsKLSsJdW5zaWduZWQg aW50IGxldmVsczsKLSAJSW1hZ2UgcHJldmlldzsKLSBwdWJsaWM6Ci0gCVNldEluZm8oY29uc3Qg c3RyaW5nICZuYW1lLCBUaGVtZSAmdGhlbWUpOwotQEAgLTQwLDEyICs0MCwxMiBAQCBjbGFzcyBT ZWxlY3REaWFsb2cgewotIAlib29sIHF1aXRSZWNlaXZlZDsKLSAJdmVjdG9yPHVuaXF1ZV9wdHI8 U2V0SW5mbz4+IGVudHJpZXM7Ci0gCWludCBzZWw7Ci0tCXVpbnQgcG9zLCBtYXgsIHZsZW47Ci0r CXVuc2lnbmVkIGludCBwb3MsIG1heCwgdmxlbjsKLSAJaW50IHR4LCB0eTsgLyogY2VudGVyZWQg dGl0bGUgcG9zaXRpb24gKi8KLSAJaW50IGx4LCBseTsgLyogbGlzdCBzdGFydCAqLwotLQl1aW50 IGN3LCBjaDsgLyogY2VsbCBzaXplICovCi0rCXVuc2lnbmVkIGludCBjdywgY2g7IC8qIGNlbGwg c2l6ZSAqLwotIAlpbnQgcHgsIHB5OwotLQl1aW50IHB3LCBwaDsgLyogcHJldmlldyBnZW9tZXRy eSAqLwotKwl1bnNpZ25lZCBpbnQgcHcsIHBoOyAvKiBwcmV2aWV3IGdlb21ldHJ5ICovCi0gCi0g CUltYWdlIGJhY2tncm91bmQ7Ci0gCi0tLS0gYS9zcmMvc3ByaXRlLmNwcAkyMDE4LTA5LTAyIDE4 OjQ3OjE4LjAwMDAwMDAwMCArMDIwMAotKysrIGIvc3JjL3Nwcml0ZS5jcHAJMjAxOS0wNi0xMCAx MTowNDoyNS4yMzI1NTE4NzQgKzAyMDAKLUBAIC0yNCw3ICsyNCw3IEBAIGV4dGVybiBTRExfUmVu ZGVyZXIgKm1yYzsKLSBQYXJ0aWNsZTo6UGFydGljbGUoR3JpZEltYWdlICZzaW1nLCBpbnQgX2d4 LCBpbnQgX2d5LAotIAkJCQkJaW50IF9zeCwgaW50IF9zeSwgaW50IF9zdywgaW50IF9zaCwKLSAJ CQkJCWRvdWJsZSBweCwgZG91YmxlIHB5LCBkb3VibGUgdngsIGRvdWJsZSB2eSwKLS0JCQkJCWRv dWJsZSB2cG1zLCB1aW50IGxpZmV0aW1lKQotKwkJCQkJZG91YmxlIHZwbXMsIHVuc2lnbmVkIGlu dCBsaWZldGltZSkKLSAJOiBpbWcoc2ltZyksIGd4KF9neCksIGd5KF9neSksIHN4KF9zeCksIHN5 KF9zeSksIHN3KF9zdyksIHNoKF9zaCksCi0gCSAgcG9zKHB4LHB5KSwgdmVsKHZ4LHZ5KQotIHsK LS0tLSBhL3NyYy9zcHJpdGUuaAkyMDE4LTA5LTAyIDE4OjQ3OjE4LjAwMDAwMDAwMCArMDIwMAot KysrIGIvc3JjL3Nwcml0ZS5oCTIwMTktMDYtMTAgMTE6MDQ6MjUuMjI5NTUxODM4ICswMjAwCi1A QCAtMTksMjEgKzE5LDIxIEBACi0gY2xhc3MgU3ByaXRlIHsKLSBwdWJsaWM6Ci0gCXZpcnR1YWwg flNwcml0ZSgpIHt9OwotLQl2aXJ0dWFsIGludCB1cGRhdGUodWludCBtcykgPSAwOyAvKiByZXR1 cm4gMSBpZiB0byBiZSByZW1vdmVkLCAwIG90aGVyd2lzZSAqLwotKwl2aXJ0dWFsIGludCB1cGRh dGUodW5zaWduZWQgaW50IG1zKSA9IDA7IC8qIHJldHVybiAxIGlmIHRvIGJlIHJlbW92ZWQsIDAg b3RoZXJ3aXNlICovCi0gCXZpcnR1YWwgdm9pZCByZW5kZXIoKSA9IDA7Ci0gfTsKLSAKLSBjbGFz cyBBbmltYXRpb24gOiBwdWJsaWMgU3ByaXRlIHsKLSAJR3JpZEltYWdlJiBpbWc7Ci0tCXVpbnQg aWQ7Ci0rCXVuc2lnbmVkIGludCBpZDsKLSAJaW50IHgsIHk7IC8qIHBvc2l0aW9uIG9uIHNjcmVl biAqLwotIAlGcmFtZUNvdW50ZXIgZmM7Ci0gcHVibGljOgotLQlBbmltYXRpb24oR3JpZEltYWdl ICZfaW1nLCB1aW50IF9pZCwgdWludCBkZWxheSwgaW50IF94LCBpbnQgX3kpCi0rCUFuaW1hdGlv bihHcmlkSW1hZ2UgJl9pbWcsIHVuc2lnbmVkIGludCBfaWQsIHVuc2lnbmVkIGludCBkZWxheSwg aW50IF94LCBpbnQgX3kpCi0gCQkJCTogaW1nKF9pbWcpLCBpZChfaWQpLCB4KF94KSwgeShfeSkg ewotIAkJZmMuaW5pdChpbWcuZ2V0R3JpZFNpemVYKCksIGRlbGF5KTsKLSAJfQotLQlpbnQgdXBk YXRlKHVpbnQgbXMpIHsKLSsJaW50IHVwZGF0ZSh1bnNpZ25lZCBpbnQgbXMpIHsKLSAJCWlmIChm Yy51cGRhdGUobXMpKQotIAkJCXJldHVybiAxOyAvKiBkaWUgKi8KLSAJCXJldHVybiAwOwotQEAg LTUwLDggKzUwLDggQEAgY2xhc3MgUGFydGljbGUgOiBwdWJsaWMgU3ByaXRlIHsKLSAJU21vb3Ro Q291bnRlciBzYzsKLSBwdWJsaWM6Ci0gCVBhcnRpY2xlKEdyaWRJbWFnZSAmc2ltZywgaW50IGd4 LCBpbnQgZ3ksIGludCBzeCwgaW50IHN5LCBpbnQgc3csIGludCBzaCwKLS0JCQlkb3VibGUgcHgs IGRvdWJsZSBweSwgZG91YmxlIHZ4LCBkb3VibGUgdnksIGRvdWJsZSB2cG1zLCB1aW50IGxpZmV0 aW1lKTsKLS0JaW50IHVwZGF0ZSh1aW50IG1zKSB7Ci0rCQkJZG91YmxlIHB4LCBkb3VibGUgcHks IGRvdWJsZSB2eCwgZG91YmxlIHZ5LCBkb3VibGUgdnBtcywgdW5zaWduZWQgaW50IGxpZmV0aW1l KTsKLSsJaW50IHVwZGF0ZSh1bnNpZ25lZCBpbnQgbXMpIHsKLSAJCXBvcy5hZGQobXMsIHZlbCk7 Ci0gCQlyZXR1cm4gc2MudXBkYXRlKG1zKTsKLSAJfQotLS0tIGEvc3JjL3RoZW1lLmNwcAkyMDE5 LTAzLTA3IDE1OjE0OjQ5LjAwMDAwMDAwMCArMDEwMAotKysrIGIvc3JjL3RoZW1lLmNwcAkyMDE5 LTA2LTEwIDExOjA0OjI1LjIzMzU1MTg4NiArMDIwMAotQEAgLTIyLDEyICsyMiwxMiBAQCBleHRl cm4gU0RMX1JlbmRlcmVyICptcmM7Ci0gCi0gLyoqIExvYWQgcmVzb3VyY2VzIGFuZCBzY2FsZSBp ZiBuZWNlc3NhcnkgdXNpbmcgYnJpY2tzIHNjcmVlbiBoZWlnaHQuCi0gICogV2hhdGV2ZXIgaXMg bWlzc2luZzogRmFsbCBiYWNrIHRvIFN0YW5kYXJkIHRoZW1lLiAqLwotLXZvaWQgVGhlbWU6Omxv YWQoc3RyaW5nIG5hbWUsIHVpbnQgc2NyZWVuV2lkdGgsIHVpbnQgc2NyZWVuSGVpZ2h0LAotLQkJ CQl1aW50IGJyaWNrU2NyZWVuV2lkdGgsIHVpbnQgYnJpY2tTY3JlZW5IZWlnaHQsCi0rdm9pZCBU aGVtZTo6bG9hZChzdHJpbmcgbmFtZSwgdW5zaWduZWQgaW50IHNjcmVlbldpZHRoLCB1bnNpZ25l ZCBpbnQgc2NyZWVuSGVpZ2h0LAotKwkJCQl1bnNpZ25lZCBpbnQgYnJpY2tTY3JlZW5XaWR0aCwg dW5zaWduZWQgaW50IGJyaWNrU2NyZWVuSGVpZ2h0LAotIAkJCQlpbnQgYW50aWFsaWFzaW5nKQot IHsKLSAJc3RyaW5nIHBhdGgsIGZwYXRoOwotLQl1aW50IGl3LCBpaDsKLSsJdW5zaWduZWQgaW50 IGl3LCBpaDsKLSAKLSAJaWYgKG5hbWVbMF0gPT0gJ34nKQotIAkJcGF0aCA9IGdldEhvbWVEaXIo KSArICIvIiArIENPTkZJR0RJUiArICIvdGhlbWVzLyIgKyBuYW1lLnN1YnN0cigxKTsKLUBAIC0z NzYsNyArMzc2LDcgQEAgdm9pZCBUaGVtZTo6bG9hZChzdHJpbmcgbmFtZSwgdWludCBzY3JlZQot IAotIAkvKiBsb2FkIGFuZCBzY2FsZSB1cCB0byAxMCB3YWxscGFwZXJzICovCi0gCXN0cmluZyB3 cGF0aCA9IHN0ZFBhdGg7Ci0tCXVpbnQgd2JmaCA9IHNiZmgsIHdiZncgPSBzYmZ3OyAvKiBmb3Ig c2NhbGluZyAqLwotKwl1bnNpZ25lZCBpbnQgd2JmaCA9IHNiZmgsIHdiZncgPSBzYmZ3OyAvKiBm b3Igc2NhbGluZyAqLwotIAlpZiAoZmlsZUV4aXN0cyhwYXRoICsgIi9iYWNrMC5wbmciKSB8fCBm aWxlRXhpc3RzKHBhdGggKyAiL2JhY2swLmpwZyIpKSB7Ci0gCQl3cGF0aCA9IHBhdGg7Ci0gCQl3 YmZoID0gYnJpY2tGaWxlSGVpZ2h0OwotLS0tIGEvc3JjL3RoZW1lLmgJMjAxOS0wMy0wNyAxNTow NTo1My4wMDAwMDAwMDAgKzAxMDAKLSsrKyBiL3NyYy90aGVtZS5oCTIwMTktMDYtMTAgMTE6MDQ6 MjUuMjI5NTUxODM4ICswMjAwCi1AQCAtMzMsMzcgKzMzLDM3IEBAIGNsYXNzIFRoZW1lIHsKLSAJ c3RyaW5nIHN0ZFBhdGg7IC8qIHBhdGggdG8gc3RhbmRhcmQgdGhlbWUgZm9yIGZhbGxiYWNrcyAq LwotIAlib29sIG9sZFRoZW1lOwotIAlpbnQgYm9hcmRYOwotLQl1aW50IGJvYXJkV2lkdGg7Ci0r CXVuc2lnbmVkIGludCBib2FyZFdpZHRoOwotIAotIAkvKiBsb2FkZWQgZnJvbSB0aGVtZS5pbmkg Ki8KLSAJc3RyaW5nIHRpdGxlOwotIAlzdHJpbmcgYXV0aG9yOwotIAlzdHJpbmcgdmVyc2lvbjsK LS0JdWludCBicmlja0ZpbGVXaWR0aDsKLS0JdWludCBicmlja0ZpbGVIZWlnaHQ7Ci0rCXVuc2ln bmVkIGludCBicmlja0ZpbGVXaWR0aDsKLSsJdW5zaWduZWQgaW50IGJyaWNrRmlsZUhlaWdodDsK LSAJaW50IHNoYWRvd09mZnNldDsKLSAJc3RyaW5nIGZvbnRTbWFsbE5hbWU7Ci0tCXVpbnQgZm9u dFNtYWxsU2l6ZTsKLSsJdW5zaWduZWQgaW50IGZvbnRTbWFsbFNpemU7Ci0gCXN0cmluZyBmb250 Tm9ybWFsTmFtZTsKLS0JdWludCBmb250Tm9ybWFsU2l6ZTsKLSsJdW5zaWduZWQgaW50IGZvbnRO b3JtYWxTaXplOwotIAlTRExfQ29sb3IgZm9udENvbG9yTm9ybWFsOwotIAlTRExfQ29sb3IgZm9u dENvbG9ySGlnaGxpZ2h0OwotLQl1aW50IHNob3RGcmFtZU51bTsKLS0JdWludCBzaG90QW5pbURl bGF5OwotLQl1aW50IHdlYXBvbkZyYW1lTnVtOwotLQl1aW50IHdlYXBvbkFuaW1EZWxheTsKLS0J dWludCBleHBsRnJhbWVOdW07Ci0tCXVpbnQgZXhwbEFuaW1EZWxheTsKLS0JdWludCBzaGluZUZy YW1lTnVtOwotLQl1aW50IHNoaW5lQW5pbURlbGF5OwotLQl1aW50IG1lbnVYLCBtZW51WSwgbWVu dUl0ZW1XaWR0aCwgbWVudUl0ZW1IZWlnaHQ7Ci0rCXVuc2lnbmVkIGludCBzaG90RnJhbWVOdW07 Ci0rCXVuc2lnbmVkIGludCBzaG90QW5pbURlbGF5OwotKwl1bnNpZ25lZCBpbnQgd2VhcG9uRnJh bWVOdW07Ci0rCXVuc2lnbmVkIGludCB3ZWFwb25BbmltRGVsYXk7Ci0rCXVuc2lnbmVkIGludCBl eHBsRnJhbWVOdW07Ci0rCXVuc2lnbmVkIGludCBleHBsQW5pbURlbGF5OwotKwl1bnNpZ25lZCBp bnQgc2hpbmVGcmFtZU51bTsKLSsJdW5zaWduZWQgaW50IHNoaW5lQW5pbURlbGF5OwotKwl1bnNp Z25lZCBpbnQgbWVudVgsIG1lbnVZLCBtZW51SXRlbVdpZHRoLCBtZW51SXRlbUhlaWdodDsKLSAJ c3RyaW5nIG1lbnVGb250Tm9ybWFsTmFtZSwgbWVudUZvbnRGb2N1c05hbWU7Ci0tCXVpbnQgbWVu dUZvbnROb3JtYWxTaXplLCBtZW51Rm9udEZvY3VzU2l6ZTsKLSsJdW5zaWduZWQgaW50IG1lbnVG b250Tm9ybWFsU2l6ZSwgbWVudUZvbnRGb2N1c1NpemU7Ci0gCVNETF9Db2xvciBtZW51Rm9udENv bG9yTm9ybWFsLCBtZW51Rm9udENvbG9yRm9jdXM7Ci0gCi0gCUltYWdlIG1lbnVCYWNrZ3JvdW5k OwotIAlJbWFnZSB3YWxscGFwZXJzW01BWFdBTExQQVBFUlNdOwotLQl1aW50IG51bVdhbGxwYXBl cnM7Ci0rCXVuc2lnbmVkIGludCBudW1XYWxscGFwZXJzOwotIAlJbWFnZSBmcmFtZSwgZnJhbWVT aGFkb3c7Ci0gCUdyaWRJbWFnZSBicmlja3MsIGJyaWNrc1NoYWRvdzsKLSAJR3JpZEltYWdlIHBh ZGRsZXMsIHBhZGRsZXNTaGFkb3c7Ci1AQCAtMTA2LDggKzEwNiw4IEBAIHB1YmxpYzoKLSAJCXsK LSAJCXN0ZFBhdGggPSBzdHJpbmcoREFUQURJUikgKyAiL3RoZW1lcy9TdGFuZGFyZCI7Ci0gCX0K LS0Jdm9pZCBsb2FkKHN0cmluZyBuYW1lLCB1aW50IHNjcmVlbldpZHRoLCB1aW50IHNjcmVlbkhl aWdodCwKLS0JCQkJdWludCBicmlja1NjcmVlbldpZHRoLCB1aW50IGJyaWNrU2NyZWVuSGVpZ2h0 LAotKwl2b2lkIGxvYWQoc3RyaW5nIG5hbWUsIHVuc2lnbmVkIGludCBzY3JlZW5XaWR0aCwgdW5z aWduZWQgaW50IHNjcmVlbkhlaWdodCwKLSsJCQkJdW5zaWduZWQgaW50IGJyaWNrU2NyZWVuV2lk dGgsIHVuc2lnbmVkIGludCBicmlja1NjcmVlbkhlaWdodCwKLSAJCQkJaW50IGFudGlhbGlhc2lu Zyk7Ci0gfTsKLSAKLS0tLSBhL3NyYy90b29scy5jcHAJMjAxOC0xMS0wNCAxMjowNDoxNy4wMDAw MDAwMDAgKzAxMDAKLSsrKyBiL3NyYy90b29scy5jcHAJMjAxOS0wNi0xMCAxMTowNDoyNS4yMzM1 NTE4ODYgKzAyMDAKLUBAIC05NCw3ICs5NCw3IEBAIGludCBGaWxlUGFyc2VyOjpnZXQoY29uc3Qg c3RyaW5nJiBrLCBpbnQKLSAJCXYgPSBzdG9pKHN0cik7Ci0gCXJldHVybiByZXQ7Ci0gfQotLWlu dCBGaWxlUGFyc2VyOjpnZXQoY29uc3Qgc3RyaW5nJiBrLCB1aW50ICZ2KQotK2ludCBGaWxlUGFy c2VyOjpnZXQoY29uc3Qgc3RyaW5nJiBrLCB1bnNpZ25lZCBpbnQgJnYpCi0gewotIAlzdHJpbmcg c3RyOwotIAlpbnQgcmV0ID0gZ2V0KGssc3RyKTsKLS0tLSBhL3NyYy90b29scy5oCTIwMTgtMTAt MzEgMTI6MjM6MjIuMDAwMDAwMDAwICswMTAwCi0rKysgYi9zcmMvdG9vbHMuaAkyMDE5LTA2LTEw IDExOjA0OjI1LjIyOTU1MTgzOCArMDIwMAotQEAgLTk1LDcgKzk1LDcgQEAgcHVibGljOgotIAlG aWxlUGFyc2VyKGNvbnN0IHN0cmluZyYgIGZuYW1lKTsKLSAJaW50IGdldChjb25zdCBzdHJpbmcm ICBrLCBzdHJpbmcgJnYpOwotIAlpbnQgZ2V0KGNvbnN0IHN0cmluZyYgIGssIGludCAmdik7Ci0t CWludCBnZXQoY29uc3Qgc3RyaW5nJiAgaywgdWludCAmdik7Ci0rCWludCBnZXQoY29uc3Qgc3Ry aW5nJiAgaywgdW5zaWduZWQgaW50ICZ2KTsKLSAJaW50IGdldChjb25zdCBzdHJpbmcmICBrLCB1 aW50OF90ICZ2KTsKLSAJaW50IGdldChjb25zdCBzdHJpbmcmICBrLCBkb3VibGUgJnYpOwotIH07 Ci1AQCAtMTY3LDcgKzE2Nyw3IEBAIHB1YmxpYzoKLSAKLSBjbGFzcyBGcmFtZUNvdW50ZXIgOiBw dWJsaWMgU21vb3RoQ291bnRlciB7Ci0gcHVibGljOgotLQl2b2lkIGluaXQodWludCBtYXgsIHVp bnQgZGVsYXkpIHsKLSsJdm9pZCBpbml0KHVuc2lnbmVkIGludCBtYXgsIHVuc2lnbmVkIGludCBk ZWxheSkgewotIAkJU21vb3RoQ291bnRlcjo6aW5pdChTQ1RfUkVQRUFULCAwLCAtMC4wMSArIG1h eCwgZGVsYXkpOwotIAl9Ci0gCWludCBnZXQoKSB7IHJldHVybiBTbW9vdGhDb3VudGVyOjpnZXQo KTsgfQotLS0tIGEvc3JjL3ZpZXcuY3BwCTIwMTktMDMtMDggMTk6MTM6MzEuMDAwMDAwMDAwICsw MTAwCi0rKysgYi9zcmMvdmlldy5jcHAJMjAxOS0wNi0xMCAxMTowNDoyNS4yMzQ1NTE4OTggKzAy MDAKLUBAIC03NCw3ICs3NCw3IEBAIFZpZXc6OlZpZXcoQ29uZmlnICZjZmcsIENsaWVudEdhbWUg Jl9jZykKLSAKLSAvKiogKFJlKUluaXRpYWxpemUgd2luZG93LCB0aGVtZSBhbmQgbWVudS4KLSAg KiB0IGlzIHRoZW1lIG5hbWUsIHI9MCBtZWFucyBmdWxsc2NyZWVuLCBvdGhlcndpc2UgdmVydGlj YWwgcmVzb2x1dGlvbi4gKi8KLS12b2lkIFZpZXc6OmluaXQoc3RyaW5nIHQsIHVpbnQgcikKLSt2 b2lkIFZpZXc6OmluaXQoc3RyaW5nIHQsIHVuc2lnbmVkIGludCByKQotIHsKLSAJX2xvZ2luZm8o IkluaXRpYWxpemluZyBWaWV3IChUaGVtZT0lcywgUmVzb2x1dGlvbj0lZClcbiIsdC5jX3N0cigp LHIpOwotIAotQEAgLTY0OCw3ICs2NDgsNyBAQCB2b2lkIFZpZXc6OnJlbmRlckJhY2tncm91bmRJ bWFnZSgpIHsKLSAKLSAJLyogbGl2ZXMgKi8KLSAJQ2xpZW50UGxheWVyICpjcCA9IGNnYW1lLmdl dEN1cnJlbnRQbGF5ZXIoKTsKLS0JZm9yICh1aW50IGkgPSAwOyBpIDwgY3AtPmdldE1heExpdmVz KCk7IGkrKykKLSsJZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjcC0+Z2V0TWF4TGl2ZXMo KTsgaSsrKQotIAkJdGhlbWUubGlmZS5jb3B5KDAsIGkgPCBjcC0+Z2V0TGl2ZXMoKSwgMCwgKE1B UEhFSUdIVC1pLTEpKmJoKTsKLSAKLSAJU0RMX1NldFJlbmRlclRhcmdldChtcmMsTlVMTCk7Ci1A QCAtNzM5LDEyICs3MzksMTIgQEAgdm9pZCBWaWV3OjpyZW5kZXJTY29yZUltYWdlKCkKLSB2b2lk IFZpZXc6OnJlbmRlckV4dHJhc0ltYWdlKCkKLSB7Ci0gCUdhbWUgKmdhbWUgPSBjZ2FtZS5nZXRH YW1lQ29udGV4dCgpOwotLQl1aW50IGJ3ID0gYnJpY2tTY3JlZW5XaWR0aCwgYmggPSBicmlja1Nj cmVlbkhlaWdodDsKLS0JdWludCB4c3RhcnQgPSAoaW1nRXh0cmFzLmdldFdpZHRoKCkgLSAzKmJ3 KSAvIDQ7Ci0tCXVpbnQgeXN0YXJ0ID0gKGltZ0V4dHJhcy5nZXRIZWlnaHQoKSAtIDMqYmgpIC8g NDsKLS0JdWludCB4b2ZmID0gYncgKyB4c3RhcnQ7Ci0tCXVpbnQgeW9mZiA9IGJoICsgeXN0YXJ0 OwotLQl1aW50IHggPSB4c3RhcnQsIHkgPSB5c3RhcnQ7Ci0rCXVuc2lnbmVkIGludCBidyA9IGJy aWNrU2NyZWVuV2lkdGgsIGJoID0gYnJpY2tTY3JlZW5IZWlnaHQ7Ci0rCXVuc2lnbmVkIGludCB4 c3RhcnQgPSAoaW1nRXh0cmFzLmdldFdpZHRoKCkgLSAzKmJ3KSAvIDQ7Ci0rCXVuc2lnbmVkIGlu dCB5c3RhcnQgPSAoaW1nRXh0cmFzLmdldEhlaWdodCgpIC0gMypiaCkgLyA0OwotKwl1bnNpZ25l ZCBpbnQgeG9mZiA9IGJ3ICsgeHN0YXJ0OwotKwl1bnNpZ25lZCBpbnQgeW9mZiA9IGJoICsgeXN0 YXJ0OwotKwl1bnNpZ25lZCBpbnQgeCA9IHhzdGFydCwgeSA9IHlzdGFydDsKLSAKLSAJU0RMX1Nl dFJlbmRlclRhcmdldChtcmMsIGltZ0V4dHJhcy5nZXRUZXgoKSk7Ci0gCVNETF9TZXRSZW5kZXJE cmF3Q29sb3IobXJjLDAsMCwwLDApOwotQEAgLTg0NiwxNCArODQ2LDE0IEBAIGJvb2wgVmlldzo6 c2hvd0luZm8oY29uc3QgdmVjdG9yPHN0cmluZz4KLSB7Ci0gCUZvbnQgJmZvbnQgPSB0aGVtZS5m U21hbGw7Ci0gCWJvb2wgcmV0ID0gdHJ1ZTsKLS0JdWludCBoID0gdGV4dC5zaXplKCkgKiBmb250 LmdldExpbmVIZWlnaHQoKTsKLSsJdW5zaWduZWQgaW50IGggPSB0ZXh0LnNpemUoKSAqIGZvbnQu Z2V0TGluZUhlaWdodCgpOwotIAlpbnQgdHggPSBtdy0+Z2V0V2lkdGgoKS8yOwotIAlpbnQgdHkg PSAobXctPmdldEhlaWdodCgpIC0gaCkvMjsKLSAKLSAJZGFya2VuU2NyZWVuKCk7Ci0gCi0gCWZv bnQuc2V0QWxpZ24oQUxJR05fWF9DRU5URVIgfCBBTElHTl9ZX1RPUCk7Ci0tCWZvciAodWludCBp ID0gMDsgaSA8IHRleHQuc2l6ZSgpOyBpKyspIHsKLSsJZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7 IGkgPCB0ZXh0LnNpemUoKTsgaSsrKSB7Ci0gCQlmb250LndyaXRlKHR4LHR5LHRleHRbaV0pOwot IAkJdHkgKz0gZm9udC5nZXRMaW5lSGVpZ2h0KCk7Ci0gCX0KLUBAIC05NjQsMTIgKzk2NCwxMiBA QCB2b2lkIFZpZXc6OmNyZWF0ZVNwcml0ZXMoKQotIAl9Ci0gfQotIAotLXZvaWQgVmlldzo6Z2V0 QmFsbFZpZXdJbmZvKEJhbGwgKmJhbGwsIGludCAqeCwgaW50ICp5LCB1aW50ICp0eXBlKQotK3Zv aWQgVmlldzo6Z2V0QmFsbFZpZXdJbmZvKEJhbGwgKmJhbGwsIGludCAqeCwgaW50ICp5LCB1bnNp Z25lZCBpbnQgKnR5cGUpCi0gewotIAlHYW1lICpnYW1lID0gY2dhbWUuZ2V0R2FtZUNvbnRleHQo KTsgLyogZGlyZWN0IGxpYiBnYW1lIGNvbnRleHQgKi8KLSAJUGFkZGxlICpwYWRkbGUgPSBnYW1l LT5wYWRkbGVzWzBdOyAvKiBsb2NhbCBwYWRkbGUgYWx3YXlzIGF0IGJvdHRvbSAqLwotIAotLQl1 aW50IGJ0ID0gMDsKLSsJdW5zaWduZWQgaW50IGJ0ID0gMDsKLSAJZG91YmxlIHB4ID0gYmFsbC0+ Y3VyLng7Ci0gCWRvdWJsZSBweSA9IGJhbGwtPmN1ci55OwotIAlpZiAoYmFsbC0+YXR0YWNoZWQp IHsKLUBAIC0xMzk1LDcgKzEzOTUsNyBAQCB2b2lkIFZpZXc6OnNhdmVHYW1lKCkKLSAJb2ZzIDw8 ICJkaWZmaWN1bHR5PSIgPDwgY29uZmlnLmRpZmYgPDwgIlxuIjsKLSAJb2ZzIDw8ICJjdXJwbGF5 ZXI9IiA8PCBjZ2FtZS5nZXRDdXJyZW50UGxheWVySWQoKSA8PCAiXG4iOwotIAlvZnMgPDwgInBs YXllcnM9IiA8PCBwbGF5ZXJzLnNpemUoKSA8PCAiXG4iOwotLQlmb3IgKHVpbnQgaSA9IDA7IGkg PCBwbGF5ZXJzLnNpemUoKTsgaSsrKSB7Ci0rCWZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwg cGxheWVycy5zaXplKCk7IGkrKykgewotIAkJb2ZzIDw8ICJwbGF5ZXIiIDw8IGkgPDwgIiB7XG4i OwotIAkJb2ZzIDw8ICIJbmFtZT0iIDw8IHBsYXllcnNbaV0tPmdldE5hbWUoKSA8PCAiXG4iOwot IAkJb2ZzIDw8ICIJbGV2ZWw9IiA8PCBwbGF5ZXJzW2ldLT5nZXRMZXZlbCgpIDw8ICJcbiI7Ci1A QCAtMTQzMiwxOCArMTQzMiwxOCBAQCBpbnQgVmlldzo6cmVzdW1lR2FtZSgpCi0gCQlmcC5nZXQo c3RyaW5nKCJwbGF5ZXIiKSArIHRvX3N0cmluZyhpKSArICIubmFtZSIsY29uZmlnLnBsYXllcl9u YW1lc1tpXSk7Ci0gCi0gCS8qIGluaXRpYWxpemUgZ2FtZSB0byBsZXZlbCBvZiBjdXJyZW50IHBs YXllciAqLwotLQl1aW50IHBpZCA9IDA7Ci0rCXVuc2lnbmVkIGludCBwaWQgPSAwOwotIAlmcC5n ZXQoImN1cnBsYXllciIscGlkKTsKLSAJaWYgKHBpZCA+PSBNQVhfUExBWUVSUykKLSAJCXBpZCA9 IDA7Ci0tCXVpbnQgbGV2aWQgPSAwOwotKwl1bnNpZ25lZCBpbnQgbGV2aWQgPSAwOwotIAlmcC5n ZXQoc3RyaW5nKCJwbGF5ZXIiKSArIHRvX3N0cmluZyhwaWQpICsgIi5sZXZlbCIsbGV2aWQpOwot IAljZ2FtZS5pbml0KHNldG5hbWUsbGV2aWQpOwotIAotIAkvKiBhZGp1c3QgcGxheWVycyAqLwot IAlmb3IgKGludCBpID0gMDsgaSA8IGNvbmZpZy5wbGF5ZXJfY291bnQ7IGkrKykgewotIAkJc3Ry aW5nIHByZWZpeCA9IHN0cmluZygicGxheWVyIikgKyB0b19zdHJpbmcoaSkgKyAiLiI7Ci0tCQl1 aW50IGxldmVsID0gMCwgbGl2ZXMgPSAzOwotKwkJdW5zaWduZWQgaW50IGxldmVsID0gMCwgbGl2 ZXMgPSAzOwotIAkJaW50IHNjb3JlID0gMDsKLSAJCWZwLmdldChwcmVmaXggKyAic2NvcmUiLHNj b3JlKTsKLSAJCWZwLmdldChwcmVmaXggKyAibGV2ZWwiLGxldmVsKTsKLUBAIC0xNTI5LDggKzE1 MjksOCBAQCB2b2lkIFZpZXc6OnJlbmRlckJhbGxzKGJvb2wgc2hhZG93KQotIAlCYWxsICpiYWxs OwotIAlsaXN0X3Jlc2V0KGdhbWUtPmJhbGxzKTsKLSAJd2hpbGUgKCAoIGJhbGwgPSAoQmFsbCop bGlzdF9uZXh0KCBnYW1lLT5iYWxscyApICkgIT0gMCApIHsKLS0JCXVpbnQgdHlwZTsKLS0JCXVp bnQgYWxwaGEgPSAyNTU7Ci0rCQl1bnNpZ25lZCBpbnQgdHlwZTsKLSsJCXVuc2lnbmVkIGludCBh bHBoYSA9IDI1NTsKLSAJCWludCBweCwgcHk7Ci0gCQlnZXRCYWxsVmlld0luZm8oYmFsbCwgJnB4 LCAmcHksICZ0eXBlKTsKLSAJCWlmICh0eXBlID09IDEpIC8qIGVuZXJneSBiYWxsICovCi1AQCAt MTU2MSw3ICsxNTYxLDcgQEAgdm9pZCBWaWV3Ojp1cGRhdGVSZXN1bWVHYW1lVG9vbHRpcCgpCi0g CS8qIFhYWCBtdWx0aXBsZSBsb2NhdGlvbnMuLi4gKi8KLSAJY29uc3QgY2hhciAqZGlmZk5hbWVz W10gPSB7XygiS2lkcyIpLF8oIkVhc3kiKSxfKCJNZWRpdW0iKSxfKCJIYXJkIikgfSA7Ci0gCXN0 cmluZyB0ZXh0LCBzdHI7Ci0tCXVpbnQgZGlmZiwgcG51bTsKLSsJdW5zaWduZWQgaW50IGRpZmYs IHBudW07Ci0gCUZpbGVQYXJzZXIgZnAoc2F2ZUZpbGVOYW1lKTsKLSAJZnAuZ2V0KCJsZXZlbHNl dCIsdGV4dCk7Ci0gCWZwLmdldCgiZGlmZmljdWx0eSIsZGlmZik7Ci1AQCAtMTU3MywxMCArMTU3 MywxMCBAQCB2b2lkIFZpZXc6OnVwZGF0ZVJlc3VtZUdhbWVUb29sdGlwKCkKLSAJdGV4dCArPSB0 b19zdHJpbmcocG51bSk7Ci0gCXRleHQgKz0gXygiIHBsYXllcihzKVxuIik7Ci0gCi0tCWZvciAo dWludCBpID0gMDsgaSA8IHBudW07IGkrKykgewotKwlmb3IgKHVuc2lnbmVkIGludCBpID0gMDsg aSA8IHBudW07IGkrKykgewotIAkJc3RyaW5nIHByZWZpeCA9IHN0cmluZygicGxheWVyIikgKyB0 b19zdHJpbmcoaSkgKyAiLiI7Ci0gCQlzdHJpbmcgbmFtZTsKLS0JCXVpbnQgbGV2ZWwgPSAwLCBs aXZlcyA9IDM7Ci0rCQl1bnNpZ25lZCBpbnQgbGV2ZWwgPSAwLCBsaXZlcyA9IDM7Ci0gCQlpbnQg c2NvcmUgPSAwOwotIAkJZnAuZ2V0KHByZWZpeCArICJuYW1lIixuYW1lKTsKLSAJCWZwLmdldChw cmVmaXggKyAic2NvcmUiLHNjb3JlKTsKLUBAIC0xNTkxLDcgKzE1OTEsNyBAQCB2b2lkIFZpZXc6 OnVwZGF0ZVJlc3VtZUdhbWVUb29sdGlwKCkKLSAJcmVzdW1lTWVudUl0ZW0tPnNldFRvb2x0aXAo dGV4dCk7Ci0gfQotIAotLXZvaWQgVmlldzo6cmVuZGVyRXh0cmFIZWxwKEdyaWRJbWFnZSAmaW1n LCB1aW50IGd4LCB1aW50IGd5LCBjb25zdCBzdHJpbmcgJnN0ciwgaW50IHgsIGludCB5KQotK3Zv aWQgVmlldzo6cmVuZGVyRXh0cmFIZWxwKEdyaWRJbWFnZSAmaW1nLCB1bnNpZ25lZCBpbnQgZ3gs IHVuc2lnbmVkIGludCBneSwgY29uc3Qgc3RyaW5nICZzdHIsIGludCB4LCBpbnQgeSkKLSB7Ci0g CWltZy5jb3B5KGd4LGd5LHgseSk7Ci0gCXRoZW1lLmZTbWFsbC5zZXRBbGlnbihBTElHTl9YX0xF RlQgfCBBTElHTl9ZX0NFTlRFUik7Ci1AQCAtMTYyMSw3ICsxNjIxLDcgQEAgdm9pZCBWaWV3Ojpz aG93SGVscCgpCi0gCQk7Ci0gCi0gCWludCB4ID0gYnJpY2tTY3JlZW5XaWR0aCwgeSA9IGJyaWNr U2NyZWVuSGVpZ2h0OwotLQl1aW50IG1heHcgPSBicmlja1NjcmVlbldpZHRoICogMTA7Ci0rCXVu c2lnbmVkIGludCBtYXh3ID0gYnJpY2tTY3JlZW5XaWR0aCAqIDEwOwotIAotIAlkYXJrZW5TY3Jl ZW4oKTsKLSAKLS0tLSBhL3NyYy92aWV3LmgJMjAxOS0wMy0wNyAxNTo0NDozNi4wMDAwMDAwMDAg KzAxMDAKLSsrKyBiL3NyYy92aWV3LmgJMjAxOS0wNi0xMCAxMTowNDoyNS4yMjk1NTE4MzggKzAy MDAKLUBAIC0xMDUsNyArMTA1LDcgQEAgY2xhc3MgVmlldyB7Ci0gCXZvaWQgc2hvd0hlbHAoKTsK LSAJdm9pZCBjcmVhdGVQYXJ0aWNsZXMoQnJpY2tIaXQgKmhpdCk7Ci0gCXZvaWQgY3JlYXRlU3By aXRlcygpOwotLQl2b2lkIGdldEJhbGxWaWV3SW5mbyhCYWxsICpiYWxsLCBpbnQgKngsIGludCAq eSwgdWludCAqdHlwZSk7Ci0rCXZvaWQgZ2V0QmFsbFZpZXdJbmZvKEJhbGwgKmJhbGwsIGludCAq eCwgaW50ICp5LCB1bnNpZ25lZCBpbnQgKnR5cGUpOwotIAl2b2lkIHBsYXlTb3VuZHMoKTsKLSAJ dm9pZCBjcmVhdGVNZW51cygpOwotIAl2b2lkIGdyYWJJbnB1dChpbnQgZ3JhYik7Ci1AQCAtMTE2 LDE0ICsxMTYsMTQgQEAgY2xhc3MgVmlldyB7Ci0gCXZvaWQgZGFya2VuU2NyZWVuKGludCBhbHBo YSA9IDMyKTsKLSAJdm9pZCBpbml0VGl0bGVMYWJlbCgpOwotIAl2b2lkIHVwZGF0ZVJlc3VtZUdh bWVUb29sdGlwKCk7Ci0tCXZvaWQgcmVuZGVyRXh0cmFIZWxwKEdyaWRJbWFnZSAmaW1nLCB1aW50 IGd4LCB1aW50IGd5LCBjb25zdCBzdHJpbmcgJnN0ciwgaW50IHgsIGludCB5KTsKLSsJdm9pZCBy ZW5kZXJFeHRyYUhlbHAoR3JpZEltYWdlICZpbWcsIHVuc2lnbmVkIGludCBneCwgdW5zaWduZWQg aW50IGd5LCBjb25zdCBzdHJpbmcgJnN0ciwgaW50IHgsIGludCB5KTsKLSAJdm9pZCBydW5Ccmlj a0Rlc3Ryb3lEbGcoKTsKLSAJdm9pZCB3YWl0Rm9ySW5wdXRSZWxlYXNlKCk7Ci0gCXZvaWQgZ2V0 TmV3U2hpbmVQb3NpdGlvbigpOwotIHB1YmxpYzoKLSAJVmlldyhDb25maWcgJmNmZywgQ2xpZW50 R2FtZSAmX2NnKTsKLSAJflZpZXcoKTsKLS0Jdm9pZCBpbml0KHN0cmluZyB0LCB1aW50IHIpOwot Kwl2b2lkIGluaXQoc3RyaW5nIHQsIHVuc2lnbmVkIGludCByKTsKLSAJdm9pZCBydW4oKTsKLSAJ dm9pZCByZW5kZXIoKTsKLSAJdm9pZCBydW5NZW51KCk7Ci0tLS0gYS9zcmMvY2xpZW50Z2FtZS5j cHAJMjAxOS0wNi0xMCAxMTowODo1NS41MTU3NTY0ODUgKzAyMDAKLSsrKyBiL3NyYy9jbGllbnRn YW1lLmNwcAkyMDE5LTA2LTEwIDExOjA5OjE3Ljk2NDAyMTM1NSArMDIwMAotQEAgLTk1LDcgKzk1 LDcgQEAgQ2xpZW50UGxheWVyICpDbGllbnRHYW1lOjpnZXROZXh0UGxheWVyKAotIAkJaWYgKGN1 clBsYXllciA9PSBwbGF5ZXJzLnNpemUoKSkKLSAJCQljdXJQbGF5ZXIgPSAwOwotIAkJcCA9IHBs YXllcnNbY3VyUGxheWVyXS5nZXQoKTsKLS0JCWlmIChwLT5nZXRMaXZlcygpID4gMCAmJiBwLT5n ZXRMZXZlbCgpIDwgKHVpbnQpbGV2ZWxzZXQtPmNvdW50KQotKwkJaWYgKHAtPmdldExpdmVzKCkg PiAwICYmIHAtPmdldExldmVsKCkgPCAodW5zaWduZWQgaW50KWxldmVsc2V0LT5jb3VudCkKLSAJ CQlyZXR1cm4gcDsKLSAJfSB3aGlsZSAoY3VyUGxheWVyICE9IHN0YXJ0SWQpOwotIAlyZXR1cm4g TlVMTDsKLUBAIC0xOTIsNyArMTkyLDcgQEAgaW50IENsaWVudEdhbWU6OnVwZGF0ZSh1bnNpZ25l ZCBpbnQgbXMsCi0gCQlDbGllbnRQbGF5ZXIgKnAgPSBwbGF5ZXJzW2N1clBsYXllcl0uZ2V0KCk7 Ci0gCQkvKiBib251cyBsZXZlbHMgYXJlIGp1c3Qgc2tpcHBlZCBvbiBmYWlsdXJlICovCi0gCQlp ZiAoZ2FtZS0+d2lubmVyID09IFBBRERMRV9CT1RUT00gfHwgZ2FtZS0+bGV2ZWxfdHlwZSAhPSBM VF9OT1JNQUwpIHsKLS0JCQlpZiAocC0+bmV4dExldmVsKCkgPCAodWludClsZXZlbHNldC0+Y291 bnQpCi0rCQkJaWYgKHAtPm5leHRMZXZlbCgpIDwgKHVuc2lnbmVkIGludClsZXZlbHNldC0+Y291 bnQpCi0gCQkJCXAtPnNldExldmVsU25hcHNob3QobGV2ZWxzZXQtPmxldmVsc1twLT5nZXRMZXZl bCgpXSk7Ci0gCQkJZWxzZSB7Ci0gCQkJCXN0cnByaW50Zihtc2csXygiQ29uZ3JhdHVsYXRpb25z LCAlcywgeW91IGNsZWFyZWQgYWxsIGxldmVscyEiKSxwLT5nZXROYW1lKCkuY19zdHIoKSk7Ci0t LS0gYS9zcmMvY2xpZW50Z2FtZS5oCTIwMTktMDYtMTAgMTE6MTA6MzAuNTAwODc3MjMxICswMjAw Ci0rKysgYi9zcmMvY2xpZW50Z2FtZS5oCTIwMTktMDYtMTAgMTE6MTA6NDEuOTcyMDEyNTgxICsw MjAwCi1AQCAtMTIwLDcgKzEyMCw3IEBAIHB1YmxpYzoKLSAJdm9pZCBnZXRDdXJyZW50TGV2ZWxO YW1lQW5kQXV0aG9yKHN0cmluZyAmbmFtZSwgc3RyaW5nICZhdXRob3IpIHsKLSAJCUNsaWVudFBs YXllciAqcCA9IHBsYXllcnNbY3VyUGxheWVyXS5nZXQoKTsKLSAJCXVuc2lnbmVkIGludCBsaWQg PSBwLT5nZXRMZXZlbCgpOwotLQkJaWYgKGxpZCA+PSAodWludClsZXZlbHNldC0+Y291bnQpIHsK LSsJCWlmIChsaWQgPj0gKHVuc2lnbmVkIGludClsZXZlbHNldC0+Y291bnQpIHsKLSAJCQluYW1l ID0gIm5vbmUiOwotIAkJCWF1dGhvciA9ICJub25lIjsgLyogaXMgZG9uZSwgc2hvdWxkIG5vdCBo YXBwZW4gKi8KLSAJCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9zcmNwa2dzL2xicmVha291dGhkL3Bh dGNoZXMvdWludC5wYXRjaCBiL3NyY3BrZ3MvbGJyZWFrb3V0aGQvcGF0Y2hlcy91aW50LnBhdGNo Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi5mYTViNzE2MGM1NWJm ZgotLS0gL2Rldi9udWxsCisrKyBiL3NyY3BrZ3MvbGJyZWFrb3V0aGQvcGF0Y2hlcy91aW50LnBh dGNoCkBAIC0wLDAgKzEsMTggQEAKK2RpZmYgLS1naXQgYS9zcmMvdG9vbHMuaCBiL3NyYy90b29s cy5oCitpbmRleCBhNzdiZDUyLi4yYTY4YTkyIDEwMDY0NAorLS0tIGEvc3JjL3Rvb2xzLmgKKysr KyBiL3NyYy90b29scy5oCitAQCAtMjEsMTAgKzIxLDEwIEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7 CisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNpbmNsdWRlIDxtYXRoLmg+CisgI2luY2x1ZGUgPGRp cmVudC5oPgorLSNpZmRlZiBXSU4zMgorLSAgI2luY2x1ZGUgPHN0ZGludC5oPgorKy8vI2lmZGVm IFdJTjMyCisrICAjaW5jbHVkZSA8Y3N0ZGludD4KKyAgIHR5cGVkZWYgdWludDMyX3QgdWludDsK Ky0jZW5kaWYKKysvLyNlbmRpZgorICNpbmNsdWRlIDxsaXN0PgorICNpbmNsdWRlIDxzdHJpbmc+ CisgI2luY2x1ZGUgPHZlY3Rvcj4KZGlmZiAtLWdpdCBhL3NyY3BrZ3MvbGJyZWFrb3V0aGQvdGVt cGxhdGUgYi9zcmNwa2dzL2xicmVha291dGhkL3RlbXBsYXRlCmluZGV4IGNiOTA2MmU0ZjYzMTYy Li44MDZiMjYyMDYzYTk5YyAxMDA2NDQKLS0tIGEvc3JjcGtncy9sYnJlYWtvdXRoZC90ZW1wbGF0 ZQorKysgYi9zcmNwa2dzL2xicmVha291dGhkL3RlbXBsYXRlCkBAIC0xLDE0ICsxLDE1IEBACiAj IFRlbXBsYXRlIGZpbGUgZm9yICdsYnJlYWtvdXRoZCcKIHBrZ25hbWU9bGJyZWFrb3V0aGQKLXZl cnNpb249MS4wLjYKK3ZlcnNpb249MS4xLjYKIHJldmlzaW9uPTEKIGJ1aWxkX3N0eWxlPWdudS1j b25maWd1cmUKIGNvbmZpZ3VyZV9hcmdzPSItLWxvY2Fsc3RhdGVkaXI9L3Zhci8ke3BrZ25hbWV9 IgogbWFrZWRlcGVuZHM9IlNETDItZGV2ZWwgU0RMMl9taXhlci1kZXZlbCBTREwyX2ltYWdlLWRl dmVsIFNETDJfdHRmLWRldmVsIgorZGVwZW5kcz0iZGVza3RvcC1maWxlLXV0aWxzIGhpY29sb3It aWNvbi10aGVtZSIKIHNob3J0X2Rlc2M9IlNjYWxhYmxlIDE2OjkgcmVtYWtlIG9mIExCcmVha291 dDIiCi1tYWludGFpbmVyPSJPcnBoYW5lZCA8b3JwaGFuQHZvaWRsaW51eC5vcmc+IgorbWFpbnRh aW5lcj0iTWloYWlsIEl2YW5jaGV2IDxjb250YWN0QGl2YW5jaGV2Lm5ldD4iCiBsaWNlbnNlPSJH UEwtMi4wLW9yLWxhdGVyIgotaG9tZXBhZ2U9Imh0dHA6Ly9sZ2FtZXMuc291cmNlZm9yZ2UubmV0 L0xCcmVha291dEhELyIKK2hvbWVwYWdlPSJodHRwczovL2xnYW1lcy5zb3VyY2Vmb3JnZS5uZXQv TEJyZWFrb3V0SEQvIgogZGlzdGZpbGVzPSIke1NPVVJDRUZPUkdFX1NJVEV9L2xnYW1lcy8kcGtn bmFtZS0kdmVyc2lvbi50YXIuZ3oiCi1jaGVja3N1bT1kZjVmOGFkODhiY2YyMGJkMzRlMWRmZDc3 Njk3YjQ5YTE2OGQ4M2FkNDNkOGZkZjVhM2ZlZTFmZTI3MmUxNWJkCitjaGVja3N1bT0xYThhZjYy ZTczM2NiZTJlYWM5MDk2ZjM3ZDFlNzRkYjcyNzVkYzZjNmZhOWNhNDhhZWU2YmQ0YmU5ZDNmZDJk CiBub2NoZWNrcGVybXM9eWVzICMgdXNlcyBhIHdvcmxkLXdyaXRhYmxlIC5oc2NyIGZpbGUgZm9y IGdsb2JhbCBsZWFkZXJib2FyZAo= --===============3698273168925287063==--