From owner-freebsd-net@FreeBSD.ORG Sun Apr 17 23:00:24 2011 Return-Path: Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 57680106566B for ; Sun, 17 Apr 2011 23:00:24 +0000 (UTC) (envelope-from if@freebsd.org) Received: from chile.gbit.at (ns1.xip.at [193.239.188.99]) by mx1.freebsd.org (Postfix) with ESMTP id 8573E8FC0A for ; Sun, 17 Apr 2011 23:00:21 +0000 (UTC) Received: (qmail 26373 invoked from network); 18 Apr 2011 00:53:37 +0200 Received: from unknown (HELO filebunker.xip.at) (89.207.145.147) by chile.gbit.at with (DHE-RSA-AES256-SHA encrypted) SMTP; 18 Apr 2011 00:53:37 +0200 Date: Mon, 18 Apr 2011 00:53:37 +0200 (CEST) From: Ingo Flaschberger X-X-Sender: if@filebunker.xip.at To: freebsd-net@freebsd.org In-Reply-To: Message-ID: References: User-Agent: Alpine 2.00 (LRH 1167 2008-08-23) MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="168430090-2014229598-1303080817=:8693" Subject: Re: Routing enhancement - reduce routing table locking X-BeenThere: freebsd-net@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Networking and TCP/IP with FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 17 Apr 2011 23:00:24 -0000 This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. --168430090-2014229598-1303080817=:8693 Content-Type: TEXT/PLAIN; format=flowed; charset=US-ASCII attached a new version of this patch with some improvements and bug-fixes. Test-Reports are welcome. Kind regards, Ingo Flaschberger --168430090-2014229598-1303080817=:8693 Content-Type: TEXT/PLAIN; charset=US-ASCII; name=rmlock_8.2_20110418.diff Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename=rmlock_8.2_20110418.diff ZGlmZiAtdSAtciAuLi9zcmNfb3JnXzguMl8yMDExMDMyOS9jb250cmliL2lw ZmlsdGVyL3JhZGl4LmMgLi9jb250cmliL2lwZmlsdGVyL3JhZGl4LmMNCi0t LSAuLi9zcmNfb3JnXzguMl8yMDExMDMyOS9jb250cmliL2lwZmlsdGVyL3Jh ZGl4LmMJMjAwOS0wOC0wMyAwODoxMzowNi4wMDAwMDAwMDAgKzAwMDANCisr KyAuL2NvbnRyaWIvaXBmaWx0ZXIvcmFkaXguYwkyMDExLTA0LTAzIDE2OjA4 OjI4LjAwMDAwMDAwMCArMDAwMA0KQEAgLTc1OSw5ICs3NTksMTAgQEANCiB9 DQogDQogc3RydWN0IHJhZGl4X25vZGUgKg0KLXJuX2RlbGV0ZSh2X2FyZywg bmV0bWFza19hcmcsIGhlYWQpDQorcm5fZGVsZXRlKHZfYXJnLCBuZXRtYXNr X2FyZywgaGVhZCwgcm4pDQogCXZvaWQgKnZfYXJnLCAqbmV0bWFza19hcmc7 DQogCXN0cnVjdCByYWRpeF9ub2RlX2hlYWQgKmhlYWQ7DQorCXN0cnVjdCBy YWRpeF9ub2RlICpybjsNCiB7DQogCXN0cnVjdCByYWRpeF9ub2RlICp0LCAq cCwgKngsICp0dDsNCiAJc3RydWN0IHJhZGl4X21hc2sgKm0sICpzYXZlZF9t LCAqKm1wOw0KQEAgLTEwNjksNyArMTA3MCw3IEBADQogCXN0cnVjdCByYWRp eF9ub2RlX2hlYWQgKnJuaCA9IHA7DQogCXN0cnVjdCByYWRpeF9ub2RlICpk Ow0KIA0KLQlkID0gcm5oLT5ybmhfZGVsYWRkcihuLT5ybl9rZXksIE5VTEws IHJuaCk7DQorCWQgPSBybmgtPnJuaF9kZWxhZGRyKG4tPnJuX2tleSwgTlVM TCwgcm5oLCBOVUxMKTsNCiAJaWYgKGQgIT0gTlVMTCkgew0KIAkJRnJlZVMo ZCwgbWF4X2tleWxlbiArIDIgKiBzaXplb2YgKCpkKSk7DQogCX0NCmRpZmYg LXUgLXIgLi4vc3JjX29yZ184LjJfMjAxMTAzMjkvY29udHJpYi9pcGZpbHRl ci9yYWRpeF9pcGYuaCAuL2NvbnRyaWIvaXBmaWx0ZXIvcmFkaXhfaXBmLmgN Ci0tLSAuLi9zcmNfb3JnXzguMl8yMDExMDMyOS9jb250cmliL2lwZmlsdGVy L3JhZGl4X2lwZi5oCTIwMDktMDgtMDMgMDg6MTM6MDYuMDAwMDAwMDAwICsw MDAwDQorKysgLi9jb250cmliL2lwZmlsdGVyL3JhZGl4X2lwZi5oCTIwMTEt MDQtMTIgMTY6Mjc6MzEuMDAwMDAwMDAwICswMDAwDQpAQCAtMTMwLDcgKzEz MCw4IEBADQogCQlfX1AoKHZvaWQgKnYsIHZvaWQgKm1hc2ssDQogCQkgICAg IHN0cnVjdCByYWRpeF9ub2RlX2hlYWQgKmhlYWQsIHN0cnVjdCByYWRpeF9u b2RlIG5vZGVzW10pKTsNCiAJc3RydWN0CXJhZGl4X25vZGUgKigqcm5oX2Rl bGFkZHIpCS8qIHJlbW92ZSBiYXNlZCBvbiBzb2NrYWRkciAqLw0KLQkJX19Q KCh2b2lkICp2LCB2b2lkICptYXNrLCBzdHJ1Y3QgcmFkaXhfbm9kZV9oZWFk ICpoZWFkKSk7DQorCQlfX1AoKHZvaWQgKnYsIHZvaWQgKm1hc2ssIHN0cnVj dCByYWRpeF9ub2RlX2hlYWQgKmhlYWQsDQorCQkgICAgc3RydWN0IHJhZGl4 X25vZGUgKnJuKSk7DQogCXN0cnVjdAlyYWRpeF9ub2RlICooKnJuaF9kZWxw a3QpCS8qIHJlbW92ZSBiYXNlZCBvbiBwYWNrZXQgaGRyICovDQogCQlfX1Ao KHZvaWQgKnYsIHZvaWQgKm1hc2ssIHN0cnVjdCByYWRpeF9ub2RlX2hlYWQg KmhlYWQpKTsNCiAJc3RydWN0CXJhZGl4X25vZGUgKigqcm5oX21hdGNoYWRk cikJLyogbG9jYXRlIGJhc2VkIG9uIHNvY2thZGRyICovDQpAQCAtMjAyLDcg KzIwMyw4IEBADQogCSAqcm5fYWRkbWFzayBfX1AoKHZvaWQgKiwgaW50LCBp bnQpKSwNCiAJICpybl9hZGRyb3V0ZSBfX1AoKHZvaWQgKiwgdm9pZCAqLCBz dHJ1Y3QgcmFkaXhfbm9kZV9oZWFkICosDQogCQkJc3RydWN0IHJhZGl4X25v ZGUgWzJdKSksDQotCSAqcm5fZGVsZXRlIF9fUCgodm9pZCAqLCB2b2lkICos IHN0cnVjdCByYWRpeF9ub2RlX2hlYWQgKikpLA0KKwkgKnJuX2RlbGV0ZSBf X1AoKHZvaWQgKiwgdm9pZCAqLCBzdHJ1Y3QgcmFkaXhfbm9kZV9oZWFkICos DQorCSAgICAgIHN0cnVjdCByYWRpeF9ub2RlICopKSwNCiAJICpybl9pbnNl cnQgX19QKCh2b2lkICosIHN0cnVjdCByYWRpeF9ub2RlX2hlYWQgKiwgaW50 ICosDQogCQkJc3RydWN0IHJhZGl4X25vZGUgWzJdKSksDQogCSAqcm5fbG9v a3VwIF9fUCgodm9pZCAqLCB2b2lkICosIHN0cnVjdCByYWRpeF9ub2RlX2hl YWQgKikpLA0KZGlmZiAtdSAtciAuLi9zcmNfb3JnXzguMl8yMDExMDMyOS9z YmluL3JvdXRlZC9yYWRpeC5jIC4vc2Jpbi9yb3V0ZWQvcmFkaXguYw0KLS0t IC4uL3NyY19vcmdfOC4yXzIwMTEwMzI5L3NiaW4vcm91dGVkL3JhZGl4LmMJ MjAwOS0wOC0wMyAwODoxMzowNi4wMDAwMDAwMDAgKzAwMDANCisrKyAuL3Ni aW4vcm91dGVkL3JhZGl4LmMJMjAxMS0wNC0wMyAxNjowODowNy4wMDAwMDAw MDAgKzAwMDANCkBAIC02NjIsNyArNjYyLDggQEANCiBzdGF0aWMgc3RydWN0 IHJhZGl4X25vZGUgKg0KIHJuX2RlbGV0ZSh2b2lkICp2X2FyZywNCiAJICB2 b2lkICpuZXRtYXNrX2FyZywNCi0JICBzdHJ1Y3QgcmFkaXhfbm9kZV9oZWFk ICpoZWFkKQ0KKwkgIHN0cnVjdCByYWRpeF9ub2RlX2hlYWQgKmhlYWQsDQor CSAgc3RydWN0IHJhZGl4X25vZGUgKnJuKQ0KIHsNCiAJc3RydWN0IHJhZGl4 X25vZGUgKnQsICpwLCAqeCwgKnR0Ow0KIAlzdHJ1Y3QgcmFkaXhfbWFzayAq bSwgKnNhdmVkX20sICoqbXA7DQpAQCAtNjcwLDYgKzY3MSw4IEBADQogCWNh ZGRyX3QgdiwgbmV0bWFzazsNCiAJaW50IGIsIGhlYWRfb2ZmLCB2bGVuOw0K IA0KKwlybiA9IE5VTEw7IC8qIFhYWCBtYWtlIGNvbXBpbGVyIGhhcHB5ICov DQorDQogCXYgPSB2X2FyZzsNCiAJbmV0bWFzayA9IG5ldG1hc2tfYXJnOw0K IAl4ID0gaGVhZC0+cm5oX3RyZWV0b3A7DQpkaWZmIC11IC1yIC4uL3NyY19v cmdfOC4yXzIwMTEwMzI5L3NiaW4vcm91dGVkL3JhZGl4LmggLi9zYmluL3Jv dXRlZC9yYWRpeC5oDQotLS0gLi4vc3JjX29yZ184LjJfMjAxMTAzMjkvc2Jp bi9yb3V0ZWQvcmFkaXguaAkyMDA5LTA4LTAzIDA4OjEzOjA2LjAwMDAwMDAw MCArMDAwMA0KKysrIC4vc2Jpbi9yb3V0ZWQvcmFkaXguaAkyMDExLTA0LTEy IDE2OjI4OjA0LjAwMDAwMDAwMCArMDAwMA0KQEAgLTExNSw3ICsxMTUsOCBA QA0KIAkJKHZvaWQgKnYsIHZvaWQgKm1hc2ssDQogCQkgICAgIHN0cnVjdCBy YWRpeF9ub2RlX2hlYWQgKmhlYWQsIHN0cnVjdCByYWRpeF9ub2RlIG5vZGVz W10pOw0KIAlzdHJ1Y3QJcmFkaXhfbm9kZSAqKCpybmhfZGVsYWRkcikJLyog cmVtb3ZlIGJhc2VkIG9uIHNvY2thZGRyICovDQotCQkodm9pZCAqdiwgdm9p ZCAqbWFzaywgc3RydWN0IHJhZGl4X25vZGVfaGVhZCAqaGVhZCk7DQorCQko dm9pZCAqdiwgdm9pZCAqbWFzaywgc3RydWN0IHJhZGl4X25vZGVfaGVhZCAq aGVhZCwNCisJCSAgICAgc3RydWN0IHJhZGl4X25vZGUgKnJuKTsNCiAJc3Ry dWN0CXJhZGl4X25vZGUgKigqcm5oX2RlbHBrdCkJLyogcmVtb3ZlIGJhc2Vk IG9uIHBhY2tldCBoZHIgKi8NCiAJCSh2b2lkICp2LCB2b2lkICptYXNrLCBz dHJ1Y3QgcmFkaXhfbm9kZV9oZWFkICpoZWFkKTsNCiAJc3RydWN0CXJhZGl4 X25vZGUgKigqcm5oX21hdGNoYWRkcikJLyogbG9jYXRlIGJhc2VkIG9uIHNv Y2thZGRyICovDQpkaWZmIC11IC1yIC4uL3NyY19vcmdfOC4yXzIwMTEwMzI5 L3NiaW4vcm91dGVkL3RhYmxlLmMgLi9zYmluL3JvdXRlZC90YWJsZS5jDQot LS0gLi4vc3JjX29yZ184LjJfMjAxMTAzMjkvc2Jpbi9yb3V0ZWQvdGFibGUu YwkyMDA5LTA4LTAzIDA4OjEzOjA2LjAwMDAwMDAwMCArMDAwMA0KKysrIC4v c2Jpbi9yb3V0ZWQvdGFibGUuYwkyMDExLTA0LTAzIDE2OjA4OjA3LjAwMDAw MDAwMCArMDAwMA0KQEAgLTE4NjUsNyArMTg2NSw3IEBADQogCW1hc2tfc29j ay5zaW5fYWRkci5zX2FkZHIgPSBodG9ubChydC0+cnRfbWFzayk7DQogCW1h c2t0cmltKCZtYXNrX3NvY2spOw0KIAlpZiAocnQgIT0gKHN0cnVjdCBydF9l bnRyeSAqKXJoZWFkLT5ybmhfZGVsYWRkcigmZHN0X3NvY2ssICZtYXNrX3Nv Y2ssDQotCQkJCQkJCXJoZWFkKSkgew0KKwkJCQkJCQlyaGVhZCwgTlVMTCkp IHsNCiAJCW1zZ2xvZygicm5oX2RlbGFkZHIoKSBmYWlsZWQiKTsNCiAJfSBl bHNlIHsNCiAJCWZyZWUocnQpOw0KZGlmZiAtdSAtciAuLi9zcmNfb3JnXzgu Ml8yMDExMDMyOS9zeXMvY29udHJpYi9pcGZpbHRlci9uZXRpbmV0L2lwX3Bv b2wuYyAuL3N5cy9jb250cmliL2lwZmlsdGVyL25ldGluZXQvaXBfcG9vbC5j DQotLS0gLi4vc3JjX29yZ184LjJfMjAxMTAzMjkvc3lzL2NvbnRyaWIvaXBm aWx0ZXIvbmV0aW5ldC9pcF9wb29sLmMJMjAwNy0xMC0xOCAyMTo0MjozOC4w MDAwMDAwMDAgKzAwMDANCisrKyAuL3N5cy9jb250cmliL2lwZmlsdGVyL25l dGluZXQvaXBfcG9vbC5jCTIwMTEtMDQtMDMgMTY6MDc6NDYuMDAwMDAwMDAw ICswMDAwDQpAQCAtNjcsNiArNjcsNyBAQA0KICNpbmNsdWRlICJuZXRpbmV0 L2lwX2NvbXBhdC5oIg0KICNpbmNsdWRlICJuZXRpbmV0L2lwX2ZpbC5oIg0K ICNpbmNsdWRlICJuZXRpbmV0L2lwX3Bvb2wuaCINCisjaW5jbHVkZSA8c3lz L3JtbG9jay5oPg0KIA0KICNpZiBkZWZpbmVkKElQRklMVEVSX0xPT0tVUCkg JiYgZGVmaW5lZChfS0VSTkVMKSAmJiBcDQogICAgICAgKChCU0QgPj0gMTk4 OTExKSAmJiAhZGVmaW5lZChfX29zZl9fKSAmJiBcDQpAQCAtNjIwLDcgKzYy MSw3IEBADQogDQogCVJBRElYX05PREVfSEVBRF9MT0NLKGlwby0+aXBvX2hl YWQpOw0KIAlpcG8tPmlwb19oZWFkLT5ybmhfZGVsYWRkcigmaXBlLT5pcG5f YWRkciwgJmlwZS0+aXBuX21hc2ssDQotCQkJCSAgIGlwby0+aXBvX2hlYWQp Ow0KKwkJCQkgICBpcG8tPmlwb19oZWFkLCBOVUxMKTsNCiAJUkFESVhfTk9E RV9IRUFEX1VOTE9DSyhpcG8tPmlwb19oZWFkKTsNCiANCiAJaXBfcG9vbF9u b2RlX2RlcmVmKGlwZSk7DQpAQCAtNzUxLDcgKzc1Miw3IEBADQogCVJBRElY X05PREVfSEVBRF9MT0NLKGlwby0+aXBvX2hlYWQpOw0KIAl3aGlsZSAoKG4g PSBpcG8tPmlwb19saXN0KSAhPSBOVUxMKSB7DQogCQlpcG8tPmlwb19oZWFk LT5ybmhfZGVsYWRkcigmbi0+aXBuX2FkZHIsICZuLT5pcG5fbWFzaywNCi0J CQkJCSAgIGlwby0+aXBvX2hlYWQpOw0KKwkJCQkJICAgaXBvLT5pcG9faGVh ZCwgTlVMTCk7DQogDQogCQkqbi0+aXBuX3BuZXh0ID0gbi0+aXBuX25leHQ7 DQogCQlpZiAobi0+aXBuX25leHQpDQpAQCAtOTYzLDcgKzk2NCw3IEBADQog CXN0cnVjdCByYWRpeF9ub2RlX2hlYWQgKnJuaCA9IHA7DQogCXN0cnVjdCBy YWRpeF9ub2RlICpkOw0KIA0KLQlkID0gcm5oLT5ybmhfZGVsYWRkcihuLT5y bl9rZXksIE5VTEwsIHJuaCk7DQorCWQgPSBybmgtPnJuaF9kZWxhZGRyKG4t PnJuX2tleSwgTlVMTCwgcm5oLCBOVUxMKTsNCiAJaWYgKGQgIT0gTlVMTCkg ew0KIAkJRnJlZVMoZCwgbWF4X2tleWxlbiArIDIgKiBzaXplb2YgKCpkKSk7 DQogCX0NCmRpZmYgLXUgLXIgLi4vc3JjX29yZ184LjJfMjAxMTAzMjkvc3lz L2NvbnRyaWIvcGYvbmV0L3BmLmMgLi9zeXMvY29udHJpYi9wZi9uZXQvcGYu Yw0KLS0tIC4uL3NyY19vcmdfOC4yXzIwMTEwMzI5L3N5cy9jb250cmliL3Bm L25ldC9wZi5jCTIwMTAtMDktMjAgMTc6MDM6MTAuMDAwMDAwMDAwICswMDAw DQorKysgLi9zeXMvY29udHJpYi9wZi9uZXQvcGYuYwkyMDExLTA0LTAzIDE2 OjA3OjQ2LjAwMDAwMDAwMCArMDAwMA0KQEAgLTk5LDkgKzk5LDcgQEANCiAj aW5jbHVkZSA8bmV0L2lmX3R5cGVzLmg+DQogI2luY2x1ZGUgPG5ldC9icGYu aD4NCiAjaW5jbHVkZSA8bmV0L3JvdXRlLmg+DQotI2lmbmRlZiBfX0ZyZWVC U0RfXw0KICNpbmNsdWRlIDxuZXQvcmFkaXhfbXBhdGguaD4NCi0jZW5kaWYN CiANCiAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPg0KICNpbmNsdWRlIDxuZXRp bmV0L2luX3Zhci5oPg0KQEAgLTYxNjYsOSArNjE2NCw5IEBADQogCQkJaWYg KGtpZi0+cGZpa19pZnAgPT0gaWZwKQ0KIAkJCQlyZXQgPSAxOw0KICNpZmRl ZiBfX0ZyZWVCU0RfXyAvKiBNVUxUSVBBVEhfUk9VVElORyAqLw0KLQkJCXJu ID0gTlVMTDsNCi0jZWxzZQ0KIAkJCXJuID0gcm5fbXBhdGhfbmV4dChybik7 DQorI2Vsc2UNCisJCQlybiA9IHJuX21wYXRoX25leHQocm4sIDApOw0KICNl bmRpZg0KIAkJfSB3aGlsZSAoY2hlY2tfbXBhdGggPT0gMSAmJiBybiAhPSBO VUxMICYmIHJldCA9PSAwKTsNCiAJfSBlbHNlDQpkaWZmIC11IC1yIC4uL3Ny Y19vcmdfOC4yXzIwMTEwMzI5L3N5cy9jb250cmliL3BmL25ldC9wZl90YWJs ZS5jIC4vc3lzL2NvbnRyaWIvcGYvbmV0L3BmX3RhYmxlLmMNCi0tLSAuLi9z cmNfb3JnXzguMl8yMDExMDMyOS9zeXMvY29udHJpYi9wZi9uZXQvcGZfdGFi bGUuYwkyMDA5LTA4LTAzIDA4OjEzOjA2LjAwMDAwMDAwMCArMDAwMA0KKysr IC4vc3lzL2NvbnRyaWIvcGYvbmV0L3BmX3RhYmxlLmMJMjAxMS0wNC0wMyAx NjowNzo0Ni4wMDAwMDAwMDAgKzAwMDANCkBAIC00NCw3ICs0NCw3IEBADQog I2luY2x1ZGUgPHN5cy9tYnVmLmg+DQogI2luY2x1ZGUgPHN5cy9rZXJuZWwu aD4NCiAjaW5jbHVkZSA8c3lzL2xvY2suaD4NCi0jaW5jbHVkZSA8c3lzL3J3 bG9jay5oPg0KKyNpbmNsdWRlIDxzeXMvcm1sb2NrLmg+DQogI2lmZGVmIF9f RnJlZUJTRF9fDQogI2luY2x1ZGUgPHN5cy9tYWxsb2MuaD4NCiAjZW5kaWYN CkBAIC0xMTE0LDE3ICsxMTE0LDkgQEANCiAjZW5kaWYNCiAJaWYgKEtFTlRS WV9ORVRXT1JLKGtlKSkgew0KIAkJcGZyX3ByZXBhcmVfbmV0d29yaygmbWFz aywga2UtPnBmcmtlX2FmLCBrZS0+cGZya2VfbmV0KTsNCi0jaWZkZWYgX19G cmVlQlNEX18NCi0JCXJuID0gcm5fZGVsZXRlKCZrZS0+cGZya2Vfc2EsICZt YXNrLCBoZWFkKTsNCi0jZWxzZQ0KIAkJcm4gPSBybl9kZWxldGUoJmtlLT5w ZnJrZV9zYSwgJm1hc2ssIGhlYWQsIE5VTEwpOw0KLSNlbmRpZg0KIAl9IGVs c2UNCi0jaWZkZWYgX19GcmVlQlNEX18NCi0JCXJuID0gcm5fZGVsZXRlKCZr ZS0+cGZya2Vfc2EsIE5VTEwsIGhlYWQpOw0KLSNlbHNlDQogCQlybiA9IHJu X2RlbGV0ZSgma2UtPnBmcmtlX3NhLCBOVUxMLCBoZWFkLCBOVUxMKTsNCi0j ZW5kaWYNCiAJc3BseChzKTsNCiANCiAJaWYgKHJuID09IE5VTEwpIHsNCmRp ZmYgLXUgLXIgLi4vc3JjX29yZ184LjJfMjAxMTAzMjkvc3lzL2tlcm4vc3Vi cl93aXRuZXNzLmMgLi9zeXMva2Vybi9zdWJyX3dpdG5lc3MuYw0KLS0tIC4u L3NyY19vcmdfOC4yXzIwMTEwMzI5L3N5cy9rZXJuL3N1YnJfd2l0bmVzcy5j CTIwMTEtMDMtMjggMTU6MjY6NDguMDAwMDAwMDAwICswMDAwDQorKysgLi9z eXMva2Vybi9zdWJyX3dpdG5lc3MuYwkyMDExLTA0LTAzIDE2OjA3OjU0LjAw MDAwMDAwMCArMDAwMA0KQEAgLTUwOCw3ICs1MDgsNyBAQA0KIAkgKiBSb3V0 aW5nDQogCSAqLw0KIAl7ICJzb19yY3YiLCAmbG9ja19jbGFzc19tdHhfc2xl ZXAgfSwNCi0JeyAicmFkaXggbm9kZSBoZWFkIiwgJmxvY2tfY2xhc3Nfcncg fSwNCisJeyAicmFkaXggbm9kZSBoZWFkIiwgJmxvY2tfY2xhc3Nfcm0gfSwN CiAJeyAicnRlbnRyeSIsICZsb2NrX2NsYXNzX210eF9zbGVlcCB9LA0KIAl7 ICJpZmFkZHIiLCAmbG9ja19jbGFzc19tdHhfc2xlZXAgfSwNCiAJeyBOVUxM LCBOVUxMIH0sDQpkaWZmIC11IC1yIC4uL3NyY19vcmdfOC4yXzIwMTEwMzI5 L3N5cy9rZXJuL3Zmc19leHBvcnQuYyAuL3N5cy9rZXJuL3Zmc19leHBvcnQu Yw0KLS0tIC4uL3NyY19vcmdfOC4yXzIwMTEwMzI5L3N5cy9rZXJuL3Zmc19l eHBvcnQuYwkyMDA5LTEwLTAxIDEzOjExOjQ1LjAwMDAwMDAwMCArMDAwMA0K KysrIC4vc3lzL2tlcm4vdmZzX2V4cG9ydC5jCTIwMTEtMDQtMDMgMTY6MDc6 NTQuMDAwMDAwMDAwICswMDAwDQpAQCAtNDMsNiArNDMsNyBAQA0KICNpbmNs dWRlIDxzeXMvamFpbC5oPg0KICNpbmNsdWRlIDxzeXMva2VybmVsLmg+DQog I2luY2x1ZGUgPHN5cy9sb2NrLmg+DQorI2luY2x1ZGUgPHN5cy9ybWxvY2su aD4NCiAjaW5jbHVkZSA8c3lzL21hbGxvYy5oPg0KICNpbmNsdWRlIDxzeXMv bWJ1Zi5oPg0KICNpbmNsdWRlIDxzeXMvbW91bnQuaD4NCkBAIC0yMjgsNyAr MjI5LDcgQEANCiAJc3RydWN0IHJhZGl4X25vZGVfaGVhZCAqcm5oID0gKHN0 cnVjdCByYWRpeF9ub2RlX2hlYWQgKikgdzsNCiAJc3RydWN0IHVjcmVkICpj cmVkOw0KIA0KLQkoKnJuaC0+cm5oX2RlbGFkZHIpIChybi0+cm5fa2V5LCBy bi0+cm5fbWFzaywgcm5oKTsNCisJKCpybmgtPnJuaF9kZWxhZGRyKSAocm4t PnJuX2tleSwgcm4tPnJuX21hc2ssIHJuaCwgTlVMTCk7DQogCWNyZWQgPSAo KHN0cnVjdCBuZXRjcmVkICopcm4pLT5uZXRjX2Fub247DQogCWlmIChjcmVk ICE9IE5VTEwpDQogCQljcmZyZWUoY3JlZCk7DQpAQCAtNDI3LDYgKzQyOCw3 IEBADQogCXJlZ2lzdGVyIHN0cnVjdCBuZXRjcmVkICpucDsNCiAJcmVnaXN0 ZXIgc3RydWN0IHJhZGl4X25vZGVfaGVhZCAqcm5oOw0KIAlzdHJ1Y3Qgc29j a2FkZHIgKnNhZGRyOw0KKwlzdHJ1Y3Qgcm1fcHJpb3RyYWNrZXIgdHJhY2tl cjsNCiANCiAJbmVwID0gbXAtPm1udF9leHBvcnQ7DQogCWlmIChuZXAgPT0g TlVMTCkNCkBAIC00NDAsMTAgKzQ0MiwxMCBAQA0KIAkJCXNhZGRyID0gbmFt Ow0KIAkJCXJuaCA9IG5lcC0+bmVfcnRhYmxlW3NhZGRyLT5zYV9mYW1pbHld Ow0KIAkJCWlmIChybmggIT0gTlVMTCkgew0KLQkJCQlSQURJWF9OT0RFX0hF QURfUkxPQ0socm5oKTsNCisJCQkJUkFESVhfTk9ERV9IRUFEX1JMT0NLKHJu aCwgJnRyYWNrZXIpOw0KIAkJCQlucCA9IChzdHJ1Y3QgbmV0Y3JlZCAqKQ0K IAkJCQkgICAgKCpybmgtPnJuaF9tYXRjaGFkZHIpKHNhZGRyLCBybmgpOw0K LQkJCQlSQURJWF9OT0RFX0hFQURfUlVOTE9DSyhybmgpOw0KKwkJCQlSQURJ WF9OT0RFX0hFQURfUlVOTE9DSyhybmgsICZ0cmFja2VyKTsNCiAJCQkJaWYg KG5wICYmIG5wLT5uZXRjX3Jub2Rlcy0+cm5fZmxhZ3MgJiBSTkZfUk9PVCkN CiAJCQkJCW5wID0gTlVMTDsNCiAJCQl9DQpkaWZmIC11IC1yIC4uL3NyY19v cmdfOC4yXzIwMTEwMzI5L3N5cy9uZXQvaWYuYyAuL3N5cy9uZXQvaWYuYw0K LS0tIC4uL3NyY19vcmdfOC4yXzIwMTEwMzI5L3N5cy9uZXQvaWYuYwkyMDEx LTA0LTA2IDE4OjAzOjQ5LjAwMDAwMDAwMCArMDAwMA0KKysrIC4vc3lzL25l dC9pZi5jCTIwMTEtMDQtMTIgMTY6MjE6MDUuMDAwMDAwMDAwICswMDAwDQpA QCAtNDksNiArNDksNyBAQA0KICNpbmNsdWRlIDxzeXMvcHJvdG9zdy5oPg0K ICNpbmNsdWRlIDxzeXMva2VybmVsLmg+DQogI2luY2x1ZGUgPHN5cy9sb2Nr Lmg+DQorI2luY2x1ZGUgPHN5cy9ybWxvY2suaD4NCiAjaW5jbHVkZSA8c3lz L3JlZmNvdW50Lmg+DQogI2luY2x1ZGUgPHN5cy9tb2R1bGUuaD4NCiAjaW5j bHVkZSA8c3lzL3J3bG9jay5oPg0KZGlmZiAtdSAtciAuLi9zcmNfb3JnXzgu Ml8yMDExMDMyOS9zeXMvbmV0L3BmaWwuYyAuL3N5cy9uZXQvcGZpbC5jDQot LS0gLi4vc3JjX29yZ184LjJfMjAxMTAzMjkvc3lzL25ldC9wZmlsLmMJMjAx MC0wMi0wNyAwOTowMDoyMi4wMDAwMDAwMDAgKzAwMDANCisrKyAuL3N5cy9u ZXQvcGZpbC5jCTIwMTEtMDQtMDMgMTY6MDc6NTcuMDAwMDAwMDAwICswMDAw DQpAQCAtMzksNyArMzksNiBAQA0KICNpbmNsdWRlIDxzeXMvc29ja2V0dmFy Lmg+DQogI2luY2x1ZGUgPHN5cy9zeXN0bS5oPg0KICNpbmNsdWRlIDxzeXMv Y29uZHZhci5oPg0KLSNpbmNsdWRlIDxzeXMvbG9jay5oPg0KICNpbmNsdWRl IDxzeXMvbXV0ZXguaD4NCiAjaW5jbHVkZSA8c3lzL3Byb2MuaD4NCiAjaW5j bHVkZSA8c3lzL3F1ZXVlLmg+DQpkaWZmIC11IC1yIC4uL3NyY19vcmdfOC4y XzIwMTEwMzI5L3N5cy9uZXQvcmFkaXguYyAuL3N5cy9uZXQvcmFkaXguYw0K LS0tIC4uL3NyY19vcmdfOC4yXzIwMTEwMzI5L3N5cy9uZXQvcmFkaXguYwky MDEwLTA0LTAyIDA1OjAyOjUwLjAwMDAwMDAwMCArMDAwMA0KKysrIC4vc3lz L25ldC9yYWRpeC5jCTIwMTEtMDQtMDMgMTY6MDc6NTcuMDAwMDAwMDAwICsw MDAwDQpAQCAtNDEsNiArNDEsNyBAQA0KICNpbmNsdWRlIDxzeXMvc3lzdG0u aD4NCiAjaW5jbHVkZSA8c3lzL21hbGxvYy5oPg0KICNpbmNsdWRlIDxzeXMv c3lzbG9nLmg+DQorI2luY2x1ZGUgPHN5cy9ybWxvY2suaD4NCiAjaW5jbHVk ZSA8bmV0L3JhZGl4Lmg+DQogI2luY2x1ZGUgIm9wdF9tcGF0aC5oIg0KICNp ZmRlZiBSQURJWF9NUEFUSA0KQEAgLTYxNCw3ICs2MTUsNyBAQA0KIAlzdHJ1 Y3QgcmFkaXhfbm9kZSB0cmVlbm9kZXNbMl07DQogew0KIAljYWRkcl90IHYg PSAoY2FkZHJfdCl2X2FyZywgbmV0bWFzayA9IChjYWRkcl90KW5fYXJnOw0K LQlyZWdpc3RlciBzdHJ1Y3QgcmFkaXhfbm9kZSAqdCwgKnggPSAwLCAqdHQ7 DQorCXJlZ2lzdGVyIHN0cnVjdCByYWRpeF9ub2RlICp0LCAqeCA9IDAsICp4 eCA9IDAsICp0dDsNCiAJc3RydWN0IHJhZGl4X25vZGUgKnNhdmVkX3R0LCAq dG9wID0gaGVhZC0+cm5oX3RyZWV0b3A7DQogCXNob3J0IGIgPSAwLCBiX2xl YWYgPSAwOw0KIAlpbnQga2V5ZHVwbGljYXRlZDsNCkBAIC03MjMsMTIgKzcy NCwxOSBAQA0KIAkJeCA9IHQtPnJuX3JpZ2h0Ow0KIAkvKiBQcm9tb3RlIGdl bmVyYWwgcm91dGVzIGZyb20gYmVsb3cgKi8NCiAJaWYgKHgtPnJuX2JpdCA8 IDApIHsNCi0JICAgIGZvciAobXAgPSAmdC0+cm5fbWtsaXN0OyB4OyB4ID0g eC0+cm5fZHVwZWRrZXkpDQorICAgICAgICAgICAgZm9yIChtcCA9ICZ0LT5y bl9ta2xpc3Q7IHg7IHh4ID0geCwgeCA9IHgtPnJuX2R1cGVka2V5KSB7DQor ICAgICAgICAgICAgICAgIGlmICh4eCAmJiB4eC0+cm5fbWtsaXN0ICYmIHh4 LT5ybl9tYXNrID09IHgtPnJuX21hc2sgJiYNCisJCQkJeC0+cm5fbWtsaXN0 ID09IDApIHsNCisJCQkvKiBtdWx0aXBhdGggcm91dGUsIGJ1bXAgcmVmY291 bnQgb24gZmlyc3QgbWtsaXN0ICovDQorCQkJeC0+cm5fbWtsaXN0ID0geHgt PnJuX21rbGlzdDsNCisJCQl4LT5ybl9ta2xpc3QtPnJtX3JlZnMrKzsNCisJ CX0NCiAJCWlmICh4LT5ybl9tYXNrICYmICh4LT5ybl9iaXQgPj0gYl9sZWFm KSAmJiB4LT5ybl9ta2xpc3QgPT0gMCkgew0KIAkJCSptcCA9IG0gPSBybl9u ZXdfcmFkaXhfbWFzayh4LCAwKTsNCiAJCQlpZiAobSkNCiAJCQkJbXAgPSAm bS0+cm1fbWtsaXN0Ow0KIAkJfQ0KKwkgICAgfQ0KIAl9IGVsc2UgaWYgKHgt PnJuX21rbGlzdCkgew0KIAkJLyoNCiAJCSAqIFNraXAgb3ZlciBtYXNrcyB3 aG9zZSBpbmRleCBpcyA+IHRoYXQgb2YgbmV3IG5vZGUNCkBAIC03NjAsMTEg Kzc2OCwzMCBAQA0KIAkJCWJyZWFrOw0KIAkJaWYgKG0tPnJtX2ZsYWdzICYg Uk5GX05PUk1BTCkgew0KIAkJCW1tYXNrID0gbS0+cm1fbGVhZi0+cm5fbWFz azsNCi0JCQlpZiAodHQtPnJuX2ZsYWdzICYgUk5GX05PUk1BTCkgew0KLSNp ZiAhZGVmaW5lZChSQURJWF9NUEFUSCkNCi0JCQkgICAgbG9nKExPR19FUlIs DQotCQkJICAgICAgICAiTm9uLXVuaXF1ZSBub3JtYWwgcm91dGUsIG1hc2sg bm90IGVudGVyZWRcbiIpOw0KKwkJCWlmIChrZXlkdXBsaWNhdGVkKSB7DQor CQkJCWlmIChtLT5ybV9sZWFmLT5ybl9wYXJlbnQgPT0gdHQpDQorCQkJCQkv KiBuZXcgcm91dGUgaXMgYmV0dHRlciAqLw0KKwkJCQkJbS0+cm1fbGVhZiA9 IHR0Ow0KKyNpZmRlZiBESUFHTk9TVElDDQorCQkJCWVsc2Ugew0KKwkJCQkJ Zm9yICh0ID0gbS0+cm1fbGVhZjsgdDsNCisJCQkJCQl0ID0gdC0+cm5fZHVw ZWRrZXkpIHsNCisJCQkJCQlicmVhazsNCisJCQkJCX0NCisJCQkJCWlmICh0 ID09IE5VTEwpIHsNCisJCQkJCQlsb2coTE9HX0VSUiwgIk5vbi11bmlxdWUg Ig0KKwkJCQkJCQkibm9ybWFsIHJvdXRlIG9uIGR1cGVka2V5LCAiDQorCQkJ CQkJCSJtYXNrIG5vdCBlbnRlcmVkXG4iKTsNCisJCQkJCQlyZXR1cm4gdHQ7 DQorCQkJCQl9DQorCQkJCX0NCiAjZW5kaWYNCisJCQkJbS0+cm1fcmVmcysr Ow0KKwkJCQl0dC0+cm5fbWtsaXN0ID0gbTsNCisJCQkJcmV0dXJuIHR0Ow0K KwkJCX0gZWxzZSBpZiAodHQtPnJuX2ZsYWdzICYgUk5GX05PUk1BTCkgew0K KwkJCQlsb2coTE9HX0VSUiwgIk5vbi11bmlxdWUgbm9ybWFsIHJvdXRlLCIN CisJCQkJCSIgbWFzayBub3QgZW50ZXJlZFxuIik7DQogCQkJCXJldHVybiB0 dDsNCiAJCQl9DQogCQl9IGVsc2UNCkBAIC03ODMsOSArODEwLDEwIEBADQog fQ0KIA0KIHN0cnVjdCByYWRpeF9ub2RlICoNCi1ybl9kZWxldGUodl9hcmcs IG5ldG1hc2tfYXJnLCBoZWFkKQ0KK3JuX2RlbGV0ZSh2X2FyZywgbmV0bWFz a19hcmcsIGhlYWQsIHJuKQ0KIAl2b2lkICp2X2FyZywgKm5ldG1hc2tfYXJn Ow0KIAlzdHJ1Y3QgcmFkaXhfbm9kZV9oZWFkICpoZWFkOw0KKwlzdHJ1Y3Qg cmFkaXhfbm9kZSAqcm47DQogew0KIAlyZWdpc3RlciBzdHJ1Y3QgcmFkaXhf bm9kZSAqdCwgKnAsICp4LCAqdHQ7DQogCXN0cnVjdCByYWRpeF9tYXNrICpt LCAqc2F2ZWRfbSwgKiptcDsNCkBAIC04MTUsMTMgKzg0MywzNyBAQA0KIAkJ CWlmICgodHQgPSB0dC0+cm5fZHVwZWRrZXkpID09IDApDQogCQkJCXJldHVy biAoMCk7DQogCX0NCisjaWZkZWYgUkFESVhfTVBBVEgNCisJaWYgKHJuKSB7 DQorCQl3aGlsZSAodHQgIT0gcm4pDQorCQkJaWYgKCh0dCA9IHR0LT5ybl9k dXBlZGtleSkgPT0gMCkNCisJCQkJcmV0dXJuICgwKTsNCisJfQ0KKyNlbmRp Zg0KIAlpZiAodHQtPnJuX21hc2sgPT0gMCB8fCAoc2F2ZWRfbSA9IG0gPSB0 dC0+cm5fbWtsaXN0KSA9PSAwKQ0KIAkJZ290byBvbjE7DQogCWlmICh0dC0+ cm5fZmxhZ3MgJiBSTkZfTk9STUFMKSB7DQotCQlpZiAobS0+cm1fbGVhZiAh PSB0dCB8fCBtLT5ybV9yZWZzID4gMCkgew0KKwkJaWYgKG0tPnJtX2xlYWYg IT0gdHQgJiYgbS0+cm1fcmVmcyA9PSAwKSB7DQogCQkJbG9nKExPR19FUlIs ICJybl9kZWxldGU6IGluY29uc2lzdGVudCBhbm5vdGF0aW9uXG4iKTsNCiAJ CQlyZXR1cm4gMDsgIC8qIGRhbmdsaW5nIHJlZiBjb3VsZCBjYXVzZSBkaXNh c3RlciAqLw0KIAkJfQ0KKwkJaWYgKG0tPnJtX2xlYWYgIT0gdHQpIHsNCisJ CQlpZiAoLS1tLT5ybV9yZWZzID49IDApDQorCQkJCWdvdG8gb24xOw0KKwkJ fQ0KKwkJLyogdHQgaXMgY3VycmVudGx5IHRoZSBoZWFkIG9mIHRoZSBwb3Nz aWJsZSBtdWx0aXBhdGggY2hhaW4gKi8NCisJCWlmIChtLT5ybV9yZWZzID4g MCkgew0KKwkJCWlmICh0dC0+cm5fZHVwZWRrZXkgPT0gTlVMTCB8fA0KKwkJ CQl0dC0+cm5fZHVwZWRrZXktPnJuX21rbGlzdCAhPSBtKSB7DQorCQkJCQls b2coTE9HX0VSUiwgInJuX2RlbGV0ZTogaW5jb25zaXN0ZW50ICINCisJCQkJ CQkiZHVwZWRrZXkgbGlzdFxuIik7DQorCQkJCQlyZXR1cm4gKDApOw0KKwkJ CX0NCisJCQltLT5ybV9sZWFmID0gdHQtPnJuX2R1cGVka2V5Ow0KKwkJCS0t bS0+cm1fcmVmczsNCisJCQlnb3RvIG9uMTsNCisJCX0NCisJCS8qIGVsc2Ug dHQgaXMgbGFzdCBhbmQgb25seSByb3V0ZSAqLw0KIAl9IGVsc2Ugew0KIAkJ aWYgKG0tPnJtX21hc2sgIT0gdHQtPnJuX21hc2spIHsNCiAJCQlsb2coTE9H X0VSUiwgInJuX2RlbGV0ZTogaW5jb25zaXN0ZW50IGFubm90YXRpb25cbiIp Ow0KQEAgLTg3NSwxNSArOTI3LDEwIEBADQogCQkJZWxzZQ0KIAkJCQl0LT5y bl9yaWdodCA9IHg7DQogCQl9IGVsc2Ugew0KLQkJCS8qIGZpbmQgbm9kZSBp biBmcm9udCBvZiB0dCBvbiB0aGUgY2hhaW4gKi8NCi0JCQlmb3IgKHggPSBw ID0gc2F2ZWRfdHQ7IHAgJiYgcC0+cm5fZHVwZWRrZXkgIT0gdHQ7KQ0KLQkJ CQlwID0gcC0+cm5fZHVwZWRrZXk7DQotCQkJaWYgKHApIHsNCi0JCQkJcC0+ cm5fZHVwZWRrZXkgPSB0dC0+cm5fZHVwZWRrZXk7DQotCQkJCWlmICh0dC0+ cm5fZHVwZWRrZXkpCQkvKiBwYXJlbnQgKi8NCi0JCQkJCXR0LT5ybl9kdXBl ZGtleS0+cm5fcGFyZW50ID0gcDsNCi0JCQkJCQkJCS8qIHBhcmVudCAqLw0K LQkJCX0gZWxzZSBsb2coTE9HX0VSUiwgInJuX2RlbGV0ZTogY291bGRuJ3Qg ZmluZCB1c1xuIik7DQorCQkJeCA9IHNhdmVkX3R0Ow0KKwkJCXQtPnJuX2R1 cGVka2V5ID0gdHQtPnJuX2R1cGVka2V5Ow0KKwkJCWlmICh0dC0+cm5fZHVw ZWRrZXkpDQorCQkJCXR0LT5ybl9kdXBlZGtleS0+cm5fcGFyZW50ID0gdDsN CiAJCX0NCiAJCXQgPSB0dCArIDE7DQogCQlpZiAgKHQtPnJuX2ZsYWdzICYg Uk5GX0FDVElWRSkgew0KQEAgLTkzMSw4ICs5NzgsMTYgQEANCiAJCQkJaWYg KG0gPT0geC0+cm5fbWtsaXN0KSB7DQogCQkJCQlzdHJ1Y3QgcmFkaXhfbWFz ayAqbW0gPSBtLT5ybV9ta2xpc3Q7DQogCQkJCQl4LT5ybl9ta2xpc3QgPSAw Ow0KLQkJCQkJaWYgKC0tKG0tPnJtX3JlZnMpIDwgMCkNCisJCQkJCWlmICgt LShtLT5ybV9yZWZzKSA8IDApIHsNCiAJCQkJCQlNS0ZyZWUobSk7DQorCQkJ CQl9IGVsc2UgaWYgKG0tPnJtX2ZsYWdzICYgUk5GX05PUk1BTCkgew0KKwkJ CQkJCS8qDQorCQkJCQkJKiBkb24ndCBwcm9ncmVzcyBiZWNhdXNlIHRoaXMN CisJCQkJCQkqIGEgbXVsdGlwYXRoIHJvdXRlLiBOZXh0DQorCQkJCQkJKiBy b3V0ZSB3aWxsIHVzZSB0aGUgc2FtZSBtLg0KKwkJCQkJCSovDQorCQkJCQkJ bW0gPSBtOw0KKwkJCQkJfQ0KIAkJCQkJbSA9IG1tOw0KIAkJCQl9DQogCQkJ aWYgKG0pDQpkaWZmIC11IC1yIC4uL3NyY19vcmdfOC4yXzIwMTEwMzI5L3N5 cy9uZXQvcmFkaXguaCAuL3N5cy9uZXQvcmFkaXguaA0KLS0tIC4uL3NyY19v cmdfOC4yXzIwMTEwMzI5L3N5cy9uZXQvcmFkaXguaAkyMDEwLTAzLTIzIDA5 OjU4OjU5LjAwMDAwMDAwMCArMDAwMA0KKysrIC4vc3lzL25ldC9yYWRpeC5o CTIwMTEtMDQtMTIgMTY6Mjk6NDcuMDAwMDAwMDAwICswMDAwDQpAQCAtMzYs NyArMzYsNyBAQA0KICNpZmRlZiBfS0VSTkVMDQogI2luY2x1ZGUgPHN5cy9f bG9jay5oPg0KICNpbmNsdWRlIDxzeXMvX211dGV4Lmg+DQotI2luY2x1ZGUg PHN5cy9fcndsb2NrLmg+DQorI2luY2x1ZGUgPHN5cy9fcm1sb2NrLmg+DQog I2VuZGlmDQogDQogI2lmZGVmIE1BTExPQ19ERUNMQVJFDQpAQCAtMTE0LDcg KzExNCw4IEBADQogCQkodm9pZCAqdiwgdm9pZCAqbWFzaywNCiAJCSAgICAg c3RydWN0IHJhZGl4X25vZGVfaGVhZCAqaGVhZCwgc3RydWN0IHJhZGl4X25v ZGUgbm9kZXNbXSk7DQogCXN0cnVjdAlyYWRpeF9ub2RlICooKnJuaF9kZWxh ZGRyKQkvKiByZW1vdmUgYmFzZWQgb24gc29ja2FkZHIgKi8NCi0JCSh2b2lk ICp2LCB2b2lkICptYXNrLCBzdHJ1Y3QgcmFkaXhfbm9kZV9oZWFkICpoZWFk KTsNCisJCSh2b2lkICp2LCB2b2lkICptYXNrLCBzdHJ1Y3QgcmFkaXhfbm9k ZV9oZWFkICpoZWFkLA0KKwkJICAgICBzdHJ1Y3QgcmFkaXhfbm9kZSAqcm4p Ow0KIAlzdHJ1Y3QJcmFkaXhfbm9kZSAqKCpybmhfZGVscGt0KQkvKiByZW1v dmUgYmFzZWQgb24gcGFja2V0IGhkciAqLw0KIAkJKHZvaWQgKnYsIHZvaWQg Km1hc2ssIHN0cnVjdCByYWRpeF9ub2RlX2hlYWQgKmhlYWQpOw0KIAlzdHJ1 Y3QJcmFkaXhfbm9kZSAqKCpybmhfbWF0Y2hhZGRyKQkvKiBsb2NhdGUgYmFz ZWQgb24gc29ja2FkZHIgKi8NCkBAIC0xMzMsNyArMTM0LDcgQEANCiAJc3Ry dWN0CXJhZGl4X25vZGUgcm5oX25vZGVzWzNdOwkvKiBlbXB0eSB0cmVlIGZv ciBjb21tb24gY2FzZSAqLw0KIAlpbnQJcm5oX211bHRpcGF0aDsJCQkvKiBt dWx0aXBhdGggY2FwYWJsZSA/ICovDQogI2lmZGVmIF9LRVJORUwNCi0Jc3Ry dWN0CXJ3bG9jayBybmhfbG9jazsJCS8qIGxvY2tzIGVudGlyZSByYWRpeCB0 cmVlICovDQorCXN0cnVjdAlybWxvY2sgcm5oX2xvY2s7CQkvKiBsb2NrcyBl bnRpcmUgcmFkaXggdHJlZSAqLw0KICNlbmRpZg0KIH07DQogDQpAQCAtMTQ3 LDE3ICsxNDgsMTUgQEANCiAjZGVmaW5lIEZyZWUocCkgZnJlZSgoY2FkZHJf dClwLCBNX1JUQUJMRSk7DQogDQogI2RlZmluZQlSQURJWF9OT0RFX0hFQURf TE9DS19JTklUKHJuaCkJXA0KLSAgICByd19pbml0X2ZsYWdzKCYocm5oKS0+ cm5oX2xvY2ssICJyYWRpeCBub2RlIGhlYWQiLCAwKQ0KLSNkZWZpbmUJUkFE SVhfTk9ERV9IRUFEX0xPQ0socm5oKQlyd193bG9jaygmKHJuaCktPnJuaF9s b2NrKQ0KLSNkZWZpbmUJUkFESVhfTk9ERV9IRUFEX1VOTE9DSyhybmgpCXJ3 X3d1bmxvY2soJihybmgpLT5ybmhfbG9jaykNCi0jZGVmaW5lCVJBRElYX05P REVfSEVBRF9STE9DSyhybmgpCXJ3X3Jsb2NrKCYocm5oKS0+cm5oX2xvY2sp DQotI2RlZmluZQlSQURJWF9OT0RFX0hFQURfUlVOTE9DSyhybmgpCXJ3X3J1 bmxvY2soJihybmgpLT5ybmhfbG9jaykNCi0jZGVmaW5lCVJBRElYX05PREVf SEVBRF9MT0NLX1RSWV9VUEdSQURFKHJuaCkJcndfdHJ5X3VwZ3JhZGUoJihy bmgpLT5ybmhfbG9jaykNCi0NCi0NCi0jZGVmaW5lCVJBRElYX05PREVfSEVB RF9ERVNUUk9ZKHJuaCkJcndfZGVzdHJveSgmKHJuaCktPnJuaF9sb2NrKQ0K LSNkZWZpbmUJUkFESVhfTk9ERV9IRUFEX0xPQ0tfQVNTRVJUKHJuaCkgcndf YXNzZXJ0KCYocm5oKS0+cm5oX2xvY2ssIFJBX0xPQ0tFRCkNCi0jZGVmaW5l CVJBRElYX05PREVfSEVBRF9XTE9DS19BU1NFUlQocm5oKSByd19hc3NlcnQo JihybmgpLT5ybmhfbG9jaywgUkFfV0xPQ0tFRCkNCisJcm1faW5pdF9mbGFn cygmKHJuaCktPnJuaF9sb2NrLCAicmFkaXggbm9kZSBoZWFkIiwgMCkNCisj ZGVmaW5lICAgICAgICBSQURJWF9OT0RFX0hFQURfTE9DSyhybmgpICAgICAg IHJtX3dsb2NrKCYocm5oKS0+cm5oX2xvY2spDQorI2RlZmluZSAgICAgICAg UkFESVhfTk9ERV9IRUFEX1VOTE9DSyhybmgpICAgICBybV93dW5sb2NrKCYo cm5oKS0+cm5oX2xvY2spDQorI2RlZmluZSAgICAgICAgUkFESVhfTk9ERV9I RUFEX1JMT0NLKHJuaCwgdHJhY2tlcikgICAgIHJtX3Jsb2NrKCYocm5oKS0+ cm5oX2xvY2ssICh0cmFja2VyKSkNCisjZGVmaW5lICAgICAgICBSQURJWF9O T0RFX0hFQURfUlVOTE9DSyhybmgsIHRyYWNrZXIpICAgcm1fcnVubG9jaygm KHJuaCktPnJuaF9sb2NrLCAodHJhY2tlcikpDQorDQorI2RlZmluZSAgICAg ICAgUkFESVhfTk9ERV9IRUFEX0RFU1RST1kocm5oKSAgICBybV9kZXN0cm95 KCYocm5oKS0+cm5oX2xvY2spDQorI2RlZmluZSAgICAgICAgUkFESVhfTk9E RV9IRUFEX0xPQ0tfQVNTRVJUKHJuaCkgICAgICAgIHJtX3dvd25lZCgmKHJu aCktPnJuaF9sb2NrKQ0KKyNkZWZpbmUgICAgICAgIFJBRElYX05PREVfSEVB RF9XTE9DS19BU1NFUlQocm5oKSAgICAgICBybV93b3duZWQoJihybmgpLT5y bmhfbG9jaykNCiAjZW5kaWYgLyogX0tFUk5FTCAqLw0KIA0KIHZvaWQJIHJu X2luaXQoaW50KTsNCkBAIC0xNjgsNyArMTY3LDcgQEANCiAJICpybl9hZGRt YXNrKHZvaWQgKiwgaW50LCBpbnQpLA0KIAkgKnJuX2FkZHJvdXRlICh2b2lk ICosIHZvaWQgKiwgc3RydWN0IHJhZGl4X25vZGVfaGVhZCAqLA0KIAkJCXN0 cnVjdCByYWRpeF9ub2RlIFsyXSksDQotCSAqcm5fZGVsZXRlKHZvaWQgKiwg dm9pZCAqLCBzdHJ1Y3QgcmFkaXhfbm9kZV9oZWFkICopLA0KKwkgKnJuX2Rl bGV0ZSh2b2lkICosIHZvaWQgKiwgc3RydWN0IHJhZGl4X25vZGVfaGVhZCAq LCBzdHJ1Y3QgcmFkaXhfbm9kZSAqKSwNCiAJICpybl9sb29rdXAgKHZvaWQg KnZfYXJnLCB2b2lkICptX2FyZywNCiAJCSAgICAgICAgc3RydWN0IHJhZGl4 X25vZGVfaGVhZCAqaGVhZCksDQogCSAqcm5fbWF0Y2godm9pZCAqLCBzdHJ1 Y3QgcmFkaXhfbm9kZV9oZWFkICopOw0KZGlmZiAtdSAtciAuLi9zcmNfb3Jn XzguMl8yMDExMDMyOS9zeXMvbmV0L3JhZGl4X21wYXRoLmMgLi9zeXMvbmV0 L3JhZGl4X21wYXRoLmMNCi0tLSAuLi9zcmNfb3JnXzguMl8yMDExMDMyOS9z eXMvbmV0L3JhZGl4X21wYXRoLmMJMjAxMS0wNC0xMiAyMTozMTowOC4wMDAw MDAwMDAgKzAwMDANCisrKyAuL3N5cy9uZXQvcmFkaXhfbXBhdGguYwkyMDEx LTA0LTE1IDE3OjQwOjQzLjAwMDAwMDAwMCArMDAwMA0KQEAgLTQ1LDYgKzQ1 LDggQEANCiAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPg0KICNpbmNsdWRlIDxz eXMvZG9tYWluLmg+DQogI2luY2x1ZGUgPHN5cy9zeXNsb2cuaD4NCisjaW5j bHVkZSA8c3lzL2xvY2suaD4NCisjaW5jbHVkZSA8c3lzL3JtbG9jay5oPg0K ICNpbmNsdWRlIDxuZXQvcmFkaXguaD4NCiAjaW5jbHVkZSA8bmV0L3JhZGl4 X21wYXRoLmg+DQogI2luY2x1ZGUgPG5ldC9yb3V0ZS5oPg0KQEAgLTU0LDcg KzU2LDcgQEANCiAvKg0KICAqIGdpdmUgc29tZSBqaXR0ZXIgdG8gaGFzaCwg dG8gYXZvaWQgc3luY2hyb25pemF0aW9uIGJldHdlZW4gcm91dGVycw0KICAq Lw0KLXN0YXRpYyB1aW50MzJfdCBoYXNoaml0dGVyOw0KK3VpbnQzMl90IGhh c2hqaXR0ZXI7DQogDQogaW50DQogcm5fbXBhdGhfY2FwYWJsZShzdHJ1Y3Qg cmFkaXhfbm9kZV9oZWFkICpybmgpDQpAQCAtNzcsMjAgKzc5LDYgQEANCiAJ CXJldHVybiBOVUxMOw0KIH0NCiANCi11aW50MzJfdA0KLXJuX21wYXRoX2Nv dW50KHN0cnVjdCByYWRpeF9ub2RlICpybikNCi17DQotCXVpbnQzMl90IGkg PSAwOw0KLQlzdHJ1Y3QgcnRlbnRyeSAqcnQ7DQotCQ0KLQl3aGlsZSAocm4g IT0gTlVMTCkgew0KLQkJcnQgPSAoc3RydWN0IHJ0ZW50cnkgKilybjsNCi0J CWkgKz0gcnQtPnJ0X3JteC5ybXhfd2VpZ2h0Ow0KLQkJcm4gPSBybl9tcGF0 aF9uZXh0KHJuKTsNCi0JfQ0KLQlyZXR1cm4gKGkpOw0KLX0NCi0NCiBzdHJ1 Y3QgcnRlbnRyeSAqDQogcnRfbXBhdGhfbWF0Y2hnYXRlKHN0cnVjdCBydGVu dHJ5ICpydCwgc3RydWN0IHNvY2thZGRyICpnYXRlKQ0KIHsNCkBAIC0xMjUs MzMgKzExMyw2IEBADQogCXJldHVybiAoc3RydWN0IHJ0ZW50cnkgKilybjsN CiB9DQogDQotLyogDQotICogZ28gdGhyb3VnaCB0aGUgY2hhaW4gYW5kIHVu bGluayAicnQiIGZyb20gdGhlIGxpc3QNCi0gKiB0aGUgY2FsbGVyIHdpbGwg ZnJlZSAicnQiDQotICovDQotaW50DQotcnRfbXBhdGhfZGVsZHVwKHN0cnVj dCBydGVudHJ5ICpoZWFkcnQsIHN0cnVjdCBydGVudHJ5ICpydCkNCi17DQot ICAgICAgICBzdHJ1Y3QgcmFkaXhfbm9kZSAqdCwgKnR0Ow0KLQ0KLSAgICAg ICAgaWYgKCFoZWFkcnQgfHwgIXJ0KQ0KLSAgICAgICAgICAgIHJldHVybiAo MCk7DQotICAgICAgICB0ID0gKHN0cnVjdCByYWRpeF9ub2RlICopaGVhZHJ0 Ow0KLSAgICAgICAgdHQgPSBybl9tcGF0aF9uZXh0KHQpOw0KLSAgICAgICAg d2hpbGUgKHR0KSB7DQotICAgICAgICAgICAgaWYgKHR0ID09IChzdHJ1Y3Qg cmFkaXhfbm9kZSAqKXJ0KSB7DQotICAgICAgICAgICAgICAgIHQtPnJuX2R1 cGVka2V5ID0gdHQtPnJuX2R1cGVka2V5Ow0KLSAgICAgICAgICAgICAgICB0 dC0+cm5fZHVwZWRrZXkgPSBOVUxMOw0KLSAgICAJICAgICAgICB0dC0+cm5f ZmxhZ3MgJj0gflJORl9BQ1RJVkU7DQotCSAgICAgICAgdHRbMV0ucm5fZmxh Z3MgJj0gflJORl9BQ1RJVkU7DQotICAgICAgICAgICAgICAgIHJldHVybiAo MSk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIHQgPSB0dDsNCi0g ICAgICAgICAgICB0dCA9IHJuX21wYXRoX25leHQoKHN0cnVjdCByYWRpeF9u b2RlICopdCk7DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4gKDApOw0K LX0NCi0NCiAvKg0KICAqIGNoZWNrIGlmIHdlIGhhdmUgdGhlIHNhbWUga2V5 L21hc2svZ2F0ZXdheSBvbiB0aGUgdGFibGUgYWxyZWFkeS4NCiAgKi8NCkBA IC0yNjEsMTAgKzIyMiwyMSBAQA0KIHZvaWQNCiBydGFsbG9jX21wYXRoX2Zp YihzdHJ1Y3Qgcm91dGUgKnJvLCB1aW50MzJfdCBoYXNoLCB1X2ludCBmaWJu dW0pDQogew0KKwlydGFsbG9jX21wYXRoX2ZpYl9mbGFncyggcm8sIGhhc2gs IGZpYm51bSwgMCk7DQorfQ0KKw0KKy8qDQorICogZmxhZyBSVEZfR0FURVdB WSByZXR1cm5zIG9ubHkgaW50ZXJmYWNlIHJvdXRlcywNCisgKiBvbmx5IG9u ZSBpbnRlcmZhY2Utcm91dGUgaXMgcG9zc2libGUNCisgKi8NCit2b2lkDQor cnRhbGxvY19tcGF0aF9maWJfZmxhZ3Moc3RydWN0IHJvdXRlICpybywgdWlu dDMyX3QgaGFzaCwgdV9pbnQgZmlibnVtLCBpbnQgZmxhZ3MpDQorew0KIAlz dHJ1Y3QgcmFkaXhfbm9kZSAqcm4wLCAqcm47DQotCXVfaW50MzJfdCBuOw0K Kwl1X2ludDMyX3QgbiA9IDE7DQogCXN0cnVjdCBydGVudHJ5ICpydDsNCiAJ aW50NjRfdCB3ZWlnaHQ7DQorCWludDY0X3QgbG93ZXN0X3dlaWdodDsNCiAN CiAJLyoNCiAJICogWFhYIHdlIGRvbid0IGF0dGVtcHQgdG8gbG9va3VwIGNh Y2hlZCByb3V0ZSBhZ2Fpbjsgd2hhdCBzaG91bGQNCkBAIC0yODUsMjAgKzI1 NywzNSBAQA0KIA0KIAkvKiBiZXlvbmQgaGVyZSwgd2UgdXNlIHJuIGFzIHRo ZSBtYXN0ZXIgY29weSAqLw0KIAlybjAgPSBybiA9IChzdHJ1Y3QgcmFkaXhf bm9kZSAqKXJvLT5yb19ydDsNCi0JbiA9IHJuX21wYXRoX2NvdW50KHJuMCk7 DQorDQorCS8qIGZpbmQgbG93ZXN0IHdlaWdodCByb3V0ZSAqLw0KKwlmb3Ig KCBydCA9IChzdHJ1Y3QgcnRlbnRyeSAqKXJuLCB3ZWlnaHQgPSBydC0+cnRf cm14LnJteF93ZWlnaHQ7DQorCSAgICBybiAhPSBOVUxMOyBybiA9IHJuX21w YXRoX25leHQoIHJuKSkgew0KKwkJcnQgPSAoc3RydWN0IHJ0ZW50cnkgKily bjsNCisJCWlmICgocnQtPnJ0X2ZsYWdzICYgUlRGX1VQKSAmJiAhKHJ0LT5y dF9mbGFncyAmIGZsYWdzKSkgew0KKwkJCWlmIChmbGFncyAmIFJURl9HQVRF V0FZKSAvKiBzaG9ydGN1dCAqLw0KKwkJCQlnb3RvIGVuZDsJLyogb25seSAx IGludGVyZmFjZSByb3V0ZSBwb3NzaWJsZSEgKi8NCisJCQlpZiAod2VpZ2h0 ID4gcnQtPnJ0X3JteC5ybXhfd2VpZ2h0KSB7DQorCQkJCXdlaWdodCA9IHJ0 LT5ydF9ybXgucm14X3dlaWdodDsNCisJCQkJbiA9IDE7DQorCQkJfSBlbHNl IGlmICh3ZWlnaHQgPT0gcnQtPnJ0X3JteC5ybXhfd2VpZ2h0KQ0KKwkJCQlu Kys7DQorCQl9DQorCX0NCisJbG93ZXN0X3dlaWdodCA9IHdlaWdodDsNCiAN CiAJLyogZ3cgc2VsZWN0aW9uIGJ5IE1vZHVsby1OIEhhc2ggKFJGQzI5OTEp IFhYWCBuZWVkIGltcHJvdmVtZW50PyAqLw0KIAloYXNoICs9IGhhc2hqaXR0 ZXI7DQogCWhhc2ggJT0gbjsNCi0JZm9yICh3ZWlnaHQgPSBhYnMoKGludDMy X3QpaGFzaCksIHJ0ID0gcm8tPnJvX3J0Ow0KLQkgICAgIHdlaWdodCA+PSBy dC0+cnRfcm14LnJteF93ZWlnaHQgJiYgcm47IA0KLQkgICAgIHdlaWdodCAt PSBydC0+cnRfcm14LnJteF93ZWlnaHQpIHsNCi0JCQ0KLQkJLyogc3RheSB3 aXRoaW4gdGhlIG11bHRpcGF0aCByb3V0ZXMgKi8NCi0JCWlmIChybi0+cm5f ZHVwZWRrZXkgJiYgcm4tPnJuX21hc2sgIT0gcm4tPnJuX2R1cGVka2V5LT5y bl9tYXNrKQ0KLQkJCWJyZWFrOw0KLQkJcm4gPSBybi0+cm5fZHVwZWRrZXk7 DQorCWZvciAoIHJuID0gcm4wLCBuID0gMDsgcm4gIT0gTlVMTDsgcm4gPSBy bl9tcGF0aF9uZXh0KCBybikpIHsNCiAJCXJ0ID0gKHN0cnVjdCBydGVudHJ5 ICopcm47DQorCQlpZiAocnQtPnJ0X2ZsYWdzICYgUlRGX1VQKSB7DQorCQkJ aWYgKCBydC0+cnRfcm14LnJteF93ZWlnaHQgPT0gbG93ZXN0X3dlaWdodCkg ew0KKwkJCQlpZiAobiA9PSBoYXNoKQ0KKwkJCQkJYnJlYWs7DQorCQkJCW4r KzsNCisJCQl9DQorCQl9DQogCX0NCiAJLyogWFhYIHRyeSBmaWxsaW5nIHJ0 X2d3cm91dGUgYW5kIGF2b2lkIHVucmVhY2hhYmxlIGd3ICAqLw0KIA0KQEAg LTMwOCw2ICsyOTUsNyBAQA0KIAkJcm8tPnJvX3J0ID0gTlVMTDsNCiAJCXJl dHVybjsNCiAJfQ0KK2VuZDoNCiAJaWYgKHJvLT5yb19ydCAhPSBydCkgew0K IAkJUlRGUkVFX0xPQ0tFRChyby0+cm9fcnQpOw0KIAkJcm8tPnJvX3J0ID0g KHN0cnVjdCBydGVudHJ5ICopcm47DQpkaWZmIC11IC1yIC4uL3NyY19vcmdf OC4yXzIwMTEwMzI5L3N5cy9uZXQvcmFkaXhfbXBhdGguaCAuL3N5cy9uZXQv cmFkaXhfbXBhdGguaA0KLS0tIC4uL3NyY19vcmdfOC4yXzIwMTEwMzI5L3N5 cy9uZXQvcmFkaXhfbXBhdGguaAkyMDA5LTA4LTAzIDA4OjEzOjA2LjAwMDAw MDAwMCArMDAwMA0KKysrIC4vc3lzL25ldC9yYWRpeF9tcGF0aC5oCTIwMTEt MDQtMTUgMTc6Mzk6NTYuMDAwMDAwMDAwICswMDAwDQpAQCAtNDQsMTQgKzQ0 LDE1IEBADQogc3RydWN0IHJvdXRlOw0KIHN0cnVjdCBydGVudHJ5Ow0KIHN0 cnVjdCBzb2NrYWRkcjsNCitleHRlcm4gdWludDMyX3QgaGFzaGppdHRlcjsN CiBpbnQJcm5fbXBhdGhfY2FwYWJsZShzdHJ1Y3QgcmFkaXhfbm9kZV9oZWFk ICopOw0KIHN0cnVjdCByYWRpeF9ub2RlICpybl9tcGF0aF9uZXh0KHN0cnVj dCByYWRpeF9ub2RlICopOw0KLXVfaW50MzJfdCBybl9tcGF0aF9jb3VudChz dHJ1Y3QgcmFkaXhfbm9kZSAqKTsNCiBzdHJ1Y3QgcnRlbnRyeSAqcnRfbXBh dGhfbWF0Y2hnYXRlKHN0cnVjdCBydGVudHJ5ICosIHN0cnVjdCBzb2NrYWRk ciAqKTsNCiBpbnQgcnRfbXBhdGhfY29uZmxpY3Qoc3RydWN0IHJhZGl4X25v ZGVfaGVhZCAqLCBzdHJ1Y3QgcnRlbnRyeSAqLA0KICAgICBzdHJ1Y3Qgc29j a2FkZHIgKik7DQordm9pZCBydGFsbG9jX21wYXRoX2ZpYl9mbGFncyhzdHJ1 Y3Qgcm91dGUgKiwgdV9pbnQzMl90LCB1X2ludCwgaW50KTsNCiB2b2lkIHJ0 YWxsb2NfbXBhdGhfZmliKHN0cnVjdCByb3V0ZSAqLCB1X2ludDMyX3QsIHVf aW50KTsNCi0jZGVmaW5lIHJ0YWxsb2NfbXBhdGgoX3JvdXRlLCBfaGFzaCkg cnRhbGxvY19tcGF0aF9maWIoKF9yb3V0ZSksIChfaGFzaCksIDApDQorI2Rl ZmluZSBydGFsbG9jX21wYXRoKF9yb3V0ZSwgX2hhc2gpIHJ0YWxsb2NfbXBh dGhfZmliX2ZsYWdzKChfcm91dGUpLCAoX2hhc2gpLCAwLCAwKQ0KIHN0cnVj dCByYWRpeF9ub2RlICpybl9tcGF0aF9sb29rdXAodm9pZCAqLCB2b2lkICos DQogICAgIHN0cnVjdCByYWRpeF9ub2RlX2hlYWQgKik7DQogaW50IHJ0X21w YXRoX2RlbGR1cChzdHJ1Y3QgcnRlbnRyeSAqLCBzdHJ1Y3QgcnRlbnRyeSAq KTsNCmRpZmYgLXUgLXIgLi4vc3JjX29yZ184LjJfMjAxMTAzMjkvc3lzL25l dC9yb3V0ZS5jIC4vc3lzL25ldC9yb3V0ZS5jDQotLS0gLi4vc3JjX29yZ184 LjJfMjAxMTAzMjkvc3lzL25ldC9yb3V0ZS5jCTIwMTEtMDQtMTQgMTY6MDk6 NDAuMDAwMDAwMDAwICswMDAwDQorKysgLi9zeXMvbmV0L3JvdXRlLmMJMjAx MS0wNC0xNCAxNjoxNDoxOC4wMDAwMDAwMDAgKzAwMDANCkBAIC01MSw2ICs1 MSw4IEBADQogI2luY2x1ZGUgPHN5cy9wcm9jLmg+DQogI2luY2x1ZGUgPHN5 cy9kb21haW4uaD4NCiAjaW5jbHVkZSA8c3lzL2tlcm5lbC5oPg0KKyNpbmNs dWRlIDxzeXMvbG9jay5oPg0KKyNpbmNsdWRlIDxzeXMvcm1sb2NrLmg+DQog DQogI2luY2x1ZGUgPG5ldC9pZi5oPg0KICNpbmNsdWRlIDxuZXQvaWZfZGwu aD4NCkBAIC0zNDIsNiArMzQ0LDcgQEANCiAJc3RydWN0IHJhZGl4X25vZGUg KnJuOw0KIAlzdHJ1Y3QgcnRlbnRyeSAqbmV3cnQ7DQogCXN0cnVjdCBydF9h ZGRyaW5mbyBpbmZvOw0KKwlzdHJ1Y3Qgcm1fcHJpb3RyYWNrZXIgdHJhY2tl cjsNCiAJaW50IGVyciA9IDAsIG1zZ3R5cGUgPSBSVE1fTUlTUzsNCiAJaW50 IG5lZWRsb2NrOw0KIA0KQEAgLTM1OCwyNCArMzYxLDI2IEBADQogCQlnb3Rv IG1pc3M7DQogCX0NCiAJbmVlZGxvY2sgPSAhKGlnbmZsYWdzICYgUlRGX1JO SF9MT0NLRUQpOw0KLQlpZiAobmVlZGxvY2spDQotCQlSQURJWF9OT0RFX0hF QURfUkxPQ0socm5oKTsNCi0jaWZkZWYgSU5WQVJJQU5UUwkNCisJaWYgKG5l ZWRsb2NrKSAvKiBYWFggd2UgYWx3YXlzIG5lZWQgdGhlIGxvY2sgZm9yIG5v dyEgKi8NCisJCVJBRElYX05PREVfSEVBRF9MT0NLKHJuaCk7DQogCWVsc2UN Ci0JCVJBRElYX05PREVfSEVBRF9MT0NLX0FTU0VSVChybmgpOw0KLSNlbmRp Zg0KKwkJUkFESVhfTk9ERV9IRUFEX1JMT0NLKHJuaCwgJnRyYWNrZXIpOw0K IAlybiA9IHJuaC0+cm5oX21hdGNoYWRkcihkc3QsIHJuaCk7DQogCWlmIChy biAmJiAoKHJuLT5ybl9mbGFncyAmIFJORl9ST09UKSA9PSAwKSkgew0KIAkJ bmV3cnQgPSBydCA9IFJOVE9SVChybik7DQogCQlSVF9MT0NLKG5ld3J0KTsN CiAJCVJUX0FERFJFRihuZXdydCk7DQotCQlpZiAobmVlZGxvY2spDQotCQkJ UkFESVhfTk9ERV9IRUFEX1JVTkxPQ0socm5oKTsNCisJCWlmIChuZWVkbG9j aykgLyogWFhYIHdlIGFsd2F5cyBuZWVkIHRoZSBsb2NrIGZvciBub3chICov DQorCQkJUkFESVhfTk9ERV9IRUFEX1VOTE9DSyhybmgpOw0KKwkJZWxzZQ0K KwkJCVJBRElYX05PREVfSEVBRF9SVU5MT0NLKHJuaCwgJnRyYWNrZXIpOw0K IAkJZ290byBkb25lOw0KKwl9DQorCWlmIChuZWVkbG9jaykgLyogWFhYIHdl IGFsd2F5cyBuZWVkIHRoZSBsb2NrIGZvciBub3chICovDQorCQlSQURJWF9O T0RFX0hFQURfVU5MT0NLKHJuaCk7DQorCWVsc2UNCisJCVJBRElYX05PREVf SEVBRF9SVU5MT0NLKHJuaCwgJnRyYWNrZXIpOw0KIA0KLQl9IGVsc2UgaWYg KG5lZWRsb2NrKQ0KLQkJUkFESVhfTk9ERV9IRUFEX1JVTkxPQ0socm5oKTsN Ci0JDQogCS8qDQogCSAqIEVpdGhlciB3ZSBoaXQgdGhlIHJvb3Qgb3IgY291 bGRuJ3QgZmluZCBhbnkgbWF0Y2gsDQogCSAqIFdoaWNoIGJhc2ljYWxseSBt ZWFucw0KQEAgLTQwMCw2ICs0MDUsMTYyIEBADQogfQ0KIA0KIC8qDQorICog TG9va3VwIGEgZGVzdGluYXRpb24gaW4gdGhlIHJvdXRpbmcgdGFibGUgYW5k DQorICogcmVwb3J0IHRoZSBuZXh0IGhvcCwgaW50ZXJmYWNlIGFuZCBpbnRl cmZhY2UgYWRkcmVzcw0KKyAqIGluIGEgbmV3IHN0cnVjdHVyZS4NCisgKiBP bmx5IHJlYWQgbG9jayBhY2Nlc3Mgb24gdGhlIHJvdXRpbmcgdGFibGUgaXMg cmVxdWlyZWQsDQorICogaW5kaXZpZHVhbCByb3V0ZXMgYXJlIG5vdCBsb2Nr ZWQuDQorICogUmV0dXJucyAxIGZvciBlbnRyeSBmb3VuZCwgMCBmb3Igbm90 IGZvdW5kLg0KKyAqLw0KK2ludA0KK3J0bG9va3VwX2ZpYihzdHJ1Y3Qgc29j a2FkZHIgKmRzdCwgdV9pbnQgZmlibnVtLCBzdHJ1Y3QgcnRsb29rdXAgKnJ0 bCwNCisgICAgaW50IGZsYWdzKQ0KK3sNCisJc3RydWN0IHJhZGl4X25vZGVf aGVhZCAqcm5oOw0KKwlzdHJ1Y3QgcmFkaXhfbm9kZSAqcm47DQorCXN0cnVj dCBydGVudHJ5ICpydDsNCisJaW50IHJldCA9IDA7DQorCXN0cnVjdCBybV9w cmlvdHJhY2tlciB0cmFja2VyOw0KKw0KKwlLQVNTRVJUKChmaWJudW0gPCBy dF9udW1maWJzKSwgKCJydGFsbG9jMV9maWI6IGJhZCBmaWJudW0iKSk7DQor CWlmIChkc3QtPnNhX2ZhbWlseSAhPSBBRl9JTkVUKSAgLyogT25seSBJTkVU IHN1cHBvcnRzID4gMSBmaWIgbm93ICovDQorCQlmaWJudW0gPSAwOw0KKwly bmggPSBydF90YWJsZXNfZ2V0X3JuaChmaWJudW0sIGRzdC0+c2FfZmFtaWx5 KTsNCisNCisJLyogTG9vayB1cCB0aGUgYWRkcmVzcyBpbiB0aGUgdGFibGUg Zm9yIHRoYXQgQWRkcmVzcyBGYW1pbHkuICovDQorCWlmIChybmggPT0gTlVM TCkgew0KKwkJVl9ydHN0YXQucnRzX3VucmVhY2grKzsNCisJCXJldHVybiAo MCk7DQorCX0NCisNCisJUkFESVhfTk9ERV9IRUFEX1JMT0NLKHJuaCwgJnRy YWNrZXIpOw0KKwlybiA9IHJuaC0+cm5oX21hdGNoYWRkcihkc3QsIHJuaCk7 DQorCWlmIChybiAhPSBOVUxMICYmICgocm4tPnJuX2ZsYWdzICYgUk5GX1JP T1QpID09IDApKSB7DQorCQlydCA9IFJOVE9SVChybik7DQorDQorCQlpZigg cnQtPnJ0X2dhdGV3YXktPnNhX2xlbiA+IHJ0bC0+cnRfZ2F0ZXdheS0+c2Ff bGVuKSB7DQorCQkJdW5zaWduZWQgY2hhciBzYV9sZW4gPSBydGwtPnJ0X2dh dGV3YXktPnNhX2xlbjsNCisJCQliY29weSggcnQtPnJ0X2dhdGV3YXksIHJ0 bC0+cnRfZ2F0ZXdheSwgc2FfbGVuKTsNCisJCQlydGwtPnJ0X2dhdGV3YXkt PnNhX2xlbiA9IHNhX2xlbjsNCisJCX0gZWxzZSB7DQorCQkJdW5zaWduZWQg Y2hhciBzYV9sZW4gPSBydC0+cnRfZ2F0ZXdheS0+c2FfbGVuOw0KKwkJCWJj b3B5KCBydC0+cnRfZ2F0ZXdheSwgcnRsLT5ydF9nYXRld2F5LCBzYV9sZW4p Ow0KKwkJCXJ0bC0+cnRfZ2F0ZXdheS0+c2FfbGVuID0gc2FfbGVuOw0KKwkJ fQ0KKwkJcnRsLT5ydF9pZnAgPSBydC0+cnRfaWZwOw0KKwkJcnRsLT5ydF9p ZmEgPSBydC0+cnRfaWZhOw0KKwkJcnRsLT5ydF9ybXgucm14X210dSA9IHJ0 LT5ydF9ybXgucm14X210dTsNCisJCXJ0bC0+cnRfcm14LnJteF9leHBpcmUg PSBydC0+cnRfcm14LnJteF9leHBpcmU7DQorCQlydGwtPnJ0X2ZsYWdzID0g cnQtPnJ0X2ZsYWdzOw0KKwkJaWYgKGZsYWdzICYgUlRMX1BLU0VOVCkNCisg ICAgICAgICAgICAgICAgCXJ0LT5ydF9ybXgucm14X3Brc2VudCsrOyAvKiBy YWN5IGJ1dCBvayAqLw0KKwkJcmV0ID0gMTsNCisJfQ0KKwlSQURJWF9OT0RF X0hFQURfUlVOTE9DSyhybmgsICZ0cmFja2VyKTsNCisJcmV0dXJuIChyZXQp Ow0KK30NCisNCisjaWZkZWYgUkFESVhfTVBBVEgNCisvKg0KKyAqIExvb2t1 cCBhIG1wYXRoIGRlc3RpbmF0aW9uIGluIHRoZSByb3V0aW5nIHRhYmxlIGFu ZA0KKyAqIHJlcG9ydCB0aGUgbmV4dCBob3AsIGludGVyZmFjZSBhbmQgaW50 ZXJmYWNlIGFkZHJlc3MNCisgKiBpbiBhIG5ldyBzdHJ1Y3R1cmUuDQorICog T25seSByZWFkIGxvY2sgYWNjZXNzIG9uIHRoZSByb3V0aW5nIHRhYmxlIGlz IHJlcXVpcmVkLA0KKyAqIGluZGl2aWR1YWwgcm91dGVzIGFyZSBub3QgbG9j a2VkLg0KKyAqIFJldHVybnMgMSBmb3IgZW50cnkgZm91bmQsIDAgZm9yIG5v dCBmb3VuZC4NCisgKi8NCitpbnQNCitydGxvb2t1cF9tcGF0aF9maWIoc3Ry dWN0IHNvY2thZGRyICpkc3QsIHVfaW50MzJfdCBoYXNoLCB1X2ludCBmaWJu dW0sDQorICAgIHN0cnVjdCBydGxvb2t1cCAqcnRsLCBpbnQgZmxhZ3MpDQor ew0KKwlzdHJ1Y3QgcmFkaXhfbm9kZV9oZWFkICpybmg7DQorCXN0cnVjdCBy YWRpeF9ub2RlICpybiwgKnJuMDsNCisJc3RydWN0IHJ0ZW50cnkgKnJ0Ow0K KwlpbnQgcmV0ID0gMDsNCisJc3RydWN0IHJtX3ByaW90cmFja2VyIHRyYWNr ZXI7DQorCWludDY0X3Qgd2VpZ2h0Ow0KKwlpbnQ2NF90IGxvd2VzdF93ZWln aHQ7DQorCXVfaW50MzJfdCBuID0gMDsNCisNCisJS0FTU0VSVCgoZmlibnVt IDwgcnRfbnVtZmlicyksICgicnRhbGxvYzFfZmliOiBiYWQgZmlibnVtIikp Ow0KKwlpZiAoZHN0LT5zYV9mYW1pbHkgIT0gQUZfSU5FVCkgIC8qIE9ubHkg SU5FVCBzdXBwb3J0cyA+IDEgZmliIG5vdyAqLw0KKwkJZmlibnVtID0gMDsN CisJcm5oID0gcnRfdGFibGVzX2dldF9ybmgoZmlibnVtLCBkc3QtPnNhX2Zh bWlseSk7DQorDQorCS8qIExvb2sgdXAgdGhlIGFkZHJlc3MgaW4gdGhlIHRh YmxlIGZvciB0aGF0IEFkZHJlc3MgRmFtaWx5LiAqLw0KKwlpZiAocm5oID09 IE5VTEwpIHsNCisJCVZfcnRzdGF0LnJ0c191bnJlYWNoKys7DQorCQlyZXR1 cm4gKDApOw0KKwl9DQorDQorCVJBRElYX05PREVfSEVBRF9STE9DSyhybmgs ICZ0cmFja2VyKTsNCisJcm4gPSBybmgtPnJuaF9tYXRjaGFkZHIoZHN0LCBy bmgpOw0KKwlpZiAocm4gIT0gTlVMTCAmJiAoKHJuLT5ybl9mbGFncyAmIFJO Rl9ST09UKSA9PSAwKSkgew0KKwkJLyogd2UgaGF2ZSBhIHJvdXRlIC0gbm93 IGRvIHRoZSBtcGF0aCBzZWxlY3Rpb24gKi8NCisJCWlmIChybl9tcGF0aF9u ZXh0KCBybikgIT0gTlVMTCkgeyAvKiBtdWx0aXBhdGggKi8NCisJCQlybjAg PSBybjsNCisNCisJCQkvKiBmaW5kIGxvd2VzdCB3ZWlnaHQgcm91dGUgKi8N CisJCQlmb3IgKCBydCA9IChzdHJ1Y3QgcnRlbnRyeSAqKXJuLA0KKwkJCSAg ICB3ZWlnaHQgPSBydC0+cnRfcm14LnJteF93ZWlnaHQ7DQorCQkJICAgIHJu ICE9IE5VTEw7IHJuID0gcm5fbXBhdGhfbmV4dCggcm4pKSB7DQorCQkJCXJ0 ID0gKHN0cnVjdCBydGVudHJ5ICopcm47DQorCQkJCWlmKHJ0LT5ydF9mbGFn cyAmIFJURl9VUCkgew0KKwkJCQkJaWYgKHdlaWdodCA+IHJ0LT5ydF9ybXgu cm14X3dlaWdodCkgew0KKwkJCQkJCXdlaWdodCA9IHJ0LT5ydF9ybXgucm14 X3dlaWdodDsNCisJCQkJCQluID0gMTsNCisJCQkJCX0gZWxzZSBpZiAod2Vp Z2h0ID09IHJ0LT5ydF9ybXgucm14X3dlaWdodCkNCisJCQkJCQluKys7DQor CQkJCX0NCisJCQl9DQorCQkJbG93ZXN0X3dlaWdodCA9IHdlaWdodDsNCisN CisJCQkvKiBzZWxlY3Qgbm93IG9uZSBvZiB0aGUgbG93ZXN0IHdlaWdodCBy b3V0ZXMgKi8NCisJCQkvKiBndyBzZWxlY3Rpb24gYnkgTW9kdWxvLU4gSGFz aCAoUkZDMjk5MSkgWFhYIG5lZWQgaW1wcm92ZW1lbnQ/ICovDQorCQkJaGFz aCArPSBoYXNoaml0dGVyOw0KKwkJCWhhc2ggJT0gbjsNCisJCQlmb3IgKCBy biA9IHJuMCwgbiA9IDA7IHJuICE9IE5VTEw7IHJuID0gcm5fbXBhdGhfbmV4 dCggcm4pKSB7DQorCQkJCXJ0ID0gKHN0cnVjdCBydGVudHJ5ICopcm47DQor CQkJCWlmKHJ0LT5ydF9mbGFncyAmIFJURl9VUCkgew0KKwkJCQkJaWYgKCBy dC0+cnRfcm14LnJteF93ZWlnaHQgPT0gbG93ZXN0X3dlaWdodCkgew0KKwkJ CQkJCWlmIChuID09IGhhc2gpDQorCQkJCQkJCWJyZWFrOw0KKwkJCQkJCW4r KzsNCisJCQkJCX0NCisJCQkJfQ0KKwkJCX0NCisNCisJCQkvKiBndyBzZWxl Y3Rpb24gaGFzIGZhaWxlZCAtIHRoZXJlIG11c3QgYmUgb25seSB6ZXJvIHdl aWdodCByb3V0ZXMgKi8gICAgICAgICAgICAgICAgICAgDQorCQkJaWYgKCFy bikNCisJCQkJZ290byBlbmQ7DQorCQl9IGVsc2UNCisJCQlydCA9IChzdHJ1 Y3QgcnRlbnRyeSAqKXJuOw0KKw0KKwkJaWYoIHJ0LT5ydF9nYXRld2F5LT5z YV9sZW4gPiBydGwtPnJ0X2dhdGV3YXktPnNhX2xlbikgew0KKwkJCXVuc2ln bmVkIGNoYXIgc2FfbGVuID0gcnRsLT5ydF9nYXRld2F5LT5zYV9sZW47DQor CQkJYmNvcHkoIHJ0LT5ydF9nYXRld2F5LCBydGwtPnJ0X2dhdGV3YXksIHNh X2xlbik7DQorCQkJcnRsLT5ydF9nYXRld2F5LT5zYV9sZW4gPSBzYV9sZW47 DQorCQl9IGVsc2Ugew0KKwkJCXVuc2lnbmVkIGNoYXIgc2FfbGVuID0gcnQt PnJ0X2dhdGV3YXktPnNhX2xlbjsNCisJCQliY29weSggcnQtPnJ0X2dhdGV3 YXksIHJ0bC0+cnRfZ2F0ZXdheSwgc2FfbGVuKTsNCisJCQlydGwtPnJ0X2dh dGV3YXktPnNhX2xlbiA9IHNhX2xlbjsNCisJCX0NCisJCXJ0bC0+cnRfaWZw ID0gcnQtPnJ0X2lmcDsNCisJCXJ0bC0+cnRfaWZhID0gcnQtPnJ0X2lmYTsN CisJCXJ0bC0+cnRfcm14LnJteF9tdHUgPSBydC0+cnRfcm14LnJteF9tdHU7 DQorCQlydGwtPnJ0X3JteC5ybXhfZXhwaXJlID0gcnQtPnJ0X3JteC5ybXhf ZXhwaXJlOw0KKwkJcnRsLT5ydF9mbGFncyA9IHJ0LT5ydF9mbGFnczsNCisJ CWlmIChmbGFncyAmIFJUTF9QS1NFTlQpDQorCQkJcnQtPnJ0X3JteC5ybXhf cGtzZW50Kys7CS8qIHJhY3kgYnV0IG9rICovDQorCQlyZXQgPSAxOw0KKwl9 DQorZW5kOg0KKwlSQURJWF9OT0RFX0hFQURfUlVOTE9DSyhybmgsICZ0cmFj a2VyKTsNCisJcmV0dXJuIChyZXQpOw0KK30NCisjZW5kaWYNCisNCisvKg0K ICAqIFJlbW92ZSBhIHJlZmVyZW5jZSBjb3VudCBmcm9tIGFuIHJ0ZW50cnku DQogICogSWYgdGhlIGNvdW50IGdldHMgbG93IGVub3VnaCwgdGFrZSBpdCBv dXQgb2YgdGhlIHJvdXRpbmcgdGFibGUNCiAgKi8NCkBAIC04NzUsNyArMTAz Niw3IEBADQogCSAqIFJlbW92ZSB0aGUgaXRlbSBmcm9tIHRoZSB0cmVlOyBp dCBzaG91bGQgYmUgdGhlcmUsDQogCSAqIGJ1dCB3aGVuIGNhbGxlcnMgaW52 b2tlIHVzIGJsaW5kbHkgaXQgbWF5IG5vdCAoc2lnaCkuDQogCSAqLw0KLQly biA9IHJuaC0+cm5oX2RlbGFkZHIocnRfa2V5KHJ0KSwgcnRfbWFzayhydCks IHJuaCk7DQorCXJuID0gcm5oLT5ybmhfZGVsYWRkcihydF9rZXkocnQpLCBy dF9tYXNrKHJ0KSwgcm5oLCBOVUxMKTsNCiAJaWYgKHJuID09IE5VTEwpIHsN CiAJCWVycm9yID0gRVNSQ0g7DQogCQlnb3RvIGJhZDsNCkBAIC05MTMsMTEy ICsxMDc0LDYgQEANCiAJcmV0dXJuIChlcnJvcik7DQogfQ0KIA0KLSNpZmRl ZiBSQURJWF9NUEFUSA0KLXN0YXRpYyBpbnQNCi1ybl9tcGF0aF91cGRhdGUo aW50IHJlcSwgc3RydWN0IHJ0X2FkZHJpbmZvICppbmZvLA0KLSAgICBzdHJ1 Y3QgcmFkaXhfbm9kZV9oZWFkICpybmgsIHN0cnVjdCBydGVudHJ5ICoqcmV0 X25ydCkNCi17DQotCS8qDQotCSAqIGlmIHdlIGdvdCBtdWx0aXBhdGggcm91 dGVzLCB3ZSByZXF1aXJlIHVzZXJzIHRvIHNwZWNpZnkNCi0JICogYSBtYXRj aGluZyBSVEFYX0dBVEVXQVkuDQotCSAqLw0KLQlzdHJ1Y3QgcnRlbnRyeSAq cnQsICpydG8gPSBOVUxMOw0KLQlyZWdpc3RlciBzdHJ1Y3QgcmFkaXhfbm9k ZSAqcm47DQotCWludCBlcnJvciA9IDA7DQotDQotCXJuID0gcm5oLT5ybmhf bWF0Y2hhZGRyKGRzdCwgcm5oKTsNCi0JaWYgKHJuID09IE5VTEwpDQotCQly ZXR1cm4gKEVTUkNIKTsNCi0JcnRvID0gcnQgPSBSTlRPUlQocm4pOw0KLQly dCA9IHJ0X21wYXRoX21hdGNoZ2F0ZShydCwgZ2F0ZXdheSk7DQotCWlmIChy dCA9PSBOVUxMKQ0KLQkJcmV0dXJuIChFU1JDSCk7DQotCS8qDQotCSAqIHRo aXMgaXMgdGhlIGZpcnN0IGVudHJ5IGluIHRoZSBjaGFpbg0KLQkgKi8NCi0J aWYgKHJ0byA9PSBydCkgew0KLQkJcm4gPSBybl9tcGF0aF9uZXh0KChzdHJ1 Y3QgcmFkaXhfbm9kZSAqKXJ0KTsNCi0JCS8qDQotCQkgKiB0aGVyZSBpcyBh bm90aGVyIGVudHJ5LCBub3cgaXQncyBhY3RpdmUNCi0JCSAqLw0KLQkJaWYg KHJuKSB7DQotCQkJcnRvID0gUk5UT1JUKHJuKTsNCi0JCQlSVF9MT0NLKHJ0 byk7DQotCQkJcnRvLT5ydF9mbGFncyB8PSBSVEZfVVA7DQotCQkJUlRfVU5M T0NLKHJ0byk7DQotCQl9IGVsc2UgaWYgKHJ0LT5ydF9mbGFncyAmIFJURl9H QVRFV0FZKSB7DQotCQkJLyoNCi0JCQkgKiBGb3IgZ2F0ZXdheSByb3V0ZXMs IHdlIG5lZWQgdG8gDQotCQkJICogbWFrZSBzdXJlIHRoYXQgd2Ugd2UgYXJl IGRlbGV0aW5nDQotCQkJICogdGhlIGNvcnJlY3QgZ2F0ZXdheS4gDQotCQkJ ICogcnRfbXBhdGhfbWF0Y2hnYXRlKCkgZG9lcyBub3QgDQotCQkJICogY2hl Y2sgdGhlIGNhc2Ugd2hlbiB0aGVyZSBpcyBvbmx5DQotCQkJICogb25lIHJv dXRlIGluIHRoZSBjaGFpbi4gIA0KLQkJCSAqLw0KLQkJCWlmIChnYXRld2F5 ICYmDQotCQkJICAgIChydC0+cnRfZ2F0ZXdheS0+c2FfbGVuICE9IGdhdGV3 YXktPnNhX2xlbiB8fA0KLQkJCQltZW1jbXAocnQtPnJ0X2dhdGV3YXksIGdh dGV3YXksIGdhdGV3YXktPnNhX2xlbikpKQ0KLQkJCQllcnJvciA9IEVTUkNI Ow0KLQkJCWVsc2Ugew0KLQkJCQkvKg0KLQkJCQkgKiByZW1vdmUgZnJvbSB0 cmVlIGJlZm9yZSByZXR1cm5pbmcgaXQNCi0JCQkJICogdG8gdGhlIGNhbGxl cg0KLQkJCQkgKi8NCi0JCQkJcm4gPSBybmgtPnJuaF9kZWxhZGRyKGRzdCwg bmV0bWFzaywgcm5oKTsNCi0JCQkJS0FTU0VSVChydCA9PSBSTlRPUlQocm4p LCAoInJhZGl4IG5vZGUgZGlzYXBwZWFyZWQiKSk7DQotCQkJCWdvdG8gZ3dk ZWxldGU7DQotCQkJfQ0KLQkJCQ0KLQkJfQ0KLQkJLyoNCi0JCSAqIHVzZSB0 aGUgbm9ybWFsIGRlbGV0ZSBjb2RlIHRvIHJlbW92ZQ0KLQkJICogdGhlIGZp cnN0IGVudHJ5DQotCQkgKi8NCi0JCWlmIChyZXEgIT0gUlRNX0RFTEVURSkg DQotCQkJZ290byBub25kZWxldGU7DQotDQotCQllcnJvciA9IEVOT0VOVDsN Ci0JCWdvdG8gZG9uZTsNCi0JfQ0KLQkJDQotCS8qDQotCSAqIGlmIHRoZSBl bnRyeSBpcyAybmQgYW5kIG9uIHVwDQotCSAqLw0KLQlpZiAoKHJlcSA9PSBS VE1fREVMRVRFKSAmJiAhcnRfbXBhdGhfZGVsZHVwKHJ0bywgcnQpKQ0KLQkJ cGFuaWMgKCJydHJlcXVlc3QxOiBydF9tcGF0aF9kZWxkdXAiKTsNCi1nd2Rl bGV0ZToNCi0JUlRfTE9DSyhydCk7DQotCVJUX0FERFJFRihydCk7DQotCWlm IChyZXEgPT0gUlRNX0RFTEVURSkgew0KLQkJcnQtPnJ0X2ZsYWdzICY9IH5S VEZfVVA7DQotCQkvKg0KLQkJICogT25lIG1vcmUgcnRlbnRyeSBmbG9hdGlu ZyBhcm91bmQgdGhhdCBpcyBub3QNCi0JCSAqIGxpbmtlZCB0byB0aGUgcm91 dGluZyB0YWJsZS4gcnR0cmFzaCB3aWxsIGJlIGRlY3JlbWVudGVkDQotCQkg KiB3aGVuIFJURlJFRShydCkgaXMgZXZlbnR1YWxseSBjYWxsZWQuDQotCQkg Ki8NCi0JCVZfcnR0cmFzaCsrOw0KLQl9DQotCQ0KLW5vbmRlbGV0ZToNCi0J aWYgKHJlcSAhPSBSVE1fREVMRVRFKQ0KLQkJcGFuaWMoInVucmVjb2duaXpl ZCByZXF1ZXN0ICVkIiwgcmVxKTsNCi0JDQotDQotCS8qDQotCSAqIElmIHRo ZSBjYWxsZXIgd2FudHMgaXQsIHRoZW4gaXQgY2FuIGhhdmUgaXQsDQotCSAq IGJ1dCBpdCdzIHVwIHRvIGl0IHRvIGZyZWUgdGhlIHJ0ZW50cnkgYXMgd2Ug d29uJ3QgYmUNCi0JICogZG9pbmcgaXQuDQotCSAqLw0KLQlpZiAocmV0X25y dCkgew0KLQkJKnJldF9ucnQgPSBydDsNCi0JCVJUX1VOTE9DSyhydCk7DQot CX0gZWxzZQ0KLQkJUlRGUkVFX0xPQ0tFRChydCk7DQotZG9uZToNCi0JcmV0 dXJuIChlcnJvcik7DQotfQ0KLSNlbmRpZg0KLQ0KIGludA0KIHJ0cmVxdWVz dDFfZmliKGludCByZXEsIHN0cnVjdCBydF9hZGRyaW5mbyAqaW5mbywgc3Ry dWN0IHJ0ZW50cnkgKipyZXRfbnJ0LA0KIAkJCQl1X2ludCBmaWJudW0pDQpA QCAtMTAzMiw2ICsxMDg3LDcgQEANCiAJcmVnaXN0ZXIgc3RydWN0IHJhZGl4 X25vZGVfaGVhZCAqcm5oOw0KIAlzdHJ1Y3QgaWZhZGRyICppZmE7DQogCXN0 cnVjdCBzb2NrYWRkciAqbmRzdDsNCisJc3RydWN0IHJtX3ByaW90cmFja2Vy IHRyYWNrZXI7DQogI2RlZmluZSBzZW5kZXJyKHgpIHsgZXJyb3IgPSB4IDsg Z290byBiYWQ7IH0NCiANCiAJS0FTU0VSVCgoZmlibnVtIDwgcnRfbnVtZmli cyksICgicnRyZXF1ZXN0MV9maWI6IGJhZCBmaWJudW0iKSk7DQpAQCAtMTA0 OCw3ICsxMTA0LDcgQEANCiAJaWYgKG5lZWRsb2NrKQ0KIAkJUkFESVhfTk9E RV9IRUFEX0xPQ0socm5oKTsNCiAJZWxzZQ0KLQkJUkFESVhfTk9ERV9IRUFE X0xPQ0tfQVNTRVJUKHJuaCk7DQorCQlSQURJWF9OT0RFX0hFQURfUkxPQ0so cm5oLCAmdHJhY2tlcik7DQogCS8qDQogCSAqIElmIHdlIGFyZSBhZGRpbmcg YSBob3N0IHJvdXRlIHRoZW4gd2UgZG9uJ3Qgd2FudCB0byBwdXQNCiAJICog YSBuZXRtYXNrIGluIHRoZSB0cmVlLCBub3IgZG8gd2Ugd2FudCB0byBjbG9u ZSBpdC4NCkBAIC0xMDU4LDI4ICsxMTE0LDMwIEBADQogDQogCXN3aXRjaCAo cmVxKSB7DQogCWNhc2UgUlRNX0RFTEVURToNCisJCWlmICgocm4gPSBybmgt PnJuaF9sb29rdXAoZHN0LCBuZXRtYXNrLCBybmgpKSA9PSBOVUxMKQ0KKwkJ CXNlbmRlcnIoRVNSQ0gpOw0KKwkJcnQgPSBSTlRPUlQocm4pOw0KICNpZmRl ZiBSQURJWF9NUEFUSA0KKwkJLyoNCisJCSAqIGlmIHdlIGdvdCBtdWx0aXBh dGggcm91dGVzLCB3ZSByZXF1aXJlIHVzZXJzIHRvIHNwZWNpZnkNCisJCSAq IGEgbWF0Y2hpbmcgUlRBWF9HQVRFV0FZLg0KKwkJICovDQogCQlpZiAocm5f bXBhdGhfY2FwYWJsZShybmgpKSB7DQotCQkJZXJyb3IgPSBybl9tcGF0aF91 cGRhdGUocmVxLCBpbmZvLCBybmgsIHJldF9ucnQpOw0KLQkJCS8qDQotCQkJ ICogImJhZCIgaG9sZHMgdHJ1ZSBmb3IgdGhlIHN1Y2Nlc3MgY2FzZQ0KLQkJ CSAqIGFzIHdlbGwNCi0JCQkgKi8NCi0JCQlpZiAoZXJyb3IgIT0gRU5PRU5U KQ0KLQkJCQlnb3RvIGJhZDsNCi0JCQllcnJvciA9IDA7DQorCQkJcnQgPSBy dF9tcGF0aF9tYXRjaGdhdGUoIHJ0LCBnYXRld2F5KTsNCisJCQlybiA9IChz dHJ1Y3QgcmFkaXhfbm9kZSAqKXJ0Ow0KKwkJCWlmICghcnQpDQorCQkJCXNl bmRlcnIoRVNSQ0gpOw0KIAkJfQ0KICNlbmRpZg0KIAkJLyoNCiAJCSAqIFJl bW92ZSB0aGUgaXRlbSBmcm9tIHRoZSB0cmVlIGFuZCByZXR1cm4gaXQuDQog CQkgKiBDb21wbGFpbiBpZiBpdCBpcyBub3QgdGhlcmUgYW5kIGRvIG5vIG1v cmUgcHJvY2Vzc2luZy4NCiAJCSAqLw0KLQkJcm4gPSBybmgtPnJuaF9kZWxh ZGRyKGRzdCwgbmV0bWFzaywgcm5oKTsNCisJCXJuID0gcm5oLT5ybmhfZGVs YWRkcihkc3QsIG5ldG1hc2ssIHJuaCwgcm4pOw0KIAkJaWYgKHJuID09IE5V TEwpDQogCQkJc2VuZGVycihFU1JDSCk7DQogCQlpZiAocm4tPnJuX2ZsYWdz ICYgKFJORl9BQ1RJVkUgfCBSTkZfUk9PVCkpDQogCQkJcGFuaWMgKCJydHJl cXVlc3QgZGVsZXRlIik7DQotCQlydCA9IFJOVE9SVChybik7DQogCQlSVF9M T0NLKHJ0KTsNCiAJCVJUX0FERFJFRihydCk7DQogCQlydC0+cnRfZmxhZ3Mg Jj0gflJURl9VUDsNCkBAIC0xMjg1LDYgKzEzNDMsOCBAQA0KIGJhZDoNCiAJ aWYgKG5lZWRsb2NrKQ0KIAkJUkFESVhfTk9ERV9IRUFEX1VOTE9DSyhybmgp Ow0KKwllbHNlDQorCQlSQURJWF9OT0RFX0hFQURfUlVOTE9DSyhybmgsICZ0 cmFja2VyKTsNCiAJcmV0dXJuIChlcnJvcik7DQogI3VuZGVmIHNlbmRlcnIN CiB9DQpAQCAtMTMwOCw3ICsxMzY4LDkgQEANCiAjZW5kaWYNCiANCiAJUlRf TE9DS19BU1NFUlQocnQpOw0KKyNpZmRlZiBJTlZBUklBTlRTDQogCVJBRElY X05PREVfSEVBRF9MT0NLX0FTU0VSVChybmgpOw0KKyNlbmRpZg0KIAkNCiAJ LyoNCiAJICogUHJlcGFyZSB0byBzdG9yZSB0aGUgZ2F0ZXdheSBpbiBydC0+ cnRfZ2F0ZXdheS4NCkBAIC0xNDY0LDYgKzE1MjYsNyBAQA0KIAkJCQkJICAg IGlmYS0+aWZhX2FkZHIpOw0KIAkJCQkJaWYgKCFydCkNCiAJCQkJCQllcnJv ciA9IEVTUkNIOw0KKwkJCQkJcm4gPSAoc3RydWN0IHJhZGl4X25vZGUgKily dDsNCiAJCQkJfQ0KIAkJCX0NCiAJCQllbHNlDQpkaWZmIC11IC1yIC4uL3Ny Y19vcmdfOC4yXzIwMTEwMzI5L3N5cy9uZXQvcm91dGUuaCAuL3N5cy9uZXQv cm91dGUuaA0KLS0tIC4uL3NyY19vcmdfOC4yXzIwMTEwMzI5L3N5cy9uZXQv cm91dGUuaAkyMDEwLTA0LTAyIDA1OjEyOjQ2LjAwMDAwMDAwMCArMDAwMA0K KysrIC4vc3lzL25ldC9yb3V0ZS5oCTIwMTEtMDQtMDYgMjA6Mzc6NDguMDAw MDAwMDAwICswMDAwDQpAQCAtNzksNiArNzksMzkgQEANCiB9Ow0KIA0KIC8q DQorICogUG9pbnRlcnMgdG8gc3RydWN0dXJlcyBvbiB0aGUgc3RhY2sgZm9y IHB1cmUgcm91dGluZw0KKyAqIHRhYmxlIGxvb2t1cHMgLyBmYXN0IG10dSBh Y2Nlc3MuDQorICogRmFrZXMgc3RydWN0IHJ0X21ldHJpY3NfbGl0ZQ0KKyAq Lw0KK3N0cnVjdCBydGxvb2t1cF9tZXRyaWNzIHsNCisJdV9sb25nICBybXhf bXR1OyAgICAgICAgLyogTVRVIGZvciB0aGlzIHBhdGggKi8NCisJdV9sb25n ICBybXhfZXhwaXJlOyAgICAgLyogWFhYIHJlYXJhbmdlIHJ0X21ldHJpY3Nf bGl0ZSAqLw0KKwl1X2xvbmcgIHJteF9wa3NlbnQ7ICAgICAvKiBYWFggZmFz dGVyIHRoYW4gZXh0cmEgaWY/IC0gcmVtb3ZlPyAqLw0KK307DQorDQorLyoN CisgKiBQb2ludGVycyB0byBzdHJ1Y3R1cmVzIG9uIHRoZSBzdGFjayBmb3Ig cHVyZSByb3V0aW5nDQorICogdGFibGUgbG9va3Vwcy4gDQorICogRmFrZXMg c3RydWN0IHJ0ZW50cnkNCisgKi8NCisjaWZuZGVmIFJORl9OT1JNQUwNCisj aW5jbHVkZSA8bmV0L3JhZGl4Lmg+DQorI2lmZGVmIFJBRElYX01QQVRIDQor I2luY2x1ZGUgPG5ldC9yYWRpeF9tcGF0aC5oPg0KKyNlbmRpZg0KKyNlbmRp Zg0KK3N0cnVjdCBydGxvb2t1cCB7DQorICAgICAgIHN0cnVjdCAgcmFkaXhf bm9kZSBydF9ub2Rlc1syXTsgICAgICAgICAvKiBYWFggcmVhcmFuZ2UgcnRl bnRyeSBhbmQgcmVtb3ZlICovDQorICAgICAgIHN0cnVjdCAgc29ja2FkZHIg KnJ0X2dhdGV3YXk7DQorICAgICAgIGludCAgICAgcnRfZmxhZ3M7DQorICAg ICAgIGludCAgICAgcnRfcmVmY250OyAgICAgICAgICAgICAgICAgICAgICAv KiBYWFggcmVhcmFuZ2UgcnRlbnRyeSBhbmQgcmVtb3ZlICovDQorICAgICAg IHN0cnVjdCAgaWZuZXQgKnJ0X2lmcDsNCisgICAgICAgc3RydWN0ICBpZmFk ZHIgKnJ0X2lmYTsNCisgICAgICAgc3RydWN0ICBydGxvb2t1cF9tZXRyaWNz IHJ0X3JteDsNCit9Ow0KKyNkZWZpbmUgICAgICAgIFJUTF9QS1NFTlQgICAg ICAweDAwMDEgIC8qIGluY3JlbWVudCBwYWNrZXQgc2VudCBjb3VudGVyICov DQorDQorLyoNCiAgKiBybXhfcnR0IGFuZCBybXhfcnR0dmFyIGFyZSBzdG9y ZWQgYXMgbWljcm9zZWNvbmRzOw0KICAqIFJUVFRPUFJIWihydHQpIGNvbnZl cnRzIHRvIGEgdmFsdWUgc3VpdGFibGUgZm9yIHVzZQ0KICAqIGJ5IGEgcHJv dG9jb2wgc2xvd3RpbW8gY291bnRlci4NCkBAIC0xMjMsMTIgKzE1Niw2IEBA DQogICogZ2F0ZXdheXMgYXJlIG1hcmtlZCBzbyB0aGF0IHRoZSBvdXRwdXQg cm91dGluZXMga25vdyB0byBhZGRyZXNzIHRoZQ0KICAqIGdhdGV3YXkgcmF0 aGVyIHRoYW4gdGhlIHVsdGltYXRlIGRlc3RpbmF0aW9uLg0KICAqLw0KLSNp Zm5kZWYgUk5GX05PUk1BTA0KLSNpbmNsdWRlIDxuZXQvcmFkaXguaD4NCi0j aWZkZWYgUkFESVhfTVBBVEgNCi0jaW5jbHVkZSA8bmV0L3JhZGl4X21wYXRo Lmg+DQotI2VuZGlmDQotI2VuZGlmDQogc3RydWN0IHJ0ZW50cnkgew0KIAlz dHJ1Y3QJcmFkaXhfbm9kZSBydF9ub2Rlc1syXTsJLyogdHJlZSBnbHVlLCBh bmQgb3RoZXIgdmFsdWVzICovDQogCS8qDQpAQCAtNDMwLDYgKzQ1NywxMCBA QA0KIHZvaWQJIHJ0YWxsb2NfZmliKHN0cnVjdCByb3V0ZSAqcm8sIHVfaW50 IGZpYm51bSk7DQogc3RydWN0IHJ0ZW50cnkgKnJ0YWxsb2MxX2ZpYihzdHJ1 Y3Qgc29ja2FkZHIgKiwgaW50LCB1X2xvbmcsIHVfaW50KTsNCiBpbnQJIHJ0 aW9jdGxfZmliKHVfbG9uZywgY2FkZHJfdCwgdV9pbnQpOw0KK2ludCAgICBy dGxvb2t1cF9maWIoc3RydWN0IHNvY2thZGRyICosIHVfaW50LCBzdHJ1Y3Qg cnRsb29rdXAgKiwgaW50KTsNCisjaWZkZWYgUkFESVhfTVBBVEgNCitpbnQg ICAgcnRsb29rdXBfbXBhdGhfZmliKHN0cnVjdCBzb2NrYWRkciAqLCB1X2lu dDMyX3QsIHVfaW50LCBzdHJ1Y3QgcnRsb29rdXAgKiwgaW50KTsNCisjZW5k aWYNCiB2b2lkCSBydHJlZGlyZWN0X2ZpYihzdHJ1Y3Qgc29ja2FkZHIgKiwg c3RydWN0IHNvY2thZGRyICosDQogCSAgICBzdHJ1Y3Qgc29ja2FkZHIgKiwg aW50LCBzdHJ1Y3Qgc29ja2FkZHIgKiwgdV9pbnQpOw0KIGludAkgcnRyZXF1 ZXN0X2ZpYihpbnQsIHN0cnVjdCBzb2NrYWRkciAqLA0KZGlmZiAtdSAtciAu Li9zcmNfb3JnXzguMl8yMDExMDMyOS9zeXMvbmV0L3J0c29jay5jIC4vc3lz L25ldC9ydHNvY2suYw0KLS0tIC4uL3NyY19vcmdfOC4yXzIwMTEwMzI5L3N5 cy9uZXQvcnRzb2NrLmMJMjAxMC0xMC0zMCAxMTo1NDo1NS4wMDAwMDAwMDAg KzAwMDANCisrKyAuL3N5cy9uZXQvcnRzb2NrLmMJMjAxMS0wNC0wMyAxNjow Nzo1Ny4wMDAwMDAwMDAgKzAwMDANCkBAIC01MSw2ICs1MSw3IEBADQogI2lu Y2x1ZGUgPHN5cy9zb2NrZXR2YXIuaD4NCiAjaW5jbHVkZSA8c3lzL3N5c2N0 bC5oPg0KICNpbmNsdWRlIDxzeXMvc3lzdG0uaD4NCisjaW5jbHVkZSA8c3lz L3JtbG9jay5oPg0KIA0KICNpbmNsdWRlIDxuZXQvaWYuaD4NCiAjaW5jbHVk ZSA8bmV0L2lmX2RsLmg+DQpAQCAtNTEzLDYgKzUxNCw3IEBADQogCWludCBs ZW4sIGVycm9yID0gMDsNCiAJc3RydWN0IGlmbmV0ICppZnAgPSBOVUxMOw0K IAl1bmlvbiBzb2NrYWRkcl91bmlvbiBzYXVuOw0KKwlzdHJ1Y3Qgcm1fcHJp b3RyYWNrZXIgdHJhY2tlcjsNCiANCiAjZGVmaW5lIHNlbmRlcnIoZSkgeyBl cnJvciA9IGU7IGdvdG8gZmx1c2g7fQ0KIAlpZiAobSA9PSBOVUxMIHx8ICgo bS0+bV9sZW4gPCBzaXplb2YobG9uZykpICYmDQpAQCAtNjQzLDExICs2NDUs MTEgQEANCiAJCSAgICBpbmZvLnJ0aV9pbmZvW1JUQVhfRFNUXS0+c2FfZmFt aWx5KTsNCiAJCWlmIChybmggPT0gTlVMTCkNCiAJCQlzZW5kZXJyKEVBRk5P U1VQUE9SVCk7DQotCQlSQURJWF9OT0RFX0hFQURfUkxPQ0socm5oKTsNCisJ CVJBRElYX05PREVfSEVBRF9STE9DSyhybmgsICZ0cmFja2VyKTsNCiAJCXJ0 ID0gKHN0cnVjdCBydGVudHJ5ICopIHJuaC0+cm5oX2xvb2t1cChpbmZvLnJ0 aV9pbmZvW1JUQVhfRFNUXSwNCiAJCQlpbmZvLnJ0aV9pbmZvW1JUQVhfTkVU TUFTS10sIHJuaCk7DQogCQlpZiAocnQgPT0gTlVMTCkgewkvKiBYWFggbG9v a3MgYm9ndXMgKi8NCi0JCQlSQURJWF9OT0RFX0hFQURfUlVOTE9DSyhybmgp Ow0KKwkJCVJBRElYX05PREVfSEVBRF9SVU5MT0NLKHJuaCwgJnRyYWNrZXIp Ow0KIAkJCXNlbmRlcnIoRVNSQ0gpOw0KIAkJfQ0KICNpZmRlZiBSQURJWF9N UEFUSA0KQEAgLTY2Myw3ICs2NjUsNyBAQA0KIAkJICAgIChydG0tPnJ0bV90 eXBlICE9IFJUTV9HRVQgfHwgaW5mby5ydGlfaW5mb1tSVEFYX0dBVEVXQVld KSkgew0KIAkJCXJ0ID0gcnRfbXBhdGhfbWF0Y2hnYXRlKHJ0LCBpbmZvLnJ0 aV9pbmZvW1JUQVhfR0FURVdBWV0pOw0KIAkJCWlmICghcnQpIHsNCi0JCQkJ UkFESVhfTk9ERV9IRUFEX1JVTkxPQ0socm5oKTsNCisJCQkJUkFESVhfTk9E RV9IRUFEX1JVTkxPQ0socm5oLCAmdHJhY2tlcik7DQogCQkJCXNlbmRlcnIo RVNSQ0gpOw0KIAkJCX0NCiAJCX0NCkBAIC02OTUsMTMgKzY5NywxMyBAQA0K IAkJCSAqLw0KIAkJCXJ0ID0gKHN0cnVjdCBydGVudHJ5ICopcm5oLT5ybmhf bWF0Y2hhZGRyKCZsYWRkciwgcm5oKTsNCiAJCQlpZiAocnQgPT0gTlVMTCkg ew0KLQkJCQlSQURJWF9OT0RFX0hFQURfUlVOTE9DSyhybmgpOw0KKwkJCQlS QURJWF9OT0RFX0hFQURfUlVOTE9DSyhybmgsICZ0cmFja2VyKTsNCiAJCQkJ c2VuZGVycihFU1JDSCk7DQogCQkJfQ0KIAkJfSANCiAJCVJUX0xPQ0socnQp Ow0KIAkJUlRfQUREUkVGKHJ0KTsNCi0JCVJBRElYX05PREVfSEVBRF9SVU5M T0NLKHJuaCk7DQorCQlSQURJWF9OT0RFX0hFQURfUlVOTE9DSyhybmgsICZ0 cmFja2VyKTsNCiANCiAJCS8qIA0KIAkJICogRml4IGZvciBQUjogODI5NzQN CmRpZmYgLXUgLXIgLi4vc3JjX29yZ184LjJfMjAxMTAzMjkvc3lzL25ldGlu ZXQvaWNtcF92YXIuaCAuL3N5cy9uZXRpbmV0L2ljbXBfdmFyLmgNCi0tLSAu Li9zcmNfb3JnXzguMl8yMDExMDMyOS9zeXMvbmV0aW5ldC9pY21wX3Zhci5o CTIwMDktMDgtMDMgMDg6MTM6MDYuMDAwMDAwMDAwICswMDAwDQorKysgLi9z eXMvbmV0aW5ldC9pY21wX3Zhci5oCTIwMTEtMDQtMDMgMTY6MDc6NTcuMDAw MDAwMDAwICswMDAwDQpAQCAtMTAyLDcgKzEwMiwxMSBAQA0KICNkZWZpbmUg QkFORExJTV9SU1RfQ0xPU0VEUE9SVCAzIC8qIE5vIGNvbm5lY3Rpb24sIGFu ZCBubyBsaXN0ZW5lcnMgKi8NCiAjZGVmaW5lIEJBTkRMSU1fUlNUX09QRU5Q T1JUIDQgICAvKiBObyBjb25uZWN0aW9uLCBsaXN0ZW5lciAqLw0KICNkZWZp bmUgQkFORExJTV9JQ01QNl9VTlJFQUNIIDUNCi0jZGVmaW5lIEJBTkRMSU1f TUFYIDUNCisjZGVmaW5lIEJBTkRMSU1fSUNNUF9GV0RfVU5SRUFDSCA2IC8q IGZvcndhcmRpbmc6IGxpbWl0IHVucmVhY2hhYmxlICovDQorI2RlZmluZSBC QU5ETElNX0lDTVBfRldEX1RJTVhDRUVEIDcgLyogZm9yd2FyZGluZzogbGlt aXQgdGltZS1leGNlZWRlZCAqLw0KKyNkZWZpbmUgQkFORExJTV9JQ01QX0ZX RF9ORUVERlJBRyA4IC8qIGZvcndhcmRpbmc6IGxpbWl0IG5lZWQtZnJhZyAq Lw0KKyNkZWZpbmUgQkFORExJTV9JQ01QX0ZXRF9GSUxURVIgOSAvKiBmb3J3 YXJkaW5nOiBsaW1pdCBhZG1pbi1wcm9oaWIgKi8NCisjZGVmaW5lIEJBTkRM SU1fTUFYIDkNCiAjZW5kaWYNCiANCiAjZW5kaWYNCmRpZmYgLXUgLXIgLi4v c3JjX29yZ184LjJfMjAxMTAzMjkvc3lzL25ldGluZXQvaW4uYyAuL3N5cy9u ZXRpbmV0L2luLmMNCi0tLSAuLi9zcmNfb3JnXzguMl8yMDExMDMyOS9zeXMv bmV0aW5ldC9pbi5jCTIwMTEtMDQtMTIgMTM6MDI6MDIuMDAwMDAwMDAwICsw MDAwDQorKysgLi9zeXMvbmV0aW5ldC9pbi5jCTIwMTEtMDQtMTQgMTY6MjI6 NDEuMDAwMDAwMDAwICswMDAwDQpAQCAtMTM5MywxMiArMTM5MywyMiBAQA0K IGluX2xsdGFibGVfcnRjaGVjayhzdHJ1Y3QgaWZuZXQgKmlmcCwgdV9pbnQg ZmxhZ3MsIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqbDNhZGRyKQ0KIHsNCiAJ c3RydWN0IHJ0ZW50cnkgKnJ0Ow0KKyNpZmRlZiBSQURJWF9NUEFUSA0KKwlz dHJ1Y3Qgcm91dGUgcm87DQorI2VuZGlmDQogDQogCUtBU1NFUlQobDNhZGRy LT5zYV9mYW1pbHkgPT0gQUZfSU5FVCwNCiAJICAgICgic2luX2ZhbWlseSAl ZCIsIGwzYWRkci0+c2FfZmFtaWx5KSk7DQogDQorI2lmZGVmIFJBRElYX01Q QVRIDQorCWJ6ZXJvKCAmcm8sIHNpemVvZihybykpOw0KKwliY29weSggX19E RUNPTlNUKHN0cnVjdCBzb2NrYWRkciAqLCBsM2FkZHIpLCAmcm8ucm9fZHN0 LCBzaXplb2Yoc3RydWN0IHNvY2thZGRyKSk7DQorCXJ0YWxsb2NfbXBhdGhf ZmliX2ZsYWdzKCAoc3RydWN0IHJvdXRlICopJnJvLCBSVEZfQU5OT1VOQ0Us IDAsIFJURl9HQVRFV0FZKTsNCisJcnQgPSByby5yb19ydDsNCisjZWxzZQ0K IAkvKiBYWFggcnRhbGxvYzEgc2hvdWxkIHRha2UgYSBjb25zdCBwYXJhbSAq Lw0KIAlydCA9IHJ0YWxsb2MxKF9fREVDT05TVChzdHJ1Y3Qgc29ja2FkZHIg KiwgbDNhZGRyKSwgMCwgMCk7DQorI2VuZGlmDQogCWlmIChydCA9PSBOVUxM IHx8ICghKGZsYWdzICYgTExFX1BVQikgJiYNCiAJCQkgICAoKHJ0LT5ydF9m bGFncyAmIFJURl9HQVRFV0FZKSB8fCANCiAJCQkgICAgKHJ0LT5ydF9pZnAg IT0gaWZwKSkpKSB7DQpAQCAtMTQwNiwxMSArMTQxNiwyMCBAQA0KIAkJbG9n KExPR19JTkZPLCAiSVB2NCBhZGRyZXNzOiBcIiVzXCIgaXMgbm90IG9uIHRo ZSBuZXR3b3JrXG4iLA0KIAkJICAgIGluZXRfbnRvYSgoKGNvbnN0IHN0cnVj dCBzb2NrYWRkcl9pbiAqKWwzYWRkciktPnNpbl9hZGRyKSk7DQogI2VuZGlm DQorI2lmZGVmIFJBRElYX01QQVRIDQorCQlpZiAocnQgIT0gTlVMTCkNCisJ CQlSVEZSRUUocnQpOw0KKyNlbHNlDQogCQlpZiAocnQgIT0gTlVMTCkNCiAJ CQlSVEZSRUVfTE9DS0VEKHJ0KTsNCisjZW5kaWYNCiAJCXJldHVybiAoRUlO VkFMKTsNCiAJfQ0KKyNpZmRlZiBSQURJWF9NUEFUSA0KKwlSVEZSRUUocnQp Ow0KKyNlbHNlDQogCVJURlJFRV9MT0NLRUQocnQpOw0KKyNlbmRpZg0KIAly ZXR1cm4gMDsNCiB9DQogDQpkaWZmIC11IC1yIC4uL3NyY19vcmdfOC4yXzIw MTEwMzI5L3N5cy9uZXRpbmV0L2luX3JteC5jIC4vc3lzL25ldGluZXQvaW5f cm14LmMNCi0tLSAuLi9zcmNfb3JnXzguMl8yMDExMDMyOS9zeXMvbmV0aW5l dC9pbl9ybXguYwkyMDEwLTEwLTExIDExOjI1OjM3LjAwMDAwMDAwMCArMDAw MA0KKysrIC4vc3lzL25ldGluZXQvaW5fcm14LmMJMjAxMS0wNC0xNCAxNjoy MzoxMy4wMDAwMDAwMDAgKzAwMDANCkBAIC01MSw2ICs1MSw4IEBADQogI2lu Y2x1ZGUgPHN5cy9tYnVmLmg+DQogI2luY2x1ZGUgPHN5cy9zeXNsb2cuaD4N CiAjaW5jbHVkZSA8c3lzL2NhbGxvdXQuaD4NCisjaW5jbHVkZSA8c3lzL2xv Y2suaD4NCisjaW5jbHVkZSA8c3lzL3JtbG9jay5oPg0KIA0KICNpbmNsdWRl IDxuZXQvaWYuaD4NCiAjaW5jbHVkZSA8bmV0L3JvdXRlLmg+DQpkaWZmIC11 IC1yIC4uL3NyY19vcmdfOC4yXzIwMTEwMzI5L3N5cy9uZXRpbmV0L2lwX2Zh c3Rmd2QuYyAuL3N5cy9uZXRpbmV0L2lwX2Zhc3Rmd2QuYw0KLS0tIC4uL3Ny Y19vcmdfOC4yXzIwMTEwMzI5L3N5cy9uZXRpbmV0L2lwX2Zhc3Rmd2QuYwky MDEwLTEyLTEwIDE0OjA2OjUwLjAwMDAwMDAwMCArMDAwMA0KKysrIC4vc3lz L25ldGluZXQvaXBfZmFzdGZ3ZC5jCTIwMTEtMDQtMDcgMDI6MjQ6MDEuMDAw MDAwMDAwICswMDAwDQpAQCAtOTQsNiArOTQsOSBAQA0KICNpbmNsdWRlIDxu ZXQvaWZfdmFyLmg+DQogI2luY2x1ZGUgPG5ldC9pZl9kbC5oPg0KICNpbmNs dWRlIDxuZXQvcm91dGUuaD4NCisjaWZkZWYgUkFESVhfTVBBVEgNCisjaW5j bHVkZSA8bmV0L3JhZGl4X21wYXRoLmg+DQorI2VuZGlmDQogI2luY2x1ZGUg PG5ldC92bmV0Lmg+DQogDQogI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4NCkBA IC0xMDIsNiArMTA1LDcgQEANCiAjaW5jbHVkZSA8bmV0aW5ldC9pcC5oPg0K ICNpbmNsdWRlIDxuZXRpbmV0L2lwX3Zhci5oPg0KICNpbmNsdWRlIDxuZXRp bmV0L2lwX2ljbXAuaD4NCisjaW5jbHVkZSA8bmV0aW5ldC9pY21wX3Zhci5o Pg0KICNpbmNsdWRlIDxuZXRpbmV0L2lwX29wdGlvbnMuaD4NCiANCiAjaW5j bHVkZSA8bWFjaGluZS9pbl9ja3N1bS5oPg0KQEAgLTExMyw3ICsxMTcsMTEg QEANCiAgICAgJlZORVRfTkFNRShpcGZhc3Rmb3J3YXJkX2FjdGl2ZSksIDAs ICJFbmFibGUgZmFzdCBJUCBmb3J3YXJkaW5nIik7DQogDQogc3RhdGljIHN0 cnVjdCBzb2NrYWRkcl9pbiAqDQotaXBfZmluZHJvdXRlKHN0cnVjdCByb3V0 ZSAqcm8sIHN0cnVjdCBpbl9hZGRyIGRlc3QsIHN0cnVjdCBtYnVmICptKQ0K KyNpZmRlZiBSQURJWF9NUEFUSA0KK2lwX2ZpbmRyb3V0ZShzdHJ1Y3Qgcm91 dGUgKnJvLCB1aW50MzJfdCBoYXNoLCBzdHJ1Y3QgaW5fYWRkciBkZXN0LCBz dHJ1Y3QgbWJ1ZiAqbSwgc3RydWN0IHJ0bG9va3VwICpydGwpDQorI2Vsc2UN CitpcF9maW5kcm91dGUoc3RydWN0IHJvdXRlICpybywgc3RydWN0IGluX2Fk ZHIgZGVzdCwgc3RydWN0IG1idWYgKm0sIHN0cnVjdCBydGxvb2t1cCAqcnRs KQ0KKyNlbmRpZg0KIHsNCiAJc3RydWN0IHNvY2thZGRyX2luICpkc3Q7DQog CXN0cnVjdCBydGVudHJ5ICpydDsNCkBAIC0xMjYsNyArMTM0LDE2IEBADQog CWRzdC0+c2luX2ZhbWlseSA9IEFGX0lORVQ7DQogCWRzdC0+c2luX2xlbiA9 IHNpemVvZigqZHN0KTsNCiAJZHN0LT5zaW5fYWRkci5zX2FkZHIgPSBkZXN0 LnNfYWRkcjsNCi0JaW5fcnRhbGxvY19pZ24ocm8sIDAsIE1fR0VURklCKG0p KTsNCisNCisjaWZkZWYgUkFESVhfTVBBVEgNCisJaWYgKCFydGxvb2t1cF9t cGF0aF9maWIoKHN0cnVjdCBzb2NrYWRkciAqKWRzdCwNCisJCQloYXNoLCBN X0dFVEZJQihtKSwgIHJ0bCwgUlRMX1BLU0VOVCkpDQorI2Vsc2UNCisJaWYg KCFydGxvb2t1cF9maWIoIChzdHJ1Y3Qgc29ja2FkZHIgKilkc3QsIE1fR0VU RklCKG0pLCBydGwsIFJUTF9QS1NFTlQpKQ0KKyNlbmRpZg0KKwkJcm8tPnJv X3J0ID0gTlVMTDsNCisJZWxzZQ0KKwkJcm8tPnJvX3J0ID0gKHN0cnVjdCBy dGVudHJ5ICopcnRsOw0KIA0KIAkvKg0KIAkgKiBSb3V0ZSB0aGVyZSBhbmQg aW50ZXJmYWNlIHN0aWxsIHVwPw0KQEAgLTE0MCw5ICsxNTcsMTAgQEANCiAJ fSBlbHNlIHsNCiAJCUlQU1RBVF9JTkMoaXBzX25vcm91dGUpOw0KIAkJSVBT VEFUX0lOQyhpcHNfY2FudGZvcndhcmQpOw0KLQkJaWYgKHJ0KQ0KLQkJCVJU RlJFRShydCk7DQotCQlpY21wX2Vycm9yKG0sIElDTVBfVU5SRUFDSCwgSUNN UF9VTlJFQUNIX0hPU1QsIDAsIDApOw0KKwkJaWYgKGJhZHBvcnRfYmFuZGxp bShCQU5ETElNX0lDTVBfRldEX1VOUkVBQ0gpIDwgMCkNCisJCQltX2ZyZWVt KG0pOw0KKwkJZWxzZQ0KKwkJCWljbXBfZXJyb3IobSwgSUNNUF9VTlJFQUNI LCBJQ01QX1VOUkVBQ0hfSE9TVCwgMCwgMCk7DQogCQlyZXR1cm4gTlVMTDsN CiAJfQ0KIAlyZXR1cm4gZHN0Ow0KQEAgLTE2Nyw2ICsxODUsOCBAQA0KIAl1 X3Nob3J0IHN1bSwgaXBfbGVuOw0KIAlpbnQgZXJyb3IgPSAwOw0KIAlpbnQg aGxlbiwgbXR1Ow0KKwlzdHJ1Y3QgcnRsb29rdXAgcnRsOw0KKwlzdHJ1Y3Qg c29ja2FkZHJfZGwgZ2F0ZXdheTsNCiAjaWZkZWYgSVBGSVJFV0FMTF9GT1JX QVJEDQogCXN0cnVjdCBtX3RhZyAqZndkX3RhZzsNCiAjZW5kaWYNCkBAIC0y OTksOCArMzE5LDExIEBADQogCQlpZiAoaXBfZG9vcHRzID09IDEpDQogCQkJ cmV0dXJuIG07DQogCQllbHNlIGlmIChpcF9kb29wdHMgPT0gMikgew0KLQkJ CWljbXBfZXJyb3IobSwgSUNNUF9VTlJFQUNILCBJQ01QX1VOUkVBQ0hfRklM VEVSX1BST0hJQiwNCi0JCQkJMCwgMCk7DQorCQkJaWYgKGJhZHBvcnRfYmFu ZGxpbShCQU5ETElNX0lDTVBfRldEX0ZJTFRFUikgPCAwKQ0KKwkJCQltX2Zy ZWVtKG0pOw0KKwkJCWVsc2UNCisJCQkJaWNtcF9lcnJvcihtLCBJQ01QX1VO UkVBQ0gsDQorCQkJCQlJQ01QX1VOUkVBQ0hfRklMVEVSX1BST0hJQiwgMCwg MCk7DQogCQkJcmV0dXJuIE5VTEw7CS8qIG1idWYgYWxyZWFkeSBmcmVlJ2Qg Ki8NCiAJCX0NCiAJCS8qIGVsc2UgaWdub3JlIElQIG9wdGlvbnMgYW5kIGNv bnRpbnVlICovDQpAQCAtMzk5LDcgKzQyMiwxMSBAQA0KIAlpZiAoIVZfaXBz dGVhbHRoKSB7DQogI2VuZGlmDQogCWlmIChpcC0+aXBfdHRsIDw9IElQVFRM REVDKSB7DQotCQlpY21wX2Vycm9yKG0sIElDTVBfVElNWENFRUQsIElDTVBf VElNWENFRURfSU5UUkFOUywgMCwgMCk7DQorCQlpZiAoYmFkcG9ydF9iYW5k bGltKEJBTkRMSU1fSUNNUF9GV0RfVElNWENFRUQpIDwgMCkNCisJCQltX2Zy ZWVtKG0pOw0KKwkJZWxzZQ0KKwkJCWljbXBfZXJyb3IobSwgSUNNUF9USU1Y Q0VFRCwgSUNNUF9USU1YQ0VFRF9JTlRSQU5TLA0KKwkJCQkwLCAwKTsNCiAJ CXJldHVybiBOVUxMOwkvKiBtYnVmIGFscmVhZHkgZnJlZSdkICovDQogCX0N CiANCkBAIC00MjAsNyArNDQ3LDE2IEBADQogCS8qDQogCSAqIEZpbmQgcm91 dGUgdG8gZGVzdGluYXRpb24uDQogCSAqLw0KLQlpZiAoKGRzdCA9IGlwX2Zp bmRyb3V0ZSgmcm8sIGRlc3QsIG0pKSA9PSBOVUxMKQ0KKwliemVybyggJmdh dGV3YXksIHNpemVvZihnYXRld2F5KSk7DQorCWdhdGV3YXkuc2RsX2xlbiA9 IHNpemVvZihnYXRld2F5KTsNCisJcnRsLnJ0X2dhdGV3YXkgPSAoc3RydWN0 IHNvY2thZGRyICopJmdhdGV3YXk7DQorI2lmZGVmIFJBRElYX01QQVRIDQor CWlmICgoZHN0ID0gaXBfZmluZHJvdXRlKCZybywgbnRvaGwoaXAtPmlwX3Ny Yy5zX2FkZHIgXiBpcC0+aXBfZHN0LnNfYWRkciksDQorCQkJZGVzdCwgbSwg JnJ0bCkpID09IE5VTEwpDQorI2Vsc2UNCisJaWYgKChkc3QgPSBpcF9maW5k cm91dGUoJnJvLA0KKwkJCWRlc3QsIG0sICZydGwpKSA9PSBOVUxMKQ0KKyNl bmRpZg0KIAkJcmV0dXJuIE5VTEw7CS8qIGljbXAgdW5yZWFjaCBhbHJlYWR5 IHNlbnQgKi8NCiAJaWZwID0gcm8ucm9fcnQtPnJ0X2lmcDsNCiANCkBAIC00 NzYsOCArNTEyLDYgQEANCiAJCQkgKiAib3VycyItbGFiZWwuDQogCQkJICov DQogCQkJbS0+bV9mbGFncyB8PSBNX0ZBU1RGV0RfT1VSUzsNCi0JCQlpZiAo cm8ucm9fcnQpDQotCQkJCVJURlJFRShyby5yb19ydCk7DQogCQkJcmV0dXJu IG07DQogCQl9DQogCQkvKg0KQEAgLTQ5MCw4ICs1MjQsMTAgQEANCiAJCQlt X3RhZ19kZWxldGUobSwgZndkX3RhZyk7DQogCQl9DQogI2VuZGlmIC8qIElQ RklSRVdBTExfRk9SV0FSRCAqLw0KLQkJUlRGUkVFKHJvLnJvX3J0KTsNCi0J CWlmICgoZHN0ID0gaXBfZmluZHJvdXRlKCZybywgZGVzdCwgbSkpID09IE5V TEwpDQorCQliemVybyggJmdhdGV3YXksIHNpemVvZihnYXRld2F5KSk7DQor CQlnYXRld2F5LnNkbF9sZW4gPSBzaXplb2YoZ2F0ZXdheSk7DQorCQlydGwu cnRfZ2F0ZXdheSA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmZ2F0ZXdheTsNCisJ CWlmICgoZHN0ID0gaXBfZmluZHJvdXRlKCZybywgZGVzdCwgbSwgJnJ0bCkp ID09IE5VTEwpDQogCQkJcmV0dXJuIE5VTEw7CS8qIGljbXAgdW5yZWFjaCBh bHJlYWR5IHNlbnQgKi8NCiAJCWlmcCA9IHJvLnJvX3J0LT5ydF9pZnA7DQog CX0NCkBAIC01MDcsNiArNTQzLDggQEANCiAJaWYgKChyby5yb19ydC0+cnRf ZmxhZ3MgJiBSVEZfUkVKRUNUKSAmJg0KIAkgICAgKHJvLnJvX3J0LT5ydF9y bXgucm14X2V4cGlyZSA9PSAwIHx8DQogCSAgICB0aW1lX3VwdGltZSA8IHJv LnJvX3J0LT5ydF9ybXgucm14X2V4cGlyZSkpIHsNCisJCWlmIChiYWRwb3J0 X2JhbmRsaW0oQkFORExJTV9JQ01QX0ZXRF9VTlJFQUNIKSA8IDApDQorCQkJ Z290byBkcm9wOw0KIAkJaWNtcF9lcnJvcihtLCBJQ01QX1VOUkVBQ0gsIElD TVBfVU5SRUFDSF9IT1NULCAwLCAwKTsNCiAJCWdvdG8gY29uc3VtZWQ7DQog CX0NCkBAIC01MjcsNiArNTY1LDggQEANCiAJICogQ2hlY2sgaWYgbWVkaWEg bGluayBzdGF0ZSBvZiBpbnRlcmZhY2UgaXMgbm90IGRvd24NCiAJICovDQog CWlmIChpZnAtPmlmX2xpbmtfc3RhdGUgPT0gTElOS19TVEFURV9ET1dOKSB7 DQorCQlpZiAoYmFkcG9ydF9iYW5kbGltKEJBTkRMSU1fSUNNUF9GV0RfVU5S RUFDSCkgPCAwKQ0KKwkJCWdvdG8gZHJvcDsNCiAJCWljbXBfZXJyb3IobSwg SUNNUF9VTlJFQUNILCBJQ01QX1VOUkVBQ0hfSE9TVCwgMCwgMCk7DQogCQln b3RvIGNvbnN1bWVkOw0KIAl9DQpAQCAtNTU3LDggKzU5Nyw5IEBADQogCQkg Ki8NCiAJCWlmIChpcC0+aXBfb2ZmICYgSVBfREYpIHsNCiAJCQlJUFNUQVRf SU5DKGlwc19jYW50ZnJhZyk7DQotCQkJaWNtcF9lcnJvcihtLCBJQ01QX1VO UkVBQ0gsIElDTVBfVU5SRUFDSF9ORUVERlJBRywNCi0JCQkJMCwgbXR1KTsN CisJCQlpZiAoYmFkcG9ydF9iYW5kbGltKEJBTkRMSU1fSUNNUF9GV0RfTkVF REZSQUcpIDwgMCkNCisJCQkJZ290byBkcm9wOw0KKwkJCWljbXBfZXJyb3Io bSwgSUNNUF9VTlJFQUNILCBJQ01QX1VOUkVBQ0hfTkVFREZSQUcsIDAsIG10 dSk7DQogCQkJZ290byBjb25zdW1lZDsNCiAJCX0gZWxzZSB7DQogCQkJLyoN CkBAIC02MDYsMTIgKzY0Nyw5IEBADQogCQlJUFNUQVRfSU5DKGlwc19mYXN0 Zm9yd2FyZCk7DQogCX0NCiBjb25zdW1lZDoNCi0JUlRGUkVFKHJvLnJvX3J0 KTsNCiAJcmV0dXJuIE5VTEw7DQogZHJvcDoNCiAJaWYgKG0pDQogCQltX2Zy ZWVtKG0pOw0KLQlpZiAocm8ucm9fcnQpDQotCQlSVEZSRUUocm8ucm9fcnQp Ow0KIAlyZXR1cm4gTlVMTDsNCiB9DQpkaWZmIC11IC1yIC4uL3NyY19vcmdf OC4yXzIwMTEwMzI5L3N5cy9uZXRpbmV0L2lwX2ljbXAuYyAuL3N5cy9uZXRp bmV0L2lwX2ljbXAuYw0KLS0tIC4uL3NyY19vcmdfOC4yXzIwMTEwMzI5L3N5 cy9uZXRpbmV0L2lwX2ljbXAuYwkyMDEwLTA5LTIxIDIyOjMzOjMwLjAwMDAw MDAwMCArMDAwMA0KKysrIC4vc3lzL25ldGluZXQvaXBfaWNtcC5jCTIwMTEt MDQtMDQgMjM6MDE6NTcuMDAwMDAwMDAwICswMDAwDQpAQCAtOTU4LDcgKzk1 OCwxMSBAQA0KIAkJeyAiaWNtcCB0c3RhbXAgcmVzcG9uc2UiIH0sDQogCQl7 ICJjbG9zZWQgcG9ydCBSU1QgcmVzcG9uc2UiIH0sDQogCQl7ICJvcGVuIHBv cnQgUlNUIHJlc3BvbnNlIiB9LA0KLQkJeyAiaWNtcDYgdW5yZWFjaCByZXNw b25zZSIgfQ0KKwkJeyAiaWNtcDYgdW5yZWFjaCByZXNwb25zZSIgfSwNCisJ CXsgImZvcndhcmRpbmc6IGxpbWl0IHVucmVhY2hhYmxlIiB9LA0KKwkJeyAi Zm9yd2FyZGluZzogbGltaXQgdGltZS1leGNlZWRlZCIgfSwNCisJCXsgImZv cndhcmRpbmc6IGxpbWl0IG5lZWQtZnJhZyIgfSwNCisJCXsgImZvcndhcmRp bmc6IGxpbWl0IGFkbWluLXByb2hpYiIgfQ0KIAl9Ow0KIA0KIAkvKg0KZGlm ZiAtdSAtciAuLi9zcmNfb3JnXzguMl8yMDExMDMyOS9zeXMvbmV0aW5ldC9p cF9pbnB1dC5jIC4vc3lzL25ldGluZXQvaXBfaW5wdXQuYw0KLS0tIC4uL3Ny Y19vcmdfOC4yXzIwMTEwMzI5L3N5cy9uZXRpbmV0L2lwX2lucHV0LmMJMjAx MS0wMy0yOCAxNToyNjo1Mi4wMDAwMDAwMDAgKzAwMDANCisrKyAuL3N5cy9u ZXRpbmV0L2lwX2lucHV0LmMJMjAxMS0wNC0xNCAxNjoyODoyMi4wMDAwMDAw MDAgKzAwMDANCkBAIC03MSw2ICs3MSw3IEBADQogI2luY2x1ZGUgPG5ldGlu ZXQvaXBfdmFyLmg+DQogI2luY2x1ZGUgPG5ldGluZXQvaXBfZncuaD4NCiAj aW5jbHVkZSA8bmV0aW5ldC9pcF9pY21wLmg+DQorI2luY2x1ZGUgPG5ldGlu ZXQvaWNtcF92YXIuaD4NCiAjaW5jbHVkZSA8bmV0aW5ldC9pcF9vcHRpb25z Lmg+DQogI2luY2x1ZGUgPG1hY2hpbmUvaW5fY2tzdW0uaD4NCiAjaW5jbHVk ZSA8bmV0aW5ldC9pcF9jYXJwLmg+DQpAQCAtMTM0OCwyMCArMTM0OSwyNCBA QA0KIAlzdHJ1Y3Qgcm91dGUgc3JvOw0KIAlzdHJ1Y3Qgc29ja2FkZHJfaW4g KnNpbjsNCiAJc3RydWN0IGluX2lmYWRkciAqaWE7DQorCXN0cnVjdCBydGxv b2t1cCBydGw7DQorCXN0cnVjdCBzb2NrYWRkcl9kbCBnYXRld2F5Ow0KIA0K IAliemVybygmc3JvLCBzaXplb2Yoc3JvKSk7DQogCXNpbiA9IChzdHJ1Y3Qg c29ja2FkZHJfaW4gKikmc3JvLnJvX2RzdDsNCiAJc2luLT5zaW5fZmFtaWx5 ID0gQUZfSU5FVDsNCiAJc2luLT5zaW5fbGVuID0gc2l6ZW9mKCpzaW4pOw0K IAlzaW4tPnNpbl9hZGRyID0gZHN0Ow0KLQlpbl9ydGFsbG9jX2lnbigmc3Jv LCAwLCBmaWJudW0pOw0KLQ0KLQlpZiAoc3JvLnJvX3J0ID09IE5VTEwpDQor CQ0KKwliemVybyggJmdhdGV3YXksIHNpemVvZihnYXRld2F5KSk7DQorCWdh dGV3YXkuc2RsX2xlbiA9IHNpemVvZihnYXRld2F5KTsNCisJcnRsLnJ0X2dh dGV3YXkgPSAoc3RydWN0IHNvY2thZGRyICopJmdhdGV3YXk7DQorCWlmICgh cnRsb29rdXBfZmliKCAoc3RydWN0IHNvY2thZGRyICopJnNyby5yb19kc3Qs DQorCQkJZmlibnVtLCAmcnRsLCAwKSkNCiAJCXJldHVybiAoTlVMTCk7DQog DQotCWlhID0gaWZhdG9pYShzcm8ucm9fcnQtPnJ0X2lmYSk7DQorCWlhID0g aWZhdG9pYShydGwucnRfaWZhKTsNCiAJaWZhX3JlZigmaWEtPmlhX2lmYSk7 DQotCVJURlJFRShzcm8ucm9fcnQpOw0KIAlyZXR1cm4gKGlhKTsNCiB9DQog DQpAQCAtMTM5Nyw2ICsxNDAyLDggQEANCiAJc3RydWN0IGluX2FkZHIgZGVz dDsNCiAJc3RydWN0IHJvdXRlIHJvOw0KIAlpbnQgZXJyb3IsIHR5cGUgPSAw LCBjb2RlID0gMCwgbXR1ID0gMDsNCisJaW50IGljbXBfc2VuZCA9IDA7DQor CXN0cnVjdCBydGxvb2t1cCBydGw7DQogDQogCWlmIChtLT5tX2ZsYWdzICYg KE1fQkNBU1R8TV9NQ0FTVCkgfHwgaW5fY2FuZm9yd2FyZChpcC0+aXBfZHN0 KSA9PSAwKSB7DQogCQlJUFNUQVRfSU5DKGlwc19jYW50Zm9yd2FyZCk7DQpA QCAtMTQwNyw4ICsxNDE0LDExIEBADQogCWlmICghVl9pcHN0ZWFsdGgpIHsN CiAjZW5kaWYNCiAJCWlmIChpcC0+aXBfdHRsIDw9IElQVFRMREVDKSB7DQot CQkJaWNtcF9lcnJvcihtLCBJQ01QX1RJTVhDRUVELCBJQ01QX1RJTVhDRUVE X0lOVFJBTlMsDQotCQkJICAgIDAsIDApOw0KKwkJCWlmIChiYWRwb3J0X2Jh bmRsaW0oQkFORExJTV9JQ01QX0ZXRF9USU1YQ0VFRCkgPCAwKQ0KKwkJCQlt X2ZyZWVtKG0pOw0KKwkJCWVsc2UNCisJCQkJaWNtcF9lcnJvcihtLCBJQ01Q X1RJTVhDRUVELCBJQ01QX1RJTVhDRUVEX0lOVFJBTlMsDQorCQkJCQkwLCAw KTsNCiAJCQlyZXR1cm47DQogCQl9DQogI2lmZGVmIElQU1RFQUxUSA0KQEAg LTE0MjMsNyArMTQzMywxMCBAQA0KIAkgKiBpcF9vdXRwdXQgaW4gY2FzZSBv ZiBvdXRnb2luZyBJUHNlYyBwb2xpY3kuDQogCSAqLw0KIAlpZiAoIXNyY3J0 ICYmIGlhID09IE5VTEwpIHsNCi0JCWljbXBfZXJyb3IobSwgSUNNUF9VTlJF QUNILCBJQ01QX1VOUkVBQ0hfSE9TVCwgMCwgMCk7DQorCQlpZiAoYmFkcG9y dF9iYW5kbGltKEJBTkRMSU1fSUNNUF9GV0RfVU5SRUFDSCkgPCAwKQ0KKwkJ CW1fZnJlZW0obSk7DQorCQllbHNlDQorCQkJaWNtcF9lcnJvcihtLCBJQ01Q X1VOUkVBQ0gsIElDTVBfVU5SRUFDSF9IT1NULCAwLCAwKTsNCiAJCXJldHVy bjsNCiAJfQ0KICNlbmRpZg0KQEAgLTE0NzYsNiArMTQ4OSw4IEBADQogCSAq IGFuZCBpZiBwYWNrZXQgd2FzIG5vdCBzb3VyY2Ugcm91dGVkIChvciBoYXMg YW55IG9wdGlvbnMpLg0KIAkgKiBBbHNvLCBkb24ndCBzZW5kIHJlZGlyZWN0 IGlmIGZvcndhcmRpbmcgdXNpbmcgYSBkZWZhdWx0IHJvdXRlDQogCSAqIG9y IGEgcm91dGUgbW9kaWZpZWQgYnkgYSByZWRpcmVjdC4NCisJICogVGhpcyBw YXJ0IG9mIGNvZGUgYWxzbyBkbyBub3QgdXNlIHRoZSBydGxvb2t1cF9maWIs IGJlY2F1c2UNCisJICogcnRfbm9kZXMgaXMgbm90IHN1cHBvcnRlZC4NCiAJ ICovDQogCWRlc3Quc19hZGRyID0gMDsNCiAJaWYgKCFzcmNydCAmJiBWX2lw c2VuZHJlZGlyZWN0cyAmJg0KQEAgLTE1MTcsMTMgKzE1MzIsMTMgQEANCiAJ ICogdGhlIElDTVBfVU5SRUFDSF9ORUVERlJBRyAiTmV4dC1Ib3AgTVRVIiBm aWVsZCBkZXNjcmliZWQgaW4gUkZDMTE5MS4NCiAJICovDQogCWJ6ZXJvKCZy bywgc2l6ZW9mKHJvKSk7DQorCWJ6ZXJvKCZydGwsIHNpemVvZihydGwpKTsN CisJcm8ucm9fcnQgPSAoc3RydWN0IHJ0ZW50cnkgKikmcnRsOw0KIA0KLQll cnJvciA9IGlwX291dHB1dChtLCBOVUxMLCAmcm8sIElQX0ZPUldBUkRJTkcs IE5VTEwsIE5VTEwpOw0KKwllcnJvciA9IGlwX291dHB1dChtLCBOVUxMLCAm cm8sIElQX0ZPUldBUkRJTkcgfCBJUF9OT1JURlJFRSwgTlVMTCwgTlVMTCk7 DQogDQogCWlmIChlcnJvciA9PSBFTVNHU0laRSAmJiByby5yb19ydCkNCiAJ CW10dSA9IHJvLnJvX3J0LT5ydF9ybXgucm14X210dTsNCi0JaWYgKHJvLnJv X3J0KQ0KLQkJUlRGUkVFKHJvLnJvX3J0KTsNCiANCiAJaWYgKGVycm9yKQ0K IAkJSVBTVEFUX0lOQyhpcHNfY2FudGZvcndhcmQpOw0KQEAgLTE1NTgsMTEg KzE1NzMsMTMgQEANCiAJZGVmYXVsdDoNCiAJCXR5cGUgPSBJQ01QX1VOUkVB Q0g7DQogCQljb2RlID0gSUNNUF9VTlJFQUNIX0hPU1Q7DQorCQlpY21wX3Nl bmQgPSBiYWRwb3J0X2JhbmRsaW0oIEJBTkRMSU1fSUNNUF9GV0RfVU5SRUFD SCk7DQogCQlicmVhazsNCiANCiAJY2FzZSBFTVNHU0laRToNCiAJCXR5cGUg PSBJQ01QX1VOUkVBQ0g7DQogCQljb2RlID0gSUNNUF9VTlJFQUNIX05FRURG UkFHOw0KKwkJaWNtcF9zZW5kID0gYmFkcG9ydF9iYW5kbGltKCBCQU5ETElN X0lDTVBfRldEX05FRURGUkFHKTsNCiANCiAjaWZkZWYgSVBTRUMNCiAJCS8q IA0KQEAgLTE2MTgsNyArMTYzNSwxMCBAQA0KIAl9DQogCWlmIChpYSAhPSBO VUxMKQ0KIAkJaWZhX2ZyZWUoJmlhLT5pYV9pZmEpOw0KLQlpY21wX2Vycm9y KG1jb3B5LCB0eXBlLCBjb2RlLCBkZXN0LnNfYWRkciwgbXR1KTsNCisJaWYg KGljbXBfc2VuZCA8IDApDQorCQltX2ZyZWVtKG0pOw0KKwllbHNlDQorCQlp Y21wX2Vycm9yKG1jb3B5LCB0eXBlLCBjb2RlLCBkZXN0LnNfYWRkciwgbXR1 KTsNCiB9DQogDQogdm9pZA0KZGlmZiAtdSAtciAuLi9zcmNfb3JnXzguMl8y MDExMDMyOS9zeXMvbmV0aW5ldC9pcF9vdXRwdXQuYyAuL3N5cy9uZXRpbmV0 L2lwX291dHB1dC5jDQotLS0gLi4vc3JjX29yZ184LjJfMjAxMTAzMjkvc3lz L25ldGluZXQvaXBfb3V0cHV0LmMJMjAxMC0xMC0yNSAxMzoxNjoxMS4wMDAw MDAwMDAgKzAwMDANCisrKyAuL3N5cy9uZXRpbmV0L2lwX291dHB1dC5jCTIw MTEtMDQtMTQgMTY6Mjc6MzAuMDAwMDAwMDAwICswMDAwDQpAQCAtNTQsNiAr NTQsNyBAQA0KIA0KICNpbmNsdWRlIDxuZXQvaWYuaD4NCiAjaW5jbHVkZSA8 bmV0L2lmX2xsYXRibC5oPg0KKyNpbmNsdWRlIDxuZXQvaWZfZGwuaD4NCiAj aW5jbHVkZSA8bmV0L25ldGlzci5oPg0KICNpbmNsdWRlIDxuZXQvcGZpbC5o Pg0KICNpbmNsdWRlIDxuZXQvcm91dGUuaD4NCkBAIC0xMjgsOCArMTI5LDEz IEBADQogCXN0cnVjdCBpbl9pZmFkZHIgKmlhID0gTlVMTDsNCiAJaW50IGlz YnJvYWRjYXN0LCBzd19jc3VtOw0KIAlzdHJ1Y3Qgcm91dGUgaXByb3V0ZTsN CisJc3RydWN0IHJ0bG9va3VwIHJ0bG5ldzsNCisJc3RydWN0IHJ0bG9va3Vw ICpydGw7DQogCXN0cnVjdCBydGVudHJ5ICpydGU7CS8qIGNhY2hlIGZvciBy by0+cm9fcnQgKi8NCiAJc3RydWN0IGluX2FkZHIgb2RzdDsNCisJc3RydWN0 IHNvY2thZGRyX2RsIGdhdGV3YXk7DQorCWludCByb19wcm92aWRlZCA9IDE7 DQorCQ0KICNpZmRlZiBJUEZJUkVXQUxMX0ZPUldBUkQNCiAJc3RydWN0IG1f dGFnICpmd2RfdGFnID0gTlVMTDsNCiAjZW5kaWYNCkBAIC0xNDgsNyArMTU0 LDkgQEANCiAJfQ0KIA0KIAlpZiAocm8gPT0gTlVMTCkgew0KKwkJcm9fcHJv dmlkZWQgPSAwOw0KIAkJcm8gPSAmaXByb3V0ZTsNCisJCXJ0bCA9ICZydGxu ZXc7DQogCQliemVybyhybywgc2l6ZW9mICgqcm8pKTsNCiANCiAjaWZkZWYg RkxPV1RBQkxFDQpAQCAtMTY3LDcgKzE3NSwxNSBAQA0KIAkJCX0NCiAJCX0N CiAjZW5kaWYNCi0JfQ0KKwl9IGVsc2Ugew0KKwkJaWYgKHJvLT5yb19ydCAm JiAoZmxhZ3MgJiBJUF9OT1JURlJFRSkpIHsNCisJCSAgICAgICAgbm9ydGZy ZWUgPSAxOw0KKwkJCS8qIGV4dHJhY3QgcnRsIGZyb20gcHJvdmlkZWQgcm8s IGNsZWFyIHJvLT5yb19ydCBhZnRlcndhcmRzICovDQorCSAgICAgICAgCXJ0 bCA9IChzdHJ1Y3QgcnRsb29rdXAgKilyby0+cm9fcnQ7DQorCQkJcm8tPnJv X3J0ID0gTlVMTDsNCisJCX0gZWxzZQ0KKwkJCXJ0bCA9ICZydGxuZXc7DQor ICAgICAgICB9DQogDQogCWlmIChvcHQpIHsNCiAJCWxlbiA9IDA7DQpAQCAt MjcxLDE2ICsyODcsMzkgQEANCiAJCSAqIG9wZXJhdGlvbiAoYXMgaXQgaXMg Zm9yIEFSUCkuDQogCQkgKi8NCiAJCWlmIChydGUgPT0gTlVMTCkgew0KKwkJ CS8qIGNoZWNrIGlmIGNhbGxlciBkb2VzIG5vdCBmcmVlIHJvX3J0LCBhcyB0 aGUgICovDQorCQkJaWYgKChyb19wcm92aWRlZCkgJiYgKChmbGFncyAmIElQ X05PUlRGUkVFKSA9PSAwKSkgew0KKyNpZmRlZiBSQURJWF9NUEFUSA0KKwkJ CQlydGFsbG9jX21wYXRoX2ZpYihybywNCisJCQkJICAgIG50b2hsKGlwLT5p cF9zcmMuc19hZGRyIF4gaXAtPmlwX2RzdC5zX2FkZHIpLA0KKwkJCQkgICAg aW5wID8gaW5wLT5pbnBfaW5jLmluY19maWJudW0gOiBNX0dFVEZJQihtKSk7 DQorI2Vsc2UNCisJCQkJaW5fcnRhbGxvY19pZ24ocm8sIDAsDQorCQkJCSAg ICBpbnAgPyBpbnAtPmlucF9pbmMuaW5jX2ZpYm51bSA6IE1fR0VURklCKG0p KTsNCisjZW5kaWYNCisJCQkJcnRlID0gcm8tPnJvX3J0Ow0KKwkJCX0gZWxz ZSB7IC8qIGFscmlnaHQgLSB1c2UgdGhlIGZhc3QgbG9va3VwIGNvZGUgKi8N CisJCQkgICAgICAgIGJ6ZXJvKCAmZ2F0ZXdheSwgc2l6ZW9mKGdhdGV3YXkp KTsNCisJCQkgICAgICAgIGdhdGV3YXkuc2RsX2xlbiA9IHNpemVvZihnYXRl d2F5KTsNCisJCQkJcnRsLT5ydF9nYXRld2F5ID0gKHN0cnVjdCBzb2NrYWRk ciAqKSZnYXRld2F5Ow0KICNpZmRlZiBSQURJWF9NUEFUSA0KLQkJCXJ0YWxs b2NfbXBhdGhfZmliKHJvLA0KLQkJCSAgICBudG9obChpcC0+aXBfc3JjLnNf YWRkciBeIGlwLT5pcF9kc3Quc19hZGRyKSwNCi0JCQkgICAgaW5wID8gaW5w LT5pbnBfaW5jLmluY19maWJudW0gOiBNX0dFVEZJQihtKSk7DQorCQkJCWlm ICghcnRsb29rdXBfbXBhdGhfZmliKChzdHJ1Y3Qgc29ja2FkZHIgKilkc3Qs DQorCQkJCQkJbnRvaGwoaXAtPmlwX3NyYy5zX2FkZHIgXiBpcC0+aXBfZHN0 LnNfYWRkciksDQorCQkJCQkJaW5wID8gaW5wLT5pbnBfaW5jLmluY19maWJu dW0gOiBNX0dFVEZJQihtKSwNCisJCQkJCQlydGwsIFJUTF9QS1NFTlQpKQ0K ICNlbHNlDQotCQkJaW5fcnRhbGxvY19pZ24ocm8sIDAsDQotCQkJICAgIGlu cCA/IGlucC0+aW5wX2luYy5pbmNfZmlibnVtIDogTV9HRVRGSUIobSkpOw0K KwkJCQlpZiAoIXJ0bG9va3VwX2ZpYiggKHN0cnVjdCBzb2NrYWRkciAqKWRz dCwNCisJCQkJCQlpbnAgPyBpbnAtPmlucF9pbmMuaW5jX2ZpYm51bSA6IE1f R0VURklCKG0pLA0KKwkJCQkJCXJ0bCwgUlRMX1BLU0VOVCkpDQogI2VuZGlm DQotCQkJcnRlID0gcm8tPnJvX3J0Ow0KKwkJCQkgICAgICAgIHJvLT5yb19y dCA9IE5VTEw7DQorCQkJCWVsc2Ugew0KKwkJCQkJbm9ydGZyZWUgPSAxOw0K KwkJCQkJcm8tPnJvX3J0ID0gKHN0cnVjdCBydGVudHJ5ICopcnRsOw0KKwkJ CQl9DQorCQkJfQ0KIAkJfQ0KKwkJcnRlID0gcm8tPnJvX3J0Ow0KIAkJaWYg KHJ0ZSA9PSBOVUxMIHx8DQogCQkgICAgcnRlLT5ydF9pZnAgPT0gTlVMTCB8 fA0KIAkJICAgICFSVF9MSU5LX0lTX1VQKHJ0ZS0+cnRfaWZwKSkgew0KZGlm ZiAtdSAtciAuLi9zcmNfb3JnXzguMl8yMDExMDMyOS9zeXMvbmV0aW5ldC9p cF92YXIuaCAuL3N5cy9uZXRpbmV0L2lwX3Zhci5oDQotLS0gLi4vc3JjX29y Z184LjJfMjAxMTAzMjkvc3lzL25ldGluZXQvaXBfdmFyLmgJMjAxMC0wOS0x OCAwMTo1NDoyOC4wMDAwMDAwMDAgKzAwMDANCisrKyAuL3N5cy9uZXRpbmV0 L2lwX3Zhci5oCTIwMTEtMDQtMDcgMDI6MjI6MDUuMDAwMDAwMDAwICswMDAw DQpAQCAtMTU3LDYgKzE1Nyw3IEBADQogI2RlZmluZQlJUF9TRU5EVE9JRgkJ MHg4CQkvKiBzZW5kIG9uIHNwZWNpZmljIGlmbmV0ICovDQogI2RlZmluZSBJ UF9ST1VURVRPSUYJCVNPX0RPTlRST1VURQkvKiAweDEwIGJ5cGFzcyByb3V0 aW5nIHRhYmxlcyAqLw0KICNkZWZpbmUgSVBfQUxMT1dCUk9BRENBU1QJU09f QlJPQURDQVNUCS8qIDB4MjAgY2FuIHNlbmQgYnJvYWRjYXN0IHBhY2tldHMg Ki8NCisjZGVmaW5lIElQX05PUlRGUkVFCQkweDQwCQkvKiBjYWxsZXIgZG9l cyBub3QgZnJlZSByb19ydCB2aWEgUlRGUkVFICovDQogDQogLyoNCiAgKiBt YnVmIGZsYWcgdXNlZCBieSBpcF9mYXN0ZndkDQpkaWZmIC11IC1yIC4uL3Ny Y19vcmdfOC4yXzIwMTEwMzI5L3N5cy9uZXRpbmV0L2lwZncvaXBfZndfdGFi bGUuYyAuL3N5cy9uZXRpbmV0L2lwZncvaXBfZndfdGFibGUuYw0KLS0tIC4u L3NyY19vcmdfOC4yXzIwMTEwMzI5L3N5cy9uZXRpbmV0L2lwZncvaXBfZndf dGFibGUuYwkyMDEwLTAzLTIzIDA5OjU4OjU5LjAwMDAwMDAwMCArMDAwMA0K KysrIC4vc3lzL25ldGluZXQvaXBmdy9pcF9md190YWJsZS5jCTIwMTEtMDQt MDMgMTY6MDc6NTcuMDAwMDAwMDAwICswMDAwDQpAQCAtMTM3LDcgKzEzNyw3 IEBADQogCW1hc2suc2luX2FkZHIuc19hZGRyID0gaHRvbmwobWxlbiA/IH4o KDEgPDwgKDMyIC0gbWxlbikpIC0gMSkgOiAwKTsNCiAJc2Euc2luX2FkZHIu c19hZGRyID0gYWRkciAmIG1hc2suc2luX2FkZHIuc19hZGRyOw0KIAlJUEZX X1dMT0NLKGNoKTsNCi0JZW50ID0gKHN0cnVjdCB0YWJsZV9lbnRyeSAqKXJu aC0+cm5oX2RlbGFkZHIoJnNhLCAmbWFzaywgcm5oKTsNCisJZW50ID0gKHN0 cnVjdCB0YWJsZV9lbnRyeSAqKXJuaC0+cm5oX2RlbGFkZHIoJnNhLCAmbWFz aywgcm5oLCBOVUxMKTsNCiAJaWYgKGVudCA9PSBOVUxMKSB7DQogCQlJUEZX X1dVTkxPQ0soY2gpOw0KIAkJcmV0dXJuIChFU1JDSCk7DQpAQCAtMTU0LDcg KzE1NCw3IEBADQogCXN0cnVjdCB0YWJsZV9lbnRyeSAqZW50Ow0KIA0KIAll bnQgPSAoc3RydWN0IHRhYmxlX2VudHJ5ICopDQotCSAgICBybmgtPnJuaF9k ZWxhZGRyKHJuLT5ybl9rZXksIHJuLT5ybl9tYXNrLCBybmgpOw0KKwkgICAg cm5oLT5ybmhfZGVsYWRkcihybi0+cm5fa2V5LCBybi0+cm5fbWFzaywgcm5o LCBOVUxMKTsNCiAJaWYgKGVudCAhPSBOVUxMKQ0KIAkJZnJlZShlbnQsIE1f SVBGV19UQkwpOw0KIAlyZXR1cm4gKDApOw0KZGlmZiAtdSAtciAuLi9zcmNf b3JnXzguMl8yMDExMDMyOS9zeXMvbmV0aW5ldDYvaW42X2lmYXR0YWNoLmMg Li9zeXMvbmV0aW5ldDYvaW42X2lmYXR0YWNoLmMNCi0tLSAuLi9zcmNfb3Jn XzguMl8yMDExMDMyOS9zeXMvbmV0aW5ldDYvaW42X2lmYXR0YWNoLmMJMjAx MC0wNS0wNiAwNjo0NDoxOS4wMDAwMDAwMDAgKzAwMDANCisrKyAuL3N5cy9u ZXRpbmV0Ni9pbjZfaWZhdHRhY2guYwkyMDExLTA0LTAzIDE2OjA3OjU3LjAw MDAwMDAwMCArMDAwMA0KQEAgLTQyLDYgKzQyLDggQEANCiAjaW5jbHVkZSA8 c3lzL3Byb2MuaD4NCiAjaW5jbHVkZSA8c3lzL3N5c2xvZy5oPg0KICNpbmNs dWRlIDxzeXMvbWQ1Lmg+DQorI2luY2x1ZGUgPHN5cy9sb2NrLmg+DQorI2lu Y2x1ZGUgPHN5cy9ybWxvY2suaD4NCiANCiAjaW5jbHVkZSA8bmV0L2lmLmg+ DQogI2luY2x1ZGUgPG5ldC9pZl9kbC5oPg0KZGlmZiAtdSAtciAuLi9zcmNf b3JnXzguMl8yMDExMDMyOS9zeXMvbmV0aW5ldDYvaW42X3JteC5jIC4vc3lz L25ldGluZXQ2L2luNl9ybXguYw0KLS0tIC4uL3NyY19vcmdfOC4yXzIwMTEw MzI5L3N5cy9uZXRpbmV0Ni9pbjZfcm14LmMJMjAxMC0xMC0xMSAxMToyNToz Ny4wMDAwMDAwMDAgKzAwMDANCisrKyAuL3N5cy9uZXRpbmV0Ni9pbjZfcm14 LmMJMjAxMS0wNC0wMyAxNjowNzo1Ny4wMDAwMDAwMDAgKzAwMDANCkBAIC04 Nyw2ICs4Nyw3IEBADQogI2luY2x1ZGUgPHN5cy9yd2xvY2suaD4NCiAjaW5j bHVkZSA8c3lzL3N5c2xvZy5oPg0KICNpbmNsdWRlIDxzeXMvY2FsbG91dC5o Pg0KKyNpbmNsdWRlIDxzeXMvcm1sb2NrLmg+DQogDQogI2luY2x1ZGUgPG5l dC9pZi5oPg0KICNpbmNsdWRlIDxuZXQvcm91dGUuaD4NCmRpZmYgLXUgLXIg Li4vc3JjX29yZ184LjJfMjAxMTAzMjkvc3lzL25ldGluZXQ2L2luNl9zcmMu YyAuL3N5cy9uZXRpbmV0Ni9pbjZfc3JjLmMNCi0tLSAuLi9zcmNfb3JnXzgu Ml8yMDExMDMyOS9zeXMvbmV0aW5ldDYvaW42X3NyYy5jCTIwMTEtMDQtMTIg MTM6MDI6MDQuMDAwMDAwMDAwICswMDAwDQorKysgLi9zeXMvbmV0aW5ldDYv aW42X3NyYy5jCTIwMTEtMDQtMTQgMTY6MzA6MjEuMDAwMDAwMDAwICswMDAw DQpAQCAtNTE4LDEwICs1MTgsMTAgQEANCiAJaWYgKGRzdHNvY2stPnNpbjZf YWRkci5zNl9hZGRyMzJbMF0gPT0gMCAmJg0KIAkgICAgZHN0c29jay0+c2lu Nl9hZGRyLnM2X2FkZHIzMlsxXSA9PSAwICYmDQogCSAgICAhSU42X0lTX0FE RFJfTE9PUEJBQ0soJmRzdHNvY2stPnNpbjZfYWRkcikpIHsNCi0JCXByaW50 ZigiaW42X3NlbGVjdHJvdXRlOiBzdHJhbmdlIGRlc3RpbmF0aW9uICVzXG4i LA0KKwkJcHJpbnRmKCJzZWxlY3Ryb3V0ZTogc3RyYW5nZSBkZXN0aW5hdGlv biAlc1xuIiwNCiAJCSAgICAgICBpcDZfc3ByaW50ZihpcDZidWYsICZkc3Rz b2NrLT5zaW42X2FkZHIpKTsNCiAJfSBlbHNlIHsNCi0JCXByaW50ZigiaW42 X3NlbGVjdHJvdXRlOiBkZXN0aW5hdGlvbiA9ICVzJSUlZFxuIiwNCisJCXBy aW50Zigic2VsZWN0cm91dGU6IGRlc3RpbmF0aW9uID0gJXMlJSVkXG4iLA0K IAkJICAgICAgIGlwNl9zcHJpbnRmKGlwNmJ1ZiwgJmRzdHNvY2stPnNpbjZf YWRkciksDQogCQkgICAgICAgZHN0c29jay0+c2luNl9zY29wZV9pZCk7IC8q IGZvciBkZWJ1ZyAqLw0KIAl9DQpAQCAtODAyLDkgKzgwMiwyNTkgQEANCiAg ICAgc3RydWN0IGlwNl9tb3B0aW9ucyAqbW9wdHMsIHN0cnVjdCByb3V0ZV9p bjYgKnJvLA0KICAgICBzdHJ1Y3QgaWZuZXQgKipyZXRpZnAsIHN0cnVjdCBy dGVudHJ5ICoqcmV0cnQpDQogew0KKyAgICAgICAgcmV0dXJuIChzZWxlY3Ry b3V0ZShkc3Rzb2NrLCBvcHRzLCBtb3B0cywgcm8sIHJldGlmcCwNCisgICAg ICAgICAgICByZXRydCwgMCkpOw0KK30NCisgDQorLyogUHJvdmlkZXMgZmFz dCBidXQgbWluaW1hbCBhY2Nlc3MgdG8gcm91dGluZyB0YWJsZS4NCisgKiBi YXNlZCBhdCBzZWxlY3Ryb3V0ZQ0KKyAqIFhYWCByZW1vdmUgYW5kIGRvIGxv b2t1cCBkaXJlY3QgaW4gaXA2X291dHB1dA0KKyAqLw0KK2ludA0KK2luNl9s b29rdXAoc3RydWN0IHNvY2thZGRyX2luNiAqZHN0c29jaywgc3RydWN0IGlw Nl9wa3RvcHRzICpvcHRzLA0KKyAgICBzdHJ1Y3QgaXA2X21vcHRpb25zICpt b3B0cywgc3RydWN0IHJvdXRlX2luNiAqcm8sIHN0cnVjdCBydGxvb2t1cCAq cnRsLA0KKyAgICBzdHJ1Y3QgaWZuZXQgKipyZXRpZnAsIHN0cnVjdCBydGVu dHJ5ICoqcmV0cnQpDQorew0KKyAgICAgICBpbnQgZXJyb3IgPSAwOw0KKyAg ICAgICBzdHJ1Y3QgaWZuZXQgKmlmcCA9IE5VTEw7DQorICAgICAgIHN0cnVj dCBydGVudHJ5ICpydCA9IE5VTEw7DQorICAgICAgIHN0cnVjdCBzb2NrYWRk cl9pbjYgKnNpbjZfbmV4dDsNCisgICAgICAgc3RydWN0IGluNl9wa3RpbmZv ICpwaSA9IE5VTEw7DQorICAgICAgIHN0cnVjdCBpbjZfYWRkciAqZHN0ID0g JmRzdHNvY2stPnNpbjZfYWRkcjsNCisgICAgICAgaW50IG5vcm91dGVvayA9 IDA7DQorICAgICAgIHVuc2lnbmVkIGNoYXIgc2FfbGVuID0gcnRsLT5ydF9n YXRld2F5LT5zYV9sZW47DQorI2lmIDANCisgICAgICAgY2hhciBpcDZidWZb SU5FVDZfQUREUlNUUkxFTl07DQorDQorICAgICAgIGlmIChkc3Rzb2NrLT5z aW42X2FkZHIuczZfYWRkcjMyWzBdID09IDAgJiYNCisgICAgICAgICAgIGRz dHNvY2stPnNpbjZfYWRkci5zNl9hZGRyMzJbMV0gPT0gMCAmJg0KKyAgICAg ICAgICAgIUlONl9JU19BRERSX0xPT1BCQUNLKCZkc3Rzb2NrLT5zaW42X2Fk ZHIpKSB7DQorICAgICAgICAgICAgICAgcHJpbnRmKCJpbjZfbG9va3VwOiBz dHJhbmdlIGRlc3RpbmF0aW9uICVzXG4iLA0KKyAgICAgICAgICAgICAgICAg ICAgICBpcDZfc3ByaW50ZihpcDZidWYsICZkc3Rzb2NrLT5zaW42X2FkZHIp KTsNCisgICAgICAgfSBlbHNlIHsNCisgICAgICAgICAgICAgICBwcmludGYo ImluNl9sb29rdXA6IGRlc3RpbmF0aW9uID0gJXMlJSVkXG4iLA0KKyAgICAg ICAgICAgICAgICAgICAgICBpcDZfc3ByaW50ZihpcDZidWYsICZkc3Rzb2Nr LT5zaW42X2FkZHIpLA0KKyAgICAgICAgICAgICAgICAgICAgICBkc3Rzb2Nr LT5zaW42X3Njb3BlX2lkKTsgLyogZm9yIGRlYnVnICovDQorICAgICAgIH0N CisjZW5kaWYNCisNCisgICAgICAgLyogSWYgdGhlIGNhbGxlciBzcGVjaWZ5 IHRoZSBvdXRnb2luZyBpbnRlcmZhY2UgZXhwbGljaXRseSwgdXNlIGl0LiAq Lw0KKyAgICAgICBpZiAob3B0cyAmJiAocGkgPSBvcHRzLT5pcDZwb19wa3Rp bmZvKSAhPSBOVUxMICYmIHBpLT5pcGk2X2lmaW5kZXgpIHsNCisgICAgICAg ICAgICAgICAvKiBYWFggYm91bmRhcnkgY2hlY2sgaXMgYXNzdW1lZCB0byBi ZSBhbHJlYWR5IGRvbmUuICovDQorICAgICAgICAgICAgICAgaWZwID0gaWZu ZXRfYnlpbmRleChwaS0+aXBpNl9pZmluZGV4KTsNCisgICAgICAgICAgICAg ICBpZiAoaWZwICE9IE5VTEwgJiYNCisgICAgICAgICAgICAgICAgICAgKG5v cm91dGVvayB8fCByZXRydCA9PSBOVUxMIHx8DQorICAgICAgICAgICAgICAg ICAgIElONl9JU19BRERSX01VTFRJQ0FTVChkc3QpKSkgew0KKyAgICAgICAg ICAgICAgICAgICAgICAgLyoNCisgICAgICAgICAgICAgICAgICAgICAgICAq IHdlIGRvIG5vdCBoYXZlIHRvIGNoZWNrIG9yIGdldCB0aGUgcm91dGUgZm9y DQorICAgICAgICAgICAgICAgICAgICAgICAgKiBtdWx0aWNhc3QuDQorICAg ICAgICAgICAgICAgICAgICAgICAgKi8NCisgICAgICAgICAgICAgICAgICAg ICAgIGdvdG8gZG9uZTsNCisgICAgICAgICAgICAgICB9IGVsc2UNCisgICAg ICAgICAgICAgICAgICAgICAgIGdvdG8gZ2V0cm91dGU7DQorICAgICAgIH0N CisNCisgICAgICAgLyoNCisgICAgICAgICogSWYgdGhlIGRlc3RpbmF0aW9u IGFkZHJlc3MgaXMgYSBtdWx0aWNhc3QgYWRkcmVzcyBhbmQgdGhlIG91dGdv aW5nDQorICAgICAgICAqIGludGVyZmFjZSBmb3IgdGhlIGFkZHJlc3MgaXMg c3BlY2lmaWVkIGJ5IHRoZSBjYWxsZXIsIHVzZSBpdC4NCisgICAgICAgICov DQorICAgICAgIGlmIChJTjZfSVNfQUREUl9NVUxUSUNBU1QoZHN0KSAmJg0K KyAgICAgICAgICAgbW9wdHMgIT0gTlVMTCAmJiAoaWZwID0gbW9wdHMtPmlt Nm9fbXVsdGljYXN0X2lmcCkgIT0gTlVMTCkgew0KKyAgICAgICAgICAgICAg IGdvdG8gZG9uZTsgLyogd2UgZG8gbm90IG5lZWQgYSByb3V0ZSBmb3IgbXVs dGljYXN0LiAqLw0KKyAgICAgICB9DQorDQorICBnZXRyb3V0ZToNCisgICAg ICAgLyoNCisgICAgICAgICogSWYgdGhlIG5leHQgaG9wIGFkZHJlc3MgZm9y IHRoZSBwYWNrZXQgaXMgc3BlY2lmaWVkIGJ5IHRoZSBjYWxsZXIsDQorICAg ICAgICAqIHVzZSBpdCBhcyB0aGUgZ2F0ZXdheS4NCisgICAgICAgICovDQor ICAgICAgIGlmIChvcHRzICYmIG9wdHMtPmlwNnBvX25leHRob3ApIHsNCisg ICAgICAgICAgICAgICBzdHJ1Y3Qgcm91dGVfaW42ICpyb247DQorICAgICAg ICAgICAgICAgc3RydWN0IGxsZW50cnkgKmxhOw0KKyAgICAgICAgICAgDQor ICAgICAgICAgICAgICAgc2luNl9uZXh0ID0gc2F0b3NpbjYob3B0cy0+aXA2 cG9fbmV4dGhvcCk7DQorICAgICAgICAgICAgICAgDQorICAgICAgICAgICAg ICAgLyogYXQgdGhpcyBtb21lbnQsIHdlIG9ubHkgc3VwcG9ydCBBRl9JTkVU NiBuZXh0IGhvcHMgKi8NCisgICAgICAgICAgICAgICBpZiAoc2luNl9uZXh0 LT5zaW42X2ZhbWlseSAhPSBBRl9JTkVUNikgew0KKyAgICAgICAgICAgICAg ICAgICAgICAgZXJyb3IgPSBFQUZOT1NVUFBPUlQ7IC8qIG9yIHNob3VsZCB3 ZSBwcm9jZWVkPyAqLw0KKyAgICAgICAgICAgICAgICAgICAgICAgZ290byBk b25lOw0KKyAgICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICAv Kg0KKyAgICAgICAgICAgICAgICAqIElmIHRoZSBuZXh0IGhvcCBpcyBhbiBJ UHY2IGFkZHJlc3MsIHRoZW4gdGhlIG5vZGUgaWRlbnRpZmllZA0KKyAgICAg ICAgICAgICAgICAqIGJ5IHRoYXQgYWRkcmVzcyBtdXN0IGJlIGEgbmVpZ2hi b3Igb2YgdGhlIHNlbmRpbmcgaG9zdC4NCisgICAgICAgICAgICAgICAgKi8N CisgICAgICAgICAgICAgICByb24gPSAmb3B0cy0+aXA2cG9fbmV4dHJvdXRl Ow0KKyAgICAgICAgICAgICAgIC8qDQorICAgICAgICAgICAgICAgICogWFhY IHdoYXQgZG8gd2UgZG8gaGVyZT8NCisgICAgICAgICAgICAgICAgKiBQTFog dG8gYmUgZml4aW5nDQorICAgICAgICAgICAgICAgICovDQorDQorICAgICAg ICAgICAgICAgaWYgKHJvbi0+cm9fcnQgPT0gTlVMTCkgew0KKyAgICAgICAg ICAgICAgICAgICAgICAgYnplcm8oIHJ0bC0+cnRfZ2F0ZXdheSwgc2FfbGVu KTsNCisgICAgICAgICAgICAgICAgICAgICAgIHJ0bC0+cnRfZ2F0ZXdheS0+ c2FfbGVuID0gc2FfbGVuOw0KKyAgICAgICAgICAgICAgICAgICAgICAgaWYg KCFydGxvb2t1cF9maWIoIChzdHJ1Y3Qgc29ja2FkZHIgKikmcm9uLT5yb19k c3QsIDBVLCAvKiBtdWx0aSBwYXRoIGNhc2U/ICovDQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcnRsLCBSVExfUEtTRU5UKSkg ew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb24tPnJvX3J0 ID0gTlVMTDsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJy b3IgPSBFSE9TVFVOUkVBQ0g7DQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGdvdG8gZG9uZTsNCisgICAgICAgICAgICAgICAgICAgICAgIH0g ZWxzZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb24tPnJv X3J0ID0gKHN0cnVjdCBydGVudHJ5ICopIHJ0bDsNCisgICAgICAgICAgICAg ICB9DQorDQorICAgICAgICAgICAgICAgcnQgPSByb24tPnJvX3J0Ow0KKyAg ICAgICAgICAgICAgIGlmcCA9IHJ0LT5ydF9pZnA7DQorICAgICAgICAgICAg ICAgSUZfQUZEQVRBX0xPQ0soaWZwKTsNCisgICAgICAgICAgICAgICBsYSA9 IGxsYV9sb29rdXAoTExUQUJMRTYoaWZwKSwgMCwgKHN0cnVjdCBzb2NrYWRk ciAqKSZzaW42X25leHQtPnNpbjZfYWRkcik7DQorICAgICAgICAgICAgICAg SUZfQUZEQVRBX1VOTE9DSyhpZnApOw0KKyAgICAgICAgICAgICAgIGlmIChs YSAhPSBOVUxMKSANCisgICAgICAgICAgICAgICAgICAgICAgIExMRV9SVU5M T0NLKGxhKTsNCisgICAgICAgICAgICAgICBlbHNlIHsNCisgICAgICAgICAg ICAgICAgICAgICAgIGVycm9yID0gRUhPU1RVTlJFQUNIOw0KKyAgICAgICAg ICAgICAgICAgICAgICAgZ290byBkb25lOw0KKyAgICAgICAgICAgICAgIH0N CisjaWYgMA0KKyAgICAgICAgICAgICAgIGlmICgocm9uLT5yb19ydCAmJg0K KyAgICAgICAgICAgICAgICAgICAocm9uLT5yb19ydC0+cnRfZmxhZ3MgJiAo UlRGX1VQIHwgUlRGX0xMSU5GTykpICE9DQorICAgICAgICAgICAgICAgICAg IChSVEZfVVAgfCBSVEZfTExJTkZPKSkgfHwNCisgICAgICAgICAgICAgICAg ICAgIUlONl9BUkVfQUREUl9FUVVBTCgmc2F0b3NpbjYoJnJvbi0+cm9fZHN0 KS0+c2luNl9hZGRyLA0KKyAgICAgICAgICAgICAgICAgICAmc2luNl9uZXh0 LT5zaW42X2FkZHIpKSB7DQorICAgICAgICAgICAgICAgICAgICAgICBpZiAo cm9uLT5yb19ydCkNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cm9uLT5yb19ydCA9IE5VTEw7DQorICAgICAgICAgICAgICAgICAgICAgICAq c2F0b3NpbjYoJnJvbi0+cm9fZHN0KSA9ICpzaW42X25leHQ7DQorICAgICAg ICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgIGlmIChyb24tPnJvX3J0ID09 IE5VTEwpIHsNCisgICAgICAgICAgICAgICAgICAgICAgIGJ6ZXJvKCBydGwt PnJ0X2dhdGV3YXksIHNhX2xlbik7DQorICAgICAgICAgICAgICAgICAgICAg ICBydGwtPnJ0X2dhdGV3YXktPnNhX2xlbiA9IHNhX2xlbjsNCisgICAgICAg ICAgICAgICAgICAgICAgIGlmICghcnRsb29rdXBfZmliKCAoc3RydWN0IHNv Y2thZGRyICopJnJvbi0+cm9fZHN0LCAwVSwNCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBydGwsIFJUTF9QS1NFTlQpKSB7DQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvbi0+cm9fcnQgPSBO VUxMOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9 IEVIT1NUVU5SRUFDSDsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZ290byBkb25lOw0KKyAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNl IHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9uLT5yb19y dCA9IChzdHJ1Y3QgcnRlbnRyeSAqKSBydGw7DQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGlmICghKHJvbi0+cm9fcnQtPnJ0X2ZsYWdzICYg UlRGX0xMSU5GTykpIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICByb24tPnJvX3J0ID0gTlVMTDsNCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IEVIT1NUVU5SRUFD SDsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn b3RvIGRvbmU7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9 DQorICAgICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAg fQ0KKyNlbmRpZg0KKw0KKyAgICAgICAgICAgICAgIC8qDQorICAgICAgICAg ICAgICAgICogV2hlbiBjbG9uaW5nIGlzIHJlcXVpcmVkLCB0cnkgdG8gYWxs b2NhdGUgYSByb3V0ZSB0byB0aGUNCisgICAgICAgICAgICAgICAgKiBkZXN0 aW5hdGlvbiBzbyB0aGF0IHRoZSBjYWxsZXIgY2FuIHN0b3JlIHBhdGggTVRV DQorICAgICAgICAgICAgICAgICogaW5mb3JtYXRpb24uDQorICAgICAgICAg ICAgICAgICovDQorICAgICAgICAgICAgICAgZ290byBkb25lOw0KKyAgICAg ICB9DQorDQorICAgICAgIC8qDQorICAgICAgICAqIFVzZSBhIGNhY2hlZCBy b3V0ZSBpZiBpdCBleGlzdHMgYW5kIGlzIHZhbGlkLCBlbHNlIHRyeSB0byBh bGxvY2F0ZQ0KKyAgICAgICAgKiBhIG5ldyBvbmUuICBOb3RlIHRoYXQgd2Ug c2hvdWxkIGNoZWNrIHRoZSBhZGRyZXNzIGZhbWlseSBvZiB0aGUNCisgICAg ICAgICogY2FjaGVkIGRlc3RpbmF0aW9uLCBpbiBjYXNlIG9mIHNoYXJpbmcg dGhlIGNhY2hlIHdpdGggSVB2NC4NCisgICAgICAgICovDQorICAgICAgIGlm IChybykgew0KKyAgICAgICAgICAgICAgIGlmIChyby0+cm9fcnQgJiYNCisg ICAgICAgICAgICAgICAgICAgKCEocm8tPnJvX3J0LT5ydF9mbGFncyAmIFJU Rl9VUCkgfHwNCisgICAgICAgICAgICAgICAgICAgICgoc3RydWN0IHNvY2th ZGRyICopKCZyby0+cm9fZHN0KSktPnNhX2ZhbWlseSAhPSBBRl9JTkVUNiB8 fA0KKyAgICAgICAgICAgICAgICAgICAgIUlONl9BUkVfQUREUl9FUVVBTCgm c2F0b3NpbjYoJnJvLT5yb19kc3QpLT5zaW42X2FkZHIsDQorICAgICAgICAg ICAgICAgICAgICBkc3QpKSkNCisgICAgICAgICAgICAgICAgICAgICAgIHJv LT5yb19ydCA9IChzdHJ1Y3QgcnRlbnRyeSAqKU5VTEw7DQorICAgICAgICAg ICAgICAgaWYgKHJvLT5yb19ydCA9PSAoc3RydWN0IHJ0ZW50cnkgKilOVUxM KSB7DQorICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJf aW42ICpzYTY7DQorDQorICAgICAgICAgICAgICAgICAgICAgICAvKiBObyBy b3V0ZSB5ZXQsIHNvIHRyeSB0byBhY3F1aXJlIG9uZSAqLw0KKyAgICAgICAg ICAgICAgICAgICAgICAgYnplcm8oJnJvLT5yb19kc3QsIHNpemVvZihzdHJ1 Y3Qgc29ja2FkZHJfaW42KSk7DQorICAgICAgICAgICAgICAgICAgICAgICBz YTYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSZyby0+cm9fZHN0Ow0KKyAg ICAgICAgICAgICAgICAgICAgICAgKnNhNiA9ICpkc3Rzb2NrOw0KKyAgICAg ICAgICAgICAgICAgICAgICAgc2E2LT5zaW42X3Njb3BlX2lkID0gMDsNCisN CisgICAgICAgICAgICAgICAgICAgICAgIGJ6ZXJvKCBydGwtPnJ0X2dhdGV3 YXksIHNhX2xlbik7DQorICAgICAgICAgICAgICAgICAgICAgICBydGwtPnJ0 X2dhdGV3YXktPnNhX2xlbiA9IHNhX2xlbjsNCisjaWZkZWYgUkFESVhfTVBB VEgNCisgICAgICAgICAgICAgICAgICAgICAgIGlmICghcnRsb29rdXBfbXBh dGhfZmliKChzdHJ1Y3Qgc29ja2FkZHIgKikmcm8tPnJvX2RzdCwNCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudG9obChzYTYt PnNpbjZfYWRkci5zNl9hZGRyMzJbM10pLA0KKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDBVLCBydGwsIFJUTF9QS1NFTlQpKQ0K KyNlbHNlDQorICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJ0bG9va3Vw X2ZpYigoc3RydWN0IHNvY2thZGRyICopJnJvLT5yb19kc3QsIDBVLA0KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ0bCwgUlRM X1BLU0VOVCkpDQorI2VuZGlmDQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHJvLT5yb19ydCA9IE5VTEw7DQorICAgICAgICAgICAgICAgICAg ICAgICBlbHNlDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJv LT5yb19ydCA9IChzdHJ1Y3QgcnRlbnRyeSAqKSBydGw7DQorICAgICAgICAg ICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCisg ICAgICAgICAgICAgICAvKg0KKyAgICAgICAgICAgICAgICAqIGRvIG5vdCBj YXJlIGFib3V0IHRoZSByZXN1bHQgaWYgd2UgaGF2ZSB0aGUgbmV4dGhvcA0K KyAgICAgICAgICAgICAgICAqIGV4cGxpY2l0bHkgc3BlY2lmaWVkLg0KKyAg ICAgICAgICAgICAgICAqLw0KKyAgICAgICAgICAgICAgIGlmIChvcHRzICYm IG9wdHMtPmlwNnBvX25leHRob3ApDQorICAgICAgICAgICAgICAgICAgICAg ICBnb3RvIGRvbmU7DQorDQorICAgICAgICAgICAgICAgaWYgKHJvLT5yb19y dCkgew0KKyAgICAgICAgICAgICAgICAgICAgICAgaWZwID0gcm8tPnJvX3J0 LT5ydF9pZnA7DQorDQorICAgICAgICAgICAgICAgICAgICAgICBpZiAoaWZw ID09IE5VTEwpIHsgLyogY2FuIHRoaXMgcmVhbGx5IGhhcHBlbj8gKi8NCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm8tPnJvX3J0ID0gTlVM TDsNCisgICAgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAg ICB9DQorICAgICAgICAgICAgICAgaWYgKHJvLT5yb19ydCA9PSBOVUxMKQ0K KyAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBFSE9TVFVOUkVBQ0g7 DQorICAgICAgICAgICAgICAgcnQgPSByby0+cm9fcnQ7DQorDQorICAgICAg ICAgICAgICAgLyoNCisgICAgICAgICAgICAgICAgKiBDaGVjayBpZiB0aGUg b3V0Z29pbmcgaW50ZXJmYWNlIGNvbmZsaWN0cyB3aXRoDQorICAgICAgICAg ICAgICAgICogdGhlIGludGVyZmFjZSBzcGVjaWZpZWQgYnkgaXBpNl9pZmlu ZGV4IChpZiBzcGVjaWZpZWQpLg0KKyAgICAgICAgICAgICAgICAqIE5vdGUg dGhhdCBsb29wYmFjayBpbnRlcmZhY2UgaXMgYWx3YXlzIG9rYXkuDQorICAg ICAgICAgICAgICAgICogKHRoaXMgbWF5IGhhcHBlbiB3aGVuIHdlIGFyZSBz ZW5kaW5nIGEgcGFja2V0IHRvIG9uZSBvZg0KKyAgICAgICAgICAgICAgICAq ICBvdXIgb3duIGFkZHJlc3Nlcy4pDQorICAgICAgICAgICAgICAgICovDQor ICAgICAgICAgICAgICAgaWYgKGlmcCAmJiBvcHRzICYmIG9wdHMtPmlwNnBv X3BrdGluZm8gJiYNCisgICAgICAgICAgICAgICAgICAgb3B0cy0+aXA2cG9f cGt0aW5mby0+aXBpNl9pZmluZGV4KSB7DQorICAgICAgICAgICAgICAgICAg ICAgICBpZiAoIShpZnAtPmlmX2ZsYWdzICYgSUZGX0xPT1BCQUNLKSAmJg0K KyAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmcC0+aWZfaW5kZXggIT0N CisgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRzLT5pcDZwb19wa3Rp bmZvLT5pcGk2X2lmaW5kZXgpIHsNCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZXJyb3IgPSBFSE9TVFVOUkVBQ0g7DQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGdvdG8gZG9uZTsNCisgICAgICAgICAgICAg ICAgICAgICAgIH0NCisgICAgICAgICAgICAgICB9DQorICAgICAgIH0NCisN CisgIGRvbmU6DQorICAgICAgIGlmIChpZnAgPT0gTlVMTCAmJiBydCA9PSBO VUxMKSB7DQorICAgICAgICAgICAgICAgLyoNCisgICAgICAgICAgICAgICAg KiBUaGlzIGNhbiBoYXBwZW4gaWYgdGhlIGNhbGxlciBkaWQgbm90IHBhc3Mg YSBjYWNoZWQgcm91dGUNCisgICAgICAgICAgICAgICAgKiBub3IgYW55IG90 aGVyIGhpbnRzLiAgV2UgdHJlYXQgdGhpcyBjYXNlIGFuIGVycm9yLg0KKyAg ICAgICAgICAgICAgICAqLw0KKyAgICAgICAgICAgICAgIGVycm9yID0gRUhP U1RVTlJFQUNIOw0KKyAgICAgICB9DQorICAgICAgIGlmIChlcnJvciA9PSBF SE9TVFVOUkVBQ0gpDQorICAgICAgICAgICAgICAgVl9pcDZzdGF0LmlwNnNf bm9yb3V0ZSsrOw0KKw0KKyAgICAgICBpZiAocmV0aWZwICE9IE5VTEwpIHsN CisgICAgICAgICAgICAgICAqcmV0aWZwID0gaWZwOw0KKw0KKyAgICAgICAg ICAgICAgIC8qDQorICAgICAgICAgICAgICAgICogQWRqdXN0IHRoZSAib3V0 Z29pbmciIGludGVyZmFjZS4gIElmIHdlJ3JlIGdvaW5nIHRvIGxvb3AgDQor ICAgICAgICAgICAgICAgICogdGhlIHBhY2tldCBiYWNrIHRvIG91cnNlbHZl cywgdGhlIGlmcCB3b3VsZCBiZSB0aGUgbG9vcGJhY2sgDQorICAgICAgICAg ICAgICAgICogaW50ZXJmYWNlLiBIb3dldmVyLCB3ZSdkIHJhdGhlciBrbm93 IHRoZSBpbnRlcmZhY2UgYXNzb2NpYXRlZCANCisgICAgICAgICAgICAgICAg KiB0byB0aGUgZGVzdGluYXRpb24gYWRkcmVzcyAod2hpY2ggc2hvdWxkIHBy b2JhYmx5IGJlIG9uZSBvZiANCisgICAgICAgICAgICAgICAgKiBvdXIgb3du IGFkZHJlc3Nlcy4pDQorICAgICAgICAgICAgICAgICovDQorICAgICAgICAg ICAgICAgaWYgKHJ0KSB7DQorICAgICAgICAgICAgICAgICAgICAgICBpZiAo KHJ0LT5ydF9pZnAtPmlmX2ZsYWdzICYgSUZGX0xPT1BCQUNLKSAmJg0KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIChydC0+cnRfZ2F0ZXdheS0+c2Ff ZmFtaWx5ID09IEFGX0xJTkspKQ0KKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAqcmV0aWZwID0gDQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaWZuZXRfYnlpbmRleCgoKHN0cnVjdCBzb2NrYWRk cl9kbCAqKQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHJ0LT5ydF9nYXRld2F5KS0+c2RsX2luZGV4 KTsNCisgICAgICAgICAgICAgICB9DQorICAgICAgIH0NCisgICAgICAgaWYg KHJldHJ0ICE9IE5VTEwpDQorICAgICAgICAgICAgICAgKnJldHJ0ID0gcnQ7 ICAgIC8qIHJ0IG1heSBiZSBOVUxMICovDQogDQotCXJldHVybiAoc2VsZWN0 cm91dGUoZHN0c29jaywgb3B0cywgbW9wdHMsIHJvLCByZXRpZnAsDQotCSAg ICByZXRydCwgMCkpOw0KKyAgICAgICByZXR1cm4gKGVycm9yKTsNCiB9DQog DQogLyoNCmRpZmYgLXUgLXIgLi4vc3JjX29yZ184LjJfMjAxMTAzMjkvc3lz L25ldGluZXQ2L2lwNl9mb3J3YXJkLmMgLi9zeXMvbmV0aW5ldDYvaXA2X2Zv cndhcmQuYw0KLS0tIC4uL3NyY19vcmdfOC4yXzIwMTEwMzI5L3N5cy9uZXRp bmV0Ni9pcDZfZm9yd2FyZC5jCTIwMTAtMDItMDcgMDk6MDA6MjIuMDAwMDAw MDAwICswMDAwDQorKysgLi9zeXMvbmV0aW5ldDYvaXA2X2ZvcndhcmQuYwky MDExLTA0LTE0IDE2OjMxOjEzLjAwMDAwMDAwMCArMDAwMA0KQEAgLTUwLDYg KzUwLDcgQEANCiAjaW5jbHVkZSA8c3lzL3N5c2xvZy5oPg0KIA0KICNpbmNs dWRlIDxuZXQvaWYuaD4NCisjaW5jbHVkZSA8bmV0L2lmX2RsLmg+DQogI2lu Y2x1ZGUgPG5ldC9yb3V0ZS5oPg0KICNpbmNsdWRlIDxuZXQvcGZpbC5oPg0K IA0KQEAgLTk5LDkgKzEwMCwxMiBAQA0KIAlzdHJ1Y3QgaWZuZXQgKm9yaWdp ZnA7CS8qIG1heWJlIHVubmVjZXNzYXJ5ICovDQogCXVfaW50MzJfdCBpbnpv bmUsIG91dHpvbmU7DQogCXN0cnVjdCBpbjZfYWRkciBzcmNfaW42LCBkc3Rf aW42Ow0KKwlzdHJ1Y3QgcnRsb29rdXAgcnRsOw0KKwlzdHJ1Y3Qgc29ja2Fk ZHJfZGwgZ2F0ZXdheTsNCiAjaWZkZWYgSVBTRUMNCiAJc3RydWN0IHNlY3Bv bGljeSAqc3AgPSBOVUxMOw0KIAlpbnQgaXBzZWNydCA9IDA7DQorCWludCBu b3J0ZnJlZSA9IDA7DQogI2VuZGlmDQogCWNoYXIgaXA2YnVmc1tJTkVUNl9B RERSU1RSTEVOXSwgaXA2YnVmZFtJTkVUNl9BRERSU1RSTEVOXTsNCiANCkBA IC0yODMsNyArMjg3LDcgQEANCiAJc3RhdGUucm8gPSBOVUxMOwkvKiB1cGRh dGUgYXQgaXBzZWM2X291dHB1dF90dW5uZWwoKSAqLw0KIAlzdGF0ZS5kc3Qg PSBOVUxMOwkvKiB1cGRhdGUgYXQgaXBzZWM2X291dHB1dF90dW5uZWwoKSAq Lw0KIA0KLQllcnJvciA9IGlwc2VjNl9vdXRwdXRfdHVubmVsKCZzdGF0ZSwg c3AsIDApOw0KKwllcnJvciA9IGlwc2VjNl9vdXRwdXRfdHVubmVsKCZzdGF0 ZSwgc3AsIDAsICZydGwsIChzdHJ1Y3Qgc29ja2FkZHIgKikmZ2F0ZXdheSwg Jm5vcnRmcmVlKTsNCiANCiAJbSA9IHN0YXRlLm07DQogCUtFWV9GUkVFU1Ao JnNwKTsNCkBAIC0zNTIsMTggKzM1NiwyOSBAQA0KIAlkc3QtPnNpbjZfZmFt aWx5ID0gQUZfSU5FVDY7DQogCWRzdC0+c2luNl9hZGRyID0gaXA2LT5pcDZf ZHN0Ow0KIA0KLQlyaW42LnJvX3J0ID0gcnRhbGxvYzEoKHN0cnVjdCBzb2Nr YWRkciAqKWRzdCwgMCwgMCk7DQotCWlmIChyaW42LnJvX3J0ICE9IE5VTEwp DQotCQlSVF9VTkxPQ0socmluNi5yb19ydCk7DQotCWVsc2Ugew0KKwliemVy byggJmdhdGV3YXksIHNpemVvZihnYXRld2F5KSk7DQorCWdhdGV3YXkuc2Rs X2xlbiA9IHNpemVvZihnYXRld2F5KTsNCisJcnRsLnJ0X2dhdGV3YXkgPSAo c3RydWN0IHNvY2thZGRyICopJmdhdGV3YXk7DQorI2lmZGVmIFJBRElYX01Q QVRIDQorCXNyY19pbjYgPSBpcDYtPmlwNl9zcmM7DQorCWRzdF9pbjYgPSBp cDYtPmlwNl9kc3Q7DQorCWlmICghcnRsb29rdXBfbXBhdGhfZmliKChzdHJ1 Y3Qgc29ja2FkZHIgKikmcmluNi5yb19kc3QsDQorCQkJbnRvaGwoc3JjX2lu Ni0+c2luNl9hZGRyLnM2X2FkZHIzMlszXSBeIGRzdF9pbjYtPnNpbjZfYWRk ci5zNl9hZGRyMzJbM10pLA0KKwkJCTBVLCAmcnRsLCBSVExfUEtTRU5UKSkg ew0KKyNlbHNlDQorCWlmICghcnRsb29rdXBfZmliKCAoc3RydWN0IHNvY2th ZGRyICopJnJpbjYucm9fZHN0LCAwVSwgJnJ0bCwNCisJCQlSVExfUEtTRU5U KSkgew0KKyNlbmRpZg0KKwkJcmluNi5yb19ydCA9IE5VTEw7DQogCQlWX2lw NnN0YXQuaXA2c19ub3JvdXRlKys7DQogCQlpbjZfaWZzdGF0X2luYyhtLT5t X3BrdGhkci5yY3ZpZiwgaWZzNl9pbl9ub3JvdXRlKTsNCiAJCWlmIChtY29w eSkgew0KIAkJCWljbXA2X2Vycm9yKG1jb3B5LCBJQ01QNl9EU1RfVU5SRUFD SCwNCi0JCQlJQ01QNl9EU1RfVU5SRUFDSF9OT1JPVVRFLCAwKTsNCisJCQkJ SUNNUDZfRFNUX1VOUkVBQ0hfTk9ST1VURSwgMCk7DQogCQl9DQogCQlnb3Rv IGJhZDsNCi0JfQ0KKwl9IGVsc2UNCisJCXJpbjYucm9fcnQgPSAoc3RydWN0 IHJ0ZW50cnkgKikgJnJ0bDsNCiAJcnQgPSByaW42LnJvX3J0Ow0KICNpZmRl ZiBJUFNFQw0KIHNraXBfcm91dGluZzoNCkBAIC01ODAsMTIgKzU5NSwxMiBA QA0KIA0KIHNlbmRlcnI6DQogCWlmIChtY29weSA9PSBOVUxMKQ0KLQkJZ290 byBvdXQ7DQorCQlyZXR1cm47DQogCXN3aXRjaCAoZXJyb3IpIHsNCiAJY2Fz ZSAwOg0KIAkJaWYgKHR5cGUgPT0gTkRfUkVESVJFQ1QpIHsNCiAJCQlpY21w Nl9yZWRpcmVjdF9vdXRwdXQobWNvcHksIHJ0KTsNCi0JCQlnb3RvIG91dDsN CisJCQlyZXR1cm47DQogCQl9DQogCQlnb3RvIGZyZWVjb3B5Ow0KIA0KQEAg LTYwNywxOCArNjIyLDExIEBADQogCQlicmVhazsNCiAJfQ0KIAlpY21wNl9l cnJvcihtY29weSwgdHlwZSwgY29kZSwgMCk7DQotCWdvdG8gb3V0Ow0KKwly ZXR1cm47DQogDQogIGZyZWVjb3B5Og0KIAltX2ZyZWVtKG1jb3B5KTsNCi0J Z290byBvdXQ7DQorCXJldHVybjsNCiBiYWQ6DQogCW1fZnJlZW0obSk7DQot b3V0Og0KLQlpZiAocnQgIT0gTlVMTA0KLSNpZmRlZiBJUFNFQw0KLQkgICAg JiYgIWlwc2VjcnQNCi0jZW5kaWYNCi0JICAgICkNCi0JCVJURlJFRShydCk7 DQogfQ0KZGlmZiAtdSAtciAuLi9zcmNfb3JnXzguMl8yMDExMDMyOS9zeXMv bmV0aW5ldDYvaXA2X2lucHV0LmMgLi9zeXMvbmV0aW5ldDYvaXA2X2lucHV0 LmMNCi0tLSAuLi9zcmNfb3JnXzguMl8yMDExMDMyOS9zeXMvbmV0aW5ldDYv aXA2X2lucHV0LmMJMjAxMC0wOS0xOCAwMTo1NDoyOC4wMDAwMDAwMDAgKzAw MDANCisrKyAuL3N5cy9uZXRpbmV0Ni9pcDZfaW5wdXQuYwkyMDExLTA0LTA3 IDAyOjE0OjI4LjAwMDAwMDAwMCArMDAwMA0KQEAgLTMxMyw2ICszMTMsOCBA QA0KIAlpbnQgc3JjcnQgPSAwOw0KIAlzdHJ1Y3QgbGxlbnRyeSAqbGxlID0g TlVMTDsNCiAJc3RydWN0IHNvY2thZGRyX2luNiBkc3Q2LCAqZHN0Ow0KKwlz dHJ1Y3QgcnRsb29rdXAgcnRsOw0KKwlzdHJ1Y3Qgc29ja2FkZHJfZGwgZ2F0 ZXdheTsNCiANCiAJYnplcm8oJnJpbjYsIHNpemVvZihzdHJ1Y3Qgcm91dGVf aW42KSk7DQogI2lmZGVmIElQU0VDDQpAQCAtNjAzLDExICs2MDUsMTUgQEAN CiAJZHN0LT5zaW42X2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42 KTsNCiAJZHN0LT5zaW42X2ZhbWlseSA9IEFGX0lORVQ2Ow0KIAlkc3QtPnNp bjZfYWRkciA9IGlwNi0+aXA2X2RzdDsNCi0JcmluNi5yb19ydCA9IHJ0YWxs b2MxKChzdHJ1Y3Qgc29ja2FkZHIgKilkc3QsIDAsIDApOw0KLQlpZiAocmlu Ni5yb19ydCkNCi0JCVJUX1VOTE9DSyhyaW42LnJvX3J0KTsNCiANCi0jZGVm aW5lIHJ0Nl9rZXkocikgKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopKChyKS0+ cnRfbm9kZXMtPnJuX2tleSkpDQorCWJ6ZXJvKCAmZ2F0ZXdheSwgc2l6ZW9m KGdhdGV3YXkpKTsNCisJZ2F0ZXdheS5zZGxfbGVuID0gc2l6ZW9mKGdhdGV3 YXkpOw0KKwlydGwucnRfZ2F0ZXdheSA9IChzdHJ1Y3Qgc29ja2FkZHIgKikm Z2F0ZXdheTsNCisJaWYgKCFydGxvb2t1cF9maWIoIChzdHJ1Y3Qgc29ja2Fk ZHIgKilkc3QsDQorCSAgICAwVSwgJnJ0bCwgMCkpDQorCQlyaW42LnJvX3J0 ID0gTlVMTDsNCisJZWxzZQ0KKwkJcmluNi5yb19ydCA9IChzdHJ1Y3QgcnRl bnRyeSAqKSZydGw7DQogDQogCS8qDQogCSAqIEFjY2VwdCB0aGUgcGFja2V0 IGlmIHRoZSBmb3J3YXJkaW5nIGludGVyZmFjZSB0byB0aGUgZGVzdGluYXRp b24NCkBAIC02MzgsMTUgKzY0NCw2IEBADQogI2lmZGVmIFJURl9DTE9ORUQN CiAJICAgICEocmluNi5yb19ydC0+cnRfZmxhZ3MgJiBSVEZfQ0xPTkVEKSAm Jg0KICNlbmRpZg0KLSNpZiAwDQotCSAgICAvKg0KLQkgICAgICogVGhlIGNo ZWNrIGJlbG93IGlzIHJlZHVuZGFudCBzaW5jZSB0aGUgY29tcGFyaXNvbiBv Zg0KLQkgICAgICogdGhlIGRlc3RpbmF0aW9uIGFuZCB0aGUga2V5IG9mIHRo ZSBydGVudHJ5IGhhcw0KLQkgICAgICogYWxyZWFkeSBkb25lIHRocm91Z2gg bG9va2luZyB1cCB0aGUgcm91dGluZyB0YWJsZS4NCi0JICAgICAqLw0KLQkg ICAgSU42X0FSRV9BRERSX0VRVUFMKCZpcDYtPmlwNl9kc3QsDQotCSAgICAm cnQ2X2tleShyaW42LnJvX3J0KS0+c2luNl9hZGRyKQ0KLSNlbmRpZg0KIAkg ICAgcmluNi5yb19ydC0+cnRfaWZwLT5pZl90eXBlID09IElGVF9MT09QKSB7 DQogCQlpbnQgZnJlZV9pYTYgPSAwOw0KIAkJc3RydWN0IGluNl9pZmFkZHIg KmlhNjsNCkBAIC03NjMsNyArNzYwLDcgQEANCiAjaWYgMAkvKnRvdWNoZXMg TlVMTCBwb2ludGVyKi8NCiAJCQlpbjZfaWZzdGF0X2luYyhtLT5tX3BrdGhk ci5yY3ZpZiwgaWZzNl9pbl9kaXNjYXJkKTsNCiAjZW5kaWYNCi0JCQlnb3Rv IG91dDsJLyogbSBoYXZlIGFscmVhZHkgYmVlbiBmcmVlZCAqLw0KKwkJCXJl dHVybjsJLyogbSBoYXZlIGFscmVhZHkgYmVlbiBmcmVlZCAqLw0KIAkJfQ0K IA0KIAkJLyogYWRqdXN0IHBvaW50ZXIgKi8NCkBAIC03ODYsNyArNzgzLDcg QEANCiAJCQlpY21wNl9lcnJvcihtLCBJQ01QNl9QQVJBTV9QUk9CLA0KIAkJ CQkgICAgSUNNUDZfUEFSQU1QUk9CX0hFQURFUiwNCiAJCQkJICAgIChjYWRk cl90KSZpcDYtPmlwNl9wbGVuIC0gKGNhZGRyX3QpaXA2KTsNCi0JCQlnb3Rv IG91dDsNCisJCQlyZXR1cm47DQogCQl9DQogI2lmbmRlZiBQVUxMRE9XTl9U RVNUDQogCQkvKiBpcDZfaG9wb3B0c19pbnB1dCgpIGVuc3VyZXMgdGhhdCBt YnVmIGlzIGNvbnRpZ3VvdXMgKi8NCkBAIC03OTYsNyArNzkzLDcgQEANCiAJ CQlzaXplb2Yoc3RydWN0IGlwNl9oYmgpKTsNCiAJCWlmIChoYmggPT0gTlVM TCkgew0KIAkJCVZfaXA2c3RhdC5pcDZzX3Rvb3Nob3J0Kys7DQotCQkJZ290 byBvdXQ7DQorCQkJcmV0dXJuOw0KIAkJfQ0KICNlbmRpZg0KIAkJbnh0ID0g aGJoLT5pcDZoX254dDsNCkBAIC04NjgsNyArODY1LDcgQEANCiAJCX0NCiAJ fSBlbHNlIGlmICghb3Vycykgew0KIAkJaXA2X2ZvcndhcmQobSwgc3JjcnQp Ow0KLQkJZ290byBvdXQ7DQorCQlyZXR1cm47DQogCX0NCiANCiAJaXA2ID0g bXRvZChtLCBzdHJ1Y3QgaXA2X2hkciAqKTsNCkBAIC05MzEsMTIgKzkyOCw5 IEBADQogDQogCQlueHQgPSAoKmluZXQ2c3dbaXA2X3Byb3RveFtueHRdXS5w cl9pbnB1dCkoJm0sICZvZmYsIG54dCk7DQogCX0NCi0JZ290byBvdXQ7DQor CXJldHVybjsNCiBiYWQ6DQogCW1fZnJlZW0obSk7DQotb3V0Og0KLQlpZiAo cmluNi5yb19ydCkNCi0JCVJURlJFRShyaW42LnJvX3J0KTsNCiB9DQogDQog LyoNCmRpZmYgLXUgLXIgLi4vc3JjX29yZ184LjJfMjAxMTAzMjkvc3lzL25l dGluZXQ2L2lwNl9vdXRwdXQuYyAuL3N5cy9uZXRpbmV0Ni9pcDZfb3V0cHV0 LmMNCi0tLSAuLi9zcmNfb3JnXzguMl8yMDExMDMyOS9zeXMvbmV0aW5ldDYv aXA2X291dHB1dC5jCTIwMTAtMTAtMjUgMTM6MTY6MTEuMDAwMDAwMDAwICsw MDAwDQorKysgLi9zeXMvbmV0aW5ldDYvaXA2X291dHB1dC5jCTIwMTEtMDQt MTQgMTY6MzM6MDQuMDAwMDAwMDAwICswMDAwDQpAQCAtODIsNiArODIsNyBA QA0KICNpbmNsdWRlIDxzeXMvdWNyZWQuaD4NCiANCiAjaW5jbHVkZSA8bmV0 L2lmLmg+DQorI2luY2x1ZGUgPG5ldC9pZl9kbC5oPg0KICNpbmNsdWRlIDxu ZXQvbmV0aXNyLmg+DQogI2luY2x1ZGUgPG5ldC9yb3V0ZS5oPg0KICNpbmNs dWRlIDxuZXQvcGZpbC5oPg0KQEAgLTEzNSw3ICsxMzYsOCBAQA0KIHN0YXRp YyBpbnQgaXA2X2luc2VydF9qdW1ib29wdChzdHJ1Y3QgaXA2X2V4dGhkcnMg KiwgdV9pbnQzMl90KTsNCiBzdGF0aWMgaW50IGlwNl9zcGxpdGhkcihzdHJ1 Y3QgbWJ1ZiAqLCBzdHJ1Y3QgaXA2X2V4dGhkcnMgKik7DQogc3RhdGljIGlu dCBpcDZfZ2V0cG10dSBfX1AoKHN0cnVjdCByb3V0ZV9pbjYgKiwgc3RydWN0 IHJvdXRlX2luNiAqLA0KLQlzdHJ1Y3QgaWZuZXQgKiwgc3RydWN0IGluNl9h ZGRyICosIHVfbG9uZyAqLCBpbnQgKikpOw0KKwlzdHJ1Y3QgaWZuZXQgKiwg c3RydWN0IGluNl9hZGRyICosIHVfbG9uZyAqLCBpbnQgKiwgaW50ICosIA0K KwlzdHJ1Y3QgcnRsb29rdXAgKiwgc3RydWN0IHNvY2thZGRyX2RsICopKTsN CiBzdGF0aWMgaW50IGNvcHlwa3RvcHRzKHN0cnVjdCBpcDZfcGt0b3B0cyAq LCBzdHJ1Y3QgaXA2X3BrdG9wdHMgKiwgaW50KTsNCiANCiANCkBAIC0yMTMs NiArMjE1LDEwIEBADQogCXN0cnVjdCByb3V0ZV9pbjYgKnJvX3BtdHUgPSBO VUxMOw0KIAlpbnQgaGRyc3BsaXQgPSAwOw0KIAlpbnQgbmVlZGlwc2VjID0g MDsNCisJc3RydWN0IHJ0bG9va3VwIHJ0bDsNCisJc3RydWN0IHNvY2thZGRy X2RsIGdhdGV3YXk7DQorCWludCByb19wcm92aWRlZCA9IDE7DQorCWludCBu b3J0ZnJlZSA9IDA7DQogI2lmZGVmIFNDVFANCiAJaW50IHN3X2NzdW07DQog I2VuZGlmDQpAQCAtNDYzLDYgKzQ2OSw3IEBADQogCSAqIFJvdXRlIHBhY2tl dC4NCiAJICovDQogCWlmIChybyA9PSAwKSB7DQorCSAgICAgICAgcm9fcHJv dmlkZWQgPSAwOw0KIAkJcm8gPSAmaXA2cm91dGU7DQogCQliemVybygoY2Fk ZHJfdClybywgc2l6ZW9mKCpybykpOw0KIAl9DQpAQCAtNTIxLDcgKzUyOCwx NSBAQA0KIAkJc3RhdGUucm8gPSAoc3RydWN0IHJvdXRlICopcm87DQogCQlz dGF0ZS5kc3QgPSAoc3RydWN0IHNvY2thZGRyICopZHN0Ow0KIA0KLQkJZXJy b3IgPSBpcHNlYzZfb3V0cHV0X3R1bm5lbCgmc3RhdGUsIHNwLCBmbGFncyk7 DQorCQkvKiBjaGVjayBpZiBjYWxsZXIgZG9lcyBub3QgZnJlZSByb19ydCwg YXMgbmVlZGVkIGJ5DQorCQkgKiBydGxvb2t1cF8obXBhdGgpX2ZpYg0KKwkJ ICovDQorCQlpZiAocm9fcHJvdmlkZWQpDQorCQkJZXJyb3IgPSBpcHNlYzZf b3V0cHV0X3R1bm5lbCgmc3RhdGUsIHNwLCBmbGFncywgTlVMTCwgDQorCQkJ ICAgIE5VTEwsICZub3J0ZnJlZSk7DQorCQllbHNlDQorCQkJZXJyb3IgPSBp cHNlYzZfb3V0cHV0X3R1bm5lbCgmc3RhdGUsIHNwLCBmbGFncywgJnJ0bCwN CisJCQkgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZnYXRld2F5LCAmbm9ydGZy ZWUpOw0KIA0KIAkJbSA9IHN0YXRlLm07DQogCQlybyA9IChzdHJ1Y3Qgcm91 dGVfaW42ICopc3RhdGUucm87DQpAQCAtNTc2LDE1ICs1OTEsMjYgQEANCiAJ ZHN0X3NhLnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7DQogCWRzdF9zYS5zaW42 X2xlbiA9IHNpemVvZihkc3Rfc2EpOw0KIAlkc3Rfc2Euc2luNl9hZGRyID0g aXA2LT5pcDZfZHN0Ow0KLQlpZiAoKGVycm9yID0gaW42X3NlbGVjdHJvdXRl KCZkc3Rfc2EsIG9wdCwgaW02bywgcm8sDQotCSAgICAmaWZwLCAmcnQpKSAh PSAwKSB7DQorCS8qIGNoZWNrIGlmIGNhbGxlciBkb2VzIG5vdCBmcmVlIHJv X3J0LCBhcyBuZWVkZWQgYnkNCisJICogcnRsb29rdXBfKG1wYXRoKV9maWIN CisJICovDQorCWlmIChyb19wcm92aWRlZCkgew0KKwkJZXJyb3IgPSBpbjZf c2VsZWN0cm91dGUoJmRzdF9zYSwgb3B0LCBpbTZvLCBybywgJmlmcCwgJnJ0 KTsNCisJfSBlbHNlIHsNCisJCWJ6ZXJvKCAmZ2F0ZXdheSwgc2l6ZW9mKGdh dGV3YXkpKTsNCisJCWdhdGV3YXkuc2RsX2xlbiA9IHNpemVvZihnYXRld2F5 KTsNCisJCXJ0bC5ydF9nYXRld2F5ID0gKHN0cnVjdCBzb2NrYWRkciAqKSZn YXRld2F5Ow0KKwkJZXJyb3IgPSBpbjZfbG9va3VwKCZkc3Rfc2EsIG9wdCwg aW02bywgcm8sICZydGwsICZpZnAsICZydCk7DQorCQlub3J0ZnJlZSA9IDE7 DQorCX0NCisJaWYgKGVycm9yICE9IDApIHsNCiAJCXN3aXRjaCAoZXJyb3Ip IHsNCi0JCWNhc2UgRUhPU1RVTlJFQUNIOg0KLQkJCVZfaXA2c3RhdC5pcDZz X25vcm91dGUrKzsNCi0JCQlicmVhazsNCi0JCWNhc2UgRUFERFJOT1RBVkFJ TDoNCi0JCWRlZmF1bHQ6DQotCQkJYnJlYWs7IC8qIFhYWCBzdGF0aXN0aWNz PyAqLw0KKwkJCWNhc2UgRUhPU1RVTlJFQUNIOg0KKwkJCQlWX2lwNnN0YXQu aXA2c19ub3JvdXRlKys7DQorCQkJCWJyZWFrOw0KKwkJCWNhc2UgRUFERFJO T1RBVkFJTDoNCisJCQlkZWZhdWx0Og0KKwkJCQlicmVhazsgLyogWFhYIHN0 YXRpc3RpY3M/ICovDQogCQl9DQogCQlpZiAoaWZwICE9IE5VTEwpDQogCQkJ aW42X2lmc3RhdF9pbmMoaWZwLCBpZnM2X291dF9kaXNjYXJkKTsNCkBAIC01 OTIsNyArNjE4LDcgQEANCiAJfQ0KIAlpZiAocnQgPT0gTlVMTCkgew0KIAkJ LyoNCi0JCSAqIElmIGluNl9zZWxlY3Ryb3V0ZSgpIGRvZXMgbm90IHJldHVy biBhIHJvdXRlIGVudHJ5LA0KKwkJICogSWYgaW42X3NlbGVjdHJvdXRlKCkv aW42X2xvb2t1cCgpIGRvZXMgbm90IHJldHVybiBhIHJvdXRlIGVudHJ5LA0K IAkJICogZHN0IG1heSBub3QgaGF2ZSBiZWVuIHVwZGF0ZWQuDQogCQkgKi8N CiAJCSpkc3QgPSBkc3Rfc2E7CS8qIFhYWCAqLw0KQEAgLTc0MywxMSArNzY5 LDIwIEBADQogCWlmIChpZnBwKQ0KIAkJKmlmcHAgPSBpZnA7DQogDQotCS8q IERldGVybWluZSBwYXRoIE1UVS4gKi8NCi0JaWYgKChlcnJvciA9IGlwNl9n ZXRwbXR1KHJvX3BtdHUsIHJvLCBpZnAsICZmaW5hbGRzdCwgJm10dSwNCi0J ICAgICZhbHdheXNmcmFnKSkgIT0gMCkNCi0JCWdvdG8gYmFkOw0KLQ0KKwkv KiBEZXRlcm1pbmUgcGF0aCBNVFUuDQorCSAqIGNoZWNrIGlmIGNhbGxlciBk b2VzIG5vdCBmcmVlIHJvX3J0LCBhcyBuZWVkZWQgYnkNCisJICogcnRsb29r dXBfKG1wYXRoKV9maWINCisJICovDQorCWlmIChyb19wcm92aWRlZCkgew0K KwkJaWYgKChlcnJvciA9IGlwNl9nZXRwbXR1KHJvX3BtdHUsIHJvLCBpZnAs ICZmaW5hbGRzdCwgJm10dSwNCisgICAgICAgICAgICAgICAgICAgICZhbHdh eXNmcmFnLCAmbm9ydGZyZWUsIE5VTEwsIE5VTEwpKSAhPSAwKQ0KKwkJCWdv dG8gYmFkOw0KKwl9IGVsc2Ugew0KKwkJaWYgKChlcnJvciA9IGlwNl9nZXRw bXR1KHJvX3BtdHUsIHJvLCBpZnAsICZmaW5hbGRzdCwgJm10dSwNCisgICAg ICAgICAgICAgICAgICAgICZhbHdheXNmcmFnLCAmbm9ydGZyZWUsICZydGws ICZnYXRld2F5KSkgIT0gMCkNCisJCQlnb3RvIGJhZDsNCisJfQ0KKwkJCQ0K IAkvKg0KIAkgKiBUaGUgY2FsbGVyIG9mIHRoaXMgZnVuY3Rpb24gbWF5IHNw ZWNpZnkgdG8gdXNlIHRoZSBtaW5pbXVtIE1UVQ0KIAkgKiBpbiBzb21lIGNh c2VzLg0KQEAgLTEwNzEsOSArMTEwNiw5IEBADQogCQlWX2lwNnN0YXQuaXA2 c19mcmFnbWVudGVkKys7DQogDQogZG9uZToNCi0JaWYgKHJvID09ICZpcDZy b3V0ZSAmJiByby0+cm9fcnQpIHsgLyogYnJhY2UgbmVjZXNzYXJ5IGZvciBS VEZSRUUgKi8NCisJaWYgKHJvID09ICZpcDZyb3V0ZSAmJiByby0+cm9fcnQg JiYgIW5vcnRmcmVlKSB7IC8qIGJyYWNlIG5lY2Vzc2FyeSBmb3IgUlRGUkVF ICovDQogCQlSVEZSRUUocm8tPnJvX3J0KTsNCi0JfSBlbHNlIGlmIChyb19w bXR1ID09ICZpcDZyb3V0ZSAmJiByb19wbXR1LT5yb19ydCkgew0KKwl9IGVs c2UgaWYgKHJvX3BtdHUgPT0gJmlwNnJvdXRlICYmIHJvX3BtdHUtPnJvX3J0 ICYmICFub3J0ZnJlZSkgew0KIAkJUlRGUkVFKHJvX3BtdHUtPnJvX3J0KTsN CiAJfQ0KICNpZmRlZiBJUFNFQw0KQEAgLTEyNjQsNyArMTI5OSw3IEBADQog c3RhdGljIGludA0KIGlwNl9nZXRwbXR1KHN0cnVjdCByb3V0ZV9pbjYgKnJv X3BtdHUsIHN0cnVjdCByb3V0ZV9pbjYgKnJvLA0KICAgICBzdHJ1Y3QgaWZu ZXQgKmlmcCwgc3RydWN0IGluNl9hZGRyICpkc3QsIHVfbG9uZyAqbXR1cCwN Ci0gICAgaW50ICphbHdheXNmcmFncCkNCisgICAgaW50ICphbHdheXNmcmFn cCwgaW50ICpub3J0ZnJlZSwgc3RydWN0IHJ0bG9va3VwICpydGwsIHN0cnVj dCBzb2NrYWRkcl9kbCAqZ2F0ZXdheSkNCiB7DQogCXVfaW50MzJfdCBtdHUg PSAwOw0KIAlpbnQgYWx3YXlzZnJhZyA9IDA7DQpAQCAtMTI3Nyw3ICsxMzEy LDggQEANCiAJCWlmIChyb19wbXR1LT5yb19ydCAmJg0KIAkJICAgICgocm9f cG10dS0+cm9fcnQtPnJ0X2ZsYWdzICYgUlRGX1VQKSA9PSAwIHx8DQogCQkg ICAgICFJTjZfQVJFX0FERFJfRVFVQUwoJnNhNl9kc3QtPnNpbjZfYWRkciwg ZHN0KSkpIHsNCi0JCQlSVEZSRUUocm9fcG10dS0+cm9fcnQpOw0KKwkJCWlm IChydGwgPT0gTlVMTCkNCisJCQkJUlRGUkVFKHJvX3BtdHUtPnJvX3J0KTsN CiAJCQlyb19wbXR1LT5yb19ydCA9IChzdHJ1Y3QgcnRlbnRyeSAqKU5VTEw7 DQogCQl9DQogCQlpZiAocm9fcG10dS0+cm9fcnQgPT0gTlVMTCkgew0KQEAg LTEyODYsNyArMTMyMiwxOSBAQA0KIAkJCXNhNl9kc3QtPnNpbjZfbGVuID0g c2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOw0KIAkJCXNhNl9kc3QtPnNp bjZfYWRkciA9ICpkc3Q7DQogDQotCQkJcnRhbGxvYygoc3RydWN0IHJvdXRl ICopcm9fcG10dSk7DQorCQkJaWYgKHJ0bCA9PSBOVUxMKQ0KKwkJCQlydGFs bG9jKChzdHJ1Y3Qgcm91dGUgKilyb19wbXR1KTsNCisJCQllbHNlIHsNCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ6ZXJvKCBnYXRld2F5 LCBzaXplb2YoIHN0cnVjdCBzb2NrYWRkcl9kbCkpOw0KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZ2F0ZXdheS0+c2RsX2xlbiA9IHNpemVv ZihzdHJ1Y3Qgc29ja2FkZHJfZGwpOw0KKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcnRsLT5ydF9nYXRld2F5ID0gKHN0cnVjdCBzb2NrYWRk ciAqKWdhdGV3YXk7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpZiAoIXJ0bG9va3VwX2ZpYiggKHN0cnVjdCBzb2NrYWRkciAqKXNhNl9k c3QsIDAsIHJ0bCwgMCkpDQorCQkJCQlyb19wbXR1LT5yb19ydCA9IE5VTEw7 DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsNCisJ CQkJCXJvX3BtdHUtPnJvX3J0ID0gKHN0cnVjdCBydGVudHJ5ICopcnRsOw0K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbm9y dGZyZWUgPSAxOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg fQ0KKwkJCX0NCiAJCX0NCiAJfQ0KIAlpZiAocm9fcG10dS0+cm9fcnQpIHsN CkBAIC0xODg3LDcgKzE5MzUsNyBAQA0KIAkJCQkgKiB0aGUgb3V0Z29pbmcg aW50ZXJmYWNlLg0KIAkJCQkgKi8NCiAJCQkJZXJyb3IgPSBpcDZfZ2V0cG10 dSgmc3JvLCBOVUxMLCBOVUxMLA0KLQkJCQkgICAgJmluNnAtPmluNnBfZmFk ZHIsICZwbXR1LCBOVUxMKTsNCisJCQkJICAgICZpbjZwLT5pbjZwX2ZhZGRy LCAmcG10dSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7DQogCQkJCWlmIChz cm8ucm9fcnQpDQogCQkJCQlSVEZSRUUoc3JvLnJvX3J0KTsNCiAJCQkJaWYg KGVycm9yKQ0KZGlmZiAtdSAtciAuLi9zcmNfb3JnXzguMl8yMDExMDMyOS9z eXMvbmV0aW5ldDYvaXA2X3Zhci5oIC4vc3lzL25ldGluZXQ2L2lwNl92YXIu aA0KLS0tIC4uL3NyY19vcmdfOC4yXzIwMTEwMzI5L3N5cy9uZXRpbmV0Ni9p cDZfdmFyLmgJMjAxMC0wOS0wOSAwNjo0MzoxOC4wMDAwMDAwMDAgKzAwMDAN CisrKyAuL3N5cy9uZXRpbmV0Ni9pcDZfdmFyLmgJMjAxMS0wNC0wNyAxMTo1 NDoxNi4wMDAwMDAwMDAgKzAwMDANCkBAIC00MzEsMTIgKzQzMSwxNiBAQA0K IGludAlkZXN0Nl9pbnB1dCBfX1AoKHN0cnVjdCBtYnVmICoqLCBpbnQgKiwg aW50KSk7DQogaW50CW5vbmVfaW5wdXQgX19QKChzdHJ1Y3QgbWJ1ZiAqKiwg aW50ICosIGludCkpOw0KIA0KKyNpbmNsdWRlIDxuZXQvcm91dGUuaD4NCiBp bnQJaW42X3NlbGVjdHNyYyhzdHJ1Y3Qgc29ja2FkZHJfaW42ICosIHN0cnVj dCBpcDZfcGt0b3B0cyAqLA0KIAlzdHJ1Y3QgaW5wY2IgKmlucCwgc3RydWN0 IHJvdXRlX2luNiAqLCBzdHJ1Y3QgdWNyZWQgKmNyZWQsDQogCXN0cnVjdCBp Zm5ldCAqKiwgc3RydWN0IGluNl9hZGRyICopOw0KIGludCBpbjZfc2VsZWN0 cm91dGUgX19QKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICosIHN0cnVjdCBpcDZf cGt0b3B0cyAqLA0KIAlzdHJ1Y3QgaXA2X21vcHRpb25zICosIHN0cnVjdCBy b3V0ZV9pbjYgKiwgc3RydWN0IGlmbmV0ICoqLA0KIAlzdHJ1Y3QgcnRlbnRy eSAqKikpOw0KK2ludCBpbjZfbG9va3VwIF9fUCgoc3RydWN0IHNvY2thZGRy X2luNiAqLCBzdHJ1Y3QgaXA2X3BrdG9wdHMgKiwNCisJc3RydWN0IGlwNl9t b3B0aW9ucyAqLCBzdHJ1Y3Qgcm91dGVfaW42ICosIHN0cnVjdCBydGxvb2t1 cCAqLA0KKwlzdHJ1Y3QgaWZuZXQgKiosIHN0cnVjdCBydGVudHJ5ICoqKSk7 DQogdV9pbnQzMl90IGlwNl9yYW5kb21pZCBfX1AoKHZvaWQpKTsNCiB1X2lu dDMyX3QgaXA2X3JhbmRvbWZsb3dsYWJlbCBfX1AoKHZvaWQpKTsNCiAjZW5k aWYgLyogX0tFUk5FTCAqLw0KZGlmZiAtdSAtciAuLi9zcmNfb3JnXzguMl8y MDExMDMyOS9zeXMvbmV0aW5ldDYvbmQ2X25ici5jIC4vc3lzL25ldGluZXQ2 L25kNl9uYnIuYw0KLS0tIC4uL3NyY19vcmdfOC4yXzIwMTEwMzI5L3N5cy9u ZXRpbmV0Ni9uZDZfbmJyLmMJMjAxMS0wNC0xMiAxMzowMjowNC4wMDAwMDAw MDAgKzAwMDANCisrKyAuL3N5cy9uZXRpbmV0Ni9uZDZfbmJyLmMJMjAxMS0w NC0xMiAxNjowNjoyNi4wMDAwMDAwMDAgKzAwMDANCkBAIC0yNTYsNyArMjU2 LDExIEBADQogCQkJICovDQogCQkJaWYgKG5lZWRfcHJveHkpDQogCQkJCXBy b3h5ZGwgPSAqU0RMKHJ0LT5ydF9nYXRld2F5KTsNCisjaWZkZWYgUkFESVhf TVBBVEgNCisJCQlSVEZSRUUocnQpOyAgICAgLyogcnRhbGxvY19tcGF0aCBk b2VzIG5vdCByZXR1cm4gYSBsb2NrZWQgcm91dGUgKi8NCisjZWxzZQ0KIAkJ CVJURlJFRV9MT0NLRUQocnQpOw0KKyNlbmRpZg0KIAkJfQ0KIAkJaWYgKG5l ZWRfcHJveHkpIHsNCiAJCQkvKg0KZGlmZiAtdSAtciAuLi9zcmNfb3JnXzgu Ml8yMDExMDMyOS9zeXMvbmV0aW5ldDYvbmQ2X3J0ci5jIC4vc3lzL25ldGlu ZXQ2L25kNl9ydHIuYw0KLS0tIC4uL3NyY19vcmdfOC4yXzIwMTEwMzI5L3N5 cy9uZXRpbmV0Ni9uZDZfcnRyLmMJMjAxMC0wNS0wNiAwNjo0NDoxOS4wMDAw MDAwMDAgKzAwMDANCisrKyAuL3N5cy9uZXRpbmV0Ni9uZDZfcnRyLmMJMjAx MS0wNC0wMyAxNjowNzo1Ny4wMDAwMDAwMDAgKzAwMDANCkBAIC00OCw2ICs0 OCw4IEBADQogI2luY2x1ZGUgPHN5cy9yd2xvY2suaD4NCiAjaW5jbHVkZSA8 c3lzL3N5c2xvZy5oPg0KICNpbmNsdWRlIDxzeXMvcXVldWUuaD4NCisjaW5j bHVkZSA8c3lzL2xvY2suaD4NCisjaW5jbHVkZSA8c3lzL3JtbG9jay5oPg0K IA0KICNpbmNsdWRlIDxuZXQvaWYuaD4NCiAjaW5jbHVkZSA8bmV0L2lmX3R5 cGVzLmg+DQpkaWZmIC11IC1yIC4uL3NyY19vcmdfOC4yXzIwMTEwMzI5L3N5 cy9uZXRpcHNlYy9pcHNlYzYuaCAuL3N5cy9uZXRpcHNlYy9pcHNlYzYuaA0K LS0tIC4uL3NyY19vcmdfOC4yXzIwMTEwMzI5L3N5cy9uZXRpcHNlYy9pcHNl YzYuaAkyMDEwLTA5LTE4IDAxOjU0OjI4LjAwMDAwMDAwMCArMDAwMA0KKysr IC4vc3lzL25ldGlwc2VjL2lwc2VjNi5oCTIwMTEtMDQtMDggMTI6NTc6NDUu MDAwMDAwMDAwICswMDAwDQpAQCAtNzIsNyArNzIsOCBAQA0KIGV4dGVybiBp bnQgaXBzZWM2X291dHB1dF90cmFucyBfX1AoKHN0cnVjdCBpcHNlY19vdXRw dXRfc3RhdGUgKiwgdV9jaGFyICosDQogCXN0cnVjdCBtYnVmICosIHN0cnVj dCBzZWNwb2xpY3kgKiwgaW50LCBpbnQgKikpOw0KIGV4dGVybiBpbnQgaXBz ZWM2X291dHB1dF90dW5uZWwgX19QKChzdHJ1Y3QgaXBzZWNfb3V0cHV0X3N0 YXRlICosDQotCXN0cnVjdCBzZWNwb2xpY3kgKiwgaW50KSk7DQorCXN0cnVj dCBzZWNwb2xpY3kgKiwgaW50LCBzdHJ1Y3QgcnRsb29rdXAgKiwgc3RydWN0 IHNvY2thZGRyICosDQorCWludCAqKSk7DQogI2VuZGlmIC8qX0tFUk5FTCov DQogDQogI2VuZGlmIC8qX05FVElQU0VDX0lQU0VDNl9IXyovDQpkaWZmIC11 IC1yIC4uL3NyY19vcmdfOC4yXzIwMTEwMzI5L3N5cy9uZXRpcHNlYy9pcHNl Y19vdXRwdXQuYyAuL3N5cy9uZXRpcHNlYy9pcHNlY19vdXRwdXQuYw0KLS0t IC4uL3NyY19vcmdfOC4yXzIwMTEwMzI5L3N5cy9uZXRpcHNlYy9pcHNlY19v dXRwdXQuYwkyMDExLTAyLTIyIDE5OjM5OjA4LjAwMDAwMDAwMCArMDAwMA0K KysrIC4vc3lzL25ldGlwc2VjL2lwc2VjX291dHB1dC5jCTIwMTEtMDQtMDgg MTI6NTY6MzguMDAwMDAwMDAwICswMDAwDQpAQCAtNDQsNiArNDQsNyBAQA0K ICNpbmNsdWRlIDxzeXMvc3lzbG9nLmg+DQogDQogI2luY2x1ZGUgPG5ldC9p Zi5oPg0KKyNpbmNsdWRlIDxuZXQvaWZfZGwuaD4NCiAjaW5jbHVkZSA8bmV0 L3BmaWwuaD4NCiAjaW5jbHVkZSA8bmV0L3JvdXRlLmg+DQogI2luY2x1ZGUg PG5ldC92bmV0Lmg+DQpAQCAtNzUyLDcgKzc1Myw4IEBADQogICogSVBzZWMg b3V0cHV0IGxvZ2ljIGZvciBJUHY2LCB0dW5uZWwgbW9kZS4NCiAgKi8NCiBp bnQNCi1pcHNlYzZfb3V0cHV0X3R1bm5lbChzdHJ1Y3QgaXBzZWNfb3V0cHV0 X3N0YXRlICpzdGF0ZSwgc3RydWN0IHNlY3BvbGljeSAqc3AsIGludCBmbGFn cykNCitpcHNlYzZfb3V0cHV0X3R1bm5lbChzdHJ1Y3QgaXBzZWNfb3V0cHV0 X3N0YXRlICpzdGF0ZSwgc3RydWN0IHNlY3BvbGljeSAqc3AsDQorICAgIGlu dCBmbGFncywgc3RydWN0IHJ0bG9va3VwICpydGwsIHN0cnVjdCBzb2NrYWRk ciAqZ2F0ZXdheSwgaW50ICpub3J0ZnJlZSkNCiB7DQogCXN0cnVjdCBpcDZf aGRyICppcDY7DQogCXN0cnVjdCBpcHNlY3JlcXVlc3QgKmlzcjsNCkBAIC03 NjAsNyArNzYyLDcgQEANCiAJaW50IGVycm9yOw0KIAlzdHJ1Y3Qgc29ja2Fk ZHJfaW42ICpkc3Q2Ow0KIAlzdHJ1Y3QgbWJ1ZiAqbTsNCi0NCisJDQogCUlQ U0VDX0FTU0VSVChzdGF0ZSAhPSBOVUxMLCAoIm51bGwgc3RhdGUiKSk7DQog CUlQU0VDX0FTU0VSVChzdGF0ZS0+bSAhPSBOVUxMLCAoIm51bGwgbSIpKTsN CiAJSVBTRUNfQVNTRVJUKHNwICE9IE5VTEwsICgibnVsbCBzcCIpKTsNCkBA IC04MzYsNyArODM4LDggQEANCiAJCWlmIChzdGF0ZS0+cm8tPnJvX3J0DQog CQkgJiYgKChzdGF0ZS0+cm8tPnJvX3J0LT5ydF9mbGFncyAmIFJURl9VUCkg PT0gMA0KIAkJICB8fCAhSU42X0FSRV9BRERSX0VRVUFMKCZkc3Q2LT5zaW42 X2FkZHIsICZpcDYtPmlwNl9kc3QpKSkgew0KLQkJCVJURlJFRShzdGF0ZS0+ cm8tPnJvX3J0KTsNCisJCQlpZiAocnRsID09IE5VTEwpDQorCQkJCVJURlJF RShzdGF0ZS0+cm8tPnJvX3J0KTsNCiAJCQlzdGF0ZS0+cm8tPnJvX3J0ID0g TlVMTDsNCiAJCX0NCiAJCWlmIChzdGF0ZS0+cm8tPnJvX3J0ID09IE5VTEwp IHsNCkBAIC04NDQsNyArODQ3LDIwIEBADQogCQkJZHN0Ni0+c2luNl9mYW1p bHkgPSBBRl9JTkVUNjsNCiAJCQlkc3Q2LT5zaW42X2xlbiA9IHNpemVvZigq ZHN0Nik7DQogCQkJZHN0Ni0+c2luNl9hZGRyID0gaXA2LT5pcDZfZHN0Ow0K LQkJCXJ0YWxsb2Moc3RhdGUtPnJvKTsNCisNCisJCQlpZiAocnRsID09IE5V TEwpDQorCQkJCXJ0YWxsb2Moc3RhdGUtPnJvKTsNCisJCQllbHNlIHsNCisJ CQkJYnplcm8oIGdhdGV3YXksIHNpemVvZiggc3RydWN0IHNvY2thZGRyX2Rs KSk7DQorCQkJCWdhdGV3YXktPnNhX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29j a2FkZHJfZGwpOw0KKwkJCQlydGwtPnJ0X2dhdGV3YXkgPSAoc3RydWN0IHNv Y2thZGRyICopZ2F0ZXdheTsNCisJCQkJaWYgKCFydGxvb2t1cF9maWIoIChz dHJ1Y3Qgc29ja2FkZHIgKilkc3Q2LCAwLCBydGwsIDApKQ0KKwkJCQkJc3Rh dGUtPnJvLT5yb19ydCA9IE5VTEw7DQorCQkJCWVsc2Ugew0KKwkJCQkJc3Rh dGUtPnJvLT5yb19ydCA9IChzdHJ1Y3QgcnRlbnRyeSAqKXJ0bDsNCisJCQkJ CSpub3J0ZnJlZSA9IDE7DQorCQkJCX0NCisJCQl9DQogCQl9DQogCQlpZiAo c3RhdGUtPnJvLT5yb19ydCA9PSBOVUxMKSB7DQogCQkJVl9pcDZzdGF0Lmlw NnNfbm9yb3V0ZSsrOw0K --168430090-2014229598-1303080817=:8693--