From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 0FB3DE7717F for ; Thu, 12 Dec 2024 19:16:15 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:Content-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:From:References:Cc:To:Subject: MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=H/nBByZj6pmZ7WT+wOfajfRWdaS5+GltOyiRfR/v7jo=; b=bgbjOT3E+zLC19 rIIIA2/ahl9LO/1nkUCghFzCsuDGW3Fi86Dt2Obzl8Xt7VtwKG4mTNoT1Xj9cuqYOByJ7iVVCQES7 CXvKT8lmdE9ouCmFrlNQhnV9xTxjeo0uvD10eETkeiKL6WVaUFuxFvblabl9NBfvg0uawjF7f3aSn AIAAyCMp65tyybQIP8HBvU0HxP5JVPVCd47TuqnNERz6clkEQiMO0/zYuv8lDYifyLLUW3uRv8NMV FBOIwix8MKwOu4uBgvwDVODtnBm0EwGfYMx/N83Dh0picRtK4QEO6AwwbrIJaENWVG+//BmpOu7qp vR1tuhtwx+gZjuiQzHHw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tLofW-00000001aNt-0PjY; Thu, 12 Dec 2024 19:16:14 +0000 Received: from pegase2.c-s.fr ([93.17.235.10]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tLo1b-00000001RVV-0T00; Thu, 12 Dec 2024 18:35:01 +0000 Received: from localhost (mailhub3.si.c-s.fr [172.26.127.67]) by localhost (Postfix) with ESMTP id 4Y8Ljm050Sz9sSc; Thu, 12 Dec 2024 19:34:52 +0100 (CET) X-Virus-Scanned: amavisd-new at c-s.fr Received: from pegase2.c-s.fr ([172.26.127.65]) by localhost (pegase2.c-s.fr [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id JyAcT0_AqjA1; Thu, 12 Dec 2024 19:34:51 +0100 (CET) Received: from messagerie.si.c-s.fr (messagerie.si.c-s.fr [192.168.25.192]) by pegase2.c-s.fr (Postfix) with ESMTP id 4Y8Ljl56gvz9sSW; Thu, 12 Dec 2024 19:34:51 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by messagerie.si.c-s.fr (Postfix) with ESMTP id 84BD78B773; Thu, 12 Dec 2024 19:34:51 +0100 (CET) X-Virus-Scanned: amavisd-new at c-s.fr Received: from messagerie.si.c-s.fr ([127.0.0.1]) by localhost (messagerie.si.c-s.fr [127.0.0.1]) (amavisd-new, port 10023) with ESMTP id dOarpQtZ8idy; Thu, 12 Dec 2024 19:34:51 +0100 (CET) Received: from [192.168.232.97] (unknown [192.168.232.97]) by messagerie.si.c-s.fr (Postfix) with ESMTP id AF4708B763; Thu, 12 Dec 2024 19:34:46 +0100 (CET) Message-ID: <2809dcce-3405-430e-b43d-d75f35bdb7d5@csgroup.eu> Date: Thu, 12 Dec 2024 19:34:45 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [RFC 3/5] powerpc: kvm: drop 32-bit book3s To: Arnd Bergmann , kvm@vger.kernel.org Cc: Arnd Bergmann , Thomas Bogendoerfer , Huacai Chen , Jiaxun Yang , Michael Ellerman , Nicholas Piggin , Naveen N Rao , Madhavan Srinivasan , Alexander Graf , Crystal Wood , Anup Patel , Atish Patra , Paul Walmsley , Palmer Dabbelt , Albert Ou , Sean Christopherson , Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, "H. Peter Anvin" , Vitaly Kuznetsov , David Woodhouse , Paul Durrant , Marc Zyngier , linux-kernel@vger.kernel.org, linux-mips@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, kvm-riscv@lists.infradead.org, linux-riscv@lists.infradead.org References: <20241212125516.467123-1-arnd@kernel.org> <20241212125516.467123-4-arnd@kernel.org> Content-Language: fr-FR From: Christophe Leroy In-Reply-To: <20241212125516.467123-4-arnd@kernel.org> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20241212_103459_661906_890DCE05 X-CRM114-Status: GOOD ( 26.33 ) X-BeenThere: kvm-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "kvm-riscv" Errors-To: kvm-riscv-bounces+kvm-riscv=archiver.kernel.org@lists.infradead.org CgpMZSAxMi8xMi8yMDI0IMOgIDEzOjU1LCBBcm5kIEJlcmdtYW5uIGEgw6ljcml0wqA6Cj4gRnJv bTogQXJuZCBCZXJnbWFubiA8YXJuZEBhcm5kYi5kZT4KPiAKPiBTdXBwb3J0IGZvciBLVk0gb24g MzItYml0IEJvb2sgSUlJLXMgaW1wbGVtZW50YXRpb25zIHdhcyBhZGRlZCBpbiAyMDEwCj4gYW5k IHN1cHBvcnRzIFBvd2VyTWFjLCBDSFJQLCBhbmQgZW1iZWRkZWQgcGxhdGZvcm1zIHVzaW5nIHRo ZSBGcmVlc2NhbGUgRzQKPiAobXBjNzR4eCksIGUzMDAgKG1wYzgzeHgpIGFuZCBlNjAwIChtcGM4 Nnh4KSBDUFVzIGZyb20gMjAwMyB0byAyMDA5Lgo+IAo+IEVhcmxpZXIgNjAzLzYwNC83NTAgbWFj aGluZXMgbWlnaHQgd29yayBidXQgd291bGQgYmUgZXZlbiBtb3JlIGxpbWl0ZWQKPiBieSB0aGVp ciBhdmFpbGFibGUgbWVtb3J5Lgo+IAo+IFRoZSBvbmx5IGxpa2VseSB1c2VycyBvZiBLVk0gb24g YW55IG9mIHRoZXNlIHdlcmUgdGhlIGZpbmFsIEFwcGxlCj4gUG93ZXJNYWMvUG93ZXJCb29rL2lC b29rIEc0IG1vZGVscyB3aXRoIDJHQiBvZiBSQU0gdGhhdCB3ZXJlIGF0IHRoZSBoaWdoCj4gZW5k IDIwIHllYXJzIGFnbyBidXQgYXJlIGp1c3QgYXMgb2Jzb2xldGUgYXMgdGhlaXIgeDg2LTMyIGNv dW50ZXJwYXJ0cy4KPiBUaGUgY29kZSBoYXMgYmVlbiBvcnBoYW5lZCBzaW5jZSAyMDIzLgoKVGhh bmtzIGZvciBkb2luZyB0aGlzLCBpdCB3aWxsIGhlbHAgbWFraW5nIG1haW50ZW5hbmNlIGFuZCBl dm9sdXRpb24gb2YgCjMyIGJpdHMgZWFzaWVyLgoKU2hvdWxkIGZpeCBodHRwczovL2dpdGh1Yi5j b20vbGludXhwcGMvaXNzdWVzL2lzc3Vlcy8zMzQKCgoKPiAKPiBTaWduZWQtb2ZmLWJ5OiBBcm5k IEJlcmdtYW5uIDxhcm5kQGFybmRiLmRlPgo+IC0tLQo+ICAgTUFJTlRBSU5FUlMgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgfCAgIDIgKy0KPiAgIGFyY2gvcG93ZXJwYy9pbmNsdWRlL2Fz bS9rdm1fYm9vazNzLmggICAgIHwgIDE5IC0tLS0KPiAgIGFyY2gvcG93ZXJwYy9pbmNsdWRlL2Fz bS9rdm1fYm9vazNzX2FzbS5oIHwgIDEwIC0tCj4gICBhcmNoL3Bvd2VycGMva3ZtL0tjb25maWcg ICAgICAgICAgICAgICAgICB8ICAyMiAtLS0tCj4gICBhcmNoL3Bvd2VycGMva3ZtL01ha2VmaWxl ICAgICAgICAgICAgICAgICB8ICAxNSAtLS0KPiAgIGFyY2gvcG93ZXJwYy9rdm0vYm9vazNzLmMg ICAgICAgICAgICAgICAgIHwgIDE4IC0tLS0KPiAgIGFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2Vt dWxhdGUuYyAgICAgICAgIHwgIDM3IC0tLS0tLS0KPiAgIGFyY2gvcG93ZXJwYy9rdm0vYm9vazNz X2ludGVycnVwdHMuUyAgICAgIHwgIDExIC0tCj4gICBhcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19t bXVfaHB0ZS5jICAgICAgICB8ICAxMiAtLS0KPiAgIGFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3By LmMgICAgICAgICAgICAgIHwgMTIyICstLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiAgIGFyY2gvcG93 ZXJwYy9rdm0vYm9vazNzX3JtaGFuZGxlcnMuUyAgICAgIHwgMTEwIC0tLS0tLS0tLS0tLS0tLS0t LS0KPiAgIGFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3NlZ21lbnQuUyAgICAgICAgIHwgIDMwICst LS0tLQo+ICAgYXJjaC9wb3dlcnBjL2t2bS9lbXVsYXRlLmMgICAgICAgICAgICAgICAgfCAgIDIg LQo+ICAgYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMgICAgICAgICAgICAgICAgfCAgIDIgLQo+ ICAgMTQgZmlsZXMgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCA0MDkgZGVsZXRpb25zKC0pCgpT b21lIGxlZnQtb3ZlciA/CgokIGdpdCBncmVwIEtWTV9CT09LM1NfMzJfSEFORExFUgphcmNoL3Bv d2VycGMvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmg6I2lmZGVmIENPTkZJR19LVk1fQk9PSzNTXzMy X0hBTkRMRVIKYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oOiNlbmRpZiAvKiAK Q09ORklHX0tWTV9CT09LM1NfMzJfSEFORExFUiAqLwphcmNoL3Bvd2VycGMva2VybmVsL2FzbS1v ZmZzZXRzLmM6I2lmZGVmIENPTkZJR19LVk1fQk9PSzNTXzMyX0hBTkRMRVIKCldoYXQgYWJvdXQg dGhlIGZvbGxvd2luZyBpbiBhc20tb2Zmc2V0cy5jLCBzaG91bGQgaXQgc3RpbGwgdGVzdCAKQ09O RklHX1BQQ19CT09LM1NfNjQgPyBJcyBDT05GSUdfS1ZNX0JPT0szU19QUl9QT1NTSUJMRSBzdGls bCBwb3NzaWJsZSAKb24gc29tZXRoaW5nIGVsc2UgPwoKI2lmIGRlZmluZWQoQ09ORklHX1BQQ19C T09LM1NfNjQpICYmIGRlZmluZWQoQ09ORklHX0tWTV9CT09LM1NfUFJfUE9TU0lCTEUpCglPRkZT RVQoVkNQVV9TSEFSRURCRSwga3ZtX3ZjcHUsIGFyY2guc2hhcmVkX2JpZ19lbmRpYW4pOwojZW5k aWYKClNob3VsZG4ndCBDT05GSUdfS1ZNIGFuZC9vciBDT05GSUdfVklSVFVBTElTQVRJT04gYmUg cmVzdHJpY3RlZCB0byAKQ09ORklHX1BQQzY0IG5vdyA/CgpXaGF0IGFib3V0OgoKYXJjaC9wb3dl cnBjL2tlcm5lbC9oZWFkX2Jvb2szc18zMi5TOiNpbmNsdWRlIDxhc20va3ZtX2Jvb2szc19hc20u aD4KYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkX2Jvb2szc18zMi5TOiNpbmNsdWRlICIuLi9rdm0v Ym9vazNzX3JtaGFuZGxlcnMuUyIKClRoZXJlIGlzIHN0aWxsIGFyY2gvcG93ZXJwYy9rdm0vYm9v azNzXzMyX21tdS5jCgpDaHJpc3RvcGhlCgoKPiAKPiBkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMg Yi9NQUlOVEFJTkVSUwo+IGluZGV4IDUzMTU2MWM3YTliNy4uOGQ1MzgzMzY0NWZhIDEwMDY0NAo+ IC0tLSBhL01BSU5UQUlORVJTCj4gKysrIGIvTUFJTlRBSU5FUlMKPiBAQCAtMTI2NDIsNyArMTI2 NDIsNyBAQCBMOglsaW51eHBwYy1kZXZAbGlzdHMub3psYWJzLm9yZwo+ICAgTDoJa3ZtQHZnZXIu a2VybmVsLm9yZwo+ICAgUzoJTWFpbnRhaW5lZCAoQm9vazNTIDY0LWJpdCBIVikKPiAgIFM6CU9k ZCBmaXhlcyAoQm9vazNTIDY0LWJpdCBQUikKPiAtUzoJT3JwaGFuIChCb29rM0UgYW5kIDMyLWJp dCkKPiArUzoJT3JwaGFuIChCb29rM0UpCj4gICBUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcv cHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L3Bvd2VycGMvbGludXguZ2l0IHRvcGljL3BwYy1rdm0K PiAgIEY6CWFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm0qCj4gICBGOglhcmNoL3Bvd2VycGMv aW5jbHVkZS91YXBpL2FzbS9rdm0qCj4gZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRl L2FzbS9rdm1fYm9vazNzLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2Jvb2szcy5o Cj4gaW5kZXggZTFmZjI5MWJhODkxLi43MTUzMmUwZTY1YTYgMTAwNjQ0Cj4gLS0tIGEvYXJjaC9w b3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9ib29rM3MuaAo+ICsrKyBiL2FyY2gvcG93ZXJwYy9pbmNs dWRlL2FzbS9rdm1fYm9vazNzLmgKPiBAQCAtMzYsMjEgKzM2LDE0IEBAIHN0cnVjdCBrdm1wcGNf c2lkX21hcCB7Cj4gICAjZGVmaW5lIFNJRF9NQVBfTlVNICAgICAoMSA8PCBTSURfTUFQX0JJVFMp Cj4gICAjZGVmaW5lIFNJRF9NQVBfTUFTSyAgICAoU0lEX01BUF9OVU0gLSAxKQo+ICAgCj4gLSNp ZmRlZiBDT05GSUdfUFBDX0JPT0szU182NAo+ICAgI2RlZmluZSBTSURfQ09OVEVYVFMJMQo+IC0j ZWxzZQo+IC0jZGVmaW5lIFNJRF9DT05URVhUUwkxMjgKPiAtI2RlZmluZSBWU0lEX1BPT0xfU0la RQkoU0lEX0NPTlRFWFRTICogMTYpCj4gLSNlbmRpZgo+ICAgCj4gICBzdHJ1Y3QgaHB0ZV9jYWNo ZSB7Cj4gICAJc3RydWN0IGhsaXN0X25vZGUgbGlzdF9wdGU7Cj4gICAJc3RydWN0IGhsaXN0X25v ZGUgbGlzdF9wdGVfbG9uZzsKPiAgIAlzdHJ1Y3QgaGxpc3Rfbm9kZSBsaXN0X3ZwdGU7Cj4gICAJ c3RydWN0IGhsaXN0X25vZGUgbGlzdF92cHRlX2xvbmc7Cj4gLSNpZmRlZiBDT05GSUdfUFBDX0JP T0szU182NAo+ICAgCXN0cnVjdCBobGlzdF9ub2RlIGxpc3RfdnB0ZV82NGs7Cj4gLSNlbmRpZgo+ ICAgCXN0cnVjdCByY3VfaGVhZCByY3VfaGVhZDsKPiAgIAl1NjQgaG9zdF92cG47Cj4gICAJdTY0 IHBmbjsKPiBAQCAtMTEyLDE0ICsxMDUsOSBAQCBzdHJ1Y3Qga3ZtcHBjX3ZjcHVfYm9vazNzIHsK PiAgIAl1NjQgaGlvcjsKPiAgIAl1NjQgbXNyX21hc2s7Cj4gICAJdTY0IHZ0YjsKPiAtI2lmZGVm IENPTkZJR19QUENfQk9PSzNTXzMyCj4gLQl1MzIgdnNpZF9wb29sW1ZTSURfUE9PTF9TSVpFXTsK PiAtCXUzMiB2c2lkX25leHQ7Cj4gLSNlbHNlCj4gICAJdTY0IHByb3RvX3ZzaWRfZmlyc3Q7Cj4g ICAJdTY0IHByb3RvX3ZzaWRfbWF4Owo+ICAgCXU2NCBwcm90b192c2lkX25leHQ7Cj4gLSNlbmRp Zgo+ICAgCWludCBjb250ZXh0X2lkW1NJRF9DT05URVhUU107Cj4gICAKPiAgIAlib29sIGhpb3Jf ZXhwbGljaXQ7CQkvKiBISU9SIGlzIHNldCBieSBpb2N0bCwgbm90IFBWUiAqLwo+IEBAIC0xMjgs OSArMTE2LDcgQEAgc3RydWN0IGt2bXBwY192Y3B1X2Jvb2szcyB7Cj4gICAJc3RydWN0IGhsaXN0 X2hlYWQgaHB0ZV9oYXNoX3B0ZV9sb25nW0hQVEVHX0hBU0hfTlVNX1BURV9MT05HXTsKPiAgIAlz dHJ1Y3QgaGxpc3RfaGVhZCBocHRlX2hhc2hfdnB0ZVtIUFRFR19IQVNIX05VTV9WUFRFXTsKPiAg IAlzdHJ1Y3QgaGxpc3RfaGVhZCBocHRlX2hhc2hfdnB0ZV9sb25nW0hQVEVHX0hBU0hfTlVNX1ZQ VEVfTE9OR107Cj4gLSNpZmRlZiBDT05GSUdfUFBDX0JPT0szU182NAo+ICAgCXN0cnVjdCBobGlz dF9oZWFkIGhwdGVfaGFzaF92cHRlXzY0a1tIUFRFR19IQVNIX05VTV9WUFRFXzY0S107Cj4gLSNl bmRpZgo+ICAgCWludCBocHRlX2NhY2hlX2NvdW50Owo+ICAgCXNwaW5sb2NrX3QgbW11X2xvY2s7 Cj4gICB9Owo+IEBAIC0zOTEsMTIgKzM3Nyw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGt2bXBw Y192Y3B1X2Jvb2szcyAqdG9fYm9vazNzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKPiAgIAo+ICAg LyogQWxzbyBhZGQgc3ViYXJjaCBzcGVjaWZpYyBkZWZpbmVzICovCj4gICAKPiAtI2lmZGVmIENP TkZJR19LVk1fQk9PSzNTXzMyX0hBTkRMRVIKPiAtI2luY2x1ZGUgPGFzbS9rdm1fYm9vazNzXzMy Lmg+Cj4gLSNlbmRpZgo+IC0jaWZkZWYgQ09ORklHX0tWTV9CT09LM1NfNjRfSEFORExFUgo+ICAg I2luY2x1ZGUgPGFzbS9rdm1fYm9vazNzXzY0Lmg+Cj4gLSNlbmRpZgo+ICAgCj4gICBzdGF0aWMg aW5saW5lIHZvaWQga3ZtcHBjX3NldF9ncHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgbnVt LCB1bG9uZyB2YWwpCj4gICB7Cj4gZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2Fz bS9rdm1fYm9vazNzX2FzbS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9ib29rM3Nf YXNtLmgKPiBpbmRleCBhMzY3OTc5Mzg2MjAuLjk4MTc0MzYzOTQ2ZSAxMDA2NDQKPiAtLS0gYS9h cmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2Jvb2szc19hc20uaAo+ICsrKyBiL2FyY2gvcG93 ZXJwYy9pbmNsdWRlL2FzbS9rdm1fYm9vazNzX2FzbS5oCj4gQEAgLTExMywxMSArMTEzLDkgQEAg c3RydWN0IGt2bXBwY19ob3N0X3N0YXRlIHsKPiAgIAl1NjQgZGVjX2V4cGlyZXM7Cj4gICAJc3Ry dWN0IGt2bV9zcGxpdF9tb2RlICprdm1fc3BsaXRfbW9kZTsKPiAgICNlbmRpZgo+IC0jaWZkZWYg Q09ORklHX1BQQ19CT09LM1NfNjQKPiAgIAl1NjQgY2ZhcjsKPiAgIAl1NjQgcHByOwo+ICAgCXU2 NCBob3N0X2ZzY3I7Cj4gLSNlbmRpZgo+ICAgfTsKPiAgIAo+ICAgc3RydWN0IGt2bXBwY19ib29r M3Nfc2hhZG93X3ZjcHUgewo+IEBAIC0xMzQsMjAgKzEzMiwxMiBAQCBzdHJ1Y3Qga3ZtcHBjX2Jv b2szc19zaGFkb3dfdmNwdSB7Cj4gICAJdTMyIGZhdWx0X2RzaXNyOwo+ICAgCXUzMiBsYXN0X2lu c3Q7Cj4gICAKPiAtI2lmZGVmIENPTkZJR19QUENfQk9PSzNTXzMyCj4gLQl1MzIgICAgIHNyWzE2 XTsJCQkvKiBHdWVzdCBTUnMgKi8KPiAtCj4gLQlzdHJ1Y3Qga3ZtcHBjX2hvc3Rfc3RhdGUgaHN0 YXRlOwo+IC0jZW5kaWYKPiAtCj4gLSNpZmRlZiBDT05GSUdfUFBDX0JPT0szU182NAo+ICAgCXU4 IHNsYl9tYXg7CQkJLyogaGlnaGVzdCB1c2VkIGd1ZXN0IHNsYiBlbnRyeSAqLwo+ICAgCXN0cnVj dCAgewo+ICAgCQl1NjQgICAgIGVzaWQ7Cj4gICAJCXU2NCAgICAgdnNpZDsKPiAgIAl9IHNsYls2 NF07CQkJLyogZ3Vlc3QgU0xCICovCj4gICAJdTY0IHNoYWRvd19mc2NyOwo+IC0jZW5kaWYKPiAg IH07Cj4gICAKPiAgICNlbmRpZiAvKl9fQVNTRU1CTFlfXyAqLwo+IGRpZmYgLS1naXQgYS9hcmNo L3Bvd2VycGMva3ZtL0tjb25maWcgYi9hcmNoL3Bvd2VycGMva3ZtL0tjb25maWcKPiBpbmRleCBl MjIzMGVhNTEyY2YuLmQwYTZlMmY2ZGY4MSAxMDA2NDQKPiAtLS0gYS9hcmNoL3Bvd2VycGMva3Zt L0tjb25maWcKPiArKysgYi9hcmNoL3Bvd2VycGMva3ZtL0tjb25maWcKPiBAQCAtMjcsMTEgKzI3 LDYgQEAgY29uZmlnIEtWTQo+ICAgY29uZmlnIEtWTV9CT09LM1NfSEFORExFUgo+ICAgCWJvb2wK PiAgIAo+IC1jb25maWcgS1ZNX0JPT0szU18zMl9IQU5ETEVSCj4gLQlib29sCj4gLQlzZWxlY3Qg S1ZNX0JPT0szU19IQU5ETEVSCj4gLQlzZWxlY3QgS1ZNX01NSU8KPiAtCj4gICBjb25maWcgS1ZN X0JPT0szU182NF9IQU5ETEVSCj4gICAJYm9vbAo+ICAgCXNlbGVjdCBLVk1fQk9PSzNTX0hBTkRM RVIKPiBAQCAtNDQsMjMgKzM5LDYgQEAgY29uZmlnIEtWTV9CT09LM1NfUFJfUE9TU0lCTEUKPiAg IGNvbmZpZyBLVk1fQk9PSzNTX0hWX1BPU1NJQkxFCj4gICAJYm9vbAo+ICAgCj4gLWNvbmZpZyBL Vk1fQk9PSzNTXzMyCj4gLQl0cmlzdGF0ZSAiS1ZNIHN1cHBvcnQgZm9yIFBvd2VyUEMgYm9vazNz XzMyIHByb2Nlc3NvcnMiCj4gLQlkZXBlbmRzIG9uIFBQQ19CT09LM1NfMzIgJiYgIVNNUCAmJiAh UFRFXzY0QklUCj4gLQlkZXBlbmRzIG9uICFDT05URVhUX1RSQUNLSU5HX1VTRVIKPiAtCXNlbGVj dCBLVk0KPiAtCXNlbGVjdCBLVk1fQk9PSzNTXzMyX0hBTkRMRVIKPiAtCXNlbGVjdCBLVk1fQk9P SzNTX1BSX1BPU1NJQkxFCj4gLQlzZWxlY3QgUFBDX0ZQVQo+IC0JaGVscAo+IC0JICBTdXBwb3J0 IHJ1bm5pbmcgdW5tb2RpZmllZCBib29rM3NfMzIgZ3Vlc3Qga2VybmVscwo+IC0JICBpbiB2aXJ0 dWFsIG1hY2hpbmVzIG9uIGJvb2szc18zMiBob3N0IHByb2Nlc3NvcnMuCj4gLQo+IC0JICBUaGlz IG1vZHVsZSBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIGhhcmR3YXJlIGNhcGFiaWxpdGllcyB0aHJv dWdoCj4gLQkgIGEgY2hhcmFjdGVyIGRldmljZSBub2RlIG5hbWVkIC9kZXYva3ZtLgo+IC0KPiAt CSAgSWYgdW5zdXJlLCBzYXkgTi4KPiAtCj4gICBjb25maWcgS1ZNX0JPT0szU182NAo+ICAgCXRy aXN0YXRlICJLVk0gc3VwcG9ydCBmb3IgUG93ZXJQQyBib29rM3NfNjQgcHJvY2Vzc29ycyIKPiAg IAlkZXBlbmRzIG9uIFBQQ19CT09LM1NfNjQKPiBkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2 bS9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy9rdm0vTWFrZWZpbGUKPiBpbmRleCAyOTRmMjc0Mzlm N2YuLjA1OWI0YzE1M2Q5NyAxMDA2NDQKPiAtLS0gYS9hcmNoL3Bvd2VycGMva3ZtL01ha2VmaWxl Cj4gKysrIGIvYXJjaC9wb3dlcnBjL2t2bS9NYWtlZmlsZQo+IEBAIC05NSwyNyArOTUsMTIgQEAg a3ZtLWJvb2szc182NC1tb2R1bGUtb2JqcyA6PSBcCj4gICAKPiAgIGt2bS1vYmpzLSQoQ09ORklH X0tWTV9CT09LM1NfNjQpIDo9ICQoa3ZtLWJvb2szc182NC1tb2R1bGUtb2JqcykKPiAgIAo+IC1r dm0tYm9vazNzXzMyLW9ianMgOj0gXAo+IC0JJChjb21tb24tb2Jqcy15KSBcCj4gLQllbXVsYXRl Lm8gXAo+IC0JZnB1Lm8gXAo+IC0JYm9vazNzX3BhaXJlZF9zaW5nbGVzLm8gXAo+IC0JYm9vazNz Lm8gXAo+IC0JYm9vazNzX3ByLm8gXAo+IC0JYm9vazNzX2VtdWxhdGUubyBcCj4gLQlib29rM3Nf aW50ZXJydXB0cy5vIFwKPiAtCWJvb2szc19tbXVfaHB0ZS5vIFwKPiAtCWJvb2szc18zMl9tbXVf aG9zdC5vIFwKPiAtCWJvb2szc18zMl9tbXUubwo+IC1rdm0tb2Jqcy0kKENPTkZJR19LVk1fQk9P SzNTXzMyKSA6PSAkKGt2bS1ib29rM3NfMzItb2JqcykKPiAtCj4gICBrdm0tb2Jqcy0kKENPTkZJ R19LVk1fTVBJQykgKz0gbXBpYy5vCj4gICAKPiAgIGt2bS15ICs9ICQoa3ZtLW9ianMtbSkgJChr dm0tb2Jqcy15KQo+ICAgCj4gICBvYmotJChDT05GSUdfS1ZNX0U1MDBNQykgKz0ga3ZtLm8KPiAg IG9iai0kKENPTkZJR19LVk1fQk9PSzNTXzY0KSArPSBrdm0ubwo+IC1vYmotJChDT05GSUdfS1ZN X0JPT0szU18zMikgKz0ga3ZtLm8KPiAgIAo+ICAgb2JqLSQoQ09ORklHX0tWTV9CT09LM1NfNjRf UFIpICs9IGt2bS1wci5vCj4gICBvYmotJChDT05GSUdfS1ZNX0JPT0szU182NF9IVikgKz0ga3Zt LWh2Lm8KPiBkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3MuYyBiL2FyY2gvcG93 ZXJwYy9rdm0vYm9vazNzLmMKPiBpbmRleCBkNzljNWQxMDk4YzAuLjc1ZjRkMzk3MTE0ZiAxMDA2 NDQKPiAtLS0gYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szcy5jCj4gKysrIGIvYXJjaC9wb3dlcnBj L2t2bS9ib29rM3MuYwo+IEBAIC04OTgsMTIgKzg5OCw5IEBAIGJvb2wga3ZtX3Rlc3RfYWdlX2dm bihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSkKPiAgIAo+ICAg aW50IGt2bXBwY19jb3JlX2luaXRfdm0oc3RydWN0IGt2bSAqa3ZtKQo+ICAgewo+IC0KPiAtI2lm ZGVmIENPTkZJR19QUEM2NAo+ICAgCUlOSVRfTElTVF9IRUFEX1JDVSgma3ZtLT5hcmNoLnNwYXBy X3RjZV90YWJsZXMpOwo+ICAgCUlOSVRfTElTVF9IRUFEKCZrdm0tPmFyY2gucnRhc190b2tlbnMp Owo+ICAgCW11dGV4X2luaXQoJmt2bS0+YXJjaC5ydGFzX3Rva2VuX2xvY2spOwo+IC0jZW5kaWYK PiAgIAo+ICAgCXJldHVybiBrdm0tPmFyY2gua3ZtX29wcy0+aW5pdF92bShrdm0pOwo+ICAgfQo+ IEBAIC05MTIsMTAgKzkwOSw4IEBAIHZvaWQga3ZtcHBjX2NvcmVfZGVzdHJveV92bShzdHJ1Y3Qg a3ZtICprdm0pCj4gICB7Cj4gICAJa3ZtLT5hcmNoLmt2bV9vcHMtPmRlc3Ryb3lfdm0oa3ZtKTsK PiAgIAo+IC0jaWZkZWYgQ09ORklHX1BQQzY0Cj4gICAJa3ZtcHBjX3J0YXNfdG9rZW5zX2ZyZWUo a3ZtKTsKPiAgIAlXQVJOX09OKCFsaXN0X2VtcHR5KCZrdm0tPmFyY2guc3BhcHJfdGNlX3RhYmxl cykpOwo+IC0jZW5kaWYKPiAgIAo+ICAgI2lmZGVmIENPTkZJR19LVk1fWElDUwo+ICAgCS8qCj4g QEAgLTEwNjksMTAgKzEwNjQsNiBAQCBzdGF0aWMgaW50IGt2bXBwY19ib29rM3NfaW5pdCh2b2lk KQo+ICAgCXIgPSBrdm1faW5pdChzaXplb2Yoc3RydWN0IGt2bV92Y3B1KSwgMCwgVEhJU19NT0RV TEUpOwo+ICAgCWlmIChyKQo+ICAgCQlyZXR1cm4gcjsKPiAtI2lmZGVmIENPTkZJR19LVk1fQk9P SzNTXzMyX0hBTkRMRVIKPiAtCXIgPSBrdm1wcGNfYm9vazNzX2luaXRfcHIoKTsKPiAtI2VuZGlm Cj4gLQo+ICAgI2lmZGVmIENPTkZJR19LVk1fWElDUwo+ICAgI2lmZGVmIENPTkZJR19LVk1fWElW RQo+ICAgCWlmICh4aWNzX29uX3hpdmUoKSkgewo+IEBAIC0xMDg5LDE3ICsxMDgwLDggQEAgc3Rh dGljIGludCBrdm1wcGNfYm9vazNzX2luaXQodm9pZCkKPiAgIAo+ICAgc3RhdGljIHZvaWQga3Zt cHBjX2Jvb2szc19leGl0KHZvaWQpCj4gICB7Cj4gLSNpZmRlZiBDT05GSUdfS1ZNX0JPT0szU18z Ml9IQU5ETEVSCj4gLQlrdm1wcGNfYm9vazNzX2V4aXRfcHIoKTsKPiAtI2VuZGlmCj4gICAJa3Zt X2V4aXQoKTsKPiAgIH0KPiAgIAo+ICAgbW9kdWxlX2luaXQoa3ZtcHBjX2Jvb2szc19pbml0KTsK PiAgIG1vZHVsZV9leGl0KGt2bXBwY19ib29rM3NfZXhpdCk7Cj4gLQo+IC0vKiBPbiAzMmJpdCB0 aGlzIGlzIG91ciBvbmUgYW5kIG9ubHkga2VybmVsIG1vZHVsZSAqLwo+IC0jaWZkZWYgQ09ORklH X0tWTV9CT09LM1NfMzJfSEFORExFUgo+IC1NT0RVTEVfQUxJQVNfTUlTQ0RFVihLVk1fTUlOT1Ip Owo+IC1NT0RVTEVfQUxJQVMoImRldm5hbWU6a3ZtIik7Cj4gLSNlbmRpZgo+IGRpZmYgLS1naXQg YS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19lbXVsYXRlLmMgYi9hcmNoL3Bvd2VycGMva3ZtL2Jv b2szc19lbXVsYXRlLmMKPiBpbmRleCBkZTEyNmQxNTMzMjguLjMwYTExN2Q2ZTcwYyAxMDA2NDQK PiAtLS0gYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19lbXVsYXRlLmMKPiArKysgYi9hcmNoL3Bv d2VycGMva3ZtL2Jvb2szc19lbXVsYXRlLmMKPiBAQCAtMzUxLDcgKzM1MSw2IEBAIGludCBrdm1w cGNfY29yZV9lbXVsYXRlX29wX3ByKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKPiAgIAkJCXZjcHUt PmFyY2gubW11LnRsYmllKHZjcHUsIGFkZHIsIGxhcmdlKTsKPiAgIAkJCWJyZWFrOwo+ICAgCQl9 Cj4gLSNpZmRlZiBDT05GSUdfUFBDX0JPT0szU182NAo+ICAgCQljYXNlIE9QXzMxX1hPUF9GQUtF X1NDMToKPiAgIAkJewo+ICAgCQkJLyogU0MgMSBwYXByIGh5cGVyY2FsbHMgKi8KPiBAQCAtMzc4 LDcgKzM3Nyw2IEBAIGludCBrdm1wcGNfY29yZV9lbXVsYXRlX29wX3ByKHN0cnVjdCBrdm1fdmNw dSAqdmNwdSwKPiAgIAkJCWVtdWxhdGVkID0gRU1VTEFURV9FWElUX1VTRVI7Cj4gICAJCQlicmVh azsKPiAgIAkJfQo+IC0jZW5kaWYKPiAgIAkJY2FzZSBPUF8zMV9YT1BfRUlPSU86Cj4gICAJCQli cmVhazsKPiAgIAkJY2FzZSBPUF8zMV9YT1BfU0xCTVRFOgo+IEBAIC03NjIsNyArNzYwLDYgQEAg aW50IGt2bXBwY19jb3JlX2VtdWxhdGVfbXRzcHJfcHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBp bnQgc3BybiwgdWxvbmcgc3ByX3ZhbCkKPiAgIAljYXNlIFNQUk5fR1FSNzoKPiAgIAkJdG9fYm9v azNzKHZjcHUpLT5ncXJbc3BybiAtIFNQUk5fR1FSMF0gPSBzcHJfdmFsOwo+ICAgCQlicmVhazsK PiAtI2lmZGVmIENPTkZJR19QUENfQk9PSzNTXzY0Cj4gICAJY2FzZSBTUFJOX0ZTQ1I6Cj4gICAJ CWt2bXBwY19zZXRfZnNjcih2Y3B1LCBzcHJfdmFsKTsKPiAgIAkJYnJlYWs7Cj4gQEAgLTgxMCw3 ICs4MDcsNiBAQCBpbnQga3ZtcHBjX2NvcmVfZW11bGF0ZV9tdHNwcl9wcihzdHJ1Y3Qga3ZtX3Zj cHUgKnZjcHUsIGludCBzcHJuLCB1bG9uZyBzcHJfdmFsKQo+ICAgCQl0bV9kaXNhYmxlKCk7Cj4g ICAKPiAgIAkJYnJlYWs7Cj4gLSNlbmRpZgo+ICAgI2VuZGlmCj4gICAJY2FzZSBTUFJOX0lDVEM6 Cj4gICAJY2FzZSBTUFJOX1RIUk0xOgo+IEBAIC04MjksNyArODI1LDYgQEAgaW50IGt2bXBwY19j b3JlX2VtdWxhdGVfbXRzcHJfcHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgc3BybiwgdWxv bmcgc3ByX3ZhbCkKPiAgIAljYXNlIFNQUk5fV1BBUl9HRUtLTzoKPiAgIAljYXNlIFNQUk5fTVNT U1IwOgo+ICAgCWNhc2UgU1BSTl9EQUJSOgo+IC0jaWZkZWYgQ09ORklHX1BQQ19CT09LM1NfNjQK PiAgIAljYXNlIFNQUk5fTU1DUlM6Cj4gICAJY2FzZSBTUFJOX01NQ1JBOgo+ICAgCWNhc2UgU1BS Tl9NTUNSMDoKPiBAQCAtODM5LDcgKzgzNCw2IEBAIGludCBrdm1wcGNfY29yZV9lbXVsYXRlX210 c3ByX3ByKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHNwcm4sIHVsb25nIHNwcl92YWwpCj4g ICAJY2FzZSBTUFJOX1VBTU9SOgo+ICAgCWNhc2UgU1BSTl9JQU1SOgo+ICAgCWNhc2UgU1BSTl9B TVI6Cj4gLSNlbmRpZgo+ICAgCQlicmVhazsKPiAgIHVucHJpdmlsZWdlZDoKPiAgIAlkZWZhdWx0 Ogo+IEBAIC05NDMsNyArOTM3LDYgQEAgaW50IGt2bXBwY19jb3JlX2VtdWxhdGVfbWZzcHJfcHIo c3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgc3BybiwgdWxvbmcgKnNwcl92YWwKPiAgIAljYXNl IFNQUk5fR1FSNzoKPiAgIAkJKnNwcl92YWwgPSB0b19ib29rM3ModmNwdSktPmdxcltzcHJuIC0g U1BSTl9HUVIwXTsKPiAgIAkJYnJlYWs7Cj4gLSNpZmRlZiBDT05GSUdfUFBDX0JPT0szU182NAo+ ICAgCWNhc2UgU1BSTl9GU0NSOgo+ICAgCQkqc3ByX3ZhbCA9IHZjcHUtPmFyY2guZnNjcjsKPiAg IAkJYnJlYWs7Cj4gQEAgLTk3OCw3ICs5NzEsNiBAQCBpbnQga3ZtcHBjX2NvcmVfZW11bGF0ZV9t ZnNwcl9wcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBzcHJuLCB1bG9uZyAqc3ByX3ZhbAo+ ICAgCQkJKnNwcl92YWwgPSBtZnNwcihTUFJOX1RGSUFSKTsKPiAgIAkJdG1fZGlzYWJsZSgpOwo+ ICAgCQlicmVhazsKPiAtI2VuZGlmCj4gICAjZW5kaWYKPiAgIAljYXNlIFNQUk5fVEhSTTE6Cj4g ICAJY2FzZSBTUFJOX1RIUk0yOgo+IEBAIC05OTUsNyArOTg3LDYgQEAgaW50IGt2bXBwY19jb3Jl X2VtdWxhdGVfbWZzcHJfcHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgc3BybiwgdWxvbmcg KnNwcl92YWwKPiAgIAljYXNlIFNQUk5fV1BBUl9HRUtLTzoKPiAgIAljYXNlIFNQUk5fTVNTU1Iw Ogo+ICAgCWNhc2UgU1BSTl9EQUJSOgo+IC0jaWZkZWYgQ09ORklHX1BQQ19CT09LM1NfNjQKPiAg IAljYXNlIFNQUk5fTU1DUlM6Cj4gICAJY2FzZSBTUFJOX01NQ1JBOgo+ICAgCWNhc2UgU1BSTl9N TUNSMDoKPiBAQCAtMTAwNiw3ICs5OTcsNiBAQCBpbnQga3ZtcHBjX2NvcmVfZW11bGF0ZV9tZnNw cl9wcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBzcHJuLCB1bG9uZyAqc3ByX3ZhbAo+ICAg CWNhc2UgU1BSTl9VQU1PUjoKPiAgIAljYXNlIFNQUk5fSUFNUjoKPiAgIAljYXNlIFNQUk5fQU1S Ogo+IC0jZW5kaWYKPiAgIAkJKnNwcl92YWwgPSAwOwo+ICAgCQlicmVhazsKPiAgIAlkZWZhdWx0 Ogo+IEBAIC0xMDM4LDM1ICsxMDI4LDggQEAgdTMyIGt2bXBwY19hbGlnbm1lbnRfZHNpc3Ioc3Ry dWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgaW5zdCkKPiAgIAo+ICAgdWxvbmcga3Zt cHBjX2FsaWdubWVudF9kYXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgaW5z dCkKPiAgIHsKPiAtI2lmZGVmIENPTkZJR19QUENfQk9PSzNTXzY0Cj4gICAJLyoKPiAgIAkgKiBM aW51eCdzIGZpeF9hbGlnbm1lbnQoKSBhc3N1bWVzIHRoYXQgREFSIGlzIHZhbGlkLCBzbyBjYW4g d2UKPiAgIAkgKi8KPiAgIAlyZXR1cm4gdmNwdS0+YXJjaC5mYXVsdF9kYXI7Cj4gLSNlbHNlCj4g LQl1bG9uZyBkYXIgPSAwOwo+IC0JdWxvbmcgcmEgPSBnZXRfcmEoaW5zdCk7Cj4gLQl1bG9uZyBy YiA9IGdldF9yYihpbnN0KTsKPiAtCj4gLQlzd2l0Y2ggKGdldF9vcChpbnN0KSkgewo+IC0JY2Fz ZSBPUF9MRlM6Cj4gLQljYXNlIE9QX0xGRDoKPiAtCWNhc2UgT1BfU1RGRDoKPiAtCWNhc2UgT1Bf U1RGUzoKPiAtCQlpZiAocmEpCj4gLQkJCWRhciA9IGt2bXBwY19nZXRfZ3ByKHZjcHUsIHJhKTsK PiAtCQlkYXIgKz0gKHMzMikoKHMxNilpbnN0KTsKPiAtCQlicmVhazsKPiAtCWNhc2UgMzE6Cj4g LQkJaWYgKHJhKQo+IC0JCQlkYXIgPSBrdm1wcGNfZ2V0X2dwcih2Y3B1LCByYSk7Cj4gLQkJZGFy ICs9IGt2bXBwY19nZXRfZ3ByKHZjcHUsIHJiKTsKPiAtCQlicmVhazsKPiAtCWRlZmF1bHQ6Cj4g LQkJcHJpbnRrKEtFUk5fSU5GTyAiS1ZNOiBVbmFsaWduZWQgaW5zdHJ1Y3Rpb24gMHgleFxuIiwg aW5zdCk7Cj4gLQkJYnJlYWs7Cj4gLQl9Cj4gLQo+IC0JcmV0dXJuIGRhcjsKPiAtI2VuZGlmCj4g ICB9Cj4gZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2ludGVycnVwdHMuUyBi L2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2ludGVycnVwdHMuUwo+IGluZGV4IGY0YmVjMmZjNTFh YS4uYzViODhkNTQ1MWI3IDEwMDY0NAo+IC0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2lu dGVycnVwdHMuUwo+ICsrKyBiL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2ludGVycnVwdHMuUwo+ IEBAIC0xNCw3ICsxNCw2IEBACj4gICAjaW5jbHVkZSA8YXNtL2V4Y2VwdGlvbi02NHMuaD4KPiAg ICNpbmNsdWRlIDxhc20vYXNtLWNvbXBhdC5oPgo+ICAgCj4gLSNpZiBkZWZpbmVkKENPTkZJR19Q UENfQk9PSzNTXzY0KQo+ICAgI2lmZGVmIENPTkZJR19QUEM2NF9FTEZfQUJJX1YyCj4gICAjZGVm aW5lIEZVTkMobmFtZSkgCQluYW1lCj4gICAjZWxzZQo+IEBAIC0yMiwxMiArMjEsNiBAQAo+ICAg I2VuZGlmCj4gICAjZGVmaW5lIEdFVF9TSEFET1dfVkNQVShyZWcpICAgIGFkZGkJcmVnLCByMTMs IFBBQ0FfU1ZDUFUKPiAgIAo+IC0jZWxpZiBkZWZpbmVkKENPTkZJR19QUENfQk9PSzNTXzMyKQo+ IC0jZGVmaW5lIEZVTkMobmFtZSkJCW5hbWUKPiAtI2RlZmluZSBHRVRfU0hBRE9XX1ZDUFUocmVn KQlsd3ogICAgIHJlZywgKFRIUkVBRCArIFRIUkVBRF9LVk1fU1ZDUFUpKHIyKQo+IC0KPiAtI2Vu ZGlmIC8qIENPTkZJR19QUENfQk9PSzNTXzY0ICovCj4gLQo+ICAgI2RlZmluZSBWQ1BVX0xPQURf TlZHUFJTKHZjcHUpIFwKPiAgIAlQUENfTEwJcjE0LCBWQ1BVX0dQUihSMTQpKHZjcHUpOyBcCj4g ICAJUFBDX0xMCXIxNSwgVkNQVV9HUFIoUjE1KSh2Y3B1KTsgXAo+IEBAIC04OSw3ICs4Miw2IEBA IGt2bV9zdGFydF9saWdodHdlaWdodDoKPiAgIAlub3AKPiAgIAlSRVNUX0dQUigzLCByMSkKPiAg IAo+IC0jaWZkZWYgQ09ORklHX1BQQ19CT09LM1NfNjQKPiAgIAkvKiBHZXQgdGhlIGRjYnozMiBm bGFnICovCj4gICAJUFBDX0xMCXIwLCBWQ1BVX0hGTEFHUyhyMykKPiAgIAlybGRpY2wJcjAsIHIw LCAwLCA2MwkJLyogcjMgJj0gMSAqLwo+IEBAIC0xMTgsNyArMTEwLDYgQEAgc3ByZzNfbGl0dGxl X2VuZGlhbjoKPiAgIAo+ICAgYWZ0ZXJfc3ByZzNfbG9hZDoKPiAgIAltdHNwcglTUFJOX1NQUkcz LCByNAo+IC0jZW5kaWYgLyogQ09ORklHX1BQQ19CT09LM1NfNjQgKi8KPiAgIAo+ICAgCVBQQ19M TAlyNCwgVkNQVV9TSEFET1dfTVNSKHIzKQkvKiBnZXQgc2hhZG93X21zciAqLwo+ICAgCj4gQEAg LTE1NywxNCArMTQ4LDEyIEBAIGFmdGVyX3NwcmczX2xvYWQ6Cj4gICAJYmwJRlVOQyhrdm1wcGNf Y29weV9mcm9tX3N2Y3B1KQo+ICAgCW5vcAo+ICAgCj4gLSNpZmRlZiBDT05GSUdfUFBDX0JPT0sz U182NAo+ICAgCS8qCj4gICAJICogUmVsb2FkIGtlcm5lbCBTUFJHMyB2YWx1ZS4KPiAgIAkgKiBO byBuZWVkIHRvIHNhdmUgZ3Vlc3QgdmFsdWUgYXMgdXNlcm1vZGUgY2FuJ3QgbW9kaWZ5IFNQUkcz Lgo+ICAgCSAqLwo+ICAgCWxkCXIzLCBQQUNBX1NQUkdfVkRTTyhyMTMpCj4gICAJbXRzcHIJU1BS Tl9TUFJHX1ZEU09fV1JJVEUsIHIzCj4gLSNlbmRpZiAvKiBDT05GSUdfUFBDX0JPT0szU182NCAq Lwo+ICAgCj4gICAJLyogUjcgPSB2Y3B1ICovCj4gICAJUFBDX0xMCXI3LCBHUFIzKHIxKQo+IGRp ZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19tbXVfaHB0ZS5jIGIvYXJjaC9wb3dl cnBjL2t2bS9ib29rM3NfbW11X2hwdGUuYwo+IGluZGV4IGQ5MDRlMTNlMDY5Yi4uOTE2MTRjYTlm OTY5IDEwMDY0NAo+IC0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX21tdV9ocHRlLmMKPiAr KysgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19tbXVfaHB0ZS5jCj4gQEAgLTQ1LDEzICs0NSwx MSBAQCBzdGF0aWMgaW5saW5lIHU2NCBrdm1wcGNfbW11X2hhc2hfdnB0ZV9sb25nKHU2NCB2cGFn ZSkKPiAgIAkJICAgICAgIEhQVEVHX0hBU0hfQklUU19WUFRFX0xPTkcpOwo+ICAgfQo+ICAgCj4g LSNpZmRlZiBDT05GSUdfUFBDX0JPT0szU182NAo+ICAgc3RhdGljIGlubGluZSB1NjQga3ZtcHBj X21tdV9oYXNoX3ZwdGVfNjRrKHU2NCB2cGFnZSkKPiAgIHsKPiAgIAlyZXR1cm4gaGFzaF82NCgo dnBhZ2UgJiAweGZmZmZmZmZmMFVMTCkgPj4gNCwKPiAgIAkJICAgICAgIEhQVEVHX0hBU0hfQklU U19WUFRFXzY0Syk7Cj4gICB9Cj4gLSNlbmRpZgo+ICAgCj4gICB2b2lkIGt2bXBwY19tbXVfaHB0 ZV9jYWNoZV9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgaHB0ZV9jYWNoZSAqcHRl KQo+ICAgewo+IEBAIC04MCwxMiArNzgsMTAgQEAgdm9pZCBrdm1wcGNfbW11X2hwdGVfY2FjaGVf bWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGhwdGVfY2FjaGUgKnB0ZSkKPiAgIAlo bGlzdF9hZGRfaGVhZF9yY3UoJnB0ZS0+bGlzdF92cHRlX2xvbmcsCj4gICAJCQkgICAmdmNwdTNz LT5ocHRlX2hhc2hfdnB0ZV9sb25nW2luZGV4XSk7Cj4gICAKPiAtI2lmZGVmIENPTkZJR19QUENf Qk9PSzNTXzY0Cj4gICAJLyogQWRkIHRvIHZQVEVfNjRrIGxpc3QgKi8KPiAgIAlpbmRleCA9IGt2 bXBwY19tbXVfaGFzaF92cHRlXzY0ayhwdGUtPnB0ZS52cGFnZSk7Cj4gICAJaGxpc3RfYWRkX2hl YWRfcmN1KCZwdGUtPmxpc3RfdnB0ZV82NGssCj4gICAJCQkgICAmdmNwdTNzLT5ocHRlX2hhc2hf dnB0ZV82NGtbaW5kZXhdKTsKPiAtI2VuZGlmCj4gICAKPiAgIAl2Y3B1M3MtPmhwdGVfY2FjaGVf Y291bnQrKzsKPiAgIAo+IEBAIC0xMTMsOSArMTA5LDcgQEAgc3RhdGljIHZvaWQgaW52YWxpZGF0 ZV9wdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgaHB0ZV9jYWNoZSAqcHRlKQo+ICAg CWhsaXN0X2RlbF9pbml0X3JjdSgmcHRlLT5saXN0X3B0ZV9sb25nKTsKPiAgIAlobGlzdF9kZWxf aW5pdF9yY3UoJnB0ZS0+bGlzdF92cHRlKTsKPiAgIAlobGlzdF9kZWxfaW5pdF9yY3UoJnB0ZS0+ bGlzdF92cHRlX2xvbmcpOwo+IC0jaWZkZWYgQ09ORklHX1BQQ19CT09LM1NfNjQKPiAgIAlobGlz dF9kZWxfaW5pdF9yY3UoJnB0ZS0+bGlzdF92cHRlXzY0ayk7Cj4gLSNlbmRpZgo+ICAgCXZjcHUz cy0+aHB0ZV9jYWNoZV9jb3VudC0tOwo+ICAgCj4gICAJc3Bpbl91bmxvY2soJnZjcHUzcy0+bW11 X2xvY2spOwo+IEBAIC0yMjIsNyArMjE2LDYgQEAgc3RhdGljIHZvaWQga3ZtcHBjX21tdV9wdGVf dmZsdXNoX3Nob3J0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGd1ZXN0X3ZwKQo+ICAgCXJj dV9yZWFkX3VubG9jaygpOwo+ICAgfQo+ICAgCj4gLSNpZmRlZiBDT05GSUdfUFBDX0JPT0szU182 NAo+ICAgLyogRmx1c2ggd2l0aCBtYXNrIDB4ZmZmZmZmZmYwICovCj4gICBzdGF0aWMgdm9pZCBr dm1wcGNfbW11X3B0ZV92Zmx1c2hfNjRrKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGd1ZXN0 X3ZwKQo+ICAgewo+IEBAIC0yNDMsNyArMjM2LDYgQEAgc3RhdGljIHZvaWQga3ZtcHBjX21tdV9w dGVfdmZsdXNoXzY0ayhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBndWVzdF92cCkKPiAgIAo+ ICAgCXJjdV9yZWFkX3VubG9jaygpOwo+ICAgfQo+IC0jZW5kaWYKPiAgIAo+ICAgLyogRmx1c2gg d2l0aCBtYXNrIDB4ZmZmZmZmMDAwICovCj4gICBzdGF0aWMgdm9pZCBrdm1wcGNfbW11X3B0ZV92 Zmx1c2hfbG9uZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBndWVzdF92cCkKPiBAQCAtMjc1 LDExICsyNjcsOSBAQCB2b2lkIGt2bXBwY19tbXVfcHRlX3ZmbHVzaChzdHJ1Y3Qga3ZtX3ZjcHUg KnZjcHUsIHU2NCBndWVzdF92cCwgdTY0IHZwX21hc2spCj4gICAJY2FzZSAweGZmZmZmZmZmZlVM TDoKPiAgIAkJa3ZtcHBjX21tdV9wdGVfdmZsdXNoX3Nob3J0KHZjcHUsIGd1ZXN0X3ZwKTsKPiAg IAkJYnJlYWs7Cj4gLSNpZmRlZiBDT05GSUdfUFBDX0JPT0szU182NAo+ICAgCWNhc2UgMHhmZmZm ZmZmZjBVTEw6Cj4gICAJCWt2bXBwY19tbXVfcHRlX3ZmbHVzaF82NGsodmNwdSwgZ3Vlc3RfdnAp Owo+ICAgCQlicmVhazsKPiAtI2VuZGlmCj4gICAJY2FzZSAweGZmZmZmZjAwMFVMTDoKPiAgIAkJ a3ZtcHBjX21tdV9wdGVfdmZsdXNoX2xvbmcodmNwdSwgZ3Vlc3RfdnApOwo+ICAgCQlicmVhazsK PiBAQCAtMzU1LDEwICszNDUsOCBAQCBpbnQga3ZtcHBjX21tdV9ocHRlX2luaXQoc3RydWN0IGt2 bV92Y3B1ICp2Y3B1KQo+ICAgCQkJCSAgQVJSQVlfU0laRSh2Y3B1M3MtPmhwdGVfaGFzaF92cHRl KSk7Cj4gICAJa3ZtcHBjX21tdV9ocHRlX2luaXRfaGFzaCh2Y3B1M3MtPmhwdGVfaGFzaF92cHRl X2xvbmcsCj4gICAJCQkJICBBUlJBWV9TSVpFKHZjcHUzcy0+aHB0ZV9oYXNoX3ZwdGVfbG9uZykp Owo+IC0jaWZkZWYgQ09ORklHX1BQQ19CT09LM1NfNjQKPiAgIAlrdm1wcGNfbW11X2hwdGVfaW5p dF9oYXNoKHZjcHUzcy0+aHB0ZV9oYXNoX3ZwdGVfNjRrLAo+ICAgCQkJCSAgQVJSQVlfU0laRSh2 Y3B1M3MtPmhwdGVfaGFzaF92cHRlXzY0aykpOwo+IC0jZW5kaWYKPiAgIAo+ICAgCXNwaW5fbG9j a19pbml0KCZ2Y3B1M3MtPm1tdV9sb2NrKTsKPiAgIAo+IGRpZmYgLS1naXQgYS9hcmNoL3Bvd2Vy cGMva3ZtL2Jvb2szc19wci5jIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYwo+IGluZGV4 IDgzYmNkYzgwY2U1MS4uMzY3ODVhMDJiOWRhIDEwMDY0NAo+IC0tLSBhL2FyY2gvcG93ZXJwYy9r dm0vYm9vazNzX3ByLmMKPiArKysgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jCj4gQEAg LTUyLDE3ICs1Miw3IEBACj4gICAKPiAgIHN0YXRpYyBpbnQga3ZtcHBjX2hhbmRsZV9leHQoc3Ry dWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgZXhpdF9uciwKPiAgIAkJCSAgICAgdWxv bmcgbXNyKTsKPiAtI2lmZGVmIENPTkZJR19QUENfQk9PSzNTXzY0Cj4gICBzdGF0aWMgaW50IGt2 bXBwY19oYW5kbGVfZmFjKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdWxvbmcgZmFjKTsKPiAtI2Vu ZGlmCj4gLQo+IC0vKiBTb21lIGNvbXBhdGliaWxpdHkgZGVmaW5lcyAqLwo+IC0jaWZkZWYgQ09O RklHX1BQQ19CT09LM1NfMzIKPiAtI2RlZmluZSBNU1JfVVNFUjMyIE1TUl9VU0VSCj4gLSNkZWZp bmUgTVNSX1VTRVI2NCBNU1JfVVNFUgo+IC0jZGVmaW5lIEhXX1BBR0VfU0laRSBQQUdFX1NJWkUK PiAtI2RlZmluZSBIUFRFX1JfTSAgIF9QQUdFX0NPSEVSRU5UCj4gLSNlbmRpZgo+ICAgCj4gICBz dGF0aWMgYm9vbCBrdm1wcGNfaXNfc3BsaXRfcmVhbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCj4g ICB7Cj4gQEAgLTExNSwxMyArMTA1LDExIEBAIHN0YXRpYyB2b2lkIGt2bXBwY19pbmplY3RfaW50 ZXJydXB0X3ByKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHZlYywgdTY0IHNycjFfCj4gICAJ bmV3X21zciA9IHZjcHUtPmFyY2guaW50cl9tc3I7Cj4gICAJbmV3X3BjID0gdG9fYm9vazNzKHZj cHUpLT5oaW9yICsgdmVjOwo+ICAgCj4gLSNpZmRlZiBDT05GSUdfUFBDX0JPT0szU182NAo+ICAg CS8qIElmIHRyYW5zYWN0aW9uYWwsIGNoYW5nZSB0byBzdXNwZW5kIG1vZGUgb24gSVJRIGRlbGl2 ZXJ5ICovCj4gICAJaWYgKE1TUl9UTV9UUkFOU0FDVElPTkFMKG1zcikpCj4gICAJCW5ld19tc3Ig fD0gTVNSX1RTX1M7Cj4gICAJZWxzZQo+ICAgCQluZXdfbXNyIHw9IG1zciAmIE1TUl9UU19NQVNL Owo+IC0jZW5kaWYKPiAgIAo+ICAgCWt2bXBwY19zZXRfc3JyMCh2Y3B1LCBwYyk7Cj4gICAJa3Zt cHBjX3NldF9zcnIxKHZjcHUsIChtc3IgJiBTUlIxX01TUl9CSVRTKSB8IHNycjFfZmxhZ3MpOwo+ IEBAIC0xMzEsNyArMTE5LDYgQEAgc3RhdGljIHZvaWQga3ZtcHBjX2luamVjdF9pbnRlcnJ1cHRf cHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgdmVjLCB1NjQgc3JyMV8KPiAgIAo+ICAgc3Rh dGljIHZvaWQga3ZtcHBjX2NvcmVfdmNwdV9sb2FkX3ByKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwg aW50IGNwdSkKPiAgIHsKPiAtI2lmZGVmIENPTkZJR19QUENfQk9PSzNTXzY0Cj4gICAJc3RydWN0 IGt2bXBwY19ib29rM3Nfc2hhZG93X3ZjcHUgKnN2Y3B1ID0gc3ZjcHVfZ2V0KHZjcHUpOwo+ICAg CW1lbWNweShzdmNwdS0+c2xiLCB0b19ib29rM3ModmNwdSktPnNsYl9zaGFkb3csIHNpemVvZihz dmNwdS0+c2xiKSk7Cj4gICAJc3ZjcHUtPnNsYl9tYXggPSB0b19ib29rM3ModmNwdSktPnNsYl9z aGFkb3dfbWF4Owo+IEBAIC0xNDUsMTIgKzEzMiw4IEBAIHN0YXRpYyB2b2lkIGt2bXBwY19jb3Jl X3ZjcHVfbG9hZF9wcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpCj4gICAJCWlmIChj cHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9BUkNIXzMwMCkgJiYgKGN1cnJlbnQtPnRocmVhZC5mc2Ny ICYgRlNDUl9TQ1YpKQo+ICAgCQkJbXRzcHIoU1BSTl9GU0NSLCBtZnNwcihTUFJOX0ZTQ1IpICYg fkZTQ1JfU0NWKTsKPiAgIAl9Cj4gLSNlbmRpZgo+ICAgCj4gICAJdmNwdS0+Y3B1ID0gc21wX3By b2Nlc3Nvcl9pZCgpOwo+IC0jaWZkZWYgQ09ORklHX1BQQ19CT09LM1NfMzIKPiAtCWN1cnJlbnQt PnRocmVhZC5rdm1fc2hhZG93X3ZjcHUgPSB2Y3B1LT5hcmNoLnNoYWRvd192Y3B1Owo+IC0jZW5k aWYKPiAgIAo+ICAgCWlmIChrdm1wcGNfaXNfc3BsaXRfcmVhbCh2Y3B1KSkKPiAgIAkJa3ZtcHBj X2ZpeHVwX3NwbGl0X3JlYWwodmNwdSk7Cj4gQEAgLTE2MCw3ICsxNDMsNiBAQCBzdGF0aWMgdm9p ZCBrdm1wcGNfY29yZV92Y3B1X2xvYWRfcHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1 KQo+ICAgCj4gICBzdGF0aWMgdm9pZCBrdm1wcGNfY29yZV92Y3B1X3B1dF9wcihzdHJ1Y3Qga3Zt X3ZjcHUgKnZjcHUpCj4gICB7Cj4gLSNpZmRlZiBDT05GSUdfUFBDX0JPT0szU182NAo+ICAgCXN0 cnVjdCBrdm1wcGNfYm9vazNzX3NoYWRvd192Y3B1ICpzdmNwdSA9IHN2Y3B1X2dldCh2Y3B1KTsK PiAgIAlpZiAoc3ZjcHUtPmluX3VzZSkgewo+ICAgCQlrdm1wcGNfY29weV9mcm9tX3N2Y3B1KHZj cHUpOwo+IEBAIC0xNzYsNyArMTU4LDYgQEAgc3RhdGljIHZvaWQga3ZtcHBjX2NvcmVfdmNwdV9w dXRfcHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQo+ICAgCQlpZiAoY3B1X2hhc19mZWF0dXJlKENQ VV9GVFJfQVJDSF8zMDApICYmIChjdXJyZW50LT50aHJlYWQuZnNjciAmIEZTQ1JfU0NWKSkKPiAg IAkJCW10c3ByKFNQUk5fRlNDUiwgbWZzcHIoU1BSTl9GU0NSKSB8IEZTQ1JfU0NWKTsKPiAgIAl9 Cj4gLSNlbmRpZgo+ICAgCj4gICAJaWYgKGt2bXBwY19pc19zcGxpdF9yZWFsKHZjcHUpKQo+ICAg CQlrdm1wcGNfdW5maXh1cF9zcGxpdF9yZWFsKHZjcHUpOwo+IEBAIC0yMTIsOSArMTkzLDcgQEAg dm9pZCBrdm1wcGNfY29weV90b19zdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCj4gICAJc3Zj cHUtPmN0ciA9IHZjcHUtPmFyY2gucmVncy5jdHI7Cj4gICAJc3ZjcHUtPmxyICA9IHZjcHUtPmFy Y2gucmVncy5saW5rOwo+ICAgCXN2Y3B1LT5wYyAgPSB2Y3B1LT5hcmNoLnJlZ3MubmlwOwo+IC0j aWZkZWYgQ09ORklHX1BQQ19CT09LM1NfNjQKPiAgIAlzdmNwdS0+c2hhZG93X2ZzY3IgPSB2Y3B1 LT5hcmNoLnNoYWRvd19mc2NyOwo+IC0jZW5kaWYKPiAgIAkvKgo+ICAgCSAqIE5vdyBhbHNvIHNh dmUgdGhlIGN1cnJlbnQgdGltZSBiYXNlIHZhbHVlLiBXZSB1c2UgdGhpcwo+ICAgCSAqIHRvIGZp bmQgdGhlIGd1ZXN0IHB1cnIgYW5kIHNwdXJyIHZhbHVlLgo+IEBAIC0yNDUsOSArMjI0LDcgQEAg c3RhdGljIHZvaWQga3ZtcHBjX3JlY2FsY19zaGFkb3dfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNw dSkKPiAgIAkvKiBFeHRlcm5hbCBwcm92aWRlcnMgdGhlIGd1ZXN0IHJlc2VydmVkICovCj4gICAJ c21zciB8PSAoZ3Vlc3RfbXNyICYgdmNwdS0+YXJjaC5ndWVzdF9vd25lZF9leHQpOwo+ICAgCS8q IDY0LWJpdCBQcm9jZXNzIE1TUiB2YWx1ZXMgKi8KPiAtI2lmZGVmIENPTkZJR19QUENfQk9PSzNT XzY0Cj4gICAJc21zciB8PSBNU1JfSFY7Cj4gLSNlbmRpZgo+ICAgI2lmZGVmIENPTkZJR19QUENf VFJBTlNBQ1RJT05BTF9NRU0KPiAgIAkvKgo+ICAgCSAqIGluIGd1ZXN0IHByaXZpbGVnZWQgc3Rh dGUsIHdlIHdhbnQgdG8gZmFpbCBhbGwgVE0gdHJhbnNhY3Rpb25zLgo+IEBAIC0yOTgsOSArMjc1 LDcgQEAgdm9pZCBrdm1wcGNfY29weV9mcm9tX3N2Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkK PiAgIAl2Y3B1LT5hcmNoLmZhdWx0X2RhciAgID0gc3ZjcHUtPmZhdWx0X2RhcjsKPiAgIAl2Y3B1 LT5hcmNoLmZhdWx0X2RzaXNyID0gc3ZjcHUtPmZhdWx0X2RzaXNyOwo+ICAgCXZjcHUtPmFyY2gu bGFzdF9pbnN0ICAgPSBzdmNwdS0+bGFzdF9pbnN0Owo+IC0jaWZkZWYgQ09ORklHX1BQQ19CT09L M1NfNjQKPiAgIAl2Y3B1LT5hcmNoLnNoYWRvd19mc2NyID0gc3ZjcHUtPnNoYWRvd19mc2NyOwo+ IC0jZW5kaWYKPiAgIAkvKgo+ICAgCSAqIFVwZGF0ZSBwdXJyIGFuZCBzcHVyciB1c2luZyB0aW1l IGJhc2Ugb24gZXhpdC4KPiAgIAkgKi8KPiBAQCAtNTUzLDcgKzUyOCw2IEBAIHN0YXRpYyB2b2lk IGt2bXBwY19zZXRfcHZyX3ByKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIHB2cikKPiAgIAo+ ICAgCXZjcHUtPmFyY2guaGZsYWdzICY9IH5CT09LM1NfSEZMQUdfU0xCOwo+ICAgCXZjcHUtPmFy Y2gucHZyID0gcHZyOwo+IC0jaWZkZWYgQ09ORklHX1BQQ19CT09LM1NfNjQKPiAgIAlpZiAoKHB2 ciA+PSAweDMzMDAwMCkgJiYgKHB2ciA8IDB4NzAzMzAwMDApKSB7Cj4gICAJCWt2bXBwY19tbXVf Ym9vazNzXzY0X2luaXQodmNwdSk7Cj4gICAJCWlmICghdG9fYm9vazNzKHZjcHUpLT5oaW9yX2V4 cGxpY2l0KQo+IEBAIC01NjEsNyArNTM1LDYgQEAgc3RhdGljIHZvaWQga3ZtcHBjX3NldF9wdnJf cHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgcHZyKQo+ICAgCQl0b19ib29rM3ModmNwdSkt Pm1zcl9tYXNrID0gMHhmZmZmZmZmZmZmZmZmZmZmVUxMOwo+ICAgCQl2Y3B1LT5hcmNoLmNwdV90 eXBlID0gS1ZNX0NQVV8zU182NDsKPiAgIAl9IGVsc2UKPiAtI2VuZGlmCj4gICAJewo+ICAgCQlr dm1wcGNfbW11X2Jvb2szc18zMl9pbml0KHZjcHUpOwo+ICAgCQlpZiAoIXRvX2Jvb2szcyh2Y3B1 KS0+aGlvcl9leHBsaWNpdCkKPiBAQCAtNjA1LDExICs1NzgsNiBAQCBzdGF0aWMgdm9pZCBrdm1w cGNfc2V0X3B2cl9wcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBwdnIpCj4gICAJCWJyZWFr Owo+ICAgCX0KPiAgIAo+IC0jaWZkZWYgQ09ORklHX1BQQ19CT09LM1NfMzIKPiAtCS8qIDMyIGJp dCBCb29rM1MgYWx3YXlzIGhhcyAzMiBieXRlIGRjYnogKi8KPiAtCXZjcHUtPmFyY2guaGZsYWdz IHw9IEJPT0szU19IRkxBR19EQ0JaMzI7Cj4gLSNlbmRpZgo+IC0KPiAgIAkvKiBPbiBzb21lIENQ VXMgd2UgY2FuIGV4ZWN1dGUgcGFpcmVkIHNpbmdsZSBvcGVyYXRpb25zIG5hdGl2ZWx5ICovCj4g ICAJYXNtICggIm1mcHZyICUwIiA6ICI9ciIoaG9zdF9wdnIpKTsKPiAgIAlzd2l0Y2ggKGhvc3Rf cHZyKSB7Cj4gQEAgLTgzOSw3ICs4MDcsNiBAQCB2b2lkIGt2bXBwY19naXZldXBfZXh0KHN0cnVj dCBrdm1fdmNwdSAqdmNwdSwgdWxvbmcgbXNyKQo+ICAgLyogR2l2ZSB1cCBmYWNpbGl0eSAoVEFS IC8gRUJCIC8gRFNDUikgKi8KPiAgIHZvaWQga3ZtcHBjX2dpdmV1cF9mYWMoc3RydWN0IGt2bV92 Y3B1ICp2Y3B1LCB1bG9uZyBmYWMpCj4gICB7Cj4gLSNpZmRlZiBDT05GSUdfUFBDX0JPT0szU182 NAo+ICAgCWlmICghKHZjcHUtPmFyY2guc2hhZG93X2ZzY3IgJiAoMVVMTCA8PCBmYWMpKSkgewo+ ICAgCQkvKiBGYWNpbGl0eSBub3QgYXZhaWxhYmxlIHRvIHRoZSBndWVzdCwgaWdub3JlIGdpdmV1 cCByZXF1ZXN0Ki8KPiAgIAkJcmV0dXJuOwo+IEBAIC04NTIsNyArODE5LDYgQEAgdm9pZCBrdm1w cGNfZ2l2ZXVwX2ZhYyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVsb25nIGZhYykKPiAgIAkJdmNw dS0+YXJjaC5zaGFkb3dfZnNjciAmPSB+RlNDUl9UQVI7Cj4gICAJCWJyZWFrOwo+ICAgCX0KPiAt I2VuZGlmCj4gICB9Cj4gICAKPiAgIC8qIEhhbmRsZSBleHRlcm5hbCBwcm92aWRlcnMgKEZQVSwg QWx0aXZlYywgVlNYKSAqLwo+IEBAIC05NTQsOCArOTIwLDYgQEAgc3RhdGljIHZvaWQga3ZtcHBj X2hhbmRsZV9sb3N0X2V4dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCj4gICAJY3VycmVudC0+dGhy ZWFkLnJlZ3MtPm1zciB8PSBsb3N0X2V4dDsKPiAgIH0KPiAgIAo+IC0jaWZkZWYgQ09ORklHX1BQ Q19CT09LM1NfNjQKPiAtCj4gICB2b2lkIGt2bXBwY190cmlnZ2VyX2ZhY19pbnRlcnJ1cHQoc3Ry dWN0IGt2bV92Y3B1ICp2Y3B1LCB1bG9uZyBmYWMpCj4gICB7Cj4gICAJLyogSW5qZWN0IHRoZSBJ bnRlcnJ1cHQgQ2F1c2UgZmllbGQgYW5kIHRyaWdnZXIgYSBndWVzdCBpbnRlcnJ1cHQgKi8KPiBA QCAtMTA1MCw3ICsxMDE0LDYgQEAgdm9pZCBrdm1wcGNfc2V0X2ZzY3Ioc3RydWN0IGt2bV92Y3B1 ICp2Y3B1LCB1NjQgZnNjcikKPiAgIAo+ICAgCXZjcHUtPmFyY2guZnNjciA9IGZzY3I7Cj4gICB9 Cj4gLSNlbmRpZgo+ICAgCj4gICBzdGF0aWMgdm9pZCBrdm1wcGNfc2V0dXBfZGVidWcoc3RydWN0 IGt2bV92Y3B1ICp2Y3B1KQo+ICAgewo+IEBAIC0xMTU3LDI0ICsxMTIwLDYgQEAgaW50IGt2bXBw Y19oYW5kbGVfZXhpdF9wcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBleGl0 X25yKQo+ICAgCQlpZiAoa3ZtcHBjX2lzX3NwbGl0X3JlYWwodmNwdSkpCj4gICAJCQlrdm1wcGNf Zml4dXBfc3BsaXRfcmVhbCh2Y3B1KTsKPiAgIAo+IC0jaWZkZWYgQ09ORklHX1BQQ19CT09LM1Nf MzIKPiAtCQkvKiBXZSBzZXQgc2VnbWVudHMgYXMgdW51c2VkIHNlZ21lbnRzIHdoZW4gaW52YWxp ZGF0aW5nIHRoZW0uIFNvCj4gLQkJICogdHJlYXQgdGhlIHJlc3BlY3RpdmUgZmF1bHQgYXMgc2Vn bWVudCBmYXVsdC4gKi8KPiAtCQl7Cj4gLQkJCXN0cnVjdCBrdm1wcGNfYm9vazNzX3NoYWRvd192 Y3B1ICpzdmNwdTsKPiAtCQkJdTMyIHNyOwo+IC0KPiAtCQkJc3ZjcHUgPSBzdmNwdV9nZXQodmNw dSk7Cj4gLQkJCXNyID0gc3ZjcHUtPnNyW2t2bXBwY19nZXRfcGModmNwdSkgPj4gU0lEX1NISUZU XTsKPiAtCQkJc3ZjcHVfcHV0KHN2Y3B1KTsKPiAtCQkJaWYgKHNyID09IFNSX0lOVkFMSUQpIHsK PiAtCQkJCWt2bXBwY19tbXVfbWFwX3NlZ21lbnQodmNwdSwga3ZtcHBjX2dldF9wYyh2Y3B1KSk7 Cj4gLQkJCQlyID0gUkVTVU1FX0dVRVNUOwo+IC0JCQkJYnJlYWs7Cj4gLQkJCX0KPiAtCQl9Cj4g LSNlbmRpZgo+IC0KPiAgIAkJLyogb25seSBjYXJlIGFib3V0IFBURUcgbm90IGZvdW5kIGVycm9y cywgYnV0IGxlYXZlIE5YIGFsb25lICovCj4gICAJCWlmIChzaGFkb3dfc3JyMSAmIDB4NDAwMDAw MDApIHsKPiAgIAkJCWludCBpZHggPSBzcmN1X3JlYWRfbG9jaygmdmNwdS0+a3ZtLT5zcmN1KTsK PiBAQCAtMTIwMywyNCArMTE0OCw2IEBAIGludCBrdm1wcGNfaGFuZGxlX2V4aXRfcHIoc3RydWN0 IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgZXhpdF9ucikKPiAgIAkJdTMyIGZhdWx0X2Rz aXNyID0gdmNwdS0+YXJjaC5mYXVsdF9kc2lzcjsKPiAgIAkJdmNwdS0+c3RhdC5wZl9zdG9yYWdl Kys7Cj4gICAKPiAtI2lmZGVmIENPTkZJR19QUENfQk9PSzNTXzMyCj4gLQkJLyogV2Ugc2V0IHNl Z21lbnRzIGFzIHVudXNlZCBzZWdtZW50cyB3aGVuIGludmFsaWRhdGluZyB0aGVtLiBTbwo+IC0J CSAqIHRyZWF0IHRoZSByZXNwZWN0aXZlIGZhdWx0IGFzIHNlZ21lbnQgZmF1bHQuICovCj4gLQkJ ewo+IC0JCQlzdHJ1Y3Qga3ZtcHBjX2Jvb2szc19zaGFkb3dfdmNwdSAqc3ZjcHU7Cj4gLQkJCXUz MiBzcjsKPiAtCj4gLQkJCXN2Y3B1ID0gc3ZjcHVfZ2V0KHZjcHUpOwo+IC0JCQlzciA9IHN2Y3B1 LT5zcltkYXIgPj4gU0lEX1NISUZUXTsKPiAtCQkJc3ZjcHVfcHV0KHN2Y3B1KTsKPiAtCQkJaWYg KHNyID09IFNSX0lOVkFMSUQpIHsKPiAtCQkJCWt2bXBwY19tbXVfbWFwX3NlZ21lbnQodmNwdSwg ZGFyKTsKPiAtCQkJCXIgPSBSRVNVTUVfR1VFU1Q7Cj4gLQkJCQlicmVhazsKPiAtCQkJfQo+IC0J CX0KPiAtI2VuZGlmCj4gLQo+ICAgCQkvKgo+ICAgCQkgKiBXZSBuZWVkIHRvIGhhbmRsZSBtaXNz aW5nIHNoYWRvdyBQVEVzLCBhbmQKPiAgIAkJICogcHJvdGVjdGlvbiBmYXVsdHMgZHVlIHRvIHVz IG1hcHBpbmcgYSBwYWdlIHJlYWQtb25seQo+IEBAIC0xMjk3LDEyICsxMjI0LDEwIEBAIGludCBr dm1wcGNfaGFuZGxlX2V4aXRfcHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQg ZXhpdF9ucikKPiAgIAkJCXVsb25nIGNtZCA9IGt2bXBwY19nZXRfZ3ByKHZjcHUsIDMpOwo+ICAg CQkJaW50IGk7Cj4gICAKPiAtI2lmZGVmIENPTkZJR19QUENfQk9PSzNTXzY0Cj4gICAJCQlpZiAo a3ZtcHBjX2hfcHIodmNwdSwgY21kKSA9PSBFTVVMQVRFX0RPTkUpIHsKPiAgIAkJCQlyID0gUkVT VU1FX0dVRVNUOwo+ICAgCQkJCWJyZWFrOwo+ICAgCQkJfQo+IC0jZW5kaWYKPiAgIAo+ICAgCQkJ cnVuLT5wYXByX2hjYWxsLm5yID0gY21kOwo+ICAgCQkJZm9yIChpID0gMDsgaSA8IDk7ICsraSkg ewo+IEBAIC0xMzk1LDExICsxMzIwLDkgQEAgaW50IGt2bXBwY19oYW5kbGVfZXhpdF9wcihzdHJ1 Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBleGl0X25yKQo+ICAgCQlyID0gUkVTVU1F X0dVRVNUOwo+ICAgCQlicmVhazsKPiAgIAl9Cj4gLSNpZmRlZiBDT05GSUdfUFBDX0JPT0szU182 NAo+ICAgCWNhc2UgQk9PSzNTX0lOVEVSUlVQVF9GQUNfVU5BVkFJTDoKPiAgIAkJciA9IGt2bXBw Y19oYW5kbGVfZmFjKHZjcHUsIHZjcHUtPmFyY2guc2hhZG93X2ZzY3IgPj4gNTYpOwo+ICAgCQli cmVhazsKPiAtI2VuZGlmCj4gICAJY2FzZSBCT09LM1NfSU5URVJSVVBUX01BQ0hJTkVfQ0hFQ0s6 Cj4gICAJCWt2bXBwY19ib29rM3NfcXVldWVfaXJxcHJpbyh2Y3B1LCBleGl0X25yKTsKPiAgIAkJ ciA9IFJFU1VNRV9HVUVTVDsKPiBAQCAtMTQ4OCw3ICsxNDExLDYgQEAgc3RhdGljIGludCBrdm1f YXJjaF92Y3B1X2lvY3RsX3NldF9zcmVnc19wcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCj4gICAJ a3ZtcHBjX3NldF9wdnJfcHIodmNwdSwgc3JlZ3MtPnB2cik7Cj4gICAKPiAgIAl2Y3B1M3MtPnNk cjEgPSBzcmVncy0+dS5zLnNkcjE7Cj4gLSNpZmRlZiBDT05GSUdfUFBDX0JPT0szU182NAo+ICAg CWlmICh2Y3B1LT5hcmNoLmhmbGFncyAmIEJPT0szU19IRkxBR19TTEIpIHsKPiAgIAkJLyogRmx1 c2ggYWxsIFNMQiBlbnRyaWVzICovCj4gICAJCXZjcHUtPmFyY2gubW11LnNsYm10ZSh2Y3B1LCAw LCAwKTsKPiBAQCAtMTUwMSw5ICsxNDIzLDcgQEAgc3RhdGljIGludCBrdm1fYXJjaF92Y3B1X2lv Y3RsX3NldF9zcmVnc19wcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCj4gICAJCQlpZiAocmIgJiBT TEJfRVNJRF9WKQo+ICAgCQkJCXZjcHUtPmFyY2gubW11LnNsYm10ZSh2Y3B1LCBycywgcmIpOwo+ ICAgCQl9Cj4gLQl9IGVsc2UKPiAtI2VuZGlmCj4gLQl7Cj4gKwl9IGVsc2Ugewo+ICAgCQlmb3Ig KGkgPSAwOyBpIDwgMTY7IGkrKykgewo+ICAgCQkJdmNwdS0+YXJjaC5tbXUubXRzcmluKHZjcHUs IGksIHNyZWdzLT51LnMucHBjMzIuc3JbaV0pOwo+ICAgCQl9Cj4gQEAgLTE3MzcsMTggKzE2NTcs MTAgQEAgc3RhdGljIGludCBrdm1wcGNfY29yZV92Y3B1X2NyZWF0ZV9wcihzdHJ1Y3Qga3ZtX3Zj cHUgKnZjcHUpCj4gICAJCWdvdG8gb3V0Owo+ICAgCXZjcHUtPmFyY2guYm9vazNzID0gdmNwdV9i b29rM3M7Cj4gICAKPiAtI2lmZGVmIENPTkZJR19LVk1fQk9PSzNTXzMyX0hBTkRMRVIKPiAtCXZj cHUtPmFyY2guc2hhZG93X3ZjcHUgPQo+IC0JCWt6YWxsb2Moc2l6ZW9mKCp2Y3B1LT5hcmNoLnNo YWRvd192Y3B1KSwgR0ZQX0tFUk5FTCk7Cj4gLQlpZiAoIXZjcHUtPmFyY2guc2hhZG93X3ZjcHUp Cj4gLQkJZ290byBmcmVlX3ZjcHUzczsKPiAtI2VuZGlmCj4gLQo+ICAgCXAgPSBfX2dldF9mcmVl X3BhZ2UoR0ZQX0tFUk5FTHxfX0dGUF9aRVJPKTsKPiAgIAlpZiAoIXApCj4gICAJCWdvdG8gZnJl ZV9zaGFkb3dfdmNwdTsKPiAgIAl2Y3B1LT5hcmNoLnNoYXJlZCA9ICh2b2lkICopcDsKPiAtI2lm ZGVmIENPTkZJR19QUENfQk9PSzNTXzY0Cj4gICAJLyogQWx3YXlzIHN0YXJ0IHRoZSBzaGFyZWQg c3RydWN0IGluIG5hdGl2ZSBlbmRpYW4gbW9kZSAqLwo+ICAgI2lmZGVmIF9fQklHX0VORElBTl9f Cj4gICAgICAgICAgIHZjcHUtPmFyY2guc2hhcmVkX2JpZ19lbmRpYW4gPSB0cnVlOwo+IEBAIC0x NzY1LDExICsxNjc3LDYgQEAgc3RhdGljIGludCBrdm1wcGNfY29yZV92Y3B1X2NyZWF0ZV9wcihz dHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCj4gICAJaWYgKG1tdV9oYXNfZmVhdHVyZShNTVVfRlRSXzFU X1NFR01FTlQpKQo+ICAgCQl2Y3B1LT5hcmNoLnB2ciA9IG1mc3ByKFNQUk5fUFZSKTsKPiAgIAl2 Y3B1LT5hcmNoLmludHJfbXNyID0gTVNSX1NGOwo+IC0jZWxzZQo+IC0JLyogZGVmYXVsdCB0byBi b29rM3NfMzIgKDc1MCkgKi8KPiAtCXZjcHUtPmFyY2gucHZyID0gMHg4NDIwMjsKPiAtCXZjcHUt PmFyY2guaW50cl9tc3IgPSAwOwo+IC0jZW5kaWYKPiAgIAlrdm1wcGNfc2V0X3B2cl9wcih2Y3B1 LCB2Y3B1LT5hcmNoLnB2cik7Cj4gICAJdmNwdS0+YXJjaC5zbGJfbnIgPSA2NDsKPiAgIAo+IEBA IC0xNzg0LDEwICsxNjkxLDYgQEAgc3RhdGljIGludCBrdm1wcGNfY29yZV92Y3B1X2NyZWF0ZV9w cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCj4gICBmcmVlX3NoYXJlZF9wYWdlOgo+ICAgCWZyZWVf cGFnZSgodW5zaWduZWQgbG9uZyl2Y3B1LT5hcmNoLnNoYXJlZCk7Cj4gICBmcmVlX3NoYWRvd192 Y3B1Ogo+IC0jaWZkZWYgQ09ORklHX0tWTV9CT09LM1NfMzJfSEFORExFUgo+IC0Ja2ZyZWUodmNw dS0+YXJjaC5zaGFkb3dfdmNwdSk7Cj4gLWZyZWVfdmNwdTNzOgo+IC0jZW5kaWYKPiAgIAl2ZnJl ZSh2Y3B1X2Jvb2szcyk7Cj4gICBvdXQ6Cj4gICAJcmV0dXJuIGVycjsKPiBAQCAtMTc5OSw5ICsx NzAyLDYgQEAgc3RhdGljIHZvaWQga3ZtcHBjX2NvcmVfdmNwdV9mcmVlX3ByKHN0cnVjdCBrdm1f dmNwdSAqdmNwdSkKPiAgIAo+ICAgCWt2bXBwY19tbXVfZGVzdHJveV9wcih2Y3B1KTsKPiAgIAlm cmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpdmNwdS0+YXJjaC5zaGFyZWQgJiBQQUdFX01BU0spOwo+ IC0jaWZkZWYgQ09ORklHX0tWTV9CT09LM1NfMzJfSEFORExFUgo+IC0Ja2ZyZWUodmNwdS0+YXJj aC5zaGFkb3dfdmNwdSk7Cj4gLSNlbmRpZgo+ICAgCXZmcmVlKHZjcHVfYm9vazNzKTsKPiAgIH0K PiAgIAo+IEBAIC0xOTIxLDcgKzE4MjEsNiBAQCBzdGF0aWMgdm9pZCBrdm1wcGNfY29yZV9mcmVl X21lbXNsb3RfcHIoc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCkKPiAgIAlyZXR1cm47Cj4g ICB9Cj4gICAKPiAtI2lmZGVmIENPTkZJR19QUEM2NAo+ICAgc3RhdGljIGludCBrdm1fdm1faW9j dGxfZ2V0X3NtbXVfaW5mb19wcihzdHJ1Y3Qga3ZtICprdm0sCj4gICAJCQkJCSBzdHJ1Y3Qga3Zt X3BwY19zbW11X2luZm8gKmluZm8pCj4gICB7Cj4gQEAgLTE5NzgsMTYgKzE4NzcsNiBAQCBzdGF0 aWMgaW50IGt2bV9jb25maWd1cmVfbW11X3ByKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9w cGNfbW11djNfY2ZnICpjZmcpCj4gICAJcmV0dXJuIDA7Cj4gICB9Cj4gICAKPiAtI2Vsc2UKPiAt c3RhdGljIGludCBrdm1fdm1faW9jdGxfZ2V0X3NtbXVfaW5mb19wcihzdHJ1Y3Qga3ZtICprdm0s Cj4gLQkJCQkJIHN0cnVjdCBrdm1fcHBjX3NtbXVfaW5mbyAqaW5mbykKPiAtewo+IC0JLyogV2Ug c2hvdWxkIG5vdCBnZXQgY2FsbGVkICovCj4gLQlCVUcoKTsKPiAtCXJldHVybiAwOwo+IC19Cj4g LSNlbmRpZiAvKiBDT05GSUdfUFBDNjQgKi8KPiAtCj4gICBzdGF0aWMgdW5zaWduZWQgaW50IGt2 bV9nbG9iYWxfdXNlcl9jb3VudCA9IDA7Cj4gICBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGt2bV9n bG9iYWxfdXNlcl9jb3VudF9sb2NrKTsKPiAgIAo+IEBAIC0xOTk1LDEwICsxODg0LDggQEAgc3Rh dGljIGludCBrdm1wcGNfY29yZV9pbml0X3ZtX3ByKHN0cnVjdCBrdm0gKmt2bSkKPiAgIHsKPiAg IAltdXRleF9pbml0KCZrdm0tPmFyY2guaHB0X211dGV4KTsKPiAgIAo+IC0jaWZkZWYgQ09ORklH X1BQQ19CT09LM1NfNjQKPiAgIAkvKiBTdGFydCBvdXQgd2l0aCB0aGUgZGVmYXVsdCBzZXQgb2Yg aGNhbGxzIGVuYWJsZWQgKi8KPiAgIAlrdm1wcGNfcHJfaW5pdF9kZWZhdWx0X2hjYWxscyhrdm0p Owo+IC0jZW5kaWYKPiAgIAo+ICAgCWlmIChmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJF X1NFVF9NT0RFKSkgewo+ICAgCQlzcGluX2xvY2soJmt2bV9nbG9iYWxfdXNlcl9jb3VudF9sb2Nr KTsKPiBAQCAtMjAxMSw5ICsxODk4LDcgQEAgc3RhdGljIGludCBrdm1wcGNfY29yZV9pbml0X3Zt X3ByKHN0cnVjdCBrdm0gKmt2bSkKPiAgIAo+ICAgc3RhdGljIHZvaWQga3ZtcHBjX2NvcmVfZGVz dHJveV92bV9wcihzdHJ1Y3Qga3ZtICprdm0pCj4gICB7Cj4gLSNpZmRlZiBDT05GSUdfUFBDNjQK PiAgIAlXQVJOX09OKCFsaXN0X2VtcHR5KCZrdm0tPmFyY2guc3BhcHJfdGNlX3RhYmxlcykpOwo+ IC0jZW5kaWYKPiAgIAo+ICAgCWlmIChmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX1NF VF9NT0RFKSkgewo+ICAgCQlzcGluX2xvY2soJmt2bV9nbG9iYWxfdXNlcl9jb3VudF9sb2NrKTsK PiBAQCAtMjA3MiwxMCArMTk1Nyw4IEBAIHN0YXRpYyBzdHJ1Y3Qga3ZtcHBjX29wcyBrdm1fb3Bz X3ByID0gewo+ICAgCS5lbXVsYXRlX21mc3ByID0ga3ZtcHBjX2NvcmVfZW11bGF0ZV9tZnNwcl9w ciwKPiAgIAkuZmFzdF92Y3B1X2tpY2sgPSBrdm1fdmNwdV9raWNrLAo+ICAgCS5hcmNoX3ZtX2lv Y3RsICA9IGt2bV9hcmNoX3ZtX2lvY3RsX3ByLAo+IC0jaWZkZWYgQ09ORklHX1BQQ19CT09LM1Nf NjQKPiAgIAkuaGNhbGxfaW1wbGVtZW50ZWQgPSBrdm1wcGNfaGNhbGxfaW1wbF9wciwKPiAgIAku Y29uZmlndXJlX21tdSA9IGt2bV9jb25maWd1cmVfbW11X3ByLAo+IC0jZW5kaWYKPiAgIAkuZ2l2 ZXVwX2V4dCA9IGt2bXBwY19naXZldXBfZXh0LAo+ICAgfTsKPiAgIAo+IEBAIC0yMTA0LDggKzE5 ODcsNiBAQCB2b2lkIGt2bXBwY19ib29rM3NfZXhpdF9wcih2b2lkKQo+ICAgLyoKPiAgICAqIFdl IG9ubHkgc3VwcG9ydCBzZXBhcmF0ZSBtb2R1bGVzIGZvciBib29rM3MgNjQKPiAgICAqLwo+IC0j aWZkZWYgQ09ORklHX1BQQ19CT09LM1NfNjQKPiAtCj4gICBtb2R1bGVfaW5pdChrdm1wcGNfYm9v azNzX2luaXRfcHIpOwo+ICAgbW9kdWxlX2V4aXQoa3ZtcHBjX2Jvb2szc19leGl0X3ByKTsKPiAg IAo+IEBAIC0yMTEzLDQgKzE5OTQsMyBAQCBNT0RVTEVfREVTQ1JJUFRJT04oIktWTSBvbiBCb29r M1Mgd2l0aG91dCB1c2luZyBoeXBlcnZpc29yIG1vZGUiKTsKPiAgIE1PRFVMRV9MSUNFTlNFKCJH UEwiKTsKPiAgIE1PRFVMRV9BTElBU19NSVNDREVWKEtWTV9NSU5PUik7Cj4gICBNT0RVTEVfQUxJ QVMoImRldm5hbWU6a3ZtIik7Cj4gLSNlbmRpZgo+IGRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMv a3ZtL2Jvb2szc19ybWhhbmRsZXJzLlMgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19ybWhhbmRs ZXJzLlMKPiBpbmRleCAwYTU1N2ZmY2E5ZmUuLmVmMDFlOGVkMmE5NyAxMDA2NDQKPiAtLS0gYS9h cmNoL3Bvd2VycGMva3ZtL2Jvb2szc19ybWhhbmRsZXJzLlMKPiArKysgYi9hcmNoL3Bvd2VycGMv a3ZtL2Jvb2szc19ybWhhbmRsZXJzLlMKPiBAQCAtMTQsOSArMTQsNyBAQAo+ICAgI2luY2x1ZGUg PGFzbS9hc20tb2Zmc2V0cy5oPgo+ICAgI2luY2x1ZGUgPGFzbS9hc20tY29tcGF0Lmg+Cj4gICAK PiAtI2lmZGVmIENPTkZJR19QUENfQk9PSzNTXzY0Cj4gICAjaW5jbHVkZSA8YXNtL2V4Y2VwdGlv bi02NHMuaD4KPiAtI2VuZGlmCj4gICAKPiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgo+ICAgICog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAqCj4gQEAgLTI0LDEyMCArMjIsMTIgQEAKPiAgICAqICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKgo+ICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCj4gICAKPiAtI2lmIGRlZmluZWQo Q09ORklHX1BQQ19CT09LM1NfNjQpCj4gLQo+ICAgI2lmZGVmIENPTkZJR19QUEM2NF9FTEZfQUJJ X1YyCj4gICAjZGVmaW5lIEZVTkMobmFtZSkgCQluYW1lCj4gICAjZWxzZQo+ICAgI2RlZmluZSBG VU5DKG5hbWUpIAkJR0xVRSguLG5hbWUpCj4gICAjZW5kaWYKPiAgIAo+IC0jZWxpZiBkZWZpbmVk KENPTkZJR19QUENfQk9PSzNTXzMyKQo+IC0KPiAtI2RlZmluZSBGVU5DKG5hbWUpCQluYW1lCj4g LQo+IC0jZGVmaW5lIFJGSV9UT19LRVJORUwJcmZpCj4gLSNkZWZpbmUgUkZJX1RPX0dVRVNUCXJm aQo+IC0KPiAtLm1hY3JvIElOVEVSUlVQVF9UUkFNUE9MSU5FIGludG5vCj4gLQo+IC0uZ2xvYmFs IGt2bXBwY190cmFtcG9saW5lX1xpbnRubwo+IC1rdm1wcGNfdHJhbXBvbGluZV9caW50bm86Cj4g LQo+IC0JbXRzcHIJU1BSTl9TUFJHX1NDUkFUQ0gwLCByMTMJCS8qIFNhdmUgcjEzICovCj4gLQo+ IC0JLyoKPiAtCSAqIEZpcnN0IHRoaW5nIHRvIGRvIGlzIHRvIGZpbmQgb3V0IGlmIHdlJ3JlIGNv bWluZwo+IC0JICogZnJvbSBhIEtWTSBndWVzdCBvciBhIExpbnV4IHByb2Nlc3MuCj4gLQkgKgo+ IC0JICogVG8gZGlzdGluZ3Vpc2gsIHdlIGNoZWNrIGEgbWFnaWMgYnl0ZSBpbiB0aGUgUEFDQS9j dXJyZW50Cj4gLQkgKi8KPiAtCW1mc3ByCXIxMywgU1BSTl9TUFJHX1RIUkVBRAo+IC0JbHd6CXIx MywgVEhSRUFEX0tWTV9TVkNQVShyMTMpCj4gLQkvKiBQUEMzMiBjYW4gaGF2ZSBhIE5VTEwgcG9p bnRlciAtIGxldCdzIGNoZWNrIGZvciB0aGF0ICovCj4gLQltdHNwciAgIFNQUk5fU1BSR19TQ1JB VENIMSwgcjEyCQkvKiBTYXZlIHIxMiAqLwo+IC0JbWZjcglyMTIKPiAtCWNtcHdpCXIxMywgMAo+ IC0JYm5lCTFmCj4gLTI6CW10Y3IJcjEyCj4gLQltZnNwcglyMTIsIFNQUk5fU1BSR19TQ1JBVENI MQo+IC0JbWZzcHIJcjEzLCBTUFJOX1NQUkdfU0NSQVRDSDAJCS8qIHIxMyA9IG9yaWdpbmFsIHIx MyAqLwo+IC0JYglrdm1wcGNfcmVzdW1lX1xpbnRubwkJLyogR2V0IGJhY2sgb3JpZ2luYWwgaGFu ZGxlciAqLwo+IC0KPiAtMToJdG9waHlzKHIxMywgcjEzKQo+IC0Jc3R3CXIxMiwgSFNUQVRFX1ND UkFUQ0gxKHIxMykKPiAtCW1mc3ByCXIxMiwgU1BSTl9TUFJHX1NDUkFUQ0gxCj4gLQlzdHcJcjEy LCBIU1RBVEVfU0NSQVRDSDAocjEzKQo+IC0JbGJ6CXIxMiwgSFNUQVRFX0lOX0dVRVNUKHIxMykK PiAtCWNtcHdpCXIxMiwgS1ZNX0dVRVNUX01PREVfTk9ORQo+IC0JYm5lCS4ua3ZtcHBjX2hhbmRs ZXJfaGFzbWFnaWNfXGludG5vCj4gLQkvKiBObyBLVk0gZ3Vlc3Q/IFRoZW4ganVtcCBiYWNrIHRv IHRoZSBMaW51eCBoYW5kbGVyISAqLwo+IC0JbHd6CXIxMiwgSFNUQVRFX1NDUkFUQ0gxKHIxMykK PiAtCWIJMmIKPiAtCj4gLQkvKiBOb3cgd2Uga25vdyB3ZSdyZSBoYW5kbGluZyBhIEtWTSBndWVz dCAqLwo+IC0uLmt2bXBwY19oYW5kbGVyX2hhc21hZ2ljX1xpbnRubzoKPiAtCj4gLQkvKiBTaG91 bGQgd2UganVzdCBza2lwIHRoZSBmYXVsdGluZyBpbnN0cnVjdGlvbj8gKi8KPiAtCWNtcHdpCXIx MiwgS1ZNX0dVRVNUX01PREVfU0tJUAo+IC0JYmVxCWt2bXBwY19oYW5kbGVyX3NraXBfaW5zCj4g LQo+IC0JLyogTGV0J3Mgc3RvcmUgd2hpY2ggaW50ZXJydXB0IHdlJ3JlIGhhbmRsaW5nICovCj4g LQlsaQlyMTIsIFxpbnRubwo+IC0KPiAtCS8qIEp1bXAgaW50byB0aGUgU0xCIGV4aXQgY29kZSB0 aGF0IGdvZXMgdG8gdGhlIGhpZ2htZW0gaGFuZGxlciAqLwo+IC0JYglrdm1wcGNfaGFuZGxlcl90 cmFtcG9saW5lX2V4aXQKPiAtCj4gLS5lbmRtCj4gLQo+IC1JTlRFUlJVUFRfVFJBTVBPTElORQlC T09LM1NfSU5URVJSVVBUX1NZU1RFTV9SRVNFVAo+IC1JTlRFUlJVUFRfVFJBTVBPTElORQlCT09L M1NfSU5URVJSVVBUX01BQ0hJTkVfQ0hFQ0sKPiAtSU5URVJSVVBUX1RSQU1QT0xJTkUJQk9PSzNT X0lOVEVSUlVQVF9EQVRBX1NUT1JBR0UKPiAtSU5URVJSVVBUX1RSQU1QT0xJTkUJQk9PSzNTX0lO VEVSUlVQVF9JTlNUX1NUT1JBR0UKPiAtSU5URVJSVVBUX1RSQU1QT0xJTkUJQk9PSzNTX0lOVEVS UlVQVF9FWFRFUk5BTAo+IC1JTlRFUlJVUFRfVFJBTVBPTElORQlCT09LM1NfSU5URVJSVVBUX0FM SUdOTUVOVAo+IC1JTlRFUlJVUFRfVFJBTVBPTElORQlCT09LM1NfSU5URVJSVVBUX1BST0dSQU0K PiAtSU5URVJSVVBUX1RSQU1QT0xJTkUJQk9PSzNTX0lOVEVSUlVQVF9GUF9VTkFWQUlMCj4gLUlO VEVSUlVQVF9UUkFNUE9MSU5FCUJPT0szU19JTlRFUlJVUFRfREVDUkVNRU5URVIKPiAtSU5URVJS VVBUX1RSQU1QT0xJTkUJQk9PSzNTX0lOVEVSUlVQVF9TWVNDQUxMCj4gLUlOVEVSUlVQVF9UUkFN UE9MSU5FCUJPT0szU19JTlRFUlJVUFRfVFJBQ0UKPiAtSU5URVJSVVBUX1RSQU1QT0xJTkUJQk9P SzNTX0lOVEVSUlVQVF9QRVJGTU9OCj4gLUlOVEVSUlVQVF9UUkFNUE9MSU5FCUJPT0szU19JTlRF UlJVUFRfQUxUSVZFQwo+IC0KPiAtLyoKPiAtICogQnJpbmcgdXMgYmFjayB0byB0aGUgZmF1bHRp bmcgY29kZSwgYnV0IHNraXAgdGhlCj4gLSAqIGZhdWx0aW5nIGluc3RydWN0aW9uLgo+IC0gKgo+ IC0gKiBUaGlzIGlzIGEgZ2VuZXJpYyBleGl0IHBhdGggZnJvbSB0aGUgaW50ZXJydXB0Cj4gLSAq IHRyYW1wb2xpbmVzIGFib3ZlLgo+IC0gKgo+IC0gKiBJbnB1dCBSZWdpc3RlcnM6Cj4gLSAqCj4g LSAqIFIxMiAgICAgICAgICAgID0gZnJlZQo+IC0gKiBSMTMgICAgICAgICAgICA9IFNoYWRvdyBW Q1BVIChQQUNBKQo+IC0gKiBIU1RBVEUuU0NSQVRDSDAgPSBndWVzdCBSMTIKPiAtICogSFNUQVRF LlNDUkFUQ0gxID0gZ3Vlc3QgQ1IKPiAtICogU1BSR19TQ1JBVENIMCAgPSBndWVzdCBSMTMKPiAt ICoKPiAtICovCj4gLWt2bXBwY19oYW5kbGVyX3NraXBfaW5zOgo+IC0KPiAtCS8qIFBhdGNoIHRo ZSBJUCB0byB0aGUgbmV4dCBpbnN0cnVjdGlvbiAqLwo+IC0JLyogTm90ZSB0aGF0IHByZWZpeGVk IGluc3RydWN0aW9ucyBhcmUgZGlzYWJsZWQgaW4gUFIgS1ZNIGZvciBub3cgKi8KPiAtCW1mc3Jy MAlyMTIKPiAtCWFkZGkJcjEyLCByMTIsIDQKPiAtCW10c3JyMAlyMTIKPiAtCj4gLQkvKiBDbGVh biB1cCBhbGwgc3RhdGUgKi8KPiAtCWx3eglyMTIsIEhTVEFURV9TQ1JBVENIMShyMTMpCj4gLQlt dGNyCXIxMgo+IC0JUFBDX0xMCXIxMiwgSFNUQVRFX1NDUkFUQ0gwKHIxMykKPiAtCUdFVF9TQ1JB VENIMChyMTMpCj4gLQo+IC0JLyogQW5kIGdldCBiYWNrIGludG8gdGhlIGNvZGUgKi8KPiAtCVJG SV9UT19LRVJORUwKPiAtI2VuZGlmCj4gLQo+ICAgLyoKPiAgICAqIENhbGwga3ZtcHBjX2hhbmRs ZXJfdHJhbXBvbGluZV9lbnRlciBpbiByZWFsIG1vZGUKPiAgICAqCj4gZGlmZiAtLWdpdCBhL2Fy Y2gvcG93ZXJwYy9rdm0vYm9vazNzX3NlZ21lbnQuUyBiL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNz X3NlZ21lbnQuUwo+IGluZGV4IDIwMjA0NmE4M2ZjMS4uZWVjNDEwMDhkODE1IDEwMDY0NAo+IC0t LSBhL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3NlZ21lbnQuUwo+ICsrKyBiL2FyY2gvcG93ZXJw Yy9rdm0vYm9vazNzX3NlZ21lbnQuUwo+IEBAIC0xMSwzMSArMTEsMTYgQEAKPiAgICNpbmNsdWRl IDxhc20vYXNtLWNvbXBhdC5oPgo+ICAgI2luY2x1ZGUgPGFzbS9mZWF0dXJlLWZpeHVwcy5oPgo+ ICAgCj4gLSNpZiBkZWZpbmVkKENPTkZJR19QUENfQk9PSzNTXzY0KQo+IC0KPiAgICNkZWZpbmUg R0VUX1NIQURPV19WQ1BVKHJlZykgICAgXAo+ICAgCW1yCXJlZywgcjEzCj4gICAKPiAtI2VsaWYg ZGVmaW5lZChDT05GSUdfUFBDX0JPT0szU18zMikKPiAtCj4gLSNkZWZpbmUgR0VUX1NIQURPV19W Q1BVKHJlZykgICAgCQkJXAo+IC0JdG9waHlzKHJlZywgcjIpOyAgICAgICAJCQlcCj4gLQlsd3og ICAgIHJlZywgKFRIUkVBRCArIFRIUkVBRF9LVk1fU1ZDUFUpKHJlZyk7CVwKPiAtCXRvcGh5cyhy ZWcsIHJlZykKPiAtCj4gLSNlbmRpZgo+IC0KPiAgIC8qIERpc2FibGUgZm9yIG5lc3RlZCBLVk0g Ki8KPiAgICNkZWZpbmUgVVNFX1FVSUNLX0xBU1RfSU5TVAo+ICAgCj4gICAKPiAgIC8qIEdldCBo ZWxwZXIgZnVuY3Rpb25zIGZvciBzdWJhcmNoIHNwZWNpZmljIGZ1bmN0aW9uYWxpdHkgKi8KPiAg IAo+IC0jaWYgZGVmaW5lZChDT05GSUdfUFBDX0JPT0szU182NCkKPiAgICNpbmNsdWRlICJib29r M3NfNjRfc2xiLlMiCj4gLSNlbGlmIGRlZmluZWQoQ09ORklHX1BQQ19CT09LM1NfMzIpCj4gLSNp bmNsdWRlICJib29rM3NfMzJfc3IuUyIKPiAtI2VuZGlmCj4gICAKPiAgIC8qKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioKPiAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKPiBAQCAtODEsNyArNjYsNiBAQCBr dm1wcGNfaGFuZGxlcl90cmFtcG9saW5lX2VudGVyOgo+ICAgCS8qIFN3aXRjaCB0byBndWVzdCBz ZWdtZW50LiBUaGlzIGlzIHN1YmFyY2ggc3BlY2lmaWMuICovCj4gICAJTE9BRF9HVUVTVF9TRUdN RU5UUwo+ICAgCj4gLSNpZmRlZiBDT05GSUdfUFBDX0JPT0szU182NAo+ICAgQkVHSU5fRlRSX1NF Q1RJT04KPiAgIAkvKiBTYXZlIGhvc3QgRlNDUiAqLwo+ICAgCW1mc3ByCXI4LCBTUFJOX0ZTQ1IK PiBAQCAtMTA4LDggKzkyLDYgQEAgRU5EX0ZUUl9TRUNUSU9OX0lGU0VUKENQVV9GVFJfQVJDSF8y MDdTKQo+ICAgCW10c3ByICAgU1BSTl9ISUQ1LHIwCj4gICBub19kY2J6MzJfb246Cj4gICAKPiAt I2VuZGlmIC8qIENPTkZJR19QUENfQk9PSzNTXzY0ICovCj4gLQo+ICAgCS8qIEVudGVyIGd1ZXN0 ICovCj4gICAKPiAgIAlQUENfTEwJcjgsIFNWQ1BVX0NUUihyMykKPiBAQCAtMTcwLDEzICsxNTIs MTEgQEAga3ZtcHBjX2ludGVycnVwdF9wcjoKPiAgIAkgKiBIU1RBVEUuU0NSQVRDSDAgPSBndWVz dCBSMTIKPiAgIAkgKiBIU1RBVEUuU0NSQVRDSDIgPSBndWVzdCBSOQo+ICAgCSAqLwo+IC0jaWZk ZWYgQ09ORklHX1BQQzY0Cj4gICAJLyogTWF0Y2ggMzItYml0IGVudHJ5ICovCj4gICAJbGQJcjks SFNUQVRFX1NDUkFUQ0gyKHIxMykKPiAgIAlyb3RsZGkJcjEyLCByMTIsIDMyCQkgIC8qIEZsaXAg UjEyIGhhbHZlcyBmb3Igc3R3ICovCj4gICAJc3R3CXIxMiwgSFNUQVRFX1NDUkFUQ0gxKHIxMykg LyogQ1IgaXMgbm93IGluIHRoZSBsb3cgaGFsZiAqLwo+ICAgCXNyZGkJcjEyLCByMTIsIDMyCQkg IC8qIHNoaWZ0IHRyYXAgaW50byBsb3cgaGFsZiAqLwo+IC0jZW5kaWYKPiAgIAo+ICAgLmdsb2Jh bCBrdm1wcGNfaGFuZGxlcl90cmFtcG9saW5lX2V4aXQKPiAgIGt2bXBwY19oYW5kbGVyX3RyYW1w b2xpbmVfZXhpdDoKPiBAQCAtMjA5LDcgKzE4OSw2IEBAIGt2bXBwY19oYW5kbGVyX3RyYW1wb2xp bmVfZXhpdDoKPiAgIAlQUENfTEwJcjIsIEhTVEFURV9IT1NUX1IyKHIxMykKPiAgIAo+ICAgCS8q IFNhdmUgZ3Vlc3QgUEMgYW5kIE1TUiAqLwo+IC0jaWZkZWYgQ09ORklHX1BQQzY0Cj4gICBCRUdJ Tl9GVFJfU0VDVElPTgo+ICAgCWFuZGkuCXIwLCByMTIsIDB4Mgo+ICAgCWNtcHdpCWNyMSwgcjAs IDAKPiBAQCAtMjE5LDcgKzE5OCw3IEBAIEJFR0lOX0ZUUl9TRUNUSU9OCj4gICAJYW5kaS4JcjEy LHIxMiwweDNmZmQKPiAgIAliCTJmCj4gICBFTkRfRlRSX1NFQ1RJT05fSUZTRVQoQ1BVX0ZUUl9I Vk1PREUpCj4gLSNlbmRpZgo+ICsKPiAgIDE6CW1mc3JyMAlyMwo+ICAgCW1mc3JyMQlyNAo+ICAg MjoKPiBAQCAtMjY1LDcgKzI0NCw2IEBAIEVORF9GVFJfU0VDVElPTl9JRlNFVChDUFVfRlRSX0hW TU9ERSkKPiAgIAliZXEJbGRfbGFzdF9wcmV2X2luc3QKPiAgIAljbXB3aQlyMTIsIEJPT0szU19J TlRFUlJVUFRfQUxJR05NRU5UCj4gICAJYmVxLQlsZF9sYXN0X2luc3QKPiAtI2lmZGVmIENPTkZJ R19QUEM2NAo+ICAgQkVHSU5fRlRSX1NFQ1RJT04KPiAgIAljbXB3aQlyMTIsIEJPT0szU19JTlRF UlJVUFRfSF9FTVVMX0FTU0lTVAo+ICAgCWJlcS0JbGRfbGFzdF9pbnN0Cj4gQEAgLTI3NCw3ICsy NTIsNiBAQCBCRUdJTl9GVFJfU0VDVElPTgo+ICAgCWNtcHdpCXIxMiwgQk9PSzNTX0lOVEVSUlVQ VF9GQUNfVU5BVkFJTAo+ICAgCWJlcS0JbGRfbGFzdF9pbnN0Cj4gICBFTkRfRlRSX1NFQ1RJT05f SUZTRVQoQ1BVX0ZUUl9BUkNIXzIwN1MpCj4gLSNlbmRpZgo+ICAgCj4gICAJYglub19sZF9sYXN0 X2luc3QKPiAgIAo+IEBAIC0zMTcsNyArMjk0LDYgQEAgbm9fbGRfbGFzdF9pbnN0Ogo+ICAgCS8q IFN3aXRjaCBiYWNrIHRvIGhvc3QgTU1VICovCj4gICAJTE9BRF9IT1NUX1NFR01FTlRTCj4gICAK PiAtI2lmZGVmIENPTkZJR19QUENfQk9PSzNTXzY0Cj4gICAKPiAgIAlsYnoJcjUsIEhTVEFURV9S RVNUT1JFX0hJRDUocjEzKQo+ICAgCWNtcHdpCXI1LCAwCj4gQEAgLTM0Miw4ICszMTgsNiBAQCBu b19mc2NyX3NhdmU6Cj4gICAJbXRzcHIJU1BSTl9GU0NSLCByOAo+ICAgRU5EX0ZUUl9TRUNUSU9O X0lGU0VUKENQVV9GVFJfQVJDSF8yMDdTKQo+ICAgCj4gLSNlbmRpZiAvKiBDT05GSUdfUFBDX0JP T0szU182NCAqLwo+IC0KPiAgIAkvKgo+ICAgCSAqIEZvciBzb21lIGludGVycnVwdHMsIHdlIG5l ZWQgdG8gY2FsbCB0aGUgcmVhbCBMaW51eAo+ICAgCSAqIGhhbmRsZXIsIHNvIGl0IGNhbiBkbyB3 b3JrIGZvciB1cy4gVGhpcyBoYXMgdG8gaGFwcGVuCj4gQEAgLTM4NiwxMyArMzYwLDExIEBAIEVO RF9GVFJfU0VDVElPTl9JRlNFVChDUFVfRlRSX0FSQ0hfMjA3UykKPiAgICNlbmRpZgo+ICAgCVBQ Q19MTAlyOCwgSFNUQVRFX1ZNSEFORExFUihyMTMpCj4gICAKPiAtI2lmZGVmIENPTkZJR19QUEM2 NAo+ICAgQkVHSU5fRlRSX1NFQ1RJT04KPiAgIAliZXEJY3IxLCAxZgo+ICAgCW10c3ByCVNQUk5f SFNSUjEsIHI2Cj4gICAJbXRzcHIJU1BSTl9IU1JSMCwgcjgKPiAgIEVORF9GVFJfU0VDVElPTl9J RlNFVChDUFVfRlRSX0hWTU9ERSkKPiAtI2VuZGlmCj4gICAxOgkvKiBSZXN0b3JlIGhvc3QgbXNy IC0+IFNSUjEgKi8KPiAgIAltdHNycjEJcjYKPiAgIAkvKiBMb2FkIGhpZ2htZW0gaGFuZGxlciBh ZGRyZXNzICovCj4gZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vZW11bGF0ZS5jIGIvYXJj aC9wb3dlcnBjL2t2bS9lbXVsYXRlLmMKPiBpbmRleCAzNTVkNTIwNmU4YWEuLjc0NTA4NTE2ZGY1 MSAxMDA2NDQKPiAtLS0gYS9hcmNoL3Bvd2VycGMva3ZtL2VtdWxhdGUuYwo+ICsrKyBiL2FyY2gv cG93ZXJwYy9rdm0vZW11bGF0ZS5jCj4gQEAgLTIyOSw5ICsyMjksNyBAQCBpbnQga3ZtcHBjX2Vt dWxhdGVfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQo+ICAgCQlzd2l0Y2ggKGdl dF94b3AoaW5zdCkpIHsKPiAgIAo+ICAgCQljYXNlIE9QXzMxX1hPUF9UUkFQOgo+IC0jaWZkZWYg Q09ORklHXzY0QklUCj4gICAJCWNhc2UgT1BfMzFfWE9QX1RSQVBfNjQ6Cj4gLSNlbmRpZgo+ICAg I2lmZGVmIENPTkZJR19QUENfQk9PSzNTCj4gICAJCQlrdm1wcGNfY29yZV9xdWV1ZV9wcm9ncmFt KHZjcHUsIFNSUjFfUFJPR1RSQVApOwo+ICAgI2Vsc2UKPiBkaWZmIC0tZ2l0IGEvYXJjaC9wb3dl cnBjL2t2bS9wb3dlcnBjLmMgYi9hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYwo+IGluZGV4IGNl MWQ5MWVlZDIzMS4uODA1OTg3NmFiZjIzIDEwMDY0NAo+IC0tLSBhL2FyY2gvcG93ZXJwYy9rdm0v cG93ZXJwYy5jCj4gKysrIGIvYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMKPiBAQCAtMTE2Mywx MSArMTE2Myw5IEBAIHN0YXRpYyB2b2lkIGt2bXBwY19jb21wbGV0ZV9tbWlvX2xvYWQoc3RydWN0 IGt2bV92Y3B1ICp2Y3B1KQo+ICAgCj4gICAJaWYgKHZjcHUtPmFyY2gubW1pb19zaWduX2V4dGVu ZCkgewo+ICAgCQlzd2l0Y2ggKHJ1bi0+bW1pby5sZW4pIHsKPiAtI2lmZGVmIENPTkZJR19QUEM2 NAo+ICAgCQljYXNlIDQ6Cj4gICAJCQlncHIgPSAoczY0KShzMzIpZ3ByOwo+ICAgCQkJYnJlYWs7 Cj4gLSNlbmRpZgo+ICAgCQljYXNlIDI6Cj4gICAJCQlncHIgPSAoczY0KShzMTYpZ3ByOwo+ICAg CQkJYnJlYWs7CgoKCgotLSAKa3ZtLXJpc2N2IG1haWxpbmcgbGlzdAprdm0tcmlzY3ZAbGlzdHMu aW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZv L2t2bS1yaXNjdgo= From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from pegase2.c-s.fr (pegase2.c-s.fr [93.17.235.10]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9C13321660B; Thu, 12 Dec 2024 18:34:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=93.17.235.10 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1734028503; cv=none; b=SJY3+uHl42BRtdFHeszqOQ5DY2WV611A1kv3UFicSqEJgl3Wl1sdHvc1oTkhYtc+WkwoO5wfXS1hIDHu6rdtwLl2wXedsHbNmoYQDjJcTJ2djchIQiAL4360XQR/zreRCvcEscOitJeapPbq6mK4M17LkKhghfg4qvRPXwm2ca8= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1734028503; c=relaxed/simple; bh=pgYOlV3EhqjjtahqSY+N8H3m5vBYmkHUhqwOj/Cu/Qs=; h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From: In-Reply-To:Content-Type; b=DCSSh86FEOVeJTYN7d4gNxrvg6PYu1ihUlXtB8DeBDlBEKqHDMQbAE3IPrPN0qo4qJiU55eWNyqWgs9+eKGB6JwkN8U4u7j92Sy7WMQKkzrpNFdMlbV/WO+qNJb32DFLhKBIJFR+O3Y/gcjIVQKLnelev5WaL8EpyF616e6mDPo= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=csgroup.eu; spf=pass smtp.mailfrom=csgroup.eu; arc=none smtp.client-ip=93.17.235.10 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=csgroup.eu Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=csgroup.eu Received: from localhost (mailhub3.si.c-s.fr [172.26.127.67]) by localhost (Postfix) with ESMTP id 4Y8Ljm050Sz9sSc; Thu, 12 Dec 2024 19:34:52 +0100 (CET) X-Virus-Scanned: amavisd-new at c-s.fr Received: from pegase2.c-s.fr ([172.26.127.65]) by localhost (pegase2.c-s.fr [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id JyAcT0_AqjA1; Thu, 12 Dec 2024 19:34:51 +0100 (CET) Received: from messagerie.si.c-s.fr (messagerie.si.c-s.fr [192.168.25.192]) by pegase2.c-s.fr (Postfix) with ESMTP id 4Y8Ljl56gvz9sSW; Thu, 12 Dec 2024 19:34:51 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by messagerie.si.c-s.fr (Postfix) with ESMTP id 84BD78B773; Thu, 12 Dec 2024 19:34:51 +0100 (CET) X-Virus-Scanned: amavisd-new at c-s.fr Received: from messagerie.si.c-s.fr ([127.0.0.1]) by localhost (messagerie.si.c-s.fr [127.0.0.1]) (amavisd-new, port 10023) with ESMTP id dOarpQtZ8idy; Thu, 12 Dec 2024 19:34:51 +0100 (CET) Received: from [192.168.232.97] (unknown [192.168.232.97]) by messagerie.si.c-s.fr (Postfix) with ESMTP id AF4708B763; Thu, 12 Dec 2024 19:34:46 +0100 (CET) Message-ID: <2809dcce-3405-430e-b43d-d75f35bdb7d5@csgroup.eu> Date: Thu, 12 Dec 2024 19:34:45 +0100 Precedence: bulk X-Mailing-List: kvm@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [RFC 3/5] powerpc: kvm: drop 32-bit book3s To: Arnd Bergmann , kvm@vger.kernel.org Cc: Arnd Bergmann , Thomas Bogendoerfer , Huacai Chen , Jiaxun Yang , Michael Ellerman , Nicholas Piggin , Naveen N Rao , Madhavan Srinivasan , Alexander Graf , Crystal Wood , Anup Patel , Atish Patra , Paul Walmsley , Palmer Dabbelt , Albert Ou , Sean Christopherson , Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, "H. Peter Anvin" , Vitaly Kuznetsov , David Woodhouse , Paul Durrant , Marc Zyngier , linux-kernel@vger.kernel.org, linux-mips@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, kvm-riscv@lists.infradead.org, linux-riscv@lists.infradead.org References: <20241212125516.467123-1-arnd@kernel.org> <20241212125516.467123-4-arnd@kernel.org> Content-Language: fr-FR From: Christophe Leroy In-Reply-To: <20241212125516.467123-4-arnd@kernel.org> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Le 12/12/2024 à 13:55, Arnd Bergmann a écrit : > From: Arnd Bergmann > > Support for KVM on 32-bit Book III-s implementations was added in 2010 > and supports PowerMac, CHRP, and embedded platforms using the Freescale G4 > (mpc74xx), e300 (mpc83xx) and e600 (mpc86xx) CPUs from 2003 to 2009. > > Earlier 603/604/750 machines might work but would be even more limited > by their available memory. > > The only likely users of KVM on any of these were the final Apple > PowerMac/PowerBook/iBook G4 models with 2GB of RAM that were at the high > end 20 years ago but are just as obsolete as their x86-32 counterparts. > The code has been orphaned since 2023. Thanks for doing this, it will help making maintenance and evolution of 32 bits easier. Should fix https://github.com/linuxppc/issues/issues/334 > > Signed-off-by: Arnd Bergmann > --- > MAINTAINERS | 2 +- > arch/powerpc/include/asm/kvm_book3s.h | 19 ---- > arch/powerpc/include/asm/kvm_book3s_asm.h | 10 -- > arch/powerpc/kvm/Kconfig | 22 ---- > arch/powerpc/kvm/Makefile | 15 --- > arch/powerpc/kvm/book3s.c | 18 ---- > arch/powerpc/kvm/book3s_emulate.c | 37 ------- > arch/powerpc/kvm/book3s_interrupts.S | 11 -- > arch/powerpc/kvm/book3s_mmu_hpte.c | 12 --- > arch/powerpc/kvm/book3s_pr.c | 122 +--------------------- > arch/powerpc/kvm/book3s_rmhandlers.S | 110 ------------------- > arch/powerpc/kvm/book3s_segment.S | 30 +----- > arch/powerpc/kvm/emulate.c | 2 - > arch/powerpc/kvm/powerpc.c | 2 - > 14 files changed, 3 insertions(+), 409 deletions(-) Some left-over ? $ git grep KVM_BOOK3S_32_HANDLER arch/powerpc/include/asm/processor.h:#ifdef CONFIG_KVM_BOOK3S_32_HANDLER arch/powerpc/include/asm/processor.h:#endif /* CONFIG_KVM_BOOK3S_32_HANDLER */ arch/powerpc/kernel/asm-offsets.c:#ifdef CONFIG_KVM_BOOK3S_32_HANDLER What about the following in asm-offsets.c, should it still test CONFIG_PPC_BOOK3S_64 ? Is CONFIG_KVM_BOOK3S_PR_POSSIBLE still possible on something else ? #if defined(CONFIG_PPC_BOOK3S_64) && defined(CONFIG_KVM_BOOK3S_PR_POSSIBLE) OFFSET(VCPU_SHAREDBE, kvm_vcpu, arch.shared_big_endian); #endif Shouldn't CONFIG_KVM and/or CONFIG_VIRTUALISATION be restricted to CONFIG_PPC64 now ? What about: arch/powerpc/kernel/head_book3s_32.S:#include arch/powerpc/kernel/head_book3s_32.S:#include "../kvm/book3s_rmhandlers.S" There is still arch/powerpc/kvm/book3s_32_mmu.c Christophe > > diff --git a/MAINTAINERS b/MAINTAINERS > index 531561c7a9b7..8d53833645fa 100644 > --- a/MAINTAINERS > +++ b/MAINTAINERS > @@ -12642,7 +12642,7 @@ L: linuxppc-dev@lists.ozlabs.org > L: kvm@vger.kernel.org > S: Maintained (Book3S 64-bit HV) > S: Odd fixes (Book3S 64-bit PR) > -S: Orphan (Book3E and 32-bit) > +S: Orphan (Book3E) > T: git git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git topic/ppc-kvm > F: arch/powerpc/include/asm/kvm* > F: arch/powerpc/include/uapi/asm/kvm* > diff --git a/arch/powerpc/include/asm/kvm_book3s.h b/arch/powerpc/include/asm/kvm_book3s.h > index e1ff291ba891..71532e0e65a6 100644 > --- a/arch/powerpc/include/asm/kvm_book3s.h > +++ b/arch/powerpc/include/asm/kvm_book3s.h > @@ -36,21 +36,14 @@ struct kvmppc_sid_map { > #define SID_MAP_NUM (1 << SID_MAP_BITS) > #define SID_MAP_MASK (SID_MAP_NUM - 1) > > -#ifdef CONFIG_PPC_BOOK3S_64 > #define SID_CONTEXTS 1 > -#else > -#define SID_CONTEXTS 128 > -#define VSID_POOL_SIZE (SID_CONTEXTS * 16) > -#endif > > struct hpte_cache { > struct hlist_node list_pte; > struct hlist_node list_pte_long; > struct hlist_node list_vpte; > struct hlist_node list_vpte_long; > -#ifdef CONFIG_PPC_BOOK3S_64 > struct hlist_node list_vpte_64k; > -#endif > struct rcu_head rcu_head; > u64 host_vpn; > u64 pfn; > @@ -112,14 +105,9 @@ struct kvmppc_vcpu_book3s { > u64 hior; > u64 msr_mask; > u64 vtb; > -#ifdef CONFIG_PPC_BOOK3S_32 > - u32 vsid_pool[VSID_POOL_SIZE]; > - u32 vsid_next; > -#else > u64 proto_vsid_first; > u64 proto_vsid_max; > u64 proto_vsid_next; > -#endif > int context_id[SID_CONTEXTS]; > > bool hior_explicit; /* HIOR is set by ioctl, not PVR */ > @@ -128,9 +116,7 @@ struct kvmppc_vcpu_book3s { > struct hlist_head hpte_hash_pte_long[HPTEG_HASH_NUM_PTE_LONG]; > struct hlist_head hpte_hash_vpte[HPTEG_HASH_NUM_VPTE]; > struct hlist_head hpte_hash_vpte_long[HPTEG_HASH_NUM_VPTE_LONG]; > -#ifdef CONFIG_PPC_BOOK3S_64 > struct hlist_head hpte_hash_vpte_64k[HPTEG_HASH_NUM_VPTE_64K]; > -#endif > int hpte_cache_count; > spinlock_t mmu_lock; > }; > @@ -391,12 +377,7 @@ static inline struct kvmppc_vcpu_book3s *to_book3s(struct kvm_vcpu *vcpu) > > /* Also add subarch specific defines */ > > -#ifdef CONFIG_KVM_BOOK3S_32_HANDLER > -#include > -#endif > -#ifdef CONFIG_KVM_BOOK3S_64_HANDLER > #include > -#endif > > static inline void kvmppc_set_gpr(struct kvm_vcpu *vcpu, int num, ulong val) > { > diff --git a/arch/powerpc/include/asm/kvm_book3s_asm.h b/arch/powerpc/include/asm/kvm_book3s_asm.h > index a36797938620..98174363946e 100644 > --- a/arch/powerpc/include/asm/kvm_book3s_asm.h > +++ b/arch/powerpc/include/asm/kvm_book3s_asm.h > @@ -113,11 +113,9 @@ struct kvmppc_host_state { > u64 dec_expires; > struct kvm_split_mode *kvm_split_mode; > #endif > -#ifdef CONFIG_PPC_BOOK3S_64 > u64 cfar; > u64 ppr; > u64 host_fscr; > -#endif > }; > > struct kvmppc_book3s_shadow_vcpu { > @@ -134,20 +132,12 @@ struct kvmppc_book3s_shadow_vcpu { > u32 fault_dsisr; > u32 last_inst; > > -#ifdef CONFIG_PPC_BOOK3S_32 > - u32 sr[16]; /* Guest SRs */ > - > - struct kvmppc_host_state hstate; > -#endif > - > -#ifdef CONFIG_PPC_BOOK3S_64 > u8 slb_max; /* highest used guest slb entry */ > struct { > u64 esid; > u64 vsid; > } slb[64]; /* guest SLB */ > u64 shadow_fscr; > -#endif > }; > > #endif /*__ASSEMBLY__ */ > diff --git a/arch/powerpc/kvm/Kconfig b/arch/powerpc/kvm/Kconfig > index e2230ea512cf..d0a6e2f6df81 100644 > --- a/arch/powerpc/kvm/Kconfig > +++ b/arch/powerpc/kvm/Kconfig > @@ -27,11 +27,6 @@ config KVM > config KVM_BOOK3S_HANDLER > bool > > -config KVM_BOOK3S_32_HANDLER > - bool > - select KVM_BOOK3S_HANDLER > - select KVM_MMIO > - > config KVM_BOOK3S_64_HANDLER > bool > select KVM_BOOK3S_HANDLER > @@ -44,23 +39,6 @@ config KVM_BOOK3S_PR_POSSIBLE > config KVM_BOOK3S_HV_POSSIBLE > bool > > -config KVM_BOOK3S_32 > - tristate "KVM support for PowerPC book3s_32 processors" > - depends on PPC_BOOK3S_32 && !SMP && !PTE_64BIT > - depends on !CONTEXT_TRACKING_USER > - select KVM > - select KVM_BOOK3S_32_HANDLER > - select KVM_BOOK3S_PR_POSSIBLE > - select PPC_FPU > - help > - Support running unmodified book3s_32 guest kernels > - in virtual machines on book3s_32 host processors. > - > - This module provides access to the hardware capabilities through > - a character device node named /dev/kvm. > - > - If unsure, say N. > - > config KVM_BOOK3S_64 > tristate "KVM support for PowerPC book3s_64 processors" > depends on PPC_BOOK3S_64 > diff --git a/arch/powerpc/kvm/Makefile b/arch/powerpc/kvm/Makefile > index 294f27439f7f..059b4c153d97 100644 > --- a/arch/powerpc/kvm/Makefile > +++ b/arch/powerpc/kvm/Makefile > @@ -95,27 +95,12 @@ kvm-book3s_64-module-objs := \ > > kvm-objs-$(CONFIG_KVM_BOOK3S_64) := $(kvm-book3s_64-module-objs) > > -kvm-book3s_32-objs := \ > - $(common-objs-y) \ > - emulate.o \ > - fpu.o \ > - book3s_paired_singles.o \ > - book3s.o \ > - book3s_pr.o \ > - book3s_emulate.o \ > - book3s_interrupts.o \ > - book3s_mmu_hpte.o \ > - book3s_32_mmu_host.o \ > - book3s_32_mmu.o > -kvm-objs-$(CONFIG_KVM_BOOK3S_32) := $(kvm-book3s_32-objs) > - > kvm-objs-$(CONFIG_KVM_MPIC) += mpic.o > > kvm-y += $(kvm-objs-m) $(kvm-objs-y) > > obj-$(CONFIG_KVM_E500MC) += kvm.o > obj-$(CONFIG_KVM_BOOK3S_64) += kvm.o > -obj-$(CONFIG_KVM_BOOK3S_32) += kvm.o > > obj-$(CONFIG_KVM_BOOK3S_64_PR) += kvm-pr.o > obj-$(CONFIG_KVM_BOOK3S_64_HV) += kvm-hv.o > diff --git a/arch/powerpc/kvm/book3s.c b/arch/powerpc/kvm/book3s.c > index d79c5d1098c0..75f4d397114f 100644 > --- a/arch/powerpc/kvm/book3s.c > +++ b/arch/powerpc/kvm/book3s.c > @@ -898,12 +898,9 @@ bool kvm_test_age_gfn(struct kvm *kvm, struct kvm_gfn_range *range) > > int kvmppc_core_init_vm(struct kvm *kvm) > { > - > -#ifdef CONFIG_PPC64 > INIT_LIST_HEAD_RCU(&kvm->arch.spapr_tce_tables); > INIT_LIST_HEAD(&kvm->arch.rtas_tokens); > mutex_init(&kvm->arch.rtas_token_lock); > -#endif > > return kvm->arch.kvm_ops->init_vm(kvm); > } > @@ -912,10 +909,8 @@ void kvmppc_core_destroy_vm(struct kvm *kvm) > { > kvm->arch.kvm_ops->destroy_vm(kvm); > > -#ifdef CONFIG_PPC64 > kvmppc_rtas_tokens_free(kvm); > WARN_ON(!list_empty(&kvm->arch.spapr_tce_tables)); > -#endif > > #ifdef CONFIG_KVM_XICS > /* > @@ -1069,10 +1064,6 @@ static int kvmppc_book3s_init(void) > r = kvm_init(sizeof(struct kvm_vcpu), 0, THIS_MODULE); > if (r) > return r; > -#ifdef CONFIG_KVM_BOOK3S_32_HANDLER > - r = kvmppc_book3s_init_pr(); > -#endif > - > #ifdef CONFIG_KVM_XICS > #ifdef CONFIG_KVM_XIVE > if (xics_on_xive()) { > @@ -1089,17 +1080,8 @@ static int kvmppc_book3s_init(void) > > static void kvmppc_book3s_exit(void) > { > -#ifdef CONFIG_KVM_BOOK3S_32_HANDLER > - kvmppc_book3s_exit_pr(); > -#endif > kvm_exit(); > } > > module_init(kvmppc_book3s_init); > module_exit(kvmppc_book3s_exit); > - > -/* On 32bit this is our one and only kernel module */ > -#ifdef CONFIG_KVM_BOOK3S_32_HANDLER > -MODULE_ALIAS_MISCDEV(KVM_MINOR); > -MODULE_ALIAS("devname:kvm"); > -#endif > diff --git a/arch/powerpc/kvm/book3s_emulate.c b/arch/powerpc/kvm/book3s_emulate.c > index de126d153328..30a117d6e70c 100644 > --- a/arch/powerpc/kvm/book3s_emulate.c > +++ b/arch/powerpc/kvm/book3s_emulate.c > @@ -351,7 +351,6 @@ int kvmppc_core_emulate_op_pr(struct kvm_vcpu *vcpu, > vcpu->arch.mmu.tlbie(vcpu, addr, large); > break; > } > -#ifdef CONFIG_PPC_BOOK3S_64 > case OP_31_XOP_FAKE_SC1: > { > /* SC 1 papr hypercalls */ > @@ -378,7 +377,6 @@ int kvmppc_core_emulate_op_pr(struct kvm_vcpu *vcpu, > emulated = EMULATE_EXIT_USER; > break; > } > -#endif > case OP_31_XOP_EIOIO: > break; > case OP_31_XOP_SLBMTE: > @@ -762,7 +760,6 @@ int kvmppc_core_emulate_mtspr_pr(struct kvm_vcpu *vcpu, int sprn, ulong spr_val) > case SPRN_GQR7: > to_book3s(vcpu)->gqr[sprn - SPRN_GQR0] = spr_val; > break; > -#ifdef CONFIG_PPC_BOOK3S_64 > case SPRN_FSCR: > kvmppc_set_fscr(vcpu, spr_val); > break; > @@ -810,7 +807,6 @@ int kvmppc_core_emulate_mtspr_pr(struct kvm_vcpu *vcpu, int sprn, ulong spr_val) > tm_disable(); > > break; > -#endif > #endif > case SPRN_ICTC: > case SPRN_THRM1: > @@ -829,7 +825,6 @@ int kvmppc_core_emulate_mtspr_pr(struct kvm_vcpu *vcpu, int sprn, ulong spr_val) > case SPRN_WPAR_GEKKO: > case SPRN_MSSSR0: > case SPRN_DABR: > -#ifdef CONFIG_PPC_BOOK3S_64 > case SPRN_MMCRS: > case SPRN_MMCRA: > case SPRN_MMCR0: > @@ -839,7 +834,6 @@ int kvmppc_core_emulate_mtspr_pr(struct kvm_vcpu *vcpu, int sprn, ulong spr_val) > case SPRN_UAMOR: > case SPRN_IAMR: > case SPRN_AMR: > -#endif > break; > unprivileged: > default: > @@ -943,7 +937,6 @@ int kvmppc_core_emulate_mfspr_pr(struct kvm_vcpu *vcpu, int sprn, ulong *spr_val > case SPRN_GQR7: > *spr_val = to_book3s(vcpu)->gqr[sprn - SPRN_GQR0]; > break; > -#ifdef CONFIG_PPC_BOOK3S_64 > case SPRN_FSCR: > *spr_val = vcpu->arch.fscr; > break; > @@ -978,7 +971,6 @@ int kvmppc_core_emulate_mfspr_pr(struct kvm_vcpu *vcpu, int sprn, ulong *spr_val > *spr_val = mfspr(SPRN_TFIAR); > tm_disable(); > break; > -#endif > #endif > case SPRN_THRM1: > case SPRN_THRM2: > @@ -995,7 +987,6 @@ int kvmppc_core_emulate_mfspr_pr(struct kvm_vcpu *vcpu, int sprn, ulong *spr_val > case SPRN_WPAR_GEKKO: > case SPRN_MSSSR0: > case SPRN_DABR: > -#ifdef CONFIG_PPC_BOOK3S_64 > case SPRN_MMCRS: > case SPRN_MMCRA: > case SPRN_MMCR0: > @@ -1006,7 +997,6 @@ int kvmppc_core_emulate_mfspr_pr(struct kvm_vcpu *vcpu, int sprn, ulong *spr_val > case SPRN_UAMOR: > case SPRN_IAMR: > case SPRN_AMR: > -#endif > *spr_val = 0; > break; > default: > @@ -1038,35 +1028,8 @@ u32 kvmppc_alignment_dsisr(struct kvm_vcpu *vcpu, unsigned int inst) > > ulong kvmppc_alignment_dar(struct kvm_vcpu *vcpu, unsigned int inst) > { > -#ifdef CONFIG_PPC_BOOK3S_64 > /* > * Linux's fix_alignment() assumes that DAR is valid, so can we > */ > return vcpu->arch.fault_dar; > -#else > - ulong dar = 0; > - ulong ra = get_ra(inst); > - ulong rb = get_rb(inst); > - > - switch (get_op(inst)) { > - case OP_LFS: > - case OP_LFD: > - case OP_STFD: > - case OP_STFS: > - if (ra) > - dar = kvmppc_get_gpr(vcpu, ra); > - dar += (s32)((s16)inst); > - break; > - case 31: > - if (ra) > - dar = kvmppc_get_gpr(vcpu, ra); > - dar += kvmppc_get_gpr(vcpu, rb); > - break; > - default: > - printk(KERN_INFO "KVM: Unaligned instruction 0x%x\n", inst); > - break; > - } > - > - return dar; > -#endif > } > diff --git a/arch/powerpc/kvm/book3s_interrupts.S b/arch/powerpc/kvm/book3s_interrupts.S > index f4bec2fc51aa..c5b88d5451b7 100644 > --- a/arch/powerpc/kvm/book3s_interrupts.S > +++ b/arch/powerpc/kvm/book3s_interrupts.S > @@ -14,7 +14,6 @@ > #include > #include > > -#if defined(CONFIG_PPC_BOOK3S_64) > #ifdef CONFIG_PPC64_ELF_ABI_V2 > #define FUNC(name) name > #else > @@ -22,12 +21,6 @@ > #endif > #define GET_SHADOW_VCPU(reg) addi reg, r13, PACA_SVCPU > > -#elif defined(CONFIG_PPC_BOOK3S_32) > -#define FUNC(name) name > -#define GET_SHADOW_VCPU(reg) lwz reg, (THREAD + THREAD_KVM_SVCPU)(r2) > - > -#endif /* CONFIG_PPC_BOOK3S_64 */ > - > #define VCPU_LOAD_NVGPRS(vcpu) \ > PPC_LL r14, VCPU_GPR(R14)(vcpu); \ > PPC_LL r15, VCPU_GPR(R15)(vcpu); \ > @@ -89,7 +82,6 @@ kvm_start_lightweight: > nop > REST_GPR(3, r1) > > -#ifdef CONFIG_PPC_BOOK3S_64 > /* Get the dcbz32 flag */ > PPC_LL r0, VCPU_HFLAGS(r3) > rldicl r0, r0, 0, 63 /* r3 &= 1 */ > @@ -118,7 +110,6 @@ sprg3_little_endian: > > after_sprg3_load: > mtspr SPRN_SPRG3, r4 > -#endif /* CONFIG_PPC_BOOK3S_64 */ > > PPC_LL r4, VCPU_SHADOW_MSR(r3) /* get shadow_msr */ > > @@ -157,14 +148,12 @@ after_sprg3_load: > bl FUNC(kvmppc_copy_from_svcpu) > nop > > -#ifdef CONFIG_PPC_BOOK3S_64 > /* > * Reload kernel SPRG3 value. > * No need to save guest value as usermode can't modify SPRG3. > */ > ld r3, PACA_SPRG_VDSO(r13) > mtspr SPRN_SPRG_VDSO_WRITE, r3 > -#endif /* CONFIG_PPC_BOOK3S_64 */ > > /* R7 = vcpu */ > PPC_LL r7, GPR3(r1) > diff --git a/arch/powerpc/kvm/book3s_mmu_hpte.c b/arch/powerpc/kvm/book3s_mmu_hpte.c > index d904e13e069b..91614ca9f969 100644 > --- a/arch/powerpc/kvm/book3s_mmu_hpte.c > +++ b/arch/powerpc/kvm/book3s_mmu_hpte.c > @@ -45,13 +45,11 @@ static inline u64 kvmppc_mmu_hash_vpte_long(u64 vpage) > HPTEG_HASH_BITS_VPTE_LONG); > } > > -#ifdef CONFIG_PPC_BOOK3S_64 > static inline u64 kvmppc_mmu_hash_vpte_64k(u64 vpage) > { > return hash_64((vpage & 0xffffffff0ULL) >> 4, > HPTEG_HASH_BITS_VPTE_64K); > } > -#endif > > void kvmppc_mmu_hpte_cache_map(struct kvm_vcpu *vcpu, struct hpte_cache *pte) > { > @@ -80,12 +78,10 @@ void kvmppc_mmu_hpte_cache_map(struct kvm_vcpu *vcpu, struct hpte_cache *pte) > hlist_add_head_rcu(&pte->list_vpte_long, > &vcpu3s->hpte_hash_vpte_long[index]); > > -#ifdef CONFIG_PPC_BOOK3S_64 > /* Add to vPTE_64k list */ > index = kvmppc_mmu_hash_vpte_64k(pte->pte.vpage); > hlist_add_head_rcu(&pte->list_vpte_64k, > &vcpu3s->hpte_hash_vpte_64k[index]); > -#endif > > vcpu3s->hpte_cache_count++; > > @@ -113,9 +109,7 @@ static void invalidate_pte(struct kvm_vcpu *vcpu, struct hpte_cache *pte) > hlist_del_init_rcu(&pte->list_pte_long); > hlist_del_init_rcu(&pte->list_vpte); > hlist_del_init_rcu(&pte->list_vpte_long); > -#ifdef CONFIG_PPC_BOOK3S_64 > hlist_del_init_rcu(&pte->list_vpte_64k); > -#endif > vcpu3s->hpte_cache_count--; > > spin_unlock(&vcpu3s->mmu_lock); > @@ -222,7 +216,6 @@ static void kvmppc_mmu_pte_vflush_short(struct kvm_vcpu *vcpu, u64 guest_vp) > rcu_read_unlock(); > } > > -#ifdef CONFIG_PPC_BOOK3S_64 > /* Flush with mask 0xffffffff0 */ > static void kvmppc_mmu_pte_vflush_64k(struct kvm_vcpu *vcpu, u64 guest_vp) > { > @@ -243,7 +236,6 @@ static void kvmppc_mmu_pte_vflush_64k(struct kvm_vcpu *vcpu, u64 guest_vp) > > rcu_read_unlock(); > } > -#endif > > /* Flush with mask 0xffffff000 */ > static void kvmppc_mmu_pte_vflush_long(struct kvm_vcpu *vcpu, u64 guest_vp) > @@ -275,11 +267,9 @@ void kvmppc_mmu_pte_vflush(struct kvm_vcpu *vcpu, u64 guest_vp, u64 vp_mask) > case 0xfffffffffULL: > kvmppc_mmu_pte_vflush_short(vcpu, guest_vp); > break; > -#ifdef CONFIG_PPC_BOOK3S_64 > case 0xffffffff0ULL: > kvmppc_mmu_pte_vflush_64k(vcpu, guest_vp); > break; > -#endif > case 0xffffff000ULL: > kvmppc_mmu_pte_vflush_long(vcpu, guest_vp); > break; > @@ -355,10 +345,8 @@ int kvmppc_mmu_hpte_init(struct kvm_vcpu *vcpu) > ARRAY_SIZE(vcpu3s->hpte_hash_vpte)); > kvmppc_mmu_hpte_init_hash(vcpu3s->hpte_hash_vpte_long, > ARRAY_SIZE(vcpu3s->hpte_hash_vpte_long)); > -#ifdef CONFIG_PPC_BOOK3S_64 > kvmppc_mmu_hpte_init_hash(vcpu3s->hpte_hash_vpte_64k, > ARRAY_SIZE(vcpu3s->hpte_hash_vpte_64k)); > -#endif > > spin_lock_init(&vcpu3s->mmu_lock); > > diff --git a/arch/powerpc/kvm/book3s_pr.c b/arch/powerpc/kvm/book3s_pr.c > index 83bcdc80ce51..36785a02b9da 100644 > --- a/arch/powerpc/kvm/book3s_pr.c > +++ b/arch/powerpc/kvm/book3s_pr.c > @@ -52,17 +52,7 @@ > > static int kvmppc_handle_ext(struct kvm_vcpu *vcpu, unsigned int exit_nr, > ulong msr); > -#ifdef CONFIG_PPC_BOOK3S_64 > static int kvmppc_handle_fac(struct kvm_vcpu *vcpu, ulong fac); > -#endif > - > -/* Some compatibility defines */ > -#ifdef CONFIG_PPC_BOOK3S_32 > -#define MSR_USER32 MSR_USER > -#define MSR_USER64 MSR_USER > -#define HW_PAGE_SIZE PAGE_SIZE > -#define HPTE_R_M _PAGE_COHERENT > -#endif > > static bool kvmppc_is_split_real(struct kvm_vcpu *vcpu) > { > @@ -115,13 +105,11 @@ static void kvmppc_inject_interrupt_pr(struct kvm_vcpu *vcpu, int vec, u64 srr1_ > new_msr = vcpu->arch.intr_msr; > new_pc = to_book3s(vcpu)->hior + vec; > > -#ifdef CONFIG_PPC_BOOK3S_64 > /* If transactional, change to suspend mode on IRQ delivery */ > if (MSR_TM_TRANSACTIONAL(msr)) > new_msr |= MSR_TS_S; > else > new_msr |= msr & MSR_TS_MASK; > -#endif > > kvmppc_set_srr0(vcpu, pc); > kvmppc_set_srr1(vcpu, (msr & SRR1_MSR_BITS) | srr1_flags); > @@ -131,7 +119,6 @@ static void kvmppc_inject_interrupt_pr(struct kvm_vcpu *vcpu, int vec, u64 srr1_ > > static void kvmppc_core_vcpu_load_pr(struct kvm_vcpu *vcpu, int cpu) > { > -#ifdef CONFIG_PPC_BOOK3S_64 > struct kvmppc_book3s_shadow_vcpu *svcpu = svcpu_get(vcpu); > memcpy(svcpu->slb, to_book3s(vcpu)->slb_shadow, sizeof(svcpu->slb)); > svcpu->slb_max = to_book3s(vcpu)->slb_shadow_max; > @@ -145,12 +132,8 @@ static void kvmppc_core_vcpu_load_pr(struct kvm_vcpu *vcpu, int cpu) > if (cpu_has_feature(CPU_FTR_ARCH_300) && (current->thread.fscr & FSCR_SCV)) > mtspr(SPRN_FSCR, mfspr(SPRN_FSCR) & ~FSCR_SCV); > } > -#endif > > vcpu->cpu = smp_processor_id(); > -#ifdef CONFIG_PPC_BOOK3S_32 > - current->thread.kvm_shadow_vcpu = vcpu->arch.shadow_vcpu; > -#endif > > if (kvmppc_is_split_real(vcpu)) > kvmppc_fixup_split_real(vcpu); > @@ -160,7 +143,6 @@ static void kvmppc_core_vcpu_load_pr(struct kvm_vcpu *vcpu, int cpu) > > static void kvmppc_core_vcpu_put_pr(struct kvm_vcpu *vcpu) > { > -#ifdef CONFIG_PPC_BOOK3S_64 > struct kvmppc_book3s_shadow_vcpu *svcpu = svcpu_get(vcpu); > if (svcpu->in_use) { > kvmppc_copy_from_svcpu(vcpu); > @@ -176,7 +158,6 @@ static void kvmppc_core_vcpu_put_pr(struct kvm_vcpu *vcpu) > if (cpu_has_feature(CPU_FTR_ARCH_300) && (current->thread.fscr & FSCR_SCV)) > mtspr(SPRN_FSCR, mfspr(SPRN_FSCR) | FSCR_SCV); > } > -#endif > > if (kvmppc_is_split_real(vcpu)) > kvmppc_unfixup_split_real(vcpu); > @@ -212,9 +193,7 @@ void kvmppc_copy_to_svcpu(struct kvm_vcpu *vcpu) > svcpu->ctr = vcpu->arch.regs.ctr; > svcpu->lr = vcpu->arch.regs.link; > svcpu->pc = vcpu->arch.regs.nip; > -#ifdef CONFIG_PPC_BOOK3S_64 > svcpu->shadow_fscr = vcpu->arch.shadow_fscr; > -#endif > /* > * Now also save the current time base value. We use this > * to find the guest purr and spurr value. > @@ -245,9 +224,7 @@ static void kvmppc_recalc_shadow_msr(struct kvm_vcpu *vcpu) > /* External providers the guest reserved */ > smsr |= (guest_msr & vcpu->arch.guest_owned_ext); > /* 64-bit Process MSR values */ > -#ifdef CONFIG_PPC_BOOK3S_64 > smsr |= MSR_HV; > -#endif > #ifdef CONFIG_PPC_TRANSACTIONAL_MEM > /* > * in guest privileged state, we want to fail all TM transactions. > @@ -298,9 +275,7 @@ void kvmppc_copy_from_svcpu(struct kvm_vcpu *vcpu) > vcpu->arch.fault_dar = svcpu->fault_dar; > vcpu->arch.fault_dsisr = svcpu->fault_dsisr; > vcpu->arch.last_inst = svcpu->last_inst; > -#ifdef CONFIG_PPC_BOOK3S_64 > vcpu->arch.shadow_fscr = svcpu->shadow_fscr; > -#endif > /* > * Update purr and spurr using time base on exit. > */ > @@ -553,7 +528,6 @@ static void kvmppc_set_pvr_pr(struct kvm_vcpu *vcpu, u32 pvr) > > vcpu->arch.hflags &= ~BOOK3S_HFLAG_SLB; > vcpu->arch.pvr = pvr; > -#ifdef CONFIG_PPC_BOOK3S_64 > if ((pvr >= 0x330000) && (pvr < 0x70330000)) { > kvmppc_mmu_book3s_64_init(vcpu); > if (!to_book3s(vcpu)->hior_explicit) > @@ -561,7 +535,6 @@ static void kvmppc_set_pvr_pr(struct kvm_vcpu *vcpu, u32 pvr) > to_book3s(vcpu)->msr_mask = 0xffffffffffffffffULL; > vcpu->arch.cpu_type = KVM_CPU_3S_64; > } else > -#endif > { > kvmppc_mmu_book3s_32_init(vcpu); > if (!to_book3s(vcpu)->hior_explicit) > @@ -605,11 +578,6 @@ static void kvmppc_set_pvr_pr(struct kvm_vcpu *vcpu, u32 pvr) > break; > } > > -#ifdef CONFIG_PPC_BOOK3S_32 > - /* 32 bit Book3S always has 32 byte dcbz */ > - vcpu->arch.hflags |= BOOK3S_HFLAG_DCBZ32; > -#endif > - > /* On some CPUs we can execute paired single operations natively */ > asm ( "mfpvr %0" : "=r"(host_pvr)); > switch (host_pvr) { > @@ -839,7 +807,6 @@ void kvmppc_giveup_ext(struct kvm_vcpu *vcpu, ulong msr) > /* Give up facility (TAR / EBB / DSCR) */ > void kvmppc_giveup_fac(struct kvm_vcpu *vcpu, ulong fac) > { > -#ifdef CONFIG_PPC_BOOK3S_64 > if (!(vcpu->arch.shadow_fscr & (1ULL << fac))) { > /* Facility not available to the guest, ignore giveup request*/ > return; > @@ -852,7 +819,6 @@ void kvmppc_giveup_fac(struct kvm_vcpu *vcpu, ulong fac) > vcpu->arch.shadow_fscr &= ~FSCR_TAR; > break; > } > -#endif > } > > /* Handle external providers (FPU, Altivec, VSX) */ > @@ -954,8 +920,6 @@ static void kvmppc_handle_lost_ext(struct kvm_vcpu *vcpu) > current->thread.regs->msr |= lost_ext; > } > > -#ifdef CONFIG_PPC_BOOK3S_64 > - > void kvmppc_trigger_fac_interrupt(struct kvm_vcpu *vcpu, ulong fac) > { > /* Inject the Interrupt Cause field and trigger a guest interrupt */ > @@ -1050,7 +1014,6 @@ void kvmppc_set_fscr(struct kvm_vcpu *vcpu, u64 fscr) > > vcpu->arch.fscr = fscr; > } > -#endif > > static void kvmppc_setup_debug(struct kvm_vcpu *vcpu) > { > @@ -1157,24 +1120,6 @@ int kvmppc_handle_exit_pr(struct kvm_vcpu *vcpu, unsigned int exit_nr) > if (kvmppc_is_split_real(vcpu)) > kvmppc_fixup_split_real(vcpu); > > -#ifdef CONFIG_PPC_BOOK3S_32 > - /* We set segments as unused segments when invalidating them. So > - * treat the respective fault as segment fault. */ > - { > - struct kvmppc_book3s_shadow_vcpu *svcpu; > - u32 sr; > - > - svcpu = svcpu_get(vcpu); > - sr = svcpu->sr[kvmppc_get_pc(vcpu) >> SID_SHIFT]; > - svcpu_put(svcpu); > - if (sr == SR_INVALID) { > - kvmppc_mmu_map_segment(vcpu, kvmppc_get_pc(vcpu)); > - r = RESUME_GUEST; > - break; > - } > - } > -#endif > - > /* only care about PTEG not found errors, but leave NX alone */ > if (shadow_srr1 & 0x40000000) { > int idx = srcu_read_lock(&vcpu->kvm->srcu); > @@ -1203,24 +1148,6 @@ int kvmppc_handle_exit_pr(struct kvm_vcpu *vcpu, unsigned int exit_nr) > u32 fault_dsisr = vcpu->arch.fault_dsisr; > vcpu->stat.pf_storage++; > > -#ifdef CONFIG_PPC_BOOK3S_32 > - /* We set segments as unused segments when invalidating them. So > - * treat the respective fault as segment fault. */ > - { > - struct kvmppc_book3s_shadow_vcpu *svcpu; > - u32 sr; > - > - svcpu = svcpu_get(vcpu); > - sr = svcpu->sr[dar >> SID_SHIFT]; > - svcpu_put(svcpu); > - if (sr == SR_INVALID) { > - kvmppc_mmu_map_segment(vcpu, dar); > - r = RESUME_GUEST; > - break; > - } > - } > -#endif > - > /* > * We need to handle missing shadow PTEs, and > * protection faults due to us mapping a page read-only > @@ -1297,12 +1224,10 @@ int kvmppc_handle_exit_pr(struct kvm_vcpu *vcpu, unsigned int exit_nr) > ulong cmd = kvmppc_get_gpr(vcpu, 3); > int i; > > -#ifdef CONFIG_PPC_BOOK3S_64 > if (kvmppc_h_pr(vcpu, cmd) == EMULATE_DONE) { > r = RESUME_GUEST; > break; > } > -#endif > > run->papr_hcall.nr = cmd; > for (i = 0; i < 9; ++i) { > @@ -1395,11 +1320,9 @@ int kvmppc_handle_exit_pr(struct kvm_vcpu *vcpu, unsigned int exit_nr) > r = RESUME_GUEST; > break; > } > -#ifdef CONFIG_PPC_BOOK3S_64 > case BOOK3S_INTERRUPT_FAC_UNAVAIL: > r = kvmppc_handle_fac(vcpu, vcpu->arch.shadow_fscr >> 56); > break; > -#endif > case BOOK3S_INTERRUPT_MACHINE_CHECK: > kvmppc_book3s_queue_irqprio(vcpu, exit_nr); > r = RESUME_GUEST; > @@ -1488,7 +1411,6 @@ static int kvm_arch_vcpu_ioctl_set_sregs_pr(struct kvm_vcpu *vcpu, > kvmppc_set_pvr_pr(vcpu, sregs->pvr); > > vcpu3s->sdr1 = sregs->u.s.sdr1; > -#ifdef CONFIG_PPC_BOOK3S_64 > if (vcpu->arch.hflags & BOOK3S_HFLAG_SLB) { > /* Flush all SLB entries */ > vcpu->arch.mmu.slbmte(vcpu, 0, 0); > @@ -1501,9 +1423,7 @@ static int kvm_arch_vcpu_ioctl_set_sregs_pr(struct kvm_vcpu *vcpu, > if (rb & SLB_ESID_V) > vcpu->arch.mmu.slbmte(vcpu, rs, rb); > } > - } else > -#endif > - { > + } else { > for (i = 0; i < 16; i++) { > vcpu->arch.mmu.mtsrin(vcpu, i, sregs->u.s.ppc32.sr[i]); > } > @@ -1737,18 +1657,10 @@ static int kvmppc_core_vcpu_create_pr(struct kvm_vcpu *vcpu) > goto out; > vcpu->arch.book3s = vcpu_book3s; > > -#ifdef CONFIG_KVM_BOOK3S_32_HANDLER > - vcpu->arch.shadow_vcpu = > - kzalloc(sizeof(*vcpu->arch.shadow_vcpu), GFP_KERNEL); > - if (!vcpu->arch.shadow_vcpu) > - goto free_vcpu3s; > -#endif > - > p = __get_free_page(GFP_KERNEL|__GFP_ZERO); > if (!p) > goto free_shadow_vcpu; > vcpu->arch.shared = (void *)p; > -#ifdef CONFIG_PPC_BOOK3S_64 > /* Always start the shared struct in native endian mode */ > #ifdef __BIG_ENDIAN__ > vcpu->arch.shared_big_endian = true; > @@ -1765,11 +1677,6 @@ static int kvmppc_core_vcpu_create_pr(struct kvm_vcpu *vcpu) > if (mmu_has_feature(MMU_FTR_1T_SEGMENT)) > vcpu->arch.pvr = mfspr(SPRN_PVR); > vcpu->arch.intr_msr = MSR_SF; > -#else > - /* default to book3s_32 (750) */ > - vcpu->arch.pvr = 0x84202; > - vcpu->arch.intr_msr = 0; > -#endif > kvmppc_set_pvr_pr(vcpu, vcpu->arch.pvr); > vcpu->arch.slb_nr = 64; > > @@ -1784,10 +1691,6 @@ static int kvmppc_core_vcpu_create_pr(struct kvm_vcpu *vcpu) > free_shared_page: > free_page((unsigned long)vcpu->arch.shared); > free_shadow_vcpu: > -#ifdef CONFIG_KVM_BOOK3S_32_HANDLER > - kfree(vcpu->arch.shadow_vcpu); > -free_vcpu3s: > -#endif > vfree(vcpu_book3s); > out: > return err; > @@ -1799,9 +1702,6 @@ static void kvmppc_core_vcpu_free_pr(struct kvm_vcpu *vcpu) > > kvmppc_mmu_destroy_pr(vcpu); > free_page((unsigned long)vcpu->arch.shared & PAGE_MASK); > -#ifdef CONFIG_KVM_BOOK3S_32_HANDLER > - kfree(vcpu->arch.shadow_vcpu); > -#endif > vfree(vcpu_book3s); > } > > @@ -1921,7 +1821,6 @@ static void kvmppc_core_free_memslot_pr(struct kvm_memory_slot *slot) > return; > } > > -#ifdef CONFIG_PPC64 > static int kvm_vm_ioctl_get_smmu_info_pr(struct kvm *kvm, > struct kvm_ppc_smmu_info *info) > { > @@ -1978,16 +1877,6 @@ static int kvm_configure_mmu_pr(struct kvm *kvm, struct kvm_ppc_mmuv3_cfg *cfg) > return 0; > } > > -#else > -static int kvm_vm_ioctl_get_smmu_info_pr(struct kvm *kvm, > - struct kvm_ppc_smmu_info *info) > -{ > - /* We should not get called */ > - BUG(); > - return 0; > -} > -#endif /* CONFIG_PPC64 */ > - > static unsigned int kvm_global_user_count = 0; > static DEFINE_SPINLOCK(kvm_global_user_count_lock); > > @@ -1995,10 +1884,8 @@ static int kvmppc_core_init_vm_pr(struct kvm *kvm) > { > mutex_init(&kvm->arch.hpt_mutex); > > -#ifdef CONFIG_PPC_BOOK3S_64 > /* Start out with the default set of hcalls enabled */ > kvmppc_pr_init_default_hcalls(kvm); > -#endif > > if (firmware_has_feature(FW_FEATURE_SET_MODE)) { > spin_lock(&kvm_global_user_count_lock); > @@ -2011,9 +1898,7 @@ static int kvmppc_core_init_vm_pr(struct kvm *kvm) > > static void kvmppc_core_destroy_vm_pr(struct kvm *kvm) > { > -#ifdef CONFIG_PPC64 > WARN_ON(!list_empty(&kvm->arch.spapr_tce_tables)); > -#endif > > if (firmware_has_feature(FW_FEATURE_SET_MODE)) { > spin_lock(&kvm_global_user_count_lock); > @@ -2072,10 +1957,8 @@ static struct kvmppc_ops kvm_ops_pr = { > .emulate_mfspr = kvmppc_core_emulate_mfspr_pr, > .fast_vcpu_kick = kvm_vcpu_kick, > .arch_vm_ioctl = kvm_arch_vm_ioctl_pr, > -#ifdef CONFIG_PPC_BOOK3S_64 > .hcall_implemented = kvmppc_hcall_impl_pr, > .configure_mmu = kvm_configure_mmu_pr, > -#endif > .giveup_ext = kvmppc_giveup_ext, > }; > > @@ -2104,8 +1987,6 @@ void kvmppc_book3s_exit_pr(void) > /* > * We only support separate modules for book3s 64 > */ > -#ifdef CONFIG_PPC_BOOK3S_64 > - > module_init(kvmppc_book3s_init_pr); > module_exit(kvmppc_book3s_exit_pr); > > @@ -2113,4 +1994,3 @@ MODULE_DESCRIPTION("KVM on Book3S without using hypervisor mode"); > MODULE_LICENSE("GPL"); > MODULE_ALIAS_MISCDEV(KVM_MINOR); > MODULE_ALIAS("devname:kvm"); > -#endif > diff --git a/arch/powerpc/kvm/book3s_rmhandlers.S b/arch/powerpc/kvm/book3s_rmhandlers.S > index 0a557ffca9fe..ef01e8ed2a97 100644 > --- a/arch/powerpc/kvm/book3s_rmhandlers.S > +++ b/arch/powerpc/kvm/book3s_rmhandlers.S > @@ -14,9 +14,7 @@ > #include > #include > > -#ifdef CONFIG_PPC_BOOK3S_64 > #include > -#endif > > /***************************************************************************** > * * > @@ -24,120 +22,12 @@ > * * > ****************************************************************************/ > > -#if defined(CONFIG_PPC_BOOK3S_64) > - > #ifdef CONFIG_PPC64_ELF_ABI_V2 > #define FUNC(name) name > #else > #define FUNC(name) GLUE(.,name) > #endif > > -#elif defined(CONFIG_PPC_BOOK3S_32) > - > -#define FUNC(name) name > - > -#define RFI_TO_KERNEL rfi > -#define RFI_TO_GUEST rfi > - > -.macro INTERRUPT_TRAMPOLINE intno > - > -.global kvmppc_trampoline_\intno > -kvmppc_trampoline_\intno: > - > - mtspr SPRN_SPRG_SCRATCH0, r13 /* Save r13 */ > - > - /* > - * First thing to do is to find out if we're coming > - * from a KVM guest or a Linux process. > - * > - * To distinguish, we check a magic byte in the PACA/current > - */ > - mfspr r13, SPRN_SPRG_THREAD > - lwz r13, THREAD_KVM_SVCPU(r13) > - /* PPC32 can have a NULL pointer - let's check for that */ > - mtspr SPRN_SPRG_SCRATCH1, r12 /* Save r12 */ > - mfcr r12 > - cmpwi r13, 0 > - bne 1f > -2: mtcr r12 > - mfspr r12, SPRN_SPRG_SCRATCH1 > - mfspr r13, SPRN_SPRG_SCRATCH0 /* r13 = original r13 */ > - b kvmppc_resume_\intno /* Get back original handler */ > - > -1: tophys(r13, r13) > - stw r12, HSTATE_SCRATCH1(r13) > - mfspr r12, SPRN_SPRG_SCRATCH1 > - stw r12, HSTATE_SCRATCH0(r13) > - lbz r12, HSTATE_IN_GUEST(r13) > - cmpwi r12, KVM_GUEST_MODE_NONE > - bne ..kvmppc_handler_hasmagic_\intno > - /* No KVM guest? Then jump back to the Linux handler! */ > - lwz r12, HSTATE_SCRATCH1(r13) > - b 2b > - > - /* Now we know we're handling a KVM guest */ > -..kvmppc_handler_hasmagic_\intno: > - > - /* Should we just skip the faulting instruction? */ > - cmpwi r12, KVM_GUEST_MODE_SKIP > - beq kvmppc_handler_skip_ins > - > - /* Let's store which interrupt we're handling */ > - li r12, \intno > - > - /* Jump into the SLB exit code that goes to the highmem handler */ > - b kvmppc_handler_trampoline_exit > - > -.endm > - > -INTERRUPT_TRAMPOLINE BOOK3S_INTERRUPT_SYSTEM_RESET > -INTERRUPT_TRAMPOLINE BOOK3S_INTERRUPT_MACHINE_CHECK > -INTERRUPT_TRAMPOLINE BOOK3S_INTERRUPT_DATA_STORAGE > -INTERRUPT_TRAMPOLINE BOOK3S_INTERRUPT_INST_STORAGE > -INTERRUPT_TRAMPOLINE BOOK3S_INTERRUPT_EXTERNAL > -INTERRUPT_TRAMPOLINE BOOK3S_INTERRUPT_ALIGNMENT > -INTERRUPT_TRAMPOLINE BOOK3S_INTERRUPT_PROGRAM > -INTERRUPT_TRAMPOLINE BOOK3S_INTERRUPT_FP_UNAVAIL > -INTERRUPT_TRAMPOLINE BOOK3S_INTERRUPT_DECREMENTER > -INTERRUPT_TRAMPOLINE BOOK3S_INTERRUPT_SYSCALL > -INTERRUPT_TRAMPOLINE BOOK3S_INTERRUPT_TRACE > -INTERRUPT_TRAMPOLINE BOOK3S_INTERRUPT_PERFMON > -INTERRUPT_TRAMPOLINE BOOK3S_INTERRUPT_ALTIVEC > - > -/* > - * Bring us back to the faulting code, but skip the > - * faulting instruction. > - * > - * This is a generic exit path from the interrupt > - * trampolines above. > - * > - * Input Registers: > - * > - * R12 = free > - * R13 = Shadow VCPU (PACA) > - * HSTATE.SCRATCH0 = guest R12 > - * HSTATE.SCRATCH1 = guest CR > - * SPRG_SCRATCH0 = guest R13 > - * > - */ > -kvmppc_handler_skip_ins: > - > - /* Patch the IP to the next instruction */ > - /* Note that prefixed instructions are disabled in PR KVM for now */ > - mfsrr0 r12 > - addi r12, r12, 4 > - mtsrr0 r12 > - > - /* Clean up all state */ > - lwz r12, HSTATE_SCRATCH1(r13) > - mtcr r12 > - PPC_LL r12, HSTATE_SCRATCH0(r13) > - GET_SCRATCH0(r13) > - > - /* And get back into the code */ > - RFI_TO_KERNEL > -#endif > - > /* > * Call kvmppc_handler_trampoline_enter in real mode > * > diff --git a/arch/powerpc/kvm/book3s_segment.S b/arch/powerpc/kvm/book3s_segment.S > index 202046a83fc1..eec41008d815 100644 > --- a/arch/powerpc/kvm/book3s_segment.S > +++ b/arch/powerpc/kvm/book3s_segment.S > @@ -11,31 +11,16 @@ > #include > #include > > -#if defined(CONFIG_PPC_BOOK3S_64) > - > #define GET_SHADOW_VCPU(reg) \ > mr reg, r13 > > -#elif defined(CONFIG_PPC_BOOK3S_32) > - > -#define GET_SHADOW_VCPU(reg) \ > - tophys(reg, r2); \ > - lwz reg, (THREAD + THREAD_KVM_SVCPU)(reg); \ > - tophys(reg, reg) > - > -#endif > - > /* Disable for nested KVM */ > #define USE_QUICK_LAST_INST > > > /* Get helper functions for subarch specific functionality */ > > -#if defined(CONFIG_PPC_BOOK3S_64) > #include "book3s_64_slb.S" > -#elif defined(CONFIG_PPC_BOOK3S_32) > -#include "book3s_32_sr.S" > -#endif > > /****************************************************************************** > * * > @@ -81,7 +66,6 @@ kvmppc_handler_trampoline_enter: > /* Switch to guest segment. This is subarch specific. */ > LOAD_GUEST_SEGMENTS > > -#ifdef CONFIG_PPC_BOOK3S_64 > BEGIN_FTR_SECTION > /* Save host FSCR */ > mfspr r8, SPRN_FSCR > @@ -108,8 +92,6 @@ END_FTR_SECTION_IFSET(CPU_FTR_ARCH_207S) > mtspr SPRN_HID5,r0 > no_dcbz32_on: > > -#endif /* CONFIG_PPC_BOOK3S_64 */ > - > /* Enter guest */ > > PPC_LL r8, SVCPU_CTR(r3) > @@ -170,13 +152,11 @@ kvmppc_interrupt_pr: > * HSTATE.SCRATCH0 = guest R12 > * HSTATE.SCRATCH2 = guest R9 > */ > -#ifdef CONFIG_PPC64 > /* Match 32-bit entry */ > ld r9,HSTATE_SCRATCH2(r13) > rotldi r12, r12, 32 /* Flip R12 halves for stw */ > stw r12, HSTATE_SCRATCH1(r13) /* CR is now in the low half */ > srdi r12, r12, 32 /* shift trap into low half */ > -#endif > > .global kvmppc_handler_trampoline_exit > kvmppc_handler_trampoline_exit: > @@ -209,7 +189,6 @@ kvmppc_handler_trampoline_exit: > PPC_LL r2, HSTATE_HOST_R2(r13) > > /* Save guest PC and MSR */ > -#ifdef CONFIG_PPC64 > BEGIN_FTR_SECTION > andi. r0, r12, 0x2 > cmpwi cr1, r0, 0 > @@ -219,7 +198,7 @@ BEGIN_FTR_SECTION > andi. r12,r12,0x3ffd > b 2f > END_FTR_SECTION_IFSET(CPU_FTR_HVMODE) > -#endif > + > 1: mfsrr0 r3 > mfsrr1 r4 > 2: > @@ -265,7 +244,6 @@ END_FTR_SECTION_IFSET(CPU_FTR_HVMODE) > beq ld_last_prev_inst > cmpwi r12, BOOK3S_INTERRUPT_ALIGNMENT > beq- ld_last_inst > -#ifdef CONFIG_PPC64 > BEGIN_FTR_SECTION > cmpwi r12, BOOK3S_INTERRUPT_H_EMUL_ASSIST > beq- ld_last_inst > @@ -274,7 +252,6 @@ BEGIN_FTR_SECTION > cmpwi r12, BOOK3S_INTERRUPT_FAC_UNAVAIL > beq- ld_last_inst > END_FTR_SECTION_IFSET(CPU_FTR_ARCH_207S) > -#endif > > b no_ld_last_inst > > @@ -317,7 +294,6 @@ no_ld_last_inst: > /* Switch back to host MMU */ > LOAD_HOST_SEGMENTS > > -#ifdef CONFIG_PPC_BOOK3S_64 > > lbz r5, HSTATE_RESTORE_HID5(r13) > cmpwi r5, 0 > @@ -342,8 +318,6 @@ no_fscr_save: > mtspr SPRN_FSCR, r8 > END_FTR_SECTION_IFSET(CPU_FTR_ARCH_207S) > > -#endif /* CONFIG_PPC_BOOK3S_64 */ > - > /* > * For some interrupts, we need to call the real Linux > * handler, so it can do work for us. This has to happen > @@ -386,13 +360,11 @@ END_FTR_SECTION_IFSET(CPU_FTR_ARCH_207S) > #endif > PPC_LL r8, HSTATE_VMHANDLER(r13) > > -#ifdef CONFIG_PPC64 > BEGIN_FTR_SECTION > beq cr1, 1f > mtspr SPRN_HSRR1, r6 > mtspr SPRN_HSRR0, r8 > END_FTR_SECTION_IFSET(CPU_FTR_HVMODE) > -#endif > 1: /* Restore host msr -> SRR1 */ > mtsrr1 r6 > /* Load highmem handler address */ > diff --git a/arch/powerpc/kvm/emulate.c b/arch/powerpc/kvm/emulate.c > index 355d5206e8aa..74508516df51 100644 > --- a/arch/powerpc/kvm/emulate.c > +++ b/arch/powerpc/kvm/emulate.c > @@ -229,9 +229,7 @@ int kvmppc_emulate_instruction(struct kvm_vcpu *vcpu) > switch (get_xop(inst)) { > > case OP_31_XOP_TRAP: > -#ifdef CONFIG_64BIT > case OP_31_XOP_TRAP_64: > -#endif > #ifdef CONFIG_PPC_BOOK3S > kvmppc_core_queue_program(vcpu, SRR1_PROGTRAP); > #else > diff --git a/arch/powerpc/kvm/powerpc.c b/arch/powerpc/kvm/powerpc.c > index ce1d91eed231..8059876abf23 100644 > --- a/arch/powerpc/kvm/powerpc.c > +++ b/arch/powerpc/kvm/powerpc.c > @@ -1163,11 +1163,9 @@ static void kvmppc_complete_mmio_load(struct kvm_vcpu *vcpu) > > if (vcpu->arch.mmio_sign_extend) { > switch (run->mmio.len) { > -#ifdef CONFIG_PPC64 > case 4: > gpr = (s64)(s32)gpr; > break; > -#endif > case 2: > gpr = (s64)(s16)gpr; > break; From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 67A09E7717F for ; Thu, 12 Dec 2024 19:16:22 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:Content-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:From:References:Cc:To:Subject: MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=59VBwLTdN6nXOjFxV+1rHWvAsL1xeOdfn9bT5rdgDpY=; b=FaSvslLw2ipPn4 p7I0FaTnboLfUJdrGyuOTWJb3yv5bPDzbvQsOQajqzyk3OmChBeedquJcMGDxlox95y2J8DOHwtOP V6fJr1SFkB51+1cpqNwAywHrdwr2/QR5wxepCSRZ/Jf1U88Zl4O4nshElTRmOwl/D6vWn6D/EyD/t ujuI59oOEU+Dc98NpFVOi5hpZWKZp0mAt4vCEksH17SBMQBxLzQiju2358ID8Fu88jlqu1yHYBYS7 /8sVn66N1jY71dr0aX5kXHTcP2jNtn87PRhe9NzL3QW7hZwUNVl56EK0QNeQRCLFW5ceAjywRmOU6 H6G38UEIO/FXdfe7vGqQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tLofW-00000001aOs-2NrS; Thu, 12 Dec 2024 19:16:14 +0000 Received: from pegase2.c-s.fr ([93.17.235.10]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tLo1b-00000001RVV-0T00; Thu, 12 Dec 2024 18:35:01 +0000 Received: from localhost (mailhub3.si.c-s.fr [172.26.127.67]) by localhost (Postfix) with ESMTP id 4Y8Ljm050Sz9sSc; Thu, 12 Dec 2024 19:34:52 +0100 (CET) X-Virus-Scanned: amavisd-new at c-s.fr Received: from pegase2.c-s.fr ([172.26.127.65]) by localhost (pegase2.c-s.fr [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id JyAcT0_AqjA1; Thu, 12 Dec 2024 19:34:51 +0100 (CET) Received: from messagerie.si.c-s.fr (messagerie.si.c-s.fr [192.168.25.192]) by pegase2.c-s.fr (Postfix) with ESMTP id 4Y8Ljl56gvz9sSW; Thu, 12 Dec 2024 19:34:51 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by messagerie.si.c-s.fr (Postfix) with ESMTP id 84BD78B773; Thu, 12 Dec 2024 19:34:51 +0100 (CET) X-Virus-Scanned: amavisd-new at c-s.fr Received: from messagerie.si.c-s.fr ([127.0.0.1]) by localhost (messagerie.si.c-s.fr [127.0.0.1]) (amavisd-new, port 10023) with ESMTP id dOarpQtZ8idy; Thu, 12 Dec 2024 19:34:51 +0100 (CET) Received: from [192.168.232.97] (unknown [192.168.232.97]) by messagerie.si.c-s.fr (Postfix) with ESMTP id AF4708B763; Thu, 12 Dec 2024 19:34:46 +0100 (CET) Message-ID: <2809dcce-3405-430e-b43d-d75f35bdb7d5@csgroup.eu> Date: Thu, 12 Dec 2024 19:34:45 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [RFC 3/5] powerpc: kvm: drop 32-bit book3s To: Arnd Bergmann , kvm@vger.kernel.org Cc: Arnd Bergmann , Thomas Bogendoerfer , Huacai Chen , Jiaxun Yang , Michael Ellerman , Nicholas Piggin , Naveen N Rao , Madhavan Srinivasan , Alexander Graf , Crystal Wood , Anup Patel , Atish Patra , Paul Walmsley , Palmer Dabbelt , Albert Ou , Sean Christopherson , Paolo Bonzini , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, "H. Peter Anvin" , Vitaly Kuznetsov , David Woodhouse , Paul Durrant , Marc Zyngier , linux-kernel@vger.kernel.org, linux-mips@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, kvm-riscv@lists.infradead.org, linux-riscv@lists.infradead.org References: <20241212125516.467123-1-arnd@kernel.org> <20241212125516.467123-4-arnd@kernel.org> Content-Language: fr-FR From: Christophe Leroy In-Reply-To: <20241212125516.467123-4-arnd@kernel.org> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20241212_103459_661906_890DCE05 X-CRM114-Status: GOOD ( 26.33 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org CgpMZSAxMi8xMi8yMDI0IMOgIDEzOjU1LCBBcm5kIEJlcmdtYW5uIGEgw6ljcml0wqA6Cj4gRnJv bTogQXJuZCBCZXJnbWFubiA8YXJuZEBhcm5kYi5kZT4KPiAKPiBTdXBwb3J0IGZvciBLVk0gb24g MzItYml0IEJvb2sgSUlJLXMgaW1wbGVtZW50YXRpb25zIHdhcyBhZGRlZCBpbiAyMDEwCj4gYW5k IHN1cHBvcnRzIFBvd2VyTWFjLCBDSFJQLCBhbmQgZW1iZWRkZWQgcGxhdGZvcm1zIHVzaW5nIHRo ZSBGcmVlc2NhbGUgRzQKPiAobXBjNzR4eCksIGUzMDAgKG1wYzgzeHgpIGFuZCBlNjAwIChtcGM4 Nnh4KSBDUFVzIGZyb20gMjAwMyB0byAyMDA5Lgo+IAo+IEVhcmxpZXIgNjAzLzYwNC83NTAgbWFj aGluZXMgbWlnaHQgd29yayBidXQgd291bGQgYmUgZXZlbiBtb3JlIGxpbWl0ZWQKPiBieSB0aGVp ciBhdmFpbGFibGUgbWVtb3J5Lgo+IAo+IFRoZSBvbmx5IGxpa2VseSB1c2VycyBvZiBLVk0gb24g YW55IG9mIHRoZXNlIHdlcmUgdGhlIGZpbmFsIEFwcGxlCj4gUG93ZXJNYWMvUG93ZXJCb29rL2lC b29rIEc0IG1vZGVscyB3aXRoIDJHQiBvZiBSQU0gdGhhdCB3ZXJlIGF0IHRoZSBoaWdoCj4gZW5k IDIwIHllYXJzIGFnbyBidXQgYXJlIGp1c3QgYXMgb2Jzb2xldGUgYXMgdGhlaXIgeDg2LTMyIGNv dW50ZXJwYXJ0cy4KPiBUaGUgY29kZSBoYXMgYmVlbiBvcnBoYW5lZCBzaW5jZSAyMDIzLgoKVGhh bmtzIGZvciBkb2luZyB0aGlzLCBpdCB3aWxsIGhlbHAgbWFraW5nIG1haW50ZW5hbmNlIGFuZCBl dm9sdXRpb24gb2YgCjMyIGJpdHMgZWFzaWVyLgoKU2hvdWxkIGZpeCBodHRwczovL2dpdGh1Yi5j b20vbGludXhwcGMvaXNzdWVzL2lzc3Vlcy8zMzQKCgoKPiAKPiBTaWduZWQtb2ZmLWJ5OiBBcm5k IEJlcmdtYW5uIDxhcm5kQGFybmRiLmRlPgo+IC0tLQo+ICAgTUFJTlRBSU5FUlMgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgfCAgIDIgKy0KPiAgIGFyY2gvcG93ZXJwYy9pbmNsdWRlL2Fz bS9rdm1fYm9vazNzLmggICAgIHwgIDE5IC0tLS0KPiAgIGFyY2gvcG93ZXJwYy9pbmNsdWRlL2Fz bS9rdm1fYm9vazNzX2FzbS5oIHwgIDEwIC0tCj4gICBhcmNoL3Bvd2VycGMva3ZtL0tjb25maWcg ICAgICAgICAgICAgICAgICB8ICAyMiAtLS0tCj4gICBhcmNoL3Bvd2VycGMva3ZtL01ha2VmaWxl ICAgICAgICAgICAgICAgICB8ICAxNSAtLS0KPiAgIGFyY2gvcG93ZXJwYy9rdm0vYm9vazNzLmMg ICAgICAgICAgICAgICAgIHwgIDE4IC0tLS0KPiAgIGFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2Vt dWxhdGUuYyAgICAgICAgIHwgIDM3IC0tLS0tLS0KPiAgIGFyY2gvcG93ZXJwYy9rdm0vYm9vazNz X2ludGVycnVwdHMuUyAgICAgIHwgIDExIC0tCj4gICBhcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19t bXVfaHB0ZS5jICAgICAgICB8ICAxMiAtLS0KPiAgIGFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3By LmMgICAgICAgICAgICAgIHwgMTIyICstLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiAgIGFyY2gvcG93 ZXJwYy9rdm0vYm9vazNzX3JtaGFuZGxlcnMuUyAgICAgIHwgMTEwIC0tLS0tLS0tLS0tLS0tLS0t LS0KPiAgIGFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3NlZ21lbnQuUyAgICAgICAgIHwgIDMwICst LS0tLQo+ICAgYXJjaC9wb3dlcnBjL2t2bS9lbXVsYXRlLmMgICAgICAgICAgICAgICAgfCAgIDIg LQo+ICAgYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMgICAgICAgICAgICAgICAgfCAgIDIgLQo+ ICAgMTQgZmlsZXMgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCA0MDkgZGVsZXRpb25zKC0pCgpT b21lIGxlZnQtb3ZlciA/CgokIGdpdCBncmVwIEtWTV9CT09LM1NfMzJfSEFORExFUgphcmNoL3Bv d2VycGMvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmg6I2lmZGVmIENPTkZJR19LVk1fQk9PSzNTXzMy X0hBTkRMRVIKYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oOiNlbmRpZiAvKiAK Q09ORklHX0tWTV9CT09LM1NfMzJfSEFORExFUiAqLwphcmNoL3Bvd2VycGMva2VybmVsL2FzbS1v ZmZzZXRzLmM6I2lmZGVmIENPTkZJR19LVk1fQk9PSzNTXzMyX0hBTkRMRVIKCldoYXQgYWJvdXQg dGhlIGZvbGxvd2luZyBpbiBhc20tb2Zmc2V0cy5jLCBzaG91bGQgaXQgc3RpbGwgdGVzdCAKQ09O RklHX1BQQ19CT09LM1NfNjQgPyBJcyBDT05GSUdfS1ZNX0JPT0szU19QUl9QT1NTSUJMRSBzdGls bCBwb3NzaWJsZSAKb24gc29tZXRoaW5nIGVsc2UgPwoKI2lmIGRlZmluZWQoQ09ORklHX1BQQ19C T09LM1NfNjQpICYmIGRlZmluZWQoQ09ORklHX0tWTV9CT09LM1NfUFJfUE9TU0lCTEUpCglPRkZT RVQoVkNQVV9TSEFSRURCRSwga3ZtX3ZjcHUsIGFyY2guc2hhcmVkX2JpZ19lbmRpYW4pOwojZW5k aWYKClNob3VsZG4ndCBDT05GSUdfS1ZNIGFuZC9vciBDT05GSUdfVklSVFVBTElTQVRJT04gYmUg cmVzdHJpY3RlZCB0byAKQ09ORklHX1BQQzY0IG5vdyA/CgpXaGF0IGFib3V0OgoKYXJjaC9wb3dl cnBjL2tlcm5lbC9oZWFkX2Jvb2szc18zMi5TOiNpbmNsdWRlIDxhc20va3ZtX2Jvb2szc19hc20u aD4KYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkX2Jvb2szc18zMi5TOiNpbmNsdWRlICIuLi9rdm0v Ym9vazNzX3JtaGFuZGxlcnMuUyIKClRoZXJlIGlzIHN0aWxsIGFyY2gvcG93ZXJwYy9rdm0vYm9v azNzXzMyX21tdS5jCgpDaHJpc3RvcGhlCgoKPiAKPiBkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMg Yi9NQUlOVEFJTkVSUwo+IGluZGV4IDUzMTU2MWM3YTliNy4uOGQ1MzgzMzY0NWZhIDEwMDY0NAo+ IC0tLSBhL01BSU5UQUlORVJTCj4gKysrIGIvTUFJTlRBSU5FUlMKPiBAQCAtMTI2NDIsNyArMTI2 NDIsNyBAQCBMOglsaW51eHBwYy1kZXZAbGlzdHMub3psYWJzLm9yZwo+ICAgTDoJa3ZtQHZnZXIu a2VybmVsLm9yZwo+ICAgUzoJTWFpbnRhaW5lZCAoQm9vazNTIDY0LWJpdCBIVikKPiAgIFM6CU9k ZCBmaXhlcyAoQm9vazNTIDY0LWJpdCBQUikKPiAtUzoJT3JwaGFuIChCb29rM0UgYW5kIDMyLWJp dCkKPiArUzoJT3JwaGFuIChCb29rM0UpCj4gICBUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcv cHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L3Bvd2VycGMvbGludXguZ2l0IHRvcGljL3BwYy1rdm0K PiAgIEY6CWFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm0qCj4gICBGOglhcmNoL3Bvd2VycGMv aW5jbHVkZS91YXBpL2FzbS9rdm0qCj4gZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRl L2FzbS9rdm1fYm9vazNzLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2Jvb2szcy5o Cj4gaW5kZXggZTFmZjI5MWJhODkxLi43MTUzMmUwZTY1YTYgMTAwNjQ0Cj4gLS0tIGEvYXJjaC9w b3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9ib29rM3MuaAo+ICsrKyBiL2FyY2gvcG93ZXJwYy9pbmNs dWRlL2FzbS9rdm1fYm9vazNzLmgKPiBAQCAtMzYsMjEgKzM2LDE0IEBAIHN0cnVjdCBrdm1wcGNf c2lkX21hcCB7Cj4gICAjZGVmaW5lIFNJRF9NQVBfTlVNICAgICAoMSA8PCBTSURfTUFQX0JJVFMp Cj4gICAjZGVmaW5lIFNJRF9NQVBfTUFTSyAgICAoU0lEX01BUF9OVU0gLSAxKQo+ICAgCj4gLSNp ZmRlZiBDT05GSUdfUFBDX0JPT0szU182NAo+ICAgI2RlZmluZSBTSURfQ09OVEVYVFMJMQo+IC0j ZWxzZQo+IC0jZGVmaW5lIFNJRF9DT05URVhUUwkxMjgKPiAtI2RlZmluZSBWU0lEX1BPT0xfU0la RQkoU0lEX0NPTlRFWFRTICogMTYpCj4gLSNlbmRpZgo+ICAgCj4gICBzdHJ1Y3QgaHB0ZV9jYWNo ZSB7Cj4gICAJc3RydWN0IGhsaXN0X25vZGUgbGlzdF9wdGU7Cj4gICAJc3RydWN0IGhsaXN0X25v ZGUgbGlzdF9wdGVfbG9uZzsKPiAgIAlzdHJ1Y3QgaGxpc3Rfbm9kZSBsaXN0X3ZwdGU7Cj4gICAJ c3RydWN0IGhsaXN0X25vZGUgbGlzdF92cHRlX2xvbmc7Cj4gLSNpZmRlZiBDT05GSUdfUFBDX0JP T0szU182NAo+ICAgCXN0cnVjdCBobGlzdF9ub2RlIGxpc3RfdnB0ZV82NGs7Cj4gLSNlbmRpZgo+ ICAgCXN0cnVjdCByY3VfaGVhZCByY3VfaGVhZDsKPiAgIAl1NjQgaG9zdF92cG47Cj4gICAJdTY0 IHBmbjsKPiBAQCAtMTEyLDE0ICsxMDUsOSBAQCBzdHJ1Y3Qga3ZtcHBjX3ZjcHVfYm9vazNzIHsK PiAgIAl1NjQgaGlvcjsKPiAgIAl1NjQgbXNyX21hc2s7Cj4gICAJdTY0IHZ0YjsKPiAtI2lmZGVm IENPTkZJR19QUENfQk9PSzNTXzMyCj4gLQl1MzIgdnNpZF9wb29sW1ZTSURfUE9PTF9TSVpFXTsK PiAtCXUzMiB2c2lkX25leHQ7Cj4gLSNlbHNlCj4gICAJdTY0IHByb3RvX3ZzaWRfZmlyc3Q7Cj4g ICAJdTY0IHByb3RvX3ZzaWRfbWF4Owo+ICAgCXU2NCBwcm90b192c2lkX25leHQ7Cj4gLSNlbmRp Zgo+ICAgCWludCBjb250ZXh0X2lkW1NJRF9DT05URVhUU107Cj4gICAKPiAgIAlib29sIGhpb3Jf ZXhwbGljaXQ7CQkvKiBISU9SIGlzIHNldCBieSBpb2N0bCwgbm90IFBWUiAqLwo+IEBAIC0xMjgs OSArMTE2LDcgQEAgc3RydWN0IGt2bXBwY192Y3B1X2Jvb2szcyB7Cj4gICAJc3RydWN0IGhsaXN0 X2hlYWQgaHB0ZV9oYXNoX3B0ZV9sb25nW0hQVEVHX0hBU0hfTlVNX1BURV9MT05HXTsKPiAgIAlz dHJ1Y3QgaGxpc3RfaGVhZCBocHRlX2hhc2hfdnB0ZVtIUFRFR19IQVNIX05VTV9WUFRFXTsKPiAg IAlzdHJ1Y3QgaGxpc3RfaGVhZCBocHRlX2hhc2hfdnB0ZV9sb25nW0hQVEVHX0hBU0hfTlVNX1ZQ VEVfTE9OR107Cj4gLSNpZmRlZiBDT05GSUdfUFBDX0JPT0szU182NAo+ICAgCXN0cnVjdCBobGlz dF9oZWFkIGhwdGVfaGFzaF92cHRlXzY0a1tIUFRFR19IQVNIX05VTV9WUFRFXzY0S107Cj4gLSNl bmRpZgo+ICAgCWludCBocHRlX2NhY2hlX2NvdW50Owo+ICAgCXNwaW5sb2NrX3QgbW11X2xvY2s7 Cj4gICB9Owo+IEBAIC0zOTEsMTIgKzM3Nyw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGt2bXBw Y192Y3B1X2Jvb2szcyAqdG9fYm9vazNzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKPiAgIAo+ICAg LyogQWxzbyBhZGQgc3ViYXJjaCBzcGVjaWZpYyBkZWZpbmVzICovCj4gICAKPiAtI2lmZGVmIENP TkZJR19LVk1fQk9PSzNTXzMyX0hBTkRMRVIKPiAtI2luY2x1ZGUgPGFzbS9rdm1fYm9vazNzXzMy Lmg+Cj4gLSNlbmRpZgo+IC0jaWZkZWYgQ09ORklHX0tWTV9CT09LM1NfNjRfSEFORExFUgo+ICAg I2luY2x1ZGUgPGFzbS9rdm1fYm9vazNzXzY0Lmg+Cj4gLSNlbmRpZgo+ICAgCj4gICBzdGF0aWMg aW5saW5lIHZvaWQga3ZtcHBjX3NldF9ncHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgbnVt LCB1bG9uZyB2YWwpCj4gICB7Cj4gZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2Fz bS9rdm1fYm9vazNzX2FzbS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9ib29rM3Nf YXNtLmgKPiBpbmRleCBhMzY3OTc5Mzg2MjAuLjk4MTc0MzYzOTQ2ZSAxMDA2NDQKPiAtLS0gYS9h cmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2Jvb2szc19hc20uaAo+ICsrKyBiL2FyY2gvcG93 ZXJwYy9pbmNsdWRlL2FzbS9rdm1fYm9vazNzX2FzbS5oCj4gQEAgLTExMywxMSArMTEzLDkgQEAg c3RydWN0IGt2bXBwY19ob3N0X3N0YXRlIHsKPiAgIAl1NjQgZGVjX2V4cGlyZXM7Cj4gICAJc3Ry dWN0IGt2bV9zcGxpdF9tb2RlICprdm1fc3BsaXRfbW9kZTsKPiAgICNlbmRpZgo+IC0jaWZkZWYg Q09ORklHX1BQQ19CT09LM1NfNjQKPiAgIAl1NjQgY2ZhcjsKPiAgIAl1NjQgcHByOwo+ICAgCXU2 NCBob3N0X2ZzY3I7Cj4gLSNlbmRpZgo+ICAgfTsKPiAgIAo+ICAgc3RydWN0IGt2bXBwY19ib29r M3Nfc2hhZG93X3ZjcHUgewo+IEBAIC0xMzQsMjAgKzEzMiwxMiBAQCBzdHJ1Y3Qga3ZtcHBjX2Jv b2szc19zaGFkb3dfdmNwdSB7Cj4gICAJdTMyIGZhdWx0X2RzaXNyOwo+ICAgCXUzMiBsYXN0X2lu c3Q7Cj4gICAKPiAtI2lmZGVmIENPTkZJR19QUENfQk9PSzNTXzMyCj4gLQl1MzIgICAgIHNyWzE2 XTsJCQkvKiBHdWVzdCBTUnMgKi8KPiAtCj4gLQlzdHJ1Y3Qga3ZtcHBjX2hvc3Rfc3RhdGUgaHN0 YXRlOwo+IC0jZW5kaWYKPiAtCj4gLSNpZmRlZiBDT05GSUdfUFBDX0JPT0szU182NAo+ICAgCXU4 IHNsYl9tYXg7CQkJLyogaGlnaGVzdCB1c2VkIGd1ZXN0IHNsYiBlbnRyeSAqLwo+ICAgCXN0cnVj dCAgewo+ICAgCQl1NjQgICAgIGVzaWQ7Cj4gICAJCXU2NCAgICAgdnNpZDsKPiAgIAl9IHNsYls2 NF07CQkJLyogZ3Vlc3QgU0xCICovCj4gICAJdTY0IHNoYWRvd19mc2NyOwo+IC0jZW5kaWYKPiAg IH07Cj4gICAKPiAgICNlbmRpZiAvKl9fQVNTRU1CTFlfXyAqLwo+IGRpZmYgLS1naXQgYS9hcmNo L3Bvd2VycGMva3ZtL0tjb25maWcgYi9hcmNoL3Bvd2VycGMva3ZtL0tjb25maWcKPiBpbmRleCBl MjIzMGVhNTEyY2YuLmQwYTZlMmY2ZGY4MSAxMDA2NDQKPiAtLS0gYS9hcmNoL3Bvd2VycGMva3Zt L0tjb25maWcKPiArKysgYi9hcmNoL3Bvd2VycGMva3ZtL0tjb25maWcKPiBAQCAtMjcsMTEgKzI3 LDYgQEAgY29uZmlnIEtWTQo+ICAgY29uZmlnIEtWTV9CT09LM1NfSEFORExFUgo+ICAgCWJvb2wK PiAgIAo+IC1jb25maWcgS1ZNX0JPT0szU18zMl9IQU5ETEVSCj4gLQlib29sCj4gLQlzZWxlY3Qg S1ZNX0JPT0szU19IQU5ETEVSCj4gLQlzZWxlY3QgS1ZNX01NSU8KPiAtCj4gICBjb25maWcgS1ZN X0JPT0szU182NF9IQU5ETEVSCj4gICAJYm9vbAo+ICAgCXNlbGVjdCBLVk1fQk9PSzNTX0hBTkRM RVIKPiBAQCAtNDQsMjMgKzM5LDYgQEAgY29uZmlnIEtWTV9CT09LM1NfUFJfUE9TU0lCTEUKPiAg IGNvbmZpZyBLVk1fQk9PSzNTX0hWX1BPU1NJQkxFCj4gICAJYm9vbAo+ICAgCj4gLWNvbmZpZyBL Vk1fQk9PSzNTXzMyCj4gLQl0cmlzdGF0ZSAiS1ZNIHN1cHBvcnQgZm9yIFBvd2VyUEMgYm9vazNz XzMyIHByb2Nlc3NvcnMiCj4gLQlkZXBlbmRzIG9uIFBQQ19CT09LM1NfMzIgJiYgIVNNUCAmJiAh UFRFXzY0QklUCj4gLQlkZXBlbmRzIG9uICFDT05URVhUX1RSQUNLSU5HX1VTRVIKPiAtCXNlbGVj dCBLVk0KPiAtCXNlbGVjdCBLVk1fQk9PSzNTXzMyX0hBTkRMRVIKPiAtCXNlbGVjdCBLVk1fQk9P SzNTX1BSX1BPU1NJQkxFCj4gLQlzZWxlY3QgUFBDX0ZQVQo+IC0JaGVscAo+IC0JICBTdXBwb3J0 IHJ1bm5pbmcgdW5tb2RpZmllZCBib29rM3NfMzIgZ3Vlc3Qga2VybmVscwo+IC0JICBpbiB2aXJ0 dWFsIG1hY2hpbmVzIG9uIGJvb2szc18zMiBob3N0IHByb2Nlc3NvcnMuCj4gLQo+IC0JICBUaGlz IG1vZHVsZSBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIGhhcmR3YXJlIGNhcGFiaWxpdGllcyB0aHJv dWdoCj4gLQkgIGEgY2hhcmFjdGVyIGRldmljZSBub2RlIG5hbWVkIC9kZXYva3ZtLgo+IC0KPiAt CSAgSWYgdW5zdXJlLCBzYXkgTi4KPiAtCj4gICBjb25maWcgS1ZNX0JPT0szU182NAo+ICAgCXRy aXN0YXRlICJLVk0gc3VwcG9ydCBmb3IgUG93ZXJQQyBib29rM3NfNjQgcHJvY2Vzc29ycyIKPiAg IAlkZXBlbmRzIG9uIFBQQ19CT09LM1NfNjQKPiBkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2 bS9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy9rdm0vTWFrZWZpbGUKPiBpbmRleCAyOTRmMjc0Mzlm N2YuLjA1OWI0YzE1M2Q5NyAxMDA2NDQKPiAtLS0gYS9hcmNoL3Bvd2VycGMva3ZtL01ha2VmaWxl Cj4gKysrIGIvYXJjaC9wb3dlcnBjL2t2bS9NYWtlZmlsZQo+IEBAIC05NSwyNyArOTUsMTIgQEAg a3ZtLWJvb2szc182NC1tb2R1bGUtb2JqcyA6PSBcCj4gICAKPiAgIGt2bS1vYmpzLSQoQ09ORklH X0tWTV9CT09LM1NfNjQpIDo9ICQoa3ZtLWJvb2szc182NC1tb2R1bGUtb2JqcykKPiAgIAo+IC1r dm0tYm9vazNzXzMyLW9ianMgOj0gXAo+IC0JJChjb21tb24tb2Jqcy15KSBcCj4gLQllbXVsYXRl Lm8gXAo+IC0JZnB1Lm8gXAo+IC0JYm9vazNzX3BhaXJlZF9zaW5nbGVzLm8gXAo+IC0JYm9vazNz Lm8gXAo+IC0JYm9vazNzX3ByLm8gXAo+IC0JYm9vazNzX2VtdWxhdGUubyBcCj4gLQlib29rM3Nf aW50ZXJydXB0cy5vIFwKPiAtCWJvb2szc19tbXVfaHB0ZS5vIFwKPiAtCWJvb2szc18zMl9tbXVf aG9zdC5vIFwKPiAtCWJvb2szc18zMl9tbXUubwo+IC1rdm0tb2Jqcy0kKENPTkZJR19LVk1fQk9P SzNTXzMyKSA6PSAkKGt2bS1ib29rM3NfMzItb2JqcykKPiAtCj4gICBrdm0tb2Jqcy0kKENPTkZJ R19LVk1fTVBJQykgKz0gbXBpYy5vCj4gICAKPiAgIGt2bS15ICs9ICQoa3ZtLW9ianMtbSkgJChr dm0tb2Jqcy15KQo+ICAgCj4gICBvYmotJChDT05GSUdfS1ZNX0U1MDBNQykgKz0ga3ZtLm8KPiAg IG9iai0kKENPTkZJR19LVk1fQk9PSzNTXzY0KSArPSBrdm0ubwo+IC1vYmotJChDT05GSUdfS1ZN X0JPT0szU18zMikgKz0ga3ZtLm8KPiAgIAo+ICAgb2JqLSQoQ09ORklHX0tWTV9CT09LM1NfNjRf UFIpICs9IGt2bS1wci5vCj4gICBvYmotJChDT05GSUdfS1ZNX0JPT0szU182NF9IVikgKz0ga3Zt LWh2Lm8KPiBkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3MuYyBiL2FyY2gvcG93 ZXJwYy9rdm0vYm9vazNzLmMKPiBpbmRleCBkNzljNWQxMDk4YzAuLjc1ZjRkMzk3MTE0ZiAxMDA2 NDQKPiAtLS0gYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szcy5jCj4gKysrIGIvYXJjaC9wb3dlcnBj L2t2bS9ib29rM3MuYwo+IEBAIC04OTgsMTIgKzg5OCw5IEBAIGJvb2wga3ZtX3Rlc3RfYWdlX2dm bihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSkKPiAgIAo+ICAg aW50IGt2bXBwY19jb3JlX2luaXRfdm0oc3RydWN0IGt2bSAqa3ZtKQo+ICAgewo+IC0KPiAtI2lm ZGVmIENPTkZJR19QUEM2NAo+ICAgCUlOSVRfTElTVF9IRUFEX1JDVSgma3ZtLT5hcmNoLnNwYXBy X3RjZV90YWJsZXMpOwo+ICAgCUlOSVRfTElTVF9IRUFEKCZrdm0tPmFyY2gucnRhc190b2tlbnMp Owo+ICAgCW11dGV4X2luaXQoJmt2bS0+YXJjaC5ydGFzX3Rva2VuX2xvY2spOwo+IC0jZW5kaWYK PiAgIAo+ICAgCXJldHVybiBrdm0tPmFyY2gua3ZtX29wcy0+aW5pdF92bShrdm0pOwo+ICAgfQo+ IEBAIC05MTIsMTAgKzkwOSw4IEBAIHZvaWQga3ZtcHBjX2NvcmVfZGVzdHJveV92bShzdHJ1Y3Qg a3ZtICprdm0pCj4gICB7Cj4gICAJa3ZtLT5hcmNoLmt2bV9vcHMtPmRlc3Ryb3lfdm0oa3ZtKTsK PiAgIAo+IC0jaWZkZWYgQ09ORklHX1BQQzY0Cj4gICAJa3ZtcHBjX3J0YXNfdG9rZW5zX2ZyZWUo a3ZtKTsKPiAgIAlXQVJOX09OKCFsaXN0X2VtcHR5KCZrdm0tPmFyY2guc3BhcHJfdGNlX3RhYmxl cykpOwo+IC0jZW5kaWYKPiAgIAo+ICAgI2lmZGVmIENPTkZJR19LVk1fWElDUwo+ICAgCS8qCj4g QEAgLTEwNjksMTAgKzEwNjQsNiBAQCBzdGF0aWMgaW50IGt2bXBwY19ib29rM3NfaW5pdCh2b2lk KQo+ICAgCXIgPSBrdm1faW5pdChzaXplb2Yoc3RydWN0IGt2bV92Y3B1KSwgMCwgVEhJU19NT0RV TEUpOwo+ICAgCWlmIChyKQo+ICAgCQlyZXR1cm4gcjsKPiAtI2lmZGVmIENPTkZJR19LVk1fQk9P SzNTXzMyX0hBTkRMRVIKPiAtCXIgPSBrdm1wcGNfYm9vazNzX2luaXRfcHIoKTsKPiAtI2VuZGlm Cj4gLQo+ICAgI2lmZGVmIENPTkZJR19LVk1fWElDUwo+ICAgI2lmZGVmIENPTkZJR19LVk1fWElW RQo+ICAgCWlmICh4aWNzX29uX3hpdmUoKSkgewo+IEBAIC0xMDg5LDE3ICsxMDgwLDggQEAgc3Rh dGljIGludCBrdm1wcGNfYm9vazNzX2luaXQodm9pZCkKPiAgIAo+ICAgc3RhdGljIHZvaWQga3Zt cHBjX2Jvb2szc19leGl0KHZvaWQpCj4gICB7Cj4gLSNpZmRlZiBDT05GSUdfS1ZNX0JPT0szU18z Ml9IQU5ETEVSCj4gLQlrdm1wcGNfYm9vazNzX2V4aXRfcHIoKTsKPiAtI2VuZGlmCj4gICAJa3Zt X2V4aXQoKTsKPiAgIH0KPiAgIAo+ICAgbW9kdWxlX2luaXQoa3ZtcHBjX2Jvb2szc19pbml0KTsK PiAgIG1vZHVsZV9leGl0KGt2bXBwY19ib29rM3NfZXhpdCk7Cj4gLQo+IC0vKiBPbiAzMmJpdCB0 aGlzIGlzIG91ciBvbmUgYW5kIG9ubHkga2VybmVsIG1vZHVsZSAqLwo+IC0jaWZkZWYgQ09ORklH X0tWTV9CT09LM1NfMzJfSEFORExFUgo+IC1NT0RVTEVfQUxJQVNfTUlTQ0RFVihLVk1fTUlOT1Ip Owo+IC1NT0RVTEVfQUxJQVMoImRldm5hbWU6a3ZtIik7Cj4gLSNlbmRpZgo+IGRpZmYgLS1naXQg YS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19lbXVsYXRlLmMgYi9hcmNoL3Bvd2VycGMva3ZtL2Jv b2szc19lbXVsYXRlLmMKPiBpbmRleCBkZTEyNmQxNTMzMjguLjMwYTExN2Q2ZTcwYyAxMDA2NDQK PiAtLS0gYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19lbXVsYXRlLmMKPiArKysgYi9hcmNoL3Bv d2VycGMva3ZtL2Jvb2szc19lbXVsYXRlLmMKPiBAQCAtMzUxLDcgKzM1MSw2IEBAIGludCBrdm1w cGNfY29yZV9lbXVsYXRlX29wX3ByKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKPiAgIAkJCXZjcHUt PmFyY2gubW11LnRsYmllKHZjcHUsIGFkZHIsIGxhcmdlKTsKPiAgIAkJCWJyZWFrOwo+ICAgCQl9 Cj4gLSNpZmRlZiBDT05GSUdfUFBDX0JPT0szU182NAo+ICAgCQljYXNlIE9QXzMxX1hPUF9GQUtF X1NDMToKPiAgIAkJewo+ICAgCQkJLyogU0MgMSBwYXByIGh5cGVyY2FsbHMgKi8KPiBAQCAtMzc4 LDcgKzM3Nyw2IEBAIGludCBrdm1wcGNfY29yZV9lbXVsYXRlX29wX3ByKHN0cnVjdCBrdm1fdmNw dSAqdmNwdSwKPiAgIAkJCWVtdWxhdGVkID0gRU1VTEFURV9FWElUX1VTRVI7Cj4gICAJCQlicmVh azsKPiAgIAkJfQo+IC0jZW5kaWYKPiAgIAkJY2FzZSBPUF8zMV9YT1BfRUlPSU86Cj4gICAJCQli cmVhazsKPiAgIAkJY2FzZSBPUF8zMV9YT1BfU0xCTVRFOgo+IEBAIC03NjIsNyArNzYwLDYgQEAg aW50IGt2bXBwY19jb3JlX2VtdWxhdGVfbXRzcHJfcHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBp bnQgc3BybiwgdWxvbmcgc3ByX3ZhbCkKPiAgIAljYXNlIFNQUk5fR1FSNzoKPiAgIAkJdG9fYm9v azNzKHZjcHUpLT5ncXJbc3BybiAtIFNQUk5fR1FSMF0gPSBzcHJfdmFsOwo+ICAgCQlicmVhazsK PiAtI2lmZGVmIENPTkZJR19QUENfQk9PSzNTXzY0Cj4gICAJY2FzZSBTUFJOX0ZTQ1I6Cj4gICAJ CWt2bXBwY19zZXRfZnNjcih2Y3B1LCBzcHJfdmFsKTsKPiAgIAkJYnJlYWs7Cj4gQEAgLTgxMCw3 ICs4MDcsNiBAQCBpbnQga3ZtcHBjX2NvcmVfZW11bGF0ZV9tdHNwcl9wcihzdHJ1Y3Qga3ZtX3Zj cHUgKnZjcHUsIGludCBzcHJuLCB1bG9uZyBzcHJfdmFsKQo+ICAgCQl0bV9kaXNhYmxlKCk7Cj4g ICAKPiAgIAkJYnJlYWs7Cj4gLSNlbmRpZgo+ICAgI2VuZGlmCj4gICAJY2FzZSBTUFJOX0lDVEM6 Cj4gICAJY2FzZSBTUFJOX1RIUk0xOgo+IEBAIC04MjksNyArODI1LDYgQEAgaW50IGt2bXBwY19j b3JlX2VtdWxhdGVfbXRzcHJfcHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgc3BybiwgdWxv bmcgc3ByX3ZhbCkKPiAgIAljYXNlIFNQUk5fV1BBUl9HRUtLTzoKPiAgIAljYXNlIFNQUk5fTVNT U1IwOgo+ICAgCWNhc2UgU1BSTl9EQUJSOgo+IC0jaWZkZWYgQ09ORklHX1BQQ19CT09LM1NfNjQK PiAgIAljYXNlIFNQUk5fTU1DUlM6Cj4gICAJY2FzZSBTUFJOX01NQ1JBOgo+ICAgCWNhc2UgU1BS Tl9NTUNSMDoKPiBAQCAtODM5LDcgKzgzNCw2IEBAIGludCBrdm1wcGNfY29yZV9lbXVsYXRlX210 c3ByX3ByKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHNwcm4sIHVsb25nIHNwcl92YWwpCj4g ICAJY2FzZSBTUFJOX1VBTU9SOgo+ICAgCWNhc2UgU1BSTl9JQU1SOgo+ICAgCWNhc2UgU1BSTl9B TVI6Cj4gLSNlbmRpZgo+ICAgCQlicmVhazsKPiAgIHVucHJpdmlsZWdlZDoKPiAgIAlkZWZhdWx0 Ogo+IEBAIC05NDMsNyArOTM3LDYgQEAgaW50IGt2bXBwY19jb3JlX2VtdWxhdGVfbWZzcHJfcHIo c3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgc3BybiwgdWxvbmcgKnNwcl92YWwKPiAgIAljYXNl IFNQUk5fR1FSNzoKPiAgIAkJKnNwcl92YWwgPSB0b19ib29rM3ModmNwdSktPmdxcltzcHJuIC0g U1BSTl9HUVIwXTsKPiAgIAkJYnJlYWs7Cj4gLSNpZmRlZiBDT05GSUdfUFBDX0JPT0szU182NAo+ ICAgCWNhc2UgU1BSTl9GU0NSOgo+ICAgCQkqc3ByX3ZhbCA9IHZjcHUtPmFyY2guZnNjcjsKPiAg IAkJYnJlYWs7Cj4gQEAgLTk3OCw3ICs5NzEsNiBAQCBpbnQga3ZtcHBjX2NvcmVfZW11bGF0ZV9t ZnNwcl9wcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBzcHJuLCB1bG9uZyAqc3ByX3ZhbAo+ ICAgCQkJKnNwcl92YWwgPSBtZnNwcihTUFJOX1RGSUFSKTsKPiAgIAkJdG1fZGlzYWJsZSgpOwo+ ICAgCQlicmVhazsKPiAtI2VuZGlmCj4gICAjZW5kaWYKPiAgIAljYXNlIFNQUk5fVEhSTTE6Cj4g ICAJY2FzZSBTUFJOX1RIUk0yOgo+IEBAIC05OTUsNyArOTg3LDYgQEAgaW50IGt2bXBwY19jb3Jl X2VtdWxhdGVfbWZzcHJfcHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgc3BybiwgdWxvbmcg KnNwcl92YWwKPiAgIAljYXNlIFNQUk5fV1BBUl9HRUtLTzoKPiAgIAljYXNlIFNQUk5fTVNTU1Iw Ogo+ICAgCWNhc2UgU1BSTl9EQUJSOgo+IC0jaWZkZWYgQ09ORklHX1BQQ19CT09LM1NfNjQKPiAg IAljYXNlIFNQUk5fTU1DUlM6Cj4gICAJY2FzZSBTUFJOX01NQ1JBOgo+ICAgCWNhc2UgU1BSTl9N TUNSMDoKPiBAQCAtMTAwNiw3ICs5OTcsNiBAQCBpbnQga3ZtcHBjX2NvcmVfZW11bGF0ZV9tZnNw cl9wcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBzcHJuLCB1bG9uZyAqc3ByX3ZhbAo+ICAg CWNhc2UgU1BSTl9VQU1PUjoKPiAgIAljYXNlIFNQUk5fSUFNUjoKPiAgIAljYXNlIFNQUk5fQU1S Ogo+IC0jZW5kaWYKPiAgIAkJKnNwcl92YWwgPSAwOwo+ICAgCQlicmVhazsKPiAgIAlkZWZhdWx0 Ogo+IEBAIC0xMDM4LDM1ICsxMDI4LDggQEAgdTMyIGt2bXBwY19hbGlnbm1lbnRfZHNpc3Ioc3Ry dWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgaW5zdCkKPiAgIAo+ICAgdWxvbmcga3Zt cHBjX2FsaWdubWVudF9kYXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgaW5z dCkKPiAgIHsKPiAtI2lmZGVmIENPTkZJR19QUENfQk9PSzNTXzY0Cj4gICAJLyoKPiAgIAkgKiBM aW51eCdzIGZpeF9hbGlnbm1lbnQoKSBhc3N1bWVzIHRoYXQgREFSIGlzIHZhbGlkLCBzbyBjYW4g d2UKPiAgIAkgKi8KPiAgIAlyZXR1cm4gdmNwdS0+YXJjaC5mYXVsdF9kYXI7Cj4gLSNlbHNlCj4g LQl1bG9uZyBkYXIgPSAwOwo+IC0JdWxvbmcgcmEgPSBnZXRfcmEoaW5zdCk7Cj4gLQl1bG9uZyBy YiA9IGdldF9yYihpbnN0KTsKPiAtCj4gLQlzd2l0Y2ggKGdldF9vcChpbnN0KSkgewo+IC0JY2Fz ZSBPUF9MRlM6Cj4gLQljYXNlIE9QX0xGRDoKPiAtCWNhc2UgT1BfU1RGRDoKPiAtCWNhc2UgT1Bf U1RGUzoKPiAtCQlpZiAocmEpCj4gLQkJCWRhciA9IGt2bXBwY19nZXRfZ3ByKHZjcHUsIHJhKTsK PiAtCQlkYXIgKz0gKHMzMikoKHMxNilpbnN0KTsKPiAtCQlicmVhazsKPiAtCWNhc2UgMzE6Cj4g LQkJaWYgKHJhKQo+IC0JCQlkYXIgPSBrdm1wcGNfZ2V0X2dwcih2Y3B1LCByYSk7Cj4gLQkJZGFy ICs9IGt2bXBwY19nZXRfZ3ByKHZjcHUsIHJiKTsKPiAtCQlicmVhazsKPiAtCWRlZmF1bHQ6Cj4g LQkJcHJpbnRrKEtFUk5fSU5GTyAiS1ZNOiBVbmFsaWduZWQgaW5zdHJ1Y3Rpb24gMHgleFxuIiwg aW5zdCk7Cj4gLQkJYnJlYWs7Cj4gLQl9Cj4gLQo+IC0JcmV0dXJuIGRhcjsKPiAtI2VuZGlmCj4g ICB9Cj4gZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2ludGVycnVwdHMuUyBi L2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2ludGVycnVwdHMuUwo+IGluZGV4IGY0YmVjMmZjNTFh YS4uYzViODhkNTQ1MWI3IDEwMDY0NAo+IC0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2lu dGVycnVwdHMuUwo+ICsrKyBiL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2ludGVycnVwdHMuUwo+ IEBAIC0xNCw3ICsxNCw2IEBACj4gICAjaW5jbHVkZSA8YXNtL2V4Y2VwdGlvbi02NHMuaD4KPiAg ICNpbmNsdWRlIDxhc20vYXNtLWNvbXBhdC5oPgo+ICAgCj4gLSNpZiBkZWZpbmVkKENPTkZJR19Q UENfQk9PSzNTXzY0KQo+ICAgI2lmZGVmIENPTkZJR19QUEM2NF9FTEZfQUJJX1YyCj4gICAjZGVm aW5lIEZVTkMobmFtZSkgCQluYW1lCj4gICAjZWxzZQo+IEBAIC0yMiwxMiArMjEsNiBAQAo+ICAg I2VuZGlmCj4gICAjZGVmaW5lIEdFVF9TSEFET1dfVkNQVShyZWcpICAgIGFkZGkJcmVnLCByMTMs IFBBQ0FfU1ZDUFUKPiAgIAo+IC0jZWxpZiBkZWZpbmVkKENPTkZJR19QUENfQk9PSzNTXzMyKQo+ IC0jZGVmaW5lIEZVTkMobmFtZSkJCW5hbWUKPiAtI2RlZmluZSBHRVRfU0hBRE9XX1ZDUFUocmVn KQlsd3ogICAgIHJlZywgKFRIUkVBRCArIFRIUkVBRF9LVk1fU1ZDUFUpKHIyKQo+IC0KPiAtI2Vu ZGlmIC8qIENPTkZJR19QUENfQk9PSzNTXzY0ICovCj4gLQo+ICAgI2RlZmluZSBWQ1BVX0xPQURf TlZHUFJTKHZjcHUpIFwKPiAgIAlQUENfTEwJcjE0LCBWQ1BVX0dQUihSMTQpKHZjcHUpOyBcCj4g ICAJUFBDX0xMCXIxNSwgVkNQVV9HUFIoUjE1KSh2Y3B1KTsgXAo+IEBAIC04OSw3ICs4Miw2IEBA IGt2bV9zdGFydF9saWdodHdlaWdodDoKPiAgIAlub3AKPiAgIAlSRVNUX0dQUigzLCByMSkKPiAg IAo+IC0jaWZkZWYgQ09ORklHX1BQQ19CT09LM1NfNjQKPiAgIAkvKiBHZXQgdGhlIGRjYnozMiBm bGFnICovCj4gICAJUFBDX0xMCXIwLCBWQ1BVX0hGTEFHUyhyMykKPiAgIAlybGRpY2wJcjAsIHIw LCAwLCA2MwkJLyogcjMgJj0gMSAqLwo+IEBAIC0xMTgsNyArMTEwLDYgQEAgc3ByZzNfbGl0dGxl X2VuZGlhbjoKPiAgIAo+ICAgYWZ0ZXJfc3ByZzNfbG9hZDoKPiAgIAltdHNwcglTUFJOX1NQUkcz LCByNAo+IC0jZW5kaWYgLyogQ09ORklHX1BQQ19CT09LM1NfNjQgKi8KPiAgIAo+ICAgCVBQQ19M TAlyNCwgVkNQVV9TSEFET1dfTVNSKHIzKQkvKiBnZXQgc2hhZG93X21zciAqLwo+ICAgCj4gQEAg LTE1NywxNCArMTQ4LDEyIEBAIGFmdGVyX3NwcmczX2xvYWQ6Cj4gICAJYmwJRlVOQyhrdm1wcGNf Y29weV9mcm9tX3N2Y3B1KQo+ICAgCW5vcAo+ICAgCj4gLSNpZmRlZiBDT05GSUdfUFBDX0JPT0sz U182NAo+ICAgCS8qCj4gICAJICogUmVsb2FkIGtlcm5lbCBTUFJHMyB2YWx1ZS4KPiAgIAkgKiBO byBuZWVkIHRvIHNhdmUgZ3Vlc3QgdmFsdWUgYXMgdXNlcm1vZGUgY2FuJ3QgbW9kaWZ5IFNQUkcz Lgo+ICAgCSAqLwo+ICAgCWxkCXIzLCBQQUNBX1NQUkdfVkRTTyhyMTMpCj4gICAJbXRzcHIJU1BS Tl9TUFJHX1ZEU09fV1JJVEUsIHIzCj4gLSNlbmRpZiAvKiBDT05GSUdfUFBDX0JPT0szU182NCAq Lwo+ICAgCj4gICAJLyogUjcgPSB2Y3B1ICovCj4gICAJUFBDX0xMCXI3LCBHUFIzKHIxKQo+IGRp ZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19tbXVfaHB0ZS5jIGIvYXJjaC9wb3dl cnBjL2t2bS9ib29rM3NfbW11X2hwdGUuYwo+IGluZGV4IGQ5MDRlMTNlMDY5Yi4uOTE2MTRjYTlm OTY5IDEwMDY0NAo+IC0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX21tdV9ocHRlLmMKPiAr KysgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19tbXVfaHB0ZS5jCj4gQEAgLTQ1LDEzICs0NSwx MSBAQCBzdGF0aWMgaW5saW5lIHU2NCBrdm1wcGNfbW11X2hhc2hfdnB0ZV9sb25nKHU2NCB2cGFn ZSkKPiAgIAkJICAgICAgIEhQVEVHX0hBU0hfQklUU19WUFRFX0xPTkcpOwo+ICAgfQo+ICAgCj4g LSNpZmRlZiBDT05GSUdfUFBDX0JPT0szU182NAo+ICAgc3RhdGljIGlubGluZSB1NjQga3ZtcHBj X21tdV9oYXNoX3ZwdGVfNjRrKHU2NCB2cGFnZSkKPiAgIHsKPiAgIAlyZXR1cm4gaGFzaF82NCgo dnBhZ2UgJiAweGZmZmZmZmZmMFVMTCkgPj4gNCwKPiAgIAkJICAgICAgIEhQVEVHX0hBU0hfQklU U19WUFRFXzY0Syk7Cj4gICB9Cj4gLSNlbmRpZgo+ICAgCj4gICB2b2lkIGt2bXBwY19tbXVfaHB0 ZV9jYWNoZV9tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgaHB0ZV9jYWNoZSAqcHRl KQo+ICAgewo+IEBAIC04MCwxMiArNzgsMTAgQEAgdm9pZCBrdm1wcGNfbW11X2hwdGVfY2FjaGVf bWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGhwdGVfY2FjaGUgKnB0ZSkKPiAgIAlo bGlzdF9hZGRfaGVhZF9yY3UoJnB0ZS0+bGlzdF92cHRlX2xvbmcsCj4gICAJCQkgICAmdmNwdTNz LT5ocHRlX2hhc2hfdnB0ZV9sb25nW2luZGV4XSk7Cj4gICAKPiAtI2lmZGVmIENPTkZJR19QUENf Qk9PSzNTXzY0Cj4gICAJLyogQWRkIHRvIHZQVEVfNjRrIGxpc3QgKi8KPiAgIAlpbmRleCA9IGt2 bXBwY19tbXVfaGFzaF92cHRlXzY0ayhwdGUtPnB0ZS52cGFnZSk7Cj4gICAJaGxpc3RfYWRkX2hl YWRfcmN1KCZwdGUtPmxpc3RfdnB0ZV82NGssCj4gICAJCQkgICAmdmNwdTNzLT5ocHRlX2hhc2hf dnB0ZV82NGtbaW5kZXhdKTsKPiAtI2VuZGlmCj4gICAKPiAgIAl2Y3B1M3MtPmhwdGVfY2FjaGVf Y291bnQrKzsKPiAgIAo+IEBAIC0xMTMsOSArMTA5LDcgQEAgc3RhdGljIHZvaWQgaW52YWxpZGF0 ZV9wdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgaHB0ZV9jYWNoZSAqcHRlKQo+ICAg CWhsaXN0X2RlbF9pbml0X3JjdSgmcHRlLT5saXN0X3B0ZV9sb25nKTsKPiAgIAlobGlzdF9kZWxf aW5pdF9yY3UoJnB0ZS0+bGlzdF92cHRlKTsKPiAgIAlobGlzdF9kZWxfaW5pdF9yY3UoJnB0ZS0+ bGlzdF92cHRlX2xvbmcpOwo+IC0jaWZkZWYgQ09ORklHX1BQQ19CT09LM1NfNjQKPiAgIAlobGlz dF9kZWxfaW5pdF9yY3UoJnB0ZS0+bGlzdF92cHRlXzY0ayk7Cj4gLSNlbmRpZgo+ICAgCXZjcHUz cy0+aHB0ZV9jYWNoZV9jb3VudC0tOwo+ICAgCj4gICAJc3Bpbl91bmxvY2soJnZjcHUzcy0+bW11 X2xvY2spOwo+IEBAIC0yMjIsNyArMjE2LDYgQEAgc3RhdGljIHZvaWQga3ZtcHBjX21tdV9wdGVf dmZsdXNoX3Nob3J0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGd1ZXN0X3ZwKQo+ICAgCXJj dV9yZWFkX3VubG9jaygpOwo+ICAgfQo+ICAgCj4gLSNpZmRlZiBDT05GSUdfUFBDX0JPT0szU182 NAo+ICAgLyogRmx1c2ggd2l0aCBtYXNrIDB4ZmZmZmZmZmYwICovCj4gICBzdGF0aWMgdm9pZCBr dm1wcGNfbW11X3B0ZV92Zmx1c2hfNjRrKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGd1ZXN0 X3ZwKQo+ICAgewo+IEBAIC0yNDMsNyArMjM2LDYgQEAgc3RhdGljIHZvaWQga3ZtcHBjX21tdV9w dGVfdmZsdXNoXzY0ayhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBndWVzdF92cCkKPiAgIAo+ ICAgCXJjdV9yZWFkX3VubG9jaygpOwo+ICAgfQo+IC0jZW5kaWYKPiAgIAo+ICAgLyogRmx1c2gg d2l0aCBtYXNrIDB4ZmZmZmZmMDAwICovCj4gICBzdGF0aWMgdm9pZCBrdm1wcGNfbW11X3B0ZV92 Zmx1c2hfbG9uZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBndWVzdF92cCkKPiBAQCAtMjc1 LDExICsyNjcsOSBAQCB2b2lkIGt2bXBwY19tbXVfcHRlX3ZmbHVzaChzdHJ1Y3Qga3ZtX3ZjcHUg KnZjcHUsIHU2NCBndWVzdF92cCwgdTY0IHZwX21hc2spCj4gICAJY2FzZSAweGZmZmZmZmZmZlVM TDoKPiAgIAkJa3ZtcHBjX21tdV9wdGVfdmZsdXNoX3Nob3J0KHZjcHUsIGd1ZXN0X3ZwKTsKPiAg IAkJYnJlYWs7Cj4gLSNpZmRlZiBDT05GSUdfUFBDX0JPT0szU182NAo+ICAgCWNhc2UgMHhmZmZm ZmZmZjBVTEw6Cj4gICAJCWt2bXBwY19tbXVfcHRlX3ZmbHVzaF82NGsodmNwdSwgZ3Vlc3RfdnAp Owo+ICAgCQlicmVhazsKPiAtI2VuZGlmCj4gICAJY2FzZSAweGZmZmZmZjAwMFVMTDoKPiAgIAkJ a3ZtcHBjX21tdV9wdGVfdmZsdXNoX2xvbmcodmNwdSwgZ3Vlc3RfdnApOwo+ICAgCQlicmVhazsK PiBAQCAtMzU1LDEwICszNDUsOCBAQCBpbnQga3ZtcHBjX21tdV9ocHRlX2luaXQoc3RydWN0IGt2 bV92Y3B1ICp2Y3B1KQo+ICAgCQkJCSAgQVJSQVlfU0laRSh2Y3B1M3MtPmhwdGVfaGFzaF92cHRl KSk7Cj4gICAJa3ZtcHBjX21tdV9ocHRlX2luaXRfaGFzaCh2Y3B1M3MtPmhwdGVfaGFzaF92cHRl X2xvbmcsCj4gICAJCQkJICBBUlJBWV9TSVpFKHZjcHUzcy0+aHB0ZV9oYXNoX3ZwdGVfbG9uZykp Owo+IC0jaWZkZWYgQ09ORklHX1BQQ19CT09LM1NfNjQKPiAgIAlrdm1wcGNfbW11X2hwdGVfaW5p dF9oYXNoKHZjcHUzcy0+aHB0ZV9oYXNoX3ZwdGVfNjRrLAo+ICAgCQkJCSAgQVJSQVlfU0laRSh2 Y3B1M3MtPmhwdGVfaGFzaF92cHRlXzY0aykpOwo+IC0jZW5kaWYKPiAgIAo+ICAgCXNwaW5fbG9j a19pbml0KCZ2Y3B1M3MtPm1tdV9sb2NrKTsKPiAgIAo+IGRpZmYgLS1naXQgYS9hcmNoL3Bvd2Vy cGMva3ZtL2Jvb2szc19wci5jIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfcHIuYwo+IGluZGV4 IDgzYmNkYzgwY2U1MS4uMzY3ODVhMDJiOWRhIDEwMDY0NAo+IC0tLSBhL2FyY2gvcG93ZXJwYy9r dm0vYm9vazNzX3ByLmMKPiArKysgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19wci5jCj4gQEAg LTUyLDE3ICs1Miw3IEBACj4gICAKPiAgIHN0YXRpYyBpbnQga3ZtcHBjX2hhbmRsZV9leHQoc3Ry dWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgZXhpdF9uciwKPiAgIAkJCSAgICAgdWxv bmcgbXNyKTsKPiAtI2lmZGVmIENPTkZJR19QUENfQk9PSzNTXzY0Cj4gICBzdGF0aWMgaW50IGt2 bXBwY19oYW5kbGVfZmFjKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdWxvbmcgZmFjKTsKPiAtI2Vu ZGlmCj4gLQo+IC0vKiBTb21lIGNvbXBhdGliaWxpdHkgZGVmaW5lcyAqLwo+IC0jaWZkZWYgQ09O RklHX1BQQ19CT09LM1NfMzIKPiAtI2RlZmluZSBNU1JfVVNFUjMyIE1TUl9VU0VSCj4gLSNkZWZp bmUgTVNSX1VTRVI2NCBNU1JfVVNFUgo+IC0jZGVmaW5lIEhXX1BBR0VfU0laRSBQQUdFX1NJWkUK PiAtI2RlZmluZSBIUFRFX1JfTSAgIF9QQUdFX0NPSEVSRU5UCj4gLSNlbmRpZgo+ICAgCj4gICBz dGF0aWMgYm9vbCBrdm1wcGNfaXNfc3BsaXRfcmVhbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCj4g ICB7Cj4gQEAgLTExNSwxMyArMTA1LDExIEBAIHN0YXRpYyB2b2lkIGt2bXBwY19pbmplY3RfaW50 ZXJydXB0X3ByKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHZlYywgdTY0IHNycjFfCj4gICAJ bmV3X21zciA9IHZjcHUtPmFyY2guaW50cl9tc3I7Cj4gICAJbmV3X3BjID0gdG9fYm9vazNzKHZj cHUpLT5oaW9yICsgdmVjOwo+ICAgCj4gLSNpZmRlZiBDT05GSUdfUFBDX0JPT0szU182NAo+ICAg CS8qIElmIHRyYW5zYWN0aW9uYWwsIGNoYW5nZSB0byBzdXNwZW5kIG1vZGUgb24gSVJRIGRlbGl2 ZXJ5ICovCj4gICAJaWYgKE1TUl9UTV9UUkFOU0FDVElPTkFMKG1zcikpCj4gICAJCW5ld19tc3Ig fD0gTVNSX1RTX1M7Cj4gICAJZWxzZQo+ICAgCQluZXdfbXNyIHw9IG1zciAmIE1TUl9UU19NQVNL Owo+IC0jZW5kaWYKPiAgIAo+ICAgCWt2bXBwY19zZXRfc3JyMCh2Y3B1LCBwYyk7Cj4gICAJa3Zt cHBjX3NldF9zcnIxKHZjcHUsIChtc3IgJiBTUlIxX01TUl9CSVRTKSB8IHNycjFfZmxhZ3MpOwo+ IEBAIC0xMzEsNyArMTE5LDYgQEAgc3RhdGljIHZvaWQga3ZtcHBjX2luamVjdF9pbnRlcnJ1cHRf cHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgdmVjLCB1NjQgc3JyMV8KPiAgIAo+ICAgc3Rh dGljIHZvaWQga3ZtcHBjX2NvcmVfdmNwdV9sb2FkX3ByKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwg aW50IGNwdSkKPiAgIHsKPiAtI2lmZGVmIENPTkZJR19QUENfQk9PSzNTXzY0Cj4gICAJc3RydWN0 IGt2bXBwY19ib29rM3Nfc2hhZG93X3ZjcHUgKnN2Y3B1ID0gc3ZjcHVfZ2V0KHZjcHUpOwo+ICAg CW1lbWNweShzdmNwdS0+c2xiLCB0b19ib29rM3ModmNwdSktPnNsYl9zaGFkb3csIHNpemVvZihz dmNwdS0+c2xiKSk7Cj4gICAJc3ZjcHUtPnNsYl9tYXggPSB0b19ib29rM3ModmNwdSktPnNsYl9z aGFkb3dfbWF4Owo+IEBAIC0xNDUsMTIgKzEzMiw4IEBAIHN0YXRpYyB2b2lkIGt2bXBwY19jb3Jl X3ZjcHVfbG9hZF9wcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpCj4gICAJCWlmIChj cHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9BUkNIXzMwMCkgJiYgKGN1cnJlbnQtPnRocmVhZC5mc2Ny ICYgRlNDUl9TQ1YpKQo+ICAgCQkJbXRzcHIoU1BSTl9GU0NSLCBtZnNwcihTUFJOX0ZTQ1IpICYg fkZTQ1JfU0NWKTsKPiAgIAl9Cj4gLSNlbmRpZgo+ICAgCj4gICAJdmNwdS0+Y3B1ID0gc21wX3By b2Nlc3Nvcl9pZCgpOwo+IC0jaWZkZWYgQ09ORklHX1BQQ19CT09LM1NfMzIKPiAtCWN1cnJlbnQt PnRocmVhZC5rdm1fc2hhZG93X3ZjcHUgPSB2Y3B1LT5hcmNoLnNoYWRvd192Y3B1Owo+IC0jZW5k aWYKPiAgIAo+ICAgCWlmIChrdm1wcGNfaXNfc3BsaXRfcmVhbCh2Y3B1KSkKPiAgIAkJa3ZtcHBj X2ZpeHVwX3NwbGl0X3JlYWwodmNwdSk7Cj4gQEAgLTE2MCw3ICsxNDMsNiBAQCBzdGF0aWMgdm9p ZCBrdm1wcGNfY29yZV92Y3B1X2xvYWRfcHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1 KQo+ICAgCj4gICBzdGF0aWMgdm9pZCBrdm1wcGNfY29yZV92Y3B1X3B1dF9wcihzdHJ1Y3Qga3Zt X3ZjcHUgKnZjcHUpCj4gICB7Cj4gLSNpZmRlZiBDT05GSUdfUFBDX0JPT0szU182NAo+ICAgCXN0 cnVjdCBrdm1wcGNfYm9vazNzX3NoYWRvd192Y3B1ICpzdmNwdSA9IHN2Y3B1X2dldCh2Y3B1KTsK PiAgIAlpZiAoc3ZjcHUtPmluX3VzZSkgewo+ICAgCQlrdm1wcGNfY29weV9mcm9tX3N2Y3B1KHZj cHUpOwo+IEBAIC0xNzYsNyArMTU4LDYgQEAgc3RhdGljIHZvaWQga3ZtcHBjX2NvcmVfdmNwdV9w dXRfcHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQo+ICAgCQlpZiAoY3B1X2hhc19mZWF0dXJlKENQ VV9GVFJfQVJDSF8zMDApICYmIChjdXJyZW50LT50aHJlYWQuZnNjciAmIEZTQ1JfU0NWKSkKPiAg IAkJCW10c3ByKFNQUk5fRlNDUiwgbWZzcHIoU1BSTl9GU0NSKSB8IEZTQ1JfU0NWKTsKPiAgIAl9 Cj4gLSNlbmRpZgo+ICAgCj4gICAJaWYgKGt2bXBwY19pc19zcGxpdF9yZWFsKHZjcHUpKQo+ICAg CQlrdm1wcGNfdW5maXh1cF9zcGxpdF9yZWFsKHZjcHUpOwo+IEBAIC0yMTIsOSArMTkzLDcgQEAg dm9pZCBrdm1wcGNfY29weV90b19zdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCj4gICAJc3Zj cHUtPmN0ciA9IHZjcHUtPmFyY2gucmVncy5jdHI7Cj4gICAJc3ZjcHUtPmxyICA9IHZjcHUtPmFy Y2gucmVncy5saW5rOwo+ICAgCXN2Y3B1LT5wYyAgPSB2Y3B1LT5hcmNoLnJlZ3MubmlwOwo+IC0j aWZkZWYgQ09ORklHX1BQQ19CT09LM1NfNjQKPiAgIAlzdmNwdS0+c2hhZG93X2ZzY3IgPSB2Y3B1 LT5hcmNoLnNoYWRvd19mc2NyOwo+IC0jZW5kaWYKPiAgIAkvKgo+ICAgCSAqIE5vdyBhbHNvIHNh dmUgdGhlIGN1cnJlbnQgdGltZSBiYXNlIHZhbHVlLiBXZSB1c2UgdGhpcwo+ICAgCSAqIHRvIGZp bmQgdGhlIGd1ZXN0IHB1cnIgYW5kIHNwdXJyIHZhbHVlLgo+IEBAIC0yNDUsOSArMjI0LDcgQEAg c3RhdGljIHZvaWQga3ZtcHBjX3JlY2FsY19zaGFkb3dfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNw dSkKPiAgIAkvKiBFeHRlcm5hbCBwcm92aWRlcnMgdGhlIGd1ZXN0IHJlc2VydmVkICovCj4gICAJ c21zciB8PSAoZ3Vlc3RfbXNyICYgdmNwdS0+YXJjaC5ndWVzdF9vd25lZF9leHQpOwo+ICAgCS8q IDY0LWJpdCBQcm9jZXNzIE1TUiB2YWx1ZXMgKi8KPiAtI2lmZGVmIENPTkZJR19QUENfQk9PSzNT XzY0Cj4gICAJc21zciB8PSBNU1JfSFY7Cj4gLSNlbmRpZgo+ICAgI2lmZGVmIENPTkZJR19QUENf VFJBTlNBQ1RJT05BTF9NRU0KPiAgIAkvKgo+ICAgCSAqIGluIGd1ZXN0IHByaXZpbGVnZWQgc3Rh dGUsIHdlIHdhbnQgdG8gZmFpbCBhbGwgVE0gdHJhbnNhY3Rpb25zLgo+IEBAIC0yOTgsOSArMjc1 LDcgQEAgdm9pZCBrdm1wcGNfY29weV9mcm9tX3N2Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkK PiAgIAl2Y3B1LT5hcmNoLmZhdWx0X2RhciAgID0gc3ZjcHUtPmZhdWx0X2RhcjsKPiAgIAl2Y3B1 LT5hcmNoLmZhdWx0X2RzaXNyID0gc3ZjcHUtPmZhdWx0X2RzaXNyOwo+ICAgCXZjcHUtPmFyY2gu bGFzdF9pbnN0ICAgPSBzdmNwdS0+bGFzdF9pbnN0Owo+IC0jaWZkZWYgQ09ORklHX1BQQ19CT09L M1NfNjQKPiAgIAl2Y3B1LT5hcmNoLnNoYWRvd19mc2NyID0gc3ZjcHUtPnNoYWRvd19mc2NyOwo+ IC0jZW5kaWYKPiAgIAkvKgo+ICAgCSAqIFVwZGF0ZSBwdXJyIGFuZCBzcHVyciB1c2luZyB0aW1l IGJhc2Ugb24gZXhpdC4KPiAgIAkgKi8KPiBAQCAtNTUzLDcgKzUyOCw2IEBAIHN0YXRpYyB2b2lk IGt2bXBwY19zZXRfcHZyX3ByKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIHB2cikKPiAgIAo+ ICAgCXZjcHUtPmFyY2guaGZsYWdzICY9IH5CT09LM1NfSEZMQUdfU0xCOwo+ICAgCXZjcHUtPmFy Y2gucHZyID0gcHZyOwo+IC0jaWZkZWYgQ09ORklHX1BQQ19CT09LM1NfNjQKPiAgIAlpZiAoKHB2 ciA+PSAweDMzMDAwMCkgJiYgKHB2ciA8IDB4NzAzMzAwMDApKSB7Cj4gICAJCWt2bXBwY19tbXVf Ym9vazNzXzY0X2luaXQodmNwdSk7Cj4gICAJCWlmICghdG9fYm9vazNzKHZjcHUpLT5oaW9yX2V4 cGxpY2l0KQo+IEBAIC01NjEsNyArNTM1LDYgQEAgc3RhdGljIHZvaWQga3ZtcHBjX3NldF9wdnJf cHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgcHZyKQo+ICAgCQl0b19ib29rM3ModmNwdSkt Pm1zcl9tYXNrID0gMHhmZmZmZmZmZmZmZmZmZmZmVUxMOwo+ICAgCQl2Y3B1LT5hcmNoLmNwdV90 eXBlID0gS1ZNX0NQVV8zU182NDsKPiAgIAl9IGVsc2UKPiAtI2VuZGlmCj4gICAJewo+ICAgCQlr dm1wcGNfbW11X2Jvb2szc18zMl9pbml0KHZjcHUpOwo+ICAgCQlpZiAoIXRvX2Jvb2szcyh2Y3B1 KS0+aGlvcl9leHBsaWNpdCkKPiBAQCAtNjA1LDExICs1NzgsNiBAQCBzdGF0aWMgdm9pZCBrdm1w cGNfc2V0X3B2cl9wcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBwdnIpCj4gICAJCWJyZWFr Owo+ICAgCX0KPiAgIAo+IC0jaWZkZWYgQ09ORklHX1BQQ19CT09LM1NfMzIKPiAtCS8qIDMyIGJp dCBCb29rM1MgYWx3YXlzIGhhcyAzMiBieXRlIGRjYnogKi8KPiAtCXZjcHUtPmFyY2guaGZsYWdz IHw9IEJPT0szU19IRkxBR19EQ0JaMzI7Cj4gLSNlbmRpZgo+IC0KPiAgIAkvKiBPbiBzb21lIENQ VXMgd2UgY2FuIGV4ZWN1dGUgcGFpcmVkIHNpbmdsZSBvcGVyYXRpb25zIG5hdGl2ZWx5ICovCj4g ICAJYXNtICggIm1mcHZyICUwIiA6ICI9ciIoaG9zdF9wdnIpKTsKPiAgIAlzd2l0Y2ggKGhvc3Rf cHZyKSB7Cj4gQEAgLTgzOSw3ICs4MDcsNiBAQCB2b2lkIGt2bXBwY19naXZldXBfZXh0KHN0cnVj dCBrdm1fdmNwdSAqdmNwdSwgdWxvbmcgbXNyKQo+ICAgLyogR2l2ZSB1cCBmYWNpbGl0eSAoVEFS IC8gRUJCIC8gRFNDUikgKi8KPiAgIHZvaWQga3ZtcHBjX2dpdmV1cF9mYWMoc3RydWN0IGt2bV92 Y3B1ICp2Y3B1LCB1bG9uZyBmYWMpCj4gICB7Cj4gLSNpZmRlZiBDT05GSUdfUFBDX0JPT0szU182 NAo+ICAgCWlmICghKHZjcHUtPmFyY2guc2hhZG93X2ZzY3IgJiAoMVVMTCA8PCBmYWMpKSkgewo+ ICAgCQkvKiBGYWNpbGl0eSBub3QgYXZhaWxhYmxlIHRvIHRoZSBndWVzdCwgaWdub3JlIGdpdmV1 cCByZXF1ZXN0Ki8KPiAgIAkJcmV0dXJuOwo+IEBAIC04NTIsNyArODE5LDYgQEAgdm9pZCBrdm1w cGNfZ2l2ZXVwX2ZhYyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVsb25nIGZhYykKPiAgIAkJdmNw dS0+YXJjaC5zaGFkb3dfZnNjciAmPSB+RlNDUl9UQVI7Cj4gICAJCWJyZWFrOwo+ICAgCX0KPiAt I2VuZGlmCj4gICB9Cj4gICAKPiAgIC8qIEhhbmRsZSBleHRlcm5hbCBwcm92aWRlcnMgKEZQVSwg QWx0aXZlYywgVlNYKSAqLwo+IEBAIC05NTQsOCArOTIwLDYgQEAgc3RhdGljIHZvaWQga3ZtcHBj X2hhbmRsZV9sb3N0X2V4dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCj4gICAJY3VycmVudC0+dGhy ZWFkLnJlZ3MtPm1zciB8PSBsb3N0X2V4dDsKPiAgIH0KPiAgIAo+IC0jaWZkZWYgQ09ORklHX1BQ Q19CT09LM1NfNjQKPiAtCj4gICB2b2lkIGt2bXBwY190cmlnZ2VyX2ZhY19pbnRlcnJ1cHQoc3Ry dWN0IGt2bV92Y3B1ICp2Y3B1LCB1bG9uZyBmYWMpCj4gICB7Cj4gICAJLyogSW5qZWN0IHRoZSBJ bnRlcnJ1cHQgQ2F1c2UgZmllbGQgYW5kIHRyaWdnZXIgYSBndWVzdCBpbnRlcnJ1cHQgKi8KPiBA QCAtMTA1MCw3ICsxMDE0LDYgQEAgdm9pZCBrdm1wcGNfc2V0X2ZzY3Ioc3RydWN0IGt2bV92Y3B1 ICp2Y3B1LCB1NjQgZnNjcikKPiAgIAo+ICAgCXZjcHUtPmFyY2guZnNjciA9IGZzY3I7Cj4gICB9 Cj4gLSNlbmRpZgo+ICAgCj4gICBzdGF0aWMgdm9pZCBrdm1wcGNfc2V0dXBfZGVidWcoc3RydWN0 IGt2bV92Y3B1ICp2Y3B1KQo+ICAgewo+IEBAIC0xMTU3LDI0ICsxMTIwLDYgQEAgaW50IGt2bXBw Y19oYW5kbGVfZXhpdF9wcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBleGl0 X25yKQo+ICAgCQlpZiAoa3ZtcHBjX2lzX3NwbGl0X3JlYWwodmNwdSkpCj4gICAJCQlrdm1wcGNf Zml4dXBfc3BsaXRfcmVhbCh2Y3B1KTsKPiAgIAo+IC0jaWZkZWYgQ09ORklHX1BQQ19CT09LM1Nf MzIKPiAtCQkvKiBXZSBzZXQgc2VnbWVudHMgYXMgdW51c2VkIHNlZ21lbnRzIHdoZW4gaW52YWxp ZGF0aW5nIHRoZW0uIFNvCj4gLQkJICogdHJlYXQgdGhlIHJlc3BlY3RpdmUgZmF1bHQgYXMgc2Vn bWVudCBmYXVsdC4gKi8KPiAtCQl7Cj4gLQkJCXN0cnVjdCBrdm1wcGNfYm9vazNzX3NoYWRvd192 Y3B1ICpzdmNwdTsKPiAtCQkJdTMyIHNyOwo+IC0KPiAtCQkJc3ZjcHUgPSBzdmNwdV9nZXQodmNw dSk7Cj4gLQkJCXNyID0gc3ZjcHUtPnNyW2t2bXBwY19nZXRfcGModmNwdSkgPj4gU0lEX1NISUZU XTsKPiAtCQkJc3ZjcHVfcHV0KHN2Y3B1KTsKPiAtCQkJaWYgKHNyID09IFNSX0lOVkFMSUQpIHsK PiAtCQkJCWt2bXBwY19tbXVfbWFwX3NlZ21lbnQodmNwdSwga3ZtcHBjX2dldF9wYyh2Y3B1KSk7 Cj4gLQkJCQlyID0gUkVTVU1FX0dVRVNUOwo+IC0JCQkJYnJlYWs7Cj4gLQkJCX0KPiAtCQl9Cj4g LSNlbmRpZgo+IC0KPiAgIAkJLyogb25seSBjYXJlIGFib3V0IFBURUcgbm90IGZvdW5kIGVycm9y cywgYnV0IGxlYXZlIE5YIGFsb25lICovCj4gICAJCWlmIChzaGFkb3dfc3JyMSAmIDB4NDAwMDAw MDApIHsKPiAgIAkJCWludCBpZHggPSBzcmN1X3JlYWRfbG9jaygmdmNwdS0+a3ZtLT5zcmN1KTsK PiBAQCAtMTIwMywyNCArMTE0OCw2IEBAIGludCBrdm1wcGNfaGFuZGxlX2V4aXRfcHIoc3RydWN0 IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgZXhpdF9ucikKPiAgIAkJdTMyIGZhdWx0X2Rz aXNyID0gdmNwdS0+YXJjaC5mYXVsdF9kc2lzcjsKPiAgIAkJdmNwdS0+c3RhdC5wZl9zdG9yYWdl Kys7Cj4gICAKPiAtI2lmZGVmIENPTkZJR19QUENfQk9PSzNTXzMyCj4gLQkJLyogV2Ugc2V0IHNl Z21lbnRzIGFzIHVudXNlZCBzZWdtZW50cyB3aGVuIGludmFsaWRhdGluZyB0aGVtLiBTbwo+IC0J CSAqIHRyZWF0IHRoZSByZXNwZWN0aXZlIGZhdWx0IGFzIHNlZ21lbnQgZmF1bHQuICovCj4gLQkJ ewo+IC0JCQlzdHJ1Y3Qga3ZtcHBjX2Jvb2szc19zaGFkb3dfdmNwdSAqc3ZjcHU7Cj4gLQkJCXUz MiBzcjsKPiAtCj4gLQkJCXN2Y3B1ID0gc3ZjcHVfZ2V0KHZjcHUpOwo+IC0JCQlzciA9IHN2Y3B1 LT5zcltkYXIgPj4gU0lEX1NISUZUXTsKPiAtCQkJc3ZjcHVfcHV0KHN2Y3B1KTsKPiAtCQkJaWYg KHNyID09IFNSX0lOVkFMSUQpIHsKPiAtCQkJCWt2bXBwY19tbXVfbWFwX3NlZ21lbnQodmNwdSwg ZGFyKTsKPiAtCQkJCXIgPSBSRVNVTUVfR1VFU1Q7Cj4gLQkJCQlicmVhazsKPiAtCQkJfQo+IC0J CX0KPiAtI2VuZGlmCj4gLQo+ICAgCQkvKgo+ICAgCQkgKiBXZSBuZWVkIHRvIGhhbmRsZSBtaXNz aW5nIHNoYWRvdyBQVEVzLCBhbmQKPiAgIAkJICogcHJvdGVjdGlvbiBmYXVsdHMgZHVlIHRvIHVz IG1hcHBpbmcgYSBwYWdlIHJlYWQtb25seQo+IEBAIC0xMjk3LDEyICsxMjI0LDEwIEBAIGludCBr dm1wcGNfaGFuZGxlX2V4aXRfcHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQg ZXhpdF9ucikKPiAgIAkJCXVsb25nIGNtZCA9IGt2bXBwY19nZXRfZ3ByKHZjcHUsIDMpOwo+ICAg CQkJaW50IGk7Cj4gICAKPiAtI2lmZGVmIENPTkZJR19QUENfQk9PSzNTXzY0Cj4gICAJCQlpZiAo a3ZtcHBjX2hfcHIodmNwdSwgY21kKSA9PSBFTVVMQVRFX0RPTkUpIHsKPiAgIAkJCQlyID0gUkVT VU1FX0dVRVNUOwo+ICAgCQkJCWJyZWFrOwo+ICAgCQkJfQo+IC0jZW5kaWYKPiAgIAo+ICAgCQkJ cnVuLT5wYXByX2hjYWxsLm5yID0gY21kOwo+ICAgCQkJZm9yIChpID0gMDsgaSA8IDk7ICsraSkg ewo+IEBAIC0xMzk1LDExICsxMzIwLDkgQEAgaW50IGt2bXBwY19oYW5kbGVfZXhpdF9wcihzdHJ1 Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBleGl0X25yKQo+ICAgCQlyID0gUkVTVU1F X0dVRVNUOwo+ICAgCQlicmVhazsKPiAgIAl9Cj4gLSNpZmRlZiBDT05GSUdfUFBDX0JPT0szU182 NAo+ICAgCWNhc2UgQk9PSzNTX0lOVEVSUlVQVF9GQUNfVU5BVkFJTDoKPiAgIAkJciA9IGt2bXBw Y19oYW5kbGVfZmFjKHZjcHUsIHZjcHUtPmFyY2guc2hhZG93X2ZzY3IgPj4gNTYpOwo+ICAgCQli cmVhazsKPiAtI2VuZGlmCj4gICAJY2FzZSBCT09LM1NfSU5URVJSVVBUX01BQ0hJTkVfQ0hFQ0s6 Cj4gICAJCWt2bXBwY19ib29rM3NfcXVldWVfaXJxcHJpbyh2Y3B1LCBleGl0X25yKTsKPiAgIAkJ ciA9IFJFU1VNRV9HVUVTVDsKPiBAQCAtMTQ4OCw3ICsxNDExLDYgQEAgc3RhdGljIGludCBrdm1f YXJjaF92Y3B1X2lvY3RsX3NldF9zcmVnc19wcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCj4gICAJ a3ZtcHBjX3NldF9wdnJfcHIodmNwdSwgc3JlZ3MtPnB2cik7Cj4gICAKPiAgIAl2Y3B1M3MtPnNk cjEgPSBzcmVncy0+dS5zLnNkcjE7Cj4gLSNpZmRlZiBDT05GSUdfUFBDX0JPT0szU182NAo+ICAg CWlmICh2Y3B1LT5hcmNoLmhmbGFncyAmIEJPT0szU19IRkxBR19TTEIpIHsKPiAgIAkJLyogRmx1 c2ggYWxsIFNMQiBlbnRyaWVzICovCj4gICAJCXZjcHUtPmFyY2gubW11LnNsYm10ZSh2Y3B1LCAw LCAwKTsKPiBAQCAtMTUwMSw5ICsxNDIzLDcgQEAgc3RhdGljIGludCBrdm1fYXJjaF92Y3B1X2lv Y3RsX3NldF9zcmVnc19wcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCj4gICAJCQlpZiAocmIgJiBT TEJfRVNJRF9WKQo+ICAgCQkJCXZjcHUtPmFyY2gubW11LnNsYm10ZSh2Y3B1LCBycywgcmIpOwo+ ICAgCQl9Cj4gLQl9IGVsc2UKPiAtI2VuZGlmCj4gLQl7Cj4gKwl9IGVsc2Ugewo+ICAgCQlmb3Ig KGkgPSAwOyBpIDwgMTY7IGkrKykgewo+ICAgCQkJdmNwdS0+YXJjaC5tbXUubXRzcmluKHZjcHUs IGksIHNyZWdzLT51LnMucHBjMzIuc3JbaV0pOwo+ICAgCQl9Cj4gQEAgLTE3MzcsMTggKzE2NTcs MTAgQEAgc3RhdGljIGludCBrdm1wcGNfY29yZV92Y3B1X2NyZWF0ZV9wcihzdHJ1Y3Qga3ZtX3Zj cHUgKnZjcHUpCj4gICAJCWdvdG8gb3V0Owo+ICAgCXZjcHUtPmFyY2guYm9vazNzID0gdmNwdV9i b29rM3M7Cj4gICAKPiAtI2lmZGVmIENPTkZJR19LVk1fQk9PSzNTXzMyX0hBTkRMRVIKPiAtCXZj cHUtPmFyY2guc2hhZG93X3ZjcHUgPQo+IC0JCWt6YWxsb2Moc2l6ZW9mKCp2Y3B1LT5hcmNoLnNo YWRvd192Y3B1KSwgR0ZQX0tFUk5FTCk7Cj4gLQlpZiAoIXZjcHUtPmFyY2guc2hhZG93X3ZjcHUp Cj4gLQkJZ290byBmcmVlX3ZjcHUzczsKPiAtI2VuZGlmCj4gLQo+ICAgCXAgPSBfX2dldF9mcmVl X3BhZ2UoR0ZQX0tFUk5FTHxfX0dGUF9aRVJPKTsKPiAgIAlpZiAoIXApCj4gICAJCWdvdG8gZnJl ZV9zaGFkb3dfdmNwdTsKPiAgIAl2Y3B1LT5hcmNoLnNoYXJlZCA9ICh2b2lkICopcDsKPiAtI2lm ZGVmIENPTkZJR19QUENfQk9PSzNTXzY0Cj4gICAJLyogQWx3YXlzIHN0YXJ0IHRoZSBzaGFyZWQg c3RydWN0IGluIG5hdGl2ZSBlbmRpYW4gbW9kZSAqLwo+ICAgI2lmZGVmIF9fQklHX0VORElBTl9f Cj4gICAgICAgICAgIHZjcHUtPmFyY2guc2hhcmVkX2JpZ19lbmRpYW4gPSB0cnVlOwo+IEBAIC0x NzY1LDExICsxNjc3LDYgQEAgc3RhdGljIGludCBrdm1wcGNfY29yZV92Y3B1X2NyZWF0ZV9wcihz dHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCj4gICAJaWYgKG1tdV9oYXNfZmVhdHVyZShNTVVfRlRSXzFU X1NFR01FTlQpKQo+ICAgCQl2Y3B1LT5hcmNoLnB2ciA9IG1mc3ByKFNQUk5fUFZSKTsKPiAgIAl2 Y3B1LT5hcmNoLmludHJfbXNyID0gTVNSX1NGOwo+IC0jZWxzZQo+IC0JLyogZGVmYXVsdCB0byBi b29rM3NfMzIgKDc1MCkgKi8KPiAtCXZjcHUtPmFyY2gucHZyID0gMHg4NDIwMjsKPiAtCXZjcHUt PmFyY2guaW50cl9tc3IgPSAwOwo+IC0jZW5kaWYKPiAgIAlrdm1wcGNfc2V0X3B2cl9wcih2Y3B1 LCB2Y3B1LT5hcmNoLnB2cik7Cj4gICAJdmNwdS0+YXJjaC5zbGJfbnIgPSA2NDsKPiAgIAo+IEBA IC0xNzg0LDEwICsxNjkxLDYgQEAgc3RhdGljIGludCBrdm1wcGNfY29yZV92Y3B1X2NyZWF0ZV9w cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCj4gICBmcmVlX3NoYXJlZF9wYWdlOgo+ICAgCWZyZWVf cGFnZSgodW5zaWduZWQgbG9uZyl2Y3B1LT5hcmNoLnNoYXJlZCk7Cj4gICBmcmVlX3NoYWRvd192 Y3B1Ogo+IC0jaWZkZWYgQ09ORklHX0tWTV9CT09LM1NfMzJfSEFORExFUgo+IC0Ja2ZyZWUodmNw dS0+YXJjaC5zaGFkb3dfdmNwdSk7Cj4gLWZyZWVfdmNwdTNzOgo+IC0jZW5kaWYKPiAgIAl2ZnJl ZSh2Y3B1X2Jvb2szcyk7Cj4gICBvdXQ6Cj4gICAJcmV0dXJuIGVycjsKPiBAQCAtMTc5OSw5ICsx NzAyLDYgQEAgc3RhdGljIHZvaWQga3ZtcHBjX2NvcmVfdmNwdV9mcmVlX3ByKHN0cnVjdCBrdm1f dmNwdSAqdmNwdSkKPiAgIAo+ICAgCWt2bXBwY19tbXVfZGVzdHJveV9wcih2Y3B1KTsKPiAgIAlm cmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpdmNwdS0+YXJjaC5zaGFyZWQgJiBQQUdFX01BU0spOwo+ IC0jaWZkZWYgQ09ORklHX0tWTV9CT09LM1NfMzJfSEFORExFUgo+IC0Ja2ZyZWUodmNwdS0+YXJj aC5zaGFkb3dfdmNwdSk7Cj4gLSNlbmRpZgo+ICAgCXZmcmVlKHZjcHVfYm9vazNzKTsKPiAgIH0K PiAgIAo+IEBAIC0xOTIxLDcgKzE4MjEsNiBAQCBzdGF0aWMgdm9pZCBrdm1wcGNfY29yZV9mcmVl X21lbXNsb3RfcHIoc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCkKPiAgIAlyZXR1cm47Cj4g ICB9Cj4gICAKPiAtI2lmZGVmIENPTkZJR19QUEM2NAo+ICAgc3RhdGljIGludCBrdm1fdm1faW9j dGxfZ2V0X3NtbXVfaW5mb19wcihzdHJ1Y3Qga3ZtICprdm0sCj4gICAJCQkJCSBzdHJ1Y3Qga3Zt X3BwY19zbW11X2luZm8gKmluZm8pCj4gICB7Cj4gQEAgLTE5NzgsMTYgKzE4NzcsNiBAQCBzdGF0 aWMgaW50IGt2bV9jb25maWd1cmVfbW11X3ByKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9w cGNfbW11djNfY2ZnICpjZmcpCj4gICAJcmV0dXJuIDA7Cj4gICB9Cj4gICAKPiAtI2Vsc2UKPiAt c3RhdGljIGludCBrdm1fdm1faW9jdGxfZ2V0X3NtbXVfaW5mb19wcihzdHJ1Y3Qga3ZtICprdm0s Cj4gLQkJCQkJIHN0cnVjdCBrdm1fcHBjX3NtbXVfaW5mbyAqaW5mbykKPiAtewo+IC0JLyogV2Ug c2hvdWxkIG5vdCBnZXQgY2FsbGVkICovCj4gLQlCVUcoKTsKPiAtCXJldHVybiAwOwo+IC19Cj4g LSNlbmRpZiAvKiBDT05GSUdfUFBDNjQgKi8KPiAtCj4gICBzdGF0aWMgdW5zaWduZWQgaW50IGt2 bV9nbG9iYWxfdXNlcl9jb3VudCA9IDA7Cj4gICBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGt2bV9n bG9iYWxfdXNlcl9jb3VudF9sb2NrKTsKPiAgIAo+IEBAIC0xOTk1LDEwICsxODg0LDggQEAgc3Rh dGljIGludCBrdm1wcGNfY29yZV9pbml0X3ZtX3ByKHN0cnVjdCBrdm0gKmt2bSkKPiAgIHsKPiAg IAltdXRleF9pbml0KCZrdm0tPmFyY2guaHB0X211dGV4KTsKPiAgIAo+IC0jaWZkZWYgQ09ORklH X1BQQ19CT09LM1NfNjQKPiAgIAkvKiBTdGFydCBvdXQgd2l0aCB0aGUgZGVmYXVsdCBzZXQgb2Yg aGNhbGxzIGVuYWJsZWQgKi8KPiAgIAlrdm1wcGNfcHJfaW5pdF9kZWZhdWx0X2hjYWxscyhrdm0p Owo+IC0jZW5kaWYKPiAgIAo+ICAgCWlmIChmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJF X1NFVF9NT0RFKSkgewo+ICAgCQlzcGluX2xvY2soJmt2bV9nbG9iYWxfdXNlcl9jb3VudF9sb2Nr KTsKPiBAQCAtMjAxMSw5ICsxODk4LDcgQEAgc3RhdGljIGludCBrdm1wcGNfY29yZV9pbml0X3Zt X3ByKHN0cnVjdCBrdm0gKmt2bSkKPiAgIAo+ICAgc3RhdGljIHZvaWQga3ZtcHBjX2NvcmVfZGVz dHJveV92bV9wcihzdHJ1Y3Qga3ZtICprdm0pCj4gICB7Cj4gLSNpZmRlZiBDT05GSUdfUFBDNjQK PiAgIAlXQVJOX09OKCFsaXN0X2VtcHR5KCZrdm0tPmFyY2guc3BhcHJfdGNlX3RhYmxlcykpOwo+ IC0jZW5kaWYKPiAgIAo+ICAgCWlmIChmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX1NF VF9NT0RFKSkgewo+ICAgCQlzcGluX2xvY2soJmt2bV9nbG9iYWxfdXNlcl9jb3VudF9sb2NrKTsK PiBAQCAtMjA3MiwxMCArMTk1Nyw4IEBAIHN0YXRpYyBzdHJ1Y3Qga3ZtcHBjX29wcyBrdm1fb3Bz X3ByID0gewo+ICAgCS5lbXVsYXRlX21mc3ByID0ga3ZtcHBjX2NvcmVfZW11bGF0ZV9tZnNwcl9w ciwKPiAgIAkuZmFzdF92Y3B1X2tpY2sgPSBrdm1fdmNwdV9raWNrLAo+ICAgCS5hcmNoX3ZtX2lv Y3RsICA9IGt2bV9hcmNoX3ZtX2lvY3RsX3ByLAo+IC0jaWZkZWYgQ09ORklHX1BQQ19CT09LM1Nf NjQKPiAgIAkuaGNhbGxfaW1wbGVtZW50ZWQgPSBrdm1wcGNfaGNhbGxfaW1wbF9wciwKPiAgIAku Y29uZmlndXJlX21tdSA9IGt2bV9jb25maWd1cmVfbW11X3ByLAo+IC0jZW5kaWYKPiAgIAkuZ2l2 ZXVwX2V4dCA9IGt2bXBwY19naXZldXBfZXh0LAo+ICAgfTsKPiAgIAo+IEBAIC0yMTA0LDggKzE5 ODcsNiBAQCB2b2lkIGt2bXBwY19ib29rM3NfZXhpdF9wcih2b2lkKQo+ICAgLyoKPiAgICAqIFdl IG9ubHkgc3VwcG9ydCBzZXBhcmF0ZSBtb2R1bGVzIGZvciBib29rM3MgNjQKPiAgICAqLwo+IC0j aWZkZWYgQ09ORklHX1BQQ19CT09LM1NfNjQKPiAtCj4gICBtb2R1bGVfaW5pdChrdm1wcGNfYm9v azNzX2luaXRfcHIpOwo+ICAgbW9kdWxlX2V4aXQoa3ZtcHBjX2Jvb2szc19leGl0X3ByKTsKPiAg IAo+IEBAIC0yMTEzLDQgKzE5OTQsMyBAQCBNT0RVTEVfREVTQ1JJUFRJT04oIktWTSBvbiBCb29r M1Mgd2l0aG91dCB1c2luZyBoeXBlcnZpc29yIG1vZGUiKTsKPiAgIE1PRFVMRV9MSUNFTlNFKCJH UEwiKTsKPiAgIE1PRFVMRV9BTElBU19NSVNDREVWKEtWTV9NSU5PUik7Cj4gICBNT0RVTEVfQUxJ QVMoImRldm5hbWU6a3ZtIik7Cj4gLSNlbmRpZgo+IGRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMv a3ZtL2Jvb2szc19ybWhhbmRsZXJzLlMgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19ybWhhbmRs ZXJzLlMKPiBpbmRleCAwYTU1N2ZmY2E5ZmUuLmVmMDFlOGVkMmE5NyAxMDA2NDQKPiAtLS0gYS9h cmNoL3Bvd2VycGMva3ZtL2Jvb2szc19ybWhhbmRsZXJzLlMKPiArKysgYi9hcmNoL3Bvd2VycGMv a3ZtL2Jvb2szc19ybWhhbmRsZXJzLlMKPiBAQCAtMTQsOSArMTQsNyBAQAo+ICAgI2luY2x1ZGUg PGFzbS9hc20tb2Zmc2V0cy5oPgo+ICAgI2luY2x1ZGUgPGFzbS9hc20tY29tcGF0Lmg+Cj4gICAK PiAtI2lmZGVmIENPTkZJR19QUENfQk9PSzNTXzY0Cj4gICAjaW5jbHVkZSA8YXNtL2V4Y2VwdGlv bi02NHMuaD4KPiAtI2VuZGlmCj4gICAKPiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgo+ICAgICog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAqCj4gQEAgLTI0LDEyMCArMjIsMTIgQEAKPiAgICAqICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKgo+ICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCj4gICAKPiAtI2lmIGRlZmluZWQo Q09ORklHX1BQQ19CT09LM1NfNjQpCj4gLQo+ICAgI2lmZGVmIENPTkZJR19QUEM2NF9FTEZfQUJJ X1YyCj4gICAjZGVmaW5lIEZVTkMobmFtZSkgCQluYW1lCj4gICAjZWxzZQo+ICAgI2RlZmluZSBG VU5DKG5hbWUpIAkJR0xVRSguLG5hbWUpCj4gICAjZW5kaWYKPiAgIAo+IC0jZWxpZiBkZWZpbmVk KENPTkZJR19QUENfQk9PSzNTXzMyKQo+IC0KPiAtI2RlZmluZSBGVU5DKG5hbWUpCQluYW1lCj4g LQo+IC0jZGVmaW5lIFJGSV9UT19LRVJORUwJcmZpCj4gLSNkZWZpbmUgUkZJX1RPX0dVRVNUCXJm aQo+IC0KPiAtLm1hY3JvIElOVEVSUlVQVF9UUkFNUE9MSU5FIGludG5vCj4gLQo+IC0uZ2xvYmFs IGt2bXBwY190cmFtcG9saW5lX1xpbnRubwo+IC1rdm1wcGNfdHJhbXBvbGluZV9caW50bm86Cj4g LQo+IC0JbXRzcHIJU1BSTl9TUFJHX1NDUkFUQ0gwLCByMTMJCS8qIFNhdmUgcjEzICovCj4gLQo+ IC0JLyoKPiAtCSAqIEZpcnN0IHRoaW5nIHRvIGRvIGlzIHRvIGZpbmQgb3V0IGlmIHdlJ3JlIGNv bWluZwo+IC0JICogZnJvbSBhIEtWTSBndWVzdCBvciBhIExpbnV4IHByb2Nlc3MuCj4gLQkgKgo+ IC0JICogVG8gZGlzdGluZ3Vpc2gsIHdlIGNoZWNrIGEgbWFnaWMgYnl0ZSBpbiB0aGUgUEFDQS9j dXJyZW50Cj4gLQkgKi8KPiAtCW1mc3ByCXIxMywgU1BSTl9TUFJHX1RIUkVBRAo+IC0JbHd6CXIx MywgVEhSRUFEX0tWTV9TVkNQVShyMTMpCj4gLQkvKiBQUEMzMiBjYW4gaGF2ZSBhIE5VTEwgcG9p bnRlciAtIGxldCdzIGNoZWNrIGZvciB0aGF0ICovCj4gLQltdHNwciAgIFNQUk5fU1BSR19TQ1JB VENIMSwgcjEyCQkvKiBTYXZlIHIxMiAqLwo+IC0JbWZjcglyMTIKPiAtCWNtcHdpCXIxMywgMAo+ IC0JYm5lCTFmCj4gLTI6CW10Y3IJcjEyCj4gLQltZnNwcglyMTIsIFNQUk5fU1BSR19TQ1JBVENI MQo+IC0JbWZzcHIJcjEzLCBTUFJOX1NQUkdfU0NSQVRDSDAJCS8qIHIxMyA9IG9yaWdpbmFsIHIx MyAqLwo+IC0JYglrdm1wcGNfcmVzdW1lX1xpbnRubwkJLyogR2V0IGJhY2sgb3JpZ2luYWwgaGFu ZGxlciAqLwo+IC0KPiAtMToJdG9waHlzKHIxMywgcjEzKQo+IC0Jc3R3CXIxMiwgSFNUQVRFX1ND UkFUQ0gxKHIxMykKPiAtCW1mc3ByCXIxMiwgU1BSTl9TUFJHX1NDUkFUQ0gxCj4gLQlzdHcJcjEy LCBIU1RBVEVfU0NSQVRDSDAocjEzKQo+IC0JbGJ6CXIxMiwgSFNUQVRFX0lOX0dVRVNUKHIxMykK PiAtCWNtcHdpCXIxMiwgS1ZNX0dVRVNUX01PREVfTk9ORQo+IC0JYm5lCS4ua3ZtcHBjX2hhbmRs ZXJfaGFzbWFnaWNfXGludG5vCj4gLQkvKiBObyBLVk0gZ3Vlc3Q/IFRoZW4ganVtcCBiYWNrIHRv IHRoZSBMaW51eCBoYW5kbGVyISAqLwo+IC0JbHd6CXIxMiwgSFNUQVRFX1NDUkFUQ0gxKHIxMykK PiAtCWIJMmIKPiAtCj4gLQkvKiBOb3cgd2Uga25vdyB3ZSdyZSBoYW5kbGluZyBhIEtWTSBndWVz dCAqLwo+IC0uLmt2bXBwY19oYW5kbGVyX2hhc21hZ2ljX1xpbnRubzoKPiAtCj4gLQkvKiBTaG91 bGQgd2UganVzdCBza2lwIHRoZSBmYXVsdGluZyBpbnN0cnVjdGlvbj8gKi8KPiAtCWNtcHdpCXIx MiwgS1ZNX0dVRVNUX01PREVfU0tJUAo+IC0JYmVxCWt2bXBwY19oYW5kbGVyX3NraXBfaW5zCj4g LQo+IC0JLyogTGV0J3Mgc3RvcmUgd2hpY2ggaW50ZXJydXB0IHdlJ3JlIGhhbmRsaW5nICovCj4g LQlsaQlyMTIsIFxpbnRubwo+IC0KPiAtCS8qIEp1bXAgaW50byB0aGUgU0xCIGV4aXQgY29kZSB0 aGF0IGdvZXMgdG8gdGhlIGhpZ2htZW0gaGFuZGxlciAqLwo+IC0JYglrdm1wcGNfaGFuZGxlcl90 cmFtcG9saW5lX2V4aXQKPiAtCj4gLS5lbmRtCj4gLQo+IC1JTlRFUlJVUFRfVFJBTVBPTElORQlC T09LM1NfSU5URVJSVVBUX1NZU1RFTV9SRVNFVAo+IC1JTlRFUlJVUFRfVFJBTVBPTElORQlCT09L M1NfSU5URVJSVVBUX01BQ0hJTkVfQ0hFQ0sKPiAtSU5URVJSVVBUX1RSQU1QT0xJTkUJQk9PSzNT X0lOVEVSUlVQVF9EQVRBX1NUT1JBR0UKPiAtSU5URVJSVVBUX1RSQU1QT0xJTkUJQk9PSzNTX0lO VEVSUlVQVF9JTlNUX1NUT1JBR0UKPiAtSU5URVJSVVBUX1RSQU1QT0xJTkUJQk9PSzNTX0lOVEVS UlVQVF9FWFRFUk5BTAo+IC1JTlRFUlJVUFRfVFJBTVBPTElORQlCT09LM1NfSU5URVJSVVBUX0FM SUdOTUVOVAo+IC1JTlRFUlJVUFRfVFJBTVBPTElORQlCT09LM1NfSU5URVJSVVBUX1BST0dSQU0K PiAtSU5URVJSVVBUX1RSQU1QT0xJTkUJQk9PSzNTX0lOVEVSUlVQVF9GUF9VTkFWQUlMCj4gLUlO VEVSUlVQVF9UUkFNUE9MSU5FCUJPT0szU19JTlRFUlJVUFRfREVDUkVNRU5URVIKPiAtSU5URVJS VVBUX1RSQU1QT0xJTkUJQk9PSzNTX0lOVEVSUlVQVF9TWVNDQUxMCj4gLUlOVEVSUlVQVF9UUkFN UE9MSU5FCUJPT0szU19JTlRFUlJVUFRfVFJBQ0UKPiAtSU5URVJSVVBUX1RSQU1QT0xJTkUJQk9P SzNTX0lOVEVSUlVQVF9QRVJGTU9OCj4gLUlOVEVSUlVQVF9UUkFNUE9MSU5FCUJPT0szU19JTlRF UlJVUFRfQUxUSVZFQwo+IC0KPiAtLyoKPiAtICogQnJpbmcgdXMgYmFjayB0byB0aGUgZmF1bHRp bmcgY29kZSwgYnV0IHNraXAgdGhlCj4gLSAqIGZhdWx0aW5nIGluc3RydWN0aW9uLgo+IC0gKgo+ IC0gKiBUaGlzIGlzIGEgZ2VuZXJpYyBleGl0IHBhdGggZnJvbSB0aGUgaW50ZXJydXB0Cj4gLSAq IHRyYW1wb2xpbmVzIGFib3ZlLgo+IC0gKgo+IC0gKiBJbnB1dCBSZWdpc3RlcnM6Cj4gLSAqCj4g LSAqIFIxMiAgICAgICAgICAgID0gZnJlZQo+IC0gKiBSMTMgICAgICAgICAgICA9IFNoYWRvdyBW Q1BVIChQQUNBKQo+IC0gKiBIU1RBVEUuU0NSQVRDSDAgPSBndWVzdCBSMTIKPiAtICogSFNUQVRF LlNDUkFUQ0gxID0gZ3Vlc3QgQ1IKPiAtICogU1BSR19TQ1JBVENIMCAgPSBndWVzdCBSMTMKPiAt ICoKPiAtICovCj4gLWt2bXBwY19oYW5kbGVyX3NraXBfaW5zOgo+IC0KPiAtCS8qIFBhdGNoIHRo ZSBJUCB0byB0aGUgbmV4dCBpbnN0cnVjdGlvbiAqLwo+IC0JLyogTm90ZSB0aGF0IHByZWZpeGVk IGluc3RydWN0aW9ucyBhcmUgZGlzYWJsZWQgaW4gUFIgS1ZNIGZvciBub3cgKi8KPiAtCW1mc3Jy MAlyMTIKPiAtCWFkZGkJcjEyLCByMTIsIDQKPiAtCW10c3JyMAlyMTIKPiAtCj4gLQkvKiBDbGVh biB1cCBhbGwgc3RhdGUgKi8KPiAtCWx3eglyMTIsIEhTVEFURV9TQ1JBVENIMShyMTMpCj4gLQlt dGNyCXIxMgo+IC0JUFBDX0xMCXIxMiwgSFNUQVRFX1NDUkFUQ0gwKHIxMykKPiAtCUdFVF9TQ1JB VENIMChyMTMpCj4gLQo+IC0JLyogQW5kIGdldCBiYWNrIGludG8gdGhlIGNvZGUgKi8KPiAtCVJG SV9UT19LRVJORUwKPiAtI2VuZGlmCj4gLQo+ICAgLyoKPiAgICAqIENhbGwga3ZtcHBjX2hhbmRs ZXJfdHJhbXBvbGluZV9lbnRlciBpbiByZWFsIG1vZGUKPiAgICAqCj4gZGlmZiAtLWdpdCBhL2Fy Y2gvcG93ZXJwYy9rdm0vYm9vazNzX3NlZ21lbnQuUyBiL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNz X3NlZ21lbnQuUwo+IGluZGV4IDIwMjA0NmE4M2ZjMS4uZWVjNDEwMDhkODE1IDEwMDY0NAo+IC0t LSBhL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3NlZ21lbnQuUwo+ICsrKyBiL2FyY2gvcG93ZXJw Yy9rdm0vYm9vazNzX3NlZ21lbnQuUwo+IEBAIC0xMSwzMSArMTEsMTYgQEAKPiAgICNpbmNsdWRl IDxhc20vYXNtLWNvbXBhdC5oPgo+ICAgI2luY2x1ZGUgPGFzbS9mZWF0dXJlLWZpeHVwcy5oPgo+ ICAgCj4gLSNpZiBkZWZpbmVkKENPTkZJR19QUENfQk9PSzNTXzY0KQo+IC0KPiAgICNkZWZpbmUg R0VUX1NIQURPV19WQ1BVKHJlZykgICAgXAo+ICAgCW1yCXJlZywgcjEzCj4gICAKPiAtI2VsaWYg ZGVmaW5lZChDT05GSUdfUFBDX0JPT0szU18zMikKPiAtCj4gLSNkZWZpbmUgR0VUX1NIQURPV19W Q1BVKHJlZykgICAgCQkJXAo+IC0JdG9waHlzKHJlZywgcjIpOyAgICAgICAJCQlcCj4gLQlsd3og ICAgIHJlZywgKFRIUkVBRCArIFRIUkVBRF9LVk1fU1ZDUFUpKHJlZyk7CVwKPiAtCXRvcGh5cyhy ZWcsIHJlZykKPiAtCj4gLSNlbmRpZgo+IC0KPiAgIC8qIERpc2FibGUgZm9yIG5lc3RlZCBLVk0g Ki8KPiAgICNkZWZpbmUgVVNFX1FVSUNLX0xBU1RfSU5TVAo+ICAgCj4gICAKPiAgIC8qIEdldCBo ZWxwZXIgZnVuY3Rpb25zIGZvciBzdWJhcmNoIHNwZWNpZmljIGZ1bmN0aW9uYWxpdHkgKi8KPiAg IAo+IC0jaWYgZGVmaW5lZChDT05GSUdfUFBDX0JPT0szU182NCkKPiAgICNpbmNsdWRlICJib29r M3NfNjRfc2xiLlMiCj4gLSNlbGlmIGRlZmluZWQoQ09ORklHX1BQQ19CT09LM1NfMzIpCj4gLSNp bmNsdWRlICJib29rM3NfMzJfc3IuUyIKPiAtI2VuZGlmCj4gICAKPiAgIC8qKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioKPiAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKPiBAQCAtODEsNyArNjYsNiBAQCBr dm1wcGNfaGFuZGxlcl90cmFtcG9saW5lX2VudGVyOgo+ICAgCS8qIFN3aXRjaCB0byBndWVzdCBz ZWdtZW50LiBUaGlzIGlzIHN1YmFyY2ggc3BlY2lmaWMuICovCj4gICAJTE9BRF9HVUVTVF9TRUdN RU5UUwo+ICAgCj4gLSNpZmRlZiBDT05GSUdfUFBDX0JPT0szU182NAo+ICAgQkVHSU5fRlRSX1NF Q1RJT04KPiAgIAkvKiBTYXZlIGhvc3QgRlNDUiAqLwo+ICAgCW1mc3ByCXI4LCBTUFJOX0ZTQ1IK PiBAQCAtMTA4LDggKzkyLDYgQEAgRU5EX0ZUUl9TRUNUSU9OX0lGU0VUKENQVV9GVFJfQVJDSF8y MDdTKQo+ICAgCW10c3ByICAgU1BSTl9ISUQ1LHIwCj4gICBub19kY2J6MzJfb246Cj4gICAKPiAt I2VuZGlmIC8qIENPTkZJR19QUENfQk9PSzNTXzY0ICovCj4gLQo+ICAgCS8qIEVudGVyIGd1ZXN0 ICovCj4gICAKPiAgIAlQUENfTEwJcjgsIFNWQ1BVX0NUUihyMykKPiBAQCAtMTcwLDEzICsxNTIs MTEgQEAga3ZtcHBjX2ludGVycnVwdF9wcjoKPiAgIAkgKiBIU1RBVEUuU0NSQVRDSDAgPSBndWVz dCBSMTIKPiAgIAkgKiBIU1RBVEUuU0NSQVRDSDIgPSBndWVzdCBSOQo+ICAgCSAqLwo+IC0jaWZk ZWYgQ09ORklHX1BQQzY0Cj4gICAJLyogTWF0Y2ggMzItYml0IGVudHJ5ICovCj4gICAJbGQJcjks SFNUQVRFX1NDUkFUQ0gyKHIxMykKPiAgIAlyb3RsZGkJcjEyLCByMTIsIDMyCQkgIC8qIEZsaXAg UjEyIGhhbHZlcyBmb3Igc3R3ICovCj4gICAJc3R3CXIxMiwgSFNUQVRFX1NDUkFUQ0gxKHIxMykg LyogQ1IgaXMgbm93IGluIHRoZSBsb3cgaGFsZiAqLwo+ICAgCXNyZGkJcjEyLCByMTIsIDMyCQkg IC8qIHNoaWZ0IHRyYXAgaW50byBsb3cgaGFsZiAqLwo+IC0jZW5kaWYKPiAgIAo+ICAgLmdsb2Jh bCBrdm1wcGNfaGFuZGxlcl90cmFtcG9saW5lX2V4aXQKPiAgIGt2bXBwY19oYW5kbGVyX3RyYW1w b2xpbmVfZXhpdDoKPiBAQCAtMjA5LDcgKzE4OSw2IEBAIGt2bXBwY19oYW5kbGVyX3RyYW1wb2xp bmVfZXhpdDoKPiAgIAlQUENfTEwJcjIsIEhTVEFURV9IT1NUX1IyKHIxMykKPiAgIAo+ICAgCS8q IFNhdmUgZ3Vlc3QgUEMgYW5kIE1TUiAqLwo+IC0jaWZkZWYgQ09ORklHX1BQQzY0Cj4gICBCRUdJ Tl9GVFJfU0VDVElPTgo+ICAgCWFuZGkuCXIwLCByMTIsIDB4Mgo+ICAgCWNtcHdpCWNyMSwgcjAs IDAKPiBAQCAtMjE5LDcgKzE5OCw3IEBAIEJFR0lOX0ZUUl9TRUNUSU9OCj4gICAJYW5kaS4JcjEy LHIxMiwweDNmZmQKPiAgIAliCTJmCj4gICBFTkRfRlRSX1NFQ1RJT05fSUZTRVQoQ1BVX0ZUUl9I Vk1PREUpCj4gLSNlbmRpZgo+ICsKPiAgIDE6CW1mc3JyMAlyMwo+ICAgCW1mc3JyMQlyNAo+ICAg MjoKPiBAQCAtMjY1LDcgKzI0NCw2IEBAIEVORF9GVFJfU0VDVElPTl9JRlNFVChDUFVfRlRSX0hW TU9ERSkKPiAgIAliZXEJbGRfbGFzdF9wcmV2X2luc3QKPiAgIAljbXB3aQlyMTIsIEJPT0szU19J TlRFUlJVUFRfQUxJR05NRU5UCj4gICAJYmVxLQlsZF9sYXN0X2luc3QKPiAtI2lmZGVmIENPTkZJ R19QUEM2NAo+ICAgQkVHSU5fRlRSX1NFQ1RJT04KPiAgIAljbXB3aQlyMTIsIEJPT0szU19JTlRF UlJVUFRfSF9FTVVMX0FTU0lTVAo+ICAgCWJlcS0JbGRfbGFzdF9pbnN0Cj4gQEAgLTI3NCw3ICsy NTIsNiBAQCBCRUdJTl9GVFJfU0VDVElPTgo+ICAgCWNtcHdpCXIxMiwgQk9PSzNTX0lOVEVSUlVQ VF9GQUNfVU5BVkFJTAo+ICAgCWJlcS0JbGRfbGFzdF9pbnN0Cj4gICBFTkRfRlRSX1NFQ1RJT05f SUZTRVQoQ1BVX0ZUUl9BUkNIXzIwN1MpCj4gLSNlbmRpZgo+ICAgCj4gICAJYglub19sZF9sYXN0 X2luc3QKPiAgIAo+IEBAIC0zMTcsNyArMjk0LDYgQEAgbm9fbGRfbGFzdF9pbnN0Ogo+ICAgCS8q IFN3aXRjaCBiYWNrIHRvIGhvc3QgTU1VICovCj4gICAJTE9BRF9IT1NUX1NFR01FTlRTCj4gICAK PiAtI2lmZGVmIENPTkZJR19QUENfQk9PSzNTXzY0Cj4gICAKPiAgIAlsYnoJcjUsIEhTVEFURV9S RVNUT1JFX0hJRDUocjEzKQo+ICAgCWNtcHdpCXI1LCAwCj4gQEAgLTM0Miw4ICszMTgsNiBAQCBu b19mc2NyX3NhdmU6Cj4gICAJbXRzcHIJU1BSTl9GU0NSLCByOAo+ICAgRU5EX0ZUUl9TRUNUSU9O X0lGU0VUKENQVV9GVFJfQVJDSF8yMDdTKQo+ICAgCj4gLSNlbmRpZiAvKiBDT05GSUdfUFBDX0JP T0szU182NCAqLwo+IC0KPiAgIAkvKgo+ICAgCSAqIEZvciBzb21lIGludGVycnVwdHMsIHdlIG5l ZWQgdG8gY2FsbCB0aGUgcmVhbCBMaW51eAo+ICAgCSAqIGhhbmRsZXIsIHNvIGl0IGNhbiBkbyB3 b3JrIGZvciB1cy4gVGhpcyBoYXMgdG8gaGFwcGVuCj4gQEAgLTM4NiwxMyArMzYwLDExIEBAIEVO RF9GVFJfU0VDVElPTl9JRlNFVChDUFVfRlRSX0FSQ0hfMjA3UykKPiAgICNlbmRpZgo+ICAgCVBQ Q19MTAlyOCwgSFNUQVRFX1ZNSEFORExFUihyMTMpCj4gICAKPiAtI2lmZGVmIENPTkZJR19QUEM2 NAo+ICAgQkVHSU5fRlRSX1NFQ1RJT04KPiAgIAliZXEJY3IxLCAxZgo+ICAgCW10c3ByCVNQUk5f SFNSUjEsIHI2Cj4gICAJbXRzcHIJU1BSTl9IU1JSMCwgcjgKPiAgIEVORF9GVFJfU0VDVElPTl9J RlNFVChDUFVfRlRSX0hWTU9ERSkKPiAtI2VuZGlmCj4gICAxOgkvKiBSZXN0b3JlIGhvc3QgbXNy IC0+IFNSUjEgKi8KPiAgIAltdHNycjEJcjYKPiAgIAkvKiBMb2FkIGhpZ2htZW0gaGFuZGxlciBh ZGRyZXNzICovCj4gZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vZW11bGF0ZS5jIGIvYXJj aC9wb3dlcnBjL2t2bS9lbXVsYXRlLmMKPiBpbmRleCAzNTVkNTIwNmU4YWEuLjc0NTA4NTE2ZGY1 MSAxMDA2NDQKPiAtLS0gYS9hcmNoL3Bvd2VycGMva3ZtL2VtdWxhdGUuYwo+ICsrKyBiL2FyY2gv cG93ZXJwYy9rdm0vZW11bGF0ZS5jCj4gQEAgLTIyOSw5ICsyMjksNyBAQCBpbnQga3ZtcHBjX2Vt dWxhdGVfaW5zdHJ1Y3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQo+ICAgCQlzd2l0Y2ggKGdl dF94b3AoaW5zdCkpIHsKPiAgIAo+ICAgCQljYXNlIE9QXzMxX1hPUF9UUkFQOgo+IC0jaWZkZWYg Q09ORklHXzY0QklUCj4gICAJCWNhc2UgT1BfMzFfWE9QX1RSQVBfNjQ6Cj4gLSNlbmRpZgo+ICAg I2lmZGVmIENPTkZJR19QUENfQk9PSzNTCj4gICAJCQlrdm1wcGNfY29yZV9xdWV1ZV9wcm9ncmFt KHZjcHUsIFNSUjFfUFJPR1RSQVApOwo+ICAgI2Vsc2UKPiBkaWZmIC0tZ2l0IGEvYXJjaC9wb3dl cnBjL2t2bS9wb3dlcnBjLmMgYi9hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYwo+IGluZGV4IGNl MWQ5MWVlZDIzMS4uODA1OTg3NmFiZjIzIDEwMDY0NAo+IC0tLSBhL2FyY2gvcG93ZXJwYy9rdm0v cG93ZXJwYy5jCj4gKysrIGIvYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMKPiBAQCAtMTE2Mywx MSArMTE2Myw5IEBAIHN0YXRpYyB2b2lkIGt2bXBwY19jb21wbGV0ZV9tbWlvX2xvYWQoc3RydWN0 IGt2bV92Y3B1ICp2Y3B1KQo+ICAgCj4gICAJaWYgKHZjcHUtPmFyY2gubW1pb19zaWduX2V4dGVu ZCkgewo+ICAgCQlzd2l0Y2ggKHJ1bi0+bW1pby5sZW4pIHsKPiAtI2lmZGVmIENPTkZJR19QUEM2 NAo+ICAgCQljYXNlIDQ6Cj4gICAJCQlncHIgPSAoczY0KShzMzIpZ3ByOwo+ICAgCQkJYnJlYWs7 Cj4gLSNlbmRpZgo+ICAgCQljYXNlIDI6Cj4gICAJCQlncHIgPSAoczY0KShzMTYpZ3ByOwo+ICAg CQkJYnJlYWs7CgoKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwpsaW51eC1yaXNjdiBtYWlsaW5nIGxpc3QKbGludXgtcmlzY3ZAbGlzdHMuaW5mcmFkZWFk Lm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LXJp c2N2Cg==