From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9245DC4338F for ; Sat, 14 Aug 2021 19:02:29 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id 75DDA60EB5 for ; Sat, 14 Aug 2021 19:02:28 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 75DDA60EB5 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=lightnvm.io Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=lists.infradead.org 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:MIME-Version:Date:Message-ID:From: References:Cc:To:Subject:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=FHlqX5Q/xNjUCPoIQiFTiUnHYsuJ6aILUFgav+bHoso=; b=wWYstw+VkYNtoHd4FUdUW5AguA BlxRtikQwgJZGWSodld6s7gx+vP7rEUMBLbcrwJX0qB6tjmZjRi0GkZ8H+4qRS0jM9ny9FWwu8Flh x7+42kXx0OofX2sLOZQurwR68VO5AzOOR2hFPnfx/DOSWSIC+XcOOhU7WrOrdsRjajeodzaHzbbNd O6E5Xq4u0qRJZRURiz1LDdi+Fha5VvR3dNktENw4bN1MjwHjs18YiReDSQa//QIS0Ongg8MjW/2JD bTpm4aZbe+xKaiAyM8ZH5MFiXsx0bwVSy1aYsweqjnmJqfOUj3qnTIgcdpU28gS9Nvy6tdfk1/7K3 94+Q8y/w==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mEyv4-00ETvf-LX; Sat, 14 Aug 2021 19:02:10 +0000 Received: from mail-ej1-x62d.google.com ([2a00:1450:4864:20::62d]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mEyuf-00ETvD-4d for linux-nvme@lists.infradead.org; Sat, 14 Aug 2021 19:01:51 +0000 Received: by mail-ej1-x62d.google.com with SMTP id gt38so3267109ejc.13 for ; Sat, 14 Aug 2021 12:01:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=lightnvm-io.20150623.gappssmtp.com; s=20150623; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-transfer-encoding:content-language; bh=FgNx15km5+2ber2BUZaqLH75aeJLJTOcuLWRwv1ENqk=; b=cUPqr7WCC+0XJ7KLhLpwzSDUJ2iIcOl8NGjT/Ur6Yy/LaoYwj0wktRNJqRn/GeziOw 6yfz5monH6tc2bKPOY6mx5JGDyL51Jan683Ry/UwybTwO1HuTJ25P3ms8CoKpHx9cjJp MKnfKXQ7hd5dL7dOBk4xVOTmDb0R+1uS5JOWoZUZlmL61/LMl6YSvrYtwntoNidSlUFh eOlp1+NbIfx1qW+9MPcl4hHXZs6HN6TnQbm+ygamEhhEXJX99xlAREJYnmChmQcvTOsA 7dAZP5Ur1Pnz2AJkMYCC3h0MNfKbQIDoduq9+8I/R++tppSmQjb2gI9ZlljDxH1agC/e 2ZPQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-transfer-encoding :content-language; bh=FgNx15km5+2ber2BUZaqLH75aeJLJTOcuLWRwv1ENqk=; b=Ultl5QspSENsdm4sOKr0DXr/sL85reg2Qf01OLu8XGZ4yvcxwHI+g6cz5Unv2GGWjD kQPMj4rG9W1aieK4kURNrRu7QOak5flAB7NrswtiFBGIndiqECwkqM6lPJBE4OKnA1kw 7JvgxJRvWXE1WHcl3IUwzSlIkWoTGhVmo6ooHewtk7QNoCLTLGrkvzVSwdnttH/QgqwE VkABz8ZCwrJfmtfl4MEQ0c4eqhq/ri/rMsXfk4Dd48pkFbBgC1THlKMiD/2uMHSC/qql 0ulx1VF+xi4isNPk/jtC2CZcajbu4zOJ0+fB0GJ/G1ChIj517T3GllwAQYLgObAeQtae iJcQ== X-Gm-Message-State: AOAM5331wQX3xknFRV65Qyvtq6zDuw2xAFWKanfPcy7BN2p/dHLxW1Gn HFNNMM3/Qyuw62KG/dTuGJMgag== X-Google-Smtp-Source: ABdhPJytSObnB7m/K5ztRpopymL7VioIspYjHpWBYkoAGdvTiQe/XSjwwbg+/23chq/mpvmNmDElzg== X-Received: by 2002:a17:906:a0a:: with SMTP id w10mr8505047ejf.416.1628967701738; Sat, 14 Aug 2021 12:01:41 -0700 (PDT) Received: from [10.0.0.62] (xb932c246.cust.hiper.dk. [185.50.194.70]) by smtp.gmail.com with ESMTPSA id d3sm2551550edv.48.2021.08.14.12.01.40 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sat, 14 Aug 2021 12:01:40 -0700 (PDT) Subject: Re: [PATCH] remove the lightnvm subsystem To: Christoph Hellwig , axboe@kernel.dk, javier@javigon.com Cc: linux-nvme@lists.infradead.org, linux-block@vger.kernel.org References: <20210812132308.38486-1-hch@lst.de> From: =?UTF-8?Q?Matias_Bj=c3=b8rling?= Message-ID: <094e8eec-affe-81ba-908e-fbbe2fb7fa84@lightnvm.io> Date: Sat, 14 Aug 2021 21:01:38 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.12.0 MIME-Version: 1.0 In-Reply-To: <20210812132308.38486-1-hch@lst.de> Content-Language: en-US X-Spam-Note: CRM114 run bypassed due to message size (399286 bytes) X-Spam-Score: -0.5 (/) X-Spam-Report: Spam detection software, running on the system "bombadil.infradead.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: On 12/08/2021 15.23, Christoph Hellwig wrote: > Lightnvm supports the OCSSD 1.x and 2.0 specs which were early attempts > to produce Open Channel SSDs and never made it into the NVMe spec > proper. Th [...] Content analysis details: (-0.5 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/, no trust [2a00:1450:4864:20:0:0:0:62d listed in] [list.dnswl.org] 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record 0.0 SPF_NONE SPF: sender does not publish an SPF Record -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.5 NICE_REPLY_A Looks like a legit reply (A) X-BeenThere: linux-nvme@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-nvme" Errors-To: linux-nvme-bounces+linux-nvme=archiver.kernel.org@lists.infradead.org Ck9uIDEyLzA4LzIwMjEgMTUuMjMsIENocmlzdG9waCBIZWxsd2lnIHdyb3RlOgo+IExpZ2h0bnZt IHN1cHBvcnRzIHRoZSBPQ1NTRCAxLnggYW5kIDIuMCBzcGVjcyB3aGljaCB3ZXJlIGVhcmx5IGF0 dGVtcHRzCj4gdG8gcHJvZHVjZSBPcGVuIENoYW5uZWwgU1NEcyBhbmQgbmV2ZXIgbWFkZSBpdCBp bnRvIHRoZSBOVk1lIHNwZWMKPiBwcm9wZXIuICBUaGV5IGhhdmUgc2luY2UgYmVlbiBzdXBlcmNl ZWRlZCBieSBOVk1lIGVuaGFuY2VtZW50cyBzdWNoCj4gYXMgWk5TIHN1cHBvcnQuICBSZW1vdmUg dGhlIHN1cHBvcnQgcGVyIHRoZSBkZXByZWNhdGlvbiBzY2hlZHVsZS4KPgo+IFNpZ25lZC1vZmYt Ynk6IENocmlzdG9waCBIZWxsd2lnIDxoY2hAbHN0LmRlPgo+IC0tLQo+ICAgRG9jdW1lbnRhdGlv bi9kcml2ZXItYXBpL2luZGV4LnJzdCAgICAgICAgICAgIHwgICAgMSAtCj4gICBEb2N1bWVudGF0 aW9uL2RyaXZlci1hcGkvbGlnaHRudm0tcGJsay5yc3QgICAgfCAgIDIxIC0KPiAgIC4uLi91c2Vy c3BhY2UtYXBpL2lvY3RsL2lvY3RsLW51bWJlci5yc3QgICAgICB8ICAgIDEgLQo+ICAgTUFJTlRB SU5FUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgOSAtCj4gICBkcml2 ZXJzL0tjb25maWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAyIC0KPiAgIGRy aXZlcnMvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDEgLQo+ICAg ZHJpdmVycy9saWdodG52bS9LY29uZmlnICAgICAgICAgICAgICAgICAgICAgIHwgICA0NCAtCj4g ICBkcml2ZXJzL2xpZ2h0bnZtL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgfCAgIDExIC0K PiAgIGRyaXZlcnMvbGlnaHRudm0vY29yZS5jICAgICAgICAgICAgICAgICAgICAgICB8IDE0NDAg LS0tLS0tLS0tLS0KPiAgIGRyaXZlcnMvbGlnaHRudm0vcGJsay1jYWNoZS5jICAgICAgICAgICAg ICAgICB8ICAxMzcgLS0KPiAgIGRyaXZlcnMvbGlnaHRudm0vcGJsay1jb3JlLmMgICAgICAgICAg ICAgICAgICB8IDIxNTEgLS0tLS0tLS0tLS0tLS0tLS0KPiAgIGRyaXZlcnMvbGlnaHRudm0vcGJs ay1nYy5jICAgICAgICAgICAgICAgICAgICB8ICA3MjYgLS0tLS0tCj4gICBkcml2ZXJzL2xpZ2h0 bnZtL3BibGstaW5pdC5jICAgICAgICAgICAgICAgICAgfCAxMzI0IC0tLS0tLS0tLS0KPiAgIGRy aXZlcnMvbGlnaHRudm0vcGJsay1tYXAuYyAgICAgICAgICAgICAgICAgICB8ICAyMTAgLS0KPiAg IGRyaXZlcnMvbGlnaHRudm0vcGJsay1yYi5jICAgICAgICAgICAgICAgICAgICB8ICA4NTggLS0t LS0tLQo+ICAgZHJpdmVycy9saWdodG52bS9wYmxrLXJlYWQuYyAgICAgICAgICAgICAgICAgIHwg IDQ3NCAtLS0tCj4gICBkcml2ZXJzL2xpZ2h0bnZtL3BibGstcmVjb3ZlcnkuYyAgICAgICAgICAg ICAgfCAgODc0IC0tLS0tLS0KPiAgIGRyaXZlcnMvbGlnaHRudm0vcGJsay1ybC5jICAgICAgICAg ICAgICAgICAgICB8ICAyNTQgLS0KPiAgIGRyaXZlcnMvbGlnaHRudm0vcGJsay1zeXNmcy5jICAg ICAgICAgICAgICAgICB8ICA3MjggLS0tLS0tCj4gICBkcml2ZXJzL2xpZ2h0bnZtL3BibGstdHJh Y2UuaCAgICAgICAgICAgICAgICAgfCAgMTQ1IC0tCj4gICBkcml2ZXJzL2xpZ2h0bnZtL3BibGst d3JpdGUuYyAgICAgICAgICAgICAgICAgfCAgNjY1IC0tLS0tCj4gICBkcml2ZXJzL2xpZ2h0bnZt L3BibGsuaCAgICAgICAgICAgICAgICAgICAgICAgfCAxMzU4IC0tLS0tLS0tLS0tCj4gICBkcml2 ZXJzL252bWUvaG9zdC9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgfCAgICAxIC0KPiAgIGRy aXZlcnMvbnZtZS9ob3N0L2NvcmUuYyAgICAgICAgICAgICAgICAgICAgICB8ICAgMTMgLQo+ICAg ZHJpdmVycy9udm1lL2hvc3QvaW9jdGwuYyAgICAgICAgICAgICAgICAgICAgIHwgICAgNCArLQo+ ICAgZHJpdmVycy9udm1lL2hvc3QvbGlnaHRudm0uYyAgICAgICAgICAgICAgICAgIHwgMTI3NCAt LS0tLS0tLS0tCj4gICBkcml2ZXJzL252bWUvaG9zdC9udm1lLmggICAgICAgICAgICAgICAgICAg ICAgfCAgIDI2IC0KPiAgIGRyaXZlcnMvbnZtZS9ob3N0L3BjaS5jICAgICAgICAgICAgICAgICAg ICAgICB8ICAgIDYgLQo+ICAgaW5jbHVkZS9saW51eC9saWdodG52bS5oICAgICAgICAgICAgICAg ICAgICAgIHwgIDY5NyAtLS0tLS0KPiAgIGluY2x1ZGUvdWFwaS9saW51eC9saWdodG52bS5oICAg ICAgICAgICAgICAgICB8ICAyMjQgLS0KPiAgIDMwIGZpbGVzIGNoYW5nZWQsIDEgaW5zZXJ0aW9u KCspLCAxMzY3OCBkZWxldGlvbnMoLSkKPiAgIGRlbGV0ZSBtb2RlIDEwMDY0NCBEb2N1bWVudGF0 aW9uL2RyaXZlci1hcGkvbGlnaHRudm0tcGJsay5yc3QKPiAgIGRlbGV0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL2xpZ2h0bnZtL0tjb25maWcKPiAgIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2xp Z2h0bnZtL01ha2VmaWxlCj4gICBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9saWdodG52bS9j b3JlLmMKPiAgIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2xpZ2h0bnZtL3BibGstY2FjaGUu Ywo+ICAgZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbGlnaHRudm0vcGJsay1jb3JlLmMKPiAg IGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2xpZ2h0bnZtL3BibGstZ2MuYwo+ICAgZGVsZXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvbGlnaHRudm0vcGJsay1pbml0LmMKPiAgIGRlbGV0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL2xpZ2h0bnZtL3BibGstbWFwLmMKPiAgIGRlbGV0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL2xpZ2h0bnZtL3BibGstcmIuYwo+ICAgZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvbGlnaHRudm0vcGJsay1yZWFkLmMKPiAgIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2xp Z2h0bnZtL3BibGstcmVjb3ZlcnkuYwo+ICAgZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbGln aHRudm0vcGJsay1ybC5jCj4gICBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9saWdodG52bS9w YmxrLXN5c2ZzLmMKPiAgIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2xpZ2h0bnZtL3BibGst dHJhY2UuaAo+ICAgZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbGlnaHRudm0vcGJsay13cml0 ZS5jCj4gICBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9saWdodG52bS9wYmxrLmgKPiAgIGRl bGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL252bWUvaG9zdC9saWdodG52bS5jCj4gICBkZWxldGUg bW9kZSAxMDA2NDQgaW5jbHVkZS9saW51eC9saWdodG52bS5oCj4gICBkZWxldGUgbW9kZSAxMDA2 NDQgaW5jbHVkZS91YXBpL2xpbnV4L2xpZ2h0bnZtLmgKPgo+IGRpZmYgLS1naXQgYS9Eb2N1bWVu dGF0aW9uL2RyaXZlci1hcGkvaW5kZXgucnN0IGIvRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL2lu ZGV4LnJzdAo+IGluZGV4IGY1YTMyMDdhYTdmYS4uYzU3YzYwOWFkMmViIDEwMDY0NAo+IC0tLSBh L0RvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9pbmRleC5yc3QKPiArKysgYi9Eb2N1bWVudGF0aW9u L2RyaXZlci1hcGkvaW5kZXgucnN0Cj4gQEAgLTg1LDcgKzg1LDYgQEAgYXZhaWxhYmxlIHN1YnNl Y3Rpb25zIGNhbiBiZSBzZWVuIGJlbG93Lgo+ICAgICAgaW8tbWFwcGluZwo+ICAgICAgaW9fb3Jk ZXJpbmcKPiAgICAgIGdlbmVyaWMtY291bnRlcgo+IC0gICBsaWdodG52bS1wYmxrCj4gICAgICBt ZW1vcnktZGV2aWNlcy9pbmRleAo+ICAgICAgbWVuLWNoYW1lbGVvbi1idXMKPiAgICAgIG50Ygo+ IGRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbGlnaHRudm0tcGJsay5yc3Qg Yi9Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbGlnaHRudm0tcGJsay5yc3QKPiBkZWxldGVkIGZp bGUgbW9kZSAxMDA2NDQKPiBpbmRleCAxMDQwZWQxY2VjODEuLjAwMDAwMDAwMDAwMAo+IC0tLSBh L0RvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9saWdodG52bS1wYmxrLnJzdAo+ICsrKyAvZGV2L251 bGwKPiBAQCAtMSwyMSArMCwwIEBACj4gLXBibGs6IFBoeXNpY2FsIEJsb2NrIERldmljZSBUYXJn ZXQKPiAtPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo+IC0KPiAtcGJsayBpbXBs ZW1lbnRzIGEgZnVsbHkgYXNzb2NpYXRpdmUsIGhvc3QtYmFzZWQgRlRMIHRoYXQgZXhwb3NlcyBh IHRyYWRpdGlvbmFsCj4gLWJsb2NrIEkvTyBpbnRlcmZhY2UuIEl0cyBwcmltYXJ5IHJlc3BvbnNp YmlsaXRpZXMgYXJlOgo+IC0KPiAtICAtIE1hcCBsb2dpY2FsIGFkZHJlc3NlcyBvbnRvIHBoeXNp Y2FsIGFkZHJlc3NlcyAoNEtCIGdyYW51bGFyaXR5KSBpbiBhCj4gLSAgICBsb2dpY2FsLXRvLXBo eXNpY2FsIChMMlApIHRhYmxlLgo+IC0gIC0gTWFpbnRhaW4gdGhlIGludGVncml0eSBhbmQgY29u c2lzdGVuY3kgb2YgdGhlIEwyUCB0YWJsZSBhcyB3ZWxsIGFzIGl0cwo+IC0gICAgcmVjb3Zlcnkg ZnJvbSBub3JtYWwgdGVhciBkb3duIGFuZCBwb3dlciBvdXRhZ2UuCj4gLSAgLSBEZWFsIHdpdGgg Y29udHJvbGxlci0gYW5kIG1lZGlhLXNwZWNpZmljIGNvbnN0cmFpbnMuCj4gLSAgLSBIYW5kbGUg SS9PIGVycm9ycy4KPiAtICAtIEltcGxlbWVudCBnYXJiYWdlIGNvbGxlY3Rpb24uCj4gLSAgLSBN YWludGFpbiBjb25zaXN0ZW5jeSBhY3Jvc3MgdGhlIEkvTyBzdGFjayBkdXJpbmcgc3luY2hyb25p emF0aW9uIHBvaW50cy4KPiAtCj4gLUZvciBtb3JlIGluZm9ybWF0aW9uIHBsZWFzZSByZWZlciB0 bzoKPiAtCj4gLSAgaHR0cDovL2xpZ2h0bnZtLmlvCj4gLQo+IC13aGljaCBtYWludGFpbnMgdXBk YXRlZCBGQVFzLCBtYW51YWwgcGFnZXMsIHRlY2huaWNhbCBkb2N1bWVudGF0aW9uLCB0b29scywK PiAtY29udGFjdHMsIGV0Yy4KPiBkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi91c2Vyc3BhY2Ut YXBpL2lvY3RsL2lvY3RsLW51bWJlci5yc3QgYi9Eb2N1bWVudGF0aW9uL3VzZXJzcGFjZS1hcGkv aW9jdGwvaW9jdGwtbnVtYmVyLnJzdAo+IGluZGV4IDE0MDllNDBlNjM0NS4uYjcwNzBkNzZmMDc2 IDEwMDY0NAo+IC0tLSBhL0RvY3VtZW50YXRpb24vdXNlcnNwYWNlLWFwaS9pb2N0bC9pb2N0bC1u dW1iZXIucnN0Cj4gKysrIGIvRG9jdW1lbnRhdGlvbi91c2Vyc3BhY2UtYXBpL2lvY3RsL2lvY3Rs LW51bWJlci5yc3QKPiBAQCAtMTYwLDcgKzE2MCw2IEBAIENvZGUgIFNlcSMgICAgSW5jbHVkZSBG aWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbW1lbnRzCj4g ICAnSycgICBhbGwgICAgbGludXgva2QuaAo+ICAgJ0wnICAgMDAtMUYgIGxpbnV4L2xvb3AuaCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmxpY3QhCj4gICAn TCcgICAxMC0xRiAgZHJpdmVycy9zY3NpL21wdDNzYXMvbXB0M3Nhc19jdGwuaCAgICAgICAgICAg ICAgICAgICAgICBjb25mbGljdCEKPiAtJ0wnICAgMjAtMkYgIGxpbnV4L2xpZ2h0bnZtLmgKPiAg ICdMJyAgIEUwLUZGICBsaW51eC9wcGRkLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGVuY3J5cHRlZCBkaXNrIGRldmljZSBkcml2ZXIKPiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDxodHRwOi8vbGludXgwMS5nd2RnLmRlL35hbGF0aGFtL3BwZGQuaHRtbD4KPiAgICdNJyAgIGFs bCAgICBsaW51eC9zb3VuZGNhcmQuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbmZsaWN0IQo+IGRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCj4g aW5kZXggYzk0NjdkMjgzOWY1Li5lYzNmNTlhMTZjOWEgMTAwNjQ0Cj4gLS0tIGEvTUFJTlRBSU5F UlMKPiArKysgYi9NQUlOVEFJTkVSUwo+IEBAIC0xMDYwOSwxNSArMTA2MDksNiBAQCBGOglMSUNF TlNFUy8KPiAgIEY6CXNjcmlwdHMvc3BkeGNoZWNrLXRlc3Quc2gKPiAgIEY6CXNjcmlwdHMvc3Bk eGNoZWNrLnB5Cj4gICAKPiAtTElHSFROVk0gUExBVEZPUk0gU1VQUE9SVAo+IC1NOglNYXRpYXMg QmpvcmxpbmcgPG1iQGxpZ2h0bnZtLmlvPgo+IC1MOglsaW51eC1ibG9ja0B2Z2VyLmtlcm5lbC5v cmcKPiAtUzoJTWFpbnRhaW5lZAo+IC1XOglodHRwOi8vZ2l0aHViL09wZW5DaGFubmVsU1NECj4g LUY6CWRyaXZlcnMvbGlnaHRudm0vCj4gLUY6CWluY2x1ZGUvbGludXgvbGlnaHRudm0uaAo+IC1G OglpbmNsdWRlL3VhcGkvbGludXgvbGlnaHRudm0uaAo+IC0KPiAgIExJTkVBUiBSQU5HRVMgSEVM UEVSUwo+ICAgTToJTWFyayBCcm93biA8YnJvb25pZUBrZXJuZWwub3JnPgo+ICAgUjoJTWF0dGkg VmFpdHRpbmVuIDxtYXR0aS52YWl0dGluZW5AZmkucm9obWV1cm9wZS5jb20+Cj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvS2NvbmZpZyBiL2RyaXZlcnMvS2NvbmZpZwo+IGluZGV4IDhiYWQ2MzQxN2E1 MC4uMzBkMmRiMzdjYzg3IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvS2NvbmZpZwo+ICsrKyBiL2Ry aXZlcnMvS2NvbmZpZwo+IEBAIC01MSw4ICs1MSw2IEBAIHNvdXJjZSAiZHJpdmVycy9uZXQvS2Nv bmZpZyIKPiAgIAo+ICAgc291cmNlICJkcml2ZXJzL2lzZG4vS2NvbmZpZyIKPiAgIAo+IC1zb3Vy Y2UgImRyaXZlcnMvbGlnaHRudm0vS2NvbmZpZyIKPiAtCj4gICAjIGlucHV0IGJlZm9yZSBjaGFy IC0gY2hhci9qb3lzdGljayBkZXBlbmRzIG9uIGl0LiBBcyBkb2VzIFVTQi4KPiAgIAo+ICAgc291 cmNlICJkcml2ZXJzL2lucHV0L0tjb25maWciCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvTWFrZWZp bGUgYi9kcml2ZXJzL01ha2VmaWxlCj4gaW5kZXggMjdjMDE4YmRmNGRlLi5iZTVkNDBhZTE0ODgg MTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9NYWtlZmlsZQo+ICsrKyBiL2RyaXZlcnMvTWFrZWZpbGUK PiBAQCAtNzAsNyArNzAsNiBAQCBvYmotJChDT05GSUdfRkJfSTgxMCkgICAgICAgICAgICs9IHZp ZGVvL2ZiZGV2L2k4MTAvCj4gICBvYmotJChDT05GSUdfRkJfSU5URUwpICAgICAgICAgICs9IHZp ZGVvL2ZiZGV2L2ludGVsZmIvCj4gICAKPiAgIG9iai0kKENPTkZJR19QQVJQT1JUKQkJKz0gcGFy cG9ydC8KPiAtb2JqLSQoQ09ORklHX05WTSkJCSs9IGxpZ2h0bnZtLwo+ICAgb2JqLXkJCQkJKz0g YmFzZS8gYmxvY2svIG1pc2MvIG1mZC8gbmZjLwo+ICAgb2JqLSQoQ09ORklHX0xJQk5WRElNTSkJ CSs9IG52ZGltbS8KPiAgIG9iai0kKENPTkZJR19EQVgpCQkrPSBkYXgvCj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvbGlnaHRudm0vS2NvbmZpZyBiL2RyaXZlcnMvbGlnaHRudm0vS2NvbmZpZwo+IGRl bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDA0Y2FhMGYyZDQ0NS4uMDAwMDAwMDAwMDAw Cj4gLS0tIGEvZHJpdmVycy9saWdodG52bS9LY29uZmlnCj4gKysrIC9kZXYvbnVsbAo+IEBAIC0x LDQ0ICswLDAgQEAKPiAtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5Cj4g LSMKPiAtIyBPcGVuLUNoYW5uZWwgU1NEIE5WTSBjb25maWd1cmF0aW9uCj4gLSMKPiAtCj4gLW1l bnVjb25maWcgTlZNCj4gLQlib29sICJPcGVuLUNoYW5uZWwgU1NEIHRhcmdldCBzdXBwb3J0IChE RVBSRUNBVEVEKSIKPiAtCWRlcGVuZHMgb24gQkxPQ0sKPiAtCWhlbHAKPiAtCSAgU2F5IFkgaGVy ZSB0byBnZXQgdG8gZW5hYmxlIE9wZW4tY2hhbm5lbCBTU0RzLgo+IC0KPiAtCSAgT3Blbi1DaGFu bmVsIFNTRHMgaW1wbGVtZW50IGEgc2V0IG9mIGV4dGVuc2lvbiB0byBTU0RzLCB0aGF0Cj4gLQkg IGV4cG9zZXMgZGlyZWN0IGFjY2VzcyB0byB0aGUgdW5kZXJseWluZyBub24tdm9sYXRpbGUgbWVt b3J5Lgo+IC0KPiAtCSAgSWYgeW91IHNheSBOLCBhbGwgb3B0aW9ucyBpbiB0aGlzIHN1Ym1lbnUg d2lsbCBiZSBza2lwcGVkIGFuZCBkaXNhYmxlZAo+IC0JICBvbmx5IGRvIHRoaXMgaWYgeW91IGtu b3cgd2hhdCB5b3UgYXJlIGRvaW5nLgo+IC0KPiAtCSAgVGhpcyBjb2RlIGlzIGRlcHJlY2F0ZWQg YW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBMaW51eCA1LjE1Lgo+IC0KPiAtaWYgTlZNCj4gLQo+IC1j b25maWcgTlZNX1BCTEsKPiAtCXRyaXN0YXRlICJQaHlzaWNhbCBCbG9jayBEZXZpY2UgT3Blbi1D aGFubmVsIFNTRCB0YXJnZXQiCj4gLQlzZWxlY3QgQ1JDMzIKPiAtCWhlbHAKPiAtCSAgQWxsb3dz IGFuIG9wZW4tY2hhbm5lbCBTU0QgdG8gYmUgZXhwb3NlZCBhcyBhIGJsb2NrIGRldmljZSB0byB0 aGUKPiAtCSAgaG9zdC4gVGhlIHRhcmdldCBhc3N1bWVzIHRoZSBkZXZpY2UgZXhwb3NlcyByYXcg Zmxhc2ggYW5kIG11c3QgYmUKPiAtCSAgZXhwbGljaXRseSBtYW5hZ2VkIGJ5IHRoZSBob3N0Lgo+ IC0KPiAtCSAgUGxlYXNlIG5vdGUgdGhlIGRpc2sgZm9ybWF0IGlzIGNvbnNpZGVyZWQgRVhQRVJJ TUVOVEFMIGZvciBub3cuCj4gLQo+IC1pZiBOVk1fUEJMSwo+IC0KPiAtY29uZmlnIE5WTV9QQkxL X0RFQlVHCj4gLQlib29sICJQQmxrIERlYnVnIFN1cHBvcnQiCj4gLQlkZWZhdWx0IG4KPiAtCWhl bHAKPiAtCSAgRW5hYmxlcyBkZWJ1ZyBzdXBwb3J0IGZvciBwYmxrLiBUaGlzIGluY2x1ZGVzIGV4 dHJhIGNoZWNrcywgbW9yZQo+IC0JICB2b2NhbCBlcnJvciBtZXNzYWdlcywgYW5kIGV4dHJhIHRy YWNraW5nIGZpZWxkcyBpbiB0aGUgcGJsayBzeXNmcwo+IC0JICBlbnRyaWVzLgo+IC0KPiAtZW5k aWYgIyBOVk1fUEJMS19ERUJVRwo+IC0KPiAtZW5kaWYgIyBOVk0KPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9saWdodG52bS9NYWtlZmlsZSBiL2RyaXZlcnMvbGlnaHRudm0vTWFrZWZpbGUKPiBkZWxl dGVkIGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCA5N2Q5ZDdjNzE1NTAuLjAwMDAwMDAwMDAwMAo+ IC0tLSBhL2RyaXZlcnMvbGlnaHRudm0vTWFrZWZpbGUKPiArKysgL2Rldi9udWxsCj4gQEAgLTEs MTEgKzAsMCBAQAo+IC0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCj4gLSMKPiAt IyBNYWtlZmlsZSBmb3IgT3Blbi1DaGFubmVsIFNTRHMuCj4gLSMKPiAtCj4gLW9iai0kKENPTkZJ R19OVk0pCQk6PSBjb3JlLm8KPiAtb2JqLSQoQ09ORklHX05WTV9QQkxLKQkJKz0gcGJsay5vCj4g LXBibGsteQkJCQk6PSBwYmxrLWluaXQubyBwYmxrLWNvcmUubyBwYmxrLXJiLm8gXAo+IC0JCQkJ ICAgcGJsay13cml0ZS5vIHBibGstY2FjaGUubyBwYmxrLXJlYWQubyBcCj4gLQkJCQkgICBwYmxr LWdjLm8gcGJsay1yZWNvdmVyeS5vIHBibGstbWFwLm8gXAo+IC0JCQkJICAgcGJsay1ybC5vIHBi bGstc3lzZnMubwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2xpZ2h0bnZtL2NvcmUuYyBiL2RyaXZl cnMvbGlnaHRudm0vY29yZS5jCj4gZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggY2Y4 YTc1NDk0ODMzLi4wMDAwMDAwMDAwMDAKPiAtLS0gYS9kcml2ZXJzL2xpZ2h0bnZtL2NvcmUuYwo+ ICsrKyAvZGV2L251bGwKPiBAQCAtMSwxNDQwICswLDAgQEAKPiAtLy8gU1BEWC1MaWNlbnNlLUlk ZW50aWZpZXI6IEdQTC0yLjAtb25seQo+IC0vKgo+IC0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgSVQg VW5pdmVyc2l0eSBvZiBDb3BlbmhhZ2VuLiBBbGwgcmlnaHRzIHJlc2VydmVkLgo+IC0gKiBJbml0 aWFsIHJlbGVhc2U6IE1hdGlhcyBCam9ybGluZyA8bUBiam9ybGluZy5tZT4KPiAtICovCj4gLQo+ IC0jZGVmaW5lIHByX2ZtdChmbXQpICJudm06ICIgZm10Cj4gLQo+IC0jaW5jbHVkZSA8bGludXgv bGlzdC5oPgo+IC0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KPiAtI2luY2x1ZGUgPGxpbnV4L3Nl bS5oPgo+IC0jaW5jbHVkZSA8bGludXgvYml0bWFwLmg+Cj4gLSNpbmNsdWRlIDxsaW51eC9tb2R1 bGUuaD4KPiAtI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+Cj4gLSNpbmNsdWRlIDxsaW51 eC9taXNjZGV2aWNlLmg+Cj4gLSNpbmNsdWRlIDxsaW51eC9saWdodG52bS5oPgo+IC0jaW5jbHVk ZSA8bGludXgvc2NoZWQvc3lzY3RsLmg+Cj4gLQo+IC1zdGF0aWMgTElTVF9IRUFEKG52bV90Z3Rf dHlwZXMpOwo+IC1zdGF0aWMgREVDTEFSRV9SV1NFTShudm1fdGd0dF9sb2NrKTsKPiAtc3RhdGlj IExJU1RfSEVBRChudm1fZGV2aWNlcyk7Cj4gLXN0YXRpYyBERUNMQVJFX1JXU0VNKG52bV9sb2Nr KTsKPiAtCj4gLS8qIE1hcCBiZXR3ZWVuIHZpcnR1YWwgYW5kIHBoeXNpY2FsIGNoYW5uZWwgYW5k IGx1biAqLwo+IC1zdHJ1Y3QgbnZtX2NoX21hcCB7Cj4gLQlpbnQgY2hfb2ZmOwo+IC0JaW50IG51 bV9sdW47Cj4gLQlpbnQgKmx1bl9vZmZzOwo+IC19Owo+IC0KPiAtc3RydWN0IG52bV9kZXZfbWFw IHsKPiAtCXN0cnVjdCBudm1fY2hfbWFwICpjaG5sczsKPiAtCWludCBudW1fY2g7Cj4gLX07Cj4g LQo+IC1zdGF0aWMgdm9pZCBudm1fZnJlZShzdHJ1Y3Qga3JlZiAqcmVmKTsKPiAtCj4gLXN0YXRp YyBzdHJ1Y3QgbnZtX3RhcmdldCAqbnZtX2ZpbmRfdGFyZ2V0KHN0cnVjdCBudm1fZGV2ICpkZXYs IGNvbnN0IGNoYXIgKm5hbWUpCj4gLXsKPiAtCXN0cnVjdCBudm1fdGFyZ2V0ICp0Z3Q7Cj4gLQo+ IC0JbGlzdF9mb3JfZWFjaF9lbnRyeSh0Z3QsICZkZXYtPnRhcmdldHMsIGxpc3QpCj4gLQkJaWYg KCFzdHJjbXAobmFtZSwgdGd0LT5kaXNrLT5kaXNrX25hbWUpKQo+IC0JCQlyZXR1cm4gdGd0Owo+ IC0KPiAtCXJldHVybiBOVUxMOwo+IC19Cj4gLQo+IC1zdGF0aWMgYm9vbCBudm1fdGFyZ2V0X2V4 aXN0cyhjb25zdCBjaGFyICpuYW1lKQo+IC17Cj4gLQlzdHJ1Y3QgbnZtX2RldiAqZGV2Owo+IC0J c3RydWN0IG52bV90YXJnZXQgKnRndDsKPiAtCWJvb2wgcmV0ID0gZmFsc2U7Cj4gLQo+IC0JZG93 bl93cml0ZSgmbnZtX2xvY2spOwo+IC0JbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZudm1fZGV2 aWNlcywgZGV2aWNlcykgewo+IC0JCW11dGV4X2xvY2soJmRldi0+bWxvY2spOwo+IC0JCWxpc3Rf Zm9yX2VhY2hfZW50cnkodGd0LCAmZGV2LT50YXJnZXRzLCBsaXN0KSB7Cj4gLQkJCWlmICghc3Ry Y21wKG5hbWUsIHRndC0+ZGlzay0+ZGlza19uYW1lKSkgewo+IC0JCQkJcmV0ID0gdHJ1ZTsKPiAt CQkJCW11dGV4X3VubG9jaygmZGV2LT5tbG9jayk7Cj4gLQkJCQlnb3RvIG91dDsKPiAtCQkJfQo+ IC0JCX0KPiAtCQltdXRleF91bmxvY2soJmRldi0+bWxvY2spOwo+IC0JfQo+IC0KPiAtb3V0Ogo+ IC0JdXBfd3JpdGUoJm52bV9sb2NrKTsKPiAtCXJldHVybiByZXQ7Cj4gLX0KPiAtCj4gLXN0YXRp YyBpbnQgbnZtX3Jlc2VydmVfbHVucyhzdHJ1Y3QgbnZtX2RldiAqZGV2LCBpbnQgbHVuX2JlZ2lu LCBpbnQgbHVuX2VuZCkKPiAtewo+IC0JaW50IGk7Cj4gLQo+IC0JZm9yIChpID0gbHVuX2JlZ2lu OyBpIDw9IGx1bl9lbmQ7IGkrKykgewo+IC0JCWlmICh0ZXN0X2FuZF9zZXRfYml0KGksIGRldi0+ bHVuX21hcCkpIHsKPiAtCQkJcHJfZXJyKCJsdW4gJWQgYWxyZWFkeSBhbGxvY2F0ZWRcbiIsIGkp Owo+IC0JCQlnb3RvIGVycjsKPiAtCQl9Cj4gLQl9Cj4gLQo+IC0JcmV0dXJuIDA7Cj4gLWVycjoK PiAtCXdoaWxlICgtLWkgPj0gbHVuX2JlZ2luKQo+IC0JCWNsZWFyX2JpdChpLCBkZXYtPmx1bl9t YXApOwo+IC0KPiAtCXJldHVybiAtRUJVU1k7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIG52bV9y ZWxlYXNlX2x1bnNfZXJyKHN0cnVjdCBudm1fZGV2ICpkZXYsIGludCBsdW5fYmVnaW4sCj4gLQkJ CQkgaW50IGx1bl9lbmQpCj4gLXsKPiAtCWludCBpOwo+IC0KPiAtCWZvciAoaSA9IGx1bl9iZWdp bjsgaSA8PSBsdW5fZW5kOyBpKyspCj4gLQkJV0FSTl9PTighdGVzdF9hbmRfY2xlYXJfYml0KGks IGRldi0+bHVuX21hcCkpOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBudm1fcmVtb3ZlX3RndF9k ZXYoc3RydWN0IG52bV90Z3RfZGV2ICp0Z3RfZGV2LCBpbnQgY2xlYXIpCj4gLXsKPiAtCXN0cnVj dCBudm1fZGV2ICpkZXYgPSB0Z3RfZGV2LT5wYXJlbnQ7Cj4gLQlzdHJ1Y3QgbnZtX2Rldl9tYXAg KmRldl9tYXAgPSB0Z3RfZGV2LT5tYXA7Cj4gLQlpbnQgaSwgajsKPiAtCj4gLQlmb3IgKGkgPSAw OyBpIDwgZGV2X21hcC0+bnVtX2NoOyBpKyspIHsKPiAtCQlzdHJ1Y3QgbnZtX2NoX21hcCAqY2hf bWFwID0gJmRldl9tYXAtPmNobmxzW2ldOwo+IC0JCWludCAqbHVuX29mZnMgPSBjaF9tYXAtPmx1 bl9vZmZzOwo+IC0JCWludCBjaCA9IGkgKyBjaF9tYXAtPmNoX29mZjsKPiAtCj4gLQkJaWYgKGNs ZWFyKSB7Cj4gLQkJCWZvciAoaiA9IDA7IGogPCBjaF9tYXAtPm51bV9sdW47IGorKykgewo+IC0J CQkJaW50IGx1biA9IGogKyBsdW5fb2Zmc1tqXTsKPiAtCQkJCWludCBsdW5pZCA9IChjaCAqIGRl di0+Z2VvLm51bV9sdW4pICsgbHVuOwo+IC0KPiAtCQkJCVdBUk5fT04oIXRlc3RfYW5kX2NsZWFy X2JpdChsdW5pZCwKPiAtCQkJCQkJCWRldi0+bHVuX21hcCkpOwo+IC0JCQl9Cj4gLQkJfQo+IC0K PiAtCQlrZnJlZShjaF9tYXAtPmx1bl9vZmZzKTsKPiAtCX0KPiAtCj4gLQlrZnJlZShkZXZfbWFw LT5jaG5scyk7Cj4gLQlrZnJlZShkZXZfbWFwKTsKPiAtCj4gLQlrZnJlZSh0Z3RfZGV2LT5sdW5z KTsKPiAtCWtmcmVlKHRndF9kZXYpOwo+IC19Cj4gLQo+IC1zdGF0aWMgc3RydWN0IG52bV90Z3Rf ZGV2ICpudm1fY3JlYXRlX3RndF9kZXYoc3RydWN0IG52bV9kZXYgKmRldiwKPiAtCQkJCQkgICAg ICB1MTYgbHVuX2JlZ2luLCB1MTYgbHVuX2VuZCwKPiAtCQkJCQkgICAgICB1MTYgb3ApCj4gLXsK PiAtCXN0cnVjdCBudm1fdGd0X2RldiAqdGd0X2RldiA9IE5VTEw7Cj4gLQlzdHJ1Y3QgbnZtX2Rl dl9tYXAgKmRldl9ybWFwID0gZGV2LT5ybWFwOwo+IC0Jc3RydWN0IG52bV9kZXZfbWFwICpkZXZf bWFwOwo+IC0Jc3RydWN0IHBwYV9hZGRyICpsdW5zOwo+IC0JaW50IG51bV9sdW4gPSBsdW5fZW5k IC0gbHVuX2JlZ2luICsgMTsKPiAtCWludCBsdW5zX2xlZnQgPSBudW1fbHVuOwo+IC0JaW50IG51 bV9jaCA9IG51bV9sdW4gLyBkZXYtPmdlby5udW1fbHVuOwo+IC0JaW50IG51bV9jaF9tb2QgPSBu dW1fbHVuICUgZGV2LT5nZW8ubnVtX2x1bjsKPiAtCWludCBiY2ggPSBsdW5fYmVnaW4gLyBkZXYt Pmdlby5udW1fbHVuOwo+IC0JaW50IGJsdW4gPSBsdW5fYmVnaW4gJSBkZXYtPmdlby5udW1fbHVu Owo+IC0JaW50IGx1bmlkID0gMDsKPiAtCWludCBsdW5fYmFsYW5jZWQgPSAxOwo+IC0JaW50IHNl Y19wZXJfbHVuLCBwcmV2X251bV9sdW47Cj4gLQlpbnQgaSwgajsKPiAtCj4gLQludW1fY2ggPSAo bnVtX2NoX21vZCA9PSAwKSA/IG51bV9jaCA6IG51bV9jaCArIDE7Cj4gLQo+IC0JZGV2X21hcCA9 IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBudm1fZGV2X21hcCksIEdGUF9LRVJORUwpOwo+IC0JaWYg KCFkZXZfbWFwKQo+IC0JCWdvdG8gZXJyX2RldjsKPiAtCj4gLQlkZXZfbWFwLT5jaG5scyA9IGtj YWxsb2MobnVtX2NoLCBzaXplb2Yoc3RydWN0IG52bV9jaF9tYXApLCBHRlBfS0VSTkVMKTsKPiAt CWlmICghZGV2X21hcC0+Y2hubHMpCj4gLQkJZ290byBlcnJfY2hubHM7Cj4gLQo+IC0JbHVucyA9 IGtjYWxsb2MobnVtX2x1biwgc2l6ZW9mKHN0cnVjdCBwcGFfYWRkciksIEdGUF9LRVJORUwpOwo+ IC0JaWYgKCFsdW5zKQo+IC0JCWdvdG8gZXJyX2x1bnM7Cj4gLQo+IC0JcHJldl9udW1fbHVuID0g KGx1bnNfbGVmdCA+IGRldi0+Z2VvLm51bV9sdW4pID8KPiAtCQkJCQlkZXYtPmdlby5udW1fbHVu IDogbHVuc19sZWZ0Owo+IC0JZm9yIChpID0gMDsgaSA8IG51bV9jaDsgaSsrKSB7Cj4gLQkJc3Ry dWN0IG52bV9jaF9tYXAgKmNoX3JtYXAgPSAmZGV2X3JtYXAtPmNobmxzW2kgKyBiY2hdOwo+IC0J CWludCAqbHVuX3JvZmZzID0gY2hfcm1hcC0+bHVuX29mZnM7Cj4gLQkJc3RydWN0IG52bV9jaF9t YXAgKmNoX21hcCA9ICZkZXZfbWFwLT5jaG5sc1tpXTsKPiAtCQlpbnQgKmx1bl9vZmZzOwo+IC0J CWludCBsdW5zX2luX2NobmwgPSAobHVuc19sZWZ0ID4gZGV2LT5nZW8ubnVtX2x1bikgPwo+IC0J CQkJCWRldi0+Z2VvLm51bV9sdW4gOiBsdW5zX2xlZnQ7Cj4gLQo+IC0JCWlmIChsdW5fYmFsYW5j ZWQgJiYgcHJldl9udW1fbHVuICE9IGx1bnNfaW5fY2hubCkKPiAtCQkJbHVuX2JhbGFuY2VkID0g MDsKPiAtCj4gLQkJY2hfbWFwLT5jaF9vZmYgPSBjaF9ybWFwLT5jaF9vZmYgPSBiY2g7Cj4gLQkJ Y2hfbWFwLT5udW1fbHVuID0gbHVuc19pbl9jaG5sOwo+IC0KPiAtCQlsdW5fb2ZmcyA9IGtjYWxs b2MobHVuc19pbl9jaG5sLCBzaXplb2YoaW50KSwgR0ZQX0tFUk5FTCk7Cj4gLQkJaWYgKCFsdW5f b2ZmcykKPiAtCQkJZ290byBlcnJfY2g7Cj4gLQo+IC0JCWZvciAoaiA9IDA7IGogPCBsdW5zX2lu X2Nobmw7IGorKykgewo+IC0JCQlsdW5zW2x1bmlkXS5wcGEgPSAwOwo+IC0JCQlsdW5zW2x1bmlk XS5hLmNoID0gaTsKPiAtCQkJbHVuc1tsdW5pZCsrXS5hLmx1biA9IGo7Cj4gLQo+IC0JCQlsdW5f b2Zmc1tqXSA9IGJsdW47Cj4gLQkJCWx1bl9yb2Zmc1tqICsgYmx1bl0gPSBibHVuOwo+IC0JCX0K PiAtCj4gLQkJY2hfbWFwLT5sdW5fb2ZmcyA9IGx1bl9vZmZzOwo+IC0KPiAtCQkvKiB3aGVuIHN0 YXJ0aW5nIGEgbmV3IGNoYW5uZWwsIGx1biBvZmZzZXQgaXMgcmVzZXQgKi8KPiAtCQlibHVuID0g MDsKPiAtCQlsdW5zX2xlZnQgLT0gbHVuc19pbl9jaG5sOwo+IC0JfQo+IC0KPiAtCWRldl9tYXAt Pm51bV9jaCA9IG51bV9jaDsKPiAtCj4gLQl0Z3RfZGV2ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0 IG52bV90Z3RfZGV2KSwgR0ZQX0tFUk5FTCk7Cj4gLQlpZiAoIXRndF9kZXYpCj4gLQkJZ290byBl cnJfY2g7Cj4gLQo+IC0JLyogSW5oZXJpdCBkZXZpY2UgZ2VvbWV0cnkgZnJvbSBwYXJlbnQgKi8K PiAtCW1lbWNweSgmdGd0X2Rldi0+Z2VvLCAmZGV2LT5nZW8sIHNpemVvZihzdHJ1Y3QgbnZtX2dl bykpOwo+IC0KPiAtCS8qIFRhcmdldCBkZXZpY2Ugb25seSBvd25zIGEgcG9ydGlvbiBvZiB0aGUg cGh5c2ljYWwgZGV2aWNlICovCj4gLQl0Z3RfZGV2LT5nZW8ubnVtX2NoID0gbnVtX2NoOwo+IC0J dGd0X2Rldi0+Z2VvLm51bV9sdW4gPSAobHVuX2JhbGFuY2VkKSA/IHByZXZfbnVtX2x1biA6IC0x Owo+IC0JdGd0X2Rldi0+Z2VvLmFsbF9sdW5zID0gbnVtX2x1bjsKPiAtCXRndF9kZXYtPmdlby5h bGxfY2h1bmtzID0gbnVtX2x1biAqIGRldi0+Z2VvLm51bV9jaGs7Cj4gLQo+IC0JdGd0X2Rldi0+ Z2VvLm9wID0gb3A7Cj4gLQo+IC0Jc2VjX3Blcl9sdW4gPSBkZXYtPmdlby5jbGJhICogZGV2LT5n ZW8ubnVtX2NoazsKPiAtCXRndF9kZXYtPmdlby50b3RhbF9zZWNzID0gbnVtX2x1biAqIHNlY19w ZXJfbHVuOwo+IC0KPiAtCXRndF9kZXYtPnEgPSBkZXYtPnE7Cj4gLQl0Z3RfZGV2LT5tYXAgPSBk ZXZfbWFwOwo+IC0JdGd0X2Rldi0+bHVucyA9IGx1bnM7Cj4gLQl0Z3RfZGV2LT5wYXJlbnQgPSBk ZXY7Cj4gLQo+IC0JcmV0dXJuIHRndF9kZXY7Cj4gLWVycl9jaDoKPiAtCXdoaWxlICgtLWkgPj0g MCkKPiAtCQlrZnJlZShkZXZfbWFwLT5jaG5sc1tpXS5sdW5fb2Zmcyk7Cj4gLQlrZnJlZShsdW5z KTsKPiAtZXJyX2x1bnM6Cj4gLQlrZnJlZShkZXZfbWFwLT5jaG5scyk7Cj4gLWVycl9jaG5sczoK PiAtCWtmcmVlKGRldl9tYXApOwo+IC1lcnJfZGV2Ogo+IC0JcmV0dXJuIHRndF9kZXY7Cj4gLX0K PiAtCj4gLXN0YXRpYyBzdHJ1Y3QgbnZtX3RndF90eXBlICpfX252bV9maW5kX3RhcmdldF90eXBl KGNvbnN0IGNoYXIgKm5hbWUpCj4gLXsKPiAtCXN0cnVjdCBudm1fdGd0X3R5cGUgKnR0Owo+IC0K PiAtCWxpc3RfZm9yX2VhY2hfZW50cnkodHQsICZudm1fdGd0X3R5cGVzLCBsaXN0KQo+IC0JCWlm ICghc3RyY21wKG5hbWUsIHR0LT5uYW1lKSkKPiAtCQkJcmV0dXJuIHR0Owo+IC0KPiAtCXJldHVy biBOVUxMOwo+IC19Cj4gLQo+IC1zdGF0aWMgc3RydWN0IG52bV90Z3RfdHlwZSAqbnZtX2ZpbmRf dGFyZ2V0X3R5cGUoY29uc3QgY2hhciAqbmFtZSkKPiAtewo+IC0Jc3RydWN0IG52bV90Z3RfdHlw ZSAqdHQ7Cj4gLQo+IC0JZG93bl93cml0ZSgmbnZtX3RndHRfbG9jayk7Cj4gLQl0dCA9IF9fbnZt X2ZpbmRfdGFyZ2V0X3R5cGUobmFtZSk7Cj4gLQl1cF93cml0ZSgmbnZtX3RndHRfbG9jayk7Cj4g LQo+IC0JcmV0dXJuIHR0Owo+IC19Cj4gLQo+IC1zdGF0aWMgaW50IG52bV9jb25maWdfY2hlY2tf bHVucyhzdHJ1Y3QgbnZtX2dlbyAqZ2VvLCBpbnQgbHVuX2JlZ2luLAo+IC0JCQkJIGludCBsdW5f ZW5kKQo+IC17Cj4gLQlpZiAobHVuX2JlZ2luID4gbHVuX2VuZCB8fCBsdW5fZW5kID49IGdlby0+ YWxsX2x1bnMpIHsKPiAtCQlwcl9lcnIoImx1biBvdXQgb2YgYm91bmQgKCV1OiV1ID4gJXUpXG4i LAo+IC0JCQlsdW5fYmVnaW4sIGx1bl9lbmQsIGdlby0+YWxsX2x1bnMgLSAxKTsKPiAtCQlyZXR1 cm4gLUVJTlZBTDsKPiAtCX0KPiAtCj4gLQlyZXR1cm4gMDsKPiAtfQo+IC0KPiAtc3RhdGljIGlu dCBfX252bV9jb25maWdfc2ltcGxlKHN0cnVjdCBudm1fZGV2ICpkZXYsCj4gLQkJCSAgICAgICBz dHJ1Y3QgbnZtX2lvY3RsX2NyZWF0ZV9zaW1wbGUgKnMpCj4gLXsKPiAtCXN0cnVjdCBudm1fZ2Vv ICpnZW8gPSAmZGV2LT5nZW87Cj4gLQo+IC0JaWYgKHMtPmx1bl9iZWdpbiA9PSAtMSAmJiBzLT5s dW5fZW5kID09IC0xKSB7Cj4gLQkJcy0+bHVuX2JlZ2luID0gMDsKPiAtCQlzLT5sdW5fZW5kID0g Z2VvLT5hbGxfbHVucyAtIDE7Cj4gLQl9Cj4gLQo+IC0JcmV0dXJuIG52bV9jb25maWdfY2hlY2tf bHVucyhnZW8sIHMtPmx1bl9iZWdpbiwgcy0+bHVuX2VuZCk7Cj4gLX0KPiAtCj4gLXN0YXRpYyBp bnQgX19udm1fY29uZmlnX2V4dGVuZGVkKHN0cnVjdCBudm1fZGV2ICpkZXYsCj4gLQkJCQkgc3Ry dWN0IG52bV9pb2N0bF9jcmVhdGVfZXh0ZW5kZWQgKmUpCj4gLXsKPiAtCWlmIChlLT5sdW5fYmVn aW4gPT0gMHhGRkZGICYmIGUtPmx1bl9lbmQgPT0gMHhGRkZGKSB7Cj4gLQkJZS0+bHVuX2JlZ2lu ID0gMDsKPiAtCQllLT5sdW5fZW5kID0gZGV2LT5nZW8uYWxsX2x1bnMgLSAxOwo+IC0JfQo+IC0K PiAtCS8qIG9wIG5vdCBzZXQgZmFsbHMgaW50byB0YXJnZXQncyBkZWZhdWx0ICovCj4gLQlpZiAo ZS0+b3AgPT0gMHhGRkZGKSB7Cj4gLQkJZS0+b3AgPSBOVk1fVEFSR0VUX0RFRkFVTFRfT1A7Cj4g LQl9IGVsc2UgaWYgKGUtPm9wIDwgTlZNX1RBUkdFVF9NSU5fT1AgfHwgZS0+b3AgPiBOVk1fVEFS R0VUX01BWF9PUCkgewo+IC0JCXByX2VycigiaW52YWxpZCBvdmVyIHByb3Zpc2lvbmluZyB2YWx1 ZVxuIik7Cj4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4gLQl9Cj4gLQo+IC0JcmV0dXJuIG52bV9jb25m aWdfY2hlY2tfbHVucygmZGV2LT5nZW8sIGUtPmx1bl9iZWdpbiwgZS0+bHVuX2VuZCk7Cj4gLX0K PiAtCj4gLXN0YXRpYyBpbnQgbnZtX2NyZWF0ZV90Z3Qoc3RydWN0IG52bV9kZXYgKmRldiwgc3Ry dWN0IG52bV9pb2N0bF9jcmVhdGUgKmNyZWF0ZSkKPiAtewo+IC0Jc3RydWN0IG52bV9pb2N0bF9j cmVhdGVfZXh0ZW5kZWQgZTsKPiAtCXN0cnVjdCBnZW5kaXNrICp0ZGlzazsKPiAtCXN0cnVjdCBu dm1fdGd0X3R5cGUgKnR0Owo+IC0Jc3RydWN0IG52bV90YXJnZXQgKnQ7Cj4gLQlzdHJ1Y3QgbnZt X3RndF9kZXYgKnRndF9kZXY7Cj4gLQl2b2lkICp0YXJnZXRkYXRhOwo+IC0JdW5zaWduZWQgaW50 IG1kdHM7Cj4gLQlpbnQgcmV0Owo+IC0KPiAtCXN3aXRjaCAoY3JlYXRlLT5jb25mLnR5cGUpIHsK PiAtCWNhc2UgTlZNX0NPTkZJR19UWVBFX1NJTVBMRToKPiAtCQlyZXQgPSBfX252bV9jb25maWdf c2ltcGxlKGRldiwgJmNyZWF0ZS0+Y29uZi5zKTsKPiAtCQlpZiAocmV0KQo+IC0JCQlyZXR1cm4g cmV0Owo+IC0KPiAtCQllLmx1bl9iZWdpbiA9IGNyZWF0ZS0+Y29uZi5zLmx1bl9iZWdpbjsKPiAt CQllLmx1bl9lbmQgPSBjcmVhdGUtPmNvbmYucy5sdW5fZW5kOwo+IC0JCWUub3AgPSBOVk1fVEFS R0VUX0RFRkFVTFRfT1A7Cj4gLQkJYnJlYWs7Cj4gLQljYXNlIE5WTV9DT05GSUdfVFlQRV9FWFRF TkRFRDoKPiAtCQlyZXQgPSBfX252bV9jb25maWdfZXh0ZW5kZWQoZGV2LCAmY3JlYXRlLT5jb25m LmUpOwo+IC0JCWlmIChyZXQpCj4gLQkJCXJldHVybiByZXQ7Cj4gLQo+IC0JCWUgPSBjcmVhdGUt PmNvbmYuZTsKPiAtCQlicmVhazsKPiAtCWRlZmF1bHQ6Cj4gLQkJcHJfZXJyKCJjb25maWcgdHlw ZSBub3QgdmFsaWRcbiIpOwo+IC0JCXJldHVybiAtRUlOVkFMOwo+IC0JfQo+IC0KPiAtCXR0ID0g bnZtX2ZpbmRfdGFyZ2V0X3R5cGUoY3JlYXRlLT50Z3R0eXBlKTsKPiAtCWlmICghdHQpIHsKPiAt CQlwcl9lcnIoInRhcmdldCB0eXBlICVzIG5vdCBmb3VuZFxuIiwgY3JlYXRlLT50Z3R0eXBlKTsK PiAtCQlyZXR1cm4gLUVJTlZBTDsKPiAtCX0KPiAtCj4gLQlpZiAoKHR0LT5mbGFncyAmIE5WTV9U R1RfRl9IT1NUX0wyUCkgIT0gKGRldi0+Z2VvLmRvbSAmIE5WTV9SU1BfTDJQKSkgewo+IC0JCXBy X2VycigiZGV2aWNlIGlzIGluY29tcGF0aWJsZSB3aXRoIHRhcmdldCBMMlAgdHlwZS5cbiIpOwo+ IC0JCXJldHVybiAtRUlOVkFMOwo+IC0JfQo+IC0KPiAtCWlmIChudm1fdGFyZ2V0X2V4aXN0cyhj cmVhdGUtPnRndG5hbWUpKSB7Cj4gLQkJcHJfZXJyKCJ0YXJnZXQgbmFtZSBhbHJlYWR5IGV4aXN0 cyAoJXMpXG4iLAo+IC0JCQkJCQkJY3JlYXRlLT50Z3RuYW1lKTsKPiAtCQlyZXR1cm4gLUVJTlZB TDsKPiAtCX0KPiAtCj4gLQlyZXQgPSBudm1fcmVzZXJ2ZV9sdW5zKGRldiwgZS5sdW5fYmVnaW4s IGUubHVuX2VuZCk7Cj4gLQlpZiAocmV0KQo+IC0JCXJldHVybiByZXQ7Cj4gLQo+IC0JdCA9IGtt YWxsb2Moc2l6ZW9mKHN0cnVjdCBudm1fdGFyZ2V0KSwgR0ZQX0tFUk5FTCk7Cj4gLQlpZiAoIXQp IHsKPiAtCQlyZXQgPSAtRU5PTUVNOwo+IC0JCWdvdG8gZXJyX3Jlc2VydmU7Cj4gLQl9Cj4gLQo+ IC0JdGd0X2RldiA9IG52bV9jcmVhdGVfdGd0X2RldihkZXYsIGUubHVuX2JlZ2luLCBlLmx1bl9l bmQsIGUub3ApOwo+IC0JaWYgKCF0Z3RfZGV2KSB7Cj4gLQkJcHJfZXJyKCJjb3VsZCBub3QgY3Jl YXRlIHRhcmdldCBkZXZpY2VcbiIpOwo+IC0JCXJldCA9IC1FTk9NRU07Cj4gLQkJZ290byBlcnJf dDsKPiAtCX0KPiAtCj4gLQl0ZGlzayA9IGJsa19hbGxvY19kaXNrKGRldi0+cS0+bm9kZSk7Cj4g LQlpZiAoIXRkaXNrKSB7Cj4gLQkJcmV0ID0gLUVOT01FTTsKPiAtCQlnb3RvIGVycl9kZXY7Cj4g LQl9Cj4gLQo+IC0Jc3RybGNweSh0ZGlzay0+ZGlza19uYW1lLCBjcmVhdGUtPnRndG5hbWUsIHNp emVvZih0ZGlzay0+ZGlza19uYW1lKSk7Cj4gLQl0ZGlzay0+bWFqb3IgPSAwOwo+IC0JdGRpc2st PmZpcnN0X21pbm9yID0gMDsKPiAtCXRkaXNrLT5mb3BzID0gdHQtPmJvcHM7Cj4gLQo+IC0JdGFy Z2V0ZGF0YSA9IHR0LT5pbml0KHRndF9kZXYsIHRkaXNrLCBjcmVhdGUtPmZsYWdzKTsKPiAtCWlm IChJU19FUlIodGFyZ2V0ZGF0YSkpIHsKPiAtCQlyZXQgPSBQVFJfRVJSKHRhcmdldGRhdGEpOwo+ IC0JCWdvdG8gZXJyX2luaXQ7Cj4gLQl9Cj4gLQo+IC0JdGRpc2stPnByaXZhdGVfZGF0YSA9IHRh cmdldGRhdGE7Cj4gLQl0ZGlzay0+cXVldWUtPnF1ZXVlZGF0YSA9IHRhcmdldGRhdGE7Cj4gLQo+ IC0JbWR0cyA9IChkZXYtPmdlby5jc2VjcyA+PiA5KSAqIE5WTV9NQVhfVkxCQTsKPiAtCWlmIChk ZXYtPmdlby5tZHRzKSB7Cj4gLQkJbWR0cyA9IG1pbl90KHUzMiwgZGV2LT5nZW8ubWR0cywKPiAt CQkJCShkZXYtPmdlby5jc2VjcyA+PiA5KSAqIE5WTV9NQVhfVkxCQSk7Cj4gLQl9Cj4gLQlibGtf cXVldWVfbWF4X2h3X3NlY3RvcnModGRpc2stPnF1ZXVlLCBtZHRzKTsKPiAtCj4gLQlzZXRfY2Fw YWNpdHkodGRpc2ssIHR0LT5jYXBhY2l0eSh0YXJnZXRkYXRhKSk7Cj4gLQlhZGRfZGlzayh0ZGlz ayk7Cj4gLQo+IC0JaWYgKHR0LT5zeXNmc19pbml0ICYmIHR0LT5zeXNmc19pbml0KHRkaXNrKSkg ewo+IC0JCXJldCA9IC1FTk9NRU07Cj4gLQkJZ290byBlcnJfc3lzZnM7Cj4gLQl9Cj4gLQo+IC0J dC0+dHlwZSA9IHR0Owo+IC0JdC0+ZGlzayA9IHRkaXNrOwo+IC0JdC0+ZGV2ID0gdGd0X2RldjsK PiAtCj4gLQltdXRleF9sb2NrKCZkZXYtPm1sb2NrKTsKPiAtCWxpc3RfYWRkX3RhaWwoJnQtPmxp c3QsICZkZXYtPnRhcmdldHMpOwo+IC0JbXV0ZXhfdW5sb2NrKCZkZXYtPm1sb2NrKTsKPiAtCj4g LQlfX21vZHVsZV9nZXQodHQtPm93bmVyKTsKPiAtCj4gLQlyZXR1cm4gMDsKPiAtZXJyX3N5c2Zz Ogo+IC0JaWYgKHR0LT5leGl0KQo+IC0JCXR0LT5leGl0KHRhcmdldGRhdGEsIHRydWUpOwo+IC1l cnJfaW5pdDoKPiAtCWJsa19jbGVhbnVwX2Rpc2sodGRpc2spOwo+IC1lcnJfZGV2Ogo+IC0JbnZt X3JlbW92ZV90Z3RfZGV2KHRndF9kZXYsIDApOwo+IC1lcnJfdDoKPiAtCWtmcmVlKHQpOwo+IC1l cnJfcmVzZXJ2ZToKPiAtCW52bV9yZWxlYXNlX2x1bnNfZXJyKGRldiwgZS5sdW5fYmVnaW4sIGUu bHVuX2VuZCk7Cj4gLQlyZXR1cm4gcmV0Owo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBfX252bV9y ZW1vdmVfdGFyZ2V0KHN0cnVjdCBudm1fdGFyZ2V0ICp0LCBib29sIGdyYWNlZnVsKQo+IC17Cj4g LQlzdHJ1Y3QgbnZtX3RndF90eXBlICp0dCA9IHQtPnR5cGU7Cj4gLQlzdHJ1Y3QgZ2VuZGlzayAq dGRpc2sgPSB0LT5kaXNrOwo+IC0KPiAtCWRlbF9nZW5kaXNrKHRkaXNrKTsKPiAtCj4gLQlpZiAo dHQtPnN5c2ZzX2V4aXQpCj4gLQkJdHQtPnN5c2ZzX2V4aXQodGRpc2spOwo+IC0KPiAtCWlmICh0 dC0+ZXhpdCkKPiAtCQl0dC0+ZXhpdCh0ZGlzay0+cHJpdmF0ZV9kYXRhLCBncmFjZWZ1bCk7Cj4g LQo+IC0JbnZtX3JlbW92ZV90Z3RfZGV2KHQtPmRldiwgMSk7Cj4gLQlibGtfY2xlYW51cF9kaXNr KHRkaXNrKTsKPiAtCW1vZHVsZV9wdXQodC0+dHlwZS0+b3duZXIpOwo+IC0KPiAtCWxpc3RfZGVs KCZ0LT5saXN0KTsKPiAtCWtmcmVlKHQpOwo+IC19Cj4gLQo+IC0vKioKPiAtICogbnZtX3JlbW92 ZV90Z3QgLSBSZW1vdmVzIGEgdGFyZ2V0IGZyb20gdGhlIG1lZGlhIG1hbmFnZXIKPiAtICogQHJl bW92ZToJaW9jdGwgc3RydWN0dXJlIHdpdGggdGFyZ2V0IG5hbWUgdG8gcmVtb3ZlLgo+IC0gKgo+ IC0gKiBSZXR1cm5zOgo+IC0gKiAwOiBvbiBzdWNjZXNzCj4gLSAqIDE6IG9uIG5vdCBmb3VuZAo+ IC0gKiA8MDogb24gZXJyb3IKPiAtICovCj4gLXN0YXRpYyBpbnQgbnZtX3JlbW92ZV90Z3Qoc3Ry dWN0IG52bV9pb2N0bF9yZW1vdmUgKnJlbW92ZSkKPiAtewo+IC0Jc3RydWN0IG52bV90YXJnZXQg KnQgPSBOVUxMOwo+IC0Jc3RydWN0IG52bV9kZXYgKmRldjsKPiAtCj4gLQlkb3duX3JlYWQoJm52 bV9sb2NrKTsKPiAtCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCAmbnZtX2RldmljZXMsIGRldmlj ZXMpIHsKPiAtCQltdXRleF9sb2NrKCZkZXYtPm1sb2NrKTsKPiAtCQl0ID0gbnZtX2ZpbmRfdGFy Z2V0KGRldiwgcmVtb3ZlLT50Z3RuYW1lKTsKPiAtCQlpZiAodCkgewo+IC0JCQltdXRleF91bmxv Y2soJmRldi0+bWxvY2spOwo+IC0JCQlicmVhazsKPiAtCQl9Cj4gLQkJbXV0ZXhfdW5sb2NrKCZk ZXYtPm1sb2NrKTsKPiAtCX0KPiAtCXVwX3JlYWQoJm52bV9sb2NrKTsKPiAtCj4gLQlpZiAoIXQp IHsKPiAtCQlwcl9lcnIoImZhaWxlZCB0byByZW1vdmUgdGFyZ2V0ICVzXG4iLAo+IC0JCQkJcmVt b3ZlLT50Z3RuYW1lKTsKPiAtCQlyZXR1cm4gMTsKPiAtCX0KPiAtCj4gLQlfX252bV9yZW1vdmVf dGFyZ2V0KHQsIHRydWUpOwo+IC0Ja3JlZl9wdXQoJmRldi0+cmVmLCBudm1fZnJlZSk7Cj4gLQo+ IC0JcmV0dXJuIDA7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbnQgbnZtX3JlZ2lzdGVyX21hcChzdHJ1 Y3QgbnZtX2RldiAqZGV2KQo+IC17Cj4gLQlzdHJ1Y3QgbnZtX2Rldl9tYXAgKnJtYXA7Cj4gLQlp bnQgaSwgajsKPiAtCj4gLQlybWFwID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG52bV9kZXZfbWFw KSwgR0ZQX0tFUk5FTCk7Cj4gLQlpZiAoIXJtYXApCj4gLQkJZ290byBlcnJfcm1hcDsKPiAtCj4g LQlybWFwLT5jaG5scyA9IGtjYWxsb2MoZGV2LT5nZW8ubnVtX2NoLCBzaXplb2Yoc3RydWN0IG52 bV9jaF9tYXApLAo+IC0JCQkJCQkJCUdGUF9LRVJORUwpOwo+IC0JaWYgKCFybWFwLT5jaG5scykK PiAtCQlnb3RvIGVycl9jaG5sczsKPiAtCj4gLQlmb3IgKGkgPSAwOyBpIDwgZGV2LT5nZW8ubnVt X2NoOyBpKyspIHsKPiAtCQlzdHJ1Y3QgbnZtX2NoX21hcCAqY2hfcm1hcDsKPiAtCQlpbnQgKmx1 bl9yb2ZmczsKPiAtCQlpbnQgbHVuc19pbl9jaG5sID0gZGV2LT5nZW8ubnVtX2x1bjsKPiAtCj4g LQkJY2hfcm1hcCA9ICZybWFwLT5jaG5sc1tpXTsKPiAtCj4gLQkJY2hfcm1hcC0+Y2hfb2ZmID0g LTE7Cj4gLQkJY2hfcm1hcC0+bnVtX2x1biA9IGx1bnNfaW5fY2hubDsKPiAtCj4gLQkJbHVuX3Jv ZmZzID0ga2NhbGxvYyhsdW5zX2luX2NobmwsIHNpemVvZihpbnQpLCBHRlBfS0VSTkVMKTsKPiAt CQlpZiAoIWx1bl9yb2ZmcykKPiAtCQkJZ290byBlcnJfY2g7Cj4gLQo+IC0JCWZvciAoaiA9IDA7 IGogPCBsdW5zX2luX2Nobmw7IGorKykKPiAtCQkJbHVuX3JvZmZzW2pdID0gLTE7Cj4gLQo+IC0J CWNoX3JtYXAtPmx1bl9vZmZzID0gbHVuX3JvZmZzOwo+IC0JfQo+IC0KPiAtCWRldi0+cm1hcCA9 IHJtYXA7Cj4gLQo+IC0JcmV0dXJuIDA7Cj4gLWVycl9jaDoKPiAtCXdoaWxlICgtLWkgPj0gMCkK PiAtCQlrZnJlZShybWFwLT5jaG5sc1tpXS5sdW5fb2Zmcyk7Cj4gLWVycl9jaG5sczoKPiAtCWtm cmVlKHJtYXApOwo+IC1lcnJfcm1hcDoKPiAtCXJldHVybiAtRU5PTUVNOwo+IC19Cj4gLQo+IC1z dGF0aWMgdm9pZCBudm1fdW5yZWdpc3Rlcl9tYXAoc3RydWN0IG52bV9kZXYgKmRldikKPiAtewo+ IC0Jc3RydWN0IG52bV9kZXZfbWFwICpybWFwID0gZGV2LT5ybWFwOwo+IC0JaW50IGk7Cj4gLQo+ IC0JZm9yIChpID0gMDsgaSA8IGRldi0+Z2VvLm51bV9jaDsgaSsrKQo+IC0JCWtmcmVlKHJtYXAt PmNobmxzW2ldLmx1bl9vZmZzKTsKPiAtCj4gLQlrZnJlZShybWFwLT5jaG5scyk7Cj4gLQlrZnJl ZShybWFwKTsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgbnZtX21hcF90b19kZXYoc3RydWN0IG52 bV90Z3RfZGV2ICp0Z3RfZGV2LCBzdHJ1Y3QgcHBhX2FkZHIgKnApCj4gLXsKPiAtCXN0cnVjdCBu dm1fZGV2X21hcCAqZGV2X21hcCA9IHRndF9kZXYtPm1hcDsKPiAtCXN0cnVjdCBudm1fY2hfbWFw ICpjaF9tYXAgPSAmZGV2X21hcC0+Y2hubHNbcC0+YS5jaF07Cj4gLQlpbnQgbHVuX29mZiA9IGNo X21hcC0+bHVuX29mZnNbcC0+YS5sdW5dOwo+IC0KPiAtCXAtPmEuY2ggKz0gY2hfbWFwLT5jaF9v ZmY7Cj4gLQlwLT5hLmx1biArPSBsdW5fb2ZmOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBudm1f bWFwX3RvX3RndChzdHJ1Y3QgbnZtX3RndF9kZXYgKnRndF9kZXYsIHN0cnVjdCBwcGFfYWRkciAq cCkKPiAtewo+IC0Jc3RydWN0IG52bV9kZXYgKmRldiA9IHRndF9kZXYtPnBhcmVudDsKPiAtCXN0 cnVjdCBudm1fZGV2X21hcCAqZGV2X3JtYXAgPSBkZXYtPnJtYXA7Cj4gLQlzdHJ1Y3QgbnZtX2No X21hcCAqY2hfcm1hcCA9ICZkZXZfcm1hcC0+Y2hubHNbcC0+YS5jaF07Cj4gLQlpbnQgbHVuX3Jv ZmYgPSBjaF9ybWFwLT5sdW5fb2Zmc1twLT5hLmx1bl07Cj4gLQo+IC0JcC0+YS5jaCAtPSBjaF9y bWFwLT5jaF9vZmY7Cj4gLQlwLT5hLmx1biAtPSBsdW5fcm9mZjsKPiAtfQo+IC0KPiAtc3RhdGlj IHZvaWQgbnZtX3BwYV90Z3RfdG9fZGV2KHN0cnVjdCBudm1fdGd0X2RldiAqdGd0X2RldiwKPiAt CQkJCXN0cnVjdCBwcGFfYWRkciAqcHBhX2xpc3QsIGludCBucl9wcGFzKQo+IC17Cj4gLQlpbnQg aTsKPiAtCj4gLQlmb3IgKGkgPSAwOyBpIDwgbnJfcHBhczsgaSsrKSB7Cj4gLQkJbnZtX21hcF90 b19kZXYodGd0X2RldiwgJnBwYV9saXN0W2ldKTsKPiAtCQlwcGFfbGlzdFtpXSA9IGdlbmVyaWNf dG9fZGV2X2FkZHIodGd0X2Rldi0+cGFyZW50LCBwcGFfbGlzdFtpXSk7Cj4gLQl9Cj4gLX0KPiAt Cj4gLXN0YXRpYyB2b2lkIG52bV9wcGFfZGV2X3RvX3RndChzdHJ1Y3QgbnZtX3RndF9kZXYgKnRn dF9kZXYsCj4gLQkJCQlzdHJ1Y3QgcHBhX2FkZHIgKnBwYV9saXN0LCBpbnQgbnJfcHBhcykKPiAt ewo+IC0JaW50IGk7Cj4gLQo+IC0JZm9yIChpID0gMDsgaSA8IG5yX3BwYXM7IGkrKykgewo+IC0J CXBwYV9saXN0W2ldID0gZGV2X3RvX2dlbmVyaWNfYWRkcih0Z3RfZGV2LT5wYXJlbnQsIHBwYV9s aXN0W2ldKTsKPiAtCQludm1fbWFwX3RvX3RndCh0Z3RfZGV2LCAmcHBhX2xpc3RbaV0pOwo+IC0J fQo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBudm1fcnFfdGd0X3RvX2RldihzdHJ1Y3QgbnZtX3Rn dF9kZXYgKnRndF9kZXYsIHN0cnVjdCBudm1fcnEgKnJxZCkKPiAtewo+IC0Jc3RydWN0IHBwYV9h ZGRyICpwcGFfbGlzdCA9IG52bV9ycV90b19wcGFfbGlzdChycWQpOwo+IC0KPiAtCW52bV9wcGFf dGd0X3RvX2Rldih0Z3RfZGV2LCBwcGFfbGlzdCwgcnFkLT5ucl9wcGFzKTsKPiAtfQo+IC0KPiAt c3RhdGljIHZvaWQgbnZtX3JxX2Rldl90b190Z3Qoc3RydWN0IG52bV90Z3RfZGV2ICp0Z3RfZGV2 LCBzdHJ1Y3QgbnZtX3JxICpycWQpCj4gLXsKPiAtCXN0cnVjdCBwcGFfYWRkciAqcHBhX2xpc3Qg PSBudm1fcnFfdG9fcHBhX2xpc3QocnFkKTsKPiAtCj4gLQludm1fcHBhX2Rldl90b190Z3QodGd0 X2RldiwgcHBhX2xpc3QsIHJxZC0+bnJfcHBhcyk7Cj4gLX0KPiAtCj4gLWludCBudm1fcmVnaXN0 ZXJfdGd0X3R5cGUoc3RydWN0IG52bV90Z3RfdHlwZSAqdHQpCj4gLXsKPiAtCWludCByZXQgPSAw Owo+IC0KPiAtCWRvd25fd3JpdGUoJm52bV90Z3R0X2xvY2spOwo+IC0JaWYgKF9fbnZtX2ZpbmRf dGFyZ2V0X3R5cGUodHQtPm5hbWUpKQo+IC0JCXJldCA9IC1FRVhJU1Q7Cj4gLQllbHNlCj4gLQkJ bGlzdF9hZGQoJnR0LT5saXN0LCAmbnZtX3RndF90eXBlcyk7Cj4gLQl1cF93cml0ZSgmbnZtX3Rn dHRfbG9jayk7Cj4gLQo+IC0JcmV0dXJuIHJldDsKPiAtfQo+IC1FWFBPUlRfU1lNQk9MKG52bV9y ZWdpc3Rlcl90Z3RfdHlwZSk7Cj4gLQo+IC12b2lkIG52bV91bnJlZ2lzdGVyX3RndF90eXBlKHN0 cnVjdCBudm1fdGd0X3R5cGUgKnR0KQo+IC17Cj4gLQlpZiAoIXR0KQo+IC0JCXJldHVybjsKPiAt Cj4gLQlkb3duX3dyaXRlKCZudm1fdGd0dF9sb2NrKTsKPiAtCWxpc3RfZGVsKCZ0dC0+bGlzdCk7 Cj4gLQl1cF93cml0ZSgmbnZtX3RndHRfbG9jayk7Cj4gLX0KPiAtRVhQT1JUX1NZTUJPTChudm1f dW5yZWdpc3Rlcl90Z3RfdHlwZSk7Cj4gLQo+IC12b2lkICpudm1fZGV2X2RtYV9hbGxvYyhzdHJ1 Y3QgbnZtX2RldiAqZGV2LCBnZnBfdCBtZW1fZmxhZ3MsCj4gLQkJCQkJCQlkbWFfYWRkcl90ICpk bWFfaGFuZGxlcikKPiAtewo+IC0JcmV0dXJuIGRldi0+b3BzLT5kZXZfZG1hX2FsbG9jKGRldiwg ZGV2LT5kbWFfcG9vbCwgbWVtX2ZsYWdzLAo+IC0JCQkJCQkJCWRtYV9oYW5kbGVyKTsKPiAtfQo+ IC1FWFBPUlRfU1lNQk9MKG52bV9kZXZfZG1hX2FsbG9jKTsKPiAtCj4gLXZvaWQgbnZtX2Rldl9k bWFfZnJlZShzdHJ1Y3QgbnZtX2RldiAqZGV2LCB2b2lkICphZGRyLCBkbWFfYWRkcl90IGRtYV9o YW5kbGVyKQo+IC17Cj4gLQlkZXYtPm9wcy0+ZGV2X2RtYV9mcmVlKGRldi0+ZG1hX3Bvb2wsIGFk ZHIsIGRtYV9oYW5kbGVyKTsKPiAtfQo+IC1FWFBPUlRfU1lNQk9MKG52bV9kZXZfZG1hX2ZyZWUp Owo+IC0KPiAtc3RhdGljIHN0cnVjdCBudm1fZGV2ICpudm1fZmluZF9udm1fZGV2KGNvbnN0IGNo YXIgKm5hbWUpCj4gLXsKPiAtCXN0cnVjdCBudm1fZGV2ICpkZXY7Cj4gLQo+IC0JbGlzdF9mb3Jf ZWFjaF9lbnRyeShkZXYsICZudm1fZGV2aWNlcywgZGV2aWNlcykKPiAtCQlpZiAoIXN0cmNtcChu YW1lLCBkZXYtPm5hbWUpKQo+IC0JCQlyZXR1cm4gZGV2Owo+IC0KPiAtCXJldHVybiBOVUxMOwo+ IC19Cj4gLQo+IC1zdGF0aWMgaW50IG52bV9zZXRfcnFkX3BwYWxpc3Qoc3RydWN0IG52bV90Z3Rf ZGV2ICp0Z3RfZGV2LCBzdHJ1Y3QgbnZtX3JxICpycWQsCj4gLQkJCWNvbnN0IHN0cnVjdCBwcGFf YWRkciAqcHBhcywgaW50IG5yX3BwYXMpCj4gLXsKPiAtCXN0cnVjdCBudm1fZGV2ICpkZXYgPSB0 Z3RfZGV2LT5wYXJlbnQ7Cj4gLQlzdHJ1Y3QgbnZtX2dlbyAqZ2VvID0gJnRndF9kZXYtPmdlbzsK PiAtCWludCBpLCBwbGFuZV9jbnQsIHBsX2lkeDsKPiAtCXN0cnVjdCBwcGFfYWRkciBwcGE7Cj4g LQo+IC0JaWYgKGdlby0+cGxuX21vZGUgPT0gTlZNX1BMQU5FX1NJTkdMRSAmJiBucl9wcGFzID09 IDEpIHsKPiAtCQlycWQtPm5yX3BwYXMgPSBucl9wcGFzOwo+IC0JCXJxZC0+cHBhX2FkZHIgPSBw cGFzWzBdOwo+IC0KPiAtCQlyZXR1cm4gMDsKPiAtCX0KPiAtCj4gLQlycWQtPm5yX3BwYXMgPSBu cl9wcGFzOwo+IC0JcnFkLT5wcGFfbGlzdCA9IG52bV9kZXZfZG1hX2FsbG9jKGRldiwgR0ZQX0tF Uk5FTCwgJnJxZC0+ZG1hX3BwYV9saXN0KTsKPiAtCWlmICghcnFkLT5wcGFfbGlzdCkgewo+IC0J CXByX2VycigiZmFpbGVkIHRvIGFsbG9jYXRlIGRtYSBtZW1vcnlcbiIpOwo+IC0JCXJldHVybiAt RU5PTUVNOwo+IC0JfQo+IC0KPiAtCXBsYW5lX2NudCA9IGdlby0+cGxuX21vZGU7Cj4gLQlycWQt Pm5yX3BwYXMgKj0gcGxhbmVfY250Owo+IC0KPiAtCWZvciAoaSA9IDA7IGkgPCBucl9wcGFzOyBp KyspIHsKPiAtCQlmb3IgKHBsX2lkeCA9IDA7IHBsX2lkeCA8IHBsYW5lX2NudDsgcGxfaWR4Kysp IHsKPiAtCQkJcHBhID0gcHBhc1tpXTsKPiAtCQkJcHBhLmcucGwgPSBwbF9pZHg7Cj4gLQkJCXJx ZC0+cHBhX2xpc3RbKHBsX2lkeCAqIG5yX3BwYXMpICsgaV0gPSBwcGE7Cj4gLQkJfQo+IC0JfQo+ IC0KPiAtCXJldHVybiAwOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBudm1fZnJlZV9ycWRfcHBh bGlzdChzdHJ1Y3QgbnZtX3RndF9kZXYgKnRndF9kZXYsCj4gLQkJCXN0cnVjdCBudm1fcnEgKnJx ZCkKPiAtewo+IC0JaWYgKCFycWQtPnBwYV9saXN0KQo+IC0JCXJldHVybjsKPiAtCj4gLQludm1f ZGV2X2RtYV9mcmVlKHRndF9kZXYtPnBhcmVudCwgcnFkLT5wcGFfbGlzdCwgcnFkLT5kbWFfcHBh X2xpc3QpOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW50IG52bV9zZXRfZmxhZ3Moc3RydWN0IG52bV9n ZW8gKmdlbywgc3RydWN0IG52bV9ycSAqcnFkKQo+IC17Cj4gLQlpbnQgZmxhZ3MgPSAwOwo+IC0K PiAtCWlmIChnZW8tPnZlcnNpb24gPT0gTlZNX09DU1NEX1NQRUNfMjApCj4gLQkJcmV0dXJuIDA7 Cj4gLQo+IC0JaWYgKHJxZC0+aXNfc2VxKQo+IC0JCWZsYWdzIHw9IGdlby0+cGxuX21vZGUgPj4g MTsKPiAtCj4gLQlpZiAocnFkLT5vcGNvZGUgPT0gTlZNX09QX1BSRUFEKQo+IC0JCWZsYWdzIHw9 IChOVk1fSU9fU0NSQU1CTEVfRU5BQkxFIHwgTlZNX0lPX1NVU1BFTkQpOwo+IC0JZWxzZSBpZiAo cnFkLT5vcGNvZGUgPT0gTlZNX09QX1BXUklURSkKPiAtCQlmbGFncyB8PSBOVk1fSU9fU0NSQU1C TEVfRU5BQkxFOwo+IC0KPiAtCXJldHVybiBmbGFnczsKPiAtfQo+IC0KPiAtaW50IG52bV9zdWJt aXRfaW8oc3RydWN0IG52bV90Z3RfZGV2ICp0Z3RfZGV2LCBzdHJ1Y3QgbnZtX3JxICpycWQsIHZv aWQgKmJ1ZikKPiAtewo+IC0Jc3RydWN0IG52bV9kZXYgKmRldiA9IHRndF9kZXYtPnBhcmVudDsK PiAtCWludCByZXQ7Cj4gLQo+IC0JaWYgKCFkZXYtPm9wcy0+c3VibWl0X2lvKQo+IC0JCXJldHVy biAtRU5PREVWOwo+IC0KPiAtCW52bV9ycV90Z3RfdG9fZGV2KHRndF9kZXYsIHJxZCk7Cj4gLQo+ IC0JcnFkLT5kZXYgPSB0Z3RfZGV2Owo+IC0JcnFkLT5mbGFncyA9IG52bV9zZXRfZmxhZ3MoJnRn dF9kZXYtPmdlbywgcnFkKTsKPiAtCj4gLQkvKiBJbiBjYXNlIG9mIGVycm9yLCBmYWlsIHdpdGgg cmlnaHQgYWRkcmVzcyBmb3JtYXQgKi8KPiAtCXJldCA9IGRldi0+b3BzLT5zdWJtaXRfaW8oZGV2 LCBycWQsIGJ1Zik7Cj4gLQlpZiAocmV0KQo+IC0JCW52bV9ycV9kZXZfdG9fdGd0KHRndF9kZXYs IHJxZCk7Cj4gLQlyZXR1cm4gcmV0Owo+IC19Cj4gLUVYUE9SVF9TWU1CT0wobnZtX3N1Ym1pdF9p byk7Cj4gLQo+IC1zdGF0aWMgdm9pZCBudm1fc3luY19lbmRfaW8oc3RydWN0IG52bV9ycSAqcnFk KQo+IC17Cj4gLQlzdHJ1Y3QgY29tcGxldGlvbiAqd2FpdGluZyA9IHJxZC0+cHJpdmF0ZTsKPiAt Cj4gLQljb21wbGV0ZSh3YWl0aW5nKTsKPiAtfQo+IC0KPiAtc3RhdGljIGludCBudm1fc3VibWl0 X2lvX3dhaXQoc3RydWN0IG52bV9kZXYgKmRldiwgc3RydWN0IG52bV9ycSAqcnFkLAo+IC0JCQkg ICAgICB2b2lkICpidWYpCj4gLXsKPiAtCURFQ0xBUkVfQ09NUExFVElPTl9PTlNUQUNLKHdhaXQp Owo+IC0JaW50IHJldCA9IDA7Cj4gLQo+IC0JcnFkLT5lbmRfaW8gPSBudm1fc3luY19lbmRfaW87 Cj4gLQlycWQtPnByaXZhdGUgPSAmd2FpdDsKPiAtCj4gLQlyZXQgPSBkZXYtPm9wcy0+c3VibWl0 X2lvKGRldiwgcnFkLCBidWYpOwo+IC0JaWYgKHJldCkKPiAtCQlyZXR1cm4gcmV0Owo+IC0KPiAt CXdhaXRfZm9yX2NvbXBsZXRpb25faW8oJndhaXQpOwo+IC0KPiAtCXJldHVybiAwOwo+IC19Cj4g LQo+IC1pbnQgbnZtX3N1Ym1pdF9pb19zeW5jKHN0cnVjdCBudm1fdGd0X2RldiAqdGd0X2Rldiwg c3RydWN0IG52bV9ycSAqcnFkLAo+IC0JCSAgICAgICB2b2lkICpidWYpCj4gLXsKPiAtCXN0cnVj dCBudm1fZGV2ICpkZXYgPSB0Z3RfZGV2LT5wYXJlbnQ7Cj4gLQlpbnQgcmV0Owo+IC0KPiAtCWlm ICghZGV2LT5vcHMtPnN1Ym1pdF9pbykKPiAtCQlyZXR1cm4gLUVOT0RFVjsKPiAtCj4gLQludm1f cnFfdGd0X3RvX2Rldih0Z3RfZGV2LCBycWQpOwo+IC0KPiAtCXJxZC0+ZGV2ID0gdGd0X2RldjsK PiAtCXJxZC0+ZmxhZ3MgPSBudm1fc2V0X2ZsYWdzKCZ0Z3RfZGV2LT5nZW8sIHJxZCk7Cj4gLQo+ IC0JcmV0ID0gbnZtX3N1Ym1pdF9pb193YWl0KGRldiwgcnFkLCBidWYpOwo+IC0KPiAtCXJldHVy biByZXQ7Cj4gLX0KPiAtRVhQT1JUX1NZTUJPTChudm1fc3VibWl0X2lvX3N5bmMpOwo+IC0KPiAt dm9pZCBudm1fZW5kX2lvKHN0cnVjdCBudm1fcnEgKnJxZCkKPiAtewo+IC0Jc3RydWN0IG52bV90 Z3RfZGV2ICp0Z3RfZGV2ID0gcnFkLT5kZXY7Cj4gLQo+IC0JLyogQ29udmVydCBhZGRyZXNzIHNw YWNlICovCj4gLQlpZiAodGd0X2RldikKPiAtCQludm1fcnFfZGV2X3RvX3RndCh0Z3RfZGV2LCBy cWQpOwo+IC0KPiAtCWlmIChycWQtPmVuZF9pbykKPiAtCQlycWQtPmVuZF9pbyhycWQpOwo+IC19 Cj4gLUVYUE9SVF9TWU1CT0wobnZtX2VuZF9pbyk7Cj4gLQo+IC1zdGF0aWMgaW50IG52bV9zdWJt aXRfaW9fc3luY19yYXcoc3RydWN0IG52bV9kZXYgKmRldiwgc3RydWN0IG52bV9ycSAqcnFkKQo+ IC17Cj4gLQlpZiAoIWRldi0+b3BzLT5zdWJtaXRfaW8pCj4gLQkJcmV0dXJuIC1FTk9ERVY7Cj4g LQo+IC0JcnFkLT5kZXYgPSBOVUxMOwo+IC0JcnFkLT5mbGFncyA9IG52bV9zZXRfZmxhZ3MoJmRl di0+Z2VvLCBycWQpOwo+IC0KPiAtCXJldHVybiBudm1fc3VibWl0X2lvX3dhaXQoZGV2LCBycWQs IE5VTEwpOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW50IG52bV9iYl9jaHVua19zZW5zZShzdHJ1Y3Qg bnZtX2RldiAqZGV2LCBzdHJ1Y3QgcHBhX2FkZHIgcHBhKQo+IC17Cj4gLQlzdHJ1Y3QgbnZtX3Jx IHJxZCA9IHsgTlVMTCB9Owo+IC0Jc3RydWN0IGJpbyBiaW87Cj4gLQlzdHJ1Y3QgYmlvX3ZlYyBi aW9fdmVjOwo+IC0Jc3RydWN0IHBhZ2UgKnBhZ2U7Cj4gLQlpbnQgcmV0Owo+IC0KPiAtCXBhZ2Ug PSBhbGxvY19wYWdlKEdGUF9LRVJORUwpOwo+IC0JaWYgKCFwYWdlKQo+IC0JCXJldHVybiAtRU5P TUVNOwo+IC0KPiAtCWJpb19pbml0KCZiaW8sICZiaW9fdmVjLCAxKTsKPiAtCWJpb19hZGRfcGFn ZSgmYmlvLCBwYWdlLCBQQUdFX1NJWkUsIDApOwo+IC0JYmlvX3NldF9vcF9hdHRycygmYmlvLCBS RVFfT1BfUkVBRCwgMCk7Cj4gLQo+IC0JcnFkLmJpbyA9ICZiaW87Cj4gLQlycWQub3Bjb2RlID0g TlZNX09QX1BSRUFEOwo+IC0JcnFkLmlzX3NlcSA9IDE7Cj4gLQlycWQubnJfcHBhcyA9IDE7Cj4g LQlycWQucHBhX2FkZHIgPSBnZW5lcmljX3RvX2Rldl9hZGRyKGRldiwgcHBhKTsKPiAtCj4gLQly ZXQgPSBudm1fc3VibWl0X2lvX3N5bmNfcmF3KGRldiwgJnJxZCk7Cj4gLQlfX2ZyZWVfcGFnZShw YWdlKTsKPiAtCWlmIChyZXQpCj4gLQkJcmV0dXJuIHJldDsKPiAtCj4gLQlyZXR1cm4gcnFkLmVy cm9yOwo+IC19Cj4gLQo+IC0vKgo+IC0gKiBTY2FucyBhIDEuMiBjaHVuayBmaXJzdCBhbmQgbGFz dCBwYWdlIHRvIGRldGVybWluZSBpZiBpdHMgc3RhdGUuCj4gLSAqIElmIHRoZSBjaHVuayBpcyBm b3VuZCB0byBiZSBvcGVuLCBhbHNvIHNjYW4gaXQgdG8gdXBkYXRlIHRoZSB3cml0ZQo+IC0gKiBw b2ludGVyLgo+IC0gKi8KPiAtc3RhdGljIGludCBudm1fYmJfY2h1bmtfc2NhbihzdHJ1Y3QgbnZt X2RldiAqZGV2LCBzdHJ1Y3QgcHBhX2FkZHIgcHBhLAo+IC0JCQkgICAgIHN0cnVjdCBudm1fY2hr X21ldGEgKm1ldGEpCj4gLXsKPiAtCXN0cnVjdCBudm1fZ2VvICpnZW8gPSAmZGV2LT5nZW87Cj4g LQlpbnQgcmV0LCBwZywgcGw7Cj4gLQo+IC0JLyogc2Vuc2UgZmlyc3QgcGFnZSAqLwo+IC0JcmV0 ID0gbnZtX2JiX2NodW5rX3NlbnNlKGRldiwgcHBhKTsKPiAtCWlmIChyZXQgPCAwKSAvKiBpbyBl cnJvciAqLwo+IC0JCXJldHVybiByZXQ7Cj4gLQllbHNlIGlmIChyZXQgPT0gMCkgLyogdmFsaWQg ZGF0YSAqLwo+IC0JCW1ldGEtPnN0YXRlID0gTlZNX0NIS19TVF9PUEVOOwo+IC0JZWxzZSBpZiAo cmV0ID4gMCkgewo+IC0JCS8qCj4gLQkJICogSWYgZW1wdHkgcGFnZSwgdGhlIGNodW5rIGlzIGZy ZWUsIGVsc2UgaXQgaXMgYW4KPiAtCQkgKiBhY3R1YWwgaW8gZXJyb3IuIEluIHRoYXQgY2FzZSwg bWFyayBpdCBvZmZsaW5lLgo+IC0JCSAqLwo+IC0JCXN3aXRjaCAocmV0KSB7Cj4gLQkJY2FzZSBO Vk1fUlNQX0VSUl9FTVBUWVBBR0U6Cj4gLQkJCW1ldGEtPnN0YXRlID0gTlZNX0NIS19TVF9GUkVF Owo+IC0JCQlyZXR1cm4gMDsKPiAtCQljYXNlIE5WTV9SU1BfRVJSX0ZBSUxDUkM6Cj4gLQkJY2Fz ZSBOVk1fUlNQX0VSUl9GQUlMRUNDOgo+IC0JCWNhc2UgTlZNX1JTUF9XQVJOX0hJR0hFQ0M6Cj4g LQkJCW1ldGEtPnN0YXRlID0gTlZNX0NIS19TVF9PUEVOOwo+IC0JCQlnb3RvIHNjYW47Cj4gLQkJ ZGVmYXVsdDoKPiAtCQkJcmV0dXJuIC1yZXQ7IC8qIG90aGVyIGlvIGVycm9yICovCj4gLQkJfQo+ IC0JfQo+IC0KPiAtCS8qIHNlbnNlIGxhc3QgcGFnZSAqLwo+IC0JcHBhLmcucGcgPSBnZW8tPm51 bV9wZyAtIDE7Cj4gLQlwcGEuZy5wbCA9IGdlby0+bnVtX3BsbiAtIDE7Cj4gLQo+IC0JcmV0ID0g bnZtX2JiX2NodW5rX3NlbnNlKGRldiwgcHBhKTsKPiAtCWlmIChyZXQgPCAwKSAvKiBpbyBlcnJv ciAqLwo+IC0JCXJldHVybiByZXQ7Cj4gLQllbHNlIGlmIChyZXQgPT0gMCkgeyAvKiBDaHVuayBm dWxseSB3cml0dGVuICovCj4gLQkJbWV0YS0+c3RhdGUgPSBOVk1fQ0hLX1NUX0NMT1NFRDsKPiAt CQltZXRhLT53cCA9IGdlby0+Y2xiYTsKPiAtCQlyZXR1cm4gMDsKPiAtCX0gZWxzZSBpZiAocmV0 ID4gMCkgewo+IC0JCXN3aXRjaCAocmV0KSB7Cj4gLQkJY2FzZSBOVk1fUlNQX0VSUl9FTVBUWVBB R0U6Cj4gLQkJY2FzZSBOVk1fUlNQX0VSUl9GQUlMQ1JDOgo+IC0JCWNhc2UgTlZNX1JTUF9FUlJf RkFJTEVDQzoKPiAtCQljYXNlIE5WTV9SU1BfV0FSTl9ISUdIRUNDOgo+IC0JCQltZXRhLT5zdGF0 ZSA9IE5WTV9DSEtfU1RfT1BFTjsKPiAtCQkJYnJlYWs7Cj4gLQkJZGVmYXVsdDoKPiAtCQkJcmV0 dXJuIC1yZXQ7IC8qIG90aGVyIGlvIGVycm9yICovCj4gLQkJfQo+IC0JfQo+IC0KPiAtc2NhbjoK PiAtCS8qCj4gLQkgKiBjaHVuayBpcyBvcGVuLCB3ZSBzY2FuIHNlcXVlbnRpYWxseSB0byB1cGRh dGUgdGhlIHdyaXRlIHBvaW50ZXIuCj4gLQkgKiBXZSBtYWtlIHRoZSBhc3N1bXB0aW9uIHRoYXQg dGFyZ2V0cyB3cml0ZSBkYXRhIGFjcm9zcyBhbGwgcGxhbmVzCj4gLQkgKiBiZWZvcmUgbW92aW5n IHRvIHRoZSBuZXh0IHBhZ2UuCj4gLQkgKi8KPiAtCWZvciAocGcgPSAwOyBwZyA8IGdlby0+bnVt X3BnOyBwZysrKSB7Cj4gLQkJZm9yIChwbCA9IDA7IHBsIDwgZ2VvLT5udW1fcGxuOyBwbCsrKSB7 Cj4gLQkJCXBwYS5nLnBnID0gcGc7Cj4gLQkJCXBwYS5nLnBsID0gcGw7Cj4gLQo+IC0JCQlyZXQg PSBudm1fYmJfY2h1bmtfc2Vuc2UoZGV2LCBwcGEpOwo+IC0JCQlpZiAocmV0IDwgMCkgLyogaW8g ZXJyb3IgKi8KPiAtCQkJCXJldHVybiByZXQ7Cj4gLQkJCWVsc2UgaWYgKHJldCA9PSAwKSB7Cj4g LQkJCQltZXRhLT53cCArPSBnZW8tPndzX21pbjsKPiAtCQkJfSBlbHNlIGlmIChyZXQgPiAwKSB7 Cj4gLQkJCQlzd2l0Y2ggKHJldCkgewo+IC0JCQkJY2FzZSBOVk1fUlNQX0VSUl9FTVBUWVBBR0U6 Cj4gLQkJCQkJcmV0dXJuIDA7Cj4gLQkJCQljYXNlIE5WTV9SU1BfRVJSX0ZBSUxDUkM6Cj4gLQkJ CQljYXNlIE5WTV9SU1BfRVJSX0ZBSUxFQ0M6Cj4gLQkJCQljYXNlIE5WTV9SU1BfV0FSTl9ISUdI RUNDOgo+IC0JCQkJCW1ldGEtPndwICs9IGdlby0+d3NfbWluOwo+IC0JCQkJCWJyZWFrOwo+IC0J CQkJZGVmYXVsdDoKPiAtCQkJCQlyZXR1cm4gLXJldDsgLyogb3RoZXIgaW8gZXJyb3IgKi8KPiAt CQkJCX0KPiAtCQkJfQo+IC0JCX0KPiAtCX0KPiAtCj4gLQlyZXR1cm4gMDsKPiAtfQo+IC0KPiAt LyoKPiAtICogZm9sZHMgYSBiYWQgYmxvY2sgbGlzdCBmcm9tIGl0cyBwbGFuZSByZXByZXNlbnRh dGlvbiB0byBpdHMKPiAtICogY2h1bmsgcmVwcmVzZW50YXRpb24uCj4gLSAqCj4gLSAqIElmIGFu eSBvZiB0aGUgcGxhbmVzIHN0YXR1cyBhcmUgYmFkIG9yIGdyb3duIGJhZCwgdGhlIGNodW5rIGlz IG1hcmtlZAo+IC0gKiBvZmZsaW5lLiBJZiBub3QgYmFkLCB0aGUgZmlyc3QgcGxhbmUgc3RhdGUg YWN0cyBhcyB0aGUgY2h1bmsgc3RhdGUuCj4gLSAqLwo+IC1zdGF0aWMgaW50IG52bV9iYl90b19j aHVuayhzdHJ1Y3QgbnZtX2RldiAqZGV2LCBzdHJ1Y3QgcHBhX2FkZHIgcHBhLAo+IC0JCQkgICB1 OCAqYmxrcywgaW50IG5yX2Jsa3MsIHN0cnVjdCBudm1fY2hrX21ldGEgKm1ldGEpCj4gLXsKPiAt CXN0cnVjdCBudm1fZ2VvICpnZW8gPSAmZGV2LT5nZW87Cj4gLQlpbnQgcmV0LCBibGssIHBsLCBv ZmZzZXQsIGJsa3R5cGU7Cj4gLQo+IC0JZm9yIChibGsgPSAwOyBibGsgPCBnZW8tPm51bV9jaGs7 IGJsaysrKSB7Cj4gLQkJb2Zmc2V0ID0gYmxrICogZ2VvLT5wbG5fbW9kZTsKPiAtCQlibGt0eXBl ID0gYmxrc1tvZmZzZXRdOwo+IC0KPiAtCQlmb3IgKHBsID0gMDsgcGwgPCBnZW8tPnBsbl9tb2Rl OyBwbCsrKSB7Cj4gLQkJCWlmIChibGtzW29mZnNldCArIHBsXSAmCj4gLQkJCQkJKE5WTV9CTEtf VF9CQUR8TlZNX0JMS19UX0dSV05fQkFEKSkgewo+IC0JCQkJYmxrdHlwZSA9IGJsa3Nbb2Zmc2V0 ICsgcGxdOwo+IC0JCQkJYnJlYWs7Cj4gLQkJCX0KPiAtCQl9Cj4gLQo+IC0JCXBwYS5nLmJsayA9 IGJsazsKPiAtCj4gLQkJbWV0YS0+d3AgPSAwOwo+IC0JCW1ldGEtPnR5cGUgPSBOVk1fQ0hLX1RQ X1dfU0VROwo+IC0JCW1ldGEtPndpID0gMDsKPiAtCQltZXRhLT5zbGJhID0gZ2VuZXJpY190b19k ZXZfYWRkcihkZXYsIHBwYSkucHBhOwo+IC0JCW1ldGEtPmNubGIgPSBkZXYtPmdlby5jbGJhOwo+ IC0KPiAtCQlpZiAoYmxrdHlwZSA9PSBOVk1fQkxLX1RfRlJFRSkgewo+IC0JCQlyZXQgPSBudm1f YmJfY2h1bmtfc2NhbihkZXYsIHBwYSwgbWV0YSk7Cj4gLQkJCWlmIChyZXQpCj4gLQkJCQlyZXR1 cm4gcmV0Owo+IC0JCX0gZWxzZSB7Cj4gLQkJCW1ldGEtPnN0YXRlID0gTlZNX0NIS19TVF9PRkZM SU5FOwo+IC0JCX0KPiAtCj4gLQkJbWV0YSsrOwo+IC0JfQo+IC0KPiAtCXJldHVybiAwOwo+IC19 Cj4gLQo+IC1zdGF0aWMgaW50IG52bV9nZXRfYmJfbWV0YShzdHJ1Y3QgbnZtX2RldiAqZGV2LCBz ZWN0b3JfdCBzbGJhLAo+IC0JCQkgICBpbnQgbmNoa3MsIHN0cnVjdCBudm1fY2hrX21ldGEgKm1l dGEpCj4gLXsKPiAtCXN0cnVjdCBudm1fZ2VvICpnZW8gPSAmZGV2LT5nZW87Cj4gLQlzdHJ1Y3Qg cHBhX2FkZHIgcHBhOwo+IC0JdTggKmJsa3M7Cj4gLQlpbnQgY2gsIGx1biwgbnJfYmxrczsKPiAt CWludCByZXQgPSAwOwo+IC0KPiAtCXBwYS5wcGEgPSBzbGJhOwo+IC0JcHBhID0gZGV2X3RvX2dl bmVyaWNfYWRkcihkZXYsIHBwYSk7Cj4gLQo+IC0JaWYgKHBwYS5nLmJsayAhPSAwKQo+IC0JCXJl dHVybiAtRUlOVkFMOwo+IC0KPiAtCWlmICgobmNoa3MgJSBnZW8tPm51bV9jaGspICE9IDApCj4g LQkJcmV0dXJuIC1FSU5WQUw7Cj4gLQo+IC0JbnJfYmxrcyA9IGdlby0+bnVtX2NoayAqIGdlby0+ cGxuX21vZGU7Cj4gLQo+IC0JYmxrcyA9IGttYWxsb2MobnJfYmxrcywgR0ZQX0tFUk5FTCk7Cj4g LQlpZiAoIWJsa3MpCj4gLQkJcmV0dXJuIC1FTk9NRU07Cj4gLQo+IC0JZm9yIChjaCA9IHBwYS5n LmNoOyBjaCA8IGdlby0+bnVtX2NoOyBjaCsrKSB7Cj4gLQkJZm9yIChsdW4gPSBwcGEuZy5sdW47 IGx1biA8IGdlby0+bnVtX2x1bjsgbHVuKyspIHsKPiAtCQkJc3RydWN0IHBwYV9hZGRyIHBwYV9n ZW4sIHBwYV9kZXY7Cj4gLQo+IC0JCQlpZiAoIW5jaGtzKQo+IC0JCQkJZ290byBkb25lOwo+IC0K PiAtCQkJcHBhX2dlbi5wcGEgPSAwOwo+IC0JCQlwcGFfZ2VuLmcuY2ggPSBjaDsKPiAtCQkJcHBh X2dlbi5nLmx1biA9IGx1bjsKPiAtCQkJcHBhX2RldiA9IGdlbmVyaWNfdG9fZGV2X2FkZHIoZGV2 LCBwcGFfZ2VuKTsKPiAtCj4gLQkJCXJldCA9IGRldi0+b3BzLT5nZXRfYmJfdGJsKGRldiwgcHBh X2RldiwgYmxrcyk7Cj4gLQkJCWlmIChyZXQpCj4gLQkJCQlnb3RvIGRvbmU7Cj4gLQo+IC0JCQly ZXQgPSBudm1fYmJfdG9fY2h1bmsoZGV2LCBwcGFfZ2VuLCBibGtzLCBucl9ibGtzLAo+IC0JCQkJ CQkJCQltZXRhKTsKPiAtCQkJaWYgKHJldCkKPiAtCQkJCWdvdG8gZG9uZTsKPiAtCj4gLQkJCW1l dGEgKz0gZ2VvLT5udW1fY2hrOwo+IC0JCQluY2hrcyAtPSBnZW8tPm51bV9jaGs7Cj4gLQkJfQo+ IC0JfQo+IC1kb25lOgo+IC0Ja2ZyZWUoYmxrcyk7Cj4gLQlyZXR1cm4gcmV0Owo+IC19Cj4gLQo+ IC1pbnQgbnZtX2dldF9jaHVua19tZXRhKHN0cnVjdCBudm1fdGd0X2RldiAqdGd0X2Rldiwgc3Ry dWN0IHBwYV9hZGRyIHBwYSwKPiAtCQkgICAgICAgaW50IG5jaGtzLCBzdHJ1Y3QgbnZtX2Noa19t ZXRhICptZXRhKQo+IC17Cj4gLQlzdHJ1Y3QgbnZtX2RldiAqZGV2ID0gdGd0X2Rldi0+cGFyZW50 Owo+IC0KPiAtCW52bV9wcGFfdGd0X3RvX2Rldih0Z3RfZGV2LCAmcHBhLCAxKTsKPiAtCj4gLQlp ZiAoZGV2LT5nZW8udmVyc2lvbiA9PSBOVk1fT0NTU0RfU1BFQ18xMikKPiAtCQlyZXR1cm4gbnZt X2dldF9iYl9tZXRhKGRldiwgKHNlY3Rvcl90KXBwYS5wcGEsIG5jaGtzLCBtZXRhKTsKPiAtCj4g LQlyZXR1cm4gZGV2LT5vcHMtPmdldF9jaGtfbWV0YShkZXYsIChzZWN0b3JfdClwcGEucHBhLCBu Y2hrcywgbWV0YSk7Cj4gLX0KPiAtRVhQT1JUX1NZTUJPTF9HUEwobnZtX2dldF9jaHVua19tZXRh KTsKPiAtCj4gLWludCBudm1fc2V0X2NodW5rX21ldGEoc3RydWN0IG52bV90Z3RfZGV2ICp0Z3Rf ZGV2LCBzdHJ1Y3QgcHBhX2FkZHIgKnBwYXMsCj4gLQkJICAgICAgIGludCBucl9wcGFzLCBpbnQg dHlwZSkKPiAtewo+IC0Jc3RydWN0IG52bV9kZXYgKmRldiA9IHRndF9kZXYtPnBhcmVudDsKPiAt CXN0cnVjdCBudm1fcnEgcnFkOwo+IC0JaW50IHJldDsKPiAtCj4gLQlpZiAoZGV2LT5nZW8udmVy c2lvbiA9PSBOVk1fT0NTU0RfU1BFQ18yMCkKPiAtCQlyZXR1cm4gMDsKPiAtCj4gLQlpZiAobnJf cHBhcyA+IE5WTV9NQVhfVkxCQSkgewo+IC0JCXByX2VycigidW5hYmxlIHRvIHVwZGF0ZSBhbGwg YmxvY2tzIGF0b21pY2FsbHlcbiIpOwo+IC0JCXJldHVybiAtRUlOVkFMOwo+IC0JfQo+IC0KPiAt CW1lbXNldCgmcnFkLCAwLCBzaXplb2Yoc3RydWN0IG52bV9ycSkpOwo+IC0KPiAtCW52bV9zZXRf cnFkX3BwYWxpc3QodGd0X2RldiwgJnJxZCwgcHBhcywgbnJfcHBhcyk7Cj4gLQludm1fcnFfdGd0 X3RvX2Rldih0Z3RfZGV2LCAmcnFkKTsKPiAtCj4gLQlyZXQgPSBkZXYtPm9wcy0+c2V0X2JiX3Ri bChkZXYsICZycWQucHBhX2FkZHIsIHJxZC5ucl9wcGFzLCB0eXBlKTsKPiAtCW52bV9mcmVlX3Jx ZF9wcGFsaXN0KHRndF9kZXYsICZycWQpOwo+IC0JaWYgKHJldCkKPiAtCQlyZXR1cm4gLUVJTlZB TDsKPiAtCj4gLQlyZXR1cm4gMDsKPiAtfQo+IC1FWFBPUlRfU1lNQk9MX0dQTChudm1fc2V0X2No dW5rX21ldGEpOwo+IC0KPiAtc3RhdGljIGludCBudm1fY29yZV9pbml0KHN0cnVjdCBudm1fZGV2 ICpkZXYpCj4gLXsKPiAtCXN0cnVjdCBudm1fZ2VvICpnZW8gPSAmZGV2LT5nZW87Cj4gLQlpbnQg cmV0Owo+IC0KPiAtCWRldi0+bHVuX21hcCA9IGtjYWxsb2MoQklUU19UT19MT05HUyhnZW8tPmFs bF9sdW5zKSwKPiAtCQkJCQlzaXplb2YodW5zaWduZWQgbG9uZyksIEdGUF9LRVJORUwpOwo+IC0J aWYgKCFkZXYtPmx1bl9tYXApCj4gLQkJcmV0dXJuIC1FTk9NRU07Cj4gLQo+IC0JSU5JVF9MSVNU X0hFQUQoJmRldi0+YXJlYV9saXN0KTsKPiAtCUlOSVRfTElTVF9IRUFEKCZkZXYtPnRhcmdldHMp Owo+IC0JbXV0ZXhfaW5pdCgmZGV2LT5tbG9jayk7Cj4gLQlzcGluX2xvY2tfaW5pdCgmZGV2LT5s b2NrKTsKPiAtCj4gLQlyZXQgPSBudm1fcmVnaXN0ZXJfbWFwKGRldik7Cj4gLQlpZiAocmV0KQo+ IC0JCWdvdG8gZXJyX2ZtdHlwZTsKPiAtCj4gLQlyZXR1cm4gMDsKPiAtZXJyX2ZtdHlwZToKPiAt CWtmcmVlKGRldi0+bHVuX21hcCk7Cj4gLQlyZXR1cm4gcmV0Owo+IC19Cj4gLQo+IC1zdGF0aWMg dm9pZCBudm1fZnJlZShzdHJ1Y3Qga3JlZiAqcmVmKQo+IC17Cj4gLQlzdHJ1Y3QgbnZtX2RldiAq ZGV2ID0gY29udGFpbmVyX29mKHJlZiwgc3RydWN0IG52bV9kZXYsIHJlZik7Cj4gLQo+IC0JaWYg KGRldi0+ZG1hX3Bvb2wpCj4gLQkJZGV2LT5vcHMtPmRlc3Ryb3lfZG1hX3Bvb2woZGV2LT5kbWFf cG9vbCk7Cj4gLQo+IC0JaWYgKGRldi0+cm1hcCkKPiAtCQludm1fdW5yZWdpc3Rlcl9tYXAoZGV2 KTsKPiAtCj4gLQlrZnJlZShkZXYtPmx1bl9tYXApOwo+IC0Ja2ZyZWUoZGV2KTsKPiAtfQo+IC0K PiAtc3RhdGljIGludCBudm1faW5pdChzdHJ1Y3QgbnZtX2RldiAqZGV2KQo+IC17Cj4gLQlzdHJ1 Y3QgbnZtX2dlbyAqZ2VvID0gJmRldi0+Z2VvOwo+IC0JaW50IHJldCA9IC1FSU5WQUw7Cj4gLQo+ IC0JaWYgKGRldi0+b3BzLT5pZGVudGl0eShkZXYpKSB7Cj4gLQkJcHJfZXJyKCJkZXZpY2UgY291 bGQgbm90IGJlIGlkZW50aWZpZWRcbiIpOwo+IC0JCWdvdG8gZXJyOwo+IC0JfQo+IC0KPiAtCXBy X2RlYnVnKCJ2ZXI6JXUuJXUgbnZtX3ZlbmRvcjoleFxuIiwgZ2VvLT5tYWpvcl92ZXJfaWQsCj4g LQkJCWdlby0+bWlub3JfdmVyX2lkLCBnZW8tPnZtbnQpOwo+IC0KPiAtCXJldCA9IG52bV9jb3Jl X2luaXQoZGV2KTsKPiAtCWlmIChyZXQpIHsKPiAtCQlwcl9lcnIoImNvdWxkIG5vdCBpbml0aWFs aXplIGNvcmUgc3RydWN0dXJlcy5cbiIpOwo+IC0JCWdvdG8gZXJyOwo+IC0JfQo+IC0KPiAtCXBy X2luZm8oInJlZ2lzdGVyZWQgJXMgWyV1LyV1LyV1LyV1LyV1XVxuIiwKPiAtCQkJZGV2LT5uYW1l LCBkZXYtPmdlby53c19taW4sIGRldi0+Z2VvLndzX29wdCwKPiAtCQkJZGV2LT5nZW8ubnVtX2No aywgZGV2LT5nZW8uYWxsX2x1bnMsCj4gLQkJCWRldi0+Z2VvLm51bV9jaCk7Cj4gLQlyZXR1cm4g MDsKPiAtZXJyOgo+IC0JcHJfZXJyKCJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBudm1cbiIpOwo+IC0J cmV0dXJuIHJldDsKPiAtfQo+IC0KPiAtc3RydWN0IG52bV9kZXYgKm52bV9hbGxvY19kZXYoaW50 IG5vZGUpCj4gLXsKPiAtCXN0cnVjdCBudm1fZGV2ICpkZXY7Cj4gLQo+IC0JZGV2ID0ga3phbGxv Y19ub2RlKHNpemVvZihzdHJ1Y3QgbnZtX2RldiksIEdGUF9LRVJORUwsIG5vZGUpOwo+IC0JaWYg KGRldikKPiAtCQlrcmVmX2luaXQoJmRldi0+cmVmKTsKPiAtCj4gLQlyZXR1cm4gZGV2Owo+IC19 Cj4gLUVYUE9SVF9TWU1CT0wobnZtX2FsbG9jX2Rldik7Cj4gLQo+IC1pbnQgbnZtX3JlZ2lzdGVy KHN0cnVjdCBudm1fZGV2ICpkZXYpCj4gLXsKPiAtCWludCByZXQsIGV4cF9wb29sX3NpemU7Cj4g LQo+IC0JcHJfd2Fybl9vbmNlKCJsaWdodG52bSBzdXBwb3J0IGlzIGRlcHJlY2F0ZWQgYW5kIHdp bGwgYmUgcmVtb3ZlZCBpbiBMaW51eCA1LjE1LlxuIik7Cj4gLQo+IC0JaWYgKCFkZXYtPnEgfHwg IWRldi0+b3BzKSB7Cj4gLQkJa3JlZl9wdXQoJmRldi0+cmVmLCBudm1fZnJlZSk7Cj4gLQkJcmV0 dXJuIC1FSU5WQUw7Cj4gLQl9Cj4gLQo+IC0JcmV0ID0gbnZtX2luaXQoZGV2KTsKPiAtCWlmIChy ZXQpIHsKPiAtCQlrcmVmX3B1dCgmZGV2LT5yZWYsIG52bV9mcmVlKTsKPiAtCQlyZXR1cm4gcmV0 Owo+IC0JfQo+IC0KPiAtCWV4cF9wb29sX3NpemUgPSBtYXhfdChpbnQsIFBBR0VfU0laRSwKPiAt CQkJICAgICAgKE5WTV9NQVhfVkxCQSAqIChzaXplb2YodTY0KSArIGRldi0+Z2VvLnNvcykpKTsK PiAtCWV4cF9wb29sX3NpemUgPSByb3VuZF91cChleHBfcG9vbF9zaXplLCBQQUdFX1NJWkUpOwo+ IC0KPiAtCWRldi0+ZG1hX3Bvb2wgPSBkZXYtPm9wcy0+Y3JlYXRlX2RtYV9wb29sKGRldiwgInBw YWxpc3QiLAo+IC0JCQkJCQkgIGV4cF9wb29sX3NpemUpOwo+IC0JaWYgKCFkZXYtPmRtYV9wb29s KSB7Cj4gLQkJcHJfZXJyKCJjb3VsZCBub3QgY3JlYXRlIGRtYSBwb29sXG4iKTsKPiAtCQlrcmVm X3B1dCgmZGV2LT5yZWYsIG52bV9mcmVlKTsKPiAtCQlyZXR1cm4gLUVOT01FTTsKPiAtCX0KPiAt Cj4gLQkvKiByZWdpc3RlciBkZXZpY2Ugd2l0aCBhIHN1cHBvcnRlZCBtZWRpYSBtYW5hZ2VyICov Cj4gLQlkb3duX3dyaXRlKCZudm1fbG9jayk7Cj4gLQlsaXN0X2FkZCgmZGV2LT5kZXZpY2VzLCAm bnZtX2RldmljZXMpOwo+IC0JdXBfd3JpdGUoJm52bV9sb2NrKTsKPiAtCj4gLQlyZXR1cm4gMDsK PiAtfQo+IC1FWFBPUlRfU1lNQk9MKG52bV9yZWdpc3Rlcik7Cj4gLQo+IC12b2lkIG52bV91bnJl Z2lzdGVyKHN0cnVjdCBudm1fZGV2ICpkZXYpCj4gLXsKPiAtCXN0cnVjdCBudm1fdGFyZ2V0ICp0 LCAqdG1wOwo+IC0KPiAtCW11dGV4X2xvY2soJmRldi0+bWxvY2spOwo+IC0JbGlzdF9mb3JfZWFj aF9lbnRyeV9zYWZlKHQsIHRtcCwgJmRldi0+dGFyZ2V0cywgbGlzdCkgewo+IC0JCWlmICh0LT5k ZXYtPnBhcmVudCAhPSBkZXYpCj4gLQkJCWNvbnRpbnVlOwo+IC0JCV9fbnZtX3JlbW92ZV90YXJn ZXQodCwgZmFsc2UpOwo+IC0JCWtyZWZfcHV0KCZkZXYtPnJlZiwgbnZtX2ZyZWUpOwo+IC0JfQo+ IC0JbXV0ZXhfdW5sb2NrKCZkZXYtPm1sb2NrKTsKPiAtCj4gLQlkb3duX3dyaXRlKCZudm1fbG9j ayk7Cj4gLQlsaXN0X2RlbCgmZGV2LT5kZXZpY2VzKTsKPiAtCXVwX3dyaXRlKCZudm1fbG9jayk7 Cj4gLQo+IC0Ja3JlZl9wdXQoJmRldi0+cmVmLCBudm1fZnJlZSk7Cj4gLX0KPiAtRVhQT1JUX1NZ TUJPTChudm1fdW5yZWdpc3Rlcik7Cj4gLQo+IC1zdGF0aWMgaW50IF9fbnZtX2NvbmZpZ3VyZV9j cmVhdGUoc3RydWN0IG52bV9pb2N0bF9jcmVhdGUgKmNyZWF0ZSkKPiAtewo+IC0Jc3RydWN0IG52 bV9kZXYgKmRldjsKPiAtCWludCByZXQ7Cj4gLQo+IC0JZG93bl93cml0ZSgmbnZtX2xvY2spOwo+ IC0JZGV2ID0gbnZtX2ZpbmRfbnZtX2RldihjcmVhdGUtPmRldik7Cj4gLQl1cF93cml0ZSgmbnZt X2xvY2spOwo+IC0KPiAtCWlmICghZGV2KSB7Cj4gLQkJcHJfZXJyKCJkZXZpY2Ugbm90IGZvdW5k XG4iKTsKPiAtCQlyZXR1cm4gLUVJTlZBTDsKPiAtCX0KPiAtCj4gLQlrcmVmX2dldCgmZGV2LT5y ZWYpOwo+IC0JcmV0ID0gbnZtX2NyZWF0ZV90Z3QoZGV2LCBjcmVhdGUpOwo+IC0JaWYgKHJldCkK PiAtCQlrcmVmX3B1dCgmZGV2LT5yZWYsIG52bV9mcmVlKTsKPiAtCj4gLQlyZXR1cm4gcmV0Owo+ IC19Cj4gLQo+IC1zdGF0aWMgbG9uZyBudm1faW9jdGxfaW5mbyhzdHJ1Y3QgZmlsZSAqZmlsZSwg dm9pZCBfX3VzZXIgKmFyZykKPiAtewo+IC0Jc3RydWN0IG52bV9pb2N0bF9pbmZvICppbmZvOwo+ IC0Jc3RydWN0IG52bV90Z3RfdHlwZSAqdHQ7Cj4gLQlpbnQgdGd0X2l0ZXIgPSAwOwo+IC0KPiAt CWluZm8gPSBtZW1kdXBfdXNlcihhcmcsIHNpemVvZihzdHJ1Y3QgbnZtX2lvY3RsX2luZm8pKTsK PiAtCWlmIChJU19FUlIoaW5mbykpCj4gLQkJcmV0dXJuIFBUUl9FUlIoaW5mbyk7Cj4gLQo+IC0J aW5mby0+dmVyc2lvblswXSA9IE5WTV9WRVJTSU9OX01BSk9SOwo+IC0JaW5mby0+dmVyc2lvblsx XSA9IE5WTV9WRVJTSU9OX01JTk9SOwo+IC0JaW5mby0+dmVyc2lvblsyXSA9IE5WTV9WRVJTSU9O X1BBVENIOwo+IC0KPiAtCWRvd25fd3JpdGUoJm52bV90Z3R0X2xvY2spOwo+IC0JbGlzdF9mb3Jf ZWFjaF9lbnRyeSh0dCwgJm52bV90Z3RfdHlwZXMsIGxpc3QpIHsKPiAtCQlzdHJ1Y3QgbnZtX2lv Y3RsX2luZm9fdGd0ICp0Z3QgPSAmaW5mby0+dGd0c1t0Z3RfaXRlcl07Cj4gLQo+IC0JCXRndC0+ dmVyc2lvblswXSA9IHR0LT52ZXJzaW9uWzBdOwo+IC0JCXRndC0+dmVyc2lvblsxXSA9IHR0LT52 ZXJzaW9uWzFdOwo+IC0JCXRndC0+dmVyc2lvblsyXSA9IHR0LT52ZXJzaW9uWzJdOwo+IC0JCXN0 cm5jcHkodGd0LT50Z3RuYW1lLCB0dC0+bmFtZSwgTlZNX1RUWVBFX05BTUVfTUFYKTsKPiAtCj4g LQkJdGd0X2l0ZXIrKzsKPiAtCX0KPiAtCj4gLQlpbmZvLT50Z3RzaXplID0gdGd0X2l0ZXI7Cj4g LQl1cF93cml0ZSgmbnZtX3RndHRfbG9jayk7Cj4gLQo+IC0JaWYgKGNvcHlfdG9fdXNlcihhcmcs IGluZm8sIHNpemVvZihzdHJ1Y3QgbnZtX2lvY3RsX2luZm8pKSkgewo+IC0JCWtmcmVlKGluZm8p Owo+IC0JCXJldHVybiAtRUZBVUxUOwo+IC0JfQo+IC0KPiAtCWtmcmVlKGluZm8pOwo+IC0JcmV0 dXJuIDA7Cj4gLX0KPiAtCj4gLXN0YXRpYyBsb25nIG52bV9pb2N0bF9nZXRfZGV2aWNlcyhzdHJ1 Y3QgZmlsZSAqZmlsZSwgdm9pZCBfX3VzZXIgKmFyZykKPiAtewo+IC0Jc3RydWN0IG52bV9pb2N0 bF9nZXRfZGV2aWNlcyAqZGV2aWNlczsKPiAtCXN0cnVjdCBudm1fZGV2ICpkZXY7Cj4gLQlpbnQg aSA9IDA7Cj4gLQo+IC0JZGV2aWNlcyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBudm1faW9jdGxf Z2V0X2RldmljZXMpLCBHRlBfS0VSTkVMKTsKPiAtCWlmICghZGV2aWNlcykKPiAtCQlyZXR1cm4g LUVOT01FTTsKPiAtCj4gLQlkb3duX3dyaXRlKCZudm1fbG9jayk7Cj4gLQlsaXN0X2Zvcl9lYWNo X2VudHJ5KGRldiwgJm52bV9kZXZpY2VzLCBkZXZpY2VzKSB7Cj4gLQkJc3RydWN0IG52bV9pb2N0 bF9kZXZpY2VfaW5mbyAqaW5mbyA9ICZkZXZpY2VzLT5pbmZvW2ldOwo+IC0KPiAtCQlzdHJsY3B5 KGluZm8tPmRldm5hbWUsIGRldi0+bmFtZSwgc2l6ZW9mKGluZm8tPmRldm5hbWUpKTsKPiAtCj4g LQkJLyoga2VwdCBmb3IgY29tcGF0aWJpbGl0eSAqLwo+IC0JCWluZm8tPmJtdmVyc2lvblswXSA9 IDE7Cj4gLQkJaW5mby0+Ym12ZXJzaW9uWzFdID0gMDsKPiAtCQlpbmZvLT5ibXZlcnNpb25bMl0g PSAwOwo+IC0JCXN0cmxjcHkoaW5mby0+Ym1uYW1lLCAiZ2VubnZtIiwgc2l6ZW9mKGluZm8tPmJt bmFtZSkpOwo+IC0JCWkrKzsKPiAtCj4gLQkJaWYgKGkgPj0gQVJSQVlfU0laRShkZXZpY2VzLT5p bmZvKSkgewo+IC0JCQlwcl9lcnIoIm1heCAlemQgZGV2aWNlcyBjYW4gYmUgcmVwb3J0ZWQuXG4i LAo+IC0JCQkgICAgICAgQVJSQVlfU0laRShkZXZpY2VzLT5pbmZvKSk7Cj4gLQkJCWJyZWFrOwo+ IC0JCX0KPiAtCX0KPiAtCXVwX3dyaXRlKCZudm1fbG9jayk7Cj4gLQo+IC0JZGV2aWNlcy0+bnJf ZGV2aWNlcyA9IGk7Cj4gLQo+IC0JaWYgKGNvcHlfdG9fdXNlcihhcmcsIGRldmljZXMsCj4gLQkJ CSBzaXplb2Yoc3RydWN0IG52bV9pb2N0bF9nZXRfZGV2aWNlcykpKSB7Cj4gLQkJa2ZyZWUoZGV2 aWNlcyk7Cj4gLQkJcmV0dXJuIC1FRkFVTFQ7Cj4gLQl9Cj4gLQo+IC0Ja2ZyZWUoZGV2aWNlcyk7 Cj4gLQlyZXR1cm4gMDsKPiAtfQo+IC0KPiAtc3RhdGljIGxvbmcgbnZtX2lvY3RsX2Rldl9jcmVh dGUoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgX191c2VyICphcmcpCj4gLXsKPiAtCXN0cnVjdCBu dm1faW9jdGxfY3JlYXRlIGNyZWF0ZTsKPiAtCj4gLQlpZiAoY29weV9mcm9tX3VzZXIoJmNyZWF0 ZSwgYXJnLCBzaXplb2Yoc3RydWN0IG52bV9pb2N0bF9jcmVhdGUpKSkKPiAtCQlyZXR1cm4gLUVG QVVMVDsKPiAtCj4gLQlpZiAoY3JlYXRlLmNvbmYudHlwZSA9PSBOVk1fQ09ORklHX1RZUEVfRVhU RU5ERUQgJiYKPiAtCSAgICBjcmVhdGUuY29uZi5lLnJzdiAhPSAwKSB7Cj4gLQkJcHJfZXJyKCJy ZXNlcnZlZCBjb25maWcgZmllbGQgaW4gdXNlXG4iKTsKPiAtCQlyZXR1cm4gLUVJTlZBTDsKPiAt CX0KPiAtCj4gLQljcmVhdGUuZGV2W0RJU0tfTkFNRV9MRU4gLSAxXSA9ICdcMCc7Cj4gLQljcmVh dGUudGd0dHlwZVtOVk1fVFRZUEVfTkFNRV9NQVggLSAxXSA9ICdcMCc7Cj4gLQljcmVhdGUudGd0 bmFtZVtESVNLX05BTUVfTEVOIC0gMV0gPSAnXDAnOwo+IC0KPiAtCWlmIChjcmVhdGUuZmxhZ3Mg IT0gMCkgewo+IC0JCV9fdTMyIGZsYWdzID0gY3JlYXRlLmZsYWdzOwo+IC0KPiAtCQkvKiBDaGVj ayBmb3IgdmFsaWQgZmxhZ3MgKi8KPiAtCQlpZiAoZmxhZ3MgJiBOVk1fVEFSR0VUX0ZBQ1RPUlkp Cj4gLQkJCWZsYWdzICY9IH5OVk1fVEFSR0VUX0ZBQ1RPUlk7Cj4gLQo+IC0JCWlmIChmbGFncykg ewo+IC0JCQlwcl9lcnIoImZsYWcgbm90IHN1cHBvcnRlZFxuIik7Cj4gLQkJCXJldHVybiAtRUlO VkFMOwo+IC0JCX0KPiAtCX0KPiAtCj4gLQlyZXR1cm4gX19udm1fY29uZmlndXJlX2NyZWF0ZSgm Y3JlYXRlKTsKPiAtfQo+IC0KPiAtc3RhdGljIGxvbmcgbnZtX2lvY3RsX2Rldl9yZW1vdmUoc3Ry dWN0IGZpbGUgKmZpbGUsIHZvaWQgX191c2VyICphcmcpCj4gLXsKPiAtCXN0cnVjdCBudm1faW9j dGxfcmVtb3ZlIHJlbW92ZTsKPiAtCj4gLQlpZiAoY29weV9mcm9tX3VzZXIoJnJlbW92ZSwgYXJn LCBzaXplb2Yoc3RydWN0IG52bV9pb2N0bF9yZW1vdmUpKSkKPiAtCQlyZXR1cm4gLUVGQVVMVDsK PiAtCj4gLQlyZW1vdmUudGd0bmFtZVtESVNLX05BTUVfTEVOIC0gMV0gPSAnXDAnOwo+IC0KPiAt CWlmIChyZW1vdmUuZmxhZ3MgIT0gMCkgewo+IC0JCXByX2Vycigibm8gZmxhZ3Mgc3VwcG9ydGVk XG4iKTsKPiAtCQlyZXR1cm4gLUVJTlZBTDsKPiAtCX0KPiAtCj4gLQlyZXR1cm4gbnZtX3JlbW92 ZV90Z3QoJnJlbW92ZSk7Cj4gLX0KPiAtCj4gLS8qIGtlcHQgZm9yIGNvbXBhdGliaWxpdHkgcmVh c29ucyAqLwo+IC1zdGF0aWMgbG9uZyBudm1faW9jdGxfZGV2X2luaXQoc3RydWN0IGZpbGUgKmZp bGUsIHZvaWQgX191c2VyICphcmcpCj4gLXsKPiAtCXN0cnVjdCBudm1faW9jdGxfZGV2X2luaXQg aW5pdDsKPiAtCj4gLQlpZiAoY29weV9mcm9tX3VzZXIoJmluaXQsIGFyZywgc2l6ZW9mKHN0cnVj dCBudm1faW9jdGxfZGV2X2luaXQpKSkKPiAtCQlyZXR1cm4gLUVGQVVMVDsKPiAtCj4gLQlpZiAo aW5pdC5mbGFncyAhPSAwKSB7Cj4gLQkJcHJfZXJyKCJubyBmbGFncyBzdXBwb3J0ZWRcbiIpOwo+ IC0JCXJldHVybiAtRUlOVkFMOwo+IC0JfQo+IC0KPiAtCXJldHVybiAwOwo+IC19Cj4gLQo+IC0v KiBLZXB0IGZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMgKi8KPiAtc3RhdGljIGxvbmcgbnZtX2lv Y3RsX2Rldl9mYWN0b3J5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkIF9fdXNlciAqYXJnKQo+IC17 Cj4gLQlzdHJ1Y3QgbnZtX2lvY3RsX2Rldl9mYWN0b3J5IGZhY3Q7Cj4gLQo+IC0JaWYgKGNvcHlf ZnJvbV91c2VyKCZmYWN0LCBhcmcsIHNpemVvZihzdHJ1Y3QgbnZtX2lvY3RsX2Rldl9mYWN0b3J5 KSkpCj4gLQkJcmV0dXJuIC1FRkFVTFQ7Cj4gLQo+IC0JZmFjdC5kZXZbRElTS19OQU1FX0xFTiAt IDFdID0gJ1wwJzsKPiAtCj4gLQlpZiAoZmFjdC5mbGFncyAmIH4oTlZNX0ZBQ1RPUllfTlJfQklU UyAtIDEpKQo+IC0JCXJldHVybiAtRUlOVkFMOwo+IC0KPiAtCXJldHVybiAwOwo+IC19Cj4gLQo+ IC1zdGF0aWMgbG9uZyBudm1fY3RsX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1aW50IGNtZCwg dW5zaWduZWQgbG9uZyBhcmcpCj4gLXsKPiAtCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191 c2VyICopYXJnOwo+IC0KPiAtCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKPiAtCQlyZXR1 cm4gLUVQRVJNOwo+IC0KPiAtCXN3aXRjaCAoY21kKSB7Cj4gLQljYXNlIE5WTV9JTkZPOgo+IC0J CXJldHVybiBudm1faW9jdGxfaW5mbyhmaWxlLCBhcmdwKTsKPiAtCWNhc2UgTlZNX0dFVF9ERVZJ Q0VTOgo+IC0JCXJldHVybiBudm1faW9jdGxfZ2V0X2RldmljZXMoZmlsZSwgYXJncCk7Cj4gLQlj YXNlIE5WTV9ERVZfQ1JFQVRFOgo+IC0JCXJldHVybiBudm1faW9jdGxfZGV2X2NyZWF0ZShmaWxl LCBhcmdwKTsKPiAtCWNhc2UgTlZNX0RFVl9SRU1PVkU6Cj4gLQkJcmV0dXJuIG52bV9pb2N0bF9k ZXZfcmVtb3ZlKGZpbGUsIGFyZ3ApOwo+IC0JY2FzZSBOVk1fREVWX0lOSVQ6Cj4gLQkJcmV0dXJu IG52bV9pb2N0bF9kZXZfaW5pdChmaWxlLCBhcmdwKTsKPiAtCWNhc2UgTlZNX0RFVl9GQUNUT1JZ Ogo+IC0JCXJldHVybiBudm1faW9jdGxfZGV2X2ZhY3RvcnkoZmlsZSwgYXJncCk7Cj4gLQl9Cj4g LQlyZXR1cm4gMDsKPiAtfQo+IC0KPiAtc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlv bnMgX2N0bF9mb3BzID0gewo+IC0JLm9wZW4gPSBub25zZWVrYWJsZV9vcGVuLAo+IC0JLnVubG9j a2VkX2lvY3RsID0gbnZtX2N0bF9pb2N0bCwKPiAtCS5vd25lciA9IFRISVNfTU9EVUxFLAo+IC0J Lmxsc2VlayAgPSBub29wX2xsc2VlaywKPiAtfTsKPiAtCj4gLXN0YXRpYyBzdHJ1Y3QgbWlzY2Rl dmljZSBfbnZtX21pc2MgPSB7Cj4gLQkubWlub3IJCT0gTUlTQ19EWU5BTUlDX01JTk9SLAo+IC0J Lm5hbWUJCT0gImxpZ2h0bnZtIiwKPiAtCS5ub2RlbmFtZQk9ICJsaWdodG52bS9jb250cm9sIiwK PiAtCS5mb3BzCQk9ICZfY3RsX2ZvcHMsCj4gLX07Cj4gLWJ1aWx0aW5fbWlzY19kZXZpY2UoX252 bV9taXNjKTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9saWdodG52bS9wYmxrLWNhY2hlLmMgYi9k cml2ZXJzL2xpZ2h0bnZtL3BibGstY2FjaGUuYwo+IGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAo+ IGluZGV4IGYxODVmMWEwMDAwOC4uMDAwMDAwMDAwMDAwCj4gLS0tIGEvZHJpdmVycy9saWdodG52 bS9wYmxrLWNhY2hlLmMKPiArKysgL2Rldi9udWxsCj4gQEAgLTEsMTM3ICswLDAgQEAKPiAtLy8g U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKPiAtLyoKPiAtICogQ29weXJpZ2h0IChD KSAyMDE2IENORVggTGFicwo+IC0gKiBJbml0aWFsIHJlbGVhc2U6IEphdmllciBHb256YWxleiA8 amF2aWVyQGNuZXhsYWJzLmNvbT4KPiAtICogICAgICAgICAgICAgICAgICBNYXRpYXMgQmpvcmxp bmcgPG1hdGlhc0BjbmV4bGFicy5jb20+Cj4gLSAqCj4gLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKPiAtICogbW9kaWZ5IGl0 IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lv bgo+IC0gKiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgo+ IC0gKgo+IC0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp dCB3aWxsIGJlIHVzZWZ1bCwgYnV0Cj4gLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPiAtICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKPiAtICogR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+IC0gKgo+IC0gKiBwYmxrLWNhY2hl LmMgLSBwYmxrJ3Mgd3JpdGUgY2FjaGUKPiAtICovCj4gLQo+IC0jaW5jbHVkZSAicGJsay5oIgo+ IC0KPiAtdm9pZCBwYmxrX3dyaXRlX3RvX2NhY2hlKHN0cnVjdCBwYmxrICpwYmxrLCBzdHJ1Y3Qg YmlvICpiaW8sCj4gLQkJCQl1bnNpZ25lZCBsb25nIGZsYWdzKQo+IC17Cj4gLQlzdHJ1Y3QgcGJs a193X2N0eCB3X2N0eDsKPiAtCXNlY3Rvcl90IGxiYSA9IHBibGtfZ2V0X2xiYShiaW8pOwo+IC0J dW5zaWduZWQgbG9uZyBzdGFydF90aW1lOwo+IC0JdW5zaWduZWQgaW50IGJwb3MsIHBvczsKPiAt CWludCBucl9lbnRyaWVzID0gcGJsa19nZXRfc2VjcyhiaW8pOwo+IC0JaW50IGksIHJldDsKPiAt Cj4gLQlzdGFydF90aW1lID0gYmlvX3N0YXJ0X2lvX2FjY3QoYmlvKTsKPiAtCj4gLQkvKiBVcGRh dGUgdGhlIHdyaXRlIGJ1ZmZlciBoZWFkIChtZW0pIHdpdGggdGhlIGVudHJpZXMgdGhhdCB3ZSBj YW4KPiAtCSAqIHdyaXRlLiBUaGUgd3JpdGUgaW4gaXRzZWxmIGNhbm5vdCBmYWlsLCBzbyB0aGVy ZSBpcyBubyBuZWVkIHRvCj4gLQkgKiByb2xsYmFjayBmcm9tIGhlcmUgb24uCj4gLQkgKi8KPiAt cmV0cnk6Cj4gLQlyZXQgPSBwYmxrX3JiX21heV93cml0ZV91c2VyKCZwYmxrLT5yd2IsIGJpbywg bnJfZW50cmllcywgJmJwb3MpOwo+IC0Jc3dpdGNoIChyZXQpIHsKPiAtCWNhc2UgTlZNX0lPX1JF UVVFVUU6Cj4gLQkJaW9fc2NoZWR1bGUoKTsKPiAtCQlnb3RvIHJldHJ5Owo+IC0JY2FzZSBOVk1f SU9fRVJSOgo+IC0JCXBibGtfcGlwZWxpbmVfc3RvcChwYmxrKTsKPiAtCQliaW9faW9fZXJyb3Io YmlvKTsKPiAtCQlnb3RvIG91dDsKPiAtCX0KPiAtCj4gLQlwYmxrX3BwYV9zZXRfZW1wdHkoJndf Y3R4LnBwYSk7Cj4gLQl3X2N0eC5mbGFncyA9IGZsYWdzOwo+IC0JaWYgKGJpby0+Ymlfb3BmICYg UkVRX1BSRUZMVVNIKSB7Cj4gLQkJd19jdHguZmxhZ3MgfD0gUEJMS19GTFVTSF9FTlRSWTsKPiAt CQlwYmxrX3dyaXRlX2tpY2socGJsayk7Cj4gLQl9Cj4gLQo+IC0JaWYgKHVubGlrZWx5KCFiaW9f aGFzX2RhdGEoYmlvKSkpCj4gLQkJZ290byBvdXQ7Cj4gLQo+IC0JZm9yIChpID0gMDsgaSA8IG5y X2VudHJpZXM7IGkrKykgewo+IC0JCXZvaWQgKmRhdGEgPSBiaW9fZGF0YShiaW8pOwo+IC0KPiAt CQl3X2N0eC5sYmEgPSBsYmEgKyBpOwo+IC0KPiAtCQlwb3MgPSBwYmxrX3JiX3dyYXBfcG9zKCZw YmxrLT5yd2IsIGJwb3MgKyBpKTsKPiAtCQlwYmxrX3JiX3dyaXRlX2VudHJ5X3VzZXIoJnBibGst PnJ3YiwgZGF0YSwgd19jdHgsIHBvcyk7Cj4gLQo+IC0JCWJpb19hZHZhbmNlKGJpbywgUEJMS19F WFBPU0VEX1BBR0VfU0laRSk7Cj4gLQl9Cj4gLQo+IC0JYXRvbWljNjRfYWRkKG5yX2VudHJpZXMs ICZwYmxrLT51c2VyX3dhKTsKPiAtCj4gLSNpZmRlZiBDT05GSUdfTlZNX1BCTEtfREVCVUcKPiAt CWF0b21pY19sb25nX2FkZChucl9lbnRyaWVzLCAmcGJsay0+aW5mbGlnaHRfd3JpdGVzKTsKPiAt CWF0b21pY19sb25nX2FkZChucl9lbnRyaWVzLCAmcGJsay0+cmVxX3dyaXRlcyk7Cj4gLSNlbmRp Zgo+IC0KPiAtCXBibGtfcmxfaW5zZXJ0ZWQoJnBibGstPnJsLCBucl9lbnRyaWVzKTsKPiAtCj4g LW91dDoKPiAtCWJpb19lbmRfaW9fYWNjdChiaW8sIHN0YXJ0X3RpbWUpOwo+IC0JcGJsa193cml0 ZV9zaG91bGRfa2ljayhwYmxrKTsKPiAtCj4gLQlpZiAocmV0ID09IE5WTV9JT19ET05FKQo+IC0J CWJpb19lbmRpbyhiaW8pOwo+IC19Cj4gLQo+IC0vKgo+IC0gKiBPbiBHQyB0aGUgaW5jb21pbmcg bGJhcyBhcmUgbm90IG5lY2Vzc2FyaWx5IHNlcXVlbnRpYWwuIEFsc28sIHNvbWUgb2YgdGhlCj4g LSAqIGxiYXMgbWlnaHQgbm90IGJlIHZhbGlkIGVudHJpZXMsIHdoaWNoIGFyZSBtYXJrZWQgYXMg ZW1wdHkgYnkgdGhlIEdDIHRocmVhZAo+IC0gKi8KPiAtaW50IHBibGtfd3JpdGVfZ2NfdG9fY2Fj aGUoc3RydWN0IHBibGsgKnBibGssIHN0cnVjdCBwYmxrX2djX3JxICpnY19ycSkKPiAtewo+IC0J c3RydWN0IHBibGtfd19jdHggd19jdHg7Cj4gLQl1bnNpZ25lZCBpbnQgYnBvcywgcG9zOwo+IC0J dm9pZCAqZGF0YSA9IGdjX3JxLT5kYXRhOwo+IC0JaW50IGksIHZhbGlkX2VudHJpZXM7Cj4gLQo+ IC0JLyogVXBkYXRlIHRoZSB3cml0ZSBidWZmZXIgaGVhZCAobWVtKSB3aXRoIHRoZSBlbnRyaWVz IHRoYXQgd2UgY2FuCj4gLQkgKiB3cml0ZS4gVGhlIHdyaXRlIGluIGl0c2VsZiBjYW5ub3QgZmFp bCwgc28gdGhlcmUgaXMgbm8gbmVlZCB0bwo+IC0JICogcm9sbGJhY2sgZnJvbSBoZXJlIG9uLgo+ IC0JICovCj4gLXJldHJ5Ogo+IC0JaWYgKCFwYmxrX3JiX21heV93cml0ZV9nYygmcGJsay0+cndi LCBnY19ycS0+c2Vjc190b19nYywgJmJwb3MpKSB7Cj4gLQkJaW9fc2NoZWR1bGUoKTsKPiAtCQln b3RvIHJldHJ5Owo+IC0JfQo+IC0KPiAtCXdfY3R4LmZsYWdzID0gUEJMS19JT1RZUEVfR0M7Cj4g LQlwYmxrX3BwYV9zZXRfZW1wdHkoJndfY3R4LnBwYSk7Cj4gLQo+IC0JZm9yIChpID0gMCwgdmFs aWRfZW50cmllcyA9IDA7IGkgPCBnY19ycS0+bnJfc2VjczsgaSsrKSB7Cj4gLQkJaWYgKGdjX3Jx LT5sYmFfbGlzdFtpXSA9PSBBRERSX0VNUFRZKQo+IC0JCQljb250aW51ZTsKPiAtCj4gLQkJd19j dHgubGJhID0gZ2NfcnEtPmxiYV9saXN0W2ldOwo+IC0KPiAtCQlwb3MgPSBwYmxrX3JiX3dyYXBf cG9zKCZwYmxrLT5yd2IsIGJwb3MgKyB2YWxpZF9lbnRyaWVzKTsKPiAtCQlwYmxrX3JiX3dyaXRl X2VudHJ5X2djKCZwYmxrLT5yd2IsIGRhdGEsIHdfY3R4LCBnY19ycS0+bGluZSwKPiAtCQkJCQkJ Z2NfcnEtPnBhZGRyX2xpc3RbaV0sIHBvcyk7Cj4gLQo+IC0JCWRhdGEgKz0gUEJMS19FWFBPU0VE X1BBR0VfU0laRTsKPiAtCQl2YWxpZF9lbnRyaWVzKys7Cj4gLQl9Cj4gLQo+IC0JV0FSTl9PTkNF KGdjX3JxLT5zZWNzX3RvX2djICE9IHZhbGlkX2VudHJpZXMsCj4gLQkJCQkJInBibGs6IGluY29u c2lzdGVudCBHQyB3cml0ZVxuIik7Cj4gLQo+IC0JYXRvbWljNjRfYWRkKHZhbGlkX2VudHJpZXMs ICZwYmxrLT5nY193YSk7Cj4gLQo+IC0jaWZkZWYgQ09ORklHX05WTV9QQkxLX0RFQlVHCj4gLQlh dG9taWNfbG9uZ19hZGQodmFsaWRfZW50cmllcywgJnBibGstPmluZmxpZ2h0X3dyaXRlcyk7Cj4g LQlhdG9taWNfbG9uZ19hZGQodmFsaWRfZW50cmllcywgJnBibGstPnJlY292X2djX3dyaXRlcyk7 Cj4gLSNlbmRpZgo+IC0KPiAtCXBibGtfd3JpdGVfc2hvdWxkX2tpY2socGJsayk7Cj4gLQlyZXR1 cm4gTlZNX0lPX09LOwo+IC19Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGlnaHRudm0vcGJsay1j b3JlLmMgYi9kcml2ZXJzL2xpZ2h0bnZtL3BibGstY29yZS5jCj4gZGVsZXRlZCBmaWxlIG1vZGUg MTAwNjQ0Cj4gaW5kZXggMzNkMzlkM2RkMzQzLi4wMDAwMDAwMDAwMDAKPiAtLS0gYS9kcml2ZXJz L2xpZ2h0bnZtL3BibGstY29yZS5jCj4gKysrIC9kZXYvbnVsbAo+IEBAIC0xLDIxNTEgKzAsMCBA QAo+IC0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAo+IC0vKgo+IC0gKiBDb3B5 cmlnaHQgKEMpIDIwMTYgQ05FWCBMYWJzCj4gLSAqIEluaXRpYWwgcmVsZWFzZTogSmF2aWVyIEdv bnphbGV6IDxqYXZpZXJAY25leGxhYnMuY29tPgo+IC0gKiAgICAgICAgICAgICAgICAgIE1hdGlh cyBCam9ybGluZyA8bWF0aWFzQGNuZXhsYWJzLmNvbT4KPiAtICoKPiAtICogVGhpcyBwcm9ncmFt IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgo+IC0gKiBt b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSB2ZXJzaW9uCj4gLSAqIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb24uCj4gLSAqCj4gLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKPiAtICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+IC0gKiBNRVJDSEFOVEFCSUxJ VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQo+IC0g KiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCj4gLSAqCj4gLSAqIHBi bGstY29yZS5jIC0gcGJsaydzIGNvcmUgZnVuY3Rpb25hbGl0eQo+IC0gKgo+IC0gKi8KPiAtCj4g LSNkZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UUwo+IC0KPiAtI2luY2x1ZGUgInBibGsuaCIKPiAt I2luY2x1ZGUgInBibGstdHJhY2UuaCIKPiAtCj4gLXN0YXRpYyB2b2lkIHBibGtfbGluZV9tYXJr X2JiKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKPiAtewo+IC0Jc3RydWN0IHBibGtfbGluZV93 cyAqbGluZV93cyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcGJsa19saW5lX3dzLAo+IC0J CQkJCQkJCQl3cyk7Cj4gLQlzdHJ1Y3QgcGJsayAqcGJsayA9IGxpbmVfd3MtPnBibGs7Cj4gLQlz dHJ1Y3QgbnZtX3RndF9kZXYgKmRldiA9IHBibGstPmRldjsKPiAtCXN0cnVjdCBwcGFfYWRkciAq cHBhID0gbGluZV93cy0+cHJpdjsKPiAtCWludCByZXQ7Cj4gLQo+IC0JcmV0ID0gbnZtX3NldF9j aHVua19tZXRhKGRldiwgcHBhLCAxLCBOVk1fQkxLX1RfR1JXTl9CQUQpOwo+IC0JaWYgKHJldCkg ewo+IC0JCXN0cnVjdCBwYmxrX2xpbmUgKmxpbmU7Cj4gLQkJaW50IHBvczsKPiAtCj4gLQkJbGlu ZSA9IHBibGtfcHBhX3RvX2xpbmUocGJsaywgKnBwYSk7Cj4gLQkJcG9zID0gcGJsa19wcGFfdG9f cG9zKCZkZXYtPmdlbywgKnBwYSk7Cj4gLQo+IC0JCXBibGtfZXJyKHBibGssICJmYWlsZWQgdG8g bWFyayBiYiwgbGluZTolZCwgcG9zOiVkXG4iLAo+IC0JCQkJbGluZS0+aWQsIHBvcyk7Cj4gLQl9 Cj4gLQo+IC0Ja2ZyZWUocHBhKTsKPiAtCW1lbXBvb2xfZnJlZShsaW5lX3dzLCAmcGJsay0+Z2Vu X3dzX3Bvb2wpOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBwYmxrX21hcmtfYmIoc3RydWN0IHBi bGsgKnBibGssIHN0cnVjdCBwYmxrX2xpbmUgKmxpbmUsCj4gLQkJCSBzdHJ1Y3QgcHBhX2FkZHIg cHBhX2FkZHIpCj4gLXsKPiAtCXN0cnVjdCBudm1fdGd0X2RldiAqZGV2ID0gcGJsay0+ZGV2Owo+ IC0Jc3RydWN0IG52bV9nZW8gKmdlbyA9ICZkZXYtPmdlbzsKPiAtCXN0cnVjdCBwcGFfYWRkciAq cHBhOwo+IC0JaW50IHBvcyA9IHBibGtfcHBhX3RvX3BvcyhnZW8sIHBwYV9hZGRyKTsKPiAtCj4g LQlwYmxrX2RlYnVnKHBibGssICJlcmFzZSBmYWlsZWQ6IGxpbmU6JWQsIHBvczolZFxuIiwgbGlu ZS0+aWQsIHBvcyk7Cj4gLQlhdG9taWNfbG9uZ19pbmMoJnBibGstPmVyYXNlX2ZhaWxlZCk7Cj4g LQo+IC0JYXRvbWljX2RlYygmbGluZS0+YmxrX2luX2xpbmUpOwo+IC0JaWYgKHRlc3RfYW5kX3Nl dF9iaXQocG9zLCBsaW5lLT5ibGtfYml0bWFwKSkKPiAtCQlwYmxrX2VycihwYmxrLCAiYXR0ZW1w dGVkIHRvIGVyYXNlIGJiOiBsaW5lOiVkLCBwb3M6JWRcbiIsCj4gLQkJCQkJCQlsaW5lLT5pZCwg cG9zKTsKPiAtCj4gLQkvKiBOb3QgbmVjZXNzYXJ5IHRvIG1hcmsgYmFkIGJsb2NrcyBvbiAyLjAg c3BlYy4gKi8KPiAtCWlmIChnZW8tPnZlcnNpb24gPT0gTlZNX09DU1NEX1NQRUNfMjApCj4gLQkJ cmV0dXJuOwo+IC0KPiAtCXBwYSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwcGFfYWRkciksIEdG UF9BVE9NSUMpOwo+IC0JaWYgKCFwcGEpCj4gLQkJcmV0dXJuOwo+IC0KPiAtCSpwcGEgPSBwcGFf YWRkcjsKPiAtCXBibGtfZ2VuX3J1bl93cyhwYmxrLCBOVUxMLCBwcGEsIHBibGtfbGluZV9tYXJr X2JiLAo+IC0JCQkJCQlHRlBfQVRPTUlDLCBwYmxrLT5iYl93cSk7Cj4gLX0KPiAtCj4gLXN0YXRp YyB2b2lkIF9fcGJsa19lbmRfaW9fZXJhc2Uoc3RydWN0IHBibGsgKnBibGssIHN0cnVjdCBudm1f cnEgKnJxZCkKPiAtewo+IC0Jc3RydWN0IG52bV90Z3RfZGV2ICpkZXYgPSBwYmxrLT5kZXY7Cj4g LQlzdHJ1Y3QgbnZtX2dlbyAqZ2VvID0gJmRldi0+Z2VvOwo+IC0Jc3RydWN0IG52bV9jaGtfbWV0 YSAqY2h1bms7Cj4gLQlzdHJ1Y3QgcGJsa19saW5lICpsaW5lOwo+IC0JaW50IHBvczsKPiAtCj4g LQlsaW5lID0gcGJsa19wcGFfdG9fbGluZShwYmxrLCBycWQtPnBwYV9hZGRyKTsKPiAtCXBvcyA9 IHBibGtfcHBhX3RvX3BvcyhnZW8sIHJxZC0+cHBhX2FkZHIpOwo+IC0JY2h1bmsgPSAmbGluZS0+ Y2hrc1twb3NdOwo+IC0KPiAtCWF0b21pY19kZWMoJmxpbmUtPmxlZnRfc2VibGtzKTsKPiAtCj4g LQlpZiAocnFkLT5lcnJvcikgewo+IC0JCXRyYWNlX3BibGtfY2h1bmtfcmVzZXQocGJsa19kaXNr X25hbWUocGJsayksCj4gLQkJCQkmcnFkLT5wcGFfYWRkciwgUEJMS19DSFVOS19SRVNFVF9GQUlM RUQpOwo+IC0KPiAtCQljaHVuay0+c3RhdGUgPSBOVk1fQ0hLX1NUX09GRkxJTkU7Cj4gLQkJcGJs a19tYXJrX2JiKHBibGssIGxpbmUsIHJxZC0+cHBhX2FkZHIpOwo+IC0JfSBlbHNlIHsKPiAtCQl0 cmFjZV9wYmxrX2NodW5rX3Jlc2V0KHBibGtfZGlza19uYW1lKHBibGspLAo+IC0JCQkJJnJxZC0+ cHBhX2FkZHIsIFBCTEtfQ0hVTktfUkVTRVRfRE9ORSk7Cj4gLQo+IC0JCWNodW5rLT5zdGF0ZSA9 IE5WTV9DSEtfU1RfRlJFRTsKPiAtCX0KPiAtCj4gLQl0cmFjZV9wYmxrX2NodW5rX3N0YXRlKHBi bGtfZGlza19uYW1lKHBibGspLCAmcnFkLT5wcGFfYWRkciwKPiAtCQkJCWNodW5rLT5zdGF0ZSk7 Cj4gLQo+IC0JYXRvbWljX2RlYygmcGJsay0+aW5mbGlnaHRfaW8pOwo+IC19Cj4gLQo+IC0vKiBF cmFzZSBjb21wbGV0aW9uIGFzc3VtZXMgdGhhdCBvbmx5IG9uZSBibG9jayBpcyBlcmFzZWQgYXQg dGhlIHRpbWUgKi8KPiAtc3RhdGljIHZvaWQgcGJsa19lbmRfaW9fZXJhc2Uoc3RydWN0IG52bV9y cSAqcnFkKQo+IC17Cj4gLQlzdHJ1Y3QgcGJsayAqcGJsayA9IHJxZC0+cHJpdmF0ZTsKPiAtCj4g LQlfX3BibGtfZW5kX2lvX2VyYXNlKHBibGssIHJxZCk7Cj4gLQltZW1wb29sX2ZyZWUocnFkLCAm cGJsay0+ZV9ycV9wb29sKTsKPiAtfQo+IC0KPiAtLyoKPiAtICogR2V0IGluZm9ybWF0aW9uIGZv ciBhbGwgY2h1bmtzIGZyb20gdGhlIGRldmljZS4KPiAtICoKPiAtICogVGhlIGNhbGxlciBpcyBy ZXNwb25zaWJsZSBmb3IgZnJlZWluZyAodm1hbGxvYykgdGhlIHJldHVybmVkIHN0cnVjdHVyZQo+ IC0gKi8KPiAtc3RydWN0IG52bV9jaGtfbWV0YSAqcGJsa19nZXRfY2h1bmtfbWV0YShzdHJ1Y3Qg cGJsayAqcGJsaykKPiAtewo+IC0Jc3RydWN0IG52bV90Z3RfZGV2ICpkZXYgPSBwYmxrLT5kZXY7 Cj4gLQlzdHJ1Y3QgbnZtX2dlbyAqZ2VvID0gJmRldi0+Z2VvOwo+IC0Jc3RydWN0IG52bV9jaGtf bWV0YSAqbWV0YTsKPiAtCXN0cnVjdCBwcGFfYWRkciBwcGE7Cj4gLQl1bnNpZ25lZCBsb25nIGxl bjsKPiAtCWludCByZXQ7Cj4gLQo+IC0JcHBhLnBwYSA9IDA7Cj4gLQo+IC0JbGVuID0gZ2VvLT5h bGxfY2h1bmtzICogc2l6ZW9mKCptZXRhKTsKPiAtCW1ldGEgPSB2emFsbG9jKGxlbik7Cj4gLQlp ZiAoIW1ldGEpCj4gLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cj4gLQo+IC0JcmV0ID0gbnZt X2dldF9jaHVua19tZXRhKGRldiwgcHBhLCBnZW8tPmFsbF9jaHVua3MsIG1ldGEpOwo+IC0JaWYg KHJldCkgewo+IC0JCXZmcmVlKG1ldGEpOwo+IC0JCXJldHVybiBFUlJfUFRSKC1FSU8pOwo+IC0J fQo+IC0KPiAtCXJldHVybiBtZXRhOwo+IC19Cj4gLQo+IC1zdHJ1Y3QgbnZtX2Noa19tZXRhICpw YmxrX2NodW5rX2dldF9vZmYoc3RydWN0IHBibGsgKnBibGssCj4gLQkJCQkJICAgICAgc3RydWN0 IG52bV9jaGtfbWV0YSAqbWV0YSwKPiAtCQkJCQkgICAgICBzdHJ1Y3QgcHBhX2FkZHIgcHBhKQo+ IC17Cj4gLQlzdHJ1Y3QgbnZtX3RndF9kZXYgKmRldiA9IHBibGstPmRldjsKPiAtCXN0cnVjdCBu dm1fZ2VvICpnZW8gPSAmZGV2LT5nZW87Cj4gLQlpbnQgY2hfb2ZmID0gcHBhLm0uZ3JwICogZ2Vv LT5udW1fY2hrICogZ2VvLT5udW1fbHVuOwo+IC0JaW50IGx1bl9vZmYgPSBwcGEubS5wdSAqIGdl by0+bnVtX2NoazsKPiAtCWludCBjaGtfb2ZmID0gcHBhLm0uY2hrOwo+IC0KPiAtCXJldHVybiBt ZXRhICsgY2hfb2ZmICsgbHVuX29mZiArIGNoa19vZmY7Cj4gLX0KPiAtCj4gLXZvaWQgX19wYmxr X21hcF9pbnZhbGlkYXRlKHN0cnVjdCBwYmxrICpwYmxrLCBzdHJ1Y3QgcGJsa19saW5lICpsaW5l LAo+IC0JCQkgICB1NjQgcGFkZHIpCj4gLXsKPiAtCXN0cnVjdCBwYmxrX2xpbmVfbWdtdCAqbF9t ZyA9ICZwYmxrLT5sX21nOwo+IC0Jc3RydWN0IGxpc3RfaGVhZCAqbW92ZV9saXN0ID0gTlVMTDsK PiAtCj4gLQkvKiBMaW5lcyBiZWluZyByZWNsYWltZWQgKEdDJ2VkKSBjYW5ub3QgYmUgaW52YWxp ZGF0ZWQuIEJlZm9yZSB0aGUgTDJQCj4gLQkgKiB0YWJsZSBpcyBtb2RpZmllZCB3aXRoIHJlY2xh aW1lZCBzZWN0b3JzLCBhIGNoZWNrIGlzIGRvbmUgdG8gZW5kdXJlCj4gLQkgKiB0aGF0IG5ld2Vy IHVwZGF0ZXMgYXJlIG5vdCBvdmVyd3JpdHRlbi4KPiAtCSAqLwo+IC0Jc3Bpbl9sb2NrKCZsaW5l LT5sb2NrKTsKPiAtCVdBUk5fT04obGluZS0+c3RhdGUgPT0gUEJMS19MSU5FU1RBVEVfRlJFRSk7 Cj4gLQo+IC0JaWYgKHRlc3RfYW5kX3NldF9iaXQocGFkZHIsIGxpbmUtPmludmFsaWRfYml0bWFw KSkgewo+IC0JCVdBUk5fT05DRSgxLCAicGJsazogZG91YmxlIGludmFsaWRhdGVcbiIpOwo+IC0J CXNwaW5fdW5sb2NrKCZsaW5lLT5sb2NrKTsKPiAtCQlyZXR1cm47Cj4gLQl9Cj4gLQlsZTMyX2Fk ZF9jcHUobGluZS0+dnNjLCAtMSk7Cj4gLQo+IC0JaWYgKGxpbmUtPnN0YXRlID09IFBCTEtfTElO RVNUQVRFX0NMT1NFRCkKPiAtCQltb3ZlX2xpc3QgPSBwYmxrX2xpbmVfZ2NfbGlzdChwYmxrLCBs aW5lKTsKPiAtCXNwaW5fdW5sb2NrKCZsaW5lLT5sb2NrKTsKPiAtCj4gLQlpZiAobW92ZV9saXN0 KSB7Cj4gLQkJc3Bpbl9sb2NrKCZsX21nLT5nY19sb2NrKTsKPiAtCQlzcGluX2xvY2soJmxpbmUt PmxvY2spOwo+IC0JCS8qIFByZXZlbnQgbW92aW5nIGEgbGluZSB0aGF0IGhhcyBqdXN0IGJlZW4g Y2hvc2VuIGZvciBHQyAqLwo+IC0JCWlmIChsaW5lLT5zdGF0ZSA9PSBQQkxLX0xJTkVTVEFURV9H Qykgewo+IC0JCQlzcGluX3VubG9jaygmbGluZS0+bG9jayk7Cj4gLQkJCXNwaW5fdW5sb2NrKCZs X21nLT5nY19sb2NrKTsKPiAtCQkJcmV0dXJuOwo+IC0JCX0KPiAtCQlzcGluX3VubG9jaygmbGlu ZS0+bG9jayk7Cj4gLQo+IC0JCWxpc3RfbW92ZV90YWlsKCZsaW5lLT5saXN0LCBtb3ZlX2xpc3Qp Owo+IC0JCXNwaW5fdW5sb2NrKCZsX21nLT5nY19sb2NrKTsKPiAtCX0KPiAtfQo+IC0KPiAtdm9p ZCBwYmxrX21hcF9pbnZhbGlkYXRlKHN0cnVjdCBwYmxrICpwYmxrLCBzdHJ1Y3QgcHBhX2FkZHIg cHBhKQo+IC17Cj4gLQlzdHJ1Y3QgcGJsa19saW5lICpsaW5lOwo+IC0JdTY0IHBhZGRyOwo+IC0K PiAtI2lmZGVmIENPTkZJR19OVk1fUEJMS19ERUJVRwo+IC0JLyogQ2FsbGVycyBtdXN0IGVuc3Vy ZSB0aGF0IHRoZSBwcGEgcG9pbnRzIHRvIGEgZGV2aWNlIGFkZHJlc3MgKi8KPiAtCUJVR19PTihw YmxrX2FkZHJfaW5fY2FjaGUocHBhKSk7Cj4gLQlCVUdfT04ocGJsa19wcGFfZW1wdHkocHBhKSk7 Cj4gLSNlbmRpZgo+IC0KPiAtCWxpbmUgPSBwYmxrX3BwYV90b19saW5lKHBibGssIHBwYSk7Cj4g LQlwYWRkciA9IHBibGtfZGV2X3BwYV90b19saW5lX2FkZHIocGJsaywgcHBhKTsKPiAtCj4gLQlf X3BibGtfbWFwX2ludmFsaWRhdGUocGJsaywgbGluZSwgcGFkZHIpOwo+IC19Cj4gLQo+IC1zdGF0 aWMgdm9pZCBwYmxrX2ludmFsaWRhdGVfcmFuZ2Uoc3RydWN0IHBibGsgKnBibGssIHNlY3Rvcl90 IHNsYmEsCj4gLQkJCQkgIHVuc2lnbmVkIGludCBucl9zZWNzKQo+IC17Cj4gLQlzZWN0b3JfdCBs YmE7Cj4gLQo+IC0Jc3Bpbl9sb2NrKCZwYmxrLT50cmFuc19sb2NrKTsKPiAtCWZvciAobGJhID0g c2xiYTsgbGJhIDwgc2xiYSArIG5yX3NlY3M7IGxiYSsrKSB7Cj4gLQkJc3RydWN0IHBwYV9hZGRy IHBwYTsKPiAtCj4gLQkJcHBhID0gcGJsa190cmFuc19tYXBfZ2V0KHBibGssIGxiYSk7Cj4gLQo+ IC0JCWlmICghcGJsa19hZGRyX2luX2NhY2hlKHBwYSkgJiYgIXBibGtfcHBhX2VtcHR5KHBwYSkp Cj4gLQkJCXBibGtfbWFwX2ludmFsaWRhdGUocGJsaywgcHBhKTsKPiAtCj4gLQkJcGJsa19wcGFf c2V0X2VtcHR5KCZwcGEpOwo+IC0JCXBibGtfdHJhbnNfbWFwX3NldChwYmxrLCBsYmEsIHBwYSk7 Cj4gLQl9Cj4gLQlzcGluX3VubG9jaygmcGJsay0+dHJhbnNfbG9jayk7Cj4gLX0KPiAtCj4gLWlu dCBwYmxrX2FsbG9jX3JxZF9tZXRhKHN0cnVjdCBwYmxrICpwYmxrLCBzdHJ1Y3QgbnZtX3JxICpy cWQpCj4gLXsKPiAtCXN0cnVjdCBudm1fdGd0X2RldiAqZGV2ID0gcGJsay0+ZGV2Owo+IC0KPiAt CXJxZC0+bWV0YV9saXN0ID0gbnZtX2Rldl9kbWFfYWxsb2MoZGV2LT5wYXJlbnQsIEdGUF9LRVJO RUwsCj4gLQkJCQkJCQkmcnFkLT5kbWFfbWV0YV9saXN0KTsKPiAtCWlmICghcnFkLT5tZXRhX2xp c3QpCj4gLQkJcmV0dXJuIC1FTk9NRU07Cj4gLQo+IC0JaWYgKHJxZC0+bnJfcHBhcyA9PSAxKQo+ IC0JCXJldHVybiAwOwo+IC0KPiAtCXJxZC0+cHBhX2xpc3QgPSBycWQtPm1ldGFfbGlzdCArIHBi bGtfZG1hX21ldGFfc2l6ZShwYmxrKTsKPiAtCXJxZC0+ZG1hX3BwYV9saXN0ID0gcnFkLT5kbWFf bWV0YV9saXN0ICsgcGJsa19kbWFfbWV0YV9zaXplKHBibGspOwo+IC0KPiAtCXJldHVybiAwOwo+ IC19Cj4gLQo+IC12b2lkIHBibGtfZnJlZV9ycWRfbWV0YShzdHJ1Y3QgcGJsayAqcGJsaywgc3Ry dWN0IG52bV9ycSAqcnFkKQo+IC17Cj4gLQlzdHJ1Y3QgbnZtX3RndF9kZXYgKmRldiA9IHBibGst PmRldjsKPiAtCj4gLQlpZiAocnFkLT5tZXRhX2xpc3QpCj4gLQkJbnZtX2Rldl9kbWFfZnJlZShk ZXYtPnBhcmVudCwgcnFkLT5tZXRhX2xpc3QsCj4gLQkJCQlycWQtPmRtYV9tZXRhX2xpc3QpOwo+ IC19Cj4gLQo+IC0vKiBDYWxsZXIgbXVzdCBndWFyYW50ZWUgdGhhdCB0aGUgcmVxdWVzdCBpcyBh IHZhbGlkIHR5cGUgKi8KPiAtc3RydWN0IG52bV9ycSAqcGJsa19hbGxvY19ycWQoc3RydWN0IHBi bGsgKnBibGssIGludCB0eXBlKQo+IC17Cj4gLQltZW1wb29sX3QgKnBvb2w7Cj4gLQlzdHJ1Y3Qg bnZtX3JxICpycWQ7Cj4gLQlpbnQgcnFfc2l6ZTsKPiAtCj4gLQlzd2l0Y2ggKHR5cGUpIHsKPiAt CWNhc2UgUEJMS19XUklURToKPiAtCWNhc2UgUEJMS19XUklURV9JTlQ6Cj4gLQkJcG9vbCA9ICZw YmxrLT53X3JxX3Bvb2w7Cj4gLQkJcnFfc2l6ZSA9IHBibGtfd19ycV9zaXplOwo+IC0JCWJyZWFr Owo+IC0JY2FzZSBQQkxLX1JFQUQ6Cj4gLQkJcG9vbCA9ICZwYmxrLT5yX3JxX3Bvb2w7Cj4gLQkJ cnFfc2l6ZSA9IHBibGtfZ19ycV9zaXplOwo+IC0JCWJyZWFrOwo+IC0JZGVmYXVsdDoKPiAtCQlw b29sID0gJnBibGstPmVfcnFfcG9vbDsKPiAtCQlycV9zaXplID0gcGJsa19nX3JxX3NpemU7Cj4g LQl9Cj4gLQo+IC0JcnFkID0gbWVtcG9vbF9hbGxvYyhwb29sLCBHRlBfS0VSTkVMKTsKPiAtCW1l bXNldChycWQsIDAsIHJxX3NpemUpOwo+IC0KPiAtCXJldHVybiBycWQ7Cj4gLX0KPiAtCj4gLS8q IFR5cGljYWxseSB1c2VkIG9uIGNvbXBsZXRpb24gcGF0aC4gQ2Fubm90IGd1YXJhbnRlZSByZXF1 ZXN0IGNvbnNpc3RlbmN5ICovCj4gLXZvaWQgcGJsa19mcmVlX3JxZChzdHJ1Y3QgcGJsayAqcGJs aywgc3RydWN0IG52bV9ycSAqcnFkLCBpbnQgdHlwZSkKPiAtewo+IC0JbWVtcG9vbF90ICpwb29s Owo+IC0KPiAtCXN3aXRjaCAodHlwZSkgewo+IC0JY2FzZSBQQkxLX1dSSVRFOgo+IC0JCWtmcmVl KCgoc3RydWN0IHBibGtfY19jdHggKiludm1fcnFfdG9fcGR1KHJxZCkpLT5sdW5fYml0bWFwKTsK PiAtCQlmYWxsdGhyb3VnaDsKPiAtCWNhc2UgUEJMS19XUklURV9JTlQ6Cj4gLQkJcG9vbCA9ICZw YmxrLT53X3JxX3Bvb2w7Cj4gLQkJYnJlYWs7Cj4gLQljYXNlIFBCTEtfUkVBRDoKPiAtCQlwb29s ID0gJnBibGstPnJfcnFfcG9vbDsKPiAtCQlicmVhazsKPiAtCWNhc2UgUEJMS19FUkFTRToKPiAt CQlwb29sID0gJnBibGstPmVfcnFfcG9vbDsKPiAtCQlicmVhazsKPiAtCWRlZmF1bHQ6Cj4gLQkJ cGJsa19lcnIocGJsaywgInRyeWluZyB0byBmcmVlIHVua25vd24gcnFkIHR5cGVcbiIpOwo+IC0J CXJldHVybjsKPiAtCX0KPiAtCj4gLQlwYmxrX2ZyZWVfcnFkX21ldGEocGJsaywgcnFkKTsKPiAt CW1lbXBvb2xfZnJlZShycWQsIHBvb2wpOwo+IC19Cj4gLQo+IC12b2lkIHBibGtfYmlvX2ZyZWVf cGFnZXMoc3RydWN0IHBibGsgKnBibGssIHN0cnVjdCBiaW8gKmJpbywgaW50IG9mZiwKPiAtCQkJ IGludCBucl9wYWdlcykKPiAtewo+IC0Jc3RydWN0IGJpb192ZWMgKmJ2Owo+IC0Jc3RydWN0IHBh Z2UgKnBhZ2U7Cj4gLQlpbnQgaSwgZSwgbmJ2ID0gMDsKPiAtCj4gLQlmb3IgKGkgPSAwOyBpIDwg YmlvLT5iaV92Y250OyBpKyspIHsKPiAtCQlidiA9ICZiaW8tPmJpX2lvX3ZlY1tpXTsKPiAtCQlw YWdlID0gYnYtPmJ2X3BhZ2U7Cj4gLQkJZm9yIChlID0gMDsgZSA8IGJ2LT5idl9sZW47IGUgKz0g UEJMS19FWFBPU0VEX1BBR0VfU0laRSwgbmJ2KyspCj4gLQkJCWlmIChuYnYgPj0gb2ZmKQo+IC0J CQkJbWVtcG9vbF9mcmVlKHBhZ2UrKywgJnBibGstPnBhZ2VfYmlvX3Bvb2wpOwo+IC0JfQo+IC19 Cj4gLQo+IC1pbnQgcGJsa19iaW9fYWRkX3BhZ2VzKHN0cnVjdCBwYmxrICpwYmxrLCBzdHJ1Y3Qg YmlvICpiaW8sIGdmcF90IGZsYWdzLAo+IC0JCSAgICAgICBpbnQgbnJfcGFnZXMpCj4gLXsKPiAt CXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gcGJsay0+ZGV2LT5xOwo+IC0Jc3RydWN0IHBhZ2Ug KnBhZ2U7Cj4gLQlpbnQgaSwgcmV0Owo+IC0KPiAtCWZvciAoaSA9IDA7IGkgPCBucl9wYWdlczsg aSsrKSB7Cj4gLQkJcGFnZSA9IG1lbXBvb2xfYWxsb2MoJnBibGstPnBhZ2VfYmlvX3Bvb2wsIGZs YWdzKTsKPiAtCj4gLQkJcmV0ID0gYmlvX2FkZF9wY19wYWdlKHEsIGJpbywgcGFnZSwgUEJMS19F WFBPU0VEX1BBR0VfU0laRSwgMCk7Cj4gLQkJaWYgKHJldCAhPSBQQkxLX0VYUE9TRURfUEFHRV9T SVpFKSB7Cj4gLQkJCXBibGtfZXJyKHBibGssICJjb3VsZCBub3QgYWRkIHBhZ2UgdG8gYmlvXG4i KTsKPiAtCQkJbWVtcG9vbF9mcmVlKHBhZ2UsICZwYmxrLT5wYWdlX2Jpb19wb29sKTsKPiAtCQkJ Z290byBlcnI7Cj4gLQkJfQo+IC0JfQo+IC0KPiAtCXJldHVybiAwOwo+IC1lcnI6Cj4gLQlwYmxr X2Jpb19mcmVlX3BhZ2VzKHBibGssIGJpbywgKGJpby0+YmlfdmNudCAtIGkpLCBpKTsKPiAtCXJl dHVybiAtMTsKPiAtfQo+IC0KPiAtdm9pZCBwYmxrX3dyaXRlX2tpY2soc3RydWN0IHBibGsgKnBi bGspCj4gLXsKPiAtCXdha2VfdXBfcHJvY2VzcyhwYmxrLT53cml0ZXJfdHMpOwo+IC0JbW9kX3Rp bWVyKCZwYmxrLT53dGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDEwMDApKTsKPiAt fQo+IC0KPiAtdm9pZCBwYmxrX3dyaXRlX3RpbWVyX2ZuKHN0cnVjdCB0aW1lcl9saXN0ICp0KQo+ IC17Cj4gLQlzdHJ1Y3QgcGJsayAqcGJsayA9IGZyb21fdGltZXIocGJsaywgdCwgd3RpbWVyKTsK PiAtCj4gLQkvKiBraWNrIHRoZSB3cml0ZSB0aHJlYWQgZXZlcnkgdGljayB0byBmbHVzaCBvdXRz dGFuZGluZyBkYXRhICovCj4gLQlwYmxrX3dyaXRlX2tpY2socGJsayk7Cj4gLX0KPiAtCj4gLXZv aWQgcGJsa193cml0ZV9zaG91bGRfa2ljayhzdHJ1Y3QgcGJsayAqcGJsaykKPiAtewo+IC0JdW5z aWduZWQgaW50IHNlY3NfYXZhaWwgPSBwYmxrX3JiX3JlYWRfY291bnQoJnBibGstPnJ3Yik7Cj4g LQo+IC0JaWYgKHNlY3NfYXZhaWwgPj0gcGJsay0+bWluX3dyaXRlX3Bnc19kYXRhKQo+IC0JCXBi bGtfd3JpdGVfa2ljayhwYmxrKTsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgcGJsa193YWl0X2Zv cl9tZXRhKHN0cnVjdCBwYmxrICpwYmxrKQo+IC17Cj4gLQlkbyB7Cj4gLQkJaWYgKCFhdG9taWNf cmVhZCgmcGJsay0+aW5mbGlnaHRfaW8pKQo+IC0JCQlicmVhazsKPiAtCj4gLQkJc2NoZWR1bGUo KTsKPiAtCX0gd2hpbGUgKDEpOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBwYmxrX2ZsdXNoX3dy aXRlcihzdHJ1Y3QgcGJsayAqcGJsaykKPiAtewo+IC0JcGJsa19yYl9mbHVzaCgmcGJsay0+cndi KTsKPiAtCWRvIHsKPiAtCQlpZiAoIXBibGtfcmJfc3luY19jb3VudCgmcGJsay0+cndiKSkKPiAt CQkJYnJlYWs7Cj4gLQo+IC0JCXBibGtfd3JpdGVfa2ljayhwYmxrKTsKPiAtCQlzY2hlZHVsZSgp Owo+IC0JfSB3aGlsZSAoMSk7Cj4gLX0KPiAtCj4gLXN0cnVjdCBsaXN0X2hlYWQgKnBibGtfbGlu ZV9nY19saXN0KHN0cnVjdCBwYmxrICpwYmxrLCBzdHJ1Y3QgcGJsa19saW5lICpsaW5lKQo+IC17 Cj4gLQlzdHJ1Y3QgcGJsa19saW5lX21ldGEgKmxtID0gJnBibGstPmxtOwo+IC0Jc3RydWN0IHBi bGtfbGluZV9tZ210ICpsX21nID0gJnBibGstPmxfbWc7Cj4gLQlzdHJ1Y3QgbGlzdF9oZWFkICpt b3ZlX2xpc3QgPSBOVUxMOwo+IC0JaW50IHBhY2tlZF9tZXRhID0gKGxlMzJfdG9fY3B1KCpsaW5l LT52c2MpIC8gcGJsay0+bWluX3dyaXRlX3Bnc19kYXRhKQo+IC0JCQkqIChwYmxrLT5taW5fd3Jp dGVfcGdzIC0gcGJsay0+bWluX3dyaXRlX3Bnc19kYXRhKTsKPiAtCWludCB2c2MgPSBsZTMyX3Rv X2NwdSgqbGluZS0+dnNjKSArIHBhY2tlZF9tZXRhOwo+IC0KPiAtCWxvY2tkZXBfYXNzZXJ0X2hl bGQoJmxpbmUtPmxvY2spOwo+IC0KPiAtCWlmIChsaW5lLT53X2Vycl9nYy0+aGFzX3dyaXRlX2Vy cikgewo+IC0JCWlmIChsaW5lLT5nY19ncm91cCAhPSBQQkxLX0xJTkVHQ19XRVJSKSB7Cj4gLQkJ CWxpbmUtPmdjX2dyb3VwID0gUEJMS19MSU5FR0NfV0VSUjsKPiAtCQkJbW92ZV9saXN0ID0gJmxf bWctPmdjX3dlcnJfbGlzdDsKPiAtCQkJcGJsa19ybF93ZXJyX2xpbmVfaW4oJnBibGstPnJsKTsK PiAtCQl9Cj4gLQl9IGVsc2UgaWYgKCF2c2MpIHsKPiAtCQlpZiAobGluZS0+Z2NfZ3JvdXAgIT0g UEJMS19MSU5FR0NfRlVMTCkgewo+IC0JCQlsaW5lLT5nY19ncm91cCA9IFBCTEtfTElORUdDX0ZV TEw7Cj4gLQkJCW1vdmVfbGlzdCA9ICZsX21nLT5nY19mdWxsX2xpc3Q7Cj4gLQkJfQo+IC0JfSBl bHNlIGlmICh2c2MgPCBsbS0+aGlnaF90aHJzKSB7Cj4gLQkJaWYgKGxpbmUtPmdjX2dyb3VwICE9 IFBCTEtfTElORUdDX0hJR0gpIHsKPiAtCQkJbGluZS0+Z2NfZ3JvdXAgPSBQQkxLX0xJTkVHQ19I SUdIOwo+IC0JCQltb3ZlX2xpc3QgPSAmbF9tZy0+Z2NfaGlnaF9saXN0Owo+IC0JCX0KPiAtCX0g ZWxzZSBpZiAodnNjIDwgbG0tPm1pZF90aHJzKSB7Cj4gLQkJaWYgKGxpbmUtPmdjX2dyb3VwICE9 IFBCTEtfTElORUdDX01JRCkgewo+IC0JCQlsaW5lLT5nY19ncm91cCA9IFBCTEtfTElORUdDX01J RDsKPiAtCQkJbW92ZV9saXN0ID0gJmxfbWctPmdjX21pZF9saXN0Owo+IC0JCX0KPiAtCX0gZWxz ZSBpZiAodnNjIDwgbGluZS0+c2VjX2luX2xpbmUpIHsKPiAtCQlpZiAobGluZS0+Z2NfZ3JvdXAg IT0gUEJMS19MSU5FR0NfTE9XKSB7Cj4gLQkJCWxpbmUtPmdjX2dyb3VwID0gUEJMS19MSU5FR0Nf TE9XOwo+IC0JCQltb3ZlX2xpc3QgPSAmbF9tZy0+Z2NfbG93X2xpc3Q7Cj4gLQkJfQo+IC0JfSBl bHNlIGlmICh2c2MgPT0gbGluZS0+c2VjX2luX2xpbmUpIHsKPiAtCQlpZiAobGluZS0+Z2NfZ3Jv dXAgIT0gUEJMS19MSU5FR0NfRU1QVFkpIHsKPiAtCQkJbGluZS0+Z2NfZ3JvdXAgPSBQQkxLX0xJ TkVHQ19FTVBUWTsKPiAtCQkJbW92ZV9saXN0ID0gJmxfbWctPmdjX2VtcHR5X2xpc3Q7Cj4gLQkJ fQo+IC0JfSBlbHNlIHsKPiAtCQlsaW5lLT5zdGF0ZSA9IFBCTEtfTElORVNUQVRFX0NPUlJVUFQ7 Cj4gLQkJdHJhY2VfcGJsa19saW5lX3N0YXRlKHBibGtfZGlza19uYW1lKHBibGspLCBsaW5lLT5p ZCwKPiAtCQkJCQlsaW5lLT5zdGF0ZSk7Cj4gLQo+IC0JCWxpbmUtPmdjX2dyb3VwID0gUEJMS19M SU5FR0NfTk9ORTsKPiAtCQltb3ZlX2xpc3QgPSAgJmxfbWctPmNvcnJ1cHRfbGlzdDsKPiAtCQlw YmxrX2VycihwYmxrLCAiY29ycnVwdGVkIHZzYyBmb3IgbGluZSAlZCwgdnNjOiVkICglZC8lZC8l ZClcbiIsCj4gLQkJCQkJCWxpbmUtPmlkLCB2c2MsCj4gLQkJCQkJCWxpbmUtPnNlY19pbl9saW5l LAo+IC0JCQkJCQlsbS0+aGlnaF90aHJzLCBsbS0+bWlkX3RocnMpOwo+IC0JfQo+IC0KPiAtCXJl dHVybiBtb3ZlX2xpc3Q7Cj4gLX0KPiAtCj4gLXZvaWQgcGJsa19kaXNjYXJkKHN0cnVjdCBwYmxr ICpwYmxrLCBzdHJ1Y3QgYmlvICpiaW8pCj4gLXsKPiAtCXNlY3Rvcl90IHNsYmEgPSBwYmxrX2dl dF9sYmEoYmlvKTsKPiAtCXNlY3Rvcl90IG5yX3NlY3MgPSBwYmxrX2dldF9zZWNzKGJpbyk7Cj4g LQo+IC0JcGJsa19pbnZhbGlkYXRlX3JhbmdlKHBibGssIHNsYmEsIG5yX3NlY3MpOwo+IC19Cj4g LQo+IC12b2lkIHBibGtfbG9nX3dyaXRlX2VycihzdHJ1Y3QgcGJsayAqcGJsaywgc3RydWN0IG52 bV9ycSAqcnFkKQo+IC17Cj4gLQlhdG9taWNfbG9uZ19pbmMoJnBibGstPndyaXRlX2ZhaWxlZCk7 Cj4gLSNpZmRlZiBDT05GSUdfTlZNX1BCTEtfREVCVUcKPiAtCXBibGtfcHJpbnRfZmFpbGVkX3Jx ZChwYmxrLCBycWQsIHJxZC0+ZXJyb3IpOwo+IC0jZW5kaWYKPiAtfQo+IC0KPiAtdm9pZCBwYmxr X2xvZ19yZWFkX2VycihzdHJ1Y3QgcGJsayAqcGJsaywgc3RydWN0IG52bV9ycSAqcnFkKQo+IC17 Cj4gLQkvKiBFbXB0eSBwYWdlIHJlYWQgaXMgbm90IG5lY2Vzc2FyaWx5IGFuIGVycm9yIChlLmcu LCBMMlAgcmVjb3ZlcnkpICovCj4gLQlpZiAocnFkLT5lcnJvciA9PSBOVk1fUlNQX0VSUl9FTVBU WVBBR0UpIHsKPiAtCQlhdG9taWNfbG9uZ19pbmMoJnBibGstPnJlYWRfZW1wdHkpOwo+IC0JCXJl dHVybjsKPiAtCX0KPiAtCj4gLQlzd2l0Y2ggKHJxZC0+ZXJyb3IpIHsKPiAtCWNhc2UgTlZNX1JT UF9XQVJOX0hJR0hFQ0M6Cj4gLQkJYXRvbWljX2xvbmdfaW5jKCZwYmxrLT5yZWFkX2hpZ2hfZWNj KTsKPiAtCQlicmVhazsKPiAtCWNhc2UgTlZNX1JTUF9FUlJfRkFJTEVDQzoKPiAtCWNhc2UgTlZN X1JTUF9FUlJfRkFJTENSQzoKPiAtCQlhdG9taWNfbG9uZ19pbmMoJnBibGstPnJlYWRfZmFpbGVk KTsKPiAtCQlicmVhazsKPiAtCWRlZmF1bHQ6Cj4gLQkJcGJsa19lcnIocGJsaywgInVua25vd24g cmVhZCBlcnJvcjolZFxuIiwgcnFkLT5lcnJvcik7Cj4gLQl9Cj4gLSNpZmRlZiBDT05GSUdfTlZN X1BCTEtfREVCVUcKPiAtCXBibGtfcHJpbnRfZmFpbGVkX3JxZChwYmxrLCBycWQsIHJxZC0+ZXJy b3IpOwo+IC0jZW5kaWYKPiAtfQo+IC0KPiAtdm9pZCBwYmxrX3NldF9zZWNfcGVyX3dyaXRlKHN0 cnVjdCBwYmxrICpwYmxrLCBpbnQgc2VjX3Blcl93cml0ZSkKPiAtewo+IC0JcGJsay0+c2VjX3Bl cl93cml0ZSA9IHNlY19wZXJfd3JpdGU7Cj4gLX0KPiAtCj4gLWludCBwYmxrX3N1Ym1pdF9pbyhz dHJ1Y3QgcGJsayAqcGJsaywgc3RydWN0IG52bV9ycSAqcnFkLCB2b2lkICpidWYpCj4gLXsKPiAt CXN0cnVjdCBudm1fdGd0X2RldiAqZGV2ID0gcGJsay0+ZGV2Owo+IC0KPiAtCWF0b21pY19pbmMo JnBibGstPmluZmxpZ2h0X2lvKTsKPiAtCj4gLSNpZmRlZiBDT05GSUdfTlZNX1BCTEtfREVCVUcK PiAtCWlmIChwYmxrX2NoZWNrX2lvKHBibGssIHJxZCkpCj4gLQkJcmV0dXJuIE5WTV9JT19FUlI7 Cj4gLSNlbmRpZgo+IC0KPiAtCXJldHVybiBudm1fc3VibWl0X2lvKGRldiwgcnFkLCBidWYpOwo+ IC19Cj4gLQo+IC12b2lkIHBibGtfY2hlY2tfY2h1bmtfc3RhdGVfdXBkYXRlKHN0cnVjdCBwYmxr ICpwYmxrLCBzdHJ1Y3QgbnZtX3JxICpycWQpCj4gLXsKPiAtCXN0cnVjdCBwcGFfYWRkciAqcHBh X2xpc3QgPSBudm1fcnFfdG9fcHBhX2xpc3QocnFkKTsKPiAtCj4gLQlpbnQgaTsKPiAtCj4gLQlm b3IgKGkgPSAwOyBpIDwgcnFkLT5ucl9wcGFzOyBpKyspIHsKPiAtCQlzdHJ1Y3QgcHBhX2FkZHIg KnBwYSA9ICZwcGFfbGlzdFtpXTsKPiAtCQlzdHJ1Y3QgbnZtX2Noa19tZXRhICpjaHVuayA9IHBi bGtfZGV2X3BwYV90b19jaHVuayhwYmxrLCAqcHBhKTsKPiAtCQl1NjQgY2FkZHIgPSBwYmxrX2Rl dl9wcGFfdG9fY2h1bmtfYWRkcihwYmxrLCAqcHBhKTsKPiAtCj4gLQkJaWYgKGNhZGRyID09IDAp Cj4gLQkJCXRyYWNlX3BibGtfY2h1bmtfc3RhdGUocGJsa19kaXNrX25hbWUocGJsayksCj4gLQkJ CQkJCQlwcGEsIE5WTV9DSEtfU1RfT1BFTik7Cj4gLQkJZWxzZSBpZiAoY2FkZHIgPT0gKGNodW5r LT5jbmxiIC0gMSkpCj4gLQkJCXRyYWNlX3BibGtfY2h1bmtfc3RhdGUocGJsa19kaXNrX25hbWUo cGJsayksCj4gLQkJCQkJCQlwcGEsIE5WTV9DSEtfU1RfQ0xPU0VEKTsKPiAtCX0KPiAtfQo+IC0K PiAtaW50IHBibGtfc3VibWl0X2lvX3N5bmMoc3RydWN0IHBibGsgKnBibGssIHN0cnVjdCBudm1f cnEgKnJxZCwgdm9pZCAqYnVmKQo+IC17Cj4gLQlzdHJ1Y3QgbnZtX3RndF9kZXYgKmRldiA9IHBi bGstPmRldjsKPiAtCWludCByZXQ7Cj4gLQo+IC0JYXRvbWljX2luYygmcGJsay0+aW5mbGlnaHRf aW8pOwo+IC0KPiAtI2lmZGVmIENPTkZJR19OVk1fUEJMS19ERUJVRwo+IC0JaWYgKHBibGtfY2hl Y2tfaW8ocGJsaywgcnFkKSkKPiAtCQlyZXR1cm4gTlZNX0lPX0VSUjsKPiAtI2VuZGlmCj4gLQo+ IC0JcmV0ID0gbnZtX3N1Ym1pdF9pb19zeW5jKGRldiwgcnFkLCBidWYpOwo+IC0KPiAtCWlmICh0 cmFjZV9wYmxrX2NodW5rX3N0YXRlX2VuYWJsZWQoKSAmJiAhcmV0ICYmCj4gLQkgICAgcnFkLT5v cGNvZGUgPT0gTlZNX09QX1BXUklURSkKPiAtCQlwYmxrX2NoZWNrX2NodW5rX3N0YXRlX3VwZGF0 ZShwYmxrLCBycWQpOwo+IC0KPiAtCXJldHVybiByZXQ7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbnQg cGJsa19zdWJtaXRfaW9fc3luY19zZW0oc3RydWN0IHBibGsgKnBibGssIHN0cnVjdCBudm1fcnEg KnJxZCwKPiAtCQkJCSAgIHZvaWQgKmJ1ZikKPiAtewo+IC0Jc3RydWN0IHBwYV9hZGRyICpwcGFf bGlzdCA9IG52bV9ycV90b19wcGFfbGlzdChycWQpOwo+IC0JaW50IHJldDsKPiAtCj4gLQlwYmxr X2Rvd25fY2h1bmsocGJsaywgcHBhX2xpc3RbMF0pOwo+IC0JcmV0ID0gcGJsa19zdWJtaXRfaW9f c3luYyhwYmxrLCBycWQsIGJ1Zik7Cj4gLQlwYmxrX3VwX2NodW5rKHBibGssIHBwYV9saXN0WzBd KTsKPiAtCj4gLQlyZXR1cm4gcmV0Owo+IC19Cj4gLQo+IC1pbnQgcGJsa19jYWxjX3NlY3Moc3Ry dWN0IHBibGsgKnBibGssIHVuc2lnbmVkIGxvbmcgc2Vjc19hdmFpbCwKPiAtCQkgICB1bnNpZ25l ZCBsb25nIHNlY3NfdG9fZmx1c2gsIGJvb2wgc2tpcF9tZXRhKQo+IC17Cj4gLQlpbnQgbWF4ID0g cGJsay0+c2VjX3Blcl93cml0ZTsKPiAtCWludCBtaW4gPSBwYmxrLT5taW5fd3JpdGVfcGdzOwo+ IC0JaW50IHNlY3NfdG9fc3luYyA9IDA7Cj4gLQo+IC0JaWYgKHNraXBfbWV0YSAmJiBwYmxrLT5t aW5fd3JpdGVfcGdzX2RhdGEgIT0gcGJsay0+bWluX3dyaXRlX3BncykKPiAtCQltaW4gPSBtYXgg PSBwYmxrLT5taW5fd3JpdGVfcGdzX2RhdGE7Cj4gLQo+IC0JaWYgKHNlY3NfYXZhaWwgPj0gbWF4 KQo+IC0JCXNlY3NfdG9fc3luYyA9IG1heDsKPiAtCWVsc2UgaWYgKHNlY3NfYXZhaWwgPj0gbWlu KQo+IC0JCXNlY3NfdG9fc3luYyA9IG1pbiAqIChzZWNzX2F2YWlsIC8gbWluKTsKPiAtCWVsc2Ug aWYgKHNlY3NfdG9fZmx1c2gpCj4gLQkJc2Vjc190b19zeW5jID0gbWluOwo+IC0KPiAtCXJldHVy biBzZWNzX3RvX3N5bmM7Cj4gLX0KPiAtCj4gLXZvaWQgcGJsa19kZWFsbG9jX3BhZ2Uoc3RydWN0 IHBibGsgKnBibGssIHN0cnVjdCBwYmxrX2xpbmUgKmxpbmUsIGludCBucl9zZWNzKQo+IC17Cj4g LQl1NjQgYWRkcjsKPiAtCWludCBpOwo+IC0KPiAtCXNwaW5fbG9jaygmbGluZS0+bG9jayk7Cj4g LQlhZGRyID0gZmluZF9uZXh0X3plcm9fYml0KGxpbmUtPm1hcF9iaXRtYXAsCj4gLQkJCQkJcGJs ay0+bG0uc2VjX3Blcl9saW5lLCBsaW5lLT5jdXJfc2VjKTsKPiAtCWxpbmUtPmN1cl9zZWMgPSBh ZGRyIC0gbnJfc2VjczsKPiAtCj4gLQlmb3IgKGkgPSAwOyBpIDwgbnJfc2VjczsgaSsrLCBsaW5l LT5jdXJfc2VjLS0pCj4gLQkJV0FSTl9PTighdGVzdF9hbmRfY2xlYXJfYml0KGxpbmUtPmN1cl9z ZWMsIGxpbmUtPm1hcF9iaXRtYXApKTsKPiAtCXNwaW5fdW5sb2NrKCZsaW5lLT5sb2NrKTsKPiAt fQo+IC0KPiAtdTY0IF9fcGJsa19hbGxvY19wYWdlKHN0cnVjdCBwYmxrICpwYmxrLCBzdHJ1Y3Qg cGJsa19saW5lICpsaW5lLCBpbnQgbnJfc2VjcykKPiAtewo+IC0JdTY0IGFkZHI7Cj4gLQlpbnQg aTsKPiAtCj4gLQlsb2NrZGVwX2Fzc2VydF9oZWxkKCZsaW5lLT5sb2NrKTsKPiAtCj4gLQkvKiBs b2dpYyBlcnJvcjogcHBhIG91dC1vZi1ib3VuZHMuIFByZXZlbnQgZ2VuZXJhdGluZyBiYWQgYWRk cmVzcyAqLwo+IC0JaWYgKGxpbmUtPmN1cl9zZWMgKyBucl9zZWNzID4gcGJsay0+bG0uc2VjX3Bl cl9saW5lKSB7Cj4gLQkJV0FSTigxLCAicGJsazogcGFnZSBhbGxvY2F0aW9uIG91dCBvZiBib3Vu ZHNcbiIpOwo+IC0JCW5yX3NlY3MgPSBwYmxrLT5sbS5zZWNfcGVyX2xpbmUgLSBsaW5lLT5jdXJf c2VjOwo+IC0JfQo+IC0KPiAtCWxpbmUtPmN1cl9zZWMgPSBhZGRyID0gZmluZF9uZXh0X3plcm9f Yml0KGxpbmUtPm1hcF9iaXRtYXAsCj4gLQkJCQkJcGJsay0+bG0uc2VjX3Blcl9saW5lLCBsaW5l LT5jdXJfc2VjKTsKPiAtCWZvciAoaSA9IDA7IGkgPCBucl9zZWNzOyBpKyssIGxpbmUtPmN1cl9z ZWMrKykKPiAtCQlXQVJOX09OKHRlc3RfYW5kX3NldF9iaXQobGluZS0+Y3VyX3NlYywgbGluZS0+ bWFwX2JpdG1hcCkpOwo+IC0KPiAtCXJldHVybiBhZGRyOwo+IC19Cj4gLQo+IC11NjQgcGJsa19h bGxvY19wYWdlKHN0cnVjdCBwYmxrICpwYmxrLCBzdHJ1Y3QgcGJsa19saW5lICpsaW5lLCBpbnQg bnJfc2VjcykKPiAtewo+IC0JdTY0IGFkZHI7Cj4gLQo+IC0JLyogTG9jayBuZWVkZWQgaW4gY2Fz ZSBhIHdyaXRlIGZhaWxzIGFuZCBhIHJlY292ZXJ5IG5lZWRzIHRvIHJlbWFwCj4gLQkgKiBmYWls ZWQgd3JpdGUgYnVmZmVyIGVudHJpZXMKPiAtCSAqLwo+IC0Jc3Bpbl9sb2NrKCZsaW5lLT5sb2Nr KTsKPiAtCWFkZHIgPSBfX3BibGtfYWxsb2NfcGFnZShwYmxrLCBsaW5lLCBucl9zZWNzKTsKPiAt CWxpbmUtPmxlZnRfbXNlY3MgLT0gbnJfc2VjczsKPiAtCVdBUk4obGluZS0+bGVmdF9tc2VjcyA8 IDAsICJwYmxrOiBwYWdlIGFsbG9jYXRpb24gb3V0IG9mIGJvdW5kc1xuIik7Cj4gLQlzcGluX3Vu bG9jaygmbGluZS0+bG9jayk7Cj4gLQo+IC0JcmV0dXJuIGFkZHI7Cj4gLX0KPiAtCj4gLXU2NCBw YmxrX2xvb2t1cF9wYWdlKHN0cnVjdCBwYmxrICpwYmxrLCBzdHJ1Y3QgcGJsa19saW5lICpsaW5l KQo+IC17Cj4gLQl1NjQgcGFkZHI7Cj4gLQo+IC0Jc3Bpbl9sb2NrKCZsaW5lLT5sb2NrKTsKPiAt CXBhZGRyID0gZmluZF9uZXh0X3plcm9fYml0KGxpbmUtPm1hcF9iaXRtYXAsCj4gLQkJCQkJcGJs ay0+bG0uc2VjX3Blcl9saW5lLCBsaW5lLT5jdXJfc2VjKTsKPiAtCXNwaW5fdW5sb2NrKCZsaW5l LT5sb2NrKTsKPiAtCj4gLQlyZXR1cm4gcGFkZHI7Cj4gLX0KPiAtCj4gLXU2NCBwYmxrX2xpbmVf c21ldGFfc3RhcnQoc3RydWN0IHBibGsgKnBibGssIHN0cnVjdCBwYmxrX2xpbmUgKmxpbmUpCj4g LXsKPiAtCXN0cnVjdCBudm1fdGd0X2RldiAqZGV2ID0gcGJsay0+ZGV2Owo+IC0Jc3RydWN0IG52 bV9nZW8gKmdlbyA9ICZkZXYtPmdlbzsKPiAtCXN0cnVjdCBwYmxrX2xpbmVfbWV0YSAqbG0gPSAm cGJsay0+bG07Cj4gLQlpbnQgYml0Owo+IC0KPiAtCS8qIFRoaXMgdXN1YWxseSBvbmx5IGhhcHBl bnMgb24gYmFkIGxpbmVzICovCj4gLQliaXQgPSBmaW5kX2ZpcnN0X3plcm9fYml0KGxpbmUtPmJs a19iaXRtYXAsIGxtLT5ibGtfcGVyX2xpbmUpOwo+IC0JaWYgKGJpdCA+PSBsbS0+YmxrX3Blcl9s aW5lKQo+IC0JCXJldHVybiAtMTsKPiAtCj4gLQlyZXR1cm4gYml0ICogZ2VvLT53c19vcHQ7Cj4g LX0KPiAtCj4gLWludCBwYmxrX2xpbmVfc21ldGFfcmVhZChzdHJ1Y3QgcGJsayAqcGJsaywgc3Ry dWN0IHBibGtfbGluZSAqbGluZSkKPiAtewo+IC0Jc3RydWN0IHBibGtfbGluZV9tZXRhICpsbSA9 ICZwYmxrLT5sbTsKPiAtCXN0cnVjdCBwcGFfYWRkciAqcHBhX2xpc3Q7Cj4gLQlzdHJ1Y3QgbnZt X3JxIHJxZDsKPiAtCXU2NCBwYWRkciA9IHBibGtfbGluZV9zbWV0YV9zdGFydChwYmxrLCBsaW5l KTsKPiAtCWludCBpLCByZXQ7Cj4gLQo+IC0JbWVtc2V0KCZycWQsIDAsIHNpemVvZihzdHJ1Y3Qg bnZtX3JxKSk7Cj4gLQo+IC0JcmV0ID0gcGJsa19hbGxvY19ycWRfbWV0YShwYmxrLCAmcnFkKTsK PiAtCWlmIChyZXQpCj4gLQkJcmV0dXJuIHJldDsKPiAtCj4gLQlycWQub3Bjb2RlID0gTlZNX09Q X1BSRUFEOwo+IC0JcnFkLm5yX3BwYXMgPSBsbS0+c21ldGFfc2VjOwo+IC0JcnFkLmlzX3NlcSA9 IDE7Cj4gLQlwcGFfbGlzdCA9IG52bV9ycV90b19wcGFfbGlzdCgmcnFkKTsKPiAtCj4gLQlmb3Ig KGkgPSAwOyBpIDwgbG0tPnNtZXRhX3NlYzsgaSsrLCBwYWRkcisrKQo+IC0JCXBwYV9saXN0W2ld ID0gYWRkcl90b19nZW5fcHBhKHBibGssIHBhZGRyLCBsaW5lLT5pZCk7Cj4gLQo+IC0JcmV0ID0g cGJsa19zdWJtaXRfaW9fc3luYyhwYmxrLCAmcnFkLCBsaW5lLT5zbWV0YSk7Cj4gLQlpZiAocmV0 KSB7Cj4gLQkJcGJsa19lcnIocGJsaywgInNtZXRhIEkvTyBzdWJtaXNzaW9uIGZhaWxlZDogJWRc biIsIHJldCk7Cj4gLQkJZ290byBjbGVhcl9ycWQ7Cj4gLQl9Cj4gLQo+IC0JYXRvbWljX2RlYygm cGJsay0+aW5mbGlnaHRfaW8pOwo+IC0KPiAtCWlmIChycWQuZXJyb3IgJiYgcnFkLmVycm9yICE9 IE5WTV9SU1BfV0FSTl9ISUdIRUNDKSB7Cj4gLQkJcGJsa19sb2dfcmVhZF9lcnIocGJsaywgJnJx ZCk7Cj4gLQkJcmV0ID0gLUVJTzsKPiAtCX0KPiAtCj4gLWNsZWFyX3JxZDoKPiAtCXBibGtfZnJl ZV9ycWRfbWV0YShwYmxrLCAmcnFkKTsKPiAtCXJldHVybiByZXQ7Cj4gLX0KPiAtCj4gLXN0YXRp YyBpbnQgcGJsa19saW5lX3NtZXRhX3dyaXRlKHN0cnVjdCBwYmxrICpwYmxrLCBzdHJ1Y3QgcGJs a19saW5lICpsaW5lLAo+IC0JCQkJIHU2NCBwYWRkcikKPiAtewo+IC0Jc3RydWN0IHBibGtfbGlu ZV9tZXRhICpsbSA9ICZwYmxrLT5sbTsKPiAtCXN0cnVjdCBwcGFfYWRkciAqcHBhX2xpc3Q7Cj4g LQlzdHJ1Y3QgbnZtX3JxIHJxZDsKPiAtCV9fbGU2NCAqbGJhX2xpc3QgPSBlbWV0YV90b19sYmFz KHBibGssIGxpbmUtPmVtZXRhLT5idWYpOwo+IC0JX19sZTY0IGFkZHJfZW1wdHkgPSBjcHVfdG9f bGU2NChBRERSX0VNUFRZKTsKPiAtCWludCBpLCByZXQ7Cj4gLQo+IC0JbWVtc2V0KCZycWQsIDAs IHNpemVvZihzdHJ1Y3QgbnZtX3JxKSk7Cj4gLQo+IC0JcmV0ID0gcGJsa19hbGxvY19ycWRfbWV0 YShwYmxrLCAmcnFkKTsKPiAtCWlmIChyZXQpCj4gLQkJcmV0dXJuIHJldDsKPiAtCj4gLQlycWQu b3Bjb2RlID0gTlZNX09QX1BXUklURTsKPiAtCXJxZC5ucl9wcGFzID0gbG0tPnNtZXRhX3NlYzsK PiAtCXJxZC5pc19zZXEgPSAxOwo+IC0JcHBhX2xpc3QgPSBudm1fcnFfdG9fcHBhX2xpc3QoJnJx ZCk7Cj4gLQo+IC0JZm9yIChpID0gMDsgaSA8IGxtLT5zbWV0YV9zZWM7IGkrKywgcGFkZHIrKykg ewo+IC0JCXN0cnVjdCBwYmxrX3NlY19tZXRhICptZXRhID0gcGJsa19nZXRfbWV0YShwYmxrLAo+ IC0JCQkJCQkJICAgcnFkLm1ldGFfbGlzdCwgaSk7Cj4gLQo+IC0JCXBwYV9saXN0W2ldID0gYWRk cl90b19nZW5fcHBhKHBibGssIHBhZGRyLCBsaW5lLT5pZCk7Cj4gLQkJbWV0YS0+bGJhID0gbGJh X2xpc3RbcGFkZHJdID0gYWRkcl9lbXB0eTsKPiAtCX0KPiAtCj4gLQlyZXQgPSBwYmxrX3N1Ym1p dF9pb19zeW5jX3NlbShwYmxrLCAmcnFkLCBsaW5lLT5zbWV0YSk7Cj4gLQlpZiAocmV0KSB7Cj4g LQkJcGJsa19lcnIocGJsaywgInNtZXRhIEkvTyBzdWJtaXNzaW9uIGZhaWxlZDogJWRcbiIsIHJl dCk7Cj4gLQkJZ290byBjbGVhcl9ycWQ7Cj4gLQl9Cj4gLQo+IC0JYXRvbWljX2RlYygmcGJsay0+ aW5mbGlnaHRfaW8pOwo+IC0KPiAtCWlmIChycWQuZXJyb3IpIHsKPiAtCQlwYmxrX2xvZ193cml0 ZV9lcnIocGJsaywgJnJxZCk7Cj4gLQkJcmV0ID0gLUVJTzsKPiAtCX0KPiAtCj4gLWNsZWFyX3Jx ZDoKPiAtCXBibGtfZnJlZV9ycWRfbWV0YShwYmxrLCAmcnFkKTsKPiAtCXJldHVybiByZXQ7Cj4g LX0KPiAtCj4gLWludCBwYmxrX2xpbmVfZW1ldGFfcmVhZChzdHJ1Y3QgcGJsayAqcGJsaywgc3Ry dWN0IHBibGtfbGluZSAqbGluZSwKPiAtCQkJIHZvaWQgKmVtZXRhX2J1ZikKPiAtewo+IC0Jc3Ry dWN0IG52bV90Z3RfZGV2ICpkZXYgPSBwYmxrLT5kZXY7Cj4gLQlzdHJ1Y3QgbnZtX2dlbyAqZ2Vv ID0gJmRldi0+Z2VvOwo+IC0Jc3RydWN0IHBibGtfbGluZV9tZXRhICpsbSA9ICZwYmxrLT5sbTsK PiAtCXZvaWQgKnBwYV9saXN0X2J1ZiwgKm1ldGFfbGlzdDsKPiAtCXN0cnVjdCBwcGFfYWRkciAq cHBhX2xpc3Q7Cj4gLQlzdHJ1Y3QgbnZtX3JxIHJxZDsKPiAtCXU2NCBwYWRkciA9IGxpbmUtPmVt ZXRhX3NzZWM7Cj4gLQlkbWFfYWRkcl90IGRtYV9wcGFfbGlzdCwgZG1hX21ldGFfbGlzdDsKPiAt CWludCBtaW4gPSBwYmxrLT5taW5fd3JpdGVfcGdzOwo+IC0JaW50IGxlZnRfcHBhcyA9IGxtLT5l bWV0YV9zZWNbMF07Cj4gLQlpbnQgbGluZV9pZCA9IGxpbmUtPmlkOwo+IC0JaW50IHJxX3BwYXMs IHJxX2xlbjsKPiAtCWludCBpLCBqOwo+IC0JaW50IHJldDsKPiAtCj4gLQltZXRhX2xpc3QgPSBu dm1fZGV2X2RtYV9hbGxvYyhkZXYtPnBhcmVudCwgR0ZQX0tFUk5FTCwKPiAtCQkJCQkJCSZkbWFf bWV0YV9saXN0KTsKPiAtCWlmICghbWV0YV9saXN0KQo+IC0JCXJldHVybiAtRU5PTUVNOwo+IC0K PiAtCXBwYV9saXN0X2J1ZiA9IG1ldGFfbGlzdCArIHBibGtfZG1hX21ldGFfc2l6ZShwYmxrKTsK PiAtCWRtYV9wcGFfbGlzdCA9IGRtYV9tZXRhX2xpc3QgKyBwYmxrX2RtYV9tZXRhX3NpemUocGJs ayk7Cj4gLQo+IC1uZXh0X3JxOgo+IC0JbWVtc2V0KCZycWQsIDAsIHNpemVvZihzdHJ1Y3QgbnZt X3JxKSk7Cj4gLQo+IC0JcnFfcHBhcyA9IHBibGtfY2FsY19zZWNzKHBibGssIGxlZnRfcHBhcywg MCwgZmFsc2UpOwo+IC0JcnFfbGVuID0gcnFfcHBhcyAqIGdlby0+Y3NlY3M7Cj4gLQo+IC0JcnFk Lm1ldGFfbGlzdCA9IG1ldGFfbGlzdDsKPiAtCXJxZC5wcGFfbGlzdCA9IHBwYV9saXN0X2J1ZjsK PiAtCXJxZC5kbWFfbWV0YV9saXN0ID0gZG1hX21ldGFfbGlzdDsKPiAtCXJxZC5kbWFfcHBhX2xp c3QgPSBkbWFfcHBhX2xpc3Q7Cj4gLQlycWQub3Bjb2RlID0gTlZNX09QX1BSRUFEOwo+IC0JcnFk Lm5yX3BwYXMgPSBycV9wcGFzOwo+IC0JcHBhX2xpc3QgPSBudm1fcnFfdG9fcHBhX2xpc3QoJnJx ZCk7Cj4gLQo+IC0JZm9yIChpID0gMDsgaSA8IHJxZC5ucl9wcGFzOyApIHsKPiAtCQlzdHJ1Y3Qg cHBhX2FkZHIgcHBhID0gYWRkcl90b19nZW5fcHBhKHBibGssIHBhZGRyLCBsaW5lX2lkKTsKPiAt CQlpbnQgcG9zID0gcGJsa19wcGFfdG9fcG9zKGdlbywgcHBhKTsKPiAtCj4gLQkJaWYgKHBibGtf aW9fYWxpZ25lZChwYmxrLCBycV9wcGFzKSkKPiAtCQkJcnFkLmlzX3NlcSA9IDE7Cj4gLQo+IC0J CXdoaWxlICh0ZXN0X2JpdChwb3MsIGxpbmUtPmJsa19iaXRtYXApKSB7Cj4gLQkJCXBhZGRyICs9 IG1pbjsKPiAtCQkJaWYgKHBibGtfYm91bmRhcnlfcGFkZHJfY2hlY2tzKHBibGssIHBhZGRyKSkg ewo+IC0JCQkJcmV0ID0gLUVJTlRSOwo+IC0JCQkJZ290byBmcmVlX3JxZF9kbWE7Cj4gLQkJCX0K PiAtCj4gLQkJCXBwYSA9IGFkZHJfdG9fZ2VuX3BwYShwYmxrLCBwYWRkciwgbGluZV9pZCk7Cj4g LQkJCXBvcyA9IHBibGtfcHBhX3RvX3BvcyhnZW8sIHBwYSk7Cj4gLQkJfQo+IC0KPiAtCQlpZiAo cGJsa19ib3VuZGFyeV9wYWRkcl9jaGVja3MocGJsaywgcGFkZHIgKyBtaW4pKSB7Cj4gLQkJCXJl dCA9IC1FSU5UUjsKPiAtCQkJZ290byBmcmVlX3JxZF9kbWE7Cj4gLQkJfQo+IC0KPiAtCQlmb3Ig KGogPSAwOyBqIDwgbWluOyBqKyssIGkrKywgcGFkZHIrKykKPiAtCQkJcHBhX2xpc3RbaV0gPSBh ZGRyX3RvX2dlbl9wcGEocGJsaywgcGFkZHIsIGxpbmVfaWQpOwo+IC0JfQo+IC0KPiAtCXJldCA9 IHBibGtfc3VibWl0X2lvX3N5bmMocGJsaywgJnJxZCwgZW1ldGFfYnVmKTsKPiAtCWlmIChyZXQp IHsKPiAtCQlwYmxrX2VycihwYmxrLCAiZW1ldGEgSS9PIHN1Ym1pc3Npb24gZmFpbGVkOiAlZFxu IiwgcmV0KTsKPiAtCQlnb3RvIGZyZWVfcnFkX2RtYTsKPiAtCX0KPiAtCj4gLQlhdG9taWNfZGVj KCZwYmxrLT5pbmZsaWdodF9pbyk7Cj4gLQo+IC0JaWYgKHJxZC5lcnJvciAmJiBycWQuZXJyb3Ig IT0gTlZNX1JTUF9XQVJOX0hJR0hFQ0MpIHsKPiAtCQlwYmxrX2xvZ19yZWFkX2VycihwYmxrLCAm cnFkKTsKPiAtCQlyZXQgPSAtRUlPOwo+IC0JCWdvdG8gZnJlZV9ycWRfZG1hOwo+IC0JfQo+IC0K PiAtCWVtZXRhX2J1ZiArPSBycV9sZW47Cj4gLQlsZWZ0X3BwYXMgLT0gcnFfcHBhczsKPiAtCWlm IChsZWZ0X3BwYXMpCj4gLQkJZ290byBuZXh0X3JxOwo+IC0KPiAtZnJlZV9ycWRfZG1hOgo+IC0J bnZtX2Rldl9kbWFfZnJlZShkZXYtPnBhcmVudCwgcnFkLm1ldGFfbGlzdCwgcnFkLmRtYV9tZXRh X2xpc3QpOwo+IC0JcmV0dXJuIHJldDsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgcGJsa19zZXR1 cF9lX3JxKHN0cnVjdCBwYmxrICpwYmxrLCBzdHJ1Y3QgbnZtX3JxICpycWQsCj4gLQkJCSAgICBz dHJ1Y3QgcHBhX2FkZHIgcHBhKQo+IC17Cj4gLQlycWQtPm9wY29kZSA9IE5WTV9PUF9FUkFTRTsK PiAtCXJxZC0+cHBhX2FkZHIgPSBwcGE7Cj4gLQlycWQtPm5yX3BwYXMgPSAxOwo+IC0JcnFkLT5p c19zZXEgPSAxOwo+IC0JcnFkLT5iaW8gPSBOVUxMOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW50IHBi bGtfYmxrX2VyYXNlX3N5bmMoc3RydWN0IHBibGsgKnBibGssIHN0cnVjdCBwcGFfYWRkciBwcGEp Cj4gLXsKPiAtCXN0cnVjdCBudm1fcnEgcnFkID0ge05VTEx9Owo+IC0JaW50IHJldDsKPiAtCj4g LQl0cmFjZV9wYmxrX2NodW5rX3Jlc2V0KHBibGtfZGlza19uYW1lKHBibGspLCAmcHBhLAo+IC0J CQkJUEJMS19DSFVOS19SRVNFVF9TVEFSVCk7Cj4gLQo+IC0JcGJsa19zZXR1cF9lX3JxKHBibGss ICZycWQsIHBwYSk7Cj4gLQo+IC0JLyogVGhlIHdyaXRlIHRocmVhZCBzY2hlZHVsZXMgZXJhc2Vz IHNvIHRoYXQgaXQgbWluaW1pemVzIGRpc3R1cmJhbmNlcwo+IC0JICogd2l0aCB3cml0ZXMuIFRo dXMsIHRoZXJlIGlzIG5vIG5lZWQgdG8gdGFrZSB0aGUgTFVOIHNlbWFwaG9yZS4KPiAtCSAqLwo+ IC0JcmV0ID0gcGJsa19zdWJtaXRfaW9fc3luYyhwYmxrLCAmcnFkLCBOVUxMKTsKPiAtCXJxZC5w cml2YXRlID0gcGJsazsKPiAtCV9fcGJsa19lbmRfaW9fZXJhc2UocGJsaywgJnJxZCk7Cj4gLQo+ IC0JcmV0dXJuIHJldDsKPiAtfQo+IC0KPiAtaW50IHBibGtfbGluZV9lcmFzZShzdHJ1Y3QgcGJs ayAqcGJsaywgc3RydWN0IHBibGtfbGluZSAqbGluZSkKPiAtewo+IC0Jc3RydWN0IHBibGtfbGlu ZV9tZXRhICpsbSA9ICZwYmxrLT5sbTsKPiAtCXN0cnVjdCBwcGFfYWRkciBwcGE7Cj4gLQlpbnQg cmV0LCBiaXQgPSAtMTsKPiAtCj4gLQkvKiBFcmFzZSBvbmx5IGdvb2QgYmxvY2tzLCBvbmUgYXQg YSB0aW1lICovCj4gLQlkbyB7Cj4gLQkJc3Bpbl9sb2NrKCZsaW5lLT5sb2NrKTsKPiAtCQliaXQg PSBmaW5kX25leHRfemVyb19iaXQobGluZS0+ZXJhc2VfYml0bWFwLCBsbS0+YmxrX3Blcl9saW5l LAo+IC0JCQkJCQkJCWJpdCArIDEpOwo+IC0JCWlmIChiaXQgPj0gbG0tPmJsa19wZXJfbGluZSkg ewo+IC0JCQlzcGluX3VubG9jaygmbGluZS0+bG9jayk7Cj4gLQkJCWJyZWFrOwo+IC0JCX0KPiAt Cj4gLQkJcHBhID0gcGJsay0+bHVuc1tiaXRdLmJwcGE7IC8qIHNldCBjaCBhbmQgbHVuICovCj4g LQkJcHBhLmEuYmxrID0gbGluZS0+aWQ7Cj4gLQo+IC0JCWF0b21pY19kZWMoJmxpbmUtPmxlZnRf ZWJsa3MpOwo+IC0JCVdBUk5fT04odGVzdF9hbmRfc2V0X2JpdChiaXQsIGxpbmUtPmVyYXNlX2Jp dG1hcCkpOwo+IC0JCXNwaW5fdW5sb2NrKCZsaW5lLT5sb2NrKTsKPiAtCj4gLQkJcmV0ID0gcGJs a19ibGtfZXJhc2Vfc3luYyhwYmxrLCBwcGEpOwo+IC0JCWlmIChyZXQpIHsKPiAtCQkJcGJsa19l cnIocGJsaywgImZhaWxlZCB0byBlcmFzZSBsaW5lICVkXG4iLCBsaW5lLT5pZCk7Cj4gLQkJCXJl dHVybiByZXQ7Cj4gLQkJfQo+IC0JfSB3aGlsZSAoMSk7Cj4gLQo+IC0JcmV0dXJuIDA7Cj4gLX0K PiAtCj4gLXN0YXRpYyB2b2lkIHBibGtfbGluZV9zZXR1cF9tZXRhZGF0YShzdHJ1Y3QgcGJsa19s aW5lICpsaW5lLAo+IC0JCQkJICAgICBzdHJ1Y3QgcGJsa19saW5lX21nbXQgKmxfbWcsCj4gLQkJ CQkgICAgIHN0cnVjdCBwYmxrX2xpbmVfbWV0YSAqbG0pCj4gLXsKPiAtCWludCBtZXRhX2xpbmU7 Cj4gLQo+IC0JbG9ja2RlcF9hc3NlcnRfaGVsZCgmbF9tZy0+ZnJlZV9sb2NrKTsKPiAtCj4gLXJl dHJ5X21ldGE6Cj4gLQltZXRhX2xpbmUgPSBmaW5kX2ZpcnN0X3plcm9fYml0KCZsX21nLT5tZXRh X2JpdG1hcCwgUEJMS19EQVRBX0xJTkVTKTsKPiAtCWlmIChtZXRhX2xpbmUgPT0gUEJMS19EQVRB X0xJTkVTKSB7Cj4gLQkJc3Bpbl91bmxvY2soJmxfbWctPmZyZWVfbG9jayk7Cj4gLQkJaW9fc2No ZWR1bGUoKTsKPiAtCQlzcGluX2xvY2soJmxfbWctPmZyZWVfbG9jayk7Cj4gLQkJZ290byByZXRy eV9tZXRhOwo+IC0JfQo+IC0KPiAtCXNldF9iaXQobWV0YV9saW5lLCAmbF9tZy0+bWV0YV9iaXRt YXApOwo+IC0JbGluZS0+bWV0YV9saW5lID0gbWV0YV9saW5lOwo+IC0KPiAtCWxpbmUtPnNtZXRh ID0gbF9tZy0+c2xpbmVfbWV0YVttZXRhX2xpbmVdOwo+IC0JbGluZS0+ZW1ldGEgPSBsX21nLT5l bGluZV9tZXRhW21ldGFfbGluZV07Cj4gLQo+IC0JbWVtc2V0KGxpbmUtPnNtZXRhLCAwLCBsbS0+ c21ldGFfbGVuKTsKPiAtCW1lbXNldChsaW5lLT5lbWV0YS0+YnVmLCAwLCBsbS0+ZW1ldGFfbGVu WzBdKTsKPiAtCj4gLQlsaW5lLT5lbWV0YS0+bWVtID0gMDsKPiAtCWF0b21pY19zZXQoJmxpbmUt PmVtZXRhLT5zeW5jLCAwKTsKPiAtfQo+IC0KPiAtLyogRm9yIG5vdyBsaW5lcyBhcmUgYWx3YXlz IGFzc3VtZWQgZnVsbCBsaW5lcy4gVGh1cywgc21ldGEgZm9ybWVyIGFuZCBjdXJyZW50Cj4gLSAq IGx1biBiaXRtYXBzIGFyZSBvbWl0dGVkLgo+IC0gKi8KPiAtc3RhdGljIGludCBwYmxrX2xpbmVf aW5pdF9tZXRhZGF0YShzdHJ1Y3QgcGJsayAqcGJsaywgc3RydWN0IHBibGtfbGluZSAqbGluZSwK PiAtCQkJCSAgc3RydWN0IHBibGtfbGluZSAqY3VyKQo+IC17Cj4gLQlzdHJ1Y3QgbnZtX3RndF9k ZXYgKmRldiA9IHBibGstPmRldjsKPiAtCXN0cnVjdCBudm1fZ2VvICpnZW8gPSAmZGV2LT5nZW87 Cj4gLQlzdHJ1Y3QgcGJsa19saW5lX21ldGEgKmxtID0gJnBibGstPmxtOwo+IC0Jc3RydWN0IHBi bGtfbGluZV9tZ210ICpsX21nID0gJnBibGstPmxfbWc7Cj4gLQlzdHJ1Y3QgcGJsa19lbWV0YSAq ZW1ldGEgPSBsaW5lLT5lbWV0YTsKPiAtCXN0cnVjdCBsaW5lX2VtZXRhICplbWV0YV9idWYgPSBl bWV0YS0+YnVmOwo+IC0Jc3RydWN0IGxpbmVfc21ldGEgKnNtZXRhX2J1ZiA9IChzdHJ1Y3QgbGlu ZV9zbWV0YSAqKWxpbmUtPnNtZXRhOwo+IC0JaW50IG5yX2Jsa19saW5lOwo+IC0KPiAtCS8qIEFm dGVyIGVyYXNpbmcgdGhlIGxpbmUsIG5ldyBiYWQgYmxvY2tzIG1pZ2h0IGFwcGVhciBhbmQgd2Ug cmlzawo+IC0JICogaGF2aW5nIGFuIGludmFsaWQgbGluZQo+IC0JICovCj4gLQlucl9ibGtfbGlu ZSA9IGxtLT5ibGtfcGVyX2xpbmUgLQo+IC0JCQliaXRtYXBfd2VpZ2h0KGxpbmUtPmJsa19iaXRt YXAsIGxtLT5ibGtfcGVyX2xpbmUpOwo+IC0JaWYgKG5yX2Jsa19saW5lIDwgbG0tPm1pbl9ibGtf bGluZSkgewo+IC0JCXNwaW5fbG9jaygmbF9tZy0+ZnJlZV9sb2NrKTsKPiAtCQlzcGluX2xvY2so JmxpbmUtPmxvY2spOwo+IC0JCWxpbmUtPnN0YXRlID0gUEJMS19MSU5FU1RBVEVfQkFEOwo+IC0J CXRyYWNlX3BibGtfbGluZV9zdGF0ZShwYmxrX2Rpc2tfbmFtZShwYmxrKSwgbGluZS0+aWQsCj4g LQkJCQkJbGluZS0+c3RhdGUpOwo+IC0JCXNwaW5fdW5sb2NrKCZsaW5lLT5sb2NrKTsKPiAtCj4g LQkJbGlzdF9hZGRfdGFpbCgmbGluZS0+bGlzdCwgJmxfbWctPmJhZF9saXN0KTsKPiAtCQlzcGlu X3VubG9jaygmbF9tZy0+ZnJlZV9sb2NrKTsKPiAtCj4gLQkJcGJsa19kZWJ1ZyhwYmxrLCAibGlu ZSAlZCBpcyBiYWRcbiIsIGxpbmUtPmlkKTsKPiAtCj4gLQkJcmV0dXJuIDA7Cj4gLQl9Cj4gLQo+ IC0JLyogUnVuLXRpbWUgbWV0YWRhdGEgKi8KPiAtCWxpbmUtPmx1bl9iaXRtYXAgPSAoKHZvaWQg Kikoc21ldGFfYnVmKSkgKyBzaXplb2Yoc3RydWN0IGxpbmVfc21ldGEpOwo+IC0KPiAtCS8qIE1h cmsgTFVOcyBhbGxvY2F0ZWQgaW4gdGhpcyBsaW5lIChhbGwgZm9yIG5vdykgKi8KPiAtCWJpdG1h cF9zZXQobGluZS0+bHVuX2JpdG1hcCwgMCwgbG0tPmx1bl9iaXRtYXBfbGVuKTsKPiAtCj4gLQlz bWV0YV9idWYtPmhlYWRlci5pZGVudGlmaWVyID0gY3B1X3RvX2xlMzIoUEJMS19NQUdJQyk7Cj4g LQlleHBvcnRfZ3VpZChzbWV0YV9idWYtPmhlYWRlci51dWlkLCAmcGJsay0+aW5zdGFuY2VfdXVp ZCk7Cj4gLQlzbWV0YV9idWYtPmhlYWRlci5pZCA9IGNwdV90b19sZTMyKGxpbmUtPmlkKTsKPiAt CXNtZXRhX2J1Zi0+aGVhZGVyLnR5cGUgPSBjcHVfdG9fbGUxNihsaW5lLT50eXBlKTsKPiAtCXNt ZXRhX2J1Zi0+aGVhZGVyLnZlcnNpb25fbWFqb3IgPSBTTUVUQV9WRVJTSU9OX01BSk9SOwo+IC0J c21ldGFfYnVmLT5oZWFkZXIudmVyc2lvbl9taW5vciA9IFNNRVRBX1ZFUlNJT05fTUlOT1I7Cj4g LQo+IC0JLyogU3RhcnQgbWV0YWRhdGEgKi8KPiAtCXNtZXRhX2J1Zi0+c2VxX25yID0gY3B1X3Rv X2xlNjQobGluZS0+c2VxX25yKTsKPiAtCXNtZXRhX2J1Zi0+d2luZG93X3dyX2x1biA9IGNwdV90 b19sZTMyKGdlby0+YWxsX2x1bnMpOwo+IC0KPiAtCS8qIEZpbGwgbWV0YWRhdGEgYW1vbmcgbGlu ZXMgKi8KPiAtCWlmIChjdXIpIHsKPiAtCQltZW1jcHkobGluZS0+bHVuX2JpdG1hcCwgY3VyLT5s dW5fYml0bWFwLCBsbS0+bHVuX2JpdG1hcF9sZW4pOwo+IC0JCXNtZXRhX2J1Zi0+cHJldl9pZCA9 IGNwdV90b19sZTMyKGN1ci0+aWQpOwo+IC0JCWN1ci0+ZW1ldGEtPmJ1Zi0+bmV4dF9pZCA9IGNw dV90b19sZTMyKGxpbmUtPmlkKTsKPiAtCX0gZWxzZSB7Cj4gLQkJc21ldGFfYnVmLT5wcmV2X2lk ID0gY3B1X3RvX2xlMzIoUEJMS19MSU5FX0VNUFRZKTsKPiAtCX0KPiAtCj4gLQkvKiBBbGwgc21l dGEgbXVzdCBiZSBzZXQgYXQgdGhpcyBwb2ludCAqLwo+IC0Jc21ldGFfYnVmLT5oZWFkZXIuY3Jj ID0gY3B1X3RvX2xlMzIoCj4gLQkJCXBibGtfY2FsY19tZXRhX2hlYWRlcl9jcmMocGJsaywgJnNt ZXRhX2J1Zi0+aGVhZGVyKSk7Cj4gLQlzbWV0YV9idWYtPmNyYyA9IGNwdV90b19sZTMyKHBibGtf Y2FsY19zbWV0YV9jcmMocGJsaywgc21ldGFfYnVmKSk7Cj4gLQo+IC0JLyogRW5kIG1ldGFkYXRh ICovCj4gLQltZW1jcHkoJmVtZXRhX2J1Zi0+aGVhZGVyLCAmc21ldGFfYnVmLT5oZWFkZXIsCj4g LQkJCQkJCXNpemVvZihzdHJ1Y3QgbGluZV9oZWFkZXIpKTsKPiAtCj4gLQllbWV0YV9idWYtPmhl YWRlci52ZXJzaW9uX21ham9yID0gRU1FVEFfVkVSU0lPTl9NQUpPUjsKPiAtCWVtZXRhX2J1Zi0+ aGVhZGVyLnZlcnNpb25fbWlub3IgPSBFTUVUQV9WRVJTSU9OX01JTk9SOwo+IC0JZW1ldGFfYnVm LT5oZWFkZXIuY3JjID0gY3B1X3RvX2xlMzIoCj4gLQkJCXBibGtfY2FsY19tZXRhX2hlYWRlcl9j cmMocGJsaywgJmVtZXRhX2J1Zi0+aGVhZGVyKSk7Cj4gLQo+IC0JZW1ldGFfYnVmLT5zZXFfbnIg PSBjcHVfdG9fbGU2NChsaW5lLT5zZXFfbnIpOwo+IC0JZW1ldGFfYnVmLT5ucl9sYmFzID0gY3B1 X3RvX2xlNjQobGluZS0+c2VjX2luX2xpbmUpOwo+IC0JZW1ldGFfYnVmLT5ucl92YWxpZF9sYmFz ID0gY3B1X3RvX2xlNjQoMCk7Cj4gLQllbWV0YV9idWYtPm5leHRfaWQgPSBjcHVfdG9fbGUzMihQ QkxLX0xJTkVfRU1QVFkpOwo+IC0JZW1ldGFfYnVmLT5jcmMgPSBjcHVfdG9fbGUzMigwKTsKPiAt CWVtZXRhX2J1Zi0+cHJldl9pZCA9IHNtZXRhX2J1Zi0+cHJldl9pZDsKPiAtCj4gLQlyZXR1cm4g MTsKPiAtfQo+IC0KPiAtc3RhdGljIGludCBwYmxrX2xpbmVfYWxsb2NfYml0bWFwcyhzdHJ1Y3Qg cGJsayAqcGJsaywgc3RydWN0IHBibGtfbGluZSAqbGluZSkKPiAtewo+IC0Jc3RydWN0IHBibGtf bGluZV9tZXRhICpsbSA9ICZwYmxrLT5sbTsKPiAtCXN0cnVjdCBwYmxrX2xpbmVfbWdtdCAqbF9t ZyA9ICZwYmxrLT5sX21nOwo+IC0KPiAtCWxpbmUtPm1hcF9iaXRtYXAgPSBtZW1wb29sX2FsbG9j KGxfbWctPmJpdG1hcF9wb29sLCBHRlBfS0VSTkVMKTsKPiAtCWlmICghbGluZS0+bWFwX2JpdG1h cCkKPiAtCQlyZXR1cm4gLUVOT01FTTsKPiAtCj4gLQltZW1zZXQobGluZS0+bWFwX2JpdG1hcCwg MCwgbG0tPnNlY19iaXRtYXBfbGVuKTsKPiAtCj4gLQkvKiB3aWxsIGJlIGluaXRpYWxpemVkIHVz aW5nIGJiIGluZm8gZnJvbSBtYXBfYml0bWFwICovCj4gLQlsaW5lLT5pbnZhbGlkX2JpdG1hcCA9 IG1lbXBvb2xfYWxsb2MobF9tZy0+Yml0bWFwX3Bvb2wsIEdGUF9LRVJORUwpOwo+IC0JaWYgKCFs aW5lLT5pbnZhbGlkX2JpdG1hcCkgewo+IC0JCW1lbXBvb2xfZnJlZShsaW5lLT5tYXBfYml0bWFw LCBsX21nLT5iaXRtYXBfcG9vbCk7Cj4gLQkJbGluZS0+bWFwX2JpdG1hcCA9IE5VTEw7Cj4gLQkJ cmV0dXJuIC1FTk9NRU07Cj4gLQl9Cj4gLQo+IC0JcmV0dXJuIDA7Cj4gLX0KPiAtCj4gLS8qIEZv ciBub3cgbGluZXMgYXJlIGFsd2F5cyBhc3N1bWVkIGZ1bGwgbGluZXMuIFRodXMsIHNtZXRhIGZv cm1lciBhbmQgY3VycmVudAo+IC0gKiBsdW4gYml0bWFwcyBhcmUgb21pdHRlZC4KPiAtICovCj4g LXN0YXRpYyBpbnQgcGJsa19saW5lX2luaXRfYmIoc3RydWN0IHBibGsgKnBibGssIHN0cnVjdCBw YmxrX2xpbmUgKmxpbmUsCj4gLQkJCSAgICAgaW50IGluaXQpCj4gLXsKPiAtCXN0cnVjdCBudm1f dGd0X2RldiAqZGV2ID0gcGJsay0+ZGV2Owo+IC0Jc3RydWN0IG52bV9nZW8gKmdlbyA9ICZkZXYt PmdlbzsKPiAtCXN0cnVjdCBwYmxrX2xpbmVfbWV0YSAqbG0gPSAmcGJsay0+bG07Cj4gLQlzdHJ1 Y3QgcGJsa19saW5lX21nbXQgKmxfbWcgPSAmcGJsay0+bF9tZzsKPiAtCXU2NCBvZmY7Cj4gLQlp bnQgYml0ID0gLTE7Cj4gLQlpbnQgZW1ldGFfc2VjczsKPiAtCj4gLQlsaW5lLT5zZWNfaW5fbGlu ZSA9IGxtLT5zZWNfcGVyX2xpbmU7Cj4gLQo+IC0JLyogQ2FwdHVyZSBiYWQgYmxvY2sgaW5mb3Jt YXRpb24gb24gbGluZSBtYXBwaW5nIGJpdG1hcHMgKi8KPiAtCXdoaWxlICgoYml0ID0gZmluZF9u ZXh0X2JpdChsaW5lLT5ibGtfYml0bWFwLCBsbS0+YmxrX3Blcl9saW5lLAo+IC0JCQkJCWJpdCAr IDEpKSA8IGxtLT5ibGtfcGVyX2xpbmUpIHsKPiAtCQlvZmYgPSBiaXQgKiBnZW8tPndzX29wdDsK PiAtCQliaXRtYXBfc2hpZnRfbGVmdChsX21nLT5iYl9hdXgsIGxfbWctPmJiX3RlbXBsYXRlLCBv ZmYsCj4gLQkJCQkJCQlsbS0+c2VjX3Blcl9saW5lKTsKPiAtCQliaXRtYXBfb3IobGluZS0+bWFw X2JpdG1hcCwgbGluZS0+bWFwX2JpdG1hcCwgbF9tZy0+YmJfYXV4LAo+IC0JCQkJCQkJbG0tPnNl Y19wZXJfbGluZSk7Cj4gLQkJbGluZS0+c2VjX2luX2xpbmUgLT0gZ2VvLT5jbGJhOwo+IC0JfQo+ IC0KPiAtCS8qIE1hcmsgc21ldGEgbWV0YWRhdGEgc2VjdG9ycyBhcyBiYWQgc2VjdG9ycyAqLwo+ IC0JYml0ID0gZmluZF9maXJzdF96ZXJvX2JpdChsaW5lLT5ibGtfYml0bWFwLCBsbS0+YmxrX3Bl cl9saW5lKTsKPiAtCW9mZiA9IGJpdCAqIGdlby0+d3Nfb3B0Owo+IC0JYml0bWFwX3NldChsaW5l LT5tYXBfYml0bWFwLCBvZmYsIGxtLT5zbWV0YV9zZWMpOwo+IC0JbGluZS0+c2VjX2luX2xpbmUg LT0gbG0tPnNtZXRhX3NlYzsKPiAtCWxpbmUtPmN1cl9zZWMgPSBvZmYgKyBsbS0+c21ldGFfc2Vj Owo+IC0KPiAtCWlmIChpbml0ICYmIHBibGtfbGluZV9zbWV0YV93cml0ZShwYmxrLCBsaW5lLCBv ZmYpKSB7Cj4gLQkJcGJsa19kZWJ1ZyhwYmxrLCAibGluZSBzbWV0YSBJL08gZmFpbGVkLiBSZXRy eVxuIik7Cj4gLQkJcmV0dXJuIDA7Cj4gLQl9Cj4gLQo+IC0JYml0bWFwX2NvcHkobGluZS0+aW52 YWxpZF9iaXRtYXAsIGxpbmUtPm1hcF9iaXRtYXAsIGxtLT5zZWNfcGVyX2xpbmUpOwo+IC0KPiAt CS8qIE1hcmsgZW1ldGEgbWV0YWRhdGEgc2VjdG9ycyBhcyBiYWQgc2VjdG9ycy4gV2UgbmVlZCB0 byBjb25zaWRlciBiYWQKPiAtCSAqIGJsb2NrcyB0byBtYWtlIHN1cmUgdGhhdCB0aGVyZSBhcmUg ZW5vdWdoIHNlY3RvcnMgdG8gc3RvcmUgZW1ldGEKPiAtCSAqLwo+IC0JZW1ldGFfc2VjcyA9IGxt LT5lbWV0YV9zZWNbMF07Cj4gLQlvZmYgPSBsbS0+c2VjX3Blcl9saW5lOwo+IC0Jd2hpbGUgKGVt ZXRhX3NlY3MpIHsKPiAtCQlvZmYgLT0gZ2VvLT53c19vcHQ7Cj4gLQkJaWYgKCF0ZXN0X2JpdChv ZmYsIGxpbmUtPmludmFsaWRfYml0bWFwKSkgewo+IC0JCQliaXRtYXBfc2V0KGxpbmUtPmludmFs aWRfYml0bWFwLCBvZmYsIGdlby0+d3Nfb3B0KTsKPiAtCQkJZW1ldGFfc2VjcyAtPSBnZW8tPndz X29wdDsKPiAtCQl9Cj4gLQl9Cj4gLQo+IC0JbGluZS0+ZW1ldGFfc3NlYyA9IG9mZjsKPiAtCWxp bmUtPnNlY19pbl9saW5lIC09IGxtLT5lbWV0YV9zZWNbMF07Cj4gLQlsaW5lLT5ucl92YWxpZF9s YmFzID0gMDsKPiAtCWxpbmUtPmxlZnRfbXNlY3MgPSBsaW5lLT5zZWNfaW5fbGluZTsKPiAtCSps aW5lLT52c2MgPSBjcHVfdG9fbGUzMihsaW5lLT5zZWNfaW5fbGluZSk7Cj4gLQo+IC0JaWYgKGxt LT5zZWNfcGVyX2xpbmUgLSBsaW5lLT5zZWNfaW5fbGluZSAhPQo+IC0JCWJpdG1hcF93ZWlnaHQo bGluZS0+aW52YWxpZF9iaXRtYXAsIGxtLT5zZWNfcGVyX2xpbmUpKSB7Cj4gLQkJc3Bpbl9sb2Nr KCZsaW5lLT5sb2NrKTsKPiAtCQlsaW5lLT5zdGF0ZSA9IFBCTEtfTElORVNUQVRFX0JBRDsKPiAt CQl0cmFjZV9wYmxrX2xpbmVfc3RhdGUocGJsa19kaXNrX25hbWUocGJsayksIGxpbmUtPmlkLAo+ IC0JCQkJCWxpbmUtPnN0YXRlKTsKPiAtCQlzcGluX3VubG9jaygmbGluZS0+bG9jayk7Cj4gLQo+ IC0JCWxpc3RfYWRkX3RhaWwoJmxpbmUtPmxpc3QsICZsX21nLT5iYWRfbGlzdCk7Cj4gLQkJcGJs a19lcnIocGJsaywgInVuZXhwZWN0ZWQgbGluZSAlZCBpcyBiYWRcbiIsIGxpbmUtPmlkKTsKPiAt Cj4gLQkJcmV0dXJuIDA7Cj4gLQl9Cj4gLQo+IC0JcmV0dXJuIDE7Cj4gLX0KPiAtCj4gLXN0YXRp YyBpbnQgcGJsa19wcmVwYXJlX25ld19saW5lKHN0cnVjdCBwYmxrICpwYmxrLCBzdHJ1Y3QgcGJs a19saW5lICpsaW5lKQo+IC17Cj4gLQlzdHJ1Y3QgcGJsa19saW5lX21ldGEgKmxtID0gJnBibGst PmxtOwo+IC0Jc3RydWN0IG52bV90Z3RfZGV2ICpkZXYgPSBwYmxrLT5kZXY7Cj4gLQlzdHJ1Y3Qg bnZtX2dlbyAqZ2VvID0gJmRldi0+Z2VvOwo+IC0JaW50IGJsa190b19lcmFzZSA9IGF0b21pY19y ZWFkKCZsaW5lLT5ibGtfaW5fbGluZSk7Cj4gLQlpbnQgaTsKPiAtCj4gLQlmb3IgKGkgPSAwOyBp IDwgbG0tPmJsa19wZXJfbGluZTsgaSsrKSB7Cj4gLQkJc3RydWN0IHBibGtfbHVuICpybHVuID0g JnBibGstPmx1bnNbaV07Cj4gLQkJaW50IHBvcyA9IHBibGtfcHBhX3RvX3BvcyhnZW8sIHJsdW4t PmJwcGEpOwo+IC0JCWludCBzdGF0ZSA9IGxpbmUtPmNoa3NbcG9zXS5zdGF0ZTsKPiAtCj4gLQkJ LyogRnJlZSBjaHVua3Mgc2hvdWxkIG5vdCBiZSBlcmFzZWQgKi8KPiAtCQlpZiAoc3RhdGUgJiBO Vk1fQ0hLX1NUX0ZSRUUpIHsKPiAtCQkJc2V0X2JpdChwYmxrX3BwYV90b19wb3MoZ2VvLCBybHVu LT5icHBhKSwKPiAtCQkJCQkJCWxpbmUtPmVyYXNlX2JpdG1hcCk7Cj4gLQkJCWJsa190b19lcmFz ZS0tOwo+IC0JCX0KPiAtCX0KPiAtCj4gLQlyZXR1cm4gYmxrX3RvX2VyYXNlOwo+IC19Cj4gLQo+ IC1zdGF0aWMgaW50IHBibGtfbGluZV9wcmVwYXJlKHN0cnVjdCBwYmxrICpwYmxrLCBzdHJ1Y3Qg cGJsa19saW5lICpsaW5lKQo+IC17Cj4gLQlzdHJ1Y3QgcGJsa19saW5lX21ldGEgKmxtID0gJnBi bGstPmxtOwo+IC0JaW50IGJsa19pbl9saW5lID0gYXRvbWljX3JlYWQoJmxpbmUtPmJsa19pbl9s aW5lKTsKPiAtCWludCBibGtfdG9fZXJhc2U7Cj4gLQo+IC0JLyogQmFkIGJsb2NrcyBkbyBub3Qg bmVlZCB0byBiZSBlcmFzZWQgKi8KPiAtCWJpdG1hcF9jb3B5KGxpbmUtPmVyYXNlX2JpdG1hcCwg bGluZS0+YmxrX2JpdG1hcCwgbG0tPmJsa19wZXJfbGluZSk7Cj4gLQo+IC0Jc3Bpbl9sb2NrKCZs aW5lLT5sb2NrKTsKPiAtCj4gLQkvKiBJZiB3ZSBoYXZlIG5vdCB3cml0dGVuIHRvIHRoaXMgbGlu ZSwgd2UgbmVlZCB0byBtYXJrIHVwIGZyZWUgY2h1bmtzCj4gLQkgKiBhcyBhbHJlYWR5IGVyYXNl ZAo+IC0JICovCj4gLQlpZiAobGluZS0+c3RhdGUgPT0gUEJMS19MSU5FU1RBVEVfTkVXKSB7Cj4g LQkJYmxrX3RvX2VyYXNlID0gcGJsa19wcmVwYXJlX25ld19saW5lKHBibGssIGxpbmUpOwo+IC0J CWxpbmUtPnN0YXRlID0gUEJMS19MSU5FU1RBVEVfRlJFRTsKPiAtCQl0cmFjZV9wYmxrX2xpbmVf c3RhdGUocGJsa19kaXNrX25hbWUocGJsayksIGxpbmUtPmlkLAo+IC0JCQkJCWxpbmUtPnN0YXRl KTsKPiAtCX0gZWxzZSB7Cj4gLQkJYmxrX3RvX2VyYXNlID0gYmxrX2luX2xpbmU7Cj4gLQl9Cj4g LQo+IC0JaWYgKGJsa19pbl9saW5lIDwgbG0tPm1pbl9ibGtfbGluZSkgewo+IC0JCXNwaW5fdW5s b2NrKCZsaW5lLT5sb2NrKTsKPiAtCQlyZXR1cm4gLUVBR0FJTjsKPiAtCX0KPiAtCj4gLQlpZiAo bGluZS0+c3RhdGUgIT0gUEJMS19MSU5FU1RBVEVfRlJFRSkgewo+IC0JCVdBUk4oMSwgInBibGs6 IGNvcnJ1cHRlZCBsaW5lICVkLCBzdGF0ZSAlZFxuIiwKPiAtCQkJCQkJCWxpbmUtPmlkLCBsaW5l LT5zdGF0ZSk7Cj4gLQkJc3Bpbl91bmxvY2soJmxpbmUtPmxvY2spOwo+IC0JCXJldHVybiAtRUlO VFI7Cj4gLQl9Cj4gLQo+IC0JbGluZS0+c3RhdGUgPSBQQkxLX0xJTkVTVEFURV9PUEVOOwo+IC0J dHJhY2VfcGJsa19saW5lX3N0YXRlKHBibGtfZGlza19uYW1lKHBibGspLCBsaW5lLT5pZCwKPiAt CQkJCWxpbmUtPnN0YXRlKTsKPiAtCj4gLQlhdG9taWNfc2V0KCZsaW5lLT5sZWZ0X2VibGtzLCBi bGtfdG9fZXJhc2UpOwo+IC0JYXRvbWljX3NldCgmbGluZS0+bGVmdF9zZWJsa3MsIGJsa190b19l cmFzZSk7Cj4gLQo+IC0JbGluZS0+bWV0YV9kaXN0YW5jZSA9IGxtLT5tZXRhX2Rpc3RhbmNlOwo+ IC0Jc3Bpbl91bmxvY2soJmxpbmUtPmxvY2spOwo+IC0KPiAtCWtyZWZfaW5pdCgmbGluZS0+cmVm KTsKPiAtCWF0b21pY19zZXQoJmxpbmUtPnNlY190b191cGRhdGUsIDApOwo+IC0KPiAtCXJldHVy biAwOwo+IC19Cj4gLQo+IC0vKiBMaW5lIGFsbG9jYXRpb25zIGluIHRoZSByZWNvdmVyeSBwYXRo IGFyZSBhbHdheXMgc2luZ2xlIHRocmVhZGVkICovCj4gLWludCBwYmxrX2xpbmVfcmVjb3ZfYWxs b2Moc3RydWN0IHBibGsgKnBibGssIHN0cnVjdCBwYmxrX2xpbmUgKmxpbmUpCj4gLXsKPiAtCXN0 cnVjdCBwYmxrX2xpbmVfbWdtdCAqbF9tZyA9ICZwYmxrLT5sX21nOwo+IC0JaW50IHJldDsKPiAt Cj4gLQlzcGluX2xvY2soJmxfbWctPmZyZWVfbG9jayk7Cj4gLQlsX21nLT5kYXRhX2xpbmUgPSBs aW5lOwo+IC0JbGlzdF9kZWwoJmxpbmUtPmxpc3QpOwo+IC0KPiAtCXJldCA9IHBibGtfbGluZV9w cmVwYXJlKHBibGssIGxpbmUpOwo+IC0JaWYgKHJldCkgewo+IC0JCWxpc3RfYWRkKCZsaW5lLT5s aXN0LCAmbF9tZy0+ZnJlZV9saXN0KTsKPiAtCQlzcGluX3VubG9jaygmbF9tZy0+ZnJlZV9sb2Nr KTsKPiAtCQlyZXR1cm4gcmV0Owo+IC0JfQo+IC0Jc3Bpbl91bmxvY2soJmxfbWctPmZyZWVfbG9j ayk7Cj4gLQo+IC0JcmV0ID0gcGJsa19saW5lX2FsbG9jX2JpdG1hcHMocGJsaywgbGluZSk7Cj4g LQlpZiAocmV0KQo+IC0JCWdvdG8gZmFpbDsKPiAtCj4gLQlpZiAoIXBibGtfbGluZV9pbml0X2Ji KHBibGssIGxpbmUsIDApKSB7Cj4gLQkJcmV0ID0gLUVJTlRSOwo+IC0JCWdvdG8gZmFpbDsKPiAt CX0KPiAtCj4gLQlwYmxrX3JsX2ZyZWVfbGluZXNfZGVjKCZwYmxrLT5ybCwgbGluZSwgdHJ1ZSk7 Cj4gLQlyZXR1cm4gMDsKPiAtCj4gLWZhaWw6Cj4gLQlzcGluX2xvY2soJmxfbWctPmZyZWVfbG9j ayk7Cj4gLQlsaXN0X2FkZCgmbGluZS0+bGlzdCwgJmxfbWctPmZyZWVfbGlzdCk7Cj4gLQlzcGlu X3VubG9jaygmbF9tZy0+ZnJlZV9sb2NrKTsKPiAtCj4gLQlyZXR1cm4gcmV0Owo+IC19Cj4gLQo+ IC12b2lkIHBibGtfbGluZV9yZWNvdl9jbG9zZShzdHJ1Y3QgcGJsayAqcGJsaywgc3RydWN0IHBi bGtfbGluZSAqbGluZSkKPiAtewo+IC0Jc3RydWN0IHBibGtfbGluZV9tZ210ICpsX21nID0gJnBi bGstPmxfbWc7Cj4gLQo+IC0JbWVtcG9vbF9mcmVlKGxpbmUtPm1hcF9iaXRtYXAsIGxfbWctPmJp dG1hcF9wb29sKTsKPiAtCWxpbmUtPm1hcF9iaXRtYXAgPSBOVUxMOwo+IC0JbGluZS0+c21ldGEg PSBOVUxMOwo+IC0JbGluZS0+ZW1ldGEgPSBOVUxMOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBw YmxrX2xpbmVfcmVpbml0KHN0cnVjdCBwYmxrX2xpbmUgKmxpbmUpCj4gLXsKPiAtCSpsaW5lLT52 c2MgPSBjcHVfdG9fbGUzMihFTVBUWV9FTlRSWSk7Cj4gLQo+IC0JbGluZS0+bWFwX2JpdG1hcCA9 IE5VTEw7Cj4gLQlsaW5lLT5pbnZhbGlkX2JpdG1hcCA9IE5VTEw7Cj4gLQlsaW5lLT5zbWV0YSA9 IE5VTEw7Cj4gLQlsaW5lLT5lbWV0YSA9IE5VTEw7Cj4gLX0KPiAtCj4gLXZvaWQgcGJsa19saW5l X2ZyZWUoc3RydWN0IHBibGtfbGluZSAqbGluZSkKPiAtewo+IC0Jc3RydWN0IHBibGsgKnBibGsg PSBsaW5lLT5wYmxrOwo+IC0Jc3RydWN0IHBibGtfbGluZV9tZ210ICpsX21nID0gJnBibGstPmxf bWc7Cj4gLQo+IC0JbWVtcG9vbF9mcmVlKGxpbmUtPm1hcF9iaXRtYXAsIGxfbWctPmJpdG1hcF9w b29sKTsKPiAtCW1lbXBvb2xfZnJlZShsaW5lLT5pbnZhbGlkX2JpdG1hcCwgbF9tZy0+Yml0bWFw X3Bvb2wpOwo+IC0KPiAtCXBibGtfbGluZV9yZWluaXQobGluZSk7Cj4gLX0KPiAtCj4gLXN0cnVj dCBwYmxrX2xpbmUgKnBibGtfbGluZV9nZXQoc3RydWN0IHBibGsgKnBibGspCj4gLXsKPiAtCXN0 cnVjdCBwYmxrX2xpbmVfbWdtdCAqbF9tZyA9ICZwYmxrLT5sX21nOwo+IC0Jc3RydWN0IHBibGtf bGluZV9tZXRhICpsbSA9ICZwYmxrLT5sbTsKPiAtCXN0cnVjdCBwYmxrX2xpbmUgKmxpbmU7Cj4g LQlpbnQgcmV0LCBiaXQ7Cj4gLQo+IC0JbG9ja2RlcF9hc3NlcnRfaGVsZCgmbF9tZy0+ZnJlZV9s b2NrKTsKPiAtCj4gLXJldHJ5Ogo+IC0JaWYgKGxpc3RfZW1wdHkoJmxfbWctPmZyZWVfbGlzdCkp IHsKPiAtCQlwYmxrX2VycihwYmxrLCAibm8gZnJlZSBsaW5lc1xuIik7Cj4gLQkJcmV0dXJuIE5V TEw7Cj4gLQl9Cj4gLQo+IC0JbGluZSA9IGxpc3RfZmlyc3RfZW50cnkoJmxfbWctPmZyZWVfbGlz dCwgc3RydWN0IHBibGtfbGluZSwgbGlzdCk7Cj4gLQlsaXN0X2RlbCgmbGluZS0+bGlzdCk7Cj4g LQlsX21nLT5ucl9mcmVlX2xpbmVzLS07Cj4gLQo+IC0JYml0ID0gZmluZF9maXJzdF96ZXJvX2Jp dChsaW5lLT5ibGtfYml0bWFwLCBsbS0+YmxrX3Blcl9saW5lKTsKPiAtCWlmICh1bmxpa2VseShi aXQgPj0gbG0tPmJsa19wZXJfbGluZSkpIHsKPiAtCQlzcGluX2xvY2soJmxpbmUtPmxvY2spOwo+ IC0JCWxpbmUtPnN0YXRlID0gUEJMS19MSU5FU1RBVEVfQkFEOwo+IC0JCXRyYWNlX3BibGtfbGlu ZV9zdGF0ZShwYmxrX2Rpc2tfbmFtZShwYmxrKSwgbGluZS0+aWQsCj4gLQkJCQkJbGluZS0+c3Rh dGUpOwo+IC0JCXNwaW5fdW5sb2NrKCZsaW5lLT5sb2NrKTsKPiAtCj4gLQkJbGlzdF9hZGRfdGFp bCgmbGluZS0+bGlzdCwgJmxfbWctPmJhZF9saXN0KTsKPiAtCj4gLQkJcGJsa19kZWJ1ZyhwYmxr LCAibGluZSAlZCBpcyBiYWRcbiIsIGxpbmUtPmlkKTsKPiAtCQlnb3RvIHJldHJ5Owo+IC0JfQo+ IC0KPiAtCXJldCA9IHBibGtfbGluZV9wcmVwYXJlKHBibGssIGxpbmUpOwo+IC0JaWYgKHJldCkg ewo+IC0JCXN3aXRjaCAocmV0KSB7Cj4gLQkJY2FzZSAtRUFHQUlOOgo+IC0JCQlsaXN0X2FkZCgm bGluZS0+bGlzdCwgJmxfbWctPmJhZF9saXN0KTsKPiAtCQkJZ290byByZXRyeTsKPiAtCQljYXNl IC1FSU5UUjoKPiAtCQkJbGlzdF9hZGQoJmxpbmUtPmxpc3QsICZsX21nLT5jb3JydXB0X2xpc3Qp Owo+IC0JCQlnb3RvIHJldHJ5Owo+IC0JCWRlZmF1bHQ6Cj4gLQkJCXBibGtfZXJyKHBibGssICJm YWlsZWQgdG8gcHJlcGFyZSBsaW5lICVkXG4iLCBsaW5lLT5pZCk7Cj4gLQkJCWxpc3RfYWRkKCZs aW5lLT5saXN0LCAmbF9tZy0+ZnJlZV9saXN0KTsKPiAtCQkJbF9tZy0+bnJfZnJlZV9saW5lcysr Owo+IC0JCQlyZXR1cm4gTlVMTDsKPiAtCQl9Cj4gLQl9Cj4gLQo+IC0JcmV0dXJuIGxpbmU7Cj4g LX0KPiAtCj4gLXN0YXRpYyBzdHJ1Y3QgcGJsa19saW5lICpwYmxrX2xpbmVfcmV0cnkoc3RydWN0 IHBibGsgKnBibGssCj4gLQkJCQkJIHN0cnVjdCBwYmxrX2xpbmUgKmxpbmUpCj4gLXsKPiAtCXN0 cnVjdCBwYmxrX2xpbmVfbWdtdCAqbF9tZyA9ICZwYmxrLT5sX21nOwo+IC0Jc3RydWN0IHBibGtf bGluZSAqcmV0cnlfbGluZTsKPiAtCj4gLXJldHJ5Ogo+IC0Jc3Bpbl9sb2NrKCZsX21nLT5mcmVl X2xvY2spOwo+IC0JcmV0cnlfbGluZSA9IHBibGtfbGluZV9nZXQocGJsayk7Cj4gLQlpZiAoIXJl dHJ5X2xpbmUpIHsKPiAtCQlsX21nLT5kYXRhX2xpbmUgPSBOVUxMOwo+IC0JCXNwaW5fdW5sb2Nr KCZsX21nLT5mcmVlX2xvY2spOwo+IC0JCXJldHVybiBOVUxMOwo+IC0JfQo+IC0KPiAtCXJldHJ5 X2xpbmUtPm1hcF9iaXRtYXAgPSBsaW5lLT5tYXBfYml0bWFwOwo+IC0JcmV0cnlfbGluZS0+aW52 YWxpZF9iaXRtYXAgPSBsaW5lLT5pbnZhbGlkX2JpdG1hcDsKPiAtCXJldHJ5X2xpbmUtPnNtZXRh ID0gbGluZS0+c21ldGE7Cj4gLQlyZXRyeV9saW5lLT5lbWV0YSA9IGxpbmUtPmVtZXRhOwo+IC0J cmV0cnlfbGluZS0+bWV0YV9saW5lID0gbGluZS0+bWV0YV9saW5lOwo+IC0KPiAtCXBibGtfbGlu ZV9yZWluaXQobGluZSk7Cj4gLQo+IC0JbF9tZy0+ZGF0YV9saW5lID0gcmV0cnlfbGluZTsKPiAt CXNwaW5fdW5sb2NrKCZsX21nLT5mcmVlX2xvY2spOwo+IC0KPiAtCXBibGtfcmxfZnJlZV9saW5l c19kZWMoJnBibGstPnJsLCBsaW5lLCBmYWxzZSk7Cj4gLQo+IC0JaWYgKHBibGtfbGluZV9lcmFz ZShwYmxrLCByZXRyeV9saW5lKSkKPiAtCQlnb3RvIHJldHJ5Owo+IC0KPiAtCXJldHVybiByZXRy eV9saW5lOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBwYmxrX3NldF9zcGFjZV9saW1pdChzdHJ1 Y3QgcGJsayAqcGJsaykKPiAtewo+IC0Jc3RydWN0IHBibGtfcmwgKnJsID0gJnBibGstPnJsOwo+ IC0KPiAtCWF0b21pY19zZXQoJnJsLT5yYl9zcGFjZSwgMCk7Cj4gLX0KPiAtCj4gLXN0cnVjdCBw YmxrX2xpbmUgKnBibGtfbGluZV9nZXRfZmlyc3RfZGF0YShzdHJ1Y3QgcGJsayAqcGJsaykKPiAt ewo+IC0Jc3RydWN0IHBibGtfbGluZV9tZ210ICpsX21nID0gJnBibGstPmxfbWc7Cj4gLQlzdHJ1 Y3QgcGJsa19saW5lICpsaW5lOwo+IC0KPiAtCXNwaW5fbG9jaygmbF9tZy0+ZnJlZV9sb2NrKTsK PiAtCWxpbmUgPSBwYmxrX2xpbmVfZ2V0KHBibGspOwo+IC0JaWYgKCFsaW5lKSB7Cj4gLQkJc3Bp bl91bmxvY2soJmxfbWctPmZyZWVfbG9jayk7Cj4gLQkJcmV0dXJuIE5VTEw7Cj4gLQl9Cj4gLQo+ IC0JbGluZS0+c2VxX25yID0gbF9tZy0+ZF9zZXFfbnIrKzsKPiAtCWxpbmUtPnR5cGUgPSBQQkxL X0xJTkVUWVBFX0RBVEE7Cj4gLQlsX21nLT5kYXRhX2xpbmUgPSBsaW5lOwo+IC0KPiAtCXBibGtf bGluZV9zZXR1cF9tZXRhZGF0YShsaW5lLCBsX21nLCAmcGJsay0+bG0pOwo+IC0KPiAtCS8qIEFs bG9jYXRlIG5leHQgbGluZSBmb3IgcHJlcGFyYXRpb24gKi8KPiAtCWxfbWctPmRhdGFfbmV4dCA9 IHBibGtfbGluZV9nZXQocGJsayk7Cj4gLQlpZiAoIWxfbWctPmRhdGFfbmV4dCkgewo+IC0JCS8q IElmIHdlIGNhbm5vdCBnZXQgYSBuZXcgbGluZSwgd2UgbmVlZCB0byBzdG9wIHRoZSBwaXBlbGlu ZS4KPiAtCQkgKiBPbmx5IGFsbG93IGFzIG1hbnkgd3JpdGVzIGluIGFzIHdlIGNhbiBzdG9yZSBz YWZlbHkgYW5kIHRoZW4KPiAtCQkgKiBmYWlsIGdyYWNlZnVsbHkKPiAtCQkgKi8KPiAtCQlwYmxr X3NldF9zcGFjZV9saW1pdChwYmxrKTsKPiAtCj4gLQkJbF9tZy0+ZGF0YV9uZXh0ID0gTlVMTDsK PiAtCX0gZWxzZSB7Cj4gLQkJbF9tZy0+ZGF0YV9uZXh0LT5zZXFfbnIgPSBsX21nLT5kX3NlcV9u cisrOwo+IC0JCWxfbWctPmRhdGFfbmV4dC0+dHlwZSA9IFBCTEtfTElORVRZUEVfREFUQTsKPiAt CX0KPiAtCXNwaW5fdW5sb2NrKCZsX21nLT5mcmVlX2xvY2spOwo+IC0KPiAtCWlmIChwYmxrX2xp bmVfYWxsb2NfYml0bWFwcyhwYmxrLCBsaW5lKSkKPiAtCQlyZXR1cm4gTlVMTDsKPiAtCj4gLQlp ZiAocGJsa19saW5lX2VyYXNlKHBibGssIGxpbmUpKSB7Cj4gLQkJbGluZSA9IHBibGtfbGluZV9y ZXRyeShwYmxrLCBsaW5lKTsKPiAtCQlpZiAoIWxpbmUpCj4gLQkJCXJldHVybiBOVUxMOwo+IC0J fQo+IC0KPiAtcmV0cnlfc2V0dXA6Cj4gLQlpZiAoIXBibGtfbGluZV9pbml0X21ldGFkYXRhKHBi bGssIGxpbmUsIE5VTEwpKSB7Cj4gLQkJbGluZSA9IHBibGtfbGluZV9yZXRyeShwYmxrLCBsaW5l KTsKPiAtCQlpZiAoIWxpbmUpCj4gLQkJCXJldHVybiBOVUxMOwo+IC0KPiAtCQlnb3RvIHJldHJ5 X3NldHVwOwo+IC0JfQo+IC0KPiAtCWlmICghcGJsa19saW5lX2luaXRfYmIocGJsaywgbGluZSwg MSkpIHsKPiAtCQlsaW5lID0gcGJsa19saW5lX3JldHJ5KHBibGssIGxpbmUpOwo+IC0JCWlmICgh bGluZSkKPiAtCQkJcmV0dXJuIE5VTEw7Cj4gLQo+IC0JCWdvdG8gcmV0cnlfc2V0dXA7Cj4gLQl9 Cj4gLQo+IC0JcGJsa19ybF9mcmVlX2xpbmVzX2RlYygmcGJsay0+cmwsIGxpbmUsIHRydWUpOwo+ IC0KPiAtCXJldHVybiBsaW5lOwo+IC19Cj4gLQo+IC12b2lkIHBibGtfcHBhX3RvX2xpbmVfcHV0 KHN0cnVjdCBwYmxrICpwYmxrLCBzdHJ1Y3QgcHBhX2FkZHIgcHBhKQo+IC17Cj4gLQlzdHJ1Y3Qg cGJsa19saW5lICpsaW5lOwo+IC0KPiAtCWxpbmUgPSBwYmxrX3BwYV90b19saW5lKHBibGssIHBw YSk7Cj4gLQlrcmVmX3B1dCgmbGluZS0+cmVmLCBwYmxrX2xpbmVfcHV0X3dxKTsKPiAtfQo+IC0K PiAtdm9pZCBwYmxrX3JxX3RvX2xpbmVfcHV0KHN0cnVjdCBwYmxrICpwYmxrLCBzdHJ1Y3QgbnZt X3JxICpycWQpCj4gLXsKPiAtCXN0cnVjdCBwcGFfYWRkciAqcHBhX2xpc3QgPSBudm1fcnFfdG9f cHBhX2xpc3QocnFkKTsKPiAtCWludCBpOwo+IC0KPiAtCWZvciAoaSA9IDA7IGkgPCBycWQtPm5y X3BwYXM7IGkrKykKPiAtCQlwYmxrX3BwYV90b19saW5lX3B1dChwYmxrLCBwcGFfbGlzdFtpXSk7 Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIHBibGtfc3RvcF93cml0ZXMoc3RydWN0IHBibGsgKnBi bGssIHN0cnVjdCBwYmxrX2xpbmUgKmxpbmUpCj4gLXsKPiAtCWxvY2tkZXBfYXNzZXJ0X2hlbGQo JnBibGstPmxfbWcuZnJlZV9sb2NrKTsKPiAtCj4gLQlwYmxrX3NldF9zcGFjZV9saW1pdChwYmxr KTsKPiAtCXBibGstPnN0YXRlID0gUEJMS19TVEFURV9TVE9QUElORzsKPiAtCXRyYWNlX3BibGtf c3RhdGUocGJsa19kaXNrX25hbWUocGJsayksIHBibGstPnN0YXRlKTsKPiAtfQo+IC0KPiAtc3Rh dGljIHZvaWQgcGJsa19saW5lX2Nsb3NlX21ldGFfc3luYyhzdHJ1Y3QgcGJsayAqcGJsaykKPiAt ewo+IC0Jc3RydWN0IHBibGtfbGluZV9tZ210ICpsX21nID0gJnBibGstPmxfbWc7Cj4gLQlzdHJ1 Y3QgcGJsa19saW5lX21ldGEgKmxtID0gJnBibGstPmxtOwo+IC0Jc3RydWN0IHBibGtfbGluZSAq bGluZSwgKnRsaW5lOwo+IC0JTElTVF9IRUFEKGxpc3QpOwo+IC0KPiAtCXNwaW5fbG9jaygmbF9t Zy0+Y2xvc2VfbG9jayk7Cj4gLQlpZiAobGlzdF9lbXB0eSgmbF9tZy0+ZW1ldGFfbGlzdCkpIHsK PiAtCQlzcGluX3VubG9jaygmbF9tZy0+Y2xvc2VfbG9jayk7Cj4gLQkJcmV0dXJuOwo+IC0JfQo+ IC0KPiAtCWxpc3RfY3V0X3Bvc2l0aW9uKCZsaXN0LCAmbF9tZy0+ZW1ldGFfbGlzdCwgbF9tZy0+ ZW1ldGFfbGlzdC5wcmV2KTsKPiAtCXNwaW5fdW5sb2NrKCZsX21nLT5jbG9zZV9sb2NrKTsKPiAt Cj4gLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobGluZSwgdGxpbmUsICZsaXN0LCBsaXN0KSB7 Cj4gLQkJc3RydWN0IHBibGtfZW1ldGEgKmVtZXRhID0gbGluZS0+ZW1ldGE7Cj4gLQo+IC0JCXdo aWxlIChlbWV0YS0+bWVtIDwgbG0tPmVtZXRhX2xlblswXSkgewo+IC0JCQlpbnQgcmV0Owo+IC0K PiAtCQkJcmV0ID0gcGJsa19zdWJtaXRfbWV0YV9pbyhwYmxrLCBsaW5lKTsKPiAtCQkJaWYgKHJl dCkgewo+IC0JCQkJcGJsa19lcnIocGJsaywgInN5bmMgbWV0YSBsaW5lICVkIGZhaWxlZCAoJWQp XG4iLAo+IC0JCQkJCQkJbGluZS0+aWQsIHJldCk7Cj4gLQkJCQlyZXR1cm47Cj4gLQkJCX0KPiAt CQl9Cj4gLQl9Cj4gLQo+IC0JcGJsa193YWl0X2Zvcl9tZXRhKHBibGspOwo+IC0JZmx1c2hfd29y a3F1ZXVlKHBibGstPmNsb3NlX3dxKTsKPiAtfQo+IC0KPiAtdm9pZCBfX3BibGtfcGlwZWxpbmVf Zmx1c2goc3RydWN0IHBibGsgKnBibGspCj4gLXsKPiAtCXN0cnVjdCBwYmxrX2xpbmVfbWdtdCAq bF9tZyA9ICZwYmxrLT5sX21nOwo+IC0JaW50IHJldDsKPiAtCj4gLQlzcGluX2xvY2soJmxfbWct PmZyZWVfbG9jayk7Cj4gLQlpZiAocGJsay0+c3RhdGUgPT0gUEJMS19TVEFURV9SRUNPVkVSSU5H IHx8Cj4gLQkJCQkJcGJsay0+c3RhdGUgPT0gUEJMS19TVEFURV9TVE9QUEVEKSB7Cj4gLQkJc3Bp bl91bmxvY2soJmxfbWctPmZyZWVfbG9jayk7Cj4gLQkJcmV0dXJuOwo+IC0JfQo+IC0JcGJsay0+ c3RhdGUgPSBQQkxLX1NUQVRFX1JFQ09WRVJJTkc7Cj4gLQl0cmFjZV9wYmxrX3N0YXRlKHBibGtf ZGlza19uYW1lKHBibGspLCBwYmxrLT5zdGF0ZSk7Cj4gLQlzcGluX3VubG9jaygmbF9tZy0+ZnJl ZV9sb2NrKTsKPiAtCj4gLQlwYmxrX2ZsdXNoX3dyaXRlcihwYmxrKTsKPiAtCXBibGtfd2FpdF9m b3JfbWV0YShwYmxrKTsKPiAtCj4gLQlyZXQgPSBwYmxrX3JlY292X3BhZChwYmxrKTsKPiAtCWlm IChyZXQpIHsKPiAtCQlwYmxrX2VycihwYmxrLCAiY291bGQgbm90IGNsb3NlIGRhdGEgb24gdGVh cmRvd24oJWQpXG4iLCByZXQpOwo+IC0JCXJldHVybjsKPiAtCX0KPiAtCj4gLQlmbHVzaF93b3Jr cXVldWUocGJsay0+YmJfd3EpOwo+IC0JcGJsa19saW5lX2Nsb3NlX21ldGFfc3luYyhwYmxrKTsK PiAtfQo+IC0KPiAtdm9pZCBfX3BibGtfcGlwZWxpbmVfc3RvcChzdHJ1Y3QgcGJsayAqcGJsaykK PiAtewo+IC0Jc3RydWN0IHBibGtfbGluZV9tZ210ICpsX21nID0gJnBibGstPmxfbWc7Cj4gLQo+ IC0Jc3Bpbl9sb2NrKCZsX21nLT5mcmVlX2xvY2spOwo+IC0JcGJsay0+c3RhdGUgPSBQQkxLX1NU QVRFX1NUT1BQRUQ7Cj4gLQl0cmFjZV9wYmxrX3N0YXRlKHBibGtfZGlza19uYW1lKHBibGspLCBw YmxrLT5zdGF0ZSk7Cj4gLQlsX21nLT5kYXRhX2xpbmUgPSBOVUxMOwo+IC0JbF9tZy0+ZGF0YV9u ZXh0ID0gTlVMTDsKPiAtCXNwaW5fdW5sb2NrKCZsX21nLT5mcmVlX2xvY2spOwo+IC19Cj4gLQo+ IC12b2lkIHBibGtfcGlwZWxpbmVfc3RvcChzdHJ1Y3QgcGJsayAqcGJsaykKPiAtewo+IC0JX19w YmxrX3BpcGVsaW5lX2ZsdXNoKHBibGspOwo+IC0JX19wYmxrX3BpcGVsaW5lX3N0b3AocGJsayk7 Cj4gLX0KPiAtCj4gLXN0cnVjdCBwYmxrX2xpbmUgKnBibGtfbGluZV9yZXBsYWNlX2RhdGEoc3Ry dWN0IHBibGsgKnBibGspCj4gLXsKPiAtCXN0cnVjdCBwYmxrX2xpbmVfbWdtdCAqbF9tZyA9ICZw YmxrLT5sX21nOwo+IC0Jc3RydWN0IHBibGtfbGluZSAqY3VyLCAqbmV3ID0gTlVMTDsKPiAtCXVu c2lnbmVkIGludCBsZWZ0X3NlYmxrczsKPiAtCj4gLQluZXcgPSBsX21nLT5kYXRhX25leHQ7Cj4g LQlpZiAoIW5ldykKPiAtCQlnb3RvIG91dDsKPiAtCj4gLQlzcGluX2xvY2soJmxfbWctPmZyZWVf bG9jayk7Cj4gLQljdXIgPSBsX21nLT5kYXRhX2xpbmU7Cj4gLQlsX21nLT5kYXRhX2xpbmUgPSBu ZXc7Cj4gLQo+IC0JcGJsa19saW5lX3NldHVwX21ldGFkYXRhKG5ldywgbF9tZywgJnBibGstPmxt KTsKPiAtCXNwaW5fdW5sb2NrKCZsX21nLT5mcmVlX2xvY2spOwo+IC0KPiAtcmV0cnlfZXJhc2U6 Cj4gLQlsZWZ0X3NlYmxrcyA9IGF0b21pY19yZWFkKCZuZXctPmxlZnRfc2VibGtzKTsKPiAtCWlm IChsZWZ0X3NlYmxrcykgewo+IC0JCS8qIElmIGxpbmUgaXMgbm90IGZ1bGx5IGVyYXNlZCwgZXJh c2UgaXQgKi8KPiAtCQlpZiAoYXRvbWljX3JlYWQoJm5ldy0+bGVmdF9lYmxrcykpIHsKPiAtCQkJ aWYgKHBibGtfbGluZV9lcmFzZShwYmxrLCBuZXcpKQo+IC0JCQkJZ290byBvdXQ7Cj4gLQkJfSBl bHNlIHsKPiAtCQkJaW9fc2NoZWR1bGUoKTsKPiAtCQl9Cj4gLQkJZ290byByZXRyeV9lcmFzZTsK PiAtCX0KPiAtCj4gLQlpZiAocGJsa19saW5lX2FsbG9jX2JpdG1hcHMocGJsaywgbmV3KSkKPiAt CQlyZXR1cm4gTlVMTDsKPiAtCj4gLXJldHJ5X3NldHVwOgo+IC0JaWYgKCFwYmxrX2xpbmVfaW5p dF9tZXRhZGF0YShwYmxrLCBuZXcsIGN1cikpIHsKPiAtCQluZXcgPSBwYmxrX2xpbmVfcmV0cnko cGJsaywgbmV3KTsKPiAtCQlpZiAoIW5ldykKPiAtCQkJZ290byBvdXQ7Cj4gLQo+IC0JCWdvdG8g cmV0cnlfc2V0dXA7Cj4gLQl9Cj4gLQo+IC0JaWYgKCFwYmxrX2xpbmVfaW5pdF9iYihwYmxrLCBu ZXcsIDEpKSB7Cj4gLQkJbmV3ID0gcGJsa19saW5lX3JldHJ5KHBibGssIG5ldyk7Cj4gLQkJaWYg KCFuZXcpCj4gLQkJCWdvdG8gb3V0Owo+IC0KPiAtCQlnb3RvIHJldHJ5X3NldHVwOwo+IC0JfQo+ IC0KPiAtCXBibGtfcmxfZnJlZV9saW5lc19kZWMoJnBibGstPnJsLCBuZXcsIHRydWUpOwo+IC0K PiAtCS8qIEFsbG9jYXRlIG5leHQgbGluZSBmb3IgcHJlcGFyYXRpb24gKi8KPiAtCXNwaW5fbG9j aygmbF9tZy0+ZnJlZV9sb2NrKTsKPiAtCWxfbWctPmRhdGFfbmV4dCA9IHBibGtfbGluZV9nZXQo cGJsayk7Cj4gLQlpZiAoIWxfbWctPmRhdGFfbmV4dCkgewo+IC0JCS8qIElmIHdlIGNhbm5vdCBn ZXQgYSBuZXcgbGluZSwgd2UgbmVlZCB0byBzdG9wIHRoZSBwaXBlbGluZS4KPiAtCQkgKiBPbmx5 IGFsbG93IGFzIG1hbnkgd3JpdGVzIGluIGFzIHdlIGNhbiBzdG9yZSBzYWZlbHkgYW5kIHRoZW4K PiAtCQkgKiBmYWlsIGdyYWNlZnVsbHkKPiAtCQkgKi8KPiAtCQlwYmxrX3N0b3Bfd3JpdGVzKHBi bGssIG5ldyk7Cj4gLQkJbF9tZy0+ZGF0YV9uZXh0ID0gTlVMTDsKPiAtCX0gZWxzZSB7Cj4gLQkJ bF9tZy0+ZGF0YV9uZXh0LT5zZXFfbnIgPSBsX21nLT5kX3NlcV9ucisrOwo+IC0JCWxfbWctPmRh dGFfbmV4dC0+dHlwZSA9IFBCTEtfTElORVRZUEVfREFUQTsKPiAtCX0KPiAtCXNwaW5fdW5sb2Nr KCZsX21nLT5mcmVlX2xvY2spOwo+IC0KPiAtb3V0Ogo+IC0JcmV0dXJuIG5ldzsKPiAtfQo+IC0K PiAtc3RhdGljIHZvaWQgX19wYmxrX2xpbmVfcHV0KHN0cnVjdCBwYmxrICpwYmxrLCBzdHJ1Y3Qg cGJsa19saW5lICpsaW5lKQo+IC17Cj4gLQlzdHJ1Y3QgcGJsa19saW5lX21nbXQgKmxfbWcgPSAm cGJsay0+bF9tZzsKPiAtCXN0cnVjdCBwYmxrX2djICpnYyA9ICZwYmxrLT5nYzsKPiAtCj4gLQlz cGluX2xvY2soJmxpbmUtPmxvY2spOwo+IC0JV0FSTl9PTihsaW5lLT5zdGF0ZSAhPSBQQkxLX0xJ TkVTVEFURV9HQyk7Cj4gLQlpZiAobGluZS0+d19lcnJfZ2MtPmhhc19nY19lcnIpIHsKPiAtCQlz cGluX3VubG9jaygmbGluZS0+bG9jayk7Cj4gLQkJcGJsa19lcnIocGJsaywgImxpbmUgJWQgaGFk IGVycm9ycyBkdXJpbmcgR0NcbiIsIGxpbmUtPmlkKTsKPiAtCQlwYmxrX3B1dF9saW5lX2JhY2so cGJsaywgbGluZSk7Cj4gLQkJbGluZS0+d19lcnJfZ2MtPmhhc19nY19lcnIgPSAwOwo+IC0JCXJl dHVybjsKPiAtCX0KPiAtCj4gLQlsaW5lLT5zdGF0ZSA9IFBCTEtfTElORVNUQVRFX0ZSRUU7Cj4g LQl0cmFjZV9wYmxrX2xpbmVfc3RhdGUocGJsa19kaXNrX25hbWUocGJsayksIGxpbmUtPmlkLAo+ IC0JCQkJCWxpbmUtPnN0YXRlKTsKPiAtCWxpbmUtPmdjX2dyb3VwID0gUEJMS19MSU5FR0NfTk9O RTsKPiAtCXBibGtfbGluZV9mcmVlKGxpbmUpOwo+IC0KPiAtCWlmIChsaW5lLT53X2Vycl9nYy0+ aGFzX3dyaXRlX2Vycikgewo+IC0JCXBibGtfcmxfd2Vycl9saW5lX291dCgmcGJsay0+cmwpOwo+ IC0JCWxpbmUtPndfZXJyX2djLT5oYXNfd3JpdGVfZXJyID0gMDsKPiAtCX0KPiAtCj4gLQlzcGlu X3VubG9jaygmbGluZS0+bG9jayk7Cj4gLQlhdG9taWNfZGVjKCZnYy0+cGlwZWxpbmVfZ2MpOwo+ IC0KPiAtCXNwaW5fbG9jaygmbF9tZy0+ZnJlZV9sb2NrKTsKPiAtCWxpc3RfYWRkX3RhaWwoJmxp bmUtPmxpc3QsICZsX21nLT5mcmVlX2xpc3QpOwo+IC0JbF9tZy0+bnJfZnJlZV9saW5lcysrOwo+ IC0Jc3Bpbl91bmxvY2soJmxfbWctPmZyZWVfbG9jayk7Cj4gLQo+IC0JcGJsa19ybF9mcmVlX2xp bmVzX2luYygmcGJsay0+cmwsIGxpbmUpOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBwYmxrX2xp bmVfcHV0X3dzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKPiAtewo+IC0Jc3RydWN0IHBibGtf bGluZV93cyAqbGluZV9wdXRfd3MgPSBjb250YWluZXJfb2Yod29yaywKPiAtCQkJCQkJc3RydWN0 IHBibGtfbGluZV93cywgd3MpOwo+IC0Jc3RydWN0IHBibGsgKnBibGsgPSBsaW5lX3B1dF93cy0+ cGJsazsKPiAtCXN0cnVjdCBwYmxrX2xpbmUgKmxpbmUgPSBsaW5lX3B1dF93cy0+bGluZTsKPiAt Cj4gLQlfX3BibGtfbGluZV9wdXQocGJsaywgbGluZSk7Cj4gLQltZW1wb29sX2ZyZWUobGluZV9w dXRfd3MsICZwYmxrLT5nZW5fd3NfcG9vbCk7Cj4gLX0KPiAtCj4gLXZvaWQgcGJsa19saW5lX3B1 dChzdHJ1Y3Qga3JlZiAqcmVmKQo+IC17Cj4gLQlzdHJ1Y3QgcGJsa19saW5lICpsaW5lID0gY29u dGFpbmVyX29mKHJlZiwgc3RydWN0IHBibGtfbGluZSwgcmVmKTsKPiAtCXN0cnVjdCBwYmxrICpw YmxrID0gbGluZS0+cGJsazsKPiAtCj4gLQlfX3BibGtfbGluZV9wdXQocGJsaywgbGluZSk7Cj4g LX0KPiAtCj4gLXZvaWQgcGJsa19saW5lX3B1dF93cShzdHJ1Y3Qga3JlZiAqcmVmKQo+IC17Cj4g LQlzdHJ1Y3QgcGJsa19saW5lICpsaW5lID0gY29udGFpbmVyX29mKHJlZiwgc3RydWN0IHBibGtf bGluZSwgcmVmKTsKPiAtCXN0cnVjdCBwYmxrICpwYmxrID0gbGluZS0+cGJsazsKPiAtCXN0cnVj dCBwYmxrX2xpbmVfd3MgKmxpbmVfcHV0X3dzOwo+IC0KPiAtCWxpbmVfcHV0X3dzID0gbWVtcG9v bF9hbGxvYygmcGJsay0+Z2VuX3dzX3Bvb2wsIEdGUF9BVE9NSUMpOwo+IC0JaWYgKCFsaW5lX3B1 dF93cykKPiAtCQlyZXR1cm47Cj4gLQo+IC0JbGluZV9wdXRfd3MtPnBibGsgPSBwYmxrOwo+IC0J bGluZV9wdXRfd3MtPmxpbmUgPSBsaW5lOwo+IC0JbGluZV9wdXRfd3MtPnByaXYgPSBOVUxMOwo+ IC0KPiAtCUlOSVRfV09SSygmbGluZV9wdXRfd3MtPndzLCBwYmxrX2xpbmVfcHV0X3dzKTsKPiAt CXF1ZXVlX3dvcmsocGJsay0+cl9lbmRfd3EsICZsaW5lX3B1dF93cy0+d3MpOwo+IC19Cj4gLQo+ IC1pbnQgcGJsa19ibGtfZXJhc2VfYXN5bmMoc3RydWN0IHBibGsgKnBibGssIHN0cnVjdCBwcGFf YWRkciBwcGEpCj4gLXsKPiAtCXN0cnVjdCBudm1fcnEgKnJxZDsKPiAtCWludCBlcnI7Cj4gLQo+ IC0JcnFkID0gcGJsa19hbGxvY19ycWQocGJsaywgUEJMS19FUkFTRSk7Cj4gLQo+IC0JcGJsa19z ZXR1cF9lX3JxKHBibGssIHJxZCwgcHBhKTsKPiAtCj4gLQlycWQtPmVuZF9pbyA9IHBibGtfZW5k X2lvX2VyYXNlOwo+IC0JcnFkLT5wcml2YXRlID0gcGJsazsKPiAtCj4gLQl0cmFjZV9wYmxrX2No dW5rX3Jlc2V0KHBibGtfZGlza19uYW1lKHBibGspLAo+IC0JCQkJJnBwYSwgUEJMS19DSFVOS19S RVNFVF9TVEFSVCk7Cj4gLQo+IC0JLyogVGhlIHdyaXRlIHRocmVhZCBzY2hlZHVsZXMgZXJhc2Vz IHNvIHRoYXQgaXQgbWluaW1pemVzIGRpc3R1cmJhbmNlcwo+IC0JICogd2l0aCB3cml0ZXMuIFRo dXMsIHRoZXJlIGlzIG5vIG5lZWQgdG8gdGFrZSB0aGUgTFVOIHNlbWFwaG9yZS4KPiAtCSAqLwo+ IC0JZXJyID0gcGJsa19zdWJtaXRfaW8ocGJsaywgcnFkLCBOVUxMKTsKPiAtCWlmIChlcnIpIHsK PiAtCQlzdHJ1Y3QgbnZtX3RndF9kZXYgKmRldiA9IHBibGstPmRldjsKPiAtCQlzdHJ1Y3QgbnZt X2dlbyAqZ2VvID0gJmRldi0+Z2VvOwo+IC0KPiAtCQlwYmxrX2VycihwYmxrLCAiY291bGQgbm90 IGFzeW5jIGVyYXNlIGxpbmU6JWQsYmxrOiVkXG4iLAo+IC0JCQkJCXBibGtfcHBhX3RvX2xpbmVf aWQocHBhKSwKPiAtCQkJCQlwYmxrX3BwYV90b19wb3MoZ2VvLCBwcGEpKTsKPiAtCX0KPiAtCj4g LQlyZXR1cm4gZXJyOwo+IC19Cj4gLQo+IC1zdHJ1Y3QgcGJsa19saW5lICpwYmxrX2xpbmVfZ2V0 X2RhdGEoc3RydWN0IHBibGsgKnBibGspCj4gLXsKPiAtCXJldHVybiBwYmxrLT5sX21nLmRhdGFf bGluZTsKPiAtfQo+IC0KPiAtLyogRm9yIG5vdywgYWx3YXlzIGVyYXNlIG5leHQgbGluZSAqLwo+ IC1zdHJ1Y3QgcGJsa19saW5lICpwYmxrX2xpbmVfZ2V0X2VyYXNlKHN0cnVjdCBwYmxrICpwYmxr KQo+IC17Cj4gLQlyZXR1cm4gcGJsay0+bF9tZy5kYXRhX25leHQ7Cj4gLX0KPiAtCj4gLWludCBw YmxrX2xpbmVfaXNfZnVsbChzdHJ1Y3QgcGJsa19saW5lICpsaW5lKQo+IC17Cj4gLQlyZXR1cm4g KGxpbmUtPmxlZnRfbXNlY3MgPT0gMCk7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIHBibGtfbGlu ZV9zaG91bGRfc3luY19tZXRhKHN0cnVjdCBwYmxrICpwYmxrKQo+IC17Cj4gLQlpZiAocGJsa19y bF9pc19saW1pdCgmcGJsay0+cmwpKQo+IC0JCXBibGtfbGluZV9jbG9zZV9tZXRhX3N5bmMocGJs ayk7Cj4gLX0KPiAtCj4gLXZvaWQgcGJsa19saW5lX2Nsb3NlKHN0cnVjdCBwYmxrICpwYmxrLCBz dHJ1Y3QgcGJsa19saW5lICpsaW5lKQo+IC17Cj4gLQlzdHJ1Y3QgbnZtX3RndF9kZXYgKmRldiA9 IHBibGstPmRldjsKPiAtCXN0cnVjdCBudm1fZ2VvICpnZW8gPSAmZGV2LT5nZW87Cj4gLQlzdHJ1 Y3QgcGJsa19saW5lX21ldGEgKmxtID0gJnBibGstPmxtOwo+IC0Jc3RydWN0IHBibGtfbGluZV9t Z210ICpsX21nID0gJnBibGstPmxfbWc7Cj4gLQlzdHJ1Y3QgbGlzdF9oZWFkICptb3ZlX2xpc3Q7 Cj4gLQlpbnQgaTsKPiAtCj4gLSNpZmRlZiBDT05GSUdfTlZNX1BCTEtfREVCVUcKPiAtCVdBUk4o IWJpdG1hcF9mdWxsKGxpbmUtPm1hcF9iaXRtYXAsIGxtLT5zZWNfcGVyX2xpbmUpLAo+IC0JCQkJ InBibGs6IGNvcnJ1cHQgY2xvc2VkIGxpbmUgJWRcbiIsIGxpbmUtPmlkKTsKPiAtI2VuZGlmCj4g LQo+IC0Jc3Bpbl9sb2NrKCZsX21nLT5mcmVlX2xvY2spOwo+IC0JV0FSTl9PTighdGVzdF9hbmRf Y2xlYXJfYml0KGxpbmUtPm1ldGFfbGluZSwgJmxfbWctPm1ldGFfYml0bWFwKSk7Cj4gLQlzcGlu X3VubG9jaygmbF9tZy0+ZnJlZV9sb2NrKTsKPiAtCj4gLQlzcGluX2xvY2soJmxfbWctPmdjX2xv Y2spOwo+IC0Jc3Bpbl9sb2NrKCZsaW5lLT5sb2NrKTsKPiAtCVdBUk5fT04obGluZS0+c3RhdGUg IT0gUEJMS19MSU5FU1RBVEVfT1BFTik7Cj4gLQlsaW5lLT5zdGF0ZSA9IFBCTEtfTElORVNUQVRF X0NMT1NFRDsKPiAtCW1vdmVfbGlzdCA9IHBibGtfbGluZV9nY19saXN0KHBibGssIGxpbmUpOwo+ IC0JbGlzdF9hZGRfdGFpbCgmbGluZS0+bGlzdCwgbW92ZV9saXN0KTsKPiAtCj4gLQltZW1wb29s X2ZyZWUobGluZS0+bWFwX2JpdG1hcCwgbF9tZy0+Yml0bWFwX3Bvb2wpOwo+IC0JbGluZS0+bWFw X2JpdG1hcCA9IE5VTEw7Cj4gLQlsaW5lLT5zbWV0YSA9IE5VTEw7Cj4gLQlsaW5lLT5lbWV0YSA9 IE5VTEw7Cj4gLQo+IC0JZm9yIChpID0gMDsgaSA8IGxtLT5ibGtfcGVyX2xpbmU7IGkrKykgewo+ IC0JCXN0cnVjdCBwYmxrX2x1biAqcmx1biA9ICZwYmxrLT5sdW5zW2ldOwo+IC0JCWludCBwb3Mg PSBwYmxrX3BwYV90b19wb3MoZ2VvLCBybHVuLT5icHBhKTsKPiAtCQlpbnQgc3RhdGUgPSBsaW5l LT5jaGtzW3Bvc10uc3RhdGU7Cj4gLQo+IC0JCWlmICghKHN0YXRlICYgTlZNX0NIS19TVF9PRkZM SU5FKSkKPiAtCQkJc3RhdGUgPSBOVk1fQ0hLX1NUX0NMT1NFRDsKPiAtCX0KPiAtCj4gLQlzcGlu X3VubG9jaygmbGluZS0+bG9jayk7Cj4gLQlzcGluX3VubG9jaygmbF9tZy0+Z2NfbG9jayk7Cj4g LQo+IC0JdHJhY2VfcGJsa19saW5lX3N0YXRlKHBibGtfZGlza19uYW1lKHBibGspLCBsaW5lLT5p ZCwKPiAtCQkJCQlsaW5lLT5zdGF0ZSk7Cj4gLX0KPiAtCj4gLXZvaWQgcGJsa19saW5lX2Nsb3Nl X21ldGEoc3RydWN0IHBibGsgKnBibGssIHN0cnVjdCBwYmxrX2xpbmUgKmxpbmUpCj4gLXsKPiAt CXN0cnVjdCBwYmxrX2xpbmVfbWdtdCAqbF9tZyA9ICZwYmxrLT5sX21nOwo+IC0Jc3RydWN0IHBi bGtfbGluZV9tZXRhICpsbSA9ICZwYmxrLT5sbTsKPiAtCXN0cnVjdCBwYmxrX2VtZXRhICplbWV0 YSA9IGxpbmUtPmVtZXRhOwo+IC0Jc3RydWN0IGxpbmVfZW1ldGEgKmVtZXRhX2J1ZiA9IGVtZXRh LT5idWY7Cj4gLQlzdHJ1Y3Qgd2FfY291bnRlcnMgKndhID0gZW1ldGFfdG9fd2EobG0sIGVtZXRh X2J1Zik7Cj4gLQo+IC0JLyogTm8gbmVlZCBmb3IgZXhhY3QgdnNjIHZhbHVlOyBhdm9pZCBhIGJp ZyBsaW5lIGxvY2sgYW5kIHRha2UgYXByb3guICovCj4gLQltZW1jcHkoZW1ldGFfdG9fdnNjKHBi bGssIGVtZXRhX2J1ZiksIGxfbWctPnZzY19saXN0LCBsbS0+dnNjX2xpc3RfbGVuKTsKPiAtCW1l bWNweShlbWV0YV90b19iYihlbWV0YV9idWYpLCBsaW5lLT5ibGtfYml0bWFwLCBsbS0+YmxrX2Jp dG1hcF9sZW4pOwo+IC0KPiAtCXdhLT51c2VyID0gY3B1X3RvX2xlNjQoYXRvbWljNjRfcmVhZCgm cGJsay0+dXNlcl93YSkpOwo+IC0Jd2EtPnBhZCA9IGNwdV90b19sZTY0KGF0b21pYzY0X3JlYWQo JnBibGstPnBhZF93YSkpOwo+IC0Jd2EtPmdjID0gY3B1X3RvX2xlNjQoYXRvbWljNjRfcmVhZCgm cGJsay0+Z2Nfd2EpKTsKPiAtCj4gLQlpZiAobGUzMl90b19jcHUoZW1ldGFfYnVmLT5oZWFkZXIu aWRlbnRpZmllcikgIT0gUEJMS19NQUdJQykgewo+IC0JCWVtZXRhX2J1Zi0+aGVhZGVyLmlkZW50 aWZpZXIgPSBjcHVfdG9fbGUzMihQQkxLX01BR0lDKTsKPiAtCQlleHBvcnRfZ3VpZChlbWV0YV9i dWYtPmhlYWRlci51dWlkLCAmcGJsay0+aW5zdGFuY2VfdXVpZCk7Cj4gLQkJZW1ldGFfYnVmLT5o ZWFkZXIuaWQgPSBjcHVfdG9fbGUzMihsaW5lLT5pZCk7Cj4gLQkJZW1ldGFfYnVmLT5oZWFkZXIu dHlwZSA9IGNwdV90b19sZTE2KGxpbmUtPnR5cGUpOwo+IC0JCWVtZXRhX2J1Zi0+aGVhZGVyLnZl cnNpb25fbWFqb3IgPSBFTUVUQV9WRVJTSU9OX01BSk9SOwo+IC0JCWVtZXRhX2J1Zi0+aGVhZGVy LnZlcnNpb25fbWlub3IgPSBFTUVUQV9WRVJTSU9OX01JTk9SOwo+IC0JCWVtZXRhX2J1Zi0+aGVh ZGVyLmNyYyA9IGNwdV90b19sZTMyKAo+IC0JCQlwYmxrX2NhbGNfbWV0YV9oZWFkZXJfY3JjKHBi bGssICZlbWV0YV9idWYtPmhlYWRlcikpOwo+IC0JfQo+IC0KPiAtCWVtZXRhX2J1Zi0+bnJfdmFs aWRfbGJhcyA9IGNwdV90b19sZTY0KGxpbmUtPm5yX3ZhbGlkX2xiYXMpOwo+IC0JZW1ldGFfYnVm LT5jcmMgPSBjcHVfdG9fbGUzMihwYmxrX2NhbGNfZW1ldGFfY3JjKHBibGssIGVtZXRhX2J1Zikp Owo+IC0KPiAtCXNwaW5fbG9jaygmbF9tZy0+Y2xvc2VfbG9jayk7Cj4gLQlzcGluX2xvY2soJmxp bmUtPmxvY2spOwo+IC0KPiAtCS8qIFVwZGF0ZSB0aGUgaW4tbWVtb3J5IHN0YXJ0IGFkZHJlc3Mg Zm9yIGVtZXRhLCBpbiBjYXNlIGl0IGhhcwo+IC0JICogc2hpZnRlZCBkdWUgdG8gd3JpdGUgZXJy b3JzCj4gLQkgKi8KPiAtCWlmIChsaW5lLT5lbWV0YV9zc2VjICE9IGxpbmUtPmN1cl9zZWMpCj4g LQkJbGluZS0+ZW1ldGFfc3NlYyA9IGxpbmUtPmN1cl9zZWM7Cj4gLQo+IC0JbGlzdF9hZGRfdGFp bCgmbGluZS0+bGlzdCwgJmxfbWctPmVtZXRhX2xpc3QpOwo+IC0Jc3Bpbl91bmxvY2soJmxpbmUt PmxvY2spOwo+IC0Jc3Bpbl91bmxvY2soJmxfbWctPmNsb3NlX2xvY2spOwo+IC0KPiAtCXBibGtf bGluZV9zaG91bGRfc3luY19tZXRhKHBibGspOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBwYmxr X3NhdmVfbGJhX2xpc3Qoc3RydWN0IHBibGsgKnBibGssIHN0cnVjdCBwYmxrX2xpbmUgKmxpbmUp Cj4gLXsKPiAtCXN0cnVjdCBwYmxrX2xpbmVfbWV0YSAqbG0gPSAmcGJsay0+bG07Cj4gLQl1bnNp Z25lZCBpbnQgbGJhX2xpc3Rfc2l6ZSA9IGxtLT5lbWV0YV9sZW5bMl07Cj4gLQlzdHJ1Y3QgcGJs a193X2Vycl9nYyAqd19lcnJfZ2MgPSBsaW5lLT53X2Vycl9nYzsKPiAtCXN0cnVjdCBwYmxrX2Vt ZXRhICplbWV0YSA9IGxpbmUtPmVtZXRhOwo+IC0KPiAtCXdfZXJyX2djLT5sYmFfbGlzdCA9IGt2 bWFsbG9jKGxiYV9saXN0X3NpemUsIEdGUF9LRVJORUwpOwo+IC0JbWVtY3B5KHdfZXJyX2djLT5s YmFfbGlzdCwgZW1ldGFfdG9fbGJhcyhwYmxrLCBlbWV0YS0+YnVmKSwKPiAtCQkJCWxiYV9saXN0 X3NpemUpOwo+IC19Cj4gLQo+IC12b2lkIHBibGtfbGluZV9jbG9zZV93cyhzdHJ1Y3Qgd29ya19z dHJ1Y3QgKndvcmspCj4gLXsKPiAtCXN0cnVjdCBwYmxrX2xpbmVfd3MgKmxpbmVfd3MgPSBjb250 YWluZXJfb2Yod29yaywgc3RydWN0IHBibGtfbGluZV93cywKPiAtCQkJCQkJCQkJd3MpOwo+IC0J c3RydWN0IHBibGsgKnBibGsgPSBsaW5lX3dzLT5wYmxrOwo+IC0Jc3RydWN0IHBibGtfbGluZSAq bGluZSA9IGxpbmVfd3MtPmxpbmU7Cj4gLQlzdHJ1Y3QgcGJsa193X2Vycl9nYyAqd19lcnJfZ2Mg PSBsaW5lLT53X2Vycl9nYzsKPiAtCj4gLQkvKiBXcml0ZSBlcnJvcnMgbWFrZXMgdGhlIGVtZXRh IHN0YXJ0IGFkZHJlc3Mgc3RvcmVkIGluIHNtZXRhIGludmFsaWQsCj4gLQkgKiBzbyBrZWVwIGEg Y29weSBvZiB0aGUgbGJhIGxpc3QgdW50aWwgd2UndmUgZ2MnZCB0aGUgbGluZQo+IC0JICovCj4g LQlpZiAod19lcnJfZ2MtPmhhc193cml0ZV9lcnIpCj4gLQkJcGJsa19zYXZlX2xiYV9saXN0KHBi bGssIGxpbmUpOwo+IC0KPiAtCXBibGtfbGluZV9jbG9zZShwYmxrLCBsaW5lKTsKPiAtCW1lbXBv b2xfZnJlZShsaW5lX3dzLCAmcGJsay0+Z2VuX3dzX3Bvb2wpOwo+IC19Cj4gLQo+IC12b2lkIHBi bGtfZ2VuX3J1bl93cyhzdHJ1Y3QgcGJsayAqcGJsaywgc3RydWN0IHBibGtfbGluZSAqbGluZSwg dm9pZCAqcHJpdiwKPiAtCQkgICAgICB2b2lkICgqd29yaykoc3RydWN0IHdvcmtfc3RydWN0ICop LCBnZnBfdCBnZnBfbWFzaywKPiAtCQkgICAgICBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd3Ep Cj4gLXsKPiAtCXN0cnVjdCBwYmxrX2xpbmVfd3MgKmxpbmVfd3M7Cj4gLQo+IC0JbGluZV93cyA9 IG1lbXBvb2xfYWxsb2MoJnBibGstPmdlbl93c19wb29sLCBnZnBfbWFzayk7Cj4gLQlpZiAoIWxp bmVfd3MpIHsKPiAtCQlwYmxrX2VycihwYmxrLCAicGJsazogY291bGQgbm90IGFsbG9jYXRlIG1l bW9yeVxuIik7Cj4gLQkJcmV0dXJuOwo+IC0JfQo+IC0KPiAtCWxpbmVfd3MtPnBibGsgPSBwYmxr Owo+IC0JbGluZV93cy0+bGluZSA9IGxpbmU7Cj4gLQlsaW5lX3dzLT5wcml2ID0gcHJpdjsKPiAt Cj4gLQlJTklUX1dPUksoJmxpbmVfd3MtPndzLCB3b3JrKTsKPiAtCXF1ZXVlX3dvcmsod3EsICZs aW5lX3dzLT53cyk7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIF9fcGJsa19kb3duX2NodW5rKHN0 cnVjdCBwYmxrICpwYmxrLCBpbnQgcG9zKQo+IC17Cj4gLQlzdHJ1Y3QgcGJsa19sdW4gKnJsdW4g PSAmcGJsay0+bHVuc1twb3NdOwo+IC0JaW50IHJldDsKPiAtCj4gLQkvKgo+IC0JICogT25seSBz ZW5kIG9uZSBpbmZsaWdodCBJL08gcGVyIExVTi4gU2luY2Ugd2UgbWFwIGF0IGEgcGFnZQo+IC0J ICogZ3JhbnVyYWxpdHksIGFsbCBwcGFzIGluIHRoZSBJL08gd2lsbCBtYXAgdG8gdGhlIHNhbWUg TFVOCj4gLQkgKi8KPiAtCj4gLQlyZXQgPSBkb3duX3RpbWVvdXQoJnJsdW4tPndyX3NlbSwgbXNl Y3NfdG9famlmZmllcygzMDAwMCkpOwo+IC0JaWYgKHJldCA9PSAtRVRJTUUgfHwgcmV0ID09IC1F SU5UUikKPiAtCQlwYmxrX2VycihwYmxrLCAidGFraW5nIGx1biBzZW1hcGhvcmUgdGltZWQgb3V0 OiBlcnIgJWRcbiIsCj4gLQkJCQktcmV0KTsKPiAtfQo+IC0KPiAtdm9pZCBwYmxrX2Rvd25fY2h1 bmsoc3RydWN0IHBibGsgKnBibGssIHN0cnVjdCBwcGFfYWRkciBwcGEpCj4gLXsKPiAtCXN0cnVj dCBudm1fdGd0X2RldiAqZGV2ID0gcGJsay0+ZGV2Owo+IC0Jc3RydWN0IG52bV9nZW8gKmdlbyA9 ICZkZXYtPmdlbzsKPiAtCWludCBwb3MgPSBwYmxrX3BwYV90b19wb3MoZ2VvLCBwcGEpOwo+IC0K PiAtCV9fcGJsa19kb3duX2NodW5rKHBibGssIHBvcyk7Cj4gLX0KPiAtCj4gLXZvaWQgcGJsa19k b3duX3JxKHN0cnVjdCBwYmxrICpwYmxrLCBzdHJ1Y3QgcHBhX2FkZHIgcHBhLAo+IC0JCSAgdW5z aWduZWQgbG9uZyAqbHVuX2JpdG1hcCkKPiAtewo+IC0Jc3RydWN0IG52bV90Z3RfZGV2ICpkZXYg PSBwYmxrLT5kZXY7Cj4gLQlzdHJ1Y3QgbnZtX2dlbyAqZ2VvID0gJmRldi0+Z2VvOwo+IC0JaW50 IHBvcyA9IHBibGtfcHBhX3RvX3BvcyhnZW8sIHBwYSk7Cj4gLQo+IC0JLyogSWYgdGhlIExVTiBo YXMgYmVlbiBsb2NrZWQgZm9yIHRoaXMgc2FtZSByZXF1ZXN0LCBkbyBubyBhdHRlbXB0IHRvCj4g LQkgKiBsb2NrIGl0IGFnYWluCj4gLQkgKi8KPiAtCWlmICh0ZXN0X2FuZF9zZXRfYml0KHBvcywg bHVuX2JpdG1hcCkpCj4gLQkJcmV0dXJuOwo+IC0KPiAtCV9fcGJsa19kb3duX2NodW5rKHBibGss IHBvcyk7Cj4gLX0KPiAtCj4gLXZvaWQgcGJsa191cF9jaHVuayhzdHJ1Y3QgcGJsayAqcGJsaywg c3RydWN0IHBwYV9hZGRyIHBwYSkKPiAtewo+IC0Jc3RydWN0IG52bV90Z3RfZGV2ICpkZXYgPSBw YmxrLT5kZXY7Cj4gLQlzdHJ1Y3QgbnZtX2dlbyAqZ2VvID0gJmRldi0+Z2VvOwo+IC0Jc3RydWN0 IHBibGtfbHVuICpybHVuOwo+IC0JaW50IHBvcyA9IHBibGtfcHBhX3RvX3BvcyhnZW8sIHBwYSk7 Cj4gLQo+IC0Jcmx1biA9ICZwYmxrLT5sdW5zW3Bvc107Cj4gLQl1cCgmcmx1bi0+d3Jfc2VtKTsK PiAtfQo+IC0KPiAtdm9pZCBwYmxrX3VwX3JxKHN0cnVjdCBwYmxrICpwYmxrLCB1bnNpZ25lZCBs b25nICpsdW5fYml0bWFwKQo+IC17Cj4gLQlzdHJ1Y3QgbnZtX3RndF9kZXYgKmRldiA9IHBibGst PmRldjsKPiAtCXN0cnVjdCBudm1fZ2VvICpnZW8gPSAmZGV2LT5nZW87Cj4gLQlzdHJ1Y3QgcGJs a19sdW4gKnJsdW47Cj4gLQlpbnQgbnVtX2x1biA9IGdlby0+YWxsX2x1bnM7Cj4gLQlpbnQgYml0 ID0gLTE7Cj4gLQo+IC0Jd2hpbGUgKChiaXQgPSBmaW5kX25leHRfYml0KGx1bl9iaXRtYXAsIG51 bV9sdW4sIGJpdCArIDEpKSA8IG51bV9sdW4pIHsKPiAtCQlybHVuID0gJnBibGstPmx1bnNbYml0 XTsKPiAtCQl1cCgmcmx1bi0+d3Jfc2VtKTsKPiAtCX0KPiAtfQo+IC0KPiAtdm9pZCBwYmxrX3Vw ZGF0ZV9tYXAoc3RydWN0IHBibGsgKnBibGssIHNlY3Rvcl90IGxiYSwgc3RydWN0IHBwYV9hZGRy IHBwYSkKPiAtewo+IC0Jc3RydWN0IHBwYV9hZGRyIHBwYV9sMnA7Cj4gLQo+IC0JLyogbG9naWMg ZXJyb3I6IGxiYSBvdXQtb2YtYm91bmRzLiBJZ25vcmUgdXBkYXRlICovCj4gLQlpZiAoIShsYmEg PCBwYmxrLT5jYXBhY2l0eSkpIHsKPiAtCQlXQVJOKDEsICJwYmxrOiBjb3JydXB0ZWQgTDJQIG1h cCByZXF1ZXN0XG4iKTsKPiAtCQlyZXR1cm47Cj4gLQl9Cj4gLQo+IC0Jc3Bpbl9sb2NrKCZwYmxr LT50cmFuc19sb2NrKTsKPiAtCXBwYV9sMnAgPSBwYmxrX3RyYW5zX21hcF9nZXQocGJsaywgbGJh KTsKPiAtCj4gLQlpZiAoIXBibGtfYWRkcl9pbl9jYWNoZShwcGFfbDJwKSAmJiAhcGJsa19wcGFf ZW1wdHkocHBhX2wycCkpCj4gLQkJcGJsa19tYXBfaW52YWxpZGF0ZShwYmxrLCBwcGFfbDJwKTsK PiAtCj4gLQlwYmxrX3RyYW5zX21hcF9zZXQocGJsaywgbGJhLCBwcGEpOwo+IC0Jc3Bpbl91bmxv Y2soJnBibGstPnRyYW5zX2xvY2spOwo+IC19Cj4gLQo+IC12b2lkIHBibGtfdXBkYXRlX21hcF9j YWNoZShzdHJ1Y3QgcGJsayAqcGJsaywgc2VjdG9yX3QgbGJhLCBzdHJ1Y3QgcHBhX2FkZHIgcHBh KQo+IC17Cj4gLQo+IC0jaWZkZWYgQ09ORklHX05WTV9QQkxLX0RFQlVHCj4gLQkvKiBDYWxsZXJz IG11c3QgZW5zdXJlIHRoYXQgdGhlIHBwYSBwb2ludHMgdG8gYSBjYWNoZSBhZGRyZXNzICovCj4g LQlCVUdfT04oIXBibGtfYWRkcl9pbl9jYWNoZShwcGEpKTsKPiAtCUJVR19PTihwYmxrX3JiX3Bv c19vb2IoJnBibGstPnJ3YiwgcGJsa19hZGRyX3RvX2NhY2hlbGluZShwcGEpKSk7Cj4gLSNlbmRp Zgo+IC0KPiAtCXBibGtfdXBkYXRlX21hcChwYmxrLCBsYmEsIHBwYSk7Cj4gLX0KPiAtCj4gLWlu dCBwYmxrX3VwZGF0ZV9tYXBfZ2Moc3RydWN0IHBibGsgKnBibGssIHNlY3Rvcl90IGxiYSwgc3Ry dWN0IHBwYV9hZGRyIHBwYV9uZXcsCj4gLQkJICAgICAgIHN0cnVjdCBwYmxrX2xpbmUgKmdjX2xp bmUsIHU2NCBwYWRkcl9nYykKPiAtewo+IC0Jc3RydWN0IHBwYV9hZGRyIHBwYV9sMnAsIHBwYV9n YzsKPiAtCWludCByZXQgPSAxOwo+IC0KPiAtI2lmZGVmIENPTkZJR19OVk1fUEJMS19ERUJVRwo+ IC0JLyogQ2FsbGVycyBtdXN0IGVuc3VyZSB0aGF0IHRoZSBwcGEgcG9pbnRzIHRvIGEgY2FjaGUg YWRkcmVzcyAqLwo+IC0JQlVHX09OKCFwYmxrX2FkZHJfaW5fY2FjaGUocHBhX25ldykpOwo+IC0J QlVHX09OKHBibGtfcmJfcG9zX29vYigmcGJsay0+cndiLCBwYmxrX2FkZHJfdG9fY2FjaGVsaW5l KHBwYV9uZXcpKSk7Cj4gLSNlbmRpZgo+IC0KPiAtCS8qIGxvZ2ljIGVycm9yOiBsYmEgb3V0LW9m LWJvdW5kcy4gSWdub3JlIHVwZGF0ZSAqLwo+IC0JaWYgKCEobGJhIDwgcGJsay0+Y2FwYWNpdHkp KSB7Cj4gLQkJV0FSTigxLCAicGJsazogY29ycnVwdGVkIEwyUCBtYXAgcmVxdWVzdFxuIik7Cj4g LQkJcmV0dXJuIDA7Cj4gLQl9Cj4gLQo+IC0Jc3Bpbl9sb2NrKCZwYmxrLT50cmFuc19sb2NrKTsK PiAtCXBwYV9sMnAgPSBwYmxrX3RyYW5zX21hcF9nZXQocGJsaywgbGJhKTsKPiAtCXBwYV9nYyA9 IGFkZHJfdG9fZ2VuX3BwYShwYmxrLCBwYWRkcl9nYywgZ2NfbGluZS0+aWQpOwo+IC0KPiAtCWlm ICghcGJsa19wcGFfY29tcChwcGFfbDJwLCBwcGFfZ2MpKSB7Cj4gLQkJc3Bpbl9sb2NrKCZnY19s aW5lLT5sb2NrKTsKPiAtCQlXQVJOKCF0ZXN0X2JpdChwYWRkcl9nYywgZ2NfbGluZS0+aW52YWxp ZF9iaXRtYXApLAo+IC0JCQkJCQkicGJsazogY29ycnVwdGVkIEdDIHVwZGF0ZSIpOwo+IC0JCXNw aW5fdW5sb2NrKCZnY19saW5lLT5sb2NrKTsKPiAtCj4gLQkJcmV0ID0gMDsKPiAtCQlnb3RvIG91 dDsKPiAtCX0KPiAtCj4gLQlwYmxrX3RyYW5zX21hcF9zZXQocGJsaywgbGJhLCBwcGFfbmV3KTsK PiAtb3V0Ogo+IC0Jc3Bpbl91bmxvY2soJnBibGstPnRyYW5zX2xvY2spOwo+IC0JcmV0dXJuIHJl dDsKPiAtfQo+IC0KPiAtdm9pZCBwYmxrX3VwZGF0ZV9tYXBfZGV2KHN0cnVjdCBwYmxrICpwYmxr LCBzZWN0b3JfdCBsYmEsCj4gLQkJCSBzdHJ1Y3QgcHBhX2FkZHIgcHBhX21hcHBlZCwgc3RydWN0 IHBwYV9hZGRyIHBwYV9jYWNoZSkKPiAtewo+IC0Jc3RydWN0IHBwYV9hZGRyIHBwYV9sMnA7Cj4g LQo+IC0jaWZkZWYgQ09ORklHX05WTV9QQkxLX0RFQlVHCj4gLQkvKiBDYWxsZXJzIG11c3QgZW5z dXJlIHRoYXQgdGhlIHBwYSBwb2ludHMgdG8gYSBkZXZpY2UgYWRkcmVzcyAqLwo+IC0JQlVHX09O KHBibGtfYWRkcl9pbl9jYWNoZShwcGFfbWFwcGVkKSk7Cj4gLSNlbmRpZgo+IC0JLyogSW52YWxp ZGF0ZSBhbmQgZGlzY2FyZCBwYWRkZWQgZW50cmllcyAqLwo+IC0JaWYgKGxiYSA9PSBBRERSX0VN UFRZKSB7Cj4gLQkJYXRvbWljNjRfaW5jKCZwYmxrLT5wYWRfd2EpOwo+IC0jaWZkZWYgQ09ORklH X05WTV9QQkxLX0RFQlVHCj4gLQkJYXRvbWljX2xvbmdfaW5jKCZwYmxrLT5wYWRkZWRfd2IpOwo+ IC0jZW5kaWYKPiAtCQlpZiAoIXBibGtfcHBhX2VtcHR5KHBwYV9tYXBwZWQpKQo+IC0JCQlwYmxr X21hcF9pbnZhbGlkYXRlKHBibGssIHBwYV9tYXBwZWQpOwo+IC0JCXJldHVybjsKPiAtCX0KPiAt Cj4gLQkvKiBsb2dpYyBlcnJvcjogbGJhIG91dC1vZi1ib3VuZHMuIElnbm9yZSB1cGRhdGUgKi8K PiAtCWlmICghKGxiYSA8IHBibGstPmNhcGFjaXR5KSkgewo+IC0JCVdBUk4oMSwgInBibGs6IGNv cnJ1cHRlZCBMMlAgbWFwIHJlcXVlc3RcbiIpOwo+IC0JCXJldHVybjsKPiAtCX0KPiAtCj4gLQlz cGluX2xvY2soJnBibGstPnRyYW5zX2xvY2spOwo+IC0JcHBhX2wycCA9IHBibGtfdHJhbnNfbWFw X2dldChwYmxrLCBsYmEpOwo+IC0KPiAtCS8qIERvIG5vdCB1cGRhdGUgTDJQIGlmIHRoZSBjYWNo ZWxpbmUgaGFzIGJlZW4gdXBkYXRlZC4gSW4gdGhpcyBjYXNlLAo+IC0JICogdGhlIG1hcHBlZCBw cGEgbXVzdCBiZSBpbnZhbGlkYXRlZAo+IC0JICovCj4gLQlpZiAoIXBibGtfcHBhX2NvbXAocHBh X2wycCwgcHBhX2NhY2hlKSkgewo+IC0JCWlmICghcGJsa19wcGFfZW1wdHkocHBhX21hcHBlZCkp Cj4gLQkJCXBibGtfbWFwX2ludmFsaWRhdGUocGJsaywgcHBhX21hcHBlZCk7Cj4gLQkJZ290byBv dXQ7Cj4gLQl9Cj4gLQo+IC0jaWZkZWYgQ09ORklHX05WTV9QQkxLX0RFQlVHCj4gLQlXQVJOX09O KCFwYmxrX2FkZHJfaW5fY2FjaGUocHBhX2wycCkgJiYgIXBibGtfcHBhX2VtcHR5KHBwYV9sMnAp KTsKPiAtI2VuZGlmCj4gLQo+IC0JcGJsa190cmFuc19tYXBfc2V0KHBibGssIGxiYSwgcHBhX21h cHBlZCk7Cj4gLW91dDoKPiAtCXNwaW5fdW5sb2NrKCZwYmxrLT50cmFuc19sb2NrKTsKPiAtfQo+ IC0KPiAtaW50IHBibGtfbG9va3VwX2wycF9zZXEoc3RydWN0IHBibGsgKnBibGssIHN0cnVjdCBw cGFfYWRkciAqcHBhcywKPiAtCQkJIHNlY3Rvcl90IGJsYmEsIGludCBucl9zZWNzLCBib29sICpm cm9tX2NhY2hlKQo+IC17Cj4gLQlpbnQgaTsKPiAtCj4gLQlzcGluX2xvY2soJnBibGstPnRyYW5z X2xvY2spOwo+IC0JZm9yIChpID0gMDsgaSA8IG5yX3NlY3M7IGkrKykgewo+IC0JCXN0cnVjdCBw cGFfYWRkciBwcGE7Cj4gLQo+IC0JCXBwYSA9IHBwYXNbaV0gPSBwYmxrX3RyYW5zX21hcF9nZXQo cGJsaywgYmxiYSArIGkpOwo+IC0KPiAtCQkvKiBJZiB0aGUgTDJQIGVudHJ5IG1hcHMgdG8gYSBs aW5lLCB0aGUgcmVmZXJlbmNlIGlzIHZhbGlkICovCj4gLQkJaWYgKCFwYmxrX3BwYV9lbXB0eShw cGEpICYmICFwYmxrX2FkZHJfaW5fY2FjaGUocHBhKSkgewo+IC0JCQlzdHJ1Y3QgcGJsa19saW5l ICpsaW5lID0gcGJsa19wcGFfdG9fbGluZShwYmxrLCBwcGEpOwo+IC0KPiAtCQkJaWYgKGkgPiAw ICYmICpmcm9tX2NhY2hlKQo+IC0JCQkJYnJlYWs7Cj4gLQkJCSpmcm9tX2NhY2hlID0gZmFsc2U7 Cj4gLQo+IC0JCQlrcmVmX2dldCgmbGluZS0+cmVmKTsKPiAtCQl9IGVsc2Ugewo+IC0JCQlpZiAo aSA+IDAgJiYgISpmcm9tX2NhY2hlKQo+IC0JCQkJYnJlYWs7Cj4gLQkJCSpmcm9tX2NhY2hlID0g dHJ1ZTsKPiAtCQl9Cj4gLQl9Cj4gLQlzcGluX3VubG9jaygmcGJsay0+dHJhbnNfbG9jayk7Cj4g LQlyZXR1cm4gaTsKPiAtfQo+IC0KPiAtdm9pZCBwYmxrX2xvb2t1cF9sMnBfcmFuZChzdHJ1Y3Qg cGJsayAqcGJsaywgc3RydWN0IHBwYV9hZGRyICpwcGFzLAo+IC0JCQkgIHU2NCAqbGJhX2xpc3Qs IGludCBucl9zZWNzKQo+IC17Cj4gLQl1NjQgbGJhOwo+IC0JaW50IGk7Cj4gLQo+IC0Jc3Bpbl9s b2NrKCZwYmxrLT50cmFuc19sb2NrKTsKPiAtCWZvciAoaSA9IDA7IGkgPCBucl9zZWNzOyBpKysp IHsKPiAtCQlsYmEgPSBsYmFfbGlzdFtpXTsKPiAtCQlpZiAobGJhICE9IEFERFJfRU1QVFkpIHsK PiAtCQkJLyogbG9naWMgZXJyb3I6IGxiYSBvdXQtb2YtYm91bmRzLiBJZ25vcmUgdXBkYXRlICov Cj4gLQkJCWlmICghKGxiYSA8IHBibGstPmNhcGFjaXR5KSkgewo+IC0JCQkJV0FSTigxLCAicGJs azogY29ycnVwdGVkIEwyUCBtYXAgcmVxdWVzdFxuIik7Cj4gLQkJCQljb250aW51ZTsKPiAtCQkJ fQo+IC0JCQlwcGFzW2ldID0gcGJsa190cmFuc19tYXBfZ2V0KHBibGssIGxiYSk7Cj4gLQkJfQo+ IC0JfQo+IC0Jc3Bpbl91bmxvY2soJnBibGstPnRyYW5zX2xvY2spOwo+IC19Cj4gLQo+IC12b2lk ICpwYmxrX2dldF9tZXRhX2Zvcl93cml0ZXMoc3RydWN0IHBibGsgKnBibGssIHN0cnVjdCBudm1f cnEgKnJxZCkKPiAtewo+IC0Jdm9pZCAqYnVmZmVyOwo+IC0KPiAtCWlmIChwYmxrX2lzX29vYl9t ZXRhX3N1cHBvcnRlZChwYmxrKSkgewo+IC0JCS8qIEp1c3QgdXNlIE9PQiBtZXRhZGF0YSBidWZm ZXIgYXMgYWx3YXlzICovCj4gLQkJYnVmZmVyID0gcnFkLT5tZXRhX2xpc3Q7Cj4gLQl9IGVsc2Ug ewo+IC0JCS8qIFdlIG5lZWQgdG8gcmV1c2UgbGFzdCBwYWdlIG9mIHJlcXVlc3QgKHBhY2tlZCBt ZXRhZGF0YSkKPiAtCQkgKiBpbiBzaW1pbGFyIHdheSBhcyB0cmFkaXRpb25hbCBvb2IgbWV0YWRh dGEKPiAtCQkgKi8KPiAtCQlidWZmZXIgPSBwYWdlX3RvX3ZpcnQoCj4gLQkJCXJxZC0+YmlvLT5i aV9pb192ZWNbcnFkLT5iaW8tPmJpX3ZjbnQgLSAxXS5idl9wYWdlKTsKPiAtCX0KPiAtCj4gLQly ZXR1cm4gYnVmZmVyOwo+IC19Cj4gLQo+IC12b2lkIHBibGtfZ2V0X3BhY2tlZF9tZXRhKHN0cnVj dCBwYmxrICpwYmxrLCBzdHJ1Y3QgbnZtX3JxICpycWQpCj4gLXsKPiAtCXZvaWQgKm1ldGFfbGlz dCA9IHJxZC0+bWV0YV9saXN0Owo+IC0Jdm9pZCAqcGFnZTsKPiAtCWludCBpID0gMDsKPiAtCj4g LQlpZiAocGJsa19pc19vb2JfbWV0YV9zdXBwb3J0ZWQocGJsaykpCj4gLQkJcmV0dXJuOwo+IC0K PiAtCXBhZ2UgPSBwYWdlX3RvX3ZpcnQocnFkLT5iaW8tPmJpX2lvX3ZlY1tycWQtPmJpby0+Ymlf dmNudCAtIDFdLmJ2X3BhZ2UpOwo+IC0JLyogV2UgbmVlZCB0byBmaWxsIG9vYiBtZXRhIGJ1ZmZl ciB3aXRoIGRhdGEgZnJvbSBwYWNrZWQgbWV0YWRhdGEgKi8KPiAtCWZvciAoOyBpIDwgcnFkLT5u cl9wcGFzOyBpKyspCj4gLQkJbWVtY3B5KHBibGtfZ2V0X21ldGEocGJsaywgbWV0YV9saXN0LCBp KSwKPiAtCQkJcGFnZSArIChpICogc2l6ZW9mKHN0cnVjdCBwYmxrX3NlY19tZXRhKSksCj4gLQkJ CXNpemVvZihzdHJ1Y3QgcGJsa19zZWNfbWV0YSkpOwo+IC19Cj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvbGlnaHRudm0vcGJsay1nYy5jIGIvZHJpdmVycy9saWdodG52bS9wYmxrLWdjLmMKPiBkZWxl dGVkIGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCBiMzE2NThiZTM1YTcuLjAwMDAwMDAwMDAwMAo+ IC0tLSBhL2RyaXZlcnMvbGlnaHRudm0vcGJsay1nYy5jCj4gKysrIC9kZXYvbnVsbAo+IEBAIC0x LDcyNiArMCwwIEBACj4gLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCj4gLS8q Cj4gLSAqIENvcHlyaWdodCAoQykgMjAxNiBDTkVYIExhYnMKPiAtICogSW5pdGlhbCByZWxlYXNl OiBKYXZpZXIgR29uemFsZXogPGphdmllckBjbmV4bGFicy5jb20+Cj4gLSAqICAgICAgICAgICAg ICAgICAgTWF0aWFzIEJqb3JsaW5nIDxtYXRpYXNAY25leGxhYnMuY29tPgo+IC0gKgo+IC0gKiBU aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yCj4gLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIHZlcnNpb24KPiAtICogMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbi4KPiAtICoKPiAtICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVk IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAo+IC0gKiBXSVRIT1VUIEFO WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4gLSAqIE1F UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0 aGUgR05VCj4gLSAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPiAt ICoKPiAtICogcGJsay1nYy5jIC0gcGJsaydzIGdhcmJhZ2UgY29sbGVjdG9yCj4gLSAqLwo+IC0K PiAtI2luY2x1ZGUgInBibGsuaCIKPiAtI2luY2x1ZGUgInBibGstdHJhY2UuaCIKPiAtI2luY2x1 ZGUgPGxpbnV4L2RlbGF5Lmg+Cj4gLQo+IC0KPiAtc3RhdGljIHZvaWQgcGJsa19nY19mcmVlX2dj X3JxKHN0cnVjdCBwYmxrX2djX3JxICpnY19ycSkKPiAtewo+IC0JdmZyZWUoZ2NfcnEtPmRhdGEp Owo+IC0Ja2ZyZWUoZ2NfcnEpOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW50IHBibGtfZ2Nfd3JpdGUo c3RydWN0IHBibGsgKnBibGspCj4gLXsKPiAtCXN0cnVjdCBwYmxrX2djICpnYyA9ICZwYmxrLT5n YzsKPiAtCXN0cnVjdCBwYmxrX2djX3JxICpnY19ycSwgKnRnY19ycTsKPiAtCUxJU1RfSEVBRCh3 X2xpc3QpOwo+IC0KPiAtCXNwaW5fbG9jaygmZ2MtPndfbG9jayk7Cj4gLQlpZiAobGlzdF9lbXB0 eSgmZ2MtPndfbGlzdCkpIHsKPiAtCQlzcGluX3VubG9jaygmZ2MtPndfbG9jayk7Cj4gLQkJcmV0 dXJuIDE7Cj4gLQl9Cj4gLQo+IC0JbGlzdF9jdXRfcG9zaXRpb24oJndfbGlzdCwgJmdjLT53X2xp c3QsIGdjLT53X2xpc3QucHJldik7Cj4gLQlnYy0+d19lbnRyaWVzID0gMDsKPiAtCXNwaW5fdW5s b2NrKCZnYy0+d19sb2NrKTsKPiAtCj4gLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZ2NfcnEs IHRnY19ycSwgJndfbGlzdCwgbGlzdCkgewo+IC0JCXBibGtfd3JpdGVfZ2NfdG9fY2FjaGUocGJs aywgZ2NfcnEpOwo+IC0JCWxpc3RfZGVsKCZnY19ycS0+bGlzdCk7Cj4gLQkJa3JlZl9wdXQoJmdj X3JxLT5saW5lLT5yZWYsIHBibGtfbGluZV9wdXQpOwo+IC0JCXBibGtfZ2NfZnJlZV9nY19ycShn Y19ycSk7Cj4gLQl9Cj4gLQo+IC0JcmV0dXJuIDA7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIHBi bGtfZ2Nfd3JpdGVyX2tpY2soc3RydWN0IHBibGtfZ2MgKmdjKQo+IC17Cj4gLQl3YWtlX3VwX3By b2Nlc3MoZ2MtPmdjX3dyaXRlcl90cyk7Cj4gLX0KPiAtCj4gLXZvaWQgcGJsa19wdXRfbGluZV9i YWNrKHN0cnVjdCBwYmxrICpwYmxrLCBzdHJ1Y3QgcGJsa19saW5lICpsaW5lKQo+IC17Cj4gLQlz dHJ1Y3QgcGJsa19saW5lX21nbXQgKmxfbWcgPSAmcGJsay0+bF9tZzsKPiAtCXN0cnVjdCBsaXN0 X2hlYWQgKm1vdmVfbGlzdDsKPiAtCj4gLQlzcGluX2xvY2soJmxfbWctPmdjX2xvY2spOwo+IC0J c3Bpbl9sb2NrKCZsaW5lLT5sb2NrKTsKPiAtCVdBUk5fT04obGluZS0+c3RhdGUgIT0gUEJMS19M SU5FU1RBVEVfR0MpOwo+IC0JbGluZS0+c3RhdGUgPSBQQkxLX0xJTkVTVEFURV9DTE9TRUQ7Cj4g LQl0cmFjZV9wYmxrX2xpbmVfc3RhdGUocGJsa19kaXNrX25hbWUocGJsayksIGxpbmUtPmlkLAo+ IC0JCQkJCWxpbmUtPnN0YXRlKTsKPiAtCj4gLQkvKiBXZSBuZWVkIHRvIHJlc2V0IGdjX2dyb3Vw IGluIG9yZGVyIHRvIGVuc3VyZSB0aGF0Cj4gLQkgKiBwYmxrX2xpbmVfZ2NfbGlzdCB3aWxsIHJl dHVybiBwcm9wZXIgbW92ZV9saXN0Cj4gLQkgKiBzaW5jZSByaWdodCBub3cgY3VycmVudCBsaW5l IGlzIG5vdCBvbiBhbnkgb2YgdGhlCj4gLQkgKiBnYyBsaXN0cy4KPiAtCSAqLwo+IC0JbGluZS0+ Z2NfZ3JvdXAgPSBQQkxLX0xJTkVHQ19OT05FOwo+IC0JbW92ZV9saXN0ID0gcGJsa19saW5lX2dj X2xpc3QocGJsaywgbGluZSk7Cj4gLQlzcGluX3VubG9jaygmbGluZS0+bG9jayk7Cj4gLQlsaXN0 X2FkZF90YWlsKCZsaW5lLT5saXN0LCBtb3ZlX2xpc3QpOwo+IC0Jc3Bpbl91bmxvY2soJmxfbWct PmdjX2xvY2spOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBwYmxrX2djX2xpbmVfd3Moc3RydWN0 IHdvcmtfc3RydWN0ICp3b3JrKQo+IC17Cj4gLQlzdHJ1Y3QgcGJsa19saW5lX3dzICpnY19ycV93 cyA9IGNvbnRhaW5lcl9vZih3b3JrLAo+IC0JCQkJCQlzdHJ1Y3QgcGJsa19saW5lX3dzLCB3cyk7 Cj4gLQlzdHJ1Y3QgcGJsayAqcGJsayA9IGdjX3JxX3dzLT5wYmxrOwo+IC0Jc3RydWN0IHBibGtf Z2MgKmdjID0gJnBibGstPmdjOwo+IC0Jc3RydWN0IHBibGtfbGluZSAqbGluZSA9IGdjX3JxX3dz LT5saW5lOwo+IC0Jc3RydWN0IHBibGtfZ2NfcnEgKmdjX3JxID0gZ2NfcnFfd3MtPnByaXY7Cj4g LQlpbnQgcmV0Owo+IC0KPiAtCXVwKCZnYy0+Z2Nfc2VtKTsKPiAtCj4gLQkvKiBSZWFkIGZyb20g R0MgdmljdGltIGJsb2NrICovCj4gLQlyZXQgPSBwYmxrX3N1Ym1pdF9yZWFkX2djKHBibGssIGdj X3JxKTsKPiAtCWlmIChyZXQpIHsKPiAtCQlsaW5lLT53X2Vycl9nYy0+aGFzX2djX2VyciA9IDE7 Cj4gLQkJZ290byBvdXQ7Cj4gLQl9Cj4gLQo+IC0JaWYgKCFnY19ycS0+c2Vjc190b19nYykKPiAt CQlnb3RvIG91dDsKPiAtCj4gLXJldHJ5Ogo+IC0Jc3Bpbl9sb2NrKCZnYy0+d19sb2NrKTsKPiAt CWlmIChnYy0+d19lbnRyaWVzID49IFBCTEtfR0NfUlFfUUQpIHsKPiAtCQlzcGluX3VubG9jaygm Z2MtPndfbG9jayk7Cj4gLQkJcGJsa19nY193cml0ZXJfa2ljaygmcGJsay0+Z2MpOwo+IC0JCXVz bGVlcF9yYW5nZSgxMjgsIDI1Nik7Cj4gLQkJZ290byByZXRyeTsKPiAtCX0KPiAtCWdjLT53X2Vu dHJpZXMrKzsKPiAtCWxpc3RfYWRkX3RhaWwoJmdjX3JxLT5saXN0LCAmZ2MtPndfbGlzdCk7Cj4g LQlzcGluX3VubG9jaygmZ2MtPndfbG9jayk7Cj4gLQo+IC0JcGJsa19nY193cml0ZXJfa2ljaygm cGJsay0+Z2MpOwo+IC0KPiAtCWtmcmVlKGdjX3JxX3dzKTsKPiAtCXJldHVybjsKPiAtCj4gLW91 dDoKPiAtCXBibGtfZ2NfZnJlZV9nY19ycShnY19ycSk7Cj4gLQlrcmVmX3B1dCgmbGluZS0+cmVm LCBwYmxrX2xpbmVfcHV0KTsKPiAtCWtmcmVlKGdjX3JxX3dzKTsKPiAtfQo+IC0KPiAtc3RhdGlj IF9fbGU2NCAqZ2V0X2xiYV9saXN0X2Zyb21fZW1ldGEoc3RydWN0IHBibGsgKnBibGssCj4gLQkJ CQkgICAgICAgc3RydWN0IHBibGtfbGluZSAqbGluZSkKPiAtewo+IC0Jc3RydWN0IGxpbmVfZW1l dGEgKmVtZXRhX2J1ZjsKPiAtCXN0cnVjdCBwYmxrX2xpbmVfbWV0YSAqbG0gPSAmcGJsay0+bG07 Cj4gLQl1bnNpZ25lZCBpbnQgbGJhX2xpc3Rfc2l6ZSA9IGxtLT5lbWV0YV9sZW5bMl07Cj4gLQlf X2xlNjQgKmxiYV9saXN0Owo+IC0JaW50IHJldDsKPiAtCj4gLQllbWV0YV9idWYgPSBrdm1hbGxv YyhsbS0+ZW1ldGFfbGVuWzBdLCBHRlBfS0VSTkVMKTsKPiAtCWlmICghZW1ldGFfYnVmKQo+IC0J CXJldHVybiBOVUxMOwo+IC0KPiAtCXJldCA9IHBibGtfbGluZV9lbWV0YV9yZWFkKHBibGssIGxp bmUsIGVtZXRhX2J1Zik7Cj4gLQlpZiAocmV0KSB7Cj4gLQkJcGJsa19lcnIocGJsaywgImxpbmUg JWQgcmVhZCBlbWV0YSBmYWlsZWQgKCVkKVxuIiwKPiAtCQkJCWxpbmUtPmlkLCByZXQpOwo+IC0J CWt2ZnJlZShlbWV0YV9idWYpOwo+IC0JCXJldHVybiBOVUxMOwo+IC0JfQo+IC0KPiAtCS8qIElm IHRoaXMgcmVhZCBmYWlscywgaXQgbWVhbnMgdGhhdCBlbWV0YSBpcyBjb3JydXB0ZWQuCj4gLQkg KiBGb3Igbm93LCBsZWF2ZSB0aGUgbGluZSB1bnRvdWNoZWQuCj4gLQkgKiBUT0RPOiBJbXBsZW1l bnQgYSByZWNvdmVyeSByb3V0aW5lIHRoYXQgc2NhbnMgYW5kIG1vdmVzCj4gLQkgKiBhbGwgc2Vj dG9ycyBvbiB0aGUgbGluZS4KPiAtCSAqLwo+IC0KPiAtCXJldCA9IHBibGtfcmVjb3ZfY2hlY2tf ZW1ldGEocGJsaywgZW1ldGFfYnVmKTsKPiAtCWlmIChyZXQpIHsKPiAtCQlwYmxrX2VycihwYmxr LCAiaW5jb25zaXN0ZW50IGVtZXRhIChsaW5lICVkKVxuIiwKPiAtCQkJCWxpbmUtPmlkKTsKPiAt CQlrdmZyZWUoZW1ldGFfYnVmKTsKPiAtCQlyZXR1cm4gTlVMTDsKPiAtCX0KPiAtCj4gLQlsYmFf bGlzdCA9IGt2bWFsbG9jKGxiYV9saXN0X3NpemUsIEdGUF9LRVJORUwpOwo+IC0KPiAtCWlmIChs YmFfbGlzdCkKPiAtCQltZW1jcHkobGJhX2xpc3QsIGVtZXRhX3RvX2xiYXMocGJsaywgZW1ldGFf YnVmKSwgbGJhX2xpc3Rfc2l6ZSk7Cj4gLQo+IC0Ja3ZmcmVlKGVtZXRhX2J1Zik7Cj4gLQo+IC0J cmV0dXJuIGxiYV9saXN0Owo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBwYmxrX2djX2xpbmVfcHJl cGFyZV93cyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCj4gLXsKPiAtCXN0cnVjdCBwYmxrX2xp bmVfd3MgKmxpbmVfd3MgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHBibGtfbGluZV93cywK PiAtCQkJCQkJCQkJd3MpOwo+IC0Jc3RydWN0IHBibGsgKnBibGsgPSBsaW5lX3dzLT5wYmxrOwo+ IC0Jc3RydWN0IHBibGtfbGluZSAqbGluZSA9IGxpbmVfd3MtPmxpbmU7Cj4gLQlzdHJ1Y3QgcGJs a19saW5lX21ldGEgKmxtID0gJnBibGstPmxtOwo+IC0Jc3RydWN0IG52bV90Z3RfZGV2ICpkZXYg PSBwYmxrLT5kZXY7Cj4gLQlzdHJ1Y3QgbnZtX2dlbyAqZ2VvID0gJmRldi0+Z2VvOwo+IC0Jc3Ry dWN0IHBibGtfZ2MgKmdjID0gJnBibGstPmdjOwo+IC0Jc3RydWN0IHBibGtfbGluZV93cyAqZ2Nf cnFfd3M7Cj4gLQlzdHJ1Y3QgcGJsa19nY19ycSAqZ2NfcnE7Cj4gLQlfX2xlNjQgKmxiYV9saXN0 Owo+IC0JdW5zaWduZWQgbG9uZyAqaW52YWxpZF9iaXRtYXA7Cj4gLQlpbnQgc2VjX2xlZnQsIG5y X3NlY3MsIGJpdDsKPiAtCj4gLQlpbnZhbGlkX2JpdG1hcCA9IGttYWxsb2MobG0tPnNlY19iaXRt YXBfbGVuLCBHRlBfS0VSTkVMKTsKPiAtCWlmICghaW52YWxpZF9iaXRtYXApCj4gLQkJZ290byBm YWlsX2ZyZWVfd3M7Cj4gLQo+IC0JaWYgKGxpbmUtPndfZXJyX2djLT5oYXNfd3JpdGVfZXJyKSB7 Cj4gLQkJbGJhX2xpc3QgPSBsaW5lLT53X2Vycl9nYy0+bGJhX2xpc3Q7Cj4gLQkJbGluZS0+d19l cnJfZ2MtPmxiYV9saXN0ID0gTlVMTDsKPiAtCX0gZWxzZSB7Cj4gLQkJbGJhX2xpc3QgPSBnZXRf bGJhX2xpc3RfZnJvbV9lbWV0YShwYmxrLCBsaW5lKTsKPiAtCQlpZiAoIWxiYV9saXN0KSB7Cj4g LQkJCXBibGtfZXJyKHBibGssICJjb3VsZCBub3QgaW50ZXJwcmV0IGVtZXRhIChsaW5lICVkKVxu IiwKPiAtCQkJCQlsaW5lLT5pZCk7Cj4gLQkJCWdvdG8gZmFpbF9mcmVlX2ludmFsaWRfYml0bWFw Owo+IC0JCX0KPiAtCX0KPiAtCj4gLQlzcGluX2xvY2soJmxpbmUtPmxvY2spOwo+IC0JYml0bWFw X2NvcHkoaW52YWxpZF9iaXRtYXAsIGxpbmUtPmludmFsaWRfYml0bWFwLCBsbS0+c2VjX3Blcl9s aW5lKTsKPiAtCXNlY19sZWZ0ID0gcGJsa19saW5lX3ZzYyhsaW5lKTsKPiAtCXNwaW5fdW5sb2Nr KCZsaW5lLT5sb2NrKTsKPiAtCj4gLQlpZiAoc2VjX2xlZnQgPCAwKSB7Cj4gLQkJcGJsa19lcnIo cGJsaywgImNvcnJ1cHRlZCBHQyBsaW5lICglZClcbiIsIGxpbmUtPmlkKTsKPiAtCQlnb3RvIGZh aWxfZnJlZV9sYmFfbGlzdDsKPiAtCX0KPiAtCj4gLQliaXQgPSAtMTsKPiAtbmV4dF9ycToKPiAt CWdjX3JxID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHBibGtfZ2NfcnEpLCBHRlBfS0VSTkVMKTsK PiAtCWlmICghZ2NfcnEpCj4gLQkJZ290byBmYWlsX2ZyZWVfbGJhX2xpc3Q7Cj4gLQo+IC0JbnJf c2VjcyA9IDA7Cj4gLQlkbyB7Cj4gLQkJYml0ID0gZmluZF9uZXh0X3plcm9fYml0KGludmFsaWRf Yml0bWFwLCBsbS0+c2VjX3Blcl9saW5lLAo+IC0JCQkJCQkJCWJpdCArIDEpOwo+IC0JCWlmIChi aXQgPiBsaW5lLT5lbWV0YV9zc2VjKQo+IC0JCQlicmVhazsKPiAtCj4gLQkJZ2NfcnEtPnBhZGRy X2xpc3RbbnJfc2Vjc10gPSBiaXQ7Cj4gLQkJZ2NfcnEtPmxiYV9saXN0W25yX3NlY3MrK10gPSBs ZTY0X3RvX2NwdShsYmFfbGlzdFtiaXRdKTsKPiAtCX0gd2hpbGUgKG5yX3NlY3MgPCBwYmxrLT5t YXhfd3JpdGVfcGdzKTsKPiAtCj4gLQlpZiAodW5saWtlbHkoIW5yX3NlY3MpKSB7Cj4gLQkJa2Zy ZWUoZ2NfcnEpOwo+IC0JCWdvdG8gb3V0Owo+IC0JfQo+IC0KPiAtCWdjX3JxLT5ucl9zZWNzID0g bnJfc2VjczsKPiAtCWdjX3JxLT5saW5lID0gbGluZTsKPiAtCj4gLQlnY19ycS0+ZGF0YSA9IHZt YWxsb2MoYXJyYXlfc2l6ZShnY19ycS0+bnJfc2VjcywgZ2VvLT5jc2VjcykpOwo+IC0JaWYgKCFn Y19ycS0+ZGF0YSkKPiAtCQlnb3RvIGZhaWxfZnJlZV9nY19ycTsKPiAtCj4gLQlnY19ycV93cyA9 IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwYmxrX2xpbmVfd3MpLCBHRlBfS0VSTkVMKTsKPiAtCWlm ICghZ2NfcnFfd3MpCj4gLQkJZ290byBmYWlsX2ZyZWVfZ2NfZGF0YTsKPiAtCj4gLQlnY19ycV93 cy0+cGJsayA9IHBibGs7Cj4gLQlnY19ycV93cy0+bGluZSA9IGxpbmU7Cj4gLQlnY19ycV93cy0+ cHJpdiA9IGdjX3JxOwo+IC0KPiAtCS8qIFRoZSB3cml0ZSBHQyBwYXRoIGNhbiBiZSBtdWNoIHNs b3dlciB0aGFuIHRoZSByZWFkIEdDIG9uZSBkdWUgdG8KPiAtCSAqIHRoZSBidWRnZXQgaW1wb3Nl ZCBieSB0aGUgcmF0ZS1saW1pdGVyLiBCYWxhbmNlIGluIGNhc2UgdGhhdCB3ZSBnZXQKPiAtCSAq IGJhY2sgcHJlc3N1cmUgZnJvbSB0aGUgd3JpdGUgR0MgcGF0aC4KPiAtCSAqLwo+IC0Jd2hpbGUg KGRvd25fdGltZW91dCgmZ2MtPmdjX3NlbSwgbXNlY3NfdG9famlmZmllcygzMDAwMCkpKQo+IC0J CWlvX3NjaGVkdWxlKCk7Cj4gLQo+IC0Ja3JlZl9nZXQoJmxpbmUtPnJlZik7Cj4gLQo+IC0JSU5J VF9XT1JLKCZnY19ycV93cy0+d3MsIHBibGtfZ2NfbGluZV93cyk7Cj4gLQlxdWV1ZV93b3JrKGdj LT5nY19saW5lX3JlYWRlcl93cSwgJmdjX3JxX3dzLT53cyk7Cj4gLQo+IC0Jc2VjX2xlZnQgLT0g bnJfc2VjczsKPiAtCWlmIChzZWNfbGVmdCA+IDApCj4gLQkJZ290byBuZXh0X3JxOwo+IC0KPiAt b3V0Ogo+IC0Ja3ZmcmVlKGxiYV9saXN0KTsKPiAtCWtmcmVlKGxpbmVfd3MpOwo+IC0Ja2ZyZWUo aW52YWxpZF9iaXRtYXApOwo+IC0KPiAtCWtyZWZfcHV0KCZsaW5lLT5yZWYsIHBibGtfbGluZV9w dXQpOwo+IC0JYXRvbWljX2RlYygmZ2MtPnJlYWRfaW5mbGlnaHRfZ2MpOwo+IC0KPiAtCXJldHVy bjsKPiAtCj4gLWZhaWxfZnJlZV9nY19kYXRhOgo+IC0JdmZyZWUoZ2NfcnEtPmRhdGEpOwo+IC1m YWlsX2ZyZWVfZ2NfcnE6Cj4gLQlrZnJlZShnY19ycSk7Cj4gLWZhaWxfZnJlZV9sYmFfbGlzdDoK PiAtCWt2ZnJlZShsYmFfbGlzdCk7Cj4gLWZhaWxfZnJlZV9pbnZhbGlkX2JpdG1hcDoKPiAtCWtm cmVlKGludmFsaWRfYml0bWFwKTsKPiAtZmFpbF9mcmVlX3dzOgo+IC0Ja2ZyZWUobGluZV93cyk7 Cj4gLQo+IC0JLyogTGluZSBnb2VzIGJhY2sgdG8gY2xvc2VkIHN0YXRlLCBzbyB3ZSBjYW5ub3Qg cmVsZWFzZSBhZGRpdGlvbmFsCj4gLQkgKiByZWZlcmVuY2UgZm9yIGxpbmUsIHNpbmNlIHdlIGRv IHRoYXQgb25seSB3aGVuIHdlIHdhbnQgdG8gZG8KPiAtCSAqIGdjIHRvIGZyZWUgbGluZSBzdGF0 ZSB0cmFuc2l0aW9uLgo+IC0JICovCj4gLQlwYmxrX3B1dF9saW5lX2JhY2socGJsaywgbGluZSk7 Cj4gLQlhdG9taWNfZGVjKCZnYy0+cmVhZF9pbmZsaWdodF9nYyk7Cj4gLQo+IC0JcGJsa19lcnIo cGJsaywgImZhaWxlZCB0byBHQyBsaW5lICVkXG4iLCBsaW5lLT5pZCk7Cj4gLX0KPiAtCj4gLXN0 YXRpYyBpbnQgcGJsa19nY19saW5lKHN0cnVjdCBwYmxrICpwYmxrLCBzdHJ1Y3QgcGJsa19saW5l ICpsaW5lKQo+IC17Cj4gLQlzdHJ1Y3QgcGJsa19nYyAqZ2MgPSAmcGJsay0+Z2M7Cj4gLQlzdHJ1 Y3QgcGJsa19saW5lX3dzICpsaW5lX3dzOwo+IC0KPiAtCXBibGtfZGVidWcocGJsaywgImxpbmUg JyVkJyBiZWluZyByZWNsYWltZWQgZm9yIEdDXG4iLCBsaW5lLT5pZCk7Cj4gLQo+IC0JbGluZV93 cyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwYmxrX2xpbmVfd3MpLCBHRlBfS0VSTkVMKTsKPiAt CWlmICghbGluZV93cykKPiAtCQlyZXR1cm4gLUVOT01FTTsKPiAtCj4gLQlsaW5lX3dzLT5wYmxr ID0gcGJsazsKPiAtCWxpbmVfd3MtPmxpbmUgPSBsaW5lOwo+IC0KPiAtCWF0b21pY19pbmMoJmdj LT5waXBlbGluZV9nYyk7Cj4gLQlJTklUX1dPUksoJmxpbmVfd3MtPndzLCBwYmxrX2djX2xpbmVf cHJlcGFyZV93cyk7Cj4gLQlxdWV1ZV93b3JrKGdjLT5nY19yZWFkZXJfd3EsICZsaW5lX3dzLT53 cyk7Cj4gLQo+IC0JcmV0dXJuIDA7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIHBibGtfZ2NfcmVh ZGVyX2tpY2soc3RydWN0IHBibGtfZ2MgKmdjKQo+IC17Cj4gLQl3YWtlX3VwX3Byb2Nlc3MoZ2Mt PmdjX3JlYWRlcl90cyk7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIHBibGtfZ2Nfa2ljayhzdHJ1 Y3QgcGJsayAqcGJsaykKPiAtewo+IC0Jc3RydWN0IHBibGtfZ2MgKmdjID0gJnBibGstPmdjOwo+ IC0KPiAtCXBibGtfZ2Nfd3JpdGVyX2tpY2soZ2MpOwo+IC0JcGJsa19nY19yZWFkZXJfa2ljayhn Yyk7Cj4gLQo+IC0JLyogSWYgd2UncmUgc2h1dHRpbmcgZG93biBHQywgbGV0J3Mgbm90IHN0YXJ0 IGl0IHVwIGFnYWluICovCj4gLQlpZiAoZ2MtPmdjX2VuYWJsZWQpIHsKPiAtCQl3YWtlX3VwX3By b2Nlc3MoZ2MtPmdjX3RzKTsKPiAtCQltb2RfdGltZXIoJmdjLT5nY190aW1lciwKPiAtCQkJICBq aWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhHQ19USU1FX01TRUNTKSk7Cj4gLQl9Cj4gLX0KPiAt Cj4gLXN0YXRpYyBpbnQgcGJsa19nY19yZWFkKHN0cnVjdCBwYmxrICpwYmxrKQo+IC17Cj4gLQlz dHJ1Y3QgcGJsa19nYyAqZ2MgPSAmcGJsay0+Z2M7Cj4gLQlzdHJ1Y3QgcGJsa19saW5lICpsaW5l Owo+IC0KPiAtCXNwaW5fbG9jaygmZ2MtPnJfbG9jayk7Cj4gLQlpZiAobGlzdF9lbXB0eSgmZ2Mt PnJfbGlzdCkpIHsKPiAtCQlzcGluX3VubG9jaygmZ2MtPnJfbG9jayk7Cj4gLQkJcmV0dXJuIDE7 Cj4gLQl9Cj4gLQo+IC0JbGluZSA9IGxpc3RfZmlyc3RfZW50cnkoJmdjLT5yX2xpc3QsIHN0cnVj dCBwYmxrX2xpbmUsIGxpc3QpOwo+IC0JbGlzdF9kZWwoJmxpbmUtPmxpc3QpOwo+IC0Jc3Bpbl91 bmxvY2soJmdjLT5yX2xvY2spOwo+IC0KPiAtCXBibGtfZ2Nfa2ljayhwYmxrKTsKPiAtCj4gLQlp ZiAocGJsa19nY19saW5lKHBibGssIGxpbmUpKSB7Cj4gLQkJcGJsa19lcnIocGJsaywgImZhaWxl ZCB0byBHQyBsaW5lICVkXG4iLCBsaW5lLT5pZCk7Cj4gLQkJLyogcm9sbGJhY2sgKi8KPiAtCQlz cGluX2xvY2soJmdjLT5yX2xvY2spOwo+IC0JCWxpc3RfYWRkX3RhaWwoJmxpbmUtPmxpc3QsICZn Yy0+cl9saXN0KTsKPiAtCQlzcGluX3VubG9jaygmZ2MtPnJfbG9jayk7Cj4gLQl9Cj4gLQo+IC0J cmV0dXJuIDA7Cj4gLX0KPiAtCj4gLXN0YXRpYyBzdHJ1Y3QgcGJsa19saW5lICpwYmxrX2djX2dl dF92aWN0aW1fbGluZShzdHJ1Y3QgcGJsayAqcGJsaywKPiAtCQkJCQkJIHN0cnVjdCBsaXN0X2hl YWQgKmdyb3VwX2xpc3QpCj4gLXsKPiAtCXN0cnVjdCBwYmxrX2xpbmUgKmxpbmUsICp2aWN0aW07 Cj4gLQl1bnNpZ25lZCBpbnQgbGluZV92c2MgPSB+MHgwTCwgdmljdGltX3ZzYyA9IH4weDBMOwo+ IC0KPiAtCXZpY3RpbSA9IGxpc3RfZmlyc3RfZW50cnkoZ3JvdXBfbGlzdCwgc3RydWN0IHBibGtf bGluZSwgbGlzdCk7Cj4gLQo+IC0JbGlzdF9mb3JfZWFjaF9lbnRyeShsaW5lLCBncm91cF9saXN0 LCBsaXN0KSB7Cj4gLQkJaWYgKCFhdG9taWNfcmVhZCgmbGluZS0+c2VjX3RvX3VwZGF0ZSkpCj4g LQkJCWxpbmVfdnNjID0gbGUzMl90b19jcHUoKmxpbmUtPnZzYyk7Cj4gLQkJaWYgKGxpbmVfdnNj IDwgdmljdGltX3ZzYykgewo+IC0JCQl2aWN0aW0gPSBsaW5lOwo+IC0JCQl2aWN0aW1fdnNjID0g bGUzMl90b19jcHUoKnZpY3RpbS0+dnNjKTsKPiAtCQl9Cj4gLQl9Cj4gLQo+IC0JaWYgKHZpY3Rp bV92c2MgPT0gfjB4MCkKPiAtCQlyZXR1cm4gTlVMTDsKPiAtCj4gLQlyZXR1cm4gdmljdGltOwo+ IC19Cj4gLQo+IC1zdGF0aWMgYm9vbCBwYmxrX2djX3Nob3VsZF9ydW4oc3RydWN0IHBibGtfZ2Mg KmdjLCBzdHJ1Y3QgcGJsa19ybCAqcmwpCj4gLXsKPiAtCXVuc2lnbmVkIGludCBucl9ibG9ja3Nf ZnJlZSwgbnJfYmxvY2tzX25lZWQ7Cj4gLQl1bnNpZ25lZCBpbnQgd2Vycl9saW5lcyA9IGF0b21p Y19yZWFkKCZybC0+d2Vycl9saW5lcyk7Cj4gLQo+IC0JbnJfYmxvY2tzX25lZWQgPSBwYmxrX3Js X2hpZ2hfdGhycyhybCk7Cj4gLQlucl9ibG9ja3NfZnJlZSA9IHBibGtfcmxfbnJfZnJlZV9ibGtz KHJsKTsKPiAtCj4gLQkvKiBUaGlzIGlzIG5vdCBjcml0aWNhbCwgbm8gbmVlZCB0byB0YWtlIGxv Y2sgaGVyZSAqLwo+IC0JcmV0dXJuICgod2Vycl9saW5lcyA+IDApIHx8Cj4gLQkJKChnYy0+Z2Nf YWN0aXZlKSAmJiAobnJfYmxvY2tzX25lZWQgPiBucl9ibG9ja3NfZnJlZSkpKTsKPiAtfQo+IC0K PiAtdm9pZCBwYmxrX2djX2ZyZWVfZnVsbF9saW5lcyhzdHJ1Y3QgcGJsayAqcGJsaykKPiAtewo+ IC0Jc3RydWN0IHBibGtfbGluZV9tZ210ICpsX21nID0gJnBibGstPmxfbWc7Cj4gLQlzdHJ1Y3Qg cGJsa19nYyAqZ2MgPSAmcGJsay0+Z2M7Cj4gLQlzdHJ1Y3QgcGJsa19saW5lICpsaW5lOwo+IC0K PiAtCWRvIHsKPiAtCQlzcGluX2xvY2soJmxfbWctPmdjX2xvY2spOwo+IC0JCWlmIChsaXN0X2Vt cHR5KCZsX21nLT5nY19mdWxsX2xpc3QpKSB7Cj4gLQkJCXNwaW5fdW5sb2NrKCZsX21nLT5nY19s b2NrKTsKPiAtCQkJcmV0dXJuOwo+IC0JCX0KPiAtCj4gLQkJbGluZSA9IGxpc3RfZmlyc3RfZW50 cnkoJmxfbWctPmdjX2Z1bGxfbGlzdCwKPiAtCQkJCQkJCXN0cnVjdCBwYmxrX2xpbmUsIGxpc3Qp Owo+IC0KPiAtCQlzcGluX2xvY2soJmxpbmUtPmxvY2spOwo+IC0JCVdBUk5fT04obGluZS0+c3Rh dGUgIT0gUEJMS19MSU5FU1RBVEVfQ0xPU0VEKTsKPiAtCQlsaW5lLT5zdGF0ZSA9IFBCTEtfTElO RVNUQVRFX0dDOwo+IC0JCXRyYWNlX3BibGtfbGluZV9zdGF0ZShwYmxrX2Rpc2tfbmFtZShwYmxr KSwgbGluZS0+aWQsCj4gLQkJCQkJbGluZS0+c3RhdGUpOwo+IC0JCXNwaW5fdW5sb2NrKCZsaW5l LT5sb2NrKTsKPiAtCj4gLQkJbGlzdF9kZWwoJmxpbmUtPmxpc3QpOwo+IC0JCXNwaW5fdW5sb2Nr KCZsX21nLT5nY19sb2NrKTsKPiAtCj4gLQkJYXRvbWljX2luYygmZ2MtPnBpcGVsaW5lX2djKTsK PiAtCQlrcmVmX3B1dCgmbGluZS0+cmVmLCBwYmxrX2xpbmVfcHV0KTsKPiAtCX0gd2hpbGUgKDEp Owo+IC19Cj4gLQo+IC0vKgo+IC0gKiBMaW5lcyB3aXRoIG5vIHZhbGlkIHNlY3RvcnMgd2lsbCBi ZSByZXR1cm5lZCB0byB0aGUgZnJlZSBsaXN0IGltbWVkaWF0ZWx5LiBJZgo+IC0gKiBHQyBpcyBh Y3RpdmF0ZWQgLSBlaXRoZXIgYmVjYXVzZSB0aGUgZnJlZSBibG9jayBjb3VudCBpcyB1bmRlciB0 aGUgZGV0ZXJtaW5lZAo+IC0gKiB0aHJlc2hvbGQsIG9yIGJlY2F1c2UgaXQgaXMgYmVpbmcgZm9y Y2VkIGZyb20gdXNlciBzcGFjZSAtIG9ubHkgbGluZXMgd2l0aCBhCj4gLSAqIGhpZ2ggY291bnQg b2YgaW52YWxpZCBzZWN0b3JzIHdpbGwgYmUgcmVjeWNsZWQuCj4gLSAqLwo+IC1zdGF0aWMgdm9p ZCBwYmxrX2djX3J1bihzdHJ1Y3QgcGJsayAqcGJsaykKPiAtewo+IC0Jc3RydWN0IHBibGtfbGlu ZV9tZ210ICpsX21nID0gJnBibGstPmxfbWc7Cj4gLQlzdHJ1Y3QgcGJsa19nYyAqZ2MgPSAmcGJs ay0+Z2M7Cj4gLQlzdHJ1Y3QgcGJsa19saW5lICpsaW5lOwo+IC0Jc3RydWN0IGxpc3RfaGVhZCAq Z3JvdXBfbGlzdDsKPiAtCWJvb2wgcnVuX2djOwo+IC0JaW50IHJlYWRfaW5mbGlnaHRfZ2MsIGdj X2dyb3VwID0gMCwgcHJldl9ncm91cCA9IDA7Cj4gLQo+IC0JcGJsa19nY19mcmVlX2Z1bGxfbGlu ZXMocGJsayk7Cj4gLQo+IC0JcnVuX2djID0gcGJsa19nY19zaG91bGRfcnVuKCZwYmxrLT5nYywg JnBibGstPnJsKTsKPiAtCWlmICghcnVuX2djIHx8IChhdG9taWNfcmVhZCgmZ2MtPnJlYWRfaW5m bGlnaHRfZ2MpID49IFBCTEtfR0NfTF9RRCkpCj4gLQkJcmV0dXJuOwo+IC0KPiAtbmV4dF9nY19n cm91cDoKPiAtCWdyb3VwX2xpc3QgPSBsX21nLT5nY19saXN0c1tnY19ncm91cCsrXTsKPiAtCj4g LQlkbyB7Cj4gLQkJc3Bpbl9sb2NrKCZsX21nLT5nY19sb2NrKTsKPiAtCj4gLQkJbGluZSA9IHBi bGtfZ2NfZ2V0X3ZpY3RpbV9saW5lKHBibGssIGdyb3VwX2xpc3QpOwo+IC0JCWlmICghbGluZSkg ewo+IC0JCQlzcGluX3VubG9jaygmbF9tZy0+Z2NfbG9jayk7Cj4gLQkJCWJyZWFrOwo+IC0JCX0K PiAtCj4gLQkJc3Bpbl9sb2NrKCZsaW5lLT5sb2NrKTsKPiAtCQlXQVJOX09OKGxpbmUtPnN0YXRl ICE9IFBCTEtfTElORVNUQVRFX0NMT1NFRCk7Cj4gLQkJbGluZS0+c3RhdGUgPSBQQkxLX0xJTkVT VEFURV9HQzsKPiAtCQl0cmFjZV9wYmxrX2xpbmVfc3RhdGUocGJsa19kaXNrX25hbWUocGJsayks IGxpbmUtPmlkLAo+IC0JCQkJCWxpbmUtPnN0YXRlKTsKPiAtCQlzcGluX3VubG9jaygmbGluZS0+ bG9jayk7Cj4gLQo+IC0JCWxpc3RfZGVsKCZsaW5lLT5saXN0KTsKPiAtCQlzcGluX3VubG9jaygm bF9tZy0+Z2NfbG9jayk7Cj4gLQo+IC0JCXNwaW5fbG9jaygmZ2MtPnJfbG9jayk7Cj4gLQkJbGlz dF9hZGRfdGFpbCgmbGluZS0+bGlzdCwgJmdjLT5yX2xpc3QpOwo+IC0JCXNwaW5fdW5sb2NrKCZn Yy0+cl9sb2NrKTsKPiAtCj4gLQkJcmVhZF9pbmZsaWdodF9nYyA9IGF0b21pY19pbmNfcmV0dXJu KCZnYy0+cmVhZF9pbmZsaWdodF9nYyk7Cj4gLQkJcGJsa19nY19yZWFkZXJfa2ljayhnYyk7Cj4g LQo+IC0JCXByZXZfZ3JvdXAgPSAxOwo+IC0KPiAtCQkvKiBObyBuZWVkIHRvIHF1ZXVlIHVwIG1v cmUgR0MgbGluZXMgdGhhbiB3ZSBjYW4gaGFuZGxlICovCj4gLQkJcnVuX2djID0gcGJsa19nY19z aG91bGRfcnVuKCZwYmxrLT5nYywgJnBibGstPnJsKTsKPiAtCQlpZiAoIXJ1bl9nYyB8fCByZWFk X2luZmxpZ2h0X2djID49IFBCTEtfR0NfTF9RRCkKPiAtCQkJYnJlYWs7Cj4gLQl9IHdoaWxlICgx KTsKPiAtCj4gLQlpZiAoIXByZXZfZ3JvdXAgJiYgcGJsay0+cmwucmJfc3RhdGUgPiBnY19ncm91 cCAmJgo+IC0JCQkJCQlnY19ncm91cCA8IFBCTEtfR0NfTlJfTElTVFMpCj4gLQkJZ290byBuZXh0 X2djX2dyb3VwOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBwYmxrX2djX3RpbWVyKHN0cnVjdCB0 aW1lcl9saXN0ICp0KQo+IC17Cj4gLQlzdHJ1Y3QgcGJsayAqcGJsayA9IGZyb21fdGltZXIocGJs aywgdCwgZ2MuZ2NfdGltZXIpOwo+IC0KPiAtCXBibGtfZ2Nfa2ljayhwYmxrKTsKPiAtfQo+IC0K PiAtc3RhdGljIGludCBwYmxrX2djX3RzKHZvaWQgKmRhdGEpCj4gLXsKPiAtCXN0cnVjdCBwYmxr ICpwYmxrID0gZGF0YTsKPiAtCj4gLQl3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgewo+ IC0JCXBibGtfZ2NfcnVuKHBibGspOwo+IC0JCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJS VVBUSUJMRSk7Cj4gLQkJaW9fc2NoZWR1bGUoKTsKPiAtCX0KPiAtCj4gLQlyZXR1cm4gMDsKPiAt fQo+IC0KPiAtc3RhdGljIGludCBwYmxrX2djX3dyaXRlcl90cyh2b2lkICpkYXRhKQo+IC17Cj4g LQlzdHJ1Y3QgcGJsayAqcGJsayA9IGRhdGE7Cj4gLQo+IC0Jd2hpbGUgKCFrdGhyZWFkX3Nob3Vs ZF9zdG9wKCkpIHsKPiAtCQlpZiAoIXBibGtfZ2Nfd3JpdGUocGJsaykpCj4gLQkJCWNvbnRpbnVl Owo+IC0JCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Cj4gLQkJaW9fc2No ZWR1bGUoKTsKPiAtCX0KPiAtCj4gLQlyZXR1cm4gMDsKPiAtfQo+IC0KPiAtc3RhdGljIGludCBw YmxrX2djX3JlYWRlcl90cyh2b2lkICpkYXRhKQo+IC17Cj4gLQlzdHJ1Y3QgcGJsayAqcGJsayA9 IGRhdGE7Cj4gLQlzdHJ1Y3QgcGJsa19nYyAqZ2MgPSAmcGJsay0+Z2M7Cj4gLQo+IC0Jd2hpbGUg KCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKPiAtCQlpZiAoIXBibGtfZ2NfcmVhZChwYmxrKSkK PiAtCQkJY29udGludWU7Cj4gLQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxF KTsKPiAtCQlpb19zY2hlZHVsZSgpOwo+IC0JfQo+IC0KPiAtI2lmZGVmIENPTkZJR19OVk1fUEJM S19ERUJVRwo+IC0JcGJsa19pbmZvKHBibGssICJmbHVzaGluZyBnYyBwaXBlbGluZSwgJWQgbGlu ZXMgbGVmdFxuIiwKPiAtCQlhdG9taWNfcmVhZCgmZ2MtPnBpcGVsaW5lX2djKSk7Cj4gLSNlbmRp Zgo+IC0KPiAtCWRvIHsKPiAtCQlpZiAoIWF0b21pY19yZWFkKCZnYy0+cGlwZWxpbmVfZ2MpKQo+ IC0JCQlicmVhazsKPiAtCj4gLQkJc2NoZWR1bGUoKTsKPiAtCX0gd2hpbGUgKDEpOwo+IC0KPiAt CXJldHVybiAwOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBwYmxrX2djX3N0YXJ0KHN0cnVjdCBw YmxrICpwYmxrKQo+IC17Cj4gLQlwYmxrLT5nYy5nY19hY3RpdmUgPSAxOwo+IC0JcGJsa19kZWJ1 ZyhwYmxrLCAiZ2Mgc3RhcnRcbiIpOwo+IC19Cj4gLQo+IC12b2lkIHBibGtfZ2Nfc2hvdWxkX3N0 YXJ0KHN0cnVjdCBwYmxrICpwYmxrKQo+IC17Cj4gLQlzdHJ1Y3QgcGJsa19nYyAqZ2MgPSAmcGJs ay0+Z2M7Cj4gLQo+IC0JaWYgKGdjLT5nY19lbmFibGVkICYmICFnYy0+Z2NfYWN0aXZlKSB7Cj4g LQkJcGJsa19nY19zdGFydChwYmxrKTsKPiAtCQlwYmxrX2djX2tpY2socGJsayk7Cj4gLQl9Cj4g LX0KPiAtCj4gLXZvaWQgcGJsa19nY19zaG91bGRfc3RvcChzdHJ1Y3QgcGJsayAqcGJsaykKPiAt ewo+IC0Jc3RydWN0IHBibGtfZ2MgKmdjID0gJnBibGstPmdjOwo+IC0KPiAtCWlmIChnYy0+Z2Nf YWN0aXZlICYmICFnYy0+Z2NfZm9yY2VkKQo+IC0JCWdjLT5nY19hY3RpdmUgPSAwOwo+IC19Cj4g LQo+IC12b2lkIHBibGtfZ2Nfc2hvdWxkX2tpY2soc3RydWN0IHBibGsgKnBibGspCj4gLXsKPiAt CXBibGtfcmxfdXBkYXRlX3JhdGVzKCZwYmxrLT5ybCk7Cj4gLX0KPiAtCj4gLXZvaWQgcGJsa19n Y19zeXNmc19zdGF0ZV9zaG93KHN0cnVjdCBwYmxrICpwYmxrLCBpbnQgKmdjX2VuYWJsZWQsCj4g LQkJCSAgICAgIGludCAqZ2NfYWN0aXZlKQo+IC17Cj4gLQlzdHJ1Y3QgcGJsa19nYyAqZ2MgPSAm cGJsay0+Z2M7Cj4gLQo+IC0Jc3Bpbl9sb2NrKCZnYy0+bG9jayk7Cj4gLQkqZ2NfZW5hYmxlZCA9 IGdjLT5nY19lbmFibGVkOwo+IC0JKmdjX2FjdGl2ZSA9IGdjLT5nY19hY3RpdmU7Cj4gLQlzcGlu X3VubG9jaygmZ2MtPmxvY2spOwo+IC19Cj4gLQo+IC1pbnQgcGJsa19nY19zeXNmc19mb3JjZShz dHJ1Y3QgcGJsayAqcGJsaywgaW50IGZvcmNlKQo+IC17Cj4gLQlzdHJ1Y3QgcGJsa19nYyAqZ2Mg PSAmcGJsay0+Z2M7Cj4gLQo+IC0JaWYgKGZvcmNlIDwgMCB8fCBmb3JjZSA+IDEpCj4gLQkJcmV0 dXJuIC1FSU5WQUw7Cj4gLQo+IC0Jc3Bpbl9sb2NrKCZnYy0+bG9jayk7Cj4gLQlnYy0+Z2NfZm9y Y2VkID0gZm9yY2U7Cj4gLQo+IC0JaWYgKGZvcmNlKQo+IC0JCWdjLT5nY19lbmFibGVkID0gMTsK PiAtCWVsc2UKPiAtCQlnYy0+Z2NfZW5hYmxlZCA9IDA7Cj4gLQlzcGluX3VubG9jaygmZ2MtPmxv Y2spOwo+IC0KPiAtCXBibGtfZ2Nfc2hvdWxkX3N0YXJ0KHBibGspOwo+IC0KPiAtCXJldHVybiAw Owo+IC19Cj4gLQo+IC1pbnQgcGJsa19nY19pbml0KHN0cnVjdCBwYmxrICpwYmxrKQo+IC17Cj4g LQlzdHJ1Y3QgcGJsa19nYyAqZ2MgPSAmcGJsay0+Z2M7Cj4gLQlpbnQgcmV0Owo+IC0KPiAtCWdj LT5nY190cyA9IGt0aHJlYWRfY3JlYXRlKHBibGtfZ2NfdHMsIHBibGssICJwYmxrLWdjLXRzIik7 Cj4gLQlpZiAoSVNfRVJSKGdjLT5nY190cykpIHsKPiAtCQlwYmxrX2VycihwYmxrLCAiY291bGQg bm90IGFsbG9jYXRlIEdDIG1haW4ga3RocmVhZFxuIik7Cj4gLQkJcmV0dXJuIFBUUl9FUlIoZ2Mt PmdjX3RzKTsKPiAtCX0KPiAtCj4gLQlnYy0+Z2Nfd3JpdGVyX3RzID0ga3RocmVhZF9jcmVhdGUo cGJsa19nY193cml0ZXJfdHMsIHBibGssCj4gLQkJCQkJCQkicGJsay1nYy13cml0ZXItdHMiKTsK PiAtCWlmIChJU19FUlIoZ2MtPmdjX3dyaXRlcl90cykpIHsKPiAtCQlwYmxrX2VycihwYmxrLCAi Y291bGQgbm90IGFsbG9jYXRlIEdDIHdyaXRlciBrdGhyZWFkXG4iKTsKPiAtCQlyZXQgPSBQVFJf RVJSKGdjLT5nY193cml0ZXJfdHMpOwo+IC0JCWdvdG8gZmFpbF9mcmVlX21haW5fa3RocmVhZDsK PiAtCX0KPiAtCj4gLQlnYy0+Z2NfcmVhZGVyX3RzID0ga3RocmVhZF9jcmVhdGUocGJsa19nY19y ZWFkZXJfdHMsIHBibGssCj4gLQkJCQkJCQkicGJsay1nYy1yZWFkZXItdHMiKTsKPiAtCWlmIChJ U19FUlIoZ2MtPmdjX3JlYWRlcl90cykpIHsKPiAtCQlwYmxrX2VycihwYmxrLCAiY291bGQgbm90 IGFsbG9jYXRlIEdDIHJlYWRlciBrdGhyZWFkXG4iKTsKPiAtCQlyZXQgPSBQVFJfRVJSKGdjLT5n Y19yZWFkZXJfdHMpOwo+IC0JCWdvdG8gZmFpbF9mcmVlX3dyaXRlcl9rdGhyZWFkOwo+IC0JfQo+ IC0KPiAtCXRpbWVyX3NldHVwKCZnYy0+Z2NfdGltZXIsIHBibGtfZ2NfdGltZXIsIDApOwo+IC0J bW9kX3RpbWVyKCZnYy0+Z2NfdGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKEdDX1RJ TUVfTVNFQ1MpKTsKPiAtCj4gLQlnYy0+Z2NfYWN0aXZlID0gMDsKPiAtCWdjLT5nY19mb3JjZWQg PSAwOwo+IC0JZ2MtPmdjX2VuYWJsZWQgPSAxOwo+IC0JZ2MtPndfZW50cmllcyA9IDA7Cj4gLQlh dG9taWNfc2V0KCZnYy0+cmVhZF9pbmZsaWdodF9nYywgMCk7Cj4gLQlhdG9taWNfc2V0KCZnYy0+ cGlwZWxpbmVfZ2MsIDApOwo+IC0KPiAtCS8qIFdvcmtxdWV1ZSB0aGF0IHJlYWRzIHZhbGlkIHNl Y3RvcnMgZnJvbSBhIGxpbmUgYW5kIHN1Ym1pdCB0aGVtIHRvIHRoZQo+IC0JICogR0Mgd3JpdGVy IHRvIGJlIHJlY3ljbGVkLgo+IC0JICovCj4gLQlnYy0+Z2NfbGluZV9yZWFkZXJfd3EgPSBhbGxv Y193b3JrcXVldWUoInBibGstZ2MtbGluZS1yZWFkZXItd3EiLAo+IC0JCQlXUV9NRU1fUkVDTEFJ TSB8IFdRX1VOQk9VTkQsIFBCTEtfR0NfTUFYX1JFQURFUlMpOwo+IC0JaWYgKCFnYy0+Z2NfbGlu ZV9yZWFkZXJfd3EpIHsKPiAtCQlwYmxrX2VycihwYmxrLCAiY291bGQgbm90IGFsbG9jYXRlIEdD IGxpbmUgcmVhZGVyIHdvcmtxdWV1ZVxuIik7Cj4gLQkJcmV0ID0gLUVOT01FTTsKPiAtCQlnb3Rv IGZhaWxfZnJlZV9yZWFkZXJfa3RocmVhZDsKPiAtCX0KPiAtCj4gLQkvKiBXb3JrcXVldWUgdGhh dCBwcmVwYXJlIGxpbmVzIGZvciBHQyAqLwo+IC0JZ2MtPmdjX3JlYWRlcl93cSA9IGFsbG9jX3dv cmtxdWV1ZSgicGJsay1nYy1saW5lX3dxIiwKPiAtCQkJCQlXUV9NRU1fUkVDTEFJTSB8IFdRX1VO Qk9VTkQsIDEpOwo+IC0JaWYgKCFnYy0+Z2NfcmVhZGVyX3dxKSB7Cj4gLQkJcGJsa19lcnIocGJs aywgImNvdWxkIG5vdCBhbGxvY2F0ZSBHQyByZWFkZXIgd29ya3F1ZXVlXG4iKTsKPiAtCQlyZXQg PSAtRU5PTUVNOwo+IC0JCWdvdG8gZmFpbF9mcmVlX3JlYWRlcl9saW5lX3dxOwo+IC0JfQo+IC0K PiAtCXNwaW5fbG9ja19pbml0KCZnYy0+bG9jayk7Cj4gLQlzcGluX2xvY2tfaW5pdCgmZ2MtPndf bG9jayk7Cj4gLQlzcGluX2xvY2tfaW5pdCgmZ2MtPnJfbG9jayk7Cj4gLQo+IC0Jc2VtYV9pbml0 KCZnYy0+Z2Nfc2VtLCBQQkxLX0dDX1JRX1FEKTsKPiAtCj4gLQlJTklUX0xJU1RfSEVBRCgmZ2Mt PndfbGlzdCk7Cj4gLQlJTklUX0xJU1RfSEVBRCgmZ2MtPnJfbGlzdCk7Cj4gLQo+IC0JcmV0dXJu IDA7Cj4gLQo+IC1mYWlsX2ZyZWVfcmVhZGVyX2xpbmVfd3E6Cj4gLQlkZXN0cm95X3dvcmtxdWV1 ZShnYy0+Z2NfbGluZV9yZWFkZXJfd3EpOwo+IC1mYWlsX2ZyZWVfcmVhZGVyX2t0aHJlYWQ6Cj4g LQlrdGhyZWFkX3N0b3AoZ2MtPmdjX3JlYWRlcl90cyk7Cj4gLWZhaWxfZnJlZV93cml0ZXJfa3Ro cmVhZDoKPiAtCWt0aHJlYWRfc3RvcChnYy0+Z2Nfd3JpdGVyX3RzKTsKPiAtZmFpbF9mcmVlX21h aW5fa3RocmVhZDoKPiAtCWt0aHJlYWRfc3RvcChnYy0+Z2NfdHMpOwo+IC0KPiAtCXJldHVybiBy ZXQ7Cj4gLX0KPiAtCj4gLXZvaWQgcGJsa19nY19leGl0KHN0cnVjdCBwYmxrICpwYmxrLCBib29s IGdyYWNlZnVsKQo+IC17Cj4gLQlzdHJ1Y3QgcGJsa19nYyAqZ2MgPSAmcGJsay0+Z2M7Cj4gLQo+ IC0JZ2MtPmdjX2VuYWJsZWQgPSAwOwo+IC0JZGVsX3RpbWVyX3N5bmMoJmdjLT5nY190aW1lcik7 Cj4gLQlnYy0+Z2NfYWN0aXZlID0gMDsKPiAtCj4gLQlpZiAoZ2MtPmdjX3RzKQo+IC0JCWt0aHJl YWRfc3RvcChnYy0+Z2NfdHMpOwo+IC0KPiAtCWlmIChnYy0+Z2NfcmVhZGVyX3RzKQo+IC0JCWt0 aHJlYWRfc3RvcChnYy0+Z2NfcmVhZGVyX3RzKTsKPiAtCj4gLQlpZiAoZ3JhY2VmdWwpIHsKPiAt CQlmbHVzaF93b3JrcXVldWUoZ2MtPmdjX3JlYWRlcl93cSk7Cj4gLQkJZmx1c2hfd29ya3F1ZXVl KGdjLT5nY19saW5lX3JlYWRlcl93cSk7Cj4gLQl9Cj4gLQo+IC0JZGVzdHJveV93b3JrcXVldWUo Z2MtPmdjX3JlYWRlcl93cSk7Cj4gLQlkZXN0cm95X3dvcmtxdWV1ZShnYy0+Z2NfbGluZV9yZWFk ZXJfd3EpOwo+IC0KPiAtCWlmIChnYy0+Z2Nfd3JpdGVyX3RzKQo+IC0JCWt0aHJlYWRfc3RvcChn Yy0+Z2Nfd3JpdGVyX3RzKTsKPiAtfQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2xpZ2h0bnZtL3Bi bGstaW5pdC5jIGIvZHJpdmVycy9saWdodG52bS9wYmxrLWluaXQuYwo+IGRlbGV0ZWQgZmlsZSBt b2RlIDEwMDY0NAo+IGluZGV4IDU5MjRmMDljMjE3Yi4uMDAwMDAwMDAwMDAwCj4gLS0tIGEvZHJp dmVycy9saWdodG52bS9wYmxrLWluaXQuYwo+ICsrKyAvZGV2L251bGwKPiBAQCAtMSwxMzI0ICsw LDAgQEAKPiAtLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKPiAtLyoKPiAtICog Q29weXJpZ2h0IChDKSAyMDE1IElUIFVuaXZlcnNpdHkgb2YgQ29wZW5oYWdlbiAocnJwYy5jKQo+ IC0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQ05FWCBMYWJzCj4gLSAqIEluaXRpYWwgcmVsZWFzZTog SmF2aWVyIEdvbnphbGV6IDxqYXZpZXJAY25leGxhYnMuY29tPgo+IC0gKiAgICAgICAgICAgICAg ICAgIE1hdGlhcyBCam9ybGluZyA8bWF0aWFzQGNuZXhsYWJzLmNvbT4KPiAtICoKPiAtICogVGhp cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v cgo+IC0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSB2ZXJzaW9uCj4gLSAqIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb24uCj4gLSAqCj4gLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBp biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKPiAtICogV0lUSE9VVCBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+IC0gKiBNRVJD SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl IEdOVQo+IC0gKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCj4gLSAq Cj4gLSAqIEltcGxlbWVudGF0aW9uIG9mIGEgcGh5c2ljYWwgYmxvY2stZGV2aWNlIHRhcmdldCBm b3IgT3Blbi1jaGFubmVsIFNTRHMuCj4gLSAqCj4gLSAqIHBibGstaW5pdC5jIC0gcGJsaydzIGlu aXRpYWxpemF0aW9uLgo+IC0gKi8KPiAtCj4gLSNpbmNsdWRlICJwYmxrLmgiCj4gLSNpbmNsdWRl ICJwYmxrLXRyYWNlLmgiCj4gLQo+IC1zdGF0aWMgdW5zaWduZWQgaW50IHdyaXRlX2J1ZmZlcl9z aXplOwo+IC0KPiAtbW9kdWxlX3BhcmFtKHdyaXRlX2J1ZmZlcl9zaXplLCB1aW50LCAwNjQ0KTsK PiAtTU9EVUxFX1BBUk1fREVTQyh3cml0ZV9idWZmZXJfc2l6ZSwgIm51bWJlciBvZiBlbnRyaWVz IGluIGEgd3JpdGUgYnVmZmVyIik7Cj4gLQo+IC1zdHJ1Y3QgcGJsa19nbG9iYWxfY2FjaGVzIHsK PiAtCXN0cnVjdCBrbWVtX2NhY2hlCSp3czsKPiAtCXN0cnVjdCBrbWVtX2NhY2hlCSpyZWM7Cj4g LQlzdHJ1Y3Qga21lbV9jYWNoZQkqZ19ycTsKPiAtCXN0cnVjdCBrbWVtX2NhY2hlCSp3X3JxOwo+ IC0KPiAtCXN0cnVjdCBrcmVmCQlrcmVmOwo+IC0KPiAtCXN0cnVjdCBtdXRleAkJbXV0ZXg7IC8q IEVuc3VyZXMgY29uc2lzdGVuY3kgYmV0d2Vlbgo+IC0JCQkJCSogY2FjaGVzIGFuZCBrcmVmCj4g LQkJCQkJKi8KPiAtfTsKPiAtCj4gLXN0YXRpYyBzdHJ1Y3QgcGJsa19nbG9iYWxfY2FjaGVzIHBi bGtfY2FjaGVzID0gewo+IC0JLm11dGV4ID0gX19NVVRFWF9JTklUSUFMSVpFUihwYmxrX2NhY2hl cy5tdXRleCksCj4gLQkua3JlZiA9IEtSRUZfSU5JVCgwKSwKPiAtfTsKPiAtCj4gLXN0cnVjdCBi aW9fc2V0IHBibGtfYmlvX3NldDsKPiAtCj4gLXN0YXRpYyBibGtfcWNfdCBwYmxrX3N1Ym1pdF9i aW8oc3RydWN0IGJpbyAqYmlvKQo+IC17Cj4gLQlzdHJ1Y3QgcGJsayAqcGJsayA9IGJpby0+Ymlf YmRldi0+YmRfZGlzay0+cXVldWUtPnF1ZXVlZGF0YTsKPiAtCj4gLQlpZiAoYmlvX29wKGJpbykg PT0gUkVRX09QX0RJU0NBUkQpIHsKPiAtCQlwYmxrX2Rpc2NhcmQocGJsaywgYmlvKTsKPiAtCQlp ZiAoIShiaW8tPmJpX29wZiAmIFJFUV9QUkVGTFVTSCkpIHsKPiAtCQkJYmlvX2VuZGlvKGJpbyk7 Cj4gLQkJCXJldHVybiBCTEtfUUNfVF9OT05FOwo+IC0JCX0KPiAtCX0KPiAtCj4gLQkvKiBSZWFk IHJlcXVlc3RzIG11c3QgYmUgPD0gMjU2a2IgZHVlIHRvIE5WTWUncyA2NCBiaXQgY29tcGxldGlv biBiaXRtYXAKPiAtCSAqIGNvbnN0cmFpbnQuIFdyaXRlcyBjYW4gYmUgb2YgYXJiaXRyYXJ5IHNp emUuCj4gLQkgKi8KPiAtCWlmIChiaW9fZGF0YV9kaXIoYmlvKSA9PSBSRUFEKSB7Cj4gLQkJYmxr X3F1ZXVlX3NwbGl0KCZiaW8pOwo+IC0JCXBibGtfc3VibWl0X3JlYWQocGJsaywgYmlvKTsKPiAt CX0gZWxzZSB7Cj4gLQkJLyogUHJldmVudCBkZWFkbG9jayBpbiB0aGUgY2FzZSBvZiBhIG1vZGVz dCBMVU4gY29uZmlndXJhdGlvbgo+IC0JCSAqIGFuZCBsYXJnZSB1c2VyIEkvT3MuIFVubGVzcyBz dGFsbGVkLCB0aGUgcmF0ZSBsaW1pdGVyCj4gLQkJICogbGVhdmVzIGF0IGxlYXN0IDI1NktCIGF2 YWlsYWJsZSBmb3IgdXNlciBJL08uCj4gLQkJICovCj4gLQkJaWYgKHBibGtfZ2V0X3NlY3MoYmlv KSA+IHBibGtfcmxfbWF4X2lvKCZwYmxrLT5ybCkpCj4gLQkJCWJsa19xdWV1ZV9zcGxpdCgmYmlv KTsKPiAtCj4gLQkJcGJsa193cml0ZV90b19jYWNoZShwYmxrLCBiaW8sIFBCTEtfSU9UWVBFX1VT RVIpOwo+IC0JfQo+IC0KPiAtCXJldHVybiBCTEtfUUNfVF9OT05FOwo+IC19Cj4gLQo+IC1zdGF0 aWMgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIHBibGtfYm9wcyA9IHsKPiAt CS5vd25lcgkJPSBUSElTX01PRFVMRSwKPiAtCS5zdWJtaXRfYmlvCT0gcGJsa19zdWJtaXRfYmlv LAo+IC19Owo+IC0KPiAtCj4gLXN0YXRpYyBzaXplX3QgcGJsa190cmFuc19tYXBfc2l6ZShzdHJ1 Y3QgcGJsayAqcGJsaykKPiAtewo+IC0JaW50IGVudHJ5X3NpemUgPSA4Owo+IC0KPiAtCWlmIChw YmxrLT5hZGRyZl9sZW4gPCAzMikKPiAtCQllbnRyeV9zaXplID0gNDsKPiAtCj4gLQlyZXR1cm4g ZW50cnlfc2l6ZSAqIHBibGstPmNhcGFjaXR5Owo+IC19Cj4gLQo+IC0jaWZkZWYgQ09ORklHX05W TV9QQkxLX0RFQlVHCj4gLXN0YXRpYyB1MzIgcGJsa19sMnBfY3JjKHN0cnVjdCBwYmxrICpwYmxr KQo+IC17Cj4gLQlzaXplX3QgbWFwX3NpemU7Cj4gLQl1MzIgY3JjID0gfih1MzIpMDsKPiAtCj4g LQltYXBfc2l6ZSA9IHBibGtfdHJhbnNfbWFwX3NpemUocGJsayk7Cj4gLQljcmMgPSBjcmMzMl9s ZShjcmMsIHBibGstPnRyYW5zX21hcCwgbWFwX3NpemUpOwo+IC0JcmV0dXJuIGNyYzsKPiAtfQo+ IC0jZW5kaWYKPiAtCj4gLXN0YXRpYyB2b2lkIHBibGtfbDJwX2ZyZWUoc3RydWN0IHBibGsgKnBi bGspCj4gLXsKPiAtCXZmcmVlKHBibGstPnRyYW5zX21hcCk7Cj4gLX0KPiAtCj4gLXN0YXRpYyBp bnQgcGJsa19sMnBfcmVjb3ZlcihzdHJ1Y3QgcGJsayAqcGJsaywgYm9vbCBmYWN0b3J5X2luaXQp Cj4gLXsKPiAtCXN0cnVjdCBwYmxrX2xpbmUgKmxpbmUgPSBOVUxMOwo+IC0KPiAtCWlmIChmYWN0 b3J5X2luaXQpIHsKPiAtCQlndWlkX2dlbigmcGJsay0+aW5zdGFuY2VfdXVpZCk7Cj4gLQl9IGVs c2Ugewo+IC0JCWxpbmUgPSBwYmxrX3JlY292X2wycChwYmxrKTsKPiAtCQlpZiAoSVNfRVJSKGxp bmUpKSB7Cj4gLQkJCXBibGtfZXJyKHBibGssICJjb3VsZCBub3QgcmVjb3ZlciBsMnAgdGFibGVc biIpOwo+IC0JCQlyZXR1cm4gLUVGQVVMVDsKPiAtCQl9Cj4gLQl9Cj4gLQo+IC0jaWZkZWYgQ09O RklHX05WTV9QQkxLX0RFQlVHCj4gLQlwYmxrX2luZm8ocGJsaywgImluaXQ6IEwyUCBDUkM6ICV4 XG4iLCBwYmxrX2wycF9jcmMocGJsaykpOwo+IC0jZW5kaWYKPiAtCj4gLQkvKiBGcmVlIGZ1bGwg bGluZXMgZGlyZWN0bHkgYXMgR0MgaGFzIG5vdCBiZWVuIHN0YXJ0ZWQgeWV0ICovCj4gLQlwYmxr X2djX2ZyZWVfZnVsbF9saW5lcyhwYmxrKTsKPiAtCj4gLQlpZiAoIWxpbmUpIHsKPiAtCQkvKiBD b25maWd1cmUgbmV4dCBsaW5lIGZvciB1c2VyIGRhdGEgKi8KPiAtCQlsaW5lID0gcGJsa19saW5l X2dldF9maXJzdF9kYXRhKHBibGspOwo+IC0JCWlmICghbGluZSkKPiAtCQkJcmV0dXJuIC1FRkFV TFQ7Cj4gLQl9Cj4gLQo+IC0JcmV0dXJuIDA7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbnQgcGJsa19s MnBfaW5pdChzdHJ1Y3QgcGJsayAqcGJsaywgYm9vbCBmYWN0b3J5X2luaXQpCj4gLXsKPiAtCXNl Y3Rvcl90IGk7Cj4gLQlzdHJ1Y3QgcHBhX2FkZHIgcHBhOwo+IC0Jc2l6ZV90IG1hcF9zaXplOwo+ IC0JaW50IHJldCA9IDA7Cj4gLQo+IC0JbWFwX3NpemUgPSBwYmxrX3RyYW5zX21hcF9zaXplKHBi bGspOwo+IC0JcGJsay0+dHJhbnNfbWFwID0gX192bWFsbG9jKG1hcF9zaXplLCBHRlBfS0VSTkVM IHwgX19HRlBfTk9XQVJOIHwKPiAtCQkJCSAgICBfX0dGUF9SRVRSWV9NQVlGQUlMIHwgX19HRlBf SElHSE1FTSk7Cj4gLQlpZiAoIXBibGstPnRyYW5zX21hcCkgewo+IC0JCXBibGtfZXJyKHBibGss ICJmYWlsZWQgdG8gYWxsb2NhdGUgTDJQIChuZWVkICV6dSBvZiBtZW1vcnkpXG4iLAo+IC0JCQkJ bWFwX3NpemUpOwo+IC0JCXJldHVybiAtRU5PTUVNOwo+IC0JfQo+IC0KPiAtCXBibGtfcHBhX3Nl dF9lbXB0eSgmcHBhKTsKPiAtCj4gLQlmb3IgKGkgPSAwOyBpIDwgcGJsay0+Y2FwYWNpdHk7IGkr KykKPiAtCQlwYmxrX3RyYW5zX21hcF9zZXQocGJsaywgaSwgcHBhKTsKPiAtCj4gLQlyZXQgPSBw YmxrX2wycF9yZWNvdmVyKHBibGssIGZhY3RvcnlfaW5pdCk7Cj4gLQlpZiAocmV0KQo+IC0JCXZm cmVlKHBibGstPnRyYW5zX21hcCk7Cj4gLQo+IC0JcmV0dXJuIHJldDsKPiAtfQo+IC0KPiAtc3Rh dGljIHZvaWQgcGJsa19yd2JfZnJlZShzdHJ1Y3QgcGJsayAqcGJsaykKPiAtewo+IC0JaWYgKHBi bGtfcmJfdGVhcl9kb3duX2NoZWNrKCZwYmxrLT5yd2IpKQo+IC0JCXBibGtfZXJyKHBibGssICJ3 cml0ZSBidWZmZXIgZXJyb3Igb24gdGVhciBkb3duXG4iKTsKPiAtCj4gLQlwYmxrX3JiX2ZyZWUo JnBibGstPnJ3Yik7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbnQgcGJsa19yd2JfaW5pdChzdHJ1Y3Qg cGJsayAqcGJsaykKPiAtewo+IC0Jc3RydWN0IG52bV90Z3RfZGV2ICpkZXYgPSBwYmxrLT5kZXY7 Cj4gLQlzdHJ1Y3QgbnZtX2dlbyAqZ2VvID0gJmRldi0+Z2VvOwo+IC0JdW5zaWduZWQgbG9uZyBi dWZmZXJfc2l6ZTsKPiAtCWludCBwZ3NfaW5fYnVmZmVyLCB0aHJlc2hvbGQ7Cj4gLQo+IC0JdGhy ZXNob2xkID0gZ2VvLT5td19jdW5pdHMgKiBnZW8tPmFsbF9sdW5zOwo+IC0JcGdzX2luX2J1ZmZl ciA9IChtYXgoZ2VvLT5td19jdW5pdHMsIGdlby0+d3Nfb3B0KSArIGdlby0+d3Nfb3B0KQo+IC0J CQkJCQkJCSogZ2VvLT5hbGxfbHVuczsKPiAtCj4gLQlpZiAod3JpdGVfYnVmZmVyX3NpemUgJiYg KHdyaXRlX2J1ZmZlcl9zaXplID4gcGdzX2luX2J1ZmZlcikpCj4gLQkJYnVmZmVyX3NpemUgPSB3 cml0ZV9idWZmZXJfc2l6ZTsKPiAtCWVsc2UKPiAtCQlidWZmZXJfc2l6ZSA9IHBnc19pbl9idWZm ZXI7Cj4gLQo+IC0JcmV0dXJuIHBibGtfcmJfaW5pdCgmcGJsay0+cndiLCBidWZmZXJfc2l6ZSwg dGhyZXNob2xkLCBnZW8tPmNzZWNzKTsKPiAtfQo+IC0KPiAtc3RhdGljIGludCBwYmxrX3NldF9h ZGRyZl8xMihzdHJ1Y3QgcGJsayAqcGJsaywgc3RydWN0IG52bV9nZW8gKmdlbywKPiAtCQkJICAg ICBzdHJ1Y3QgbnZtX2FkZHJmXzEyICpkc3QpCj4gLXsKPiAtCXN0cnVjdCBudm1fYWRkcmZfMTIg KnNyYyA9IChzdHJ1Y3QgbnZtX2FkZHJmXzEyICopJmdlby0+YWRkcmY7Cj4gLQlpbnQgcG93ZXJf bGVuOwo+IC0KPiAtCS8qIFJlLWNhbGN1bGF0ZSBjaGFubmVsIGFuZCBsdW4gZm9ybWF0IHRvIGFk YXB0IHRvIGNvbmZpZ3VyYXRpb24gKi8KPiAtCXBvd2VyX2xlbiA9IGdldF9jb3VudF9vcmRlcihn ZW8tPm51bV9jaCk7Cj4gLQlpZiAoMSA8PCBwb3dlcl9sZW4gIT0gZ2VvLT5udW1fY2gpIHsKPiAt CQlwYmxrX2VycihwYmxrLCAic3VwcG9ydHMgb25seSBwb3dlci1vZi10d28gY2hhbm5lbCBjb25m aWcuXG4iKTsKPiAtCQlyZXR1cm4gLUVJTlZBTDsKPiAtCX0KPiAtCWRzdC0+Y2hfbGVuID0gcG93 ZXJfbGVuOwo+IC0KPiAtCXBvd2VyX2xlbiA9IGdldF9jb3VudF9vcmRlcihnZW8tPm51bV9sdW4p Owo+IC0JaWYgKDEgPDwgcG93ZXJfbGVuICE9IGdlby0+bnVtX2x1bikgewo+IC0JCXBibGtfZXJy KHBibGssICJzdXBwb3J0cyBvbmx5IHBvd2VyLW9mLXR3byBMVU4gY29uZmlnLlxuIik7Cj4gLQkJ cmV0dXJuIC1FSU5WQUw7Cj4gLQl9Cj4gLQlkc3QtPmx1bl9sZW4gPSBwb3dlcl9sZW47Cj4gLQo+ IC0JZHN0LT5ibGtfbGVuID0gc3JjLT5ibGtfbGVuOwo+IC0JZHN0LT5wZ19sZW4gPSBzcmMtPnBn X2xlbjsKPiAtCWRzdC0+cGxuX2xlbiA9IHNyYy0+cGxuX2xlbjsKPiAtCWRzdC0+c2VjX2xlbiA9 IHNyYy0+c2VjX2xlbjsKPiAtCj4gLQlkc3QtPnNlY19vZmZzZXQgPSAwOwo+IC0JZHN0LT5wbG5f b2Zmc2V0ID0gZHN0LT5zZWNfbGVuOwo+IC0JZHN0LT5jaF9vZmZzZXQgPSBkc3QtPnBsbl9vZmZz ZXQgKyBkc3QtPnBsbl9sZW47Cj4gLQlkc3QtPmx1bl9vZmZzZXQgPSBkc3QtPmNoX29mZnNldCAr IGRzdC0+Y2hfbGVuOwo+IC0JZHN0LT5wZ19vZmZzZXQgPSBkc3QtPmx1bl9vZmZzZXQgKyBkc3Qt Pmx1bl9sZW47Cj4gLQlkc3QtPmJsa19vZmZzZXQgPSBkc3QtPnBnX29mZnNldCArIGRzdC0+cGdf bGVuOwo+IC0KPiAtCWRzdC0+c2VjX21hc2sgPSAoKDFVTEwgPDwgZHN0LT5zZWNfbGVuKSAtIDEp IDw8IGRzdC0+c2VjX29mZnNldDsKPiAtCWRzdC0+cGxuX21hc2sgPSAoKDFVTEwgPDwgZHN0LT5w bG5fbGVuKSAtIDEpIDw8IGRzdC0+cGxuX29mZnNldDsKPiAtCWRzdC0+Y2hfbWFzayA9ICgoMVVM TCA8PCBkc3QtPmNoX2xlbikgLSAxKSA8PCBkc3QtPmNoX29mZnNldDsKPiAtCWRzdC0+bHVuX21h c2sgPSAoKDFVTEwgPDwgZHN0LT5sdW5fbGVuKSAtIDEpIDw8IGRzdC0+bHVuX29mZnNldDsKPiAt CWRzdC0+cGdfbWFzayA9ICgoMVVMTCA8PCBkc3QtPnBnX2xlbikgLSAxKSA8PCBkc3QtPnBnX29m ZnNldDsKPiAtCWRzdC0+YmxrX21hc2sgPSAoKDFVTEwgPDwgZHN0LT5ibGtfbGVuKSAtIDEpIDw8 IGRzdC0+YmxrX29mZnNldDsKPiAtCj4gLQlyZXR1cm4gZHN0LT5ibGtfb2Zmc2V0ICsgc3JjLT5i bGtfbGVuOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW50IHBibGtfc2V0X2FkZHJmXzIwKHN0cnVjdCBu dm1fZ2VvICpnZW8sIHN0cnVjdCBudm1fYWRkcmYgKmFkc3QsCj4gLQkJCSAgICAgc3RydWN0IHBi bGtfYWRkcmYgKnVkc3QpCj4gLXsKPiAtCXN0cnVjdCBudm1fYWRkcmYgKnNyYyA9ICZnZW8tPmFk ZHJmOwo+IC0KPiAtCWFkc3QtPmNoX2xlbiA9IGdldF9jb3VudF9vcmRlcihnZW8tPm51bV9jaCk7 Cj4gLQlhZHN0LT5sdW5fbGVuID0gZ2V0X2NvdW50X29yZGVyKGdlby0+bnVtX2x1bik7Cj4gLQlh ZHN0LT5jaGtfbGVuID0gc3JjLT5jaGtfbGVuOwo+IC0JYWRzdC0+c2VjX2xlbiA9IHNyYy0+c2Vj X2xlbjsKPiAtCj4gLQlhZHN0LT5zZWNfb2Zmc2V0ID0gMDsKPiAtCWFkc3QtPmNoX29mZnNldCA9 IGFkc3QtPnNlY19sZW47Cj4gLQlhZHN0LT5sdW5fb2Zmc2V0ID0gYWRzdC0+Y2hfb2Zmc2V0ICsg YWRzdC0+Y2hfbGVuOwo+IC0JYWRzdC0+Y2hrX29mZnNldCA9IGFkc3QtPmx1bl9vZmZzZXQgKyBh ZHN0LT5sdW5fbGVuOwo+IC0KPiAtCWFkc3QtPnNlY19tYXNrID0gKCgxVUxMIDw8IGFkc3QtPnNl Y19sZW4pIC0gMSkgPDwgYWRzdC0+c2VjX29mZnNldDsKPiAtCWFkc3QtPmNoa19tYXNrID0gKCgx VUxMIDw8IGFkc3QtPmNoa19sZW4pIC0gMSkgPDwgYWRzdC0+Y2hrX29mZnNldDsKPiAtCWFkc3Qt Pmx1bl9tYXNrID0gKCgxVUxMIDw8IGFkc3QtPmx1bl9sZW4pIC0gMSkgPDwgYWRzdC0+bHVuX29m ZnNldDsKPiAtCWFkc3QtPmNoX21hc2sgPSAoKDFVTEwgPDwgYWRzdC0+Y2hfbGVuKSAtIDEpIDw8 IGFkc3QtPmNoX29mZnNldDsKPiAtCj4gLQl1ZHN0LT5zZWNfc3RyaXBlID0gZ2VvLT53c19vcHQ7 Cj4gLQl1ZHN0LT5jaF9zdHJpcGUgPSBnZW8tPm51bV9jaDsKPiAtCXVkc3QtPmx1bl9zdHJpcGUg PSBnZW8tPm51bV9sdW47Cj4gLQo+IC0JdWRzdC0+c2VjX2x1bl9zdHJpcGUgPSB1ZHN0LT5zZWNf c3RyaXBlICogdWRzdC0+Y2hfc3RyaXBlOwo+IC0JdWRzdC0+c2VjX3dzX3N0cmlwZSA9IHVkc3Qt PnNlY19sdW5fc3RyaXBlICogdWRzdC0+bHVuX3N0cmlwZTsKPiAtCj4gLQlyZXR1cm4gYWRzdC0+ Y2hrX29mZnNldCArIGFkc3QtPmNoa19sZW47Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbnQgcGJsa19z ZXRfYWRkcmYoc3RydWN0IHBibGsgKnBibGspCj4gLXsKPiAtCXN0cnVjdCBudm1fdGd0X2RldiAq ZGV2ID0gcGJsay0+ZGV2Owo+IC0Jc3RydWN0IG52bV9nZW8gKmdlbyA9ICZkZXYtPmdlbzsKPiAt CWludCBtb2Q7Cj4gLQo+IC0Jc3dpdGNoIChnZW8tPnZlcnNpb24pIHsKPiAtCWNhc2UgTlZNX09D U1NEX1NQRUNfMTI6Cj4gLQkJZGl2X3U2NF9yZW0oZ2VvLT5jbGJhLCBwYmxrLT5taW5fd3JpdGVf cGdzLCAmbW9kKTsKPiAtCQlpZiAobW9kKSB7Cj4gLQkJCXBibGtfZXJyKHBibGssICJiYWQgY29u ZmlndXJhdGlvbiBvZiBzZWN0b3JzL3BhZ2VzXG4iKTsKPiAtCQkJcmV0dXJuIC1FSU5WQUw7Cj4g LQkJfQo+IC0KPiAtCQlwYmxrLT5hZGRyZl9sZW4gPSBwYmxrX3NldF9hZGRyZl8xMihwYmxrLCBn ZW8sCj4gLQkJCQkJCQkodm9pZCAqKSZwYmxrLT5hZGRyZik7Cj4gLQkJYnJlYWs7Cj4gLQljYXNl IE5WTV9PQ1NTRF9TUEVDXzIwOgo+IC0JCXBibGstPmFkZHJmX2xlbiA9IHBibGtfc2V0X2FkZHJm XzIwKGdlbywgKHZvaWQgKikmcGJsay0+YWRkcmYsCj4gLQkJCQkJCQkmcGJsay0+dWFkZHJmKTsK PiAtCQlicmVhazsKPiAtCWRlZmF1bHQ6Cj4gLQkJcGJsa19lcnIocGJsaywgIk9DU1NEIHJldmlz aW9uIG5vdCBzdXBwb3J0ZWQgKCVkKVxuIiwKPiAtCQkJCQkJCQlnZW8tPnZlcnNpb24pOwo+IC0J CXJldHVybiAtRUlOVkFMOwo+IC0JfQo+IC0KPiAtCXJldHVybiAwOwo+IC19Cj4gLQo+IC1zdGF0 aWMgaW50IHBibGtfY3JlYXRlX2dsb2JhbF9jYWNoZXModm9pZCkKPiAtewo+IC0KPiAtCXBibGtf Y2FjaGVzLndzID0ga21lbV9jYWNoZV9jcmVhdGUoInBibGtfYmxrX3dzIiwKPiAtCQkJCXNpemVv ZihzdHJ1Y3QgcGJsa19saW5lX3dzKSwgMCwgMCwgTlVMTCk7Cj4gLQlpZiAoIXBibGtfY2FjaGVz LndzKQo+IC0JCXJldHVybiAtRU5PTUVNOwo+IC0KPiAtCXBibGtfY2FjaGVzLnJlYyA9IGttZW1f Y2FjaGVfY3JlYXRlKCJwYmxrX3JlYyIsCj4gLQkJCQlzaXplb2Yoc3RydWN0IHBibGtfcmVjX2N0 eCksIDAsIDAsIE5VTEwpOwo+IC0JaWYgKCFwYmxrX2NhY2hlcy5yZWMpCj4gLQkJZ290byBmYWls X2Rlc3Ryb3lfd3M7Cj4gLQo+IC0JcGJsa19jYWNoZXMuZ19ycSA9IGttZW1fY2FjaGVfY3JlYXRl KCJwYmxrX2dfcnEiLCBwYmxrX2dfcnFfc2l6ZSwKPiAtCQkJCTAsIDAsIE5VTEwpOwo+IC0JaWYg KCFwYmxrX2NhY2hlcy5nX3JxKQo+IC0JCWdvdG8gZmFpbF9kZXN0cm95X3JlYzsKPiAtCj4gLQlw YmxrX2NhY2hlcy53X3JxID0ga21lbV9jYWNoZV9jcmVhdGUoInBibGtfd19ycSIsIHBibGtfd19y cV9zaXplLAo+IC0JCQkJMCwgMCwgTlVMTCk7Cj4gLQlpZiAoIXBibGtfY2FjaGVzLndfcnEpCj4g LQkJZ290byBmYWlsX2Rlc3Ryb3lfZ19ycTsKPiAtCj4gLQlyZXR1cm4gMDsKPiAtCj4gLWZhaWxf ZGVzdHJveV9nX3JxOgo+IC0Ja21lbV9jYWNoZV9kZXN0cm95KHBibGtfY2FjaGVzLmdfcnEpOwo+ IC1mYWlsX2Rlc3Ryb3lfcmVjOgo+IC0Ja21lbV9jYWNoZV9kZXN0cm95KHBibGtfY2FjaGVzLnJl Yyk7Cj4gLWZhaWxfZGVzdHJveV93czoKPiAtCWttZW1fY2FjaGVfZGVzdHJveShwYmxrX2NhY2hl cy53cyk7Cj4gLQo+IC0JcmV0dXJuIC1FTk9NRU07Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbnQgcGJs a19nZXRfZ2xvYmFsX2NhY2hlcyh2b2lkKQo+IC17Cj4gLQlpbnQgcmV0ID0gMDsKPiAtCj4gLQlt dXRleF9sb2NrKCZwYmxrX2NhY2hlcy5tdXRleCk7Cj4gLQo+IC0JaWYgKGtyZWZfZ2V0X3VubGVz c196ZXJvKCZwYmxrX2NhY2hlcy5rcmVmKSkKPiAtCQlnb3RvIG91dDsKPiAtCj4gLQlyZXQgPSBw YmxrX2NyZWF0ZV9nbG9iYWxfY2FjaGVzKCk7Cj4gLQlpZiAoIXJldCkKPiAtCQlrcmVmX2luaXQo JnBibGtfY2FjaGVzLmtyZWYpOwo+IC0KPiAtb3V0Ogo+IC0JbXV0ZXhfdW5sb2NrKCZwYmxrX2Nh Y2hlcy5tdXRleCk7Cj4gLQlyZXR1cm4gcmV0Owo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBwYmxr X2Rlc3Ryb3lfZ2xvYmFsX2NhY2hlcyhzdHJ1Y3Qga3JlZiAqcmVmKQo+IC17Cj4gLQlzdHJ1Y3Qg cGJsa19nbG9iYWxfY2FjaGVzICpjOwo+IC0KPiAtCWMgPSBjb250YWluZXJfb2YocmVmLCBzdHJ1 Y3QgcGJsa19nbG9iYWxfY2FjaGVzLCBrcmVmKTsKPiAtCj4gLQlrbWVtX2NhY2hlX2Rlc3Ryb3ko Yy0+d3MpOwo+IC0Ja21lbV9jYWNoZV9kZXN0cm95KGMtPnJlYyk7Cj4gLQlrbWVtX2NhY2hlX2Rl c3Ryb3koYy0+Z19ycSk7Cj4gLQlrbWVtX2NhY2hlX2Rlc3Ryb3koYy0+d19ycSk7Cj4gLX0KPiAt Cj4gLXN0YXRpYyB2b2lkIHBibGtfcHV0X2dsb2JhbF9jYWNoZXModm9pZCkKPiAtewo+IC0JbXV0 ZXhfbG9jaygmcGJsa19jYWNoZXMubXV0ZXgpOwo+IC0Ja3JlZl9wdXQoJnBibGtfY2FjaGVzLmty ZWYsIHBibGtfZGVzdHJveV9nbG9iYWxfY2FjaGVzKTsKPiAtCW11dGV4X3VubG9jaygmcGJsa19j YWNoZXMubXV0ZXgpOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW50IHBibGtfY29yZV9pbml0KHN0cnVj dCBwYmxrICpwYmxrKQo+IC17Cj4gLQlzdHJ1Y3QgbnZtX3RndF9kZXYgKmRldiA9IHBibGstPmRl djsKPiAtCXN0cnVjdCBudm1fZ2VvICpnZW8gPSAmZGV2LT5nZW87Cj4gLQlpbnQgcmV0LCBtYXhf d3JpdGVfcHBhczsKPiAtCj4gLQlhdG9taWM2NF9zZXQoJnBibGstPnVzZXJfd2EsIDApOwo+IC0J YXRvbWljNjRfc2V0KCZwYmxrLT5wYWRfd2EsIDApOwo+IC0JYXRvbWljNjRfc2V0KCZwYmxrLT5n Y193YSwgMCk7Cj4gLQlwYmxrLT51c2VyX3JzdF93YSA9IDA7Cj4gLQlwYmxrLT5wYWRfcnN0X3dh ID0gMDsKPiAtCXBibGstPmdjX3JzdF93YSA9IDA7Cj4gLQo+IC0JYXRvbWljNjRfc2V0KCZwYmxr LT5ucl9mbHVzaCwgMCk7Cj4gLQlwYmxrLT5ucl9mbHVzaF9yc3QgPSAwOwo+IC0KPiAtCXBibGst Pm1pbl93cml0ZV9wZ3MgPSBnZW8tPndzX29wdDsKPiAtCXBibGstPm1pbl93cml0ZV9wZ3NfZGF0 YSA9IHBibGstPm1pbl93cml0ZV9wZ3M7Cj4gLQltYXhfd3JpdGVfcHBhcyA9IHBibGstPm1pbl93 cml0ZV9wZ3MgKiBnZW8tPmFsbF9sdW5zOwo+IC0JcGJsay0+bWF4X3dyaXRlX3BncyA9IG1pbl90 KGludCwgbWF4X3dyaXRlX3BwYXMsIE5WTV9NQVhfVkxCQSk7Cj4gLQlwYmxrLT5tYXhfd3JpdGVf cGdzID0gbWluX3QoaW50LCBwYmxrLT5tYXhfd3JpdGVfcGdzLAo+IC0JCXF1ZXVlX21heF9od19z ZWN0b3JzKGRldi0+cSkgLyAoZ2VvLT5jc2VjcyA+PiBTRUNUT1JfU0hJRlQpKTsKPiAtCXBibGtf c2V0X3NlY19wZXJfd3JpdGUocGJsaywgcGJsay0+bWluX3dyaXRlX3Bncyk7Cj4gLQo+IC0JcGJs ay0+b29iX21ldGFfc2l6ZSA9IGdlby0+c29zOwo+IC0JaWYgKCFwYmxrX2lzX29vYl9tZXRhX3N1 cHBvcnRlZChwYmxrKSkgewo+IC0JCS8qIEZvciBkcml2ZXMgd2hpY2ggZG9lcyBub3QgaGF2ZSBP T0IgbWV0YWRhdGEgZmVhdHVyZQo+IC0JCSAqIGluIG9yZGVyIHRvIHN1cHBvcnQgcmVjb3Zlcnkg ZmVhdHVyZSB3ZSBuZWVkIHRvIHVzZQo+IC0JCSAqIHNvIGNhbGxlZCBwYWNrZWQgbWV0YWRhdGEu IFBhY2tlZCBtZXRhZGEgd2lsbCBzdG9yZQo+IC0JCSAqIHRoZSBzYW1lIGluZm9ybWF0aW9uIGFz IE9PQiBtZXRhZGF0YSAobDJwIHRhYmxlIG1hcHBpbmcsCj4gLQkJICogYnV0IGluIHRoZSBmb3Jt IG9mIHRoZSBzaW5nbGUgcGFnZSBhdCB0aGUgZW5kIG9mCj4gLQkJICogZXZlcnkgd3JpdGUgcmVx dWVzdC4KPiAtCQkgKi8KPiAtCQlpZiAocGJsay0+bWluX3dyaXRlX3Bncwo+IC0JCQkqIHNpemVv ZihzdHJ1Y3QgcGJsa19zZWNfbWV0YSkgPiBQQUdFX1NJWkUpIHsKPiAtCQkJLyogV2Ugd2FudCB0 byBrZWVwIGFsbCB0aGUgcGFja2VkIG1ldGFkYXRhIG9uIHNpbmdsZQo+IC0JCQkgKiBwYWdlIHBl ciB3cml0ZSByZXF1ZXN0cy4gU28gd2UgbmVlZCB0byBlbnN1cmUgdGhhdAo+IC0JCQkgKiBpdCB3 aWxsIGZpdC4KPiAtCQkJICoKPiAtCQkJICogVGhpcyBpcyBtb3JlIGxpa2Ugc2FuaXR5IGNoZWNr LCBzaW5jZSB0aGVyZSBpcwo+IC0JCQkgKiBubyBkZXZpY2Ugd2l0aCBzdWNoIGEgYmlnIG1pbmlt YWwgd3JpdGUgc2l6ZQo+IC0JCQkgKiAoYWJvdmUgMSBtZXRhYnl0ZXMpLgo+IC0JCQkgKi8KPiAt CQkJcGJsa19lcnIocGJsaywgIk5vdCBzdXBwb3J0ZWQgbWluIHdyaXRlIHNpemVcbiIpOwo+IC0J CQlyZXR1cm4gLUVJTlZBTDsKPiAtCQl9Cj4gLQkJLyogRm9yIHBhY2tlZCBtZXRhIGFwcHJvYWNo IHdlIGRvIHNvbWUgc2ltcGxpZmljYXRpb24uCj4gLQkJICogT24gcmVhZCBwYXRoIHdlIGFsd2F5 cyBpc3N1ZSByZXF1ZXN0cyB3aGljaCBzaXplCj4gLQkJICogZXF1YWwgdG8gbWF4X3dyaXRlX3Bn cywgd2l0aCBhbGwgcGFnZXMgZmlsbGVkIHdpdGgKPiAtCQkgKiB1c2VyIHBheWxvYWQgZXhjZXB0 IG9mIGxhc3Qgb25lIHBhZ2Ugd2hpY2ggd2lsbCBiZQo+IC0JCSAqIGZpbGxlZCB3aXRoIHBhY2tl ZCBtZXRhZGF0YS4KPiAtCQkgKi8KPiAtCQlwYmxrLT5tYXhfd3JpdGVfcGdzID0gcGJsay0+bWlu X3dyaXRlX3BnczsKPiAtCQlwYmxrLT5taW5fd3JpdGVfcGdzX2RhdGEgPSBwYmxrLT5taW5fd3Jp dGVfcGdzIC0gMTsKPiAtCX0KPiAtCj4gLQlwYmxrLT5wYWRfZGlzdCA9IGtjYWxsb2MocGJsay0+ bWluX3dyaXRlX3BncyAtIDEsIHNpemVvZihhdG9taWM2NF90KSwKPiAtCQkJCQkJCQlHRlBfS0VS TkVMKTsKPiAtCWlmICghcGJsay0+cGFkX2Rpc3QpCj4gLQkJcmV0dXJuIC1FTk9NRU07Cj4gLQo+ IC0JaWYgKHBibGtfZ2V0X2dsb2JhbF9jYWNoZXMoKSkKPiAtCQlnb3RvIGZhaWxfZnJlZV9wYWRf ZGlzdDsKPiAtCj4gLQkvKiBJbnRlcm5hbCBiaW9zIGNhbiBiZSBhdCBtb3N0IHRoZSBzZWN0b3Jz IHNpZ25hbGVkIGJ5IHRoZSBkZXZpY2UuICovCj4gLQlyZXQgPSBtZW1wb29sX2luaXRfcGFnZV9w b29sKCZwYmxrLT5wYWdlX2Jpb19wb29sLCBOVk1fTUFYX1ZMQkEsIDApOwo+IC0JaWYgKHJldCkK PiAtCQlnb3RvIGZyZWVfZ2xvYmFsX2NhY2hlczsKPiAtCj4gLQlyZXQgPSBtZW1wb29sX2luaXRf c2xhYl9wb29sKCZwYmxrLT5nZW5fd3NfcG9vbCwgUEJMS19HRU5fV1NfUE9PTF9TSVpFLAo+IC0J CQkJICAgICBwYmxrX2NhY2hlcy53cyk7Cj4gLQlpZiAocmV0KQo+IC0JCWdvdG8gZnJlZV9wYWdl X2Jpb19wb29sOwo+IC0KPiAtCXJldCA9IG1lbXBvb2xfaW5pdF9zbGFiX3Bvb2woJnBibGstPnJl Y19wb29sLCBnZW8tPmFsbF9sdW5zLAo+IC0JCQkJICAgICBwYmxrX2NhY2hlcy5yZWMpOwo+IC0J aWYgKHJldCkKPiAtCQlnb3RvIGZyZWVfZ2VuX3dzX3Bvb2w7Cj4gLQo+IC0JcmV0ID0gbWVtcG9v bF9pbml0X3NsYWJfcG9vbCgmcGJsay0+cl9ycV9wb29sLCBnZW8tPmFsbF9sdW5zLAo+IC0JCQkJ ICAgICBwYmxrX2NhY2hlcy5nX3JxKTsKPiAtCWlmIChyZXQpCj4gLQkJZ290byBmcmVlX3JlY19w b29sOwo+IC0KPiAtCXJldCA9IG1lbXBvb2xfaW5pdF9zbGFiX3Bvb2woJnBibGstPmVfcnFfcG9v bCwgZ2VvLT5hbGxfbHVucywKPiAtCQkJCSAgICAgcGJsa19jYWNoZXMuZ19ycSk7Cj4gLQlpZiAo cmV0KQo+IC0JCWdvdG8gZnJlZV9yX3JxX3Bvb2w7Cj4gLQo+IC0JcmV0ID0gbWVtcG9vbF9pbml0 X3NsYWJfcG9vbCgmcGJsay0+d19ycV9wb29sLCBnZW8tPmFsbF9sdW5zLAo+IC0JCQkJICAgICBw YmxrX2NhY2hlcy53X3JxKTsKPiAtCWlmIChyZXQpCj4gLQkJZ290byBmcmVlX2VfcnFfcG9vbDsK PiAtCj4gLQlwYmxrLT5jbG9zZV93cSA9IGFsbG9jX3dvcmtxdWV1ZSgicGJsay1jbG9zZS13cSIs Cj4gLQkJCVdRX01FTV9SRUNMQUlNIHwgV1FfVU5CT1VORCwgUEJMS19OUl9DTE9TRV9KT0JTKTsK PiAtCWlmICghcGJsay0+Y2xvc2Vfd3EpCj4gLQkJZ290byBmcmVlX3dfcnFfcG9vbDsKPiAtCj4g LQlwYmxrLT5iYl93cSA9IGFsbG9jX3dvcmtxdWV1ZSgicGJsay1iYi13cSIsCj4gLQkJCVdRX01F TV9SRUNMQUlNIHwgV1FfVU5CT1VORCwgMCk7Cj4gLQlpZiAoIXBibGstPmJiX3dxKQo+IC0JCWdv dG8gZnJlZV9jbG9zZV93cTsKPiAtCj4gLQlwYmxrLT5yX2VuZF93cSA9IGFsbG9jX3dvcmtxdWV1 ZSgicGJsay1yZWFkLWVuZC13cSIsCj4gLQkJCVdRX01FTV9SRUNMQUlNIHwgV1FfVU5CT1VORCwg MCk7Cj4gLQlpZiAoIXBibGstPnJfZW5kX3dxKQo+IC0JCWdvdG8gZnJlZV9iYl93cTsKPiAtCj4g LQlpZiAocGJsa19zZXRfYWRkcmYocGJsaykpCj4gLQkJZ290byBmcmVlX3JfZW5kX3dxOwo+IC0K PiAtCUlOSVRfTElTVF9IRUFEKCZwYmxrLT5jb21wbF9saXN0KTsKPiAtCUlOSVRfTElTVF9IRUFE KCZwYmxrLT5yZXN1Ym1pdF9saXN0KTsKPiAtCj4gLQlyZXR1cm4gMDsKPiAtCj4gLWZyZWVfcl9l bmRfd3E6Cj4gLQlkZXN0cm95X3dvcmtxdWV1ZShwYmxrLT5yX2VuZF93cSk7Cj4gLWZyZWVfYmJf d3E6Cj4gLQlkZXN0cm95X3dvcmtxdWV1ZShwYmxrLT5iYl93cSk7Cj4gLWZyZWVfY2xvc2Vfd3E6 Cj4gLQlkZXN0cm95X3dvcmtxdWV1ZShwYmxrLT5jbG9zZV93cSk7Cj4gLWZyZWVfd19ycV9wb29s Ogo+IC0JbWVtcG9vbF9leGl0KCZwYmxrLT53X3JxX3Bvb2wpOwo+IC1mcmVlX2VfcnFfcG9vbDoK PiAtCW1lbXBvb2xfZXhpdCgmcGJsay0+ZV9ycV9wb29sKTsKPiAtZnJlZV9yX3JxX3Bvb2w6Cj4g LQltZW1wb29sX2V4aXQoJnBibGstPnJfcnFfcG9vbCk7Cj4gLWZyZWVfcmVjX3Bvb2w6Cj4gLQlt ZW1wb29sX2V4aXQoJnBibGstPnJlY19wb29sKTsKPiAtZnJlZV9nZW5fd3NfcG9vbDoKPiAtCW1l bXBvb2xfZXhpdCgmcGJsay0+Z2VuX3dzX3Bvb2wpOwo+IC1mcmVlX3BhZ2VfYmlvX3Bvb2w6Cj4g LQltZW1wb29sX2V4aXQoJnBibGstPnBhZ2VfYmlvX3Bvb2wpOwo+IC1mcmVlX2dsb2JhbF9jYWNo ZXM6Cj4gLQlwYmxrX3B1dF9nbG9iYWxfY2FjaGVzKCk7Cj4gLWZhaWxfZnJlZV9wYWRfZGlzdDoK PiAtCWtmcmVlKHBibGstPnBhZF9kaXN0KTsKPiAtCXJldHVybiAtRU5PTUVNOwo+IC19Cj4gLQo+ IC1zdGF0aWMgdm9pZCBwYmxrX2NvcmVfZnJlZShzdHJ1Y3QgcGJsayAqcGJsaykKPiAtewo+IC0J aWYgKHBibGstPmNsb3NlX3dxKQo+IC0JCWRlc3Ryb3lfd29ya3F1ZXVlKHBibGstPmNsb3NlX3dx KTsKPiAtCj4gLQlpZiAocGJsay0+cl9lbmRfd3EpCj4gLQkJZGVzdHJveV93b3JrcXVldWUocGJs ay0+cl9lbmRfd3EpOwo+IC0KPiAtCWlmIChwYmxrLT5iYl93cSkKPiAtCQlkZXN0cm95X3dvcmtx dWV1ZShwYmxrLT5iYl93cSk7Cj4gLQo+IC0JbWVtcG9vbF9leGl0KCZwYmxrLT5wYWdlX2Jpb19w b29sKTsKPiAtCW1lbXBvb2xfZXhpdCgmcGJsay0+Z2VuX3dzX3Bvb2wpOwo+IC0JbWVtcG9vbF9l eGl0KCZwYmxrLT5yZWNfcG9vbCk7Cj4gLQltZW1wb29sX2V4aXQoJnBibGstPnJfcnFfcG9vbCk7 Cj4gLQltZW1wb29sX2V4aXQoJnBibGstPmVfcnFfcG9vbCk7Cj4gLQltZW1wb29sX2V4aXQoJnBi bGstPndfcnFfcG9vbCk7Cj4gLQo+IC0JcGJsa19wdXRfZ2xvYmFsX2NhY2hlcygpOwo+IC0Ja2Zy ZWUocGJsay0+cGFkX2Rpc3QpOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBwYmxrX2xpbmVfbWdf ZnJlZShzdHJ1Y3QgcGJsayAqcGJsaykKPiAtewo+IC0Jc3RydWN0IHBibGtfbGluZV9tZ210ICps X21nID0gJnBibGstPmxfbWc7Cj4gLQlpbnQgaTsKPiAtCj4gLQlrZnJlZShsX21nLT5iYl90ZW1w bGF0ZSk7Cj4gLQlrZnJlZShsX21nLT5iYl9hdXgpOwo+IC0Ja2ZyZWUobF9tZy0+dnNjX2xpc3Qp Owo+IC0KPiAtCWZvciAoaSA9IDA7IGkgPCBQQkxLX0RBVEFfTElORVM7IGkrKykgewo+IC0JCWtm cmVlKGxfbWctPnNsaW5lX21ldGFbaV0pOwo+IC0JCWt2ZnJlZShsX21nLT5lbGluZV9tZXRhW2ld LT5idWYpOwo+IC0JCWtmcmVlKGxfbWctPmVsaW5lX21ldGFbaV0pOwo+IC0JfQo+IC0KPiAtCW1l bXBvb2xfZGVzdHJveShsX21nLT5iaXRtYXBfcG9vbCk7Cj4gLQlrbWVtX2NhY2hlX2Rlc3Ryb3ko bF9tZy0+Yml0bWFwX2NhY2hlKTsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgcGJsa19saW5lX21l dGFfZnJlZShzdHJ1Y3QgcGJsa19saW5lX21nbXQgKmxfbWcsCj4gLQkJCQlzdHJ1Y3QgcGJsa19s aW5lICpsaW5lKQo+IC17Cj4gLQlzdHJ1Y3QgcGJsa193X2Vycl9nYyAqd19lcnJfZ2MgPSBsaW5l LT53X2Vycl9nYzsKPiAtCj4gLQlrZnJlZShsaW5lLT5ibGtfYml0bWFwKTsKPiAtCWtmcmVlKGxp bmUtPmVyYXNlX2JpdG1hcCk7Cj4gLQlrZnJlZShsaW5lLT5jaGtzKTsKPiAtCj4gLQlrdmZyZWUo d19lcnJfZ2MtPmxiYV9saXN0KTsKPiAtCWtmcmVlKHdfZXJyX2djKTsKPiAtfQo+IC0KPiAtc3Rh dGljIHZvaWQgcGJsa19saW5lc19mcmVlKHN0cnVjdCBwYmxrICpwYmxrKQo+IC17Cj4gLQlzdHJ1 Y3QgcGJsa19saW5lX21nbXQgKmxfbWcgPSAmcGJsay0+bF9tZzsKPiAtCXN0cnVjdCBwYmxrX2xp bmUgKmxpbmU7Cj4gLQlpbnQgaTsKPiAtCj4gLQlmb3IgKGkgPSAwOyBpIDwgbF9tZy0+bnJfbGlu ZXM7IGkrKykgewo+IC0JCWxpbmUgPSAmcGJsay0+bGluZXNbaV07Cj4gLQo+IC0JCXBibGtfbGlu ZV9mcmVlKGxpbmUpOwo+IC0JCXBibGtfbGluZV9tZXRhX2ZyZWUobF9tZywgbGluZSk7Cj4gLQl9 Cj4gLQo+IC0JcGJsa19saW5lX21nX2ZyZWUocGJsayk7Cj4gLQo+IC0Ja2ZyZWUocGJsay0+bHVu cyk7Cj4gLQlrZnJlZShwYmxrLT5saW5lcyk7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbnQgcGJsa19s dW5zX2luaXQoc3RydWN0IHBibGsgKnBibGspCj4gLXsKPiAtCXN0cnVjdCBudm1fdGd0X2RldiAq ZGV2ID0gcGJsay0+ZGV2Owo+IC0Jc3RydWN0IG52bV9nZW8gKmdlbyA9ICZkZXYtPmdlbzsKPiAt CXN0cnVjdCBwYmxrX2x1biAqcmx1bjsKPiAtCWludCBpOwo+IC0KPiAtCS8qIFRPRE86IEltcGxl bWVudCB1bmJhbGFuY2VkIExVTiBzdXBwb3J0ICovCj4gLQlpZiAoZ2VvLT5udW1fbHVuIDwgMCkg ewo+IC0JCXBibGtfZXJyKHBibGssICJ1bmJhbGFuY2VkIExVTiBjb25maWcuXG4iKTsKPiAtCQly ZXR1cm4gLUVJTlZBTDsKPiAtCX0KPiAtCj4gLQlwYmxrLT5sdW5zID0ga2NhbGxvYyhnZW8tPmFs bF9sdW5zLCBzaXplb2Yoc3RydWN0IHBibGtfbHVuKSwKPiAtCQkJCQkJCQlHRlBfS0VSTkVMKTsK PiAtCWlmICghcGJsay0+bHVucykKPiAtCQlyZXR1cm4gLUVOT01FTTsKPiAtCj4gLQlmb3IgKGkg PSAwOyBpIDwgZ2VvLT5hbGxfbHVuczsgaSsrKSB7Cj4gLQkJLyogU3RyaXBlIGFjcm9zcyBjaGFu bmVscyAqLwo+IC0JCWludCBjaCA9IGkgJSBnZW8tPm51bV9jaDsKPiAtCQlpbnQgbHVuX3JhdyA9 IGkgLyBnZW8tPm51bV9jaDsKPiAtCQlpbnQgbHVuaWQgPSBsdW5fcmF3ICsgY2ggKiBnZW8tPm51 bV9sdW47Cj4gLQo+IC0JCXJsdW4gPSAmcGJsay0+bHVuc1tpXTsKPiAtCQlybHVuLT5icHBhID0g ZGV2LT5sdW5zW2x1bmlkXTsKPiAtCj4gLQkJc2VtYV9pbml0KCZybHVuLT53cl9zZW0sIDEpOwo+ IC0JfQo+IC0KPiAtCXJldHVybiAwOwo+IC19Cj4gLQo+IC0vKiBTZWUgY29tbWVudCBvdmVyIHN0 cnVjdCBsaW5lX2VtZXRhIGRlZmluaXRpb24gKi8KPiAtc3RhdGljIHVuc2lnbmVkIGludCBjYWxj X2VtZXRhX2xlbihzdHJ1Y3QgcGJsayAqcGJsaykKPiAtewo+IC0Jc3RydWN0IHBibGtfbGluZV9t ZXRhICpsbSA9ICZwYmxrLT5sbTsKPiAtCXN0cnVjdCBwYmxrX2xpbmVfbWdtdCAqbF9tZyA9ICZw YmxrLT5sX21nOwo+IC0Jc3RydWN0IG52bV90Z3RfZGV2ICpkZXYgPSBwYmxrLT5kZXY7Cj4gLQlz dHJ1Y3QgbnZtX2dlbyAqZ2VvID0gJmRldi0+Z2VvOwo+IC0KPiAtCS8qIFJvdW5kIHRvIHNlY3Rv ciBzaXplIHNvIHRoYXQgbGJhX2xpc3Qgc3RhcnRzIG9uIGl0cyBvd24gc2VjdG9yICovCj4gLQls bS0+ZW1ldGFfc2VjWzFdID0gRElWX1JPVU5EX1VQKAo+IC0JCQlzaXplb2Yoc3RydWN0IGxpbmVf ZW1ldGEpICsgbG0tPmJsa19iaXRtYXBfbGVuICsKPiAtCQkJc2l6ZW9mKHN0cnVjdCB3YV9jb3Vu dGVycyksIGdlby0+Y3NlY3MpOwo+IC0JbG0tPmVtZXRhX2xlblsxXSA9IGxtLT5lbWV0YV9zZWNb MV0gKiBnZW8tPmNzZWNzOwo+IC0KPiAtCS8qIFJvdW5kIHRvIHNlY3RvciBzaXplIHNvIHRoYXQg dnNjX2xpc3Qgc3RhcnRzIG9uIGl0cyBvd24gc2VjdG9yICovCj4gLQlsbS0+ZHNlY19wZXJfbGlu ZSA9IGxtLT5zZWNfcGVyX2xpbmUgLSBsbS0+ZW1ldGFfc2VjWzBdOwo+IC0JbG0tPmVtZXRhX3Nl Y1syXSA9IERJVl9ST1VORF9VUChsbS0+ZHNlY19wZXJfbGluZSAqIHNpemVvZih1NjQpLAo+IC0J CQlnZW8tPmNzZWNzKTsKPiAtCWxtLT5lbWV0YV9sZW5bMl0gPSBsbS0+ZW1ldGFfc2VjWzJdICog Z2VvLT5jc2VjczsKPiAtCj4gLQlsbS0+ZW1ldGFfc2VjWzNdID0gRElWX1JPVU5EX1VQKGxfbWct Pm5yX2xpbmVzICogc2l6ZW9mKHUzMiksCj4gLQkJCWdlby0+Y3NlY3MpOwo+IC0JbG0tPmVtZXRh X2xlblszXSA9IGxtLT5lbWV0YV9zZWNbM10gKiBnZW8tPmNzZWNzOwo+IC0KPiAtCWxtLT52c2Nf bGlzdF9sZW4gPSBsX21nLT5ucl9saW5lcyAqIHNpemVvZih1MzIpOwo+IC0KPiAtCXJldHVybiAo bG0tPmVtZXRhX2xlblsxXSArIGxtLT5lbWV0YV9sZW5bMl0gKyBsbS0+ZW1ldGFfbGVuWzNdKTsK PiAtfQo+IC0KPiAtc3RhdGljIGludCBwYmxrX3NldF9wcm92aXNpb24oc3RydWN0IHBibGsgKnBi bGssIGludCBucl9mcmVlX2Noa3MpCj4gLXsKPiAtCXN0cnVjdCBudm1fdGd0X2RldiAqZGV2ID0g cGJsay0+ZGV2Owo+IC0Jc3RydWN0IHBibGtfbGluZV9tZ210ICpsX21nID0gJnBibGstPmxfbWc7 Cj4gLQlzdHJ1Y3QgcGJsa19saW5lX21ldGEgKmxtID0gJnBibGstPmxtOwo+IC0Jc3RydWN0IG52 bV9nZW8gKmdlbyA9ICZkZXYtPmdlbzsKPiAtCXNlY3Rvcl90IHByb3Zpc2lvbmVkOwo+IC0JaW50 IHNlY19tZXRhLCBibGtfbWV0YSwgY2xiYTsKPiAtCWludCBtaW5pbXVtOwo+IC0KPiAtCWlmIChn ZW8tPm9wID09IE5WTV9UQVJHRVRfREVGQVVMVF9PUCkKPiAtCQlwYmxrLT5vcCA9IFBCTEtfREVG QVVMVF9PUDsKPiAtCWVsc2UKPiAtCQlwYmxrLT5vcCA9IGdlby0+b3A7Cj4gLQo+IC0JbWluaW11 bSA9IHBibGtfZ2V0X21pbl9jaGtzKHBibGspOwo+IC0JcHJvdmlzaW9uZWQgPSBucl9mcmVlX2No a3M7Cj4gLQlwcm92aXNpb25lZCAqPSAoMTAwIC0gcGJsay0+b3ApOwo+IC0Jc2VjdG9yX2Rpdihw cm92aXNpb25lZCwgMTAwKTsKPiAtCj4gLQlpZiAoKG5yX2ZyZWVfY2hrcyAtIHByb3Zpc2lvbmVk KSA8IG1pbmltdW0pIHsKPiAtCQlpZiAoZ2VvLT5vcCAhPSBOVk1fVEFSR0VUX0RFRkFVTFRfT1Ap IHsKPiAtCQkJcGJsa19lcnIocGJsaywgIk9QIHRvbyBzbWFsbCB0byBjcmVhdGUgYSBzYW5lIGlu c3RhbmNlXG4iKTsKPiAtCQkJcmV0dXJuIC1FSU5UUjsKPiAtCQl9Cj4gLQo+IC0JCS8qIElmIHRo ZSB1c2VyIGRpZCBub3Qgc3BlY2lmeSBhbiBPUCB2YWx1ZSwgYW5kIFBCTEtfREVGQVVMVF9PUAo+ IC0JCSAqIGlzIG5vdCBlbm91Z2gsIGNhbGN1bGF0ZSBhbmQgc2V0IHNhbmUgdmFsdWUKPiAtCQkg Ki8KPiAtCj4gLQkJcHJvdmlzaW9uZWQgPSBucl9mcmVlX2Noa3MgLSBtaW5pbXVtOwo+IC0JCXBi bGstPm9wID0gICgxMDAgKiBtaW5pbXVtKSAvIG5yX2ZyZWVfY2hrczsKPiAtCQlwYmxrX2luZm8o cGJsaywgIkRlZmF1bHQgT1AgaW5zdWZmaWNpZW50LCBhZGp1c3RpbmcgT1AgdG8gJWRcbiIsCj4g LQkJCQlwYmxrLT5vcCk7Cj4gLQl9Cj4gLQo+IC0JcGJsay0+b3BfYmxrcyA9IG5yX2ZyZWVfY2hr cyAtIHByb3Zpc2lvbmVkOwo+IC0KPiAtCS8qIEludGVybmFsbHkgcGJsayBtYW5hZ2VzIGFsbCBm cmVlIGJsb2NrcywgYnV0IGFsbCBjYWxjdWxhdGlvbnMgYmFzZWQKPiAtCSAqIG9uIHVzZXIgY2Fw YWNpdHkgY29uc2lkZXIgb25seSBwcm92aXNpb25lZCBibG9ja3MKPiAtCSAqLwo+IC0JcGJsay0+ cmwudG90YWxfYmxvY2tzID0gbnJfZnJlZV9jaGtzOwo+IC0KPiAtCS8qIENvbnNpZGVyIHNlY3Rv cnMgdXNlZCBmb3IgbWV0YWRhdGEgKi8KPiAtCXNlY19tZXRhID0gKGxtLT5zbWV0YV9zZWMgKyBs bS0+ZW1ldGFfc2VjWzBdKSAqIGxfbWctPm5yX2ZyZWVfbGluZXM7Cj4gLQlibGtfbWV0YSA9IERJ Vl9ST1VORF9VUChzZWNfbWV0YSwgZ2VvLT5jbGJhKTsKPiAtCj4gLQljbGJhID0gKGdlby0+Y2xi YSAvIHBibGstPm1pbl93cml0ZV9wZ3MpICogcGJsay0+bWluX3dyaXRlX3Bnc19kYXRhOwo+IC0J cGJsay0+Y2FwYWNpdHkgPSAocHJvdmlzaW9uZWQgLSBibGtfbWV0YSkgKiBjbGJhOwo+IC0KPiAt CWF0b21pY19zZXQoJnBibGstPnJsLmZyZWVfYmxvY2tzLCBucl9mcmVlX2Noa3MpOwo+IC0JYXRv bWljX3NldCgmcGJsay0+cmwuZnJlZV91c2VyX2Jsb2NrcywgbnJfZnJlZV9jaGtzKTsKPiAtCj4g LQlyZXR1cm4gMDsKPiAtfQo+IC0KPiAtc3RhdGljIGludCBwYmxrX3NldHVwX2xpbmVfbWV0YV9j aGsoc3RydWN0IHBibGsgKnBibGssIHN0cnVjdCBwYmxrX2xpbmUgKmxpbmUsCj4gLQkJCQkgICBz dHJ1Y3QgbnZtX2Noa19tZXRhICptZXRhKQo+IC17Cj4gLQlzdHJ1Y3QgbnZtX3RndF9kZXYgKmRl diA9IHBibGstPmRldjsKPiAtCXN0cnVjdCBudm1fZ2VvICpnZW8gPSAmZGV2LT5nZW87Cj4gLQlz dHJ1Y3QgcGJsa19saW5lX21ldGEgKmxtID0gJnBibGstPmxtOwo+IC0JaW50IGksIG5yX2JhZF9j aGtzID0gMDsKPiAtCj4gLQlmb3IgKGkgPSAwOyBpIDwgbG0tPmJsa19wZXJfbGluZTsgaSsrKSB7 Cj4gLQkJc3RydWN0IHBibGtfbHVuICpybHVuID0gJnBibGstPmx1bnNbaV07Cj4gLQkJc3RydWN0 IG52bV9jaGtfbWV0YSAqY2h1bms7Cj4gLQkJc3RydWN0IG52bV9jaGtfbWV0YSAqY2h1bmtfbWV0 YTsKPiAtCQlzdHJ1Y3QgcHBhX2FkZHIgcHBhOwo+IC0JCWludCBwb3M7Cj4gLQo+IC0JCXBwYSA9 IHJsdW4tPmJwcGE7Cj4gLQkJcG9zID0gcGJsa19wcGFfdG9fcG9zKGdlbywgcHBhKTsKPiAtCQlj aHVuayA9ICZsaW5lLT5jaGtzW3Bvc107Cj4gLQo+IC0JCXBwYS5tLmNoayA9IGxpbmUtPmlkOwo+ IC0JCWNodW5rX21ldGEgPSBwYmxrX2NodW5rX2dldF9vZmYocGJsaywgbWV0YSwgcHBhKTsKPiAt Cj4gLQkJY2h1bmstPnN0YXRlID0gY2h1bmtfbWV0YS0+c3RhdGU7Cj4gLQkJY2h1bmstPnR5cGUg PSBjaHVua19tZXRhLT50eXBlOwo+IC0JCWNodW5rLT53aSA9IGNodW5rX21ldGEtPndpOwo+IC0J CWNodW5rLT5zbGJhID0gY2h1bmtfbWV0YS0+c2xiYTsKPiAtCQljaHVuay0+Y25sYiA9IGNodW5r X21ldGEtPmNubGI7Cj4gLQkJY2h1bmstPndwID0gY2h1bmtfbWV0YS0+d3A7Cj4gLQo+IC0JCXRy YWNlX3BibGtfY2h1bmtfc3RhdGUocGJsa19kaXNrX25hbWUocGJsayksICZwcGEsCj4gLQkJCQkJ Y2h1bmstPnN0YXRlKTsKPiAtCj4gLQkJaWYgKGNodW5rLT50eXBlICYgTlZNX0NIS19UUF9TWl9T UEVDKSB7Cj4gLQkJCVdBUk5fT05DRSgxLCAicGJsazogY3VzdG9tLXNpemVkIGNodW5rcyB1bnN1 cHBvcnRlZFxuIik7Cj4gLQkJCWNvbnRpbnVlOwo+IC0JCX0KPiAtCj4gLQkJaWYgKCEoY2h1bmst PnN0YXRlICYgTlZNX0NIS19TVF9PRkZMSU5FKSkKPiAtCQkJY29udGludWU7Cj4gLQo+IC0JCXNl dF9iaXQocG9zLCBsaW5lLT5ibGtfYml0bWFwKTsKPiAtCQlucl9iYWRfY2hrcysrOwo+IC0JfQo+ IC0KPiAtCXJldHVybiBucl9iYWRfY2hrczsKPiAtfQo+IC0KPiAtc3RhdGljIGxvbmcgcGJsa19z ZXR1cF9saW5lX21ldGEoc3RydWN0IHBibGsgKnBibGssIHN0cnVjdCBwYmxrX2xpbmUgKmxpbmUs Cj4gLQkJCQkgdm9pZCAqY2h1bmtfbWV0YSwgaW50IGxpbmVfaWQpCj4gLXsKPiAtCXN0cnVjdCBw YmxrX2xpbmVfbWdtdCAqbF9tZyA9ICZwYmxrLT5sX21nOwo+IC0Jc3RydWN0IHBibGtfbGluZV9t ZXRhICpsbSA9ICZwYmxrLT5sbTsKPiAtCWxvbmcgbnJfYmFkX2Noa3MsIGNoa19pbl9saW5lOwo+ IC0KPiAtCWxpbmUtPnBibGsgPSBwYmxrOwo+IC0JbGluZS0+aWQgPSBsaW5lX2lkOwo+IC0JbGlu ZS0+dHlwZSA9IFBCTEtfTElORVRZUEVfRlJFRTsKPiAtCWxpbmUtPnN0YXRlID0gUEJMS19MSU5F U1RBVEVfTkVXOwo+IC0JbGluZS0+Z2NfZ3JvdXAgPSBQQkxLX0xJTkVHQ19OT05FOwo+IC0JbGlu ZS0+dnNjID0gJmxfbWctPnZzY19saXN0W2xpbmVfaWRdOwo+IC0Jc3Bpbl9sb2NrX2luaXQoJmxp bmUtPmxvY2spOwo+IC0KPiAtCW5yX2JhZF9jaGtzID0gcGJsa19zZXR1cF9saW5lX21ldGFfY2hr KHBibGssIGxpbmUsIGNodW5rX21ldGEpOwo+IC0KPiAtCWNoa19pbl9saW5lID0gbG0tPmJsa19w ZXJfbGluZSAtIG5yX2JhZF9jaGtzOwo+IC0JaWYgKG5yX2JhZF9jaGtzIDwgMCB8fCBucl9iYWRf Y2hrcyA+IGxtLT5ibGtfcGVyX2xpbmUgfHwKPiAtCQkJCQljaGtfaW5fbGluZSA8IGxtLT5taW5f YmxrX2xpbmUpIHsKPiAtCQlsaW5lLT5zdGF0ZSA9IFBCTEtfTElORVNUQVRFX0JBRDsKPiAtCQls aXN0X2FkZF90YWlsKCZsaW5lLT5saXN0LCAmbF9tZy0+YmFkX2xpc3QpOwo+IC0JCXJldHVybiAw Owo+IC0JfQo+IC0KPiAtCWF0b21pY19zZXQoJmxpbmUtPmJsa19pbl9saW5lLCBjaGtfaW5fbGlu ZSk7Cj4gLQlsaXN0X2FkZF90YWlsKCZsaW5lLT5saXN0LCAmbF9tZy0+ZnJlZV9saXN0KTsKPiAt CWxfbWctPm5yX2ZyZWVfbGluZXMrKzsKPiAtCj4gLQlyZXR1cm4gY2hrX2luX2xpbmU7Cj4gLX0K PiAtCj4gLXN0YXRpYyBpbnQgcGJsa19hbGxvY19saW5lX21ldGEoc3RydWN0IHBibGsgKnBibGss IHN0cnVjdCBwYmxrX2xpbmUgKmxpbmUpCj4gLXsKPiAtCXN0cnVjdCBwYmxrX2xpbmVfbWV0YSAq bG0gPSAmcGJsay0+bG07Cj4gLQo+IC0JbGluZS0+YmxrX2JpdG1hcCA9IGt6YWxsb2MobG0tPmJs a19iaXRtYXBfbGVuLCBHRlBfS0VSTkVMKTsKPiAtCWlmICghbGluZS0+YmxrX2JpdG1hcCkKPiAt CQlyZXR1cm4gLUVOT01FTTsKPiAtCj4gLQlsaW5lLT5lcmFzZV9iaXRtYXAgPSBremFsbG9jKGxt LT5ibGtfYml0bWFwX2xlbiwgR0ZQX0tFUk5FTCk7Cj4gLQlpZiAoIWxpbmUtPmVyYXNlX2JpdG1h cCkKPiAtCQlnb3RvIGZyZWVfYmxrX2JpdG1hcDsKPiAtCj4gLQo+IC0JbGluZS0+Y2hrcyA9IGtt YWxsb2NfYXJyYXkobG0tPmJsa19wZXJfbGluZSwKPiAtCQkJCSAgIHNpemVvZihzdHJ1Y3QgbnZt X2Noa19tZXRhKSwgR0ZQX0tFUk5FTCk7Cj4gLQlpZiAoIWxpbmUtPmNoa3MpCj4gLQkJZ290byBm cmVlX2VyYXNlX2JpdG1hcDsKPiAtCj4gLQlsaW5lLT53X2Vycl9nYyA9IGt6YWxsb2Moc2l6ZW9m KHN0cnVjdCBwYmxrX3dfZXJyX2djKSwgR0ZQX0tFUk5FTCk7Cj4gLQlpZiAoIWxpbmUtPndfZXJy X2djKQo+IC0JCWdvdG8gZnJlZV9jaGtzOwo+IC0KPiAtCXJldHVybiAwOwo+IC0KPiAtZnJlZV9j aGtzOgo+IC0Ja2ZyZWUobGluZS0+Y2hrcyk7Cj4gLWZyZWVfZXJhc2VfYml0bWFwOgo+IC0Ja2Zy ZWUobGluZS0+ZXJhc2VfYml0bWFwKTsKPiAtZnJlZV9ibGtfYml0bWFwOgo+IC0Ja2ZyZWUobGlu ZS0+YmxrX2JpdG1hcCk7Cj4gLQlyZXR1cm4gLUVOT01FTTsKPiAtfQo+IC0KPiAtc3RhdGljIGlu dCBwYmxrX2xpbmVfbWdfaW5pdChzdHJ1Y3QgcGJsayAqcGJsaykKPiAtewo+IC0Jc3RydWN0IG52 bV90Z3RfZGV2ICpkZXYgPSBwYmxrLT5kZXY7Cj4gLQlzdHJ1Y3QgbnZtX2dlbyAqZ2VvID0gJmRl di0+Z2VvOwo+IC0Jc3RydWN0IHBibGtfbGluZV9tZ210ICpsX21nID0gJnBibGstPmxfbWc7Cj4g LQlzdHJ1Y3QgcGJsa19saW5lX21ldGEgKmxtID0gJnBibGstPmxtOwo+IC0JaW50IGksIGJiX2Rp c3RhbmNlOwo+IC0KPiAtCWxfbWctPm5yX2xpbmVzID0gZ2VvLT5udW1fY2hrOwo+IC0JbF9tZy0+ bG9nX2xpbmUgPSBsX21nLT5kYXRhX2xpbmUgPSBOVUxMOwo+IC0JbF9tZy0+bF9zZXFfbnIgPSBs X21nLT5kX3NlcV9uciA9IDA7Cj4gLQlsX21nLT5ucl9mcmVlX2xpbmVzID0gMDsKPiAtCWJpdG1h cF96ZXJvKCZsX21nLT5tZXRhX2JpdG1hcCwgUEJMS19EQVRBX0xJTkVTKTsKPiAtCj4gLQlJTklU X0xJU1RfSEVBRCgmbF9tZy0+ZnJlZV9saXN0KTsKPiAtCUlOSVRfTElTVF9IRUFEKCZsX21nLT5j b3JydXB0X2xpc3QpOwo+IC0JSU5JVF9MSVNUX0hFQUQoJmxfbWctPmJhZF9saXN0KTsKPiAtCUlO SVRfTElTVF9IRUFEKCZsX21nLT5nY19mdWxsX2xpc3QpOwo+IC0JSU5JVF9MSVNUX0hFQUQoJmxf bWctPmdjX2hpZ2hfbGlzdCk7Cj4gLQlJTklUX0xJU1RfSEVBRCgmbF9tZy0+Z2NfbWlkX2xpc3Qp Owo+IC0JSU5JVF9MSVNUX0hFQUQoJmxfbWctPmdjX2xvd19saXN0KTsKPiAtCUlOSVRfTElTVF9I RUFEKCZsX21nLT5nY19lbXB0eV9saXN0KTsKPiAtCUlOSVRfTElTVF9IRUFEKCZsX21nLT5nY193 ZXJyX2xpc3QpOwo+IC0KPiAtCUlOSVRfTElTVF9IRUFEKCZsX21nLT5lbWV0YV9saXN0KTsKPiAt Cj4gLQlsX21nLT5nY19saXN0c1swXSA9ICZsX21nLT5nY193ZXJyX2xpc3Q7Cj4gLQlsX21nLT5n Y19saXN0c1sxXSA9ICZsX21nLT5nY19oaWdoX2xpc3Q7Cj4gLQlsX21nLT5nY19saXN0c1syXSA9 ICZsX21nLT5nY19taWRfbGlzdDsKPiAtCWxfbWctPmdjX2xpc3RzWzNdID0gJmxfbWctPmdjX2xv d19saXN0Owo+IC0KPiAtCXNwaW5fbG9ja19pbml0KCZsX21nLT5mcmVlX2xvY2spOwo+IC0Jc3Bp bl9sb2NrX2luaXQoJmxfbWctPmNsb3NlX2xvY2spOwo+IC0Jc3Bpbl9sb2NrX2luaXQoJmxfbWct PmdjX2xvY2spOwo+IC0KPiAtCWxfbWctPnZzY19saXN0ID0ga2NhbGxvYyhsX21nLT5ucl9saW5l cywgc2l6ZW9mKF9fbGUzMiksIEdGUF9LRVJORUwpOwo+IC0JaWYgKCFsX21nLT52c2NfbGlzdCkK PiAtCQlnb3RvIGZhaWw7Cj4gLQo+IC0JbF9tZy0+YmJfdGVtcGxhdGUgPSBremFsbG9jKGxtLT5z ZWNfYml0bWFwX2xlbiwgR0ZQX0tFUk5FTCk7Cj4gLQlpZiAoIWxfbWctPmJiX3RlbXBsYXRlKQo+ IC0JCWdvdG8gZmFpbF9mcmVlX3ZzY19saXN0Owo+IC0KPiAtCWxfbWctPmJiX2F1eCA9IGt6YWxs b2MobG0tPnNlY19iaXRtYXBfbGVuLCBHRlBfS0VSTkVMKTsKPiAtCWlmICghbF9tZy0+YmJfYXV4 KQo+IC0JCWdvdG8gZmFpbF9mcmVlX2JiX3RlbXBsYXRlOwo+IC0KPiAtCS8qIHNtZXRhIGlzIGFs d2F5cyBzbWFsbCBlbm91Z2ggdG8gZml0IG9uIGEga21hbGxvYyBtZW1vcnkgYWxsb2NhdGlvbiwK PiAtCSAqIGVtZXRhIGRlcGVuZHMgb24gdGhlIG51bWJlciBvZiBMVU5zIGFsbG9jYXRlZCB0byB0 aGUgcGJsayBpbnN0YW5jZQo+IC0JICovCj4gLQlmb3IgKGkgPSAwOyBpIDwgUEJMS19EQVRBX0xJ TkVTOyBpKyspIHsKPiAtCQlsX21nLT5zbGluZV9tZXRhW2ldID0ga21hbGxvYyhsbS0+c21ldGFf bGVuLCBHRlBfS0VSTkVMKTsKPiAtCQlpZiAoIWxfbWctPnNsaW5lX21ldGFbaV0pCj4gLQkJCWdv dG8gZmFpbF9mcmVlX3NtZXRhOwo+IC0JfQo+IC0KPiAtCWxfbWctPmJpdG1hcF9jYWNoZSA9IGtt ZW1fY2FjaGVfY3JlYXRlKCJwYmxrX2xtX2JpdG1hcCIsCj4gLQkJCWxtLT5zZWNfYml0bWFwX2xl biwgMCwgMCwgTlVMTCk7Cj4gLQlpZiAoIWxfbWctPmJpdG1hcF9jYWNoZSkKPiAtCQlnb3RvIGZh aWxfZnJlZV9zbWV0YTsKPiAtCj4gLQkvKiB0aGUgYml0bWFwIHBvb2wgaXMgdXNlZCBmb3IgYm90 aCB2YWxpZCBhbmQgbWFwIGJpdG1hcHMgKi8KPiAtCWxfbWctPmJpdG1hcF9wb29sID0gbWVtcG9v bF9jcmVhdGVfc2xhYl9wb29sKFBCTEtfREFUQV9MSU5FUyAqIDIsCj4gLQkJCQlsX21nLT5iaXRt YXBfY2FjaGUpOwo+IC0JaWYgKCFsX21nLT5iaXRtYXBfcG9vbCkKPiAtCQlnb3RvIGZhaWxfZGVz dHJveV9iaXRtYXBfY2FjaGU7Cj4gLQo+IC0JLyogZW1ldGEgYWxsb2NhdGVzIHRocmVlIGRpZmZl cmVudCBidWZmZXJzIGZvciBtYW5hZ2luZyBtZXRhZGF0YSB3aXRoCj4gLQkgKiBpbi1tZW1vcnkg YW5kIGluLW1lZGlhIGxheW91dHMKPiAtCSAqLwo+IC0JZm9yIChpID0gMDsgaSA8IFBCTEtfREFU QV9MSU5FUzsgaSsrKSB7Cj4gLQkJc3RydWN0IHBibGtfZW1ldGEgKmVtZXRhOwo+IC0KPiAtCQll bWV0YSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwYmxrX2VtZXRhKSwgR0ZQX0tFUk5FTCk7Cj4g LQkJaWYgKCFlbWV0YSkKPiAtCQkJZ290byBmYWlsX2ZyZWVfZW1ldGE7Cj4gLQo+IC0JCWVtZXRh LT5idWYgPSBrdm1hbGxvYyhsbS0+ZW1ldGFfbGVuWzBdLCBHRlBfS0VSTkVMKTsKPiAtCQlpZiAo IWVtZXRhLT5idWYpIHsKPiAtCQkJa2ZyZWUoZW1ldGEpOwo+IC0JCQlnb3RvIGZhaWxfZnJlZV9l bWV0YTsKPiAtCQl9Cj4gLQo+IC0JCWVtZXRhLT5ucl9lbnRyaWVzID0gbG0tPmVtZXRhX3NlY1sw XTsKPiAtCQlsX21nLT5lbGluZV9tZXRhW2ldID0gZW1ldGE7Cj4gLQl9Cj4gLQo+IC0JZm9yIChp ID0gMDsgaSA8IGxfbWctPm5yX2xpbmVzOyBpKyspCj4gLQkJbF9tZy0+dnNjX2xpc3RbaV0gPSBj cHVfdG9fbGUzMihFTVBUWV9FTlRSWSk7Cj4gLQo+IC0JYmJfZGlzdGFuY2UgPSAoZ2VvLT5hbGxf bHVucykgKiBnZW8tPndzX29wdDsKPiAtCWZvciAoaSA9IDA7IGkgPCBsbS0+c2VjX3Blcl9saW5l OyBpICs9IGJiX2Rpc3RhbmNlKQo+IC0JCWJpdG1hcF9zZXQobF9tZy0+YmJfdGVtcGxhdGUsIGks IGdlby0+d3Nfb3B0KTsKPiAtCj4gLQlyZXR1cm4gMDsKPiAtCj4gLWZhaWxfZnJlZV9lbWV0YToK PiAtCXdoaWxlICgtLWkgPj0gMCkgewo+IC0JCWt2ZnJlZShsX21nLT5lbGluZV9tZXRhW2ldLT5i dWYpOwo+IC0JCWtmcmVlKGxfbWctPmVsaW5lX21ldGFbaV0pOwo+IC0JfQo+IC0KPiAtCW1lbXBv b2xfZGVzdHJveShsX21nLT5iaXRtYXBfcG9vbCk7Cj4gLWZhaWxfZGVzdHJveV9iaXRtYXBfY2Fj aGU6Cj4gLQlrbWVtX2NhY2hlX2Rlc3Ryb3kobF9tZy0+Yml0bWFwX2NhY2hlKTsKPiAtZmFpbF9m cmVlX3NtZXRhOgo+IC0JZm9yIChpID0gMDsgaSA8IFBCTEtfREFUQV9MSU5FUzsgaSsrKQo+IC0J CWtmcmVlKGxfbWctPnNsaW5lX21ldGFbaV0pOwo+IC0Ja2ZyZWUobF9tZy0+YmJfYXV4KTsKPiAt ZmFpbF9mcmVlX2JiX3RlbXBsYXRlOgo+IC0Ja2ZyZWUobF9tZy0+YmJfdGVtcGxhdGUpOwo+IC1m YWlsX2ZyZWVfdnNjX2xpc3Q6Cj4gLQlrZnJlZShsX21nLT52c2NfbGlzdCk7Cj4gLWZhaWw6Cj4g LQlyZXR1cm4gLUVOT01FTTsKPiAtfQo+IC0KPiAtc3RhdGljIGludCBwYmxrX2xpbmVfbWV0YV9p bml0KHN0cnVjdCBwYmxrICpwYmxrKQo+IC17Cj4gLQlzdHJ1Y3QgbnZtX3RndF9kZXYgKmRldiA9 IHBibGstPmRldjsKPiAtCXN0cnVjdCBudm1fZ2VvICpnZW8gPSAmZGV2LT5nZW87Cj4gLQlzdHJ1 Y3QgcGJsa19saW5lX21ldGEgKmxtID0gJnBibGstPmxtOwo+IC0JdW5zaWduZWQgaW50IHNtZXRh X2xlbiwgZW1ldGFfbGVuOwo+IC0JaW50IGk7Cj4gLQo+IC0JbG0tPnNlY19wZXJfbGluZSA9IGdl by0+Y2xiYSAqIGdlby0+YWxsX2x1bnM7Cj4gLQlsbS0+YmxrX3Blcl9saW5lID0gZ2VvLT5hbGxf bHVuczsKPiAtCWxtLT5ibGtfYml0bWFwX2xlbiA9IEJJVFNfVE9fTE9OR1MoZ2VvLT5hbGxfbHVu cykgKiBzaXplb2YobG9uZyk7Cj4gLQlsbS0+c2VjX2JpdG1hcF9sZW4gPSBCSVRTX1RPX0xPTkdT KGxtLT5zZWNfcGVyX2xpbmUpICogc2l6ZW9mKGxvbmcpOwo+IC0JbG0tPmx1bl9iaXRtYXBfbGVu ID0gQklUU19UT19MT05HUyhnZW8tPmFsbF9sdW5zKSAqIHNpemVvZihsb25nKTsKPiAtCWxtLT5t aWRfdGhycyA9IGxtLT5zZWNfcGVyX2xpbmUgLyAyOwo+IC0JbG0tPmhpZ2hfdGhycyA9IGxtLT5z ZWNfcGVyX2xpbmUgLyA0Owo+IC0JbG0tPm1ldGFfZGlzdGFuY2UgPSAoZ2VvLT5hbGxfbHVucyAv IDIpICogcGJsay0+bWluX3dyaXRlX3BnczsKPiAtCj4gLQkvKiBDYWxjdWxhdGUgbmVjZXNzYXJ5 IHBhZ2VzIGZvciBzbWV0YS4gU2VlIGNvbW1lbnQgb3ZlciBzdHJ1Y3QKPiAtCSAqIGxpbmVfc21l dGEgZGVmaW5pdGlvbgo+IC0JICovCj4gLQlpID0gMTsKPiAtYWRkX3NtZXRhX3BhZ2U6Cj4gLQls bS0+c21ldGFfc2VjID0gaSAqIGdlby0+d3Nfb3B0Owo+IC0JbG0tPnNtZXRhX2xlbiA9IGxtLT5z bWV0YV9zZWMgKiBnZW8tPmNzZWNzOwo+IC0KPiAtCXNtZXRhX2xlbiA9IHNpemVvZihzdHJ1Y3Qg bGluZV9zbWV0YSkgKyBsbS0+bHVuX2JpdG1hcF9sZW47Cj4gLQlpZiAoc21ldGFfbGVuID4gbG0t PnNtZXRhX2xlbikgewo+IC0JCWkrKzsKPiAtCQlnb3RvIGFkZF9zbWV0YV9wYWdlOwo+IC0JfQo+ IC0KPiAtCS8qIENhbGN1bGF0ZSBuZWNlc3NhcnkgcGFnZXMgZm9yIGVtZXRhLiBTZWUgY29tbWVu dCBvdmVyIHN0cnVjdAo+IC0JICogbGluZV9lbWV0YSBkZWZpbml0aW9uCj4gLQkgKi8KPiAtCWkg PSAxOwo+IC1hZGRfZW1ldGFfcGFnZToKPiAtCWxtLT5lbWV0YV9zZWNbMF0gPSBpICogZ2VvLT53 c19vcHQ7Cj4gLQlsbS0+ZW1ldGFfbGVuWzBdID0gbG0tPmVtZXRhX3NlY1swXSAqIGdlby0+Y3Nl Y3M7Cj4gLQo+IC0JZW1ldGFfbGVuID0gY2FsY19lbWV0YV9sZW4ocGJsayk7Cj4gLQlpZiAoZW1l dGFfbGVuID4gbG0tPmVtZXRhX2xlblswXSkgewo+IC0JCWkrKzsKPiAtCQlnb3RvIGFkZF9lbWV0 YV9wYWdlOwo+IC0JfQo+IC0KPiAtCWxtLT5lbWV0YV9iYiA9IGdlby0+YWxsX2x1bnMgPiBpID8g Z2VvLT5hbGxfbHVucyAtIGkgOiAwOwo+IC0KPiAtCWxtLT5taW5fYmxrX2xpbmUgPSAxOwo+IC0J aWYgKGdlby0+YWxsX2x1bnMgPiAxKQo+IC0JCWxtLT5taW5fYmxrX2xpbmUgKz0gRElWX1JPVU5E X1VQKGxtLT5zbWV0YV9zZWMgKwo+IC0JCQkJCWxtLT5lbWV0YV9zZWNbMF0sIGdlby0+Y2xiYSk7 Cj4gLQo+IC0JaWYgKGxtLT5taW5fYmxrX2xpbmUgPiBsbS0+YmxrX3Blcl9saW5lKSB7Cj4gLQkJ cGJsa19lcnIocGJsaywgImNvbmZpZy4gbm90IHN1cHBvcnRlZC4gTWluLiBMVU4gaW4gbGluZTol ZFxuIiwKPiAtCQkJCQkJCWxtLT5ibGtfcGVyX2xpbmUpOwo+IC0JCXJldHVybiAtRUlOVkFMOwo+ IC0JfQo+IC0KPiAtCXJldHVybiAwOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW50IHBibGtfbGluZXNf aW5pdChzdHJ1Y3QgcGJsayAqcGJsaykKPiAtewo+IC0Jc3RydWN0IHBibGtfbGluZV9tZ210ICps X21nID0gJnBibGstPmxfbWc7Cj4gLQlzdHJ1Y3QgcGJsa19saW5lICpsaW5lOwo+IC0Jdm9pZCAq Y2h1bmtfbWV0YTsKPiAtCWludCBucl9mcmVlX2Noa3MgPSAwOwo+IC0JaW50IGksIHJldDsKPiAt Cj4gLQlyZXQgPSBwYmxrX2xpbmVfbWV0YV9pbml0KHBibGspOwo+IC0JaWYgKHJldCkKPiAtCQly ZXR1cm4gcmV0Owo+IC0KPiAtCXJldCA9IHBibGtfbGluZV9tZ19pbml0KHBibGspOwo+IC0JaWYg KHJldCkKPiAtCQlyZXR1cm4gcmV0Owo+IC0KPiAtCXJldCA9IHBibGtfbHVuc19pbml0KHBibGsp Owo+IC0JaWYgKHJldCkKPiAtCQlnb3RvIGZhaWxfZnJlZV9tZXRhOwo+IC0KPiAtCWNodW5rX21l dGEgPSBwYmxrX2dldF9jaHVua19tZXRhKHBibGspOwo+IC0JaWYgKElTX0VSUihjaHVua19tZXRh KSkgewo+IC0JCXJldCA9IFBUUl9FUlIoY2h1bmtfbWV0YSk7Cj4gLQkJZ290byBmYWlsX2ZyZWVf bHVuczsKPiAtCX0KPiAtCj4gLQlwYmxrLT5saW5lcyA9IGtjYWxsb2MobF9tZy0+bnJfbGluZXMs IHNpemVvZihzdHJ1Y3QgcGJsa19saW5lKSwKPiAtCQkJCQkJCQlHRlBfS0VSTkVMKTsKPiAtCWlm ICghcGJsay0+bGluZXMpIHsKPiAtCQlyZXQgPSAtRU5PTUVNOwo+IC0JCWdvdG8gZmFpbF9mcmVl X2NodW5rX21ldGE7Cj4gLQl9Cj4gLQo+IC0JZm9yIChpID0gMDsgaSA8IGxfbWctPm5yX2xpbmVz OyBpKyspIHsKPiAtCQlsaW5lID0gJnBibGstPmxpbmVzW2ldOwo+IC0KPiAtCQlyZXQgPSBwYmxr X2FsbG9jX2xpbmVfbWV0YShwYmxrLCBsaW5lKTsKPiAtCQlpZiAocmV0KQo+IC0JCQlnb3RvIGZh aWxfZnJlZV9saW5lczsKPiAtCj4gLQkJbnJfZnJlZV9jaGtzICs9IHBibGtfc2V0dXBfbGluZV9t ZXRhKHBibGssIGxpbmUsIGNodW5rX21ldGEsIGkpOwo+IC0KPiAtCQl0cmFjZV9wYmxrX2xpbmVf c3RhdGUocGJsa19kaXNrX25hbWUocGJsayksIGxpbmUtPmlkLAo+IC0JCQkJCQkJCWxpbmUtPnN0 YXRlKTsKPiAtCX0KPiAtCj4gLQlpZiAoIW5yX2ZyZWVfY2hrcykgewo+IC0JCXBibGtfZXJyKHBi bGssICJ0b28gbWFueSBiYWQgYmxvY2tzIHByZXZlbnQgZm9yIHNhbmUgaW5zdGFuY2VcbiIpOwo+ IC0JCXJldCA9IC1FSU5UUjsKPiAtCQlnb3RvIGZhaWxfZnJlZV9saW5lczsKPiAtCX0KPiAtCj4g LQlyZXQgPSBwYmxrX3NldF9wcm92aXNpb24ocGJsaywgbnJfZnJlZV9jaGtzKTsKPiAtCWlmIChy ZXQpCj4gLQkJZ290byBmYWlsX2ZyZWVfbGluZXM7Cj4gLQo+IC0JdmZyZWUoY2h1bmtfbWV0YSk7 Cj4gLQlyZXR1cm4gMDsKPiAtCj4gLWZhaWxfZnJlZV9saW5lczoKPiAtCXdoaWxlICgtLWkgPj0g MCkKPiAtCQlwYmxrX2xpbmVfbWV0YV9mcmVlKGxfbWcsICZwYmxrLT5saW5lc1tpXSk7Cj4gLQlr ZnJlZShwYmxrLT5saW5lcyk7Cj4gLWZhaWxfZnJlZV9jaHVua19tZXRhOgo+IC0JdmZyZWUoY2h1 bmtfbWV0YSk7Cj4gLWZhaWxfZnJlZV9sdW5zOgo+IC0Ja2ZyZWUocGJsay0+bHVucyk7Cj4gLWZh aWxfZnJlZV9tZXRhOgo+IC0JcGJsa19saW5lX21nX2ZyZWUocGJsayk7Cj4gLQo+IC0JcmV0dXJu IHJldDsKPiAtfQo+IC0KPiAtc3RhdGljIGludCBwYmxrX3dyaXRlcl9pbml0KHN0cnVjdCBwYmxr ICpwYmxrKQo+IC17Cj4gLQlwYmxrLT53cml0ZXJfdHMgPSBrdGhyZWFkX2NyZWF0ZShwYmxrX3dy aXRlX3RzLCBwYmxrLCAicGJsay13cml0ZXItdCIpOwo+IC0JaWYgKElTX0VSUihwYmxrLT53cml0 ZXJfdHMpKSB7Cj4gLQkJaW50IGVyciA9IFBUUl9FUlIocGJsay0+d3JpdGVyX3RzKTsKPiAtCj4g LQkJaWYgKGVyciAhPSAtRUlOVFIpCj4gLQkJCXBibGtfZXJyKHBibGssICJjb3VsZCBub3QgYWxs b2NhdGUgd3JpdGVyIGt0aHJlYWQgKCVkKVxuIiwKPiAtCQkJCQllcnIpOwo+IC0JCXJldHVybiBl cnI7Cj4gLQl9Cj4gLQo+IC0JdGltZXJfc2V0dXAoJnBibGstPnd0aW1lciwgcGJsa193cml0ZV90 aW1lcl9mbiwgMCk7Cj4gLQltb2RfdGltZXIoJnBibGstPnd0aW1lciwgamlmZmllcyArIG1zZWNz X3RvX2ppZmZpZXMoMTAwKSk7Cj4gLQo+IC0JcmV0dXJuIDA7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2 b2lkIHBibGtfd3JpdGVyX3N0b3Aoc3RydWN0IHBibGsgKnBibGspCj4gLXsKPiAtCS8qIFRoZSBw aXBlbGluZSBtdXN0IGJlIHN0b3BwZWQgYW5kIHRoZSB3cml0ZSBidWZmZXIgZW1wdGllZCBiZWZv cmUgdGhlCj4gLQkgKiB3cml0ZSB0aHJlYWQgaXMgc3RvcHBlZAo+IC0JICovCj4gLQlXQVJOKHBi bGtfcmJfcmVhZF9jb3VudCgmcGJsay0+cndiKSwKPiAtCQkJIlN0b3BwaW5nIG5vdCBmdWxseSBw ZXJzaXN0ZWQgd3JpdGUgYnVmZmVyXG4iKTsKPiAtCj4gLQlXQVJOKHBibGtfcmJfc3luY19jb3Vu dCgmcGJsay0+cndiKSwKPiAtCQkJIlN0b3BwaW5nIG5vdCBmdWxseSBzeW5jZWQgd3JpdGUgYnVm ZmVyXG4iKTsKPiAtCj4gLQlkZWxfdGltZXJfc3luYygmcGJsay0+d3RpbWVyKTsKPiAtCWlmIChw YmxrLT53cml0ZXJfdHMpCj4gLQkJa3RocmVhZF9zdG9wKHBibGstPndyaXRlcl90cyk7Cj4gLX0K PiAtCj4gLXN0YXRpYyB2b2lkIHBibGtfZnJlZShzdHJ1Y3QgcGJsayAqcGJsaykKPiAtewo+IC0J cGJsa19saW5lc19mcmVlKHBibGspOwo+IC0JcGJsa19sMnBfZnJlZShwYmxrKTsKPiAtCXBibGtf cndiX2ZyZWUocGJsayk7Cj4gLQlwYmxrX2NvcmVfZnJlZShwYmxrKTsKPiAtCj4gLQlrZnJlZShw YmxrKTsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgcGJsa190ZWFyX2Rvd24oc3RydWN0IHBibGsg KnBibGssIGJvb2wgZ3JhY2VmdWwpCj4gLXsKPiAtCWlmIChncmFjZWZ1bCkKPiAtCQlfX3BibGtf cGlwZWxpbmVfZmx1c2gocGJsayk7Cj4gLQlfX3BibGtfcGlwZWxpbmVfc3RvcChwYmxrKTsKPiAt CXBibGtfd3JpdGVyX3N0b3AocGJsayk7Cj4gLQlwYmxrX3JiX3N5bmNfbDJwKCZwYmxrLT5yd2Ip Owo+IC0JcGJsa19ybF9mcmVlKCZwYmxrLT5ybCk7Cj4gLQo+IC0JcGJsa19kZWJ1ZyhwYmxrLCAi Y29uc2lzdGVudCB0ZWFyIGRvd24gKGdyYWNlZnVsOiVkKVxuIiwgZ3JhY2VmdWwpOwo+IC19Cj4g LQo+IC1zdGF0aWMgdm9pZCBwYmxrX2V4aXQodm9pZCAqcHJpdmF0ZSwgYm9vbCBncmFjZWZ1bCkK PiAtewo+IC0Jc3RydWN0IHBibGsgKnBibGsgPSBwcml2YXRlOwo+IC0KPiAtCXBibGtfZ2NfZXhp dChwYmxrLCBncmFjZWZ1bCk7Cj4gLQlwYmxrX3RlYXJfZG93bihwYmxrLCBncmFjZWZ1bCk7Cj4g LQo+IC0jaWZkZWYgQ09ORklHX05WTV9QQkxLX0RFQlVHCj4gLQlwYmxrX2luZm8ocGJsaywgImV4 aXQ6IEwyUCBDUkM6ICV4XG4iLCBwYmxrX2wycF9jcmMocGJsaykpOwo+IC0jZW5kaWYKPiAtCj4g LQlwYmxrX2ZyZWUocGJsayk7Cj4gLX0KPiAtCj4gLXN0YXRpYyBzZWN0b3JfdCBwYmxrX2NhcGFj aXR5KHZvaWQgKnByaXZhdGUpCj4gLXsKPiAtCXN0cnVjdCBwYmxrICpwYmxrID0gcHJpdmF0ZTsK PiAtCj4gLQlyZXR1cm4gcGJsay0+Y2FwYWNpdHkgKiBOUl9QSFlfSU5fTE9HOwo+IC19Cj4gLQo+ IC1zdGF0aWMgdm9pZCAqcGJsa19pbml0KHN0cnVjdCBudm1fdGd0X2RldiAqZGV2LCBzdHJ1Y3Qg Z2VuZGlzayAqdGRpc2ssCj4gLQkJICAgICAgIGludCBmbGFncykKPiAtewo+IC0Jc3RydWN0IG52 bV9nZW8gKmdlbyA9ICZkZXYtPmdlbzsKPiAtCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpicXVldWUg PSBkZXYtPnE7Cj4gLQlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqdHF1ZXVlID0gdGRpc2stPnF1ZXVl Owo+IC0Jc3RydWN0IHBibGsgKnBibGs7Cj4gLQlpbnQgcmV0Owo+IC0KPiAtCXBibGsgPSBremFs bG9jKHNpemVvZihzdHJ1Y3QgcGJsayksIEdGUF9LRVJORUwpOwo+IC0JaWYgKCFwYmxrKQo+IC0J CXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwo+IC0KPiAtCXBibGstPmRldiA9IGRldjsKPiAtCXBi bGstPmRpc2sgPSB0ZGlzazsKPiAtCXBibGstPnN0YXRlID0gUEJMS19TVEFURV9SVU5OSU5HOwo+ IC0JdHJhY2VfcGJsa19zdGF0ZShwYmxrX2Rpc2tfbmFtZShwYmxrKSwgcGJsay0+c3RhdGUpOwo+ IC0JcGJsay0+Z2MuZ2NfZW5hYmxlZCA9IDA7Cj4gLQo+IC0JaWYgKCEoZ2VvLT52ZXJzaW9uID09 IE5WTV9PQ1NTRF9TUEVDXzEyIHx8Cj4gLQkJCQkJZ2VvLT52ZXJzaW9uID09IE5WTV9PQ1NTRF9T UEVDXzIwKSkgewo+IC0JCXBibGtfZXJyKHBibGssICJPQ1NTRCB2ZXJzaW9uIG5vdCBzdXBwb3J0 ZWQgKCV1KVxuIiwKPiAtCQkJCQkJCWdlby0+dmVyc2lvbik7Cj4gLQkJa2ZyZWUocGJsayk7Cj4g LQkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Cj4gLQl9Cj4gLQo+IC0JaWYgKGdlby0+ZXh0KSB7 Cj4gLQkJcGJsa19lcnIocGJsaywgImV4dGVuZGVkIG1ldGFkYXRhIG5vdCBzdXBwb3J0ZWRcbiIp Owo+IC0JCWtmcmVlKHBibGspOwo+IC0JCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwo+IC0JfQo+ IC0KPiAtCXNwaW5fbG9ja19pbml0KCZwYmxrLT5yZXN1Ym1pdF9sb2NrKTsKPiAtCXNwaW5fbG9j a19pbml0KCZwYmxrLT50cmFuc19sb2NrKTsKPiAtCXNwaW5fbG9ja19pbml0KCZwYmxrLT5sb2Nr KTsKPiAtCj4gLSNpZmRlZiBDT05GSUdfTlZNX1BCTEtfREVCVUcKPiAtCWF0b21pY19sb25nX3Nl dCgmcGJsay0+aW5mbGlnaHRfd3JpdGVzLCAwKTsKPiAtCWF0b21pY19sb25nX3NldCgmcGJsay0+ cGFkZGVkX3dyaXRlcywgMCk7Cj4gLQlhdG9taWNfbG9uZ19zZXQoJnBibGstPnBhZGRlZF93Yiwg MCk7Cj4gLQlhdG9taWNfbG9uZ19zZXQoJnBibGstPnJlcV93cml0ZXMsIDApOwo+IC0JYXRvbWlj X2xvbmdfc2V0KCZwYmxrLT5zdWJfd3JpdGVzLCAwKTsKPiAtCWF0b21pY19sb25nX3NldCgmcGJs ay0+c3luY193cml0ZXMsIDApOwo+IC0JYXRvbWljX2xvbmdfc2V0KCZwYmxrLT5pbmZsaWdodF9y ZWFkcywgMCk7Cj4gLQlhdG9taWNfbG9uZ19zZXQoJnBibGstPmNhY2hlX3JlYWRzLCAwKTsKPiAt CWF0b21pY19sb25nX3NldCgmcGJsay0+c3luY19yZWFkcywgMCk7Cj4gLQlhdG9taWNfbG9uZ19z ZXQoJnBibGstPnJlY292X3dyaXRlcywgMCk7Cj4gLQlhdG9taWNfbG9uZ19zZXQoJnBibGstPnJl Y292X3dyaXRlcywgMCk7Cj4gLQlhdG9taWNfbG9uZ19zZXQoJnBibGstPnJlY292X2djX3dyaXRl cywgMCk7Cj4gLQlhdG9taWNfbG9uZ19zZXQoJnBibGstPnJlY292X2djX3JlYWRzLCAwKTsKPiAt I2VuZGlmCj4gLQo+IC0JYXRvbWljX2xvbmdfc2V0KCZwYmxrLT5yZWFkX2ZhaWxlZCwgMCk7Cj4g LQlhdG9taWNfbG9uZ19zZXQoJnBibGstPnJlYWRfZW1wdHksIDApOwo+IC0JYXRvbWljX2xvbmdf c2V0KCZwYmxrLT5yZWFkX2hpZ2hfZWNjLCAwKTsKPiAtCWF0b21pY19sb25nX3NldCgmcGJsay0+ cmVhZF9mYWlsZWRfZ2MsIDApOwo+IC0JYXRvbWljX2xvbmdfc2V0KCZwYmxrLT53cml0ZV9mYWls ZWQsIDApOwo+IC0JYXRvbWljX2xvbmdfc2V0KCZwYmxrLT5lcmFzZV9mYWlsZWQsIDApOwo+IC0K PiAtCXJldCA9IHBibGtfY29yZV9pbml0KHBibGspOwo+IC0JaWYgKHJldCkgewo+IC0JCXBibGtf ZXJyKHBibGssICJjb3VsZCBub3QgaW5pdGlhbGl6ZSBjb3JlXG4iKTsKPiAtCQlnb3RvIGZhaWw7 Cj4gLQl9Cj4gLQo+IC0JcmV0ID0gcGJsa19saW5lc19pbml0KHBibGspOwo+IC0JaWYgKHJldCkg ewo+IC0JCXBibGtfZXJyKHBibGssICJjb3VsZCBub3QgaW5pdGlhbGl6ZSBsaW5lc1xuIik7Cj4g LQkJZ290byBmYWlsX2ZyZWVfY29yZTsKPiAtCX0KPiAtCj4gLQlyZXQgPSBwYmxrX3J3Yl9pbml0 KHBibGspOwo+IC0JaWYgKHJldCkgewo+IC0JCXBibGtfZXJyKHBibGssICJjb3VsZCBub3QgaW5p dGlhbGl6ZSB3cml0ZSBidWZmZXJcbiIpOwo+IC0JCWdvdG8gZmFpbF9mcmVlX2xpbmVzOwo+IC0J fQo+IC0KPiAtCXJldCA9IHBibGtfbDJwX2luaXQocGJsaywgZmxhZ3MgJiBOVk1fVEFSR0VUX0ZB Q1RPUlkpOwo+IC0JaWYgKHJldCkgewo+IC0JCXBibGtfZXJyKHBibGssICJjb3VsZCBub3QgaW5p dGlhbGl6ZSBtYXBzXG4iKTsKPiAtCQlnb3RvIGZhaWxfZnJlZV9yd2I7Cj4gLQl9Cj4gLQo+IC0J cmV0ID0gcGJsa193cml0ZXJfaW5pdChwYmxrKTsKPiAtCWlmIChyZXQpIHsKPiAtCQlpZiAocmV0 ICE9IC1FSU5UUikKPiAtCQkJcGJsa19lcnIocGJsaywgImNvdWxkIG5vdCBpbml0aWFsaXplIHdy aXRlIHRocmVhZFxuIik7Cj4gLQkJZ290byBmYWlsX2ZyZWVfbDJwOwo+IC0JfQo+IC0KPiAtCXJl dCA9IHBibGtfZ2NfaW5pdChwYmxrKTsKPiAtCWlmIChyZXQpIHsKPiAtCQlwYmxrX2VycihwYmxr LCAiY291bGQgbm90IGluaXRpYWxpemUgZ2NcbiIpOwo+IC0JCWdvdG8gZmFpbF9zdG9wX3dyaXRl cjsKPiAtCX0KPiAtCj4gLQkvKiBpbmhlcml0IHRoZSBzaXplIGZyb20gdGhlIHVuZGVybHlpbmcg ZGV2aWNlICovCj4gLQlibGtfcXVldWVfbG9naWNhbF9ibG9ja19zaXplKHRxdWV1ZSwgcXVldWVf cGh5c2ljYWxfYmxvY2tfc2l6ZShicXVldWUpKTsKPiAtCWJsa19xdWV1ZV9tYXhfaHdfc2VjdG9y cyh0cXVldWUsIHF1ZXVlX21heF9od19zZWN0b3JzKGJxdWV1ZSkpOwo+IC0KPiAtCWJsa19xdWV1 ZV93cml0ZV9jYWNoZSh0cXVldWUsIHRydWUsIGZhbHNlKTsKPiAtCj4gLQl0cXVldWUtPmxpbWl0 cy5kaXNjYXJkX2dyYW51bGFyaXR5ID0gZ2VvLT5jbGJhICogZ2VvLT5jc2VjczsKPiAtCXRxdWV1 ZS0+bGltaXRzLmRpc2NhcmRfYWxpZ25tZW50ID0gMDsKPiAtCWJsa19xdWV1ZV9tYXhfZGlzY2Fy ZF9zZWN0b3JzKHRxdWV1ZSwgVUlOVF9NQVggPj4gOSk7Cj4gLQlibGtfcXVldWVfZmxhZ19zZXQo UVVFVUVfRkxBR19ESVNDQVJELCB0cXVldWUpOwo+IC0KPiAtCXBibGtfaW5mbyhwYmxrLCAibHVu czoldSwgbGluZXM6JWQsIHNlY3M6JWxsdSwgYnVmIGVudHJpZXM6JXVcbiIsCj4gLQkJCWdlby0+ YWxsX2x1bnMsIHBibGstPmxfbWcubnJfbGluZXMsCj4gLQkJCSh1bnNpZ25lZCBsb25nIGxvbmcp cGJsay0+Y2FwYWNpdHksCj4gLQkJCXBibGstPnJ3Yi5ucl9lbnRyaWVzKTsKPiAtCj4gLQl3YWtl X3VwX3Byb2Nlc3MocGJsay0+d3JpdGVyX3RzKTsKPiAtCj4gLQkvKiBDaGVjayBpZiB3ZSBuZWVk IHRvIHN0YXJ0IEdDICovCj4gLQlwYmxrX2djX3Nob3VsZF9raWNrKHBibGspOwo+IC0KPiAtCXJl dHVybiBwYmxrOwo+IC0KPiAtZmFpbF9zdG9wX3dyaXRlcjoKPiAtCXBibGtfd3JpdGVyX3N0b3Ao cGJsayk7Cj4gLWZhaWxfZnJlZV9sMnA6Cj4gLQlwYmxrX2wycF9mcmVlKHBibGspOwo+IC1mYWls X2ZyZWVfcndiOgo+IC0JcGJsa19yd2JfZnJlZShwYmxrKTsKPiAtZmFpbF9mcmVlX2xpbmVzOgo+ IC0JcGJsa19saW5lc19mcmVlKHBibGspOwo+IC1mYWlsX2ZyZWVfY29yZToKPiAtCXBibGtfY29y ZV9mcmVlKHBibGspOwo+IC1mYWlsOgo+IC0Ja2ZyZWUocGJsayk7Cj4gLQlyZXR1cm4gRVJSX1BU UihyZXQpOwo+IC19Cj4gLQo+IC0vKiBwaHlzaWNhbCBibG9jayBkZXZpY2UgdGFyZ2V0ICovCj4g LXN0YXRpYyBzdHJ1Y3QgbnZtX3RndF90eXBlIHR0X3BibGsgPSB7Cj4gLQkubmFtZQkJPSAicGJs ayIsCj4gLQkudmVyc2lvbgk9IHsxLCAwLCAwfSwKPiAtCj4gLQkuYm9wcwkJPSAmcGJsa19ib3Bz LAo+IC0JLmNhcGFjaXR5CT0gcGJsa19jYXBhY2l0eSwKPiAtCj4gLQkuaW5pdAkJPSBwYmxrX2lu aXQsCj4gLQkuZXhpdAkJPSBwYmxrX2V4aXQsCj4gLQo+IC0JLnN5c2ZzX2luaXQJPSBwYmxrX3N5 c2ZzX2luaXQsCj4gLQkuc3lzZnNfZXhpdAk9IHBibGtfc3lzZnNfZXhpdCwKPiAtCS5vd25lcgkJ PSBUSElTX01PRFVMRSwKPiAtfTsKPiAtCj4gLXN0YXRpYyBpbnQgX19pbml0IHBibGtfbW9kdWxl X2luaXQodm9pZCkKPiAtewo+IC0JaW50IHJldDsKPiAtCj4gLQlyZXQgPSBiaW9zZXRfaW5pdCgm cGJsa19iaW9fc2V0LCBCSU9fUE9PTF9TSVpFLCAwLCAwKTsKPiAtCWlmIChyZXQpCj4gLQkJcmV0 dXJuIHJldDsKPiAtCXJldCA9IG52bV9yZWdpc3Rlcl90Z3RfdHlwZSgmdHRfcGJsayk7Cj4gLQlp ZiAocmV0KQo+IC0JCWJpb3NldF9leGl0KCZwYmxrX2Jpb19zZXQpOwo+IC0JcmV0dXJuIHJldDsK PiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgcGJsa19tb2R1bGVfZXhpdCh2b2lkKQo+IC17Cj4gLQli aW9zZXRfZXhpdCgmcGJsa19iaW9fc2V0KTsKPiAtCW52bV91bnJlZ2lzdGVyX3RndF90eXBlKCZ0 dF9wYmxrKTsKPiAtfQo+IC0KPiAtbW9kdWxlX2luaXQocGJsa19tb2R1bGVfaW5pdCk7Cj4gLW1v ZHVsZV9leGl0KHBibGtfbW9kdWxlX2V4aXQpOwo+IC1NT0RVTEVfQVVUSE9SKCJKYXZpZXIgR29u emFsZXogPGphdmllckBjbmV4bGFicy5jb20+Iik7Cj4gLU1PRFVMRV9BVVRIT1IoIk1hdGlhcyBC am9ybGluZyA8bWF0aWFzQGNuZXhsYWJzLmNvbT4iKTsKPiAtTU9EVUxFX0xJQ0VOU0UoIkdQTCB2 MiIpOwo+IC1NT0RVTEVfREVTQ1JJUFRJT04oIlBoeXNpY2FsIEJsb2NrLURldmljZSBmb3IgT3Bl bi1DaGFubmVsIFNTRHMiKTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9saWdodG52bS9wYmxrLW1h cC5jIGIvZHJpdmVycy9saWdodG52bS9wYmxrLW1hcC5jCj4gZGVsZXRlZCBmaWxlIG1vZGUgMTAw NjQ0Cj4gaW5kZXggNTQwOGUzMmIyZjEzLi4wMDAwMDAwMDAwMDAKPiAtLS0gYS9kcml2ZXJzL2xp Z2h0bnZtL3BibGstbWFwLmMKPiArKysgL2Rldi9udWxsCj4gQEAgLTEsMjEwICswLDAgQEAKPiAt Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKPiAtLyoKPiAtICogQ29weXJpZ2h0 IChDKSAyMDE2IENORVggTGFicwo+IC0gKiBJbml0aWFsIHJlbGVhc2U6IEphdmllciBHb256YWxl eiA8amF2aWVyQGNuZXhsYWJzLmNvbT4KPiAtICogICAgICAgICAgICAgICAgICBNYXRpYXMgQmpv cmxpbmcgPG1hdGlhc0BjbmV4bGFicy5jb20+Cj4gLSAqCj4gLSAqIFRoaXMgcHJvZ3JhbSBpcyBm cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKPiAtICogbW9kaWZ5 IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVy c2lvbgo+IC0gKiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u Lgo+IC0gKgo+IC0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Cj4gLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPiAtICogTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKPiAtICogR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+IC0gKgo+IC0gKiBwYmxrLW1h cC5jIC0gcGJsaydzIGxiYS1wcGEgbWFwcGluZyBzdHJhdGVneQo+IC0gKgo+IC0gKi8KPiAtCj4g LSNpbmNsdWRlICJwYmxrLmgiCj4gLQo+IC1zdGF0aWMgaW50IHBibGtfbWFwX3BhZ2VfZGF0YShz dHJ1Y3QgcGJsayAqcGJsaywgdW5zaWduZWQgaW50IHNlbnRyeSwKPiAtCQkJICAgICAgc3RydWN0 IHBwYV9hZGRyICpwcGFfbGlzdCwKPiAtCQkJICAgICAgdW5zaWduZWQgbG9uZyAqbHVuX2JpdG1h cCwKPiAtCQkJICAgICAgdm9pZCAqbWV0YV9saXN0LAo+IC0JCQkgICAgICB1bnNpZ25lZCBpbnQg dmFsaWRfc2VjcykKPiAtewo+IC0Jc3RydWN0IHBibGtfbGluZSAqbGluZSA9IHBibGtfbGluZV9n ZXRfZGF0YShwYmxrKTsKPiAtCXN0cnVjdCBwYmxrX2VtZXRhICplbWV0YTsKPiAtCXN0cnVjdCBw YmxrX3dfY3R4ICp3X2N0eDsKPiAtCV9fbGU2NCAqbGJhX2xpc3Q7Cj4gLQl1NjQgcGFkZHI7Cj4g LQlpbnQgbnJfc2VjcyA9IHBibGstPm1pbl93cml0ZV9wZ3M7Cj4gLQlpbnQgaTsKPiAtCj4gLQlp ZiAoIWxpbmUpCj4gLQkJcmV0dXJuIC1FTk9TUEM7Cj4gLQo+IC0JaWYgKHBibGtfbGluZV9pc19m dWxsKGxpbmUpKSB7Cj4gLQkJc3RydWN0IHBibGtfbGluZSAqcHJldl9saW5lID0gbGluZTsKPiAt Cj4gLQkJLyogSWYgd2UgY2Fubm90IGFsbG9jYXRlIGEgbmV3IGxpbmUsIG1ha2Ugc3VyZSB0byBz dG9yZSBtZXRhZGF0YQo+IC0JCSAqIG9uIGN1cnJlbnQgbGluZSBhbmQgdGhlbiBmYWlsCj4gLQkJ ICovCj4gLQkJbGluZSA9IHBibGtfbGluZV9yZXBsYWNlX2RhdGEocGJsayk7Cj4gLQkJcGJsa19s aW5lX2Nsb3NlX21ldGEocGJsaywgcHJldl9saW5lKTsKPiAtCj4gLQkJaWYgKCFsaW5lKSB7Cj4g LQkJCXBibGtfcGlwZWxpbmVfc3RvcChwYmxrKTsKPiAtCQkJcmV0dXJuIC1FTk9TUEM7Cj4gLQkJ fQo+IC0KPiAtCX0KPiAtCj4gLQllbWV0YSA9IGxpbmUtPmVtZXRhOwo+IC0JbGJhX2xpc3QgPSBl bWV0YV90b19sYmFzKHBibGssIGVtZXRhLT5idWYpOwo+IC0KPiAtCXBhZGRyID0gcGJsa19hbGxv Y19wYWdlKHBibGssIGxpbmUsIG5yX3NlY3MpOwo+IC0KPiAtCWZvciAoaSA9IDA7IGkgPCBucl9z ZWNzOyBpKyssIHBhZGRyKyspIHsKPiAtCQlzdHJ1Y3QgcGJsa19zZWNfbWV0YSAqbWV0YSA9IHBi bGtfZ2V0X21ldGEocGJsaywgbWV0YV9saXN0LCBpKTsKPiAtCQlfX2xlNjQgYWRkcl9lbXB0eSA9 IGNwdV90b19sZTY0KEFERFJfRU1QVFkpOwo+IC0KPiAtCQkvKiBwcGEgdG8gYmUgc2VudCB0byB0 aGUgZGV2aWNlICovCj4gLQkJcHBhX2xpc3RbaV0gPSBhZGRyX3RvX2dlbl9wcGEocGJsaywgcGFk ZHIsIGxpbmUtPmlkKTsKPiAtCj4gLQkJLyogV3JpdGUgY29udGV4dCBmb3IgdGFyZ2V0IGJpbyBj b21wbGV0aW9uIG9uIHdyaXRlIGJ1ZmZlci4gTm90ZQo+IC0JCSAqIHRoYXQgdGhlIHdyaXRlIGJ1 ZmZlciBpcyBwcm90ZWN0ZWQgYnkgdGhlIHN5bmMgYmFja3BvaW50ZXIsCj4gLQkJICogYW5kIGEg c2luZ2xlIHdyaXRlciB0aHJlYWQgaGF2ZSBhY2Nlc3MgdG8gZWFjaCBzcGVjaWZpYyBlbnRyeQo+ IC0JCSAqIGF0IGEgdGltZS4gVGh1cywgaXQgaXMgc2FmZSB0byBtb2RpZnkgdGhlIGNvbnRleHQg Zm9yIHRoZQo+IC0JCSAqIGVudHJ5IHdlIGFyZSBzZXR0aW5nIHVwIGZvciBzdWJtaXNzaW9uIHdp dGhvdXQgdGFraW5nIGFueQo+IC0JCSAqIGxvY2sgb3IgbWVtb3J5IGJhcnJpZXIuCj4gLQkJICov Cj4gLQkJaWYgKGkgPCB2YWxpZF9zZWNzKSB7Cj4gLQkJCWtyZWZfZ2V0KCZsaW5lLT5yZWYpOwo+ IC0JCQlhdG9taWNfaW5jKCZsaW5lLT5zZWNfdG9fdXBkYXRlKTsKPiAtCQkJd19jdHggPSBwYmxr X3JiX3dfY3R4KCZwYmxrLT5yd2IsIHNlbnRyeSArIGkpOwo+IC0JCQl3X2N0eC0+cHBhID0gcHBh X2xpc3RbaV07Cj4gLQkJCW1ldGEtPmxiYSA9IGNwdV90b19sZTY0KHdfY3R4LT5sYmEpOwo+IC0J CQlsYmFfbGlzdFtwYWRkcl0gPSBjcHVfdG9fbGU2NCh3X2N0eC0+bGJhKTsKPiAtCQkJaWYgKGxi YV9saXN0W3BhZGRyXSAhPSBhZGRyX2VtcHR5KQo+IC0JCQkJbGluZS0+bnJfdmFsaWRfbGJhcysr Owo+IC0JCQllbHNlCj4gLQkJCQlhdG9taWM2NF9pbmMoJnBibGstPnBhZF93YSk7Cj4gLQkJfSBl bHNlIHsKPiAtCQkJbGJhX2xpc3RbcGFkZHJdID0gYWRkcl9lbXB0eTsKPiAtCQkJbWV0YS0+bGJh ID0gYWRkcl9lbXB0eTsKPiAtCQkJX19wYmxrX21hcF9pbnZhbGlkYXRlKHBibGssIGxpbmUsIHBh ZGRyKTsKPiAtCQl9Cj4gLQl9Cj4gLQo+IC0JcGJsa19kb3duX3JxKHBibGssIHBwYV9saXN0WzBd LCBsdW5fYml0bWFwKTsKPiAtCXJldHVybiAwOwo+IC19Cj4gLQo+IC1pbnQgcGJsa19tYXBfcnEo c3RydWN0IHBibGsgKnBibGssIHN0cnVjdCBudm1fcnEgKnJxZCwgdW5zaWduZWQgaW50IHNlbnRy eSwKPiAtCQkgdW5zaWduZWQgbG9uZyAqbHVuX2JpdG1hcCwgdW5zaWduZWQgaW50IHZhbGlkX3Nl Y3MsCj4gLQkJIHVuc2lnbmVkIGludCBvZmYpCj4gLXsKPiAtCXZvaWQgKm1ldGFfbGlzdCA9IHBi bGtfZ2V0X21ldGFfZm9yX3dyaXRlcyhwYmxrLCBycWQpOwo+IC0Jdm9pZCAqbWV0YV9idWZmZXI7 Cj4gLQlzdHJ1Y3QgcHBhX2FkZHIgKnBwYV9saXN0ID0gbnZtX3JxX3RvX3BwYV9saXN0KHJxZCk7 Cj4gLQl1bnNpZ25lZCBpbnQgbWFwX3NlY3M7Cj4gLQlpbnQgbWluID0gcGJsay0+bWluX3dyaXRl X3BnczsKPiAtCWludCBpOwo+IC0JaW50IHJldDsKPiAtCj4gLQlmb3IgKGkgPSBvZmY7IGkgPCBy cWQtPm5yX3BwYXM7IGkgKz0gbWluKSB7Cj4gLQkJbWFwX3NlY3MgPSAoaSArIG1pbiA+IHZhbGlk X3NlY3MpID8gKHZhbGlkX3NlY3MgJSBtaW4pIDogbWluOwo+IC0JCW1ldGFfYnVmZmVyID0gcGJs a19nZXRfbWV0YShwYmxrLCBtZXRhX2xpc3QsIGkpOwo+IC0KPiAtCQlyZXQgPSBwYmxrX21hcF9w YWdlX2RhdGEocGJsaywgc2VudHJ5ICsgaSwgJnBwYV9saXN0W2ldLAo+IC0JCQkJCWx1bl9iaXRt YXAsIG1ldGFfYnVmZmVyLCBtYXBfc2Vjcyk7Cj4gLQkJaWYgKHJldCkKPiAtCQkJcmV0dXJuIHJl dDsKPiAtCX0KPiAtCj4gLQlyZXR1cm4gMDsKPiAtfQo+IC0KPiAtLyogb25seSBpZiBlcmFzZV9w cGEgaXMgc2V0LCBhY3F1aXJlIGVyYXNlIHNlbWFwaG9yZSAqLwo+IC1pbnQgcGJsa19tYXBfZXJh c2VfcnEoc3RydWN0IHBibGsgKnBibGssIHN0cnVjdCBudm1fcnEgKnJxZCwKPiAtCQkgICAgICAg dW5zaWduZWQgaW50IHNlbnRyeSwgdW5zaWduZWQgbG9uZyAqbHVuX2JpdG1hcCwKPiAtCQkgICAg ICAgdW5zaWduZWQgaW50IHZhbGlkX3NlY3MsIHN0cnVjdCBwcGFfYWRkciAqZXJhc2VfcHBhKQo+ IC17Cj4gLQlzdHJ1Y3QgbnZtX3RndF9kZXYgKmRldiA9IHBibGstPmRldjsKPiAtCXN0cnVjdCBu dm1fZ2VvICpnZW8gPSAmZGV2LT5nZW87Cj4gLQlzdHJ1Y3QgcGJsa19saW5lX21ldGEgKmxtID0g JnBibGstPmxtOwo+IC0Jdm9pZCAqbWV0YV9saXN0ID0gcGJsa19nZXRfbWV0YV9mb3Jfd3JpdGVz KHBibGssIHJxZCk7Cj4gLQl2b2lkICptZXRhX2J1ZmZlcjsKPiAtCXN0cnVjdCBwcGFfYWRkciAq cHBhX2xpc3QgPSBudm1fcnFfdG9fcHBhX2xpc3QocnFkKTsKPiAtCXN0cnVjdCBwYmxrX2xpbmUg KmVfbGluZSwgKmRfbGluZTsKPiAtCXVuc2lnbmVkIGludCBtYXBfc2VjczsKPiAtCWludCBtaW4g PSBwYmxrLT5taW5fd3JpdGVfcGdzOwo+IC0JaW50IGksIGVyYXNlX2x1bjsKPiAtCWludCByZXQ7 Cj4gLQo+IC0KPiAtCWZvciAoaSA9IDA7IGkgPCBycWQtPm5yX3BwYXM7IGkgKz0gbWluKSB7Cj4g LQkJbWFwX3NlY3MgPSAoaSArIG1pbiA+IHZhbGlkX3NlY3MpID8gKHZhbGlkX3NlY3MgJSBtaW4p IDogbWluOwo+IC0JCW1ldGFfYnVmZmVyID0gcGJsa19nZXRfbWV0YShwYmxrLCBtZXRhX2xpc3Qs IGkpOwo+IC0KPiAtCQlyZXQgPSBwYmxrX21hcF9wYWdlX2RhdGEocGJsaywgc2VudHJ5ICsgaSwg JnBwYV9saXN0W2ldLAo+IC0JCQkJCWx1bl9iaXRtYXAsIG1ldGFfYnVmZmVyLCBtYXBfc2Vjcyk7 Cj4gLQkJaWYgKHJldCkKPiAtCQkJcmV0dXJuIHJldDsKPiAtCj4gLQkJZXJhc2VfbHVuID0gcGJs a19wcGFfdG9fcG9zKGdlbywgcHBhX2xpc3RbaV0pOwo+IC0KPiAtCQkvKiBsaW5lIGNhbiBjaGFu Z2UgYWZ0ZXIgcGFnZSBtYXAuIFdlIG1pZ2h0IGFsc28gYmUgd3JpdGluZyB0aGUKPiAtCQkgKiBs YXN0IGxpbmUuCj4gLQkJICovCj4gLQkJZV9saW5lID0gcGJsa19saW5lX2dldF9lcmFzZShwYmxr KTsKPiAtCQlpZiAoIWVfbGluZSkKPiAtCQkJcmV0dXJuIHBibGtfbWFwX3JxKHBibGssIHJxZCwg c2VudHJ5LCBsdW5fYml0bWFwLAo+IC0JCQkJCQkJdmFsaWRfc2VjcywgaSArIG1pbik7Cj4gLQo+ IC0JCXNwaW5fbG9jaygmZV9saW5lLT5sb2NrKTsKPiAtCQlpZiAoIXRlc3RfYml0KGVyYXNlX2x1 biwgZV9saW5lLT5lcmFzZV9iaXRtYXApKSB7Cj4gLQkJCXNldF9iaXQoZXJhc2VfbHVuLCBlX2xp bmUtPmVyYXNlX2JpdG1hcCk7Cj4gLQkJCWF0b21pY19kZWMoJmVfbGluZS0+bGVmdF9lYmxrcyk7 Cj4gLQo+IC0JCQkqZXJhc2VfcHBhID0gcHBhX2xpc3RbaV07Cj4gLQkJCWVyYXNlX3BwYS0+YS5i bGsgPSBlX2xpbmUtPmlkOwo+IC0JCQllcmFzZV9wcGEtPmEucmVzZXJ2ZWQgPSAwOwo+IC0KPiAt CQkJc3Bpbl91bmxvY2soJmVfbGluZS0+bG9jayk7Cj4gLQo+IC0JCQkvKiBBdm9pZCBldmFsdWF0 aW5nIGVfbGluZS0+bGVmdF9lYmxrcyAqLwo+IC0JCQlyZXR1cm4gcGJsa19tYXBfcnEocGJsaywg cnFkLCBzZW50cnksIGx1bl9iaXRtYXAsCj4gLQkJCQkJCQl2YWxpZF9zZWNzLCBpICsgbWluKTsK PiAtCQl9Cj4gLQkJc3Bpbl91bmxvY2soJmVfbGluZS0+bG9jayk7Cj4gLQl9Cj4gLQo+IC0JZF9s aW5lID0gcGJsa19saW5lX2dldF9kYXRhKHBibGspOwo+IC0KPiAtCS8qIGxpbmUgY2FuIGNoYW5n ZSBhZnRlciBwYWdlIG1hcC4gV2UgbWlnaHQgYWxzbyBiZSB3cml0aW5nIHRoZQo+IC0JICogbGFz dCBsaW5lLgo+IC0JICovCj4gLQllX2xpbmUgPSBwYmxrX2xpbmVfZ2V0X2VyYXNlKHBibGspOwo+ IC0JaWYgKCFlX2xpbmUpCj4gLQkJcmV0dXJuIC1FTk9TUEM7Cj4gLQo+IC0JLyogRXJhc2UgYmxv Y2tzIHRoYXQgYXJlIGJhZCBpbiB0aGlzIGxpbmUgYnV0IG1pZ2h0IG5vdCBiZSBpbiBuZXh0ICov Cj4gLQlpZiAodW5saWtlbHkocGJsa19wcGFfZW1wdHkoKmVyYXNlX3BwYSkpICYmCj4gLQkJCWJp dG1hcF93ZWlnaHQoZF9saW5lLT5ibGtfYml0bWFwLCBsbS0+YmxrX3Blcl9saW5lKSkgewo+IC0J CWludCBiaXQgPSAtMTsKPiAtCj4gLXJldHJ5Ogo+IC0JCWJpdCA9IGZpbmRfbmV4dF9iaXQoZF9s aW5lLT5ibGtfYml0bWFwLAo+IC0JCQkJCQlsbS0+YmxrX3Blcl9saW5lLCBiaXQgKyAxKTsKPiAt CQlpZiAoYml0ID49IGxtLT5ibGtfcGVyX2xpbmUpCj4gLQkJCXJldHVybiAwOwo+IC0KPiAtCQlz cGluX2xvY2soJmVfbGluZS0+bG9jayk7Cj4gLQkJaWYgKHRlc3RfYml0KGJpdCwgZV9saW5lLT5l cmFzZV9iaXRtYXApKSB7Cj4gLQkJCXNwaW5fdW5sb2NrKCZlX2xpbmUtPmxvY2spOwo+IC0JCQln b3RvIHJldHJ5Owo+IC0JCX0KPiAtCQlzcGluX3VubG9jaygmZV9saW5lLT5sb2NrKTsKPiAtCj4g LQkJc2V0X2JpdChiaXQsIGVfbGluZS0+ZXJhc2VfYml0bWFwKTsKPiAtCQlhdG9taWNfZGVjKCZl X2xpbmUtPmxlZnRfZWJsa3MpOwo+IC0JCSplcmFzZV9wcGEgPSBwYmxrLT5sdW5zW2JpdF0uYnBw YTsgLyogc2V0IGNoIGFuZCBsdW4gKi8KPiAtCQllcmFzZV9wcGEtPmEuYmxrID0gZV9saW5lLT5p ZDsKPiAtCX0KPiAtCj4gLQlyZXR1cm4gMDsKPiAtfQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2xp Z2h0bnZtL3BibGstcmIuYyBiL2RyaXZlcnMvbGlnaHRudm0vcGJsay1yYi5jCj4gZGVsZXRlZCBm aWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggNWFiYjE3MDViMDM5Li4wMDAwMDAwMDAwMDAKPiAtLS0g YS9kcml2ZXJzL2xpZ2h0bnZtL3BibGstcmIuYwo+ICsrKyAvZGV2L251bGwKPiBAQCAtMSw4NTgg KzAsMCBAQAo+IC0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAo+IC0vKgo+IC0g KiBDb3B5cmlnaHQgKEMpIDIwMTYgQ05FWCBMYWJzCj4gLSAqIEluaXRpYWwgcmVsZWFzZTogSmF2 aWVyIEdvbnphbGV6IDxqYXZpZXJAY25leGxhYnMuY29tPgo+IC0gKgo+IC0gKiBCYXNlZCB1cG9u IHRoZSBjaXJjdWxhciByaW5nYnVmZmVyLgo+IC0gKgo+IC0gKiBUaGlzIHByb2dyYW0gaXMgZnJl ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCj4gLSAqIG1vZGlmeSBp dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNp b24KPiAtICogMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4K PiAtICoKPiAtICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg aXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAo+IC0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4gLSAqIE1FUkNIQU5UQUJJTElUWSBvciBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCj4gLSAqIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPiAtICoKPiAtICogcGJsay1yYi5j IC0gcGJsaydzIHdyaXRlIGJ1ZmZlcgo+IC0gKi8KPiAtCj4gLSNpbmNsdWRlIDxsaW51eC9jaXJj X2J1Zi5oPgo+IC0KPiAtI2luY2x1ZGUgInBibGsuaCIKPiAtCj4gLXN0YXRpYyBERUNMQVJFX1JX U0VNKHBibGtfcmJfbG9jayk7Cj4gLQo+IC1zdGF0aWMgdm9pZCBwYmxrX3JiX2RhdGFfZnJlZShz dHJ1Y3QgcGJsa19yYiAqcmIpCj4gLXsKPiAtCXN0cnVjdCBwYmxrX3JiX3BhZ2VzICpwLCAqdDsK PiAtCj4gLQlkb3duX3dyaXRlKCZwYmxrX3JiX2xvY2spOwo+IC0JbGlzdF9mb3JfZWFjaF9lbnRy eV9zYWZlKHAsIHQsICZyYi0+cGFnZXMsIGxpc3QpIHsKPiAtCQlmcmVlX3BhZ2VzKCh1bnNpZ25l ZCBsb25nKXBhZ2VfYWRkcmVzcyhwLT5wYWdlcyksIHAtPm9yZGVyKTsKPiAtCQlsaXN0X2RlbCgm cC0+bGlzdCk7Cj4gLQkJa2ZyZWUocCk7Cj4gLQl9Cj4gLQl1cF93cml0ZSgmcGJsa19yYl9sb2Nr KTsKPiAtfQo+IC0KPiAtdm9pZCBwYmxrX3JiX2ZyZWUoc3RydWN0IHBibGtfcmIgKnJiKQo+IC17 Cj4gLQlwYmxrX3JiX2RhdGFfZnJlZShyYik7Cj4gLQl2ZnJlZShyYi0+ZW50cmllcyk7Cj4gLX0K PiAtCj4gLS8qCj4gLSAqIHBibGtfcmJfY2FsY3VsYXRlX3NpemUgLS0gY2FsY3VsYXRlIHRoZSBz aXplIG9mIHRoZSB3cml0ZSBidWZmZXIKPiAtICovCj4gLXN0YXRpYyB1bnNpZ25lZCBpbnQgcGJs a19yYl9jYWxjdWxhdGVfc2l6ZSh1bnNpZ25lZCBpbnQgbnJfZW50cmllcywKPiAtCQkJCQkgICB1 bnNpZ25lZCBpbnQgdGhyZXNob2xkKQo+IC17Cj4gLQl1bnNpZ25lZCBpbnQgdGhyX3N6ID0gMSA8 PCAoZ2V0X2NvdW50X29yZGVyKHRocmVzaG9sZCArIE5WTV9NQVhfVkxCQSkpOwo+IC0JdW5zaWdu ZWQgaW50IG1heF9zeiA9IG1heCh0aHJfc3osIG5yX2VudHJpZXMpOwo+IC0JdW5zaWduZWQgaW50 IG1heF9pbzsKPiAtCj4gLQkvKiBBbGxvYyBhIHdyaXRlIGJ1ZmZlciB0aGF0IGNhbiAoaSkgZml0 IGF0IGxlYXN0IHR3byBzcGxpdCBiaW9zCj4gLQkgKiAoY29uc2lkZXJpbmcgbWF4IEkvTyBzaXpl IE5WTV9NQVhfVkxCQSwgYW5kIChpaSkgZ3VhcmFudGVlIHRoYXQgdGhlCj4gLQkgKiB0aHJlc2hv bGQgd2lsbCBiZSByZXNwZWN0ZWQKPiAtCSAqLwo+IC0JbWF4X2lvID0gKDEgPDwgbWF4KChpbnQp KGdldF9jb3VudF9vcmRlcihtYXhfc3opKSwKPiAtCQkJCShpbnQpKGdldF9jb3VudF9vcmRlcihO Vk1fTUFYX1ZMQkEgPDwgMSkpKSk7Cj4gLQlpZiAoKHRocmVzaG9sZCArIE5WTV9NQVhfVkxCQSkg Pj0gbWF4X2lvKQo+IC0JCW1heF9pbyA8PD0gMTsKPiAtCj4gLQlyZXR1cm4gbWF4X2lvOwo+IC19 Cj4gLQo+IC0vKgo+IC0gKiBJbml0aWFsaXplIHJpbmcgYnVmZmVyLiBUaGUgZGF0YSBhbmQgbWV0 YWRhdGEgYnVmZmVycyBtdXN0IGJlIHByZXZpb3VzbHkKPiAtICogYWxsb2NhdGVkIGFuZCB0aGVp ciBzaXplIG11c3QgYmUgYSBwb3dlciBvZiB0d28KPiAtICogKERvY3VtZW50YXRpb24vY29yZS1h cGkvY2lyY3VsYXItYnVmZmVycy5yc3QpCj4gLSAqLwo+IC1pbnQgcGJsa19yYl9pbml0KHN0cnVj dCBwYmxrX3JiICpyYiwgdW5zaWduZWQgaW50IHNpemUsIHVuc2lnbmVkIGludCB0aHJlc2hvbGQs Cj4gLQkJIHVuc2lnbmVkIGludCBzZWdfc2l6ZSkKPiAtewo+IC0Jc3RydWN0IHBibGsgKnBibGsg PSBjb250YWluZXJfb2YocmIsIHN0cnVjdCBwYmxrLCByd2IpOwo+IC0Jc3RydWN0IHBibGtfcmJf ZW50cnkgKmVudHJpZXM7Cj4gLQl1bnNpZ25lZCBpbnQgaW5pdF9lbnRyeSA9IDA7Cj4gLQl1bnNp Z25lZCBpbnQgbWF4X29yZGVyID0gTUFYX09SREVSIC0gMTsKPiAtCXVuc2lnbmVkIGludCBwb3dl cl9zaXplLCBwb3dlcl9zZWdfc3o7Cj4gLQl1bnNpZ25lZCBpbnQgYWxsb2Nfb3JkZXIsIG9yZGVy LCBpdGVyOwo+IC0JdW5zaWduZWQgaW50IG5yX2VudHJpZXM7Cj4gLQo+IC0JbnJfZW50cmllcyA9 IHBibGtfcmJfY2FsY3VsYXRlX3NpemUoc2l6ZSwgdGhyZXNob2xkKTsKPiAtCWVudHJpZXMgPSB2 emFsbG9jKGFycmF5X3NpemUobnJfZW50cmllcywgc2l6ZW9mKHN0cnVjdCBwYmxrX3JiX2VudHJ5 KSkpOwo+IC0JaWYgKCFlbnRyaWVzKQo+IC0JCXJldHVybiAtRU5PTUVNOwo+IC0KPiAtCXBvd2Vy X3NpemUgPSBnZXRfY291bnRfb3JkZXIobnJfZW50cmllcyk7Cj4gLQlwb3dlcl9zZWdfc3ogPSBn ZXRfY291bnRfb3JkZXIoc2VnX3NpemUpOwo+IC0KPiAtCWRvd25fd3JpdGUoJnBibGtfcmJfbG9j ayk7Cj4gLQlyYi0+ZW50cmllcyA9IGVudHJpZXM7Cj4gLQlyYi0+c2VnX3NpemUgPSAoMSA8PCBw b3dlcl9zZWdfc3opOwo+IC0JcmItPm5yX2VudHJpZXMgPSAoMSA8PCBwb3dlcl9zaXplKTsKPiAt CXJiLT5tZW0gPSByYi0+c3VibSA9IHJiLT5zeW5jID0gcmItPmwycF91cGRhdGUgPSAwOwo+IC0J cmItPmJhY2tfdGhyZXMgPSB0aHJlc2hvbGQ7Cj4gLQlyYi0+Zmx1c2hfcG9pbnQgPSBFTVBUWV9F TlRSWTsKPiAtCj4gLQlzcGluX2xvY2tfaW5pdCgmcmItPndfbG9jayk7Cj4gLQlzcGluX2xvY2tf aW5pdCgmcmItPnNfbG9jayk7Cj4gLQo+IC0JSU5JVF9MSVNUX0hFQUQoJnJiLT5wYWdlcyk7Cj4g LQo+IC0JYWxsb2Nfb3JkZXIgPSBwb3dlcl9zaXplOwo+IC0JaWYgKGFsbG9jX29yZGVyID49IG1h eF9vcmRlcikgewo+IC0JCW9yZGVyID0gbWF4X29yZGVyOwo+IC0JCWl0ZXIgPSAoMSA8PCAoYWxs b2Nfb3JkZXIgLSBtYXhfb3JkZXIpKTsKPiAtCX0gZWxzZSB7Cj4gLQkJb3JkZXIgPSBhbGxvY19v cmRlcjsKPiAtCQlpdGVyID0gMTsKPiAtCX0KPiAtCj4gLQlkbyB7Cj4gLQkJc3RydWN0IHBibGtf cmJfZW50cnkgKmVudHJ5Owo+IC0JCXN0cnVjdCBwYmxrX3JiX3BhZ2VzICpwYWdlX3NldDsKPiAt CQl2b2lkICprYWRkcjsKPiAtCQl1bnNpZ25lZCBsb25nIHNldF9zaXplOwo+IC0JCWludCBpOwo+ IC0KPiAtCQlwYWdlX3NldCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwYmxrX3JiX3BhZ2VzKSwg R0ZQX0tFUk5FTCk7Cj4gLQkJaWYgKCFwYWdlX3NldCkgewo+IC0JCQl1cF93cml0ZSgmcGJsa19y Yl9sb2NrKTsKPiAtCQkJdmZyZWUoZW50cmllcyk7Cj4gLQkJCXJldHVybiAtRU5PTUVNOwo+IC0J CX0KPiAtCj4gLQkJcGFnZV9zZXQtPm9yZGVyID0gb3JkZXI7Cj4gLQkJcGFnZV9zZXQtPnBhZ2Vz ID0gYWxsb2NfcGFnZXMoR0ZQX0tFUk5FTCwgb3JkZXIpOwo+IC0JCWlmICghcGFnZV9zZXQtPnBh Z2VzKSB7Cj4gLQkJCWtmcmVlKHBhZ2Vfc2V0KTsKPiAtCQkJcGJsa19yYl9kYXRhX2ZyZWUocmIp Owo+IC0JCQl1cF93cml0ZSgmcGJsa19yYl9sb2NrKTsKPiAtCQkJdmZyZWUoZW50cmllcyk7Cj4g LQkJCXJldHVybiAtRU5PTUVNOwo+IC0JCX0KPiAtCQlrYWRkciA9IHBhZ2VfYWRkcmVzcyhwYWdl X3NldC0+cGFnZXMpOwo+IC0KPiAtCQllbnRyeSA9ICZyYi0+ZW50cmllc1tpbml0X2VudHJ5XTsK PiAtCQllbnRyeS0+ZGF0YSA9IGthZGRyOwo+IC0JCWVudHJ5LT5jYWNoZWxpbmUgPSBwYmxrX2Nh Y2hlbGluZV90b19hZGRyKGluaXRfZW50cnkrKyk7Cj4gLQkJZW50cnktPndfY3R4LmZsYWdzID0g UEJMS19XUklUQUJMRV9FTlRSWTsKPiAtCj4gLQkJc2V0X3NpemUgPSAoMSA8PCBvcmRlcik7Cj4g LQkJZm9yIChpID0gMTsgaSA8IHNldF9zaXplOyBpKyspIHsKPiAtCQkJZW50cnkgPSAmcmItPmVu dHJpZXNbaW5pdF9lbnRyeV07Cj4gLQkJCWVudHJ5LT5jYWNoZWxpbmUgPSBwYmxrX2NhY2hlbGlu ZV90b19hZGRyKGluaXRfZW50cnkrKyk7Cj4gLQkJCWVudHJ5LT5kYXRhID0ga2FkZHIgKyAoaSAq IHJiLT5zZWdfc2l6ZSk7Cj4gLQkJCWVudHJ5LT53X2N0eC5mbGFncyA9IFBCTEtfV1JJVEFCTEVf RU5UUlk7Cj4gLQkJCWJpb19saXN0X2luaXQoJmVudHJ5LT53X2N0eC5iaW9zKTsKPiAtCQl9Cj4g LQo+IC0JCWxpc3RfYWRkX3RhaWwoJnBhZ2Vfc2V0LT5saXN0LCAmcmItPnBhZ2VzKTsKPiAtCQlp dGVyLS07Cj4gLQl9IHdoaWxlIChpdGVyID4gMCk7Cj4gLQl1cF93cml0ZSgmcGJsa19yYl9sb2Nr KTsKPiAtCj4gLSNpZmRlZiBDT05GSUdfTlZNX1BCTEtfREVCVUcKPiAtCWF0b21pY19zZXQoJnJi LT5pbmZsaWdodF9mbHVzaF9wb2ludCwgMCk7Cj4gLSNlbmRpZgo+IC0KPiAtCS8qCj4gLQkgKiBJ bml0aWFsaXplIHJhdGUtbGltaXRlciwgd2hpY2ggY29udHJvbHMgYWNjZXNzIHRvIHRoZSB3cml0 ZSBidWZmZXIKPiAtCSAqIGJ5IHVzZXIgYW5kIEdDIEkvTwo+IC0JICovCj4gLQlwYmxrX3JsX2lu aXQoJnBibGstPnJsLCByYi0+bnJfZW50cmllcywgdGhyZXNob2xkKTsKPiAtCj4gLQlyZXR1cm4g MDsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgY2xlYW5fd2N0eChzdHJ1Y3QgcGJsa193X2N0eCAq d19jdHgpCj4gLXsKPiAtCWludCBmbGFnczsKPiAtCj4gLQlmbGFncyA9IFJFQURfT05DRSh3X2N0 eC0+ZmxhZ3MpOwo+IC0JV0FSTl9PTkNFKCEoZmxhZ3MgJiBQQkxLX1NVQk1JVFRFRF9FTlRSWSks Cj4gLQkJCSJwYmxrOiBvdmVyd3JpdGluZyB1bnN1Ym1pdHRlZCBkYXRhXG4iKTsKPiAtCj4gLQkv KiBSZWxlYXNlIGZsYWdzIG9uIGNvbnRleHQuIFByb3RlY3QgZnJvbSB3cml0ZXMgYW5kIHJlYWRz ICovCj4gLQlzbXBfc3RvcmVfcmVsZWFzZSgmd19jdHgtPmZsYWdzLCBQQkxLX1dSSVRBQkxFX0VO VFJZKTsKPiAtCXBibGtfcHBhX3NldF9lbXB0eSgmd19jdHgtPnBwYSk7Cj4gLQl3X2N0eC0+bGJh ID0gQUREUl9FTVBUWTsKPiAtfQo+IC0KPiAtI2RlZmluZSBwYmxrX3JiX3JpbmdfY291bnQoaGVh ZCwgdGFpbCwgc2l6ZSkgQ0lSQ19DTlQoaGVhZCwgdGFpbCwgc2l6ZSkKPiAtI2RlZmluZSBwYmxr X3JiX3Jpbmdfc3BhY2UocmIsIGhlYWQsIHRhaWwsIHNpemUpIFwKPiAtCQkJCQkoQ0lSQ19TUEFD RShoZWFkLCB0YWlsLCBzaXplKSkKPiAtCj4gLS8qCj4gLSAqIEJ1ZmZlciBzcGFjZSBpcyBjYWxj dWxhdGVkIHdpdGggcmVzcGVjdCB0byB0aGUgYmFjayBwb2ludGVyIHNpZ25hbGluZwo+IC0gKiBz eW5jaHJvbml6ZWQgZW50cmllcyB0byB0aGUgbWVkaWEuCj4gLSAqLwo+IC1zdGF0aWMgdW5zaWdu ZWQgaW50IHBibGtfcmJfc3BhY2Uoc3RydWN0IHBibGtfcmIgKnJiKQo+IC17Cj4gLQl1bnNpZ25l ZCBpbnQgbWVtID0gUkVBRF9PTkNFKHJiLT5tZW0pOwo+IC0JdW5zaWduZWQgaW50IHN5bmMgPSBS RUFEX09OQ0UocmItPnN5bmMpOwo+IC0KPiAtCXJldHVybiBwYmxrX3JiX3Jpbmdfc3BhY2UocmIs IG1lbSwgc3luYywgcmItPm5yX2VudHJpZXMpOwo+IC19Cj4gLQo+IC11bnNpZ25lZCBpbnQgcGJs a19yYl9wdHJfd3JhcChzdHJ1Y3QgcGJsa19yYiAqcmIsIHVuc2lnbmVkIGludCBwLAo+IC0JCQkg ICAgICB1bnNpZ25lZCBpbnQgbnJfZW50cmllcykKPiAtewo+IC0JcmV0dXJuIChwICsgbnJfZW50 cmllcykgJiAocmItPm5yX2VudHJpZXMgLSAxKTsKPiAtfQo+IC0KPiAtLyoKPiAtICogQnVmZmVy IGNvdW50IGlzIGNhbGN1bGF0ZWQgd2l0aCByZXNwZWN0IHRvIHRoZSBzdWJtaXNzaW9uIGVudHJ5 IHNpZ25hbGluZyB0aGUKPiAtICogZW50cmllcyB0aGF0IGFyZSBhdmFpbGFibGUgdG8gc2VuZCB0 byB0aGUgbWVkaWEKPiAtICovCj4gLXVuc2lnbmVkIGludCBwYmxrX3JiX3JlYWRfY291bnQoc3Ry dWN0IHBibGtfcmIgKnJiKQo+IC17Cj4gLQl1bnNpZ25lZCBpbnQgbWVtID0gUkVBRF9PTkNFKHJi LT5tZW0pOwo+IC0JdW5zaWduZWQgaW50IHN1Ym0gPSBSRUFEX09OQ0UocmItPnN1Ym0pOwo+IC0K PiAtCXJldHVybiBwYmxrX3JiX3JpbmdfY291bnQobWVtLCBzdWJtLCByYi0+bnJfZW50cmllcyk7 Cj4gLX0KPiAtCj4gLXVuc2lnbmVkIGludCBwYmxrX3JiX3N5bmNfY291bnQoc3RydWN0IHBibGtf cmIgKnJiKQo+IC17Cj4gLQl1bnNpZ25lZCBpbnQgbWVtID0gUkVBRF9PTkNFKHJiLT5tZW0pOwo+ IC0JdW5zaWduZWQgaW50IHN5bmMgPSBSRUFEX09OQ0UocmItPnN5bmMpOwo+IC0KPiAtCXJldHVy biBwYmxrX3JiX3JpbmdfY291bnQobWVtLCBzeW5jLCByYi0+bnJfZW50cmllcyk7Cj4gLX0KPiAt Cj4gLXVuc2lnbmVkIGludCBwYmxrX3JiX3JlYWRfY29tbWl0KHN0cnVjdCBwYmxrX3JiICpyYiwg dW5zaWduZWQgaW50IG5yX2VudHJpZXMpCj4gLXsKPiAtCXVuc2lnbmVkIGludCBzdWJtOwo+IC0K PiAtCXN1Ym0gPSBSRUFEX09OQ0UocmItPnN1Ym0pOwo+IC0JLyogQ29tbWl0IHJlYWQgbWVhbnMg dXBkYXRpbmcgc3VibWlzc2lvbiBwb2ludGVyICovCj4gLQlzbXBfc3RvcmVfcmVsZWFzZSgmcmIt PnN1Ym0sIHBibGtfcmJfcHRyX3dyYXAocmIsIHN1Ym0sIG5yX2VudHJpZXMpKTsKPiAtCj4gLQly ZXR1cm4gc3VibTsKPiAtfQo+IC0KPiAtc3RhdGljIGludCBfX3BibGtfcmJfdXBkYXRlX2wycChz dHJ1Y3QgcGJsa19yYiAqcmIsIHVuc2lnbmVkIGludCB0b191cGRhdGUpCj4gLXsKPiAtCXN0cnVj dCBwYmxrICpwYmxrID0gY29udGFpbmVyX29mKHJiLCBzdHJ1Y3QgcGJsaywgcndiKTsKPiAtCXN0 cnVjdCBwYmxrX2xpbmUgKmxpbmU7Cj4gLQlzdHJ1Y3QgcGJsa19yYl9lbnRyeSAqZW50cnk7Cj4g LQlzdHJ1Y3QgcGJsa193X2N0eCAqd19jdHg7Cj4gLQl1bnNpZ25lZCBpbnQgdXNlcl9pbyA9IDAs IGdjX2lvID0gMDsKPiAtCXVuc2lnbmVkIGludCBpOwo+IC0JaW50IGZsYWdzOwo+IC0KPiAtCWZv ciAoaSA9IDA7IGkgPCB0b191cGRhdGU7IGkrKykgewo+IC0JCWVudHJ5ID0gJnJiLT5lbnRyaWVz W3JiLT5sMnBfdXBkYXRlXTsKPiAtCQl3X2N0eCA9ICZlbnRyeS0+d19jdHg7Cj4gLQo+IC0JCWZs YWdzID0gUkVBRF9PTkNFKGVudHJ5LT53X2N0eC5mbGFncyk7Cj4gLQkJaWYgKGZsYWdzICYgUEJM S19JT1RZUEVfVVNFUikKPiAtCQkJdXNlcl9pbysrOwo+IC0JCWVsc2UgaWYgKGZsYWdzICYgUEJM S19JT1RZUEVfR0MpCj4gLQkJCWdjX2lvKys7Cj4gLQkJZWxzZQo+IC0JCQlXQVJOKDEsICJwYmxr OiB1bmtub3duIElPIHR5cGVcbiIpOwo+IC0KPiAtCQlwYmxrX3VwZGF0ZV9tYXBfZGV2KHBibGss IHdfY3R4LT5sYmEsIHdfY3R4LT5wcGEsCj4gLQkJCQkJCQllbnRyeS0+Y2FjaGVsaW5lKTsKPiAt Cj4gLQkJbGluZSA9IHBibGtfcHBhX3RvX2xpbmUocGJsaywgd19jdHgtPnBwYSk7Cj4gLQkJYXRv bWljX2RlYygmbGluZS0+c2VjX3RvX3VwZGF0ZSk7Cj4gLQkJa3JlZl9wdXQoJmxpbmUtPnJlZiwg cGJsa19saW5lX3B1dCk7Cj4gLQkJY2xlYW5fd2N0eCh3X2N0eCk7Cj4gLQkJcmItPmwycF91cGRh dGUgPSBwYmxrX3JiX3B0cl93cmFwKHJiLCByYi0+bDJwX3VwZGF0ZSwgMSk7Cj4gLQl9Cj4gLQo+ IC0JcGJsa19ybF9vdXQoJnBibGstPnJsLCB1c2VyX2lvLCBnY19pbyk7Cj4gLQo+IC0JcmV0dXJu IDA7Cj4gLX0KPiAtCj4gLS8qCj4gLSAqIFdoZW4gd2UgbW92ZSB0aGUgbDJwX3VwZGF0ZSBwb2lu dGVyLCB3ZSB1cGRhdGUgdGhlIGwycCB0YWJsZSAtIGxvb2t1cHMgd2lsbAo+IC0gKiBwb2ludCB0 byB0aGUgcGh5c2ljYWwgYWRkcmVzcyBpbnN0ZWFkIG9mIHRvIHRoZSBjYWNoZWxpbmUgaW4gdGhl IHdyaXRlIGJ1ZmZlcgo+IC0gKiBmcm9tIHRoaXMgbW9tZW50IG9uLgo+IC0gKi8KPiAtc3RhdGlj IGludCBwYmxrX3JiX3VwZGF0ZV9sMnAoc3RydWN0IHBibGtfcmIgKnJiLCB1bnNpZ25lZCBpbnQg bnJfZW50cmllcywKPiAtCQkJICAgICAgdW5zaWduZWQgaW50IG1lbSwgdW5zaWduZWQgaW50IHN5 bmMpCj4gLXsKPiAtCXVuc2lnbmVkIGludCBzcGFjZSwgY291bnQ7Cj4gLQlpbnQgcmV0ID0gMDsK PiAtCj4gLQlsb2NrZGVwX2Fzc2VydF9oZWxkKCZyYi0+d19sb2NrKTsKPiAtCj4gLQkvKiBVcGRh dGUgbDJwIG9ubHkgYXMgYnVmZmVyIGVudHJpZXMgYXJlIGJlaW5nIG92ZXJ3cml0dGVuICovCj4g LQlzcGFjZSA9IHBibGtfcmJfcmluZ19zcGFjZShyYiwgbWVtLCByYi0+bDJwX3VwZGF0ZSwgcmIt Pm5yX2VudHJpZXMpOwo+IC0JaWYgKHNwYWNlID4gbnJfZW50cmllcykKPiAtCQlnb3RvIG91dDsK PiAtCj4gLQljb3VudCA9IG5yX2VudHJpZXMgLSBzcGFjZTsKPiAtCS8qIGwycF91cGRhdGUgdXNl ZCBleGNsdXNpdmVseSB1bmRlciByYi0+d19sb2NrICovCj4gLQlyZXQgPSBfX3BibGtfcmJfdXBk YXRlX2wycChyYiwgY291bnQpOwo+IC0KPiAtb3V0Ogo+IC0JcmV0dXJuIHJldDsKPiAtfQo+IC0K PiAtLyoKPiAtICogVXBkYXRlIHRoZSBsMnAgZW50cnkgZm9yIGFsbCBzZWN0b3JzIHN0b3JlZCBv biB0aGUgd3JpdGUgYnVmZmVyLiBUaGlzIG1lYW5zCj4gLSAqIHRoYXQgYWxsIGZ1dHVyZSBsb29r dXBzIHRvIHRoZSBsMnAgdGFibGUgd2lsbCBwb2ludCB0byBhIGRldmljZSBhZGRyZXNzLCBub3QK PiAtICogdG8gdGhlIGNhY2hlbGluZSBpbiB0aGUgd3JpdGUgYnVmZmVyLgo+IC0gKi8KPiAtdm9p ZCBwYmxrX3JiX3N5bmNfbDJwKHN0cnVjdCBwYmxrX3JiICpyYikKPiAtewo+IC0JdW5zaWduZWQg aW50IHN5bmM7Cj4gLQl1bnNpZ25lZCBpbnQgdG9fdXBkYXRlOwo+IC0KPiAtCXNwaW5fbG9jaygm cmItPndfbG9jayk7Cj4gLQo+IC0JLyogUHJvdGVjdCBmcm9tIHJlYWRzIGFuZCB3cml0ZXMgKi8K PiAtCXN5bmMgPSBzbXBfbG9hZF9hY3F1aXJlKCZyYi0+c3luYyk7Cj4gLQo+IC0JdG9fdXBkYXRl ID0gcGJsa19yYl9yaW5nX2NvdW50KHN5bmMsIHJiLT5sMnBfdXBkYXRlLCByYi0+bnJfZW50cmll cyk7Cj4gLQlfX3BibGtfcmJfdXBkYXRlX2wycChyYiwgdG9fdXBkYXRlKTsKPiAtCj4gLQlzcGlu X3VubG9jaygmcmItPndfbG9jayk7Cj4gLX0KPiAtCj4gLS8qCj4gLSAqIFdyaXRlIEBucl9lbnRy aWVzIHRvIHJpbmcgYnVmZmVyIGZyb20gQGRhdGEgYnVmZmVyIGlmIHRoZXJlIGlzIGVub3VnaCBz cGFjZS4KPiAtICogVHlwaWNhbGx5LCA0S0IgZGF0YSBjaHVua3MgY29taW5nIGZyb20gYSBiaW8g d2lsbCBiZSBjb3BpZWQgdG8gdGhlIHJpbmcKPiAtICogYnVmZmVyLCB0aHVzIHRoZSB3cml0ZSB3 aWxsIGZhaWwgaWYgbm90IGFsbCBpbmNvbWluZyBkYXRhIGNhbiBiZSBjb3BpZWQuCj4gLSAqCj4g LSAqLwo+IC1zdGF0aWMgdm9pZCBfX3BibGtfcmJfd3JpdGVfZW50cnkoc3RydWN0IHBibGtfcmIg KnJiLCB2b2lkICpkYXRhLAo+IC0JCQkJICBzdHJ1Y3QgcGJsa193X2N0eCB3X2N0eCwKPiAtCQkJ CSAgc3RydWN0IHBibGtfcmJfZW50cnkgKmVudHJ5KQo+IC17Cj4gLQltZW1jcHkoZW50cnktPmRh dGEsIGRhdGEsIHJiLT5zZWdfc2l6ZSk7Cj4gLQo+IC0JZW50cnktPndfY3R4LmxiYSA9IHdfY3R4 LmxiYTsKPiAtCWVudHJ5LT53X2N0eC5wcGEgPSB3X2N0eC5wcGE7Cj4gLX0KPiAtCj4gLXZvaWQg cGJsa19yYl93cml0ZV9lbnRyeV91c2VyKHN0cnVjdCBwYmxrX3JiICpyYiwgdm9pZCAqZGF0YSwK PiAtCQkJICAgICAgc3RydWN0IHBibGtfd19jdHggd19jdHgsIHVuc2lnbmVkIGludCByaW5nX3Bv cykKPiAtewo+IC0Jc3RydWN0IHBibGsgKnBibGsgPSBjb250YWluZXJfb2YocmIsIHN0cnVjdCBw YmxrLCByd2IpOwo+IC0Jc3RydWN0IHBibGtfcmJfZW50cnkgKmVudHJ5Owo+IC0JaW50IGZsYWdz Owo+IC0KPiAtCWVudHJ5ID0gJnJiLT5lbnRyaWVzW3JpbmdfcG9zXTsKPiAtCWZsYWdzID0gUkVB RF9PTkNFKGVudHJ5LT53X2N0eC5mbGFncyk7Cj4gLSNpZmRlZiBDT05GSUdfTlZNX1BCTEtfREVC VUcKPiAtCS8qIENhbGxlciBtdXN0IGd1YXJhbnRlZSB0aGF0IHRoZSBlbnRyeSBpcyBmcmVlICov Cj4gLQlCVUdfT04oIShmbGFncyAmIFBCTEtfV1JJVEFCTEVfRU5UUlkpKTsKPiAtI2VuZGlmCj4g LQo+IC0JX19wYmxrX3JiX3dyaXRlX2VudHJ5KHJiLCBkYXRhLCB3X2N0eCwgZW50cnkpOwo+IC0K PiAtCXBibGtfdXBkYXRlX21hcF9jYWNoZShwYmxrLCB3X2N0eC5sYmEsIGVudHJ5LT5jYWNoZWxp bmUpOwo+IC0JZmxhZ3MgPSB3X2N0eC5mbGFncyB8IFBCTEtfV1JJVFRFTl9EQVRBOwo+IC0KPiAt CS8qIFJlbGVhc2UgZmxhZ3Mgb24gd3JpdGUgY29udGV4dC4gUHJvdGVjdCBmcm9tIHdyaXRlcyAq Lwo+IC0Jc21wX3N0b3JlX3JlbGVhc2UoJmVudHJ5LT53X2N0eC5mbGFncywgZmxhZ3MpOwo+IC19 Cj4gLQo+IC12b2lkIHBibGtfcmJfd3JpdGVfZW50cnlfZ2Moc3RydWN0IHBibGtfcmIgKnJiLCB2 b2lkICpkYXRhLAo+IC0JCQkgICAgc3RydWN0IHBibGtfd19jdHggd19jdHgsIHN0cnVjdCBwYmxr X2xpbmUgKmxpbmUsCj4gLQkJCSAgICB1NjQgcGFkZHIsIHVuc2lnbmVkIGludCByaW5nX3BvcykK PiAtewo+IC0Jc3RydWN0IHBibGsgKnBibGsgPSBjb250YWluZXJfb2YocmIsIHN0cnVjdCBwYmxr LCByd2IpOwo+IC0Jc3RydWN0IHBibGtfcmJfZW50cnkgKmVudHJ5Owo+IC0JaW50IGZsYWdzOwo+ IC0KPiAtCWVudHJ5ID0gJnJiLT5lbnRyaWVzW3JpbmdfcG9zXTsKPiAtCWZsYWdzID0gUkVBRF9P TkNFKGVudHJ5LT53X2N0eC5mbGFncyk7Cj4gLSNpZmRlZiBDT05GSUdfTlZNX1BCTEtfREVCVUcK PiAtCS8qIENhbGxlciBtdXN0IGd1YXJhbnRlZSB0aGF0IHRoZSBlbnRyeSBpcyBmcmVlICovCj4g LQlCVUdfT04oIShmbGFncyAmIFBCTEtfV1JJVEFCTEVfRU5UUlkpKTsKPiAtI2VuZGlmCj4gLQo+ IC0JX19wYmxrX3JiX3dyaXRlX2VudHJ5KHJiLCBkYXRhLCB3X2N0eCwgZW50cnkpOwo+IC0KPiAt CWlmICghcGJsa191cGRhdGVfbWFwX2djKHBibGssIHdfY3R4LmxiYSwgZW50cnktPmNhY2hlbGlu ZSwgbGluZSwgcGFkZHIpKQo+IC0JCWVudHJ5LT53X2N0eC5sYmEgPSBBRERSX0VNUFRZOwo+IC0K PiAtCWZsYWdzID0gd19jdHguZmxhZ3MgfCBQQkxLX1dSSVRURU5fREFUQTsKPiAtCj4gLQkvKiBS ZWxlYXNlIGZsYWdzIG9uIHdyaXRlIGNvbnRleHQuIFByb3RlY3QgZnJvbSB3cml0ZXMgKi8KPiAt CXNtcF9zdG9yZV9yZWxlYXNlKCZlbnRyeS0+d19jdHguZmxhZ3MsIGZsYWdzKTsKPiAtfQo+IC0K PiAtc3RhdGljIGludCBwYmxrX3JiX2ZsdXNoX3BvaW50X3NldChzdHJ1Y3QgcGJsa19yYiAqcmIs IHN0cnVjdCBiaW8gKmJpbywKPiAtCQkJCSAgIHVuc2lnbmVkIGludCBwb3MpCj4gLXsKPiAtCXN0 cnVjdCBwYmxrX3JiX2VudHJ5ICplbnRyeTsKPiAtCXVuc2lnbmVkIGludCBzeW5jLCBmbHVzaF9w b2ludDsKPiAtCj4gLQlwYmxrX3JiX3N5bmNfaW5pdChyYiwgTlVMTCk7Cj4gLQlzeW5jID0gUkVB RF9PTkNFKHJiLT5zeW5jKTsKPiAtCj4gLQlpZiAocG9zID09IHN5bmMpIHsKPiAtCQlwYmxrX3Ji X3N5bmNfZW5kKHJiLCBOVUxMKTsKPiAtCQlyZXR1cm4gMDsKPiAtCX0KPiAtCj4gLSNpZmRlZiBD T05GSUdfTlZNX1BCTEtfREVCVUcKPiAtCWF0b21pY19pbmMoJnJiLT5pbmZsaWdodF9mbHVzaF9w b2ludCk7Cj4gLSNlbmRpZgo+IC0KPiAtCWZsdXNoX3BvaW50ID0gKHBvcyA9PSAwKSA/IChyYi0+ bnJfZW50cmllcyAtIDEpIDogKHBvcyAtIDEpOwo+IC0JZW50cnkgPSAmcmItPmVudHJpZXNbZmx1 c2hfcG9pbnRdOwo+IC0KPiAtCS8qIFByb3RlY3QgZmx1c2ggcG9pbnRzICovCj4gLQlzbXBfc3Rv cmVfcmVsZWFzZSgmcmItPmZsdXNoX3BvaW50LCBmbHVzaF9wb2ludCk7Cj4gLQo+IC0JaWYgKGJp bykKPiAtCQliaW9fbGlzdF9hZGQoJmVudHJ5LT53X2N0eC5iaW9zLCBiaW8pOwo+IC0KPiAtCXBi bGtfcmJfc3luY19lbmQocmIsIE5VTEwpOwo+IC0KPiAtCXJldHVybiBiaW8gPyAxIDogMDsKPiAt fQo+IC0KPiAtc3RhdGljIGludCBfX3BibGtfcmJfbWF5X3dyaXRlKHN0cnVjdCBwYmxrX3JiICpy YiwgdW5zaWduZWQgaW50IG5yX2VudHJpZXMsCj4gLQkJCSAgICAgICB1bnNpZ25lZCBpbnQgKnBv cykKPiAtewo+IC0JdW5zaWduZWQgaW50IG1lbTsKPiAtCXVuc2lnbmVkIGludCBzeW5jOwo+IC0J dW5zaWduZWQgaW50IHRocmVzaG9sZDsKPiAtCj4gLQlzeW5jID0gUkVBRF9PTkNFKHJiLT5zeW5j KTsKPiAtCW1lbSA9IFJFQURfT05DRShyYi0+bWVtKTsKPiAtCj4gLQl0aHJlc2hvbGQgPSBucl9l bnRyaWVzICsgcmItPmJhY2tfdGhyZXM7Cj4gLQo+IC0JaWYgKHBibGtfcmJfcmluZ19zcGFjZShy YiwgbWVtLCBzeW5jLCByYi0+bnJfZW50cmllcykgPCB0aHJlc2hvbGQpCj4gLQkJcmV0dXJuIDA7 Cj4gLQo+IC0JaWYgKHBibGtfcmJfdXBkYXRlX2wycChyYiwgbnJfZW50cmllcywgbWVtLCBzeW5j KSkKPiAtCQlyZXR1cm4gMDsKPiAtCj4gLQkqcG9zID0gbWVtOwo+IC0KPiAtCXJldHVybiAxOwo+ IC19Cj4gLQo+IC1zdGF0aWMgaW50IHBibGtfcmJfbWF5X3dyaXRlKHN0cnVjdCBwYmxrX3JiICpy YiwgdW5zaWduZWQgaW50IG5yX2VudHJpZXMsCj4gLQkJCSAgICAgdW5zaWduZWQgaW50ICpwb3Mp Cj4gLXsKPiAtCWlmICghX19wYmxrX3JiX21heV93cml0ZShyYiwgbnJfZW50cmllcywgcG9zKSkK PiAtCQlyZXR1cm4gMDsKPiAtCj4gLQkvKiBQcm90ZWN0IGZyb20gcmVhZCBjb3VudCAqLwo+IC0J c21wX3N0b3JlX3JlbGVhc2UoJnJiLT5tZW0sIHBibGtfcmJfcHRyX3dyYXAocmIsICpwb3MsIG5y X2VudHJpZXMpKTsKPiAtCXJldHVybiAxOwo+IC19Cj4gLQo+IC12b2lkIHBibGtfcmJfZmx1c2go c3RydWN0IHBibGtfcmIgKnJiKQo+IC17Cj4gLQlzdHJ1Y3QgcGJsayAqcGJsayA9IGNvbnRhaW5l cl9vZihyYiwgc3RydWN0IHBibGssIHJ3Yik7Cj4gLQl1bnNpZ25lZCBpbnQgbWVtID0gUkVBRF9P TkNFKHJiLT5tZW0pOwo+IC0KPiAtCWlmIChwYmxrX3JiX2ZsdXNoX3BvaW50X3NldChyYiwgTlVM TCwgbWVtKSkKPiAtCQlyZXR1cm47Cj4gLQo+IC0JcGJsa193cml0ZV9raWNrKHBibGspOwo+IC19 Cj4gLQo+IC1zdGF0aWMgaW50IHBibGtfcmJfbWF5X3dyaXRlX2ZsdXNoKHN0cnVjdCBwYmxrX3Ji ICpyYiwgdW5zaWduZWQgaW50IG5yX2VudHJpZXMsCj4gLQkJCQkgICB1bnNpZ25lZCBpbnQgKnBv cywgc3RydWN0IGJpbyAqYmlvLAo+IC0JCQkJICAgaW50ICppb19yZXQpCj4gLXsKPiAtCXVuc2ln bmVkIGludCBtZW07Cj4gLQo+IC0JaWYgKCFfX3BibGtfcmJfbWF5X3dyaXRlKHJiLCBucl9lbnRy aWVzLCBwb3MpKQo+IC0JCXJldHVybiAwOwo+IC0KPiAtCW1lbSA9IHBibGtfcmJfcHRyX3dyYXAo cmIsICpwb3MsIG5yX2VudHJpZXMpOwo+IC0JKmlvX3JldCA9IE5WTV9JT19ET05FOwo+IC0KPiAt CWlmIChiaW8tPmJpX29wZiAmIFJFUV9QUkVGTFVTSCkgewo+IC0JCXN0cnVjdCBwYmxrICpwYmxr ID0gY29udGFpbmVyX29mKHJiLCBzdHJ1Y3QgcGJsaywgcndiKTsKPiAtCj4gLQkJYXRvbWljNjRf aW5jKCZwYmxrLT5ucl9mbHVzaCk7Cj4gLQkJaWYgKHBibGtfcmJfZmx1c2hfcG9pbnRfc2V0KCZw YmxrLT5yd2IsIGJpbywgbWVtKSkKPiAtCQkJKmlvX3JldCA9IE5WTV9JT19PSzsKPiAtCX0KPiAt Cj4gLQkvKiBQcm90ZWN0IGZyb20gcmVhZCBjb3VudCAqLwo+IC0Jc21wX3N0b3JlX3JlbGVhc2Uo JnJiLT5tZW0sIG1lbSk7Cj4gLQo+IC0JcmV0dXJuIDE7Cj4gLX0KPiAtCj4gLS8qCj4gLSAqIEF0 b21pY2FsbHkgY2hlY2sgdGhhdCAoaSkgdGhlcmUgaXMgc3BhY2Ugb24gdGhlIHdyaXRlIGJ1ZmZl ciBmb3IgdGhlCj4gLSAqIGluY29taW5nIEkvTywgYW5kIChpaSkgdGhlIGN1cnJlbnQgSS9PIHR5 cGUgaGFzIGVub3VnaCBidWRnZXQgaW4gdGhlIHdyaXRlCj4gLSAqIGJ1ZmZlciAocmF0ZS1saW1p dGVyKS4KPiAtICovCj4gLWludCBwYmxrX3JiX21heV93cml0ZV91c2VyKHN0cnVjdCBwYmxrX3Ji ICpyYiwgc3RydWN0IGJpbyAqYmlvLAo+IC0JCQkgICB1bnNpZ25lZCBpbnQgbnJfZW50cmllcywg dW5zaWduZWQgaW50ICpwb3MpCj4gLXsKPiAtCXN0cnVjdCBwYmxrICpwYmxrID0gY29udGFpbmVy X29mKHJiLCBzdHJ1Y3QgcGJsaywgcndiKTsKPiAtCWludCBpb19yZXQ7Cj4gLQo+IC0Jc3Bpbl9s b2NrKCZyYi0+d19sb2NrKTsKPiAtCWlvX3JldCA9IHBibGtfcmxfdXNlcl9tYXlfaW5zZXJ0KCZw YmxrLT5ybCwgbnJfZW50cmllcyk7Cj4gLQlpZiAoaW9fcmV0KSB7Cj4gLQkJc3Bpbl91bmxvY2so JnJiLT53X2xvY2spOwo+IC0JCXJldHVybiBpb19yZXQ7Cj4gLQl9Cj4gLQo+IC0JaWYgKCFwYmxr X3JiX21heV93cml0ZV9mbHVzaChyYiwgbnJfZW50cmllcywgcG9zLCBiaW8sICZpb19yZXQpKSB7 Cj4gLQkJc3Bpbl91bmxvY2soJnJiLT53X2xvY2spOwo+IC0JCXJldHVybiBOVk1fSU9fUkVRVUVV RTsKPiAtCX0KPiAtCj4gLQlwYmxrX3JsX3VzZXJfaW4oJnBibGstPnJsLCBucl9lbnRyaWVzKTsK PiAtCXNwaW5fdW5sb2NrKCZyYi0+d19sb2NrKTsKPiAtCj4gLQlyZXR1cm4gaW9fcmV0Owo+IC19 Cj4gLQo+IC0vKgo+IC0gKiBMb29rIGF0IHBibGtfcmJfbWF5X3dyaXRlX3VzZXIgY29tbWVudAo+ IC0gKi8KPiAtaW50IHBibGtfcmJfbWF5X3dyaXRlX2djKHN0cnVjdCBwYmxrX3JiICpyYiwgdW5z aWduZWQgaW50IG5yX2VudHJpZXMsCj4gLQkJCSB1bnNpZ25lZCBpbnQgKnBvcykKPiAtewo+IC0J c3RydWN0IHBibGsgKnBibGsgPSBjb250YWluZXJfb2YocmIsIHN0cnVjdCBwYmxrLCByd2IpOwo+ IC0KPiAtCXNwaW5fbG9jaygmcmItPndfbG9jayk7Cj4gLQlpZiAoIXBibGtfcmxfZ2NfbWF5X2lu c2VydCgmcGJsay0+cmwsIG5yX2VudHJpZXMpKSB7Cj4gLQkJc3Bpbl91bmxvY2soJnJiLT53X2xv Y2spOwo+IC0JCXJldHVybiAwOwo+IC0JfQo+IC0KPiAtCWlmICghcGJsa19yYl9tYXlfd3JpdGUo cmIsIG5yX2VudHJpZXMsIHBvcykpIHsKPiAtCQlzcGluX3VubG9jaygmcmItPndfbG9jayk7Cj4g LQkJcmV0dXJuIDA7Cj4gLQl9Cj4gLQo+IC0JcGJsa19ybF9nY19pbigmcGJsay0+cmwsIG5yX2Vu dHJpZXMpOwo+IC0Jc3Bpbl91bmxvY2soJnJiLT53X2xvY2spOwo+IC0KPiAtCXJldHVybiAxOwo+ IC19Cj4gLQo+IC0vKgo+IC0gKiBSZWFkIGF2YWlsYWJsZSBlbnRyaWVzIG9uIHJiIGFuZCBhZGQg dGhlbSB0byB0aGUgZ2l2ZW4gYmlvLiBUbyBhdm9pZCBhIG1lbW9yeQo+IC0gKiBjb3B5LCBhIHBh Z2UgcmVmZXJlbmNlIHRvIHRoZSB3cml0ZSBidWZmZXIgaXMgdXNlZCB0byBiZSBhZGRlZCB0byB0 aGUgYmlvLgo+IC0gKgo+IC0gKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgYnkgdGhlIHdyaXRlIHRo cmVhZCB0byBmb3JtIHRoZSB3cml0ZSBiaW8gdGhhdCB3aWxsCj4gLSAqIHBlcnNpc3QgZGF0YSBv biB0aGUgd3JpdGUgYnVmZmVyIHRvIHRoZSBtZWRpYS4KPiAtICovCj4gLXVuc2lnbmVkIGludCBw YmxrX3JiX3JlYWRfdG9fYmlvKHN0cnVjdCBwYmxrX3JiICpyYiwgc3RydWN0IG52bV9ycSAqcnFk LAo+IC0JCQkJIHVuc2lnbmVkIGludCBwb3MsIHVuc2lnbmVkIGludCBucl9lbnRyaWVzLAo+IC0J CQkJIHVuc2lnbmVkIGludCBjb3VudCkKPiAtewo+IC0Jc3RydWN0IHBibGsgKnBibGsgPSBjb250 YWluZXJfb2YocmIsIHN0cnVjdCBwYmxrLCByd2IpOwo+IC0Jc3RydWN0IHJlcXVlc3RfcXVldWUg KnEgPSBwYmxrLT5kZXYtPnE7Cj4gLQlzdHJ1Y3QgcGJsa19jX2N0eCAqY19jdHggPSBudm1fcnFf dG9fcGR1KHJxZCk7Cj4gLQlzdHJ1Y3QgYmlvICpiaW8gPSBycWQtPmJpbzsKPiAtCXN0cnVjdCBw YmxrX3JiX2VudHJ5ICplbnRyeTsKPiAtCXN0cnVjdCBwYWdlICpwYWdlOwo+IC0JdW5zaWduZWQg aW50IHBhZCA9IDAsIHRvX3JlYWQgPSBucl9lbnRyaWVzOwo+IC0JdW5zaWduZWQgaW50IGk7Cj4g LQlpbnQgZmxhZ3M7Cj4gLQo+IC0JaWYgKGNvdW50IDwgbnJfZW50cmllcykgewo+IC0JCXBhZCA9 IG5yX2VudHJpZXMgLSBjb3VudDsKPiAtCQl0b19yZWFkID0gY291bnQ7Cj4gLQl9Cj4gLQo+IC0J LyogQWRkIHNwYWNlIGZvciBwYWNrZWQgbWV0YWRhdGEgaWYgaW4gdXNlKi8KPiAtCXBhZCArPSAo cGJsay0+bWluX3dyaXRlX3BncyAtIHBibGstPm1pbl93cml0ZV9wZ3NfZGF0YSk7Cj4gLQo+IC0J Y19jdHgtPnNlbnRyeSA9IHBvczsKPiAtCWNfY3R4LT5ucl92YWxpZCA9IHRvX3JlYWQ7Cj4gLQlj X2N0eC0+bnJfcGFkZGVkID0gcGFkOwo+IC0KPiAtCWZvciAoaSA9IDA7IGkgPCB0b19yZWFkOyBp KyspIHsKPiAtCQllbnRyeSA9ICZyYi0+ZW50cmllc1twb3NdOwo+IC0KPiAtCQkvKiBBIHdyaXRl IGhhcyBiZWVuIGFsbG93ZWQgaW50byB0aGUgYnVmZmVyLCBidXQgZGF0YSBpcyBzdGlsbAo+IC0J CSAqIGJlaW5nIGNvcGllZCB0byBpdC4gSXQgaXMgb2sgdG8gYnVzeSB3YWl0Lgo+IC0JCSAqLwo+ IC10cnk6Cj4gLQkJZmxhZ3MgPSBSRUFEX09OQ0UoZW50cnktPndfY3R4LmZsYWdzKTsKPiAtCQlp ZiAoIShmbGFncyAmIFBCTEtfV1JJVFRFTl9EQVRBKSkgewo+IC0JCQlpb19zY2hlZHVsZSgpOwo+ IC0JCQlnb3RvIHRyeTsKPiAtCQl9Cj4gLQo+IC0JCXBhZ2UgPSB2aXJ0X3RvX3BhZ2UoZW50cnkt PmRhdGEpOwo+IC0JCWlmICghcGFnZSkgewo+IC0JCQlwYmxrX2VycihwYmxrLCAiY291bGQgbm90 IGFsbG9jYXRlIHdyaXRlIGJpbyBwYWdlXG4iKTsKPiAtCQkJZmxhZ3MgJj0gflBCTEtfV1JJVFRF Tl9EQVRBOwo+IC0JCQlmbGFncyB8PSBQQkxLX1NVQk1JVFRFRF9FTlRSWTsKPiAtCQkJLyogUmVs ZWFzZSBmbGFncyBvbiBjb250ZXh0LiBQcm90ZWN0IGZyb20gd3JpdGVzICovCj4gLQkJCXNtcF9z dG9yZV9yZWxlYXNlKCZlbnRyeS0+d19jdHguZmxhZ3MsIGZsYWdzKTsKPiAtCQkJcmV0dXJuIE5W TV9JT19FUlI7Cj4gLQkJfQo+IC0KPiAtCQlpZiAoYmlvX2FkZF9wY19wYWdlKHEsIGJpbywgcGFn ZSwgcmItPnNlZ19zaXplLCAwKSAhPQo+IC0JCQkJCQkJCXJiLT5zZWdfc2l6ZSkgewo+IC0JCQlw YmxrX2VycihwYmxrLCAiY291bGQgbm90IGFkZCBwYWdlIHRvIHdyaXRlIGJpb1xuIik7Cj4gLQkJ CWZsYWdzICY9IH5QQkxLX1dSSVRURU5fREFUQTsKPiAtCQkJZmxhZ3MgfD0gUEJMS19TVUJNSVRU RURfRU5UUlk7Cj4gLQkJCS8qIFJlbGVhc2UgZmxhZ3Mgb24gY29udGV4dC4gUHJvdGVjdCBmcm9t IHdyaXRlcyAqLwo+IC0JCQlzbXBfc3RvcmVfcmVsZWFzZSgmZW50cnktPndfY3R4LmZsYWdzLCBm bGFncyk7Cj4gLQkJCXJldHVybiBOVk1fSU9fRVJSOwo+IC0JCX0KPiAtCj4gLQkJZmxhZ3MgJj0g flBCTEtfV1JJVFRFTl9EQVRBOwo+IC0JCWZsYWdzIHw9IFBCTEtfU1VCTUlUVEVEX0VOVFJZOwo+ IC0KPiAtCQkvKiBSZWxlYXNlIGZsYWdzIG9uIGNvbnRleHQuIFByb3RlY3QgZnJvbSB3cml0ZXMg Ki8KPiAtCQlzbXBfc3RvcmVfcmVsZWFzZSgmZW50cnktPndfY3R4LmZsYWdzLCBmbGFncyk7Cj4g LQo+IC0JCXBvcyA9IHBibGtfcmJfcHRyX3dyYXAocmIsIHBvcywgMSk7Cj4gLQl9Cj4gLQo+IC0J aWYgKHBhZCkgewo+IC0JCWlmIChwYmxrX2Jpb19hZGRfcGFnZXMocGJsaywgYmlvLCBHRlBfS0VS TkVMLCBwYWQpKSB7Cj4gLQkJCXBibGtfZXJyKHBibGssICJjb3VsZCBub3QgcGFkIHBhZ2UgaW4g d3JpdGUgYmlvXG4iKTsKPiAtCQkJcmV0dXJuIE5WTV9JT19FUlI7Cj4gLQkJfQo+IC0KPiAtCQlp ZiAocGFkIDwgcGJsay0+bWluX3dyaXRlX3BncykKPiAtCQkJYXRvbWljNjRfaW5jKCZwYmxrLT5w YWRfZGlzdFtwYWQgLSAxXSk7Cj4gLQkJZWxzZQo+IC0JCQlwYmxrX3dhcm4ocGJsaywgInBhZGRp bmcgbW9yZSB0aGFuIG1pbi4gc2VjdG9yc1xuIik7Cj4gLQo+IC0JCWF0b21pYzY0X2FkZChwYWQs ICZwYmxrLT5wYWRfd2EpOwo+IC0JfQo+IC0KPiAtI2lmZGVmIENPTkZJR19OVk1fUEJMS19ERUJV Rwo+IC0JYXRvbWljX2xvbmdfYWRkKHBhZCwgJnBibGstPnBhZGRlZF93cml0ZXMpOwo+IC0jZW5k aWYKPiAtCj4gLQlyZXR1cm4gTlZNX0lPX09LOwo+IC19Cj4gLQo+IC0vKgo+IC0gKiBDb3B5IHRv IGJpbyBvbmx5IGlmIHRoZSBsYmEgbWF0Y2hlcyB0aGUgb25lIG9uIHRoZSBnaXZlbiBjYWNoZSBl bnRyeS4KPiAtICogT3RoZXJ3aXNlLCBpdCBtZWFucyB0aGF0IHRoZSBlbnRyeSBoYXMgYmVlbiBv dmVyd3JpdHRlbiwgYW5kIHRoZSBiaW8gc2hvdWxkCj4gLSAqIGJlIGRpcmVjdGVkIHRvIGRpc2su Cj4gLSAqLwo+IC1pbnQgcGJsa19yYl9jb3B5X3RvX2JpbyhzdHJ1Y3QgcGJsa19yYiAqcmIsIHN0 cnVjdCBiaW8gKmJpbywgc2VjdG9yX3QgbGJhLAo+IC0JCQlzdHJ1Y3QgcHBhX2FkZHIgcHBhKQo+ IC17Cj4gLQlzdHJ1Y3QgcGJsayAqcGJsayA9IGNvbnRhaW5lcl9vZihyYiwgc3RydWN0IHBibGss IHJ3Yik7Cj4gLQlzdHJ1Y3QgcGJsa19yYl9lbnRyeSAqZW50cnk7Cj4gLQlzdHJ1Y3QgcGJsa193 X2N0eCAqd19jdHg7Cj4gLQlzdHJ1Y3QgcHBhX2FkZHIgbDJwX3BwYTsKPiAtCXU2NCBwb3MgPSBw YmxrX2FkZHJfdG9fY2FjaGVsaW5lKHBwYSk7Cj4gLQl2b2lkICpkYXRhOwo+IC0JaW50IGZsYWdz Owo+IC0JaW50IHJldCA9IDE7Cj4gLQo+IC0KPiAtI2lmZGVmIENPTkZJR19OVk1fUEJMS19ERUJV Rwo+IC0JLyogQ2FsbGVyIG11c3QgZW5zdXJlIHRoYXQgdGhlIGFjY2VzcyB3aWxsIG5vdCBjYXVz ZSBhbiBvdmVyZmxvdyAqLwo+IC0JQlVHX09OKHBvcyA+PSByYi0+bnJfZW50cmllcyk7Cj4gLSNl bmRpZgo+IC0JZW50cnkgPSAmcmItPmVudHJpZXNbcG9zXTsKPiAtCXdfY3R4ID0gJmVudHJ5LT53 X2N0eDsKPiAtCWZsYWdzID0gUkVBRF9PTkNFKHdfY3R4LT5mbGFncyk7Cj4gLQo+IC0Jc3Bpbl9s b2NrKCZyYi0+d19sb2NrKTsKPiAtCXNwaW5fbG9jaygmcGJsay0+dHJhbnNfbG9jayk7Cj4gLQls MnBfcHBhID0gcGJsa190cmFuc19tYXBfZ2V0KHBibGssIGxiYSk7Cj4gLQlzcGluX3VubG9jaygm cGJsay0+dHJhbnNfbG9jayk7Cj4gLQo+IC0JLyogQ2hlY2sgaWYgdGhlIGVudHJ5IGhhcyBiZWVu IG92ZXJ3cml0dGVuIG9yIGlzIHNjaGVkdWxlZCB0byBiZSAqLwo+IC0JaWYgKCFwYmxrX3BwYV9j b21wKGwycF9wcGEsIHBwYSkgfHwgd19jdHgtPmxiYSAhPSBsYmEgfHwKPiAtCQkJCQkJZmxhZ3Mg JiBQQkxLX1dSSVRBQkxFX0VOVFJZKSB7Cj4gLQkJcmV0ID0gMDsKPiAtCQlnb3RvIG91dDsKPiAt CX0KPiAtCWRhdGEgPSBiaW9fZGF0YShiaW8pOwo+IC0JbWVtY3B5KGRhdGEsIGVudHJ5LT5kYXRh LCByYi0+c2VnX3NpemUpOwo+IC0KPiAtb3V0Ogo+IC0Jc3Bpbl91bmxvY2soJnJiLT53X2xvY2sp Owo+IC0JcmV0dXJuIHJldDsKPiAtfQo+IC0KPiAtc3RydWN0IHBibGtfd19jdHggKnBibGtfcmJf d19jdHgoc3RydWN0IHBibGtfcmIgKnJiLCB1bnNpZ25lZCBpbnQgcG9zKQo+IC17Cj4gLQl1bnNp Z25lZCBpbnQgZW50cnkgPSBwYmxrX3JiX3B0cl93cmFwKHJiLCBwb3MsIDApOwo+IC0KPiAtCXJl dHVybiAmcmItPmVudHJpZXNbZW50cnldLndfY3R4Owo+IC19Cj4gLQo+IC11bnNpZ25lZCBpbnQg cGJsa19yYl9zeW5jX2luaXQoc3RydWN0IHBibGtfcmIgKnJiLCB1bnNpZ25lZCBsb25nICpmbGFn cykKPiAtCV9fYWNxdWlyZXMoJnJiLT5zX2xvY2spCj4gLXsKPiAtCWlmIChmbGFncykKPiAtCQlz cGluX2xvY2tfaXJxc2F2ZSgmcmItPnNfbG9jaywgKmZsYWdzKTsKPiAtCWVsc2UKPiAtCQlzcGlu X2xvY2tfaXJxKCZyYi0+c19sb2NrKTsKPiAtCj4gLQlyZXR1cm4gcmItPnN5bmM7Cj4gLX0KPiAt Cj4gLXZvaWQgcGJsa19yYl9zeW5jX2VuZChzdHJ1Y3QgcGJsa19yYiAqcmIsIHVuc2lnbmVkIGxv bmcgKmZsYWdzKQo+IC0JX19yZWxlYXNlcygmcmItPnNfbG9jaykKPiAtewo+IC0JbG9ja2RlcF9h c3NlcnRfaGVsZCgmcmItPnNfbG9jayk7Cj4gLQo+IC0JaWYgKGZsYWdzKQo+IC0JCXNwaW5fdW5s b2NrX2lycXJlc3RvcmUoJnJiLT5zX2xvY2ssICpmbGFncyk7Cj4gLQllbHNlCj4gLQkJc3Bpbl91 bmxvY2tfaXJxKCZyYi0+c19sb2NrKTsKPiAtfQo+IC0KPiAtdW5zaWduZWQgaW50IHBibGtfcmJf c3luY19hZHZhbmNlKHN0cnVjdCBwYmxrX3JiICpyYiwgdW5zaWduZWQgaW50IG5yX2VudHJpZXMp Cj4gLXsKPiAtCXVuc2lnbmVkIGludCBzeW5jLCBmbHVzaF9wb2ludDsKPiAtCWxvY2tkZXBfYXNz ZXJ0X2hlbGQoJnJiLT5zX2xvY2spOwo+IC0KPiAtCXN5bmMgPSBSRUFEX09OQ0UocmItPnN5bmMp Owo+IC0JZmx1c2hfcG9pbnQgPSBSRUFEX09OQ0UocmItPmZsdXNoX3BvaW50KTsKPiAtCj4gLQlp ZiAoZmx1c2hfcG9pbnQgIT0gRU1QVFlfRU5UUlkpIHsKPiAtCQl1bnNpZ25lZCBpbnQgc2Vjc190 b19mbHVzaDsKPiAtCj4gLQkJc2Vjc190b19mbHVzaCA9IHBibGtfcmJfcmluZ19jb3VudChmbHVz aF9wb2ludCwgc3luYywKPiAtCQkJCQlyYi0+bnJfZW50cmllcyk7Cj4gLQkJaWYgKHNlY3NfdG9f Zmx1c2ggPCBucl9lbnRyaWVzKSB7Cj4gLQkJCS8qIFByb3RlY3QgZmx1c2ggcG9pbnRzICovCj4g LQkJCXNtcF9zdG9yZV9yZWxlYXNlKCZyYi0+Zmx1c2hfcG9pbnQsIEVNUFRZX0VOVFJZKTsKPiAt CQl9Cj4gLQl9Cj4gLQo+IC0Jc3luYyA9IHBibGtfcmJfcHRyX3dyYXAocmIsIHN5bmMsIG5yX2Vu dHJpZXMpOwo+IC0KPiAtCS8qIFByb3RlY3QgZnJvbSBjb3VudHMgKi8KPiAtCXNtcF9zdG9yZV9y ZWxlYXNlKCZyYi0+c3luYywgc3luYyk7Cj4gLQo+IC0JcmV0dXJuIHN5bmM7Cj4gLX0KPiAtCj4g LS8qIENhbGN1bGF0ZSBob3cgbWFueSBzZWN0b3JzIHRvIHN1Ym1pdCB1cCB0byB0aGUgY3VycmVu dCBmbHVzaCBwb2ludC4gKi8KPiAtdW5zaWduZWQgaW50IHBibGtfcmJfZmx1c2hfcG9pbnRfY291 bnQoc3RydWN0IHBibGtfcmIgKnJiKQo+IC17Cj4gLQl1bnNpZ25lZCBpbnQgc3VibSwgc3luYywg Zmx1c2hfcG9pbnQ7Cj4gLQl1bnNpZ25lZCBpbnQgc3VibWl0dGVkLCB0b19mbHVzaDsKPiAtCj4g LQkvKiBQcm90ZWN0IGZsdXNoIHBvaW50cyAqLwo+IC0JZmx1c2hfcG9pbnQgPSBzbXBfbG9hZF9h Y3F1aXJlKCZyYi0+Zmx1c2hfcG9pbnQpOwo+IC0JaWYgKGZsdXNoX3BvaW50ID09IEVNUFRZX0VO VFJZKQo+IC0JCXJldHVybiAwOwo+IC0KPiAtCS8qIFByb3RlY3Qgc3luY3MgKi8KPiAtCXN5bmMg PSBzbXBfbG9hZF9hY3F1aXJlKCZyYi0+c3luYyk7Cj4gLQo+IC0Jc3VibSA9IFJFQURfT05DRShy Yi0+c3VibSk7Cj4gLQlzdWJtaXR0ZWQgPSBwYmxrX3JiX3JpbmdfY291bnQoc3VibSwgc3luYywg cmItPm5yX2VudHJpZXMpOwo+IC0KPiAtCS8qIFRoZSBzeW5jIHBvaW50IGl0c2VsZiBjb3VudHMg YXMgYSBzZWN0b3IgdG8gc3luYyAqLwo+IC0JdG9fZmx1c2ggPSBwYmxrX3JiX3JpbmdfY291bnQo Zmx1c2hfcG9pbnQsIHN5bmMsIHJiLT5ucl9lbnRyaWVzKSArIDE7Cj4gLQo+IC0JcmV0dXJuIChz dWJtaXR0ZWQgPCB0b19mbHVzaCkgPyAodG9fZmx1c2ggLSBzdWJtaXR0ZWQpIDogMDsKPiAtfQo+ IC0KPiAtaW50IHBibGtfcmJfdGVhcl9kb3duX2NoZWNrKHN0cnVjdCBwYmxrX3JiICpyYikKPiAt ewo+IC0Jc3RydWN0IHBibGtfcmJfZW50cnkgKmVudHJ5Owo+IC0JaW50IGk7Cj4gLQlpbnQgcmV0 ID0gMDsKPiAtCj4gLQlzcGluX2xvY2soJnJiLT53X2xvY2spOwo+IC0Jc3Bpbl9sb2NrX2lycSgm cmItPnNfbG9jayk7Cj4gLQo+IC0JaWYgKChyYi0+bWVtID09IHJiLT5zdWJtKSAmJiAocmItPnN1 Ym0gPT0gcmItPnN5bmMpICYmCj4gLQkJCQkocmItPnN5bmMgPT0gcmItPmwycF91cGRhdGUpICYm Cj4gLQkJCQkocmItPmZsdXNoX3BvaW50ID09IEVNUFRZX0VOVFJZKSkgewo+IC0JCWdvdG8gb3V0 Owo+IC0JfQo+IC0KPiAtCWlmICghcmItPmVudHJpZXMpIHsKPiAtCQlyZXQgPSAxOwo+IC0JCWdv dG8gb3V0Owo+IC0JfQo+IC0KPiAtCWZvciAoaSA9IDA7IGkgPCByYi0+bnJfZW50cmllczsgaSsr KSB7Cj4gLQkJZW50cnkgPSAmcmItPmVudHJpZXNbaV07Cj4gLQo+IC0JCWlmICghZW50cnktPmRh dGEpIHsKPiAtCQkJcmV0ID0gMTsKPiAtCQkJZ290byBvdXQ7Cj4gLQkJfQo+IC0JfQo+IC0KPiAt b3V0Ogo+IC0Jc3Bpbl91bmxvY2tfaXJxKCZyYi0+c19sb2NrKTsKPiAtCXNwaW5fdW5sb2NrKCZy Yi0+d19sb2NrKTsKPiAtCj4gLQlyZXR1cm4gcmV0Owo+IC19Cj4gLQo+IC11bnNpZ25lZCBpbnQg cGJsa19yYl93cmFwX3BvcyhzdHJ1Y3QgcGJsa19yYiAqcmIsIHVuc2lnbmVkIGludCBwb3MpCj4g LXsKPiAtCXJldHVybiAocG9zICYgKHJiLT5ucl9lbnRyaWVzIC0gMSkpOwo+IC19Cj4gLQo+IC1p bnQgcGJsa19yYl9wb3Nfb29iKHN0cnVjdCBwYmxrX3JiICpyYiwgdTY0IHBvcykKPiAtewo+IC0J cmV0dXJuIChwb3MgPj0gcmItPm5yX2VudHJpZXMpOwo+IC19Cj4gLQo+IC1zc2l6ZV90IHBibGtf cmJfc3lzZnMoc3RydWN0IHBibGtfcmIgKnJiLCBjaGFyICpidWYpCj4gLXsKPiAtCXN0cnVjdCBw YmxrICpwYmxrID0gY29udGFpbmVyX29mKHJiLCBzdHJ1Y3QgcGJsaywgcndiKTsKPiAtCXN0cnVj dCBwYmxrX2NfY3R4ICpjOwo+IC0Jc3NpemVfdCBvZmZzZXQ7Cj4gLQlpbnQgcXVldWVkX2VudHJp ZXMgPSAwOwo+IC0KPiAtCXNwaW5fbG9ja19pcnEoJnJiLT5zX2xvY2spOwo+IC0JbGlzdF9mb3Jf ZWFjaF9lbnRyeShjLCAmcGJsay0+Y29tcGxfbGlzdCwgbGlzdCkKPiAtCQlxdWV1ZWRfZW50cmll cysrOwo+IC0Jc3Bpbl91bmxvY2tfaXJxKCZyYi0+c19sb2NrKTsKPiAtCj4gLQlpZiAocmItPmZs dXNoX3BvaW50ICE9IEVNUFRZX0VOVFJZKQo+IC0JCW9mZnNldCA9IHNjbnByaW50ZihidWYsIFBB R0VfU0laRSwKPiAtCQkJIiV1XHQldVx0JXVcdCV1XHQldVx0JXVcdCV1IC0gJXUvJXUvJXUgLSAl ZFxuIiwKPiAtCQkJcmItPm5yX2VudHJpZXMsCj4gLQkJCXJiLT5tZW0sCj4gLQkJCXJiLT5zdWJt LAo+IC0JCQlyYi0+c3luYywKPiAtCQkJcmItPmwycF91cGRhdGUsCj4gLSNpZmRlZiBDT05GSUdf TlZNX1BCTEtfREVCVUcKPiAtCQkJYXRvbWljX3JlYWQoJnJiLT5pbmZsaWdodF9mbHVzaF9wb2lu dCksCj4gLSNlbHNlCj4gLQkJCTAsCj4gLSNlbmRpZgo+IC0JCQlyYi0+Zmx1c2hfcG9pbnQsCj4g LQkJCXBibGtfcmJfcmVhZF9jb3VudChyYiksCj4gLQkJCXBibGtfcmJfc3BhY2UocmIpLAo+IC0J CQlwYmxrX3JiX2ZsdXNoX3BvaW50X2NvdW50KHJiKSwKPiAtCQkJcXVldWVkX2VudHJpZXMpOwo+ IC0JZWxzZQo+IC0JCW9mZnNldCA9IHNjbnByaW50ZihidWYsIFBBR0VfU0laRSwKPiAtCQkJIiV1 XHQldVx0JXVcdCV1XHQldVx0JXVcdE5VTEwgLSAldS8ldS8ldSAtICVkXG4iLAo+IC0JCQlyYi0+ bnJfZW50cmllcywKPiAtCQkJcmItPm1lbSwKPiAtCQkJcmItPnN1Ym0sCj4gLQkJCXJiLT5zeW5j LAo+IC0JCQlyYi0+bDJwX3VwZGF0ZSwKPiAtI2lmZGVmIENPTkZJR19OVk1fUEJMS19ERUJVRwo+ IC0JCQlhdG9taWNfcmVhZCgmcmItPmluZmxpZ2h0X2ZsdXNoX3BvaW50KSwKPiAtI2Vsc2UKPiAt CQkJMCwKPiAtI2VuZGlmCj4gLQkJCXBibGtfcmJfcmVhZF9jb3VudChyYiksCj4gLQkJCXBibGtf cmJfc3BhY2UocmIpLAo+IC0JCQlwYmxrX3JiX2ZsdXNoX3BvaW50X2NvdW50KHJiKSwKPiAtCQkJ cXVldWVkX2VudHJpZXMpOwo+IC0KPiAtCXJldHVybiBvZmZzZXQ7Cj4gLX0KPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9saWdodG52bS9wYmxrLXJlYWQuYyBiL2RyaXZlcnMvbGlnaHRudm0vcGJsay1y ZWFkLmMKPiBkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCBjMjg1MzdhNDg5YmMuLjAw MDAwMDAwMDAwMAo+IC0tLSBhL2RyaXZlcnMvbGlnaHRudm0vcGJsay1yZWFkLmMKPiArKysgL2Rl di9udWxsCj4gQEAgLTEsNDc0ICswLDAgQEAKPiAtLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6 IEdQTC0yLjAKPiAtLyoKPiAtICogQ29weXJpZ2h0IChDKSAyMDE2IENORVggTGFicwo+IC0gKiBJ bml0aWFsIHJlbGVhc2U6IEphdmllciBHb256YWxleiA8amF2aWVyQGNuZXhsYWJzLmNvbT4KPiAt ICogICAgICAgICAgICAgICAgICBNYXRpYXMgQmpvcmxpbmcgPG1hdGlhc0BjbmV4bGFicy5jb20+ Cj4gLSAqCj4gLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IKPiAtICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbgo+IC0gKiAyIGFzIHB1Ymxpc2hlZCBi eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgo+IC0gKgo+IC0gKiBUaGlzIHByb2dyYW0g aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Cj4g LSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YKPiAtICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZSBHTlUKPiAtICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y ZSBkZXRhaWxzLgo+IC0gKgo+IC0gKiBwYmxrLXJlYWQuYyAtIHBibGsncyByZWFkIHBhdGgKPiAt ICovCj4gLQo+IC0jaW5jbHVkZSAicGJsay5oIgo+IC0KPiAtLyoKPiAtICogVGhlcmUgaXMgbm8g Z3VhcmFudGVlIHRoYXQgdGhlIHZhbHVlIHJlYWQgZnJvbSBjYWNoZSBoYXMgbm90IGJlZW4gdXBk YXRlZCBhbmQKPiAtICogcmVzaWRlcyBhdCBhbm90aGVyIGxvY2F0aW9uIGluIHRoZSBjYWNoZS4g V2UgZ3VhcmFudGVlIHRob3VnaCB0aGF0IGlmIHRoZQo+IC0gKiB2YWx1ZSBpcyByZWFkIGZyb20g dGhlIGNhY2hlLCBpdCBiZWxvbmdzIHRvIHRoZSBtYXBwZWQgbGJhLiBJbiBvcmRlciB0bwo+IC0g KiBndWFyYW50ZWUgYW5kIG9yZGVyIGJldHdlZW4gd3JpdGVzIGFuZCByZWFkcyBhcmUgb3JkZXJl ZCwgYSBmbHVzaCBtdXN0IGJlCj4gLSAqIGlzc3VlZC4KPiAtICovCj4gLXN0YXRpYyBpbnQgcGJs a19yZWFkX2Zyb21fY2FjaGUoc3RydWN0IHBibGsgKnBibGssIHN0cnVjdCBiaW8gKmJpbywKPiAt CQkJCXNlY3Rvcl90IGxiYSwgc3RydWN0IHBwYV9hZGRyIHBwYSkKPiAtewo+IC0jaWZkZWYgQ09O RklHX05WTV9QQkxLX0RFQlVHCj4gLQkvKiBDYWxsZXJzIG11c3QgZW5zdXJlIHRoYXQgdGhlIHBw YSBwb2ludHMgdG8gYSBjYWNoZSBhZGRyZXNzICovCj4gLQlCVUdfT04ocGJsa19wcGFfZW1wdHko cHBhKSk7Cj4gLQlCVUdfT04oIXBibGtfYWRkcl9pbl9jYWNoZShwcGEpKTsKPiAtI2VuZGlmCj4g LQo+IC0JcmV0dXJuIHBibGtfcmJfY29weV90b19iaW8oJnBibGstPnJ3YiwgYmlvLCBsYmEsIHBw YSk7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbnQgcGJsa19yZWFkX3BwYWxpc3RfcnEoc3RydWN0IHBi bGsgKnBibGssIHN0cnVjdCBudm1fcnEgKnJxZCwKPiAtCQkJCSBzdHJ1Y3QgYmlvICpiaW8sIHNl Y3Rvcl90IGJsYmEsCj4gLQkJCQkgYm9vbCAqZnJvbV9jYWNoZSkKPiAtewo+IC0Jdm9pZCAqbWV0 YV9saXN0ID0gcnFkLT5tZXRhX2xpc3Q7Cj4gLQlpbnQgbnJfc2VjcywgaTsKPiAtCj4gLXJldHJ5 Ogo+IC0JbnJfc2VjcyA9IHBibGtfbG9va3VwX2wycF9zZXEocGJsaywgcnFkLT5wcGFfbGlzdCwg YmxiYSwgcnFkLT5ucl9wcGFzLAo+IC0JCQkJCWZyb21fY2FjaGUpOwo+IC0KPiAtCWlmICghKmZy b21fY2FjaGUpCj4gLQkJZ290byBlbmQ7Cj4gLQo+IC0JZm9yIChpID0gMDsgaSA8IG5yX3NlY3M7 IGkrKykgewo+IC0JCXN0cnVjdCBwYmxrX3NlY19tZXRhICptZXRhID0gcGJsa19nZXRfbWV0YShw YmxrLCBtZXRhX2xpc3QsIGkpOwo+IC0JCXNlY3Rvcl90IGxiYSA9IGJsYmEgKyBpOwo+IC0KPiAt CQlpZiAocGJsa19wcGFfZW1wdHkocnFkLT5wcGFfbGlzdFtpXSkpIHsKPiAtCQkJX19sZTY0IGFk ZHJfZW1wdHkgPSBjcHVfdG9fbGU2NChBRERSX0VNUFRZKTsKPiAtCj4gLQkJCW1ldGEtPmxiYSA9 IGFkZHJfZW1wdHk7Cj4gLQkJfSBlbHNlIGlmIChwYmxrX2FkZHJfaW5fY2FjaGUocnFkLT5wcGFf bGlzdFtpXSkpIHsKPiAtCQkJLyoKPiAtCQkJICogVHJ5IHRvIHJlYWQgZnJvbSB3cml0ZSBidWZm ZXIuIFRoZSBhZGRyZXNzIGlzIGxhdGVyCj4gLQkJCSAqIGNoZWNrZWQgb24gdGhlIHdyaXRlIGJ1 ZmZlciB0byBwcmV2ZW50IHJldHJpZXZpbmcKPiAtCQkJICogb3ZlcndyaXR0ZW4gZGF0YS4KPiAt CQkJICovCj4gLQkJCWlmICghcGJsa19yZWFkX2Zyb21fY2FjaGUocGJsaywgYmlvLCBsYmEsCj4g LQkJCQkJCQlycWQtPnBwYV9saXN0W2ldKSkgewo+IC0JCQkJaWYgKGkgPT0gMCkgewo+IC0JCQkJ CS8qCj4gLQkJCQkJICogV2UgZGlkbid0IGNhbGwgd2l0aCBiaW9fYWR2YW5jZSgpCj4gLQkJCQkJ ICogeWV0LCBzbyB3ZSBjYW4ganVzdCByZXRyeS4KPiAtCQkJCQkgKi8KPiAtCQkJCQlnb3RvIHJl dHJ5Owo+IC0JCQkJfSBlbHNlIHsKPiAtCQkJCQkvKgo+IC0JCQkJCSAqIFdlIGFscmVhZHkgY2Fs bCBiaW9fYWR2YW5jZSgpCj4gLQkJCQkJICogc28gd2UgY2Fubm90IHJldHJ5IGFuZCB3ZSBuZWVk Cj4gLQkJCQkJICogdG8gcXVpdCB0aGF0IGZ1bmN0aW9uIGluIG9yZGVyCj4gLQkJCQkJICogdG8g YWxsb3cgY2FsbGVyIHRvIGhhbmRsZSB0aGUgYmlvCj4gLQkJCQkJICogc3BsaXR0aW5nIGluIHRo ZSBjdXJyZW50IHNlY3Rvcgo+IC0JCQkJCSAqIHBvc2l0aW9uLgo+IC0JCQkJCSAqLwo+IC0JCQkJ CW5yX3NlY3MgPSBpOwo+IC0JCQkJCWdvdG8gZW5kOwo+IC0JCQkJfQo+IC0JCQl9Cj4gLQkJCW1l dGEtPmxiYSA9IGNwdV90b19sZTY0KGxiYSk7Cj4gLSNpZmRlZiBDT05GSUdfTlZNX1BCTEtfREVC VUcKPiAtCQkJYXRvbWljX2xvbmdfaW5jKCZwYmxrLT5jYWNoZV9yZWFkcyk7Cj4gLSNlbmRpZgo+ IC0JCX0KPiAtCQliaW9fYWR2YW5jZShiaW8sIFBCTEtfRVhQT1NFRF9QQUdFX1NJWkUpOwo+IC0J fQo+IC0KPiAtZW5kOgo+IC0JaWYgKHBibGtfaW9fYWxpZ25lZChwYmxrLCBucl9zZWNzKSkKPiAt CQlycWQtPmlzX3NlcSA9IDE7Cj4gLQo+IC0jaWZkZWYgQ09ORklHX05WTV9QQkxLX0RFQlVHCj4g LQlhdG9taWNfbG9uZ19hZGQobnJfc2VjcywgJnBibGstPmluZmxpZ2h0X3JlYWRzKTsKPiAtI2Vu ZGlmCj4gLQo+IC0JcmV0dXJuIG5yX3NlY3M7Cj4gLX0KPiAtCj4gLQo+IC1zdGF0aWMgdm9pZCBw YmxrX3JlYWRfY2hlY2tfc2VxKHN0cnVjdCBwYmxrICpwYmxrLCBzdHJ1Y3QgbnZtX3JxICpycWQs Cj4gLQkJCQlzZWN0b3JfdCBibGJhKQo+IC17Cj4gLQl2b2lkICptZXRhX2xpc3QgPSBycWQtPm1l dGFfbGlzdDsKPiAtCWludCBucl9sYmFzID0gcnFkLT5ucl9wcGFzOwo+IC0JaW50IGk7Cj4gLQo+ IC0JaWYgKCFwYmxrX2lzX29vYl9tZXRhX3N1cHBvcnRlZChwYmxrKSkKPiAtCQlyZXR1cm47Cj4g LQo+IC0JZm9yIChpID0gMDsgaSA8IG5yX2xiYXM7IGkrKykgewo+IC0JCXN0cnVjdCBwYmxrX3Nl Y19tZXRhICptZXRhID0gcGJsa19nZXRfbWV0YShwYmxrLCBtZXRhX2xpc3QsIGkpOwo+IC0JCXU2 NCBsYmEgPSBsZTY0X3RvX2NwdShtZXRhLT5sYmEpOwo+IC0KPiAtCQlpZiAobGJhID09IEFERFJf RU1QVFkpCj4gLQkJCWNvbnRpbnVlOwo+IC0KPiAtCQlpZiAobGJhICE9IGJsYmEgKyBpKSB7Cj4g LSNpZmRlZiBDT05GSUdfTlZNX1BCTEtfREVCVUcKPiAtCQkJc3RydWN0IHBwYV9hZGRyICpwcGFf bGlzdCA9IG52bV9ycV90b19wcGFfbGlzdChycWQpOwo+IC0KPiAtCQkJcHJpbnRfcHBhKHBibGss ICZwcGFfbGlzdFtpXSwgInNlcSIsIGkpOwo+IC0jZW5kaWYKPiAtCQkJcGJsa19lcnIocGJsaywg ImNvcnJ1cHRlZCByZWFkIExCQSAoJWxsdS8lbGx1KVxuIiwKPiAtCQkJCQkJCWxiYSwgKHU2NCli bGJhICsgaSk7Cj4gLQkJCVdBUk5fT04oMSk7Cj4gLQkJfQo+IC0JfQo+IC19Cj4gLQo+IC0vKgo+ IC0gKiBUaGVyZSBjYW4gYmUgaG9sZXMgaW4gdGhlIGxiYSBsaXN0Lgo+IC0gKi8KPiAtc3RhdGlj IHZvaWQgcGJsa19yZWFkX2NoZWNrX3JhbmQoc3RydWN0IHBibGsgKnBibGssIHN0cnVjdCBudm1f cnEgKnJxZCwKPiAtCQkJCSB1NjQgKmxiYV9saXN0LCBpbnQgbnJfbGJhcykKPiAtewo+IC0Jdm9p ZCAqbWV0YV9sYmFfbGlzdCA9IHJxZC0+bWV0YV9saXN0Owo+IC0JaW50IGksIGo7Cj4gLQo+IC0J aWYgKCFwYmxrX2lzX29vYl9tZXRhX3N1cHBvcnRlZChwYmxrKSkKPiAtCQlyZXR1cm47Cj4gLQo+ IC0JZm9yIChpID0gMCwgaiA9IDA7IGkgPCBucl9sYmFzOyBpKyspIHsKPiAtCQlzdHJ1Y3QgcGJs a19zZWNfbWV0YSAqbWV0YSA9IHBibGtfZ2V0X21ldGEocGJsaywKPiAtCQkJCQkJCSAgIG1ldGFf bGJhX2xpc3QsIGopOwo+IC0JCXU2NCBsYmEgPSBsYmFfbGlzdFtpXTsKPiAtCQl1NjQgbWV0YV9s YmE7Cj4gLQo+IC0JCWlmIChsYmEgPT0gQUREUl9FTVBUWSkKPiAtCQkJY29udGludWU7Cj4gLQo+ IC0JCW1ldGFfbGJhID0gbGU2NF90b19jcHUobWV0YS0+bGJhKTsKPiAtCj4gLQkJaWYgKGxiYSAh PSBtZXRhX2xiYSkgewo+IC0jaWZkZWYgQ09ORklHX05WTV9QQkxLX0RFQlVHCj4gLQkJCXN0cnVj dCBwcGFfYWRkciAqcHBhX2xpc3QgPSBudm1fcnFfdG9fcHBhX2xpc3QocnFkKTsKPiAtCj4gLQkJ CXByaW50X3BwYShwYmxrLCAmcHBhX2xpc3Rbal0sICJybmQiLCBqKTsKPiAtI2VuZGlmCj4gLQkJ CXBibGtfZXJyKHBibGssICJjb3JydXB0ZWQgcmVhZCBMQkEgKCVsbHUvJWxsdSlcbiIsCj4gLQkJ CQkJCQltZXRhX2xiYSwgbGJhKTsKPiAtCQkJV0FSTl9PTigxKTsKPiAtCQl9Cj4gLQo+IC0JCWor KzsKPiAtCX0KPiAtCj4gLQlXQVJOX09OQ0UoaiAhPSBycWQtPm5yX3BwYXMsICJwYmxrOiBjb3Jy dXB0ZWQgcmFuZG9tIHJlcXVlc3RcbiIpOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBwYmxrX2Vu ZF91c2VyX3JlYWQoc3RydWN0IGJpbyAqYmlvLCBpbnQgZXJyb3IpCj4gLXsKPiAtCWlmIChlcnJv ciAmJiBlcnJvciAhPSBOVk1fUlNQX1dBUk5fSElHSEVDQykKPiAtCQliaW9faW9fZXJyb3IoYmlv KTsKPiAtCWVsc2UKPiAtCQliaW9fZW5kaW8oYmlvKTsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQg X19wYmxrX2VuZF9pb19yZWFkKHN0cnVjdCBwYmxrICpwYmxrLCBzdHJ1Y3QgbnZtX3JxICpycWQs Cj4gLQkJCSAgICAgICBib29sIHB1dF9saW5lKQo+IC17Cj4gLQlzdHJ1Y3QgcGJsa19nX2N0eCAq cl9jdHggPSBudm1fcnFfdG9fcGR1KHJxZCk7Cj4gLQlzdHJ1Y3QgYmlvICppbnRfYmlvID0gcnFk LT5iaW87Cj4gLQl1bnNpZ25lZCBsb25nIHN0YXJ0X3RpbWUgPSByX2N0eC0+c3RhcnRfdGltZTsK PiAtCj4gLQliaW9fZW5kX2lvX2FjY3QoaW50X2Jpbywgc3RhcnRfdGltZSk7Cj4gLQo+IC0JaWYg KHJxZC0+ZXJyb3IpCj4gLQkJcGJsa19sb2dfcmVhZF9lcnIocGJsaywgcnFkKTsKPiAtCj4gLQlw YmxrX3JlYWRfY2hlY2tfc2VxKHBibGssIHJxZCwgcl9jdHgtPmxiYSk7Cj4gLQliaW9fcHV0KGlu dF9iaW8pOwo+IC0KPiAtCWlmIChwdXRfbGluZSkKPiAtCQlwYmxrX3JxX3RvX2xpbmVfcHV0KHBi bGssIHJxZCk7Cj4gLQo+IC0jaWZkZWYgQ09ORklHX05WTV9QQkxLX0RFQlVHCj4gLQlhdG9taWNf bG9uZ19hZGQocnFkLT5ucl9wcGFzLCAmcGJsay0+c3luY19yZWFkcyk7Cj4gLQlhdG9taWNfbG9u Z19zdWIocnFkLT5ucl9wcGFzLCAmcGJsay0+aW5mbGlnaHRfcmVhZHMpOwo+IC0jZW5kaWYKPiAt Cj4gLQlwYmxrX2ZyZWVfcnFkKHBibGssIHJxZCwgUEJMS19SRUFEKTsKPiAtCWF0b21pY19kZWMo JnBibGstPmluZmxpZ2h0X2lvKTsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgcGJsa19lbmRfaW9f cmVhZChzdHJ1Y3QgbnZtX3JxICpycWQpCj4gLXsKPiAtCXN0cnVjdCBwYmxrICpwYmxrID0gcnFk LT5wcml2YXRlOwo+IC0Jc3RydWN0IHBibGtfZ19jdHggKnJfY3R4ID0gbnZtX3JxX3RvX3BkdShy cWQpOwo+IC0Jc3RydWN0IGJpbyAqYmlvID0gKHN0cnVjdCBiaW8gKilyX2N0eC0+cHJpdmF0ZTsK PiAtCj4gLQlwYmxrX2VuZF91c2VyX3JlYWQoYmlvLCBycWQtPmVycm9yKTsKPiAtCV9fcGJsa19l bmRfaW9fcmVhZChwYmxrLCBycWQsIHRydWUpOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBwYmxr X3JlYWRfcnEoc3RydWN0IHBibGsgKnBibGssIHN0cnVjdCBudm1fcnEgKnJxZCwgc3RydWN0IGJp byAqYmlvLAo+IC0JCQkgc2VjdG9yX3QgbGJhLCBib29sICpmcm9tX2NhY2hlKQo+IC17Cj4gLQlz dHJ1Y3QgcGJsa19zZWNfbWV0YSAqbWV0YSA9IHBibGtfZ2V0X21ldGEocGJsaywgcnFkLT5tZXRh X2xpc3QsIDApOwo+IC0Jc3RydWN0IHBwYV9hZGRyIHBwYTsKPiAtCj4gLQlwYmxrX2xvb2t1cF9s MnBfc2VxKHBibGssICZwcGEsIGxiYSwgMSwgZnJvbV9jYWNoZSk7Cj4gLQo+IC0jaWZkZWYgQ09O RklHX05WTV9QQkxLX0RFQlVHCj4gLQlhdG9taWNfbG9uZ19pbmMoJnBibGstPmluZmxpZ2h0X3Jl YWRzKTsKPiAtI2VuZGlmCj4gLQo+IC1yZXRyeToKPiAtCWlmIChwYmxrX3BwYV9lbXB0eShwcGEp KSB7Cj4gLQkJX19sZTY0IGFkZHJfZW1wdHkgPSBjcHVfdG9fbGU2NChBRERSX0VNUFRZKTsKPiAt Cj4gLQkJbWV0YS0+bGJhID0gYWRkcl9lbXB0eTsKPiAtCQlyZXR1cm47Cj4gLQl9Cj4gLQo+IC0J LyogVHJ5IHRvIHJlYWQgZnJvbSB3cml0ZSBidWZmZXIuIFRoZSBhZGRyZXNzIGlzIGxhdGVyIGNo ZWNrZWQgb24gdGhlCj4gLQkgKiB3cml0ZSBidWZmZXIgdG8gcHJldmVudCByZXRyaWV2aW5nIG92 ZXJ3cml0dGVuIGRhdGEuCj4gLQkgKi8KPiAtCWlmIChwYmxrX2FkZHJfaW5fY2FjaGUocHBhKSkg ewo+IC0JCWlmICghcGJsa19yZWFkX2Zyb21fY2FjaGUocGJsaywgYmlvLCBsYmEsIHBwYSkpIHsK PiAtCQkJcGJsa19sb29rdXBfbDJwX3NlcShwYmxrLCAmcHBhLCBsYmEsIDEsIGZyb21fY2FjaGUp Owo+IC0JCQlnb3RvIHJldHJ5Owo+IC0JCX0KPiAtCj4gLQkJbWV0YS0+bGJhID0gY3B1X3RvX2xl NjQobGJhKTsKPiAtCj4gLSNpZmRlZiBDT05GSUdfTlZNX1BCTEtfREVCVUcKPiAtCQlhdG9taWNf bG9uZ19pbmMoJnBibGstPmNhY2hlX3JlYWRzKTsKPiAtI2VuZGlmCj4gLQl9IGVsc2Ugewo+IC0J CXJxZC0+cHBhX2FkZHIgPSBwcGE7Cj4gLQl9Cj4gLX0KPiAtCj4gLXZvaWQgcGJsa19zdWJtaXRf cmVhZChzdHJ1Y3QgcGJsayAqcGJsaywgc3RydWN0IGJpbyAqYmlvKQo+IC17Cj4gLQlzZWN0b3Jf dCBibGJhID0gcGJsa19nZXRfbGJhKGJpbyk7Cj4gLQl1bnNpZ25lZCBpbnQgbnJfc2VjcyA9IHBi bGtfZ2V0X3NlY3MoYmlvKTsKPiAtCWJvb2wgZnJvbV9jYWNoZTsKPiAtCXN0cnVjdCBwYmxrX2df Y3R4ICpyX2N0eDsKPiAtCXN0cnVjdCBudm1fcnEgKnJxZDsKPiAtCXN0cnVjdCBiaW8gKmludF9i aW8sICpzcGxpdF9iaW87Cj4gLQl1bnNpZ25lZCBsb25nIHN0YXJ0X3RpbWU7Cj4gLQo+IC0Jc3Rh cnRfdGltZSA9IGJpb19zdGFydF9pb19hY2N0KGJpbyk7Cj4gLQo+IC0JcnFkID0gcGJsa19hbGxv Y19ycWQocGJsaywgUEJMS19SRUFEKTsKPiAtCj4gLQlycWQtPm9wY29kZSA9IE5WTV9PUF9QUkVB RDsKPiAtCXJxZC0+bnJfcHBhcyA9IG5yX3NlY3M7Cj4gLQlycWQtPnByaXZhdGUgPSBwYmxrOwo+ IC0JcnFkLT5lbmRfaW8gPSBwYmxrX2VuZF9pb19yZWFkOwo+IC0KPiAtCXJfY3R4ID0gbnZtX3Jx X3RvX3BkdShycWQpOwo+IC0Jcl9jdHgtPnN0YXJ0X3RpbWUgPSBzdGFydF90aW1lOwo+IC0Jcl9j dHgtPmxiYSA9IGJsYmE7Cj4gLQo+IC0JaWYgKHBibGtfYWxsb2NfcnFkX21ldGEocGJsaywgcnFk KSkgewo+IC0JCWJpb19pb19lcnJvcihiaW8pOwo+IC0JCXBibGtfZnJlZV9ycWQocGJsaywgcnFk LCBQQkxLX1JFQUQpOwo+IC0JCXJldHVybjsKPiAtCX0KPiAtCj4gLQkvKiBDbG9uZSByZWFkIGJp byB0byBkZWFsIGludGVybmFsbHkgd2l0aDoKPiAtCSAqIC1yZWFkIGVycm9ycyB3aGVuIHJlYWRp bmcgZnJvbSBkcml2ZQo+IC0JICogLWJpb19hZHZhbmNlKCkgY2FsbHMgZHVyaW5nIGNhY2hlIHJl YWRzCj4gLQkgKi8KPiAtCWludF9iaW8gPSBiaW9fY2xvbmVfZmFzdChiaW8sIEdGUF9LRVJORUws ICZwYmxrX2Jpb19zZXQpOwo+IC0KPiAtCWlmIChucl9zZWNzID4gMSkKPiAtCQlucl9zZWNzID0g cGJsa19yZWFkX3BwYWxpc3RfcnEocGJsaywgcnFkLCBpbnRfYmlvLCBibGJhLAo+IC0JCQkJCQkm ZnJvbV9jYWNoZSk7Cj4gLQllbHNlCj4gLQkJcGJsa19yZWFkX3JxKHBibGssIHJxZCwgaW50X2Jp bywgYmxiYSwgJmZyb21fY2FjaGUpOwo+IC0KPiAtc3BsaXRfcmV0cnk6Cj4gLQlyX2N0eC0+cHJp dmF0ZSA9IGJpbzsgLyogb3JpZ2luYWwgYmlvICovCj4gLQlycWQtPmJpbyA9IGludF9iaW87IC8q IGludGVybmFsIGJpbyAqLwo+IC0KPiAtCWlmIChmcm9tX2NhY2hlICYmIG5yX3NlY3MgPT0gcnFk LT5ucl9wcGFzKSB7Cj4gLQkJLyogQWxsIGRhdGEgd2FzIHJlYWQgZnJvbSBjYWNoZSwgd2UgY2Fu IGNvbXBsZXRlIHRoZSBJTy4gKi8KPiAtCQlwYmxrX2VuZF91c2VyX3JlYWQoYmlvLCAwKTsKPiAt CQlhdG9taWNfaW5jKCZwYmxrLT5pbmZsaWdodF9pbyk7Cj4gLQkJX19wYmxrX2VuZF9pb19yZWFk KHBibGssIHJxZCwgZmFsc2UpOwo+IC0JfSBlbHNlIGlmIChucl9zZWNzICE9IHJxZC0+bnJfcHBh cykgewo+IC0JCS8qIFRoZSByZWFkIGJpbyByZXF1ZXN0IGNvdWxkIGJlIHBhcnRpYWxseSBmaWxs ZWQgYnkgdGhlIHdyaXRlCj4gLQkJICogYnVmZmVyLCBidXQgdGhlcmUgYXJlIHNvbWUgaG9sZXMg dGhhdCBuZWVkIHRvIGJlIHJlYWQgZnJvbQo+IC0JCSAqIHRoZSBkcml2ZS4gSW4gb3JkZXIgdG8g aGFuZGxlIHRoaXMsIHdlIHdpbGwgdXNlIGJsb2NrIGxheWVyCj4gLQkJICogbWVjaGFuaXNtIHRv IHNwbGl0IHRoaXMgcmVxdWVzdCBpbiB0byBzbWFsbGVyIG9uZXMgYW5kIG1ha2UKPiAtCQkgKiBh IGNoYWluIG9mIGl0Lgo+IC0JCSAqLwo+IC0JCXNwbGl0X2JpbyA9IGJpb19zcGxpdChiaW8sIG5y X3NlY3MgKiBOUl9QSFlfSU5fTE9HLCBHRlBfS0VSTkVMLAo+IC0JCQkJCSZwYmxrX2Jpb19zZXQp Owo+IC0JCWJpb19jaGFpbihzcGxpdF9iaW8sIGJpbyk7Cj4gLQkJc3VibWl0X2Jpb19ub2FjY3Qo YmlvKTsKPiAtCj4gLQkJLyogTmV3IGJpbyBjb250YWlucyBmaXJzdCBOIHNlY3RvcnMgb2YgdGhl IHByZXZpb3VzIG9uZSwgc28KPiAtCQkgKiB3ZSBjYW4gY29udGludWUgdG8gdXNlIGV4aXN0aW5n IHJxZCwgYnV0IHdlIG5lZWQgdG8gc2hyaW5rCj4gLQkJICogdGhlIG51bWJlciBvZiBQUEFzIGlu IGl0LiBOZXcgYmlvIGlzIGFsc28gZ3VhcmFudGVlZCB0aGF0Cj4gLQkJICogaXQgY29udGFpbnMg b25seSBlaXRoZXIgZGF0YSBmcm9tIGNhY2hlIG9yIGZyb20gZHJpdmUsIG5ld2VyCj4gLQkJICog bWl4IG9mIHRoZW0uCj4gLQkJICovCj4gLQkJYmlvID0gc3BsaXRfYmlvOwo+IC0JCXJxZC0+bnJf cHBhcyA9IG5yX3NlY3M7Cj4gLQkJaWYgKHJxZC0+bnJfcHBhcyA9PSAxKQo+IC0JCQlycWQtPnBw YV9hZGRyID0gcnFkLT5wcGFfbGlzdFswXTsKPiAtCj4gLQkJLyogUmVjcmVhdGUgaW50X2JpbyAt IGV4aXN0aW5nIG1pZ2h0IGhhdmUgc29tZSBuZWVkZWQgaW50ZXJuYWwKPiAtCQkgKiBmaWVsZHMg bW9kaWZpZWQgYWxyZWFkeS4KPiAtCQkgKi8KPiAtCQliaW9fcHV0KGludF9iaW8pOwo+IC0JCWlu dF9iaW8gPSBiaW9fY2xvbmVfZmFzdChiaW8sIEdGUF9LRVJORUwsICZwYmxrX2Jpb19zZXQpOwo+ IC0JCWdvdG8gc3BsaXRfcmV0cnk7Cj4gLQl9IGVsc2UgaWYgKHBibGtfc3VibWl0X2lvKHBibGss IHJxZCwgTlVMTCkpIHsKPiAtCQkvKiBTdWJtaXR0aW5nIElPIHRvIGRyaXZlIGZhaWxlZCwgbGV0 J3MgcmVwb3J0IGFuIGVycm9yICovCj4gLQkJcnFkLT5lcnJvciA9IC1FTk9ERVY7Cj4gLQkJcGJs a19lbmRfaW9fcmVhZChycWQpOwo+IC0JfQo+IC19Cj4gLQo+IC1zdGF0aWMgaW50IHJlYWRfcHBh bGlzdF9ycV9nYyhzdHJ1Y3QgcGJsayAqcGJsaywgc3RydWN0IG52bV9ycSAqcnFkLAo+IC0JCQkg ICAgICBzdHJ1Y3QgcGJsa19saW5lICpsaW5lLCB1NjQgKmxiYV9saXN0LAo+IC0JCQkgICAgICB1 NjQgKnBhZGRyX2xpc3RfZ2MsIHVuc2lnbmVkIGludCBucl9zZWNzKQo+IC17Cj4gLQlzdHJ1Y3Qg cHBhX2FkZHIgcHBhX2xpc3RfbDJwW05WTV9NQVhfVkxCQV07Cj4gLQlzdHJ1Y3QgcHBhX2FkZHIg cHBhX2djOwo+IC0JaW50IHZhbGlkX3NlY3MgPSAwOwo+IC0JaW50IGk7Cj4gLQo+IC0JcGJsa19s b29rdXBfbDJwX3JhbmQocGJsaywgcHBhX2xpc3RfbDJwLCBsYmFfbGlzdCwgbnJfc2Vjcyk7Cj4g LQo+IC0JZm9yIChpID0gMDsgaSA8IG5yX3NlY3M7IGkrKykgewo+IC0JCWlmIChsYmFfbGlzdFtp XSA9PSBBRERSX0VNUFRZKQo+IC0JCQljb250aW51ZTsKPiAtCj4gLQkJcHBhX2djID0gYWRkcl90 b19nZW5fcHBhKHBibGssIHBhZGRyX2xpc3RfZ2NbaV0sIGxpbmUtPmlkKTsKPiAtCQlpZiAoIXBi bGtfcHBhX2NvbXAocHBhX2xpc3RfbDJwW2ldLCBwcGFfZ2MpKSB7Cj4gLQkJCXBhZGRyX2xpc3Rf Z2NbaV0gPSBsYmFfbGlzdFtpXSA9IEFERFJfRU1QVFk7Cj4gLQkJCWNvbnRpbnVlOwo+IC0JCX0K PiAtCj4gLQkJcnFkLT5wcGFfbGlzdFt2YWxpZF9zZWNzKytdID0gcHBhX2xpc3RfbDJwW2ldOwo+ IC0JfQo+IC0KPiAtI2lmZGVmIENPTkZJR19OVk1fUEJMS19ERUJVRwo+IC0JYXRvbWljX2xvbmdf YWRkKHZhbGlkX3NlY3MsICZwYmxrLT5pbmZsaWdodF9yZWFkcyk7Cj4gLSNlbmRpZgo+IC0KPiAt CXJldHVybiB2YWxpZF9zZWNzOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW50IHJlYWRfcnFfZ2Moc3Ry dWN0IHBibGsgKnBibGssIHN0cnVjdCBudm1fcnEgKnJxZCwKPiAtCQkgICAgICBzdHJ1Y3QgcGJs a19saW5lICpsaW5lLCBzZWN0b3JfdCBsYmEsCj4gLQkJICAgICAgdTY0IHBhZGRyX2djKQo+IC17 Cj4gLQlzdHJ1Y3QgcHBhX2FkZHIgcHBhX2wycCwgcHBhX2djOwo+IC0JaW50IHZhbGlkX3NlY3Mg PSAwOwo+IC0KPiAtCWlmIChsYmEgPT0gQUREUl9FTVBUWSkKPiAtCQlnb3RvIG91dDsKPiAtCj4g LQkvKiBsb2dpYyBlcnJvcjogbGJhIG91dC1vZi1ib3VuZHMgKi8KPiAtCWlmIChsYmEgPj0gcGJs ay0+Y2FwYWNpdHkpIHsKPiAtCQlXQVJOKDEsICJwYmxrOiByZWFkIGxiYSBvdXQgb2YgYm91bmRz XG4iKTsKPiAtCQlnb3RvIG91dDsKPiAtCX0KPiAtCj4gLQlzcGluX2xvY2soJnBibGstPnRyYW5z X2xvY2spOwo+IC0JcHBhX2wycCA9IHBibGtfdHJhbnNfbWFwX2dldChwYmxrLCBsYmEpOwo+IC0J c3Bpbl91bmxvY2soJnBibGstPnRyYW5zX2xvY2spOwo+IC0KPiAtCXBwYV9nYyA9IGFkZHJfdG9f Z2VuX3BwYShwYmxrLCBwYWRkcl9nYywgbGluZS0+aWQpOwo+IC0JaWYgKCFwYmxrX3BwYV9jb21w KHBwYV9sMnAsIHBwYV9nYykpCj4gLQkJZ290byBvdXQ7Cj4gLQo+IC0JcnFkLT5wcGFfYWRkciA9 IHBwYV9sMnA7Cj4gLQl2YWxpZF9zZWNzID0gMTsKPiAtCj4gLSNpZmRlZiBDT05GSUdfTlZNX1BC TEtfREVCVUcKPiAtCWF0b21pY19sb25nX2luYygmcGJsay0+aW5mbGlnaHRfcmVhZHMpOwo+IC0j ZW5kaWYKPiAtCj4gLW91dDoKPiAtCXJldHVybiB2YWxpZF9zZWNzOwo+IC19Cj4gLQo+IC1pbnQg cGJsa19zdWJtaXRfcmVhZF9nYyhzdHJ1Y3QgcGJsayAqcGJsaywgc3RydWN0IHBibGtfZ2NfcnEg KmdjX3JxKQo+IC17Cj4gLQlzdHJ1Y3QgbnZtX3JxIHJxZDsKPiAtCWludCByZXQgPSBOVk1fSU9f T0s7Cj4gLQo+IC0JbWVtc2V0KCZycWQsIDAsIHNpemVvZihzdHJ1Y3QgbnZtX3JxKSk7Cj4gLQo+ IC0JcmV0ID0gcGJsa19hbGxvY19ycWRfbWV0YShwYmxrLCAmcnFkKTsKPiAtCWlmIChyZXQpCj4g LQkJcmV0dXJuIHJldDsKPiAtCj4gLQlpZiAoZ2NfcnEtPm5yX3NlY3MgPiAxKSB7Cj4gLQkJZ2Nf cnEtPnNlY3NfdG9fZ2MgPSByZWFkX3BwYWxpc3RfcnFfZ2MocGJsaywgJnJxZCwgZ2NfcnEtPmxp bmUsCj4gLQkJCQkJCQlnY19ycS0+bGJhX2xpc3QsCj4gLQkJCQkJCQlnY19ycS0+cGFkZHJfbGlz dCwKPiAtCQkJCQkJCWdjX3JxLT5ucl9zZWNzKTsKPiAtCQlpZiAoZ2NfcnEtPnNlY3NfdG9fZ2Mg PT0gMSkKPiAtCQkJcnFkLnBwYV9hZGRyID0gcnFkLnBwYV9saXN0WzBdOwo+IC0JfSBlbHNlIHsK PiAtCQlnY19ycS0+c2Vjc190b19nYyA9IHJlYWRfcnFfZ2MocGJsaywgJnJxZCwgZ2NfcnEtPmxp bmUsCj4gLQkJCQkJCQlnY19ycS0+bGJhX2xpc3RbMF0sCj4gLQkJCQkJCQlnY19ycS0+cGFkZHJf bGlzdFswXSk7Cj4gLQl9Cj4gLQo+IC0JaWYgKCEoZ2NfcnEtPnNlY3NfdG9fZ2MpKQo+IC0JCWdv dG8gb3V0Owo+IC0KPiAtCXJxZC5vcGNvZGUgPSBOVk1fT1BfUFJFQUQ7Cj4gLQlycWQubnJfcHBh cyA9IGdjX3JxLT5zZWNzX3RvX2djOwo+IC0KPiAtCWlmIChwYmxrX3N1Ym1pdF9pb19zeW5jKHBi bGssICZycWQsIGdjX3JxLT5kYXRhKSkgewo+IC0JCXJldCA9IC1FSU87Cj4gLQkJZ290byBlcnJf ZnJlZV9kbWE7Cj4gLQl9Cj4gLQo+IC0JcGJsa19yZWFkX2NoZWNrX3JhbmQocGJsaywgJnJxZCwg Z2NfcnEtPmxiYV9saXN0LCBnY19ycS0+bnJfc2Vjcyk7Cj4gLQo+IC0JYXRvbWljX2RlYygmcGJs ay0+aW5mbGlnaHRfaW8pOwo+IC0KPiAtCWlmIChycWQuZXJyb3IpIHsKPiAtCQlhdG9taWNfbG9u Z19pbmMoJnBibGstPnJlYWRfZmFpbGVkX2djKTsKPiAtI2lmZGVmIENPTkZJR19OVk1fUEJMS19E RUJVRwo+IC0JCXBibGtfcHJpbnRfZmFpbGVkX3JxZChwYmxrLCAmcnFkLCBycWQuZXJyb3IpOwo+ IC0jZW5kaWYKPiAtCX0KPiAtCj4gLSNpZmRlZiBDT05GSUdfTlZNX1BCTEtfREVCVUcKPiAtCWF0 b21pY19sb25nX2FkZChnY19ycS0+c2Vjc190b19nYywgJnBibGstPnN5bmNfcmVhZHMpOwo+IC0J YXRvbWljX2xvbmdfYWRkKGdjX3JxLT5zZWNzX3RvX2djLCAmcGJsay0+cmVjb3ZfZ2NfcmVhZHMp Owo+IC0JYXRvbWljX2xvbmdfc3ViKGdjX3JxLT5zZWNzX3RvX2djLCAmcGJsay0+aW5mbGlnaHRf cmVhZHMpOwo+IC0jZW5kaWYKPiAtCj4gLW91dDoKPiAtCXBibGtfZnJlZV9ycWRfbWV0YShwYmxr LCAmcnFkKTsKPiAtCXJldHVybiByZXQ7Cj4gLQo+IC1lcnJfZnJlZV9kbWE6Cj4gLQlwYmxrX2Zy ZWVfcnFkX21ldGEocGJsaywgJnJxZCk7Cj4gLQlyZXR1cm4gcmV0Owo+IC19Cj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvbGlnaHRudm0vcGJsay1yZWNvdmVyeS5jIGIvZHJpdmVycy9saWdodG52bS9w YmxrLXJlY292ZXJ5LmMKPiBkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwZTZmMGM3 NmU5MzAuLjAwMDAwMDAwMDAwMAo+IC0tLSBhL2RyaXZlcnMvbGlnaHRudm0vcGJsay1yZWNvdmVy eS5jCj4gKysrIC9kZXYvbnVsbAo+IEBAIC0xLDg3NCArMCwwIEBACj4gLS8vIFNQRFgtTGljZW5z ZS1JZGVudGlmaWVyOiBHUEwtMi4wCj4gLS8qCj4gLSAqIENvcHlyaWdodCAoQykgMjAxNiBDTkVY IExhYnMKPiAtICogSW5pdGlhbDogSmF2aWVyIEdvbnphbGV6IDxqYXZpZXJAY25leGxhYnMuY29t Pgo+IC0gKgo+IC0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp c3RyaWJ1dGUgaXQgYW5kL29yCj4gLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24KPiAtICogMiBhcyBwdWJsaXNoZWQg YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KPiAtICoKPiAtICogVGhpcyBwcm9ncmFt IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAo+ IC0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh bnR5IG9mCj4gLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS4gIFNlZSB0aGUgR05VCj4gLSAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4KPiAtICoKPiAtICogcGJsay1yZWNvdmVyeS5jIC0gcGJsaydzIHJlY292ZXJ5 IHBhdGgKPiAtICoKPiAtICogVGhlIEwyUCByZWNvdmVyeSBwYXRoIGlzIHNpbmdsZSB0aHJlYWRl ZCBhcyB0aGUgTDJQIHRhYmxlIGlzIHVwZGF0ZWQgaW4gb3JkZXIKPiAtICogZm9sbG93aW5nIHRo ZSBsaW5lIHNlcXVlbmNlIElELgo+IC0gKi8KPiAtCj4gLSNpbmNsdWRlICJwYmxrLmgiCj4gLSNp bmNsdWRlICJwYmxrLXRyYWNlLmgiCj4gLQo+IC1pbnQgcGJsa19yZWNvdl9jaGVja19lbWV0YShz dHJ1Y3QgcGJsayAqcGJsaywgc3RydWN0IGxpbmVfZW1ldGEgKmVtZXRhX2J1ZikKPiAtewo+IC0J dTMyIGNyYzsKPiAtCj4gLQljcmMgPSBwYmxrX2NhbGNfZW1ldGFfY3JjKHBibGssIGVtZXRhX2J1 Zik7Cj4gLQlpZiAobGUzMl90b19jcHUoZW1ldGFfYnVmLT5jcmMpICE9IGNyYykKPiAtCQlyZXR1 cm4gMTsKPiAtCj4gLQlpZiAobGUzMl90b19jcHUoZW1ldGFfYnVmLT5oZWFkZXIuaWRlbnRpZmll cikgIT0gUEJMS19NQUdJQykKPiAtCQlyZXR1cm4gMTsKPiAtCj4gLQlyZXR1cm4gMDsKPiAtfQo+ IC0KPiAtc3RhdGljIGludCBwYmxrX3JlY292X2wycF9mcm9tX2VtZXRhKHN0cnVjdCBwYmxrICpw YmxrLCBzdHJ1Y3QgcGJsa19saW5lICpsaW5lKQo+IC17Cj4gLQlzdHJ1Y3QgbnZtX3RndF9kZXYg KmRldiA9IHBibGstPmRldjsKPiAtCXN0cnVjdCBudm1fZ2VvICpnZW8gPSAmZGV2LT5nZW87Cj4g LQlzdHJ1Y3QgcGJsa19saW5lX21ldGEgKmxtID0gJnBibGstPmxtOwo+IC0Jc3RydWN0IHBibGtf ZW1ldGEgKmVtZXRhID0gbGluZS0+ZW1ldGE7Cj4gLQlzdHJ1Y3QgbGluZV9lbWV0YSAqZW1ldGFf YnVmID0gZW1ldGEtPmJ1ZjsKPiAtCV9fbGU2NCAqbGJhX2xpc3Q7Cj4gLQl1NjQgZGF0YV9zdGFy dCwgZGF0YV9lbmQ7Cj4gLQl1NjQgbnJfdmFsaWRfbGJhcywgbnJfbGJhcyA9IDA7Cj4gLQl1NjQg aTsKPiAtCj4gLQlsYmFfbGlzdCA9IGVtZXRhX3RvX2xiYXMocGJsaywgZW1ldGFfYnVmKTsKPiAt CWlmICghbGJhX2xpc3QpCj4gLQkJcmV0dXJuIDE7Cj4gLQo+IC0JZGF0YV9zdGFydCA9IHBibGtf bGluZV9zbWV0YV9zdGFydChwYmxrLCBsaW5lKSArIGxtLT5zbWV0YV9zZWM7Cj4gLQlkYXRhX2Vu ZCA9IGxpbmUtPmVtZXRhX3NzZWM7Cj4gLQlucl92YWxpZF9sYmFzID0gbGU2NF90b19jcHUoZW1l dGFfYnVmLT5ucl92YWxpZF9sYmFzKTsKPiAtCj4gLQlmb3IgKGkgPSBkYXRhX3N0YXJ0OyBpIDwg ZGF0YV9lbmQ7IGkrKykgewo+IC0JCXN0cnVjdCBwcGFfYWRkciBwcGE7Cj4gLQkJaW50IHBvczsK PiAtCj4gLQkJcHBhID0gYWRkcl90b19nZW5fcHBhKHBibGssIGksIGxpbmUtPmlkKTsKPiAtCQlw b3MgPSBwYmxrX3BwYV90b19wb3MoZ2VvLCBwcGEpOwo+IC0KPiAtCQkvKiBEbyBub3QgdXBkYXRl IGJhZCBibG9ja3MgKi8KPiAtCQlpZiAodGVzdF9iaXQocG9zLCBsaW5lLT5ibGtfYml0bWFwKSkK PiAtCQkJY29udGludWU7Cj4gLQo+IC0JCWlmIChsZTY0X3RvX2NwdShsYmFfbGlzdFtpXSkgPT0g QUREUl9FTVBUWSkgewo+IC0JCQlzcGluX2xvY2soJmxpbmUtPmxvY2spOwo+IC0JCQlpZiAodGVz dF9hbmRfc2V0X2JpdChpLCBsaW5lLT5pbnZhbGlkX2JpdG1hcCkpCj4gLQkJCQlXQVJOX09OQ0Uo MSwgInBibGs6IHJlYy4gZG91YmxlIGludmFsaWRhdGU6XG4iKTsKPiAtCQkJZWxzZQo+IC0JCQkJ bGUzMl9hZGRfY3B1KGxpbmUtPnZzYywgLTEpOwo+IC0JCQlzcGluX3VubG9jaygmbGluZS0+bG9j ayk7Cj4gLQo+IC0JCQljb250aW51ZTsKPiAtCQl9Cj4gLQo+IC0JCXBibGtfdXBkYXRlX21hcChw YmxrLCBsZTY0X3RvX2NwdShsYmFfbGlzdFtpXSksIHBwYSk7Cj4gLQkJbnJfbGJhcysrOwo+IC0J fQo+IC0KPiAtCWlmIChucl92YWxpZF9sYmFzICE9IG5yX2xiYXMpCj4gLQkJcGJsa19lcnIocGJs aywgImxpbmUgJWQgLSBpbmNvbnNpc3RlbnQgbGJhIGxpc3QoJWxsdS8lbGx1KVxuIiwKPiAtCQkJ CWxpbmUtPmlkLCBucl92YWxpZF9sYmFzLCBucl9sYmFzKTsKPiAtCj4gLQlsaW5lLT5sZWZ0X21z ZWNzID0gMDsKPiAtCj4gLQlyZXR1cm4gMDsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgcGJsa191 cGRhdGVfbGluZV93cChzdHJ1Y3QgcGJsayAqcGJsaywgc3RydWN0IHBibGtfbGluZSAqbGluZSwK PiAtCQkJCXU2NCB3cml0dGVuX3NlY3MpCj4gLXsKPiAtCXN0cnVjdCBwYmxrX2xpbmVfbWdtdCAq bF9tZyA9ICZwYmxrLT5sX21nOwo+IC0JaW50IGk7Cj4gLQo+IC0JZm9yIChpID0gMDsgaSA8IHdy aXR0ZW5fc2VjczsgaSArPSBwYmxrLT5taW5fd3JpdGVfcGdzKQo+IC0JCV9fcGJsa19hbGxvY19w YWdlKHBibGssIGxpbmUsIHBibGstPm1pbl93cml0ZV9wZ3MpOwo+IC0KPiAtCXNwaW5fbG9jaygm bF9tZy0+ZnJlZV9sb2NrKTsKPiAtCWlmICh3cml0dGVuX3NlY3MgPiBsaW5lLT5sZWZ0X21zZWNz KSB7Cj4gLQkJLyoKPiAtCQkgKiBXZSBoYXZlIGFsbCBkYXRhIHNlY3RvcnMgd3JpdHRlbgo+IC0J CSAqIGFuZCBzb21lIGVtZXRhIHNlY3RvcnMgd3JpdHRlbiB0b28uCj4gLQkJICovCj4gLQkJbGlu ZS0+bGVmdF9tc2VjcyA9IDA7Cj4gLQl9IGVsc2Ugewo+IC0JCS8qIFdlIGhhdmUgb25seSBzb21l IGRhdGEgc2VjdG9ycyB3cml0dGVuLiAqLwo+IC0JCWxpbmUtPmxlZnRfbXNlY3MgLT0gd3JpdHRl bl9zZWNzOwo+IC0JfQo+IC0Jc3Bpbl91bmxvY2soJmxfbWctPmZyZWVfbG9jayk7Cj4gLX0KPiAt Cj4gLXN0YXRpYyB1NjQgcGJsa19zZWNfaW5fb3Blbl9saW5lKHN0cnVjdCBwYmxrICpwYmxrLCBz dHJ1Y3QgcGJsa19saW5lICpsaW5lKQo+IC17Cj4gLQlzdHJ1Y3QgcGJsa19saW5lX21ldGEgKmxt ID0gJnBibGstPmxtOwo+IC0JaW50IG5yX2JiID0gYml0bWFwX3dlaWdodChsaW5lLT5ibGtfYml0 bWFwLCBsbS0+YmxrX3Blcl9saW5lKTsKPiAtCXU2NCB3cml0dGVuX3NlY3MgPSAwOwo+IC0JaW50 IHZhbGlkX2NodW5rcyA9IDA7Cj4gLQlpbnQgaTsKPiAtCj4gLQlmb3IgKGkgPSAwOyBpIDwgbG0t PmJsa19wZXJfbGluZTsgaSsrKSB7Cj4gLQkJc3RydWN0IG52bV9jaGtfbWV0YSAqY2h1bmsgPSAm bGluZS0+Y2hrc1tpXTsKPiAtCj4gLQkJaWYgKGNodW5rLT5zdGF0ZSAmIE5WTV9DSEtfU1RfT0ZG TElORSkKPiAtCQkJY29udGludWU7Cj4gLQo+IC0JCXdyaXR0ZW5fc2VjcyArPSBjaHVuay0+d3A7 Cj4gLQkJdmFsaWRfY2h1bmtzKys7Cj4gLQl9Cj4gLQo+IC0JaWYgKGxtLT5ibGtfcGVyX2xpbmUg LSBucl9iYiAhPSB2YWxpZF9jaHVua3MpCj4gLQkJcGJsa19lcnIocGJsaywgInJlY292ZXJ5IGxp bmUgJWQgaXMgYmFkXG4iLCBsaW5lLT5pZCk7Cj4gLQo+IC0JcGJsa191cGRhdGVfbGluZV93cChw YmxrLCBsaW5lLCB3cml0dGVuX3NlY3MgLSBsbS0+c21ldGFfc2VjKTsKPiAtCj4gLQlyZXR1cm4g d3JpdHRlbl9zZWNzOwo+IC19Cj4gLQo+IC1zdHJ1Y3QgcGJsa19yZWNvdl9hbGxvYyB7Cj4gLQlz dHJ1Y3QgcHBhX2FkZHIgKnBwYV9saXN0Owo+IC0Jdm9pZCAqbWV0YV9saXN0Owo+IC0Jc3RydWN0 IG52bV9ycSAqcnFkOwo+IC0Jdm9pZCAqZGF0YTsKPiAtCWRtYV9hZGRyX3QgZG1hX3BwYV9saXN0 Owo+IC0JZG1hX2FkZHJfdCBkbWFfbWV0YV9saXN0Owo+IC19Owo+IC0KPiAtc3RhdGljIHZvaWQg cGJsa19yZWNvdl9jb21wbGV0ZShzdHJ1Y3Qga3JlZiAqcmVmKQo+IC17Cj4gLQlzdHJ1Y3QgcGJs a19wYWRfcnEgKnBhZF9ycSA9IGNvbnRhaW5lcl9vZihyZWYsIHN0cnVjdCBwYmxrX3BhZF9ycSwg cmVmKTsKPiAtCj4gLQljb21wbGV0ZSgmcGFkX3JxLT53YWl0KTsKPiAtfQo+IC0KPiAtc3RhdGlj IHZvaWQgcGJsa19lbmRfaW9fcmVjb3Yoc3RydWN0IG52bV9ycSAqcnFkKQo+IC17Cj4gLQlzdHJ1 Y3QgcHBhX2FkZHIgKnBwYV9saXN0ID0gbnZtX3JxX3RvX3BwYV9saXN0KHJxZCk7Cj4gLQlzdHJ1 Y3QgcGJsa19wYWRfcnEgKnBhZF9ycSA9IHJxZC0+cHJpdmF0ZTsKPiAtCXN0cnVjdCBwYmxrICpw YmxrID0gcGFkX3JxLT5wYmxrOwo+IC0KPiAtCXBibGtfdXBfY2h1bmsocGJsaywgcHBhX2xpc3Rb MF0pOwo+IC0KPiAtCXBibGtfZnJlZV9ycWQocGJsaywgcnFkLCBQQkxLX1dSSVRFX0lOVCk7Cj4g LQo+IC0JYXRvbWljX2RlYygmcGJsay0+aW5mbGlnaHRfaW8pOwo+IC0Ja3JlZl9wdXQoJnBhZF9y cS0+cmVmLCBwYmxrX3JlY292X2NvbXBsZXRlKTsKPiAtfQo+IC0KPiAtLyogcGFkIGxpbmUgdXNp bmcgbGluZSBiaXRtYXAuICAqLwo+IC1zdGF0aWMgaW50IHBibGtfcmVjb3ZfcGFkX2xpbmUoc3Ry dWN0IHBibGsgKnBibGssIHN0cnVjdCBwYmxrX2xpbmUgKmxpbmUsCj4gLQkJCSAgICAgICBpbnQg bGVmdF9wcGFzKQo+IC17Cj4gLQlzdHJ1Y3QgbnZtX3RndF9kZXYgKmRldiA9IHBibGstPmRldjsK PiAtCXN0cnVjdCBudm1fZ2VvICpnZW8gPSAmZGV2LT5nZW87Cj4gLQl2b2lkICptZXRhX2xpc3Q7 Cj4gLQlzdHJ1Y3QgcGJsa19wYWRfcnEgKnBhZF9ycTsKPiAtCXN0cnVjdCBudm1fcnEgKnJxZDsK PiAtCXN0cnVjdCBwcGFfYWRkciAqcHBhX2xpc3Q7Cj4gLQl2b2lkICpkYXRhOwo+IC0JX19sZTY0 ICpsYmFfbGlzdCA9IGVtZXRhX3RvX2xiYXMocGJsaywgbGluZS0+ZW1ldGEtPmJ1Zik7Cj4gLQl1 NjQgd19wdHIgPSBsaW5lLT5jdXJfc2VjOwo+IC0JaW50IGxlZnRfbGluZV9wcGFzLCBycV9wcGFz Owo+IC0JaW50IGksIGo7Cj4gLQlpbnQgcmV0ID0gMDsKPiAtCj4gLQlzcGluX2xvY2soJmxpbmUt PmxvY2spOwo+IC0JbGVmdF9saW5lX3BwYXMgPSBsaW5lLT5sZWZ0X21zZWNzOwo+IC0Jc3Bpbl91 bmxvY2soJmxpbmUtPmxvY2spOwo+IC0KPiAtCXBhZF9ycSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVj dCBwYmxrX3BhZF9ycSksIEdGUF9LRVJORUwpOwo+IC0JaWYgKCFwYWRfcnEpCj4gLQkJcmV0dXJu IC1FTk9NRU07Cj4gLQo+IC0JZGF0YSA9IHZ6YWxsb2MoYXJyYXlfc2l6ZShwYmxrLT5tYXhfd3Jp dGVfcGdzLCBnZW8tPmNzZWNzKSk7Cj4gLQlpZiAoIWRhdGEpIHsKPiAtCQlyZXQgPSAtRU5PTUVN Owo+IC0JCWdvdG8gZnJlZV9ycTsKPiAtCX0KPiAtCj4gLQlwYWRfcnEtPnBibGsgPSBwYmxrOwo+ IC0JaW5pdF9jb21wbGV0aW9uKCZwYWRfcnEtPndhaXQpOwo+IC0Ja3JlZl9pbml0KCZwYWRfcnEt PnJlZik7Cj4gLQo+IC1uZXh0X3BhZF9ycToKPiAtCXJxX3BwYXMgPSBwYmxrX2NhbGNfc2Vjcyhw YmxrLCBsZWZ0X3BwYXMsIDAsIGZhbHNlKTsKPiAtCWlmIChycV9wcGFzIDwgcGJsay0+bWluX3dy aXRlX3Bncykgewo+IC0JCXBibGtfZXJyKHBibGssICJjb3JydXB0ZWQgcGFkIGxpbmUgJWRcbiIs IGxpbmUtPmlkKTsKPiAtCQlnb3RvIGZhaWxfY29tcGxldGU7Cj4gLQl9Cj4gLQo+IC0JcnFkID0g cGJsa19hbGxvY19ycWQocGJsaywgUEJMS19XUklURV9JTlQpOwo+IC0KPiAtCXJldCA9IHBibGtf YWxsb2NfcnFkX21ldGEocGJsaywgcnFkKTsKPiAtCWlmIChyZXQpIHsKPiAtCQlwYmxrX2ZyZWVf cnFkKHBibGssIHJxZCwgUEJMS19XUklURV9JTlQpOwo+IC0JCWdvdG8gZmFpbF9jb21wbGV0ZTsK PiAtCX0KPiAtCj4gLQlycWQtPmJpbyA9IE5VTEw7Cj4gLQlycWQtPm9wY29kZSA9IE5WTV9PUF9Q V1JJVEU7Cj4gLQlycWQtPmlzX3NlcSA9IDE7Cj4gLQlycWQtPm5yX3BwYXMgPSBycV9wcGFzOwo+ IC0JcnFkLT5lbmRfaW8gPSBwYmxrX2VuZF9pb19yZWNvdjsKPiAtCXJxZC0+cHJpdmF0ZSA9IHBh ZF9ycTsKPiAtCj4gLQlwcGFfbGlzdCA9IG52bV9ycV90b19wcGFfbGlzdChycWQpOwo+IC0JbWV0 YV9saXN0ID0gcnFkLT5tZXRhX2xpc3Q7Cj4gLQo+IC0JZm9yIChpID0gMDsgaSA8IHJxZC0+bnJf cHBhczsgKSB7Cj4gLQkJc3RydWN0IHBwYV9hZGRyIHBwYTsKPiAtCQlpbnQgcG9zOwo+IC0KPiAt CQl3X3B0ciA9IHBibGtfYWxsb2NfcGFnZShwYmxrLCBsaW5lLCBwYmxrLT5taW5fd3JpdGVfcGdz KTsKPiAtCQlwcGEgPSBhZGRyX3RvX2dlbl9wcGEocGJsaywgd19wdHIsIGxpbmUtPmlkKTsKPiAt CQlwb3MgPSBwYmxrX3BwYV90b19wb3MoZ2VvLCBwcGEpOwo+IC0KPiAtCQl3aGlsZSAodGVzdF9i aXQocG9zLCBsaW5lLT5ibGtfYml0bWFwKSkgewo+IC0JCQl3X3B0ciArPSBwYmxrLT5taW5fd3Jp dGVfcGdzOwo+IC0JCQlwcGEgPSBhZGRyX3RvX2dlbl9wcGEocGJsaywgd19wdHIsIGxpbmUtPmlk KTsKPiAtCQkJcG9zID0gcGJsa19wcGFfdG9fcG9zKGdlbywgcHBhKTsKPiAtCQl9Cj4gLQo+IC0J CWZvciAoaiA9IDA7IGogPCBwYmxrLT5taW5fd3JpdGVfcGdzOyBqKyssIGkrKywgd19wdHIrKykg ewo+IC0JCQlzdHJ1Y3QgcHBhX2FkZHIgZGV2X3BwYTsKPiAtCQkJc3RydWN0IHBibGtfc2VjX21l dGEgKm1ldGE7Cj4gLQkJCV9fbGU2NCBhZGRyX2VtcHR5ID0gY3B1X3RvX2xlNjQoQUREUl9FTVBU WSk7Cj4gLQo+IC0JCQlkZXZfcHBhID0gYWRkcl90b19nZW5fcHBhKHBibGssIHdfcHRyLCBsaW5l LT5pZCk7Cj4gLQo+IC0JCQlwYmxrX21hcF9pbnZhbGlkYXRlKHBibGssIGRldl9wcGEpOwo+IC0J CQlsYmFfbGlzdFt3X3B0cl0gPSBhZGRyX2VtcHR5Owo+IC0JCQltZXRhID0gcGJsa19nZXRfbWV0 YShwYmxrLCBtZXRhX2xpc3QsIGkpOwo+IC0JCQltZXRhLT5sYmEgPSBhZGRyX2VtcHR5Owo+IC0J CQlwcGFfbGlzdFtpXSA9IGRldl9wcGE7Cj4gLQkJfQo+IC0JfQo+IC0KPiAtCWtyZWZfZ2V0KCZw YWRfcnEtPnJlZik7Cj4gLQlwYmxrX2Rvd25fY2h1bmsocGJsaywgcHBhX2xpc3RbMF0pOwo+IC0K PiAtCXJldCA9IHBibGtfc3VibWl0X2lvKHBibGssIHJxZCwgZGF0YSk7Cj4gLQlpZiAocmV0KSB7 Cj4gLQkJcGJsa19lcnIocGJsaywgIkkvTyBzdWJtaXNzaW9uIGZhaWxlZDogJWRcbiIsIHJldCk7 Cj4gLQkJcGJsa191cF9jaHVuayhwYmxrLCBwcGFfbGlzdFswXSk7Cj4gLQkJa3JlZl9wdXQoJnBh ZF9ycS0+cmVmLCBwYmxrX3JlY292X2NvbXBsZXRlKTsKPiAtCQlwYmxrX2ZyZWVfcnFkKHBibGss IHJxZCwgUEJMS19XUklURV9JTlQpOwo+IC0JCWdvdG8gZmFpbF9jb21wbGV0ZTsKPiAtCX0KPiAt Cj4gLQlsZWZ0X2xpbmVfcHBhcyAtPSBycV9wcGFzOwo+IC0JbGVmdF9wcGFzIC09IHJxX3BwYXM7 Cj4gLQlpZiAobGVmdF9wcGFzICYmIGxlZnRfbGluZV9wcGFzKQo+IC0JCWdvdG8gbmV4dF9wYWRf cnE7Cj4gLQo+IC1mYWlsX2NvbXBsZXRlOgo+IC0Ja3JlZl9wdXQoJnBhZF9ycS0+cmVmLCBwYmxr X3JlY292X2NvbXBsZXRlKTsKPiAtCXdhaXRfZm9yX2NvbXBsZXRpb24oJnBhZF9ycS0+d2FpdCk7 Cj4gLQo+IC0JaWYgKCFwYmxrX2xpbmVfaXNfZnVsbChsaW5lKSkKPiAtCQlwYmxrX2VycihwYmxr LCAiY29ycnVwdGVkIHBhZGRlZCBsaW5lOiAlZFxuIiwgbGluZS0+aWQpOwo+IC0KPiAtCXZmcmVl KGRhdGEpOwo+IC1mcmVlX3JxOgo+IC0Ja2ZyZWUocGFkX3JxKTsKPiAtCXJldHVybiByZXQ7Cj4g LX0KPiAtCj4gLXN0YXRpYyBpbnQgcGJsa19wYWRfZGlzdGFuY2Uoc3RydWN0IHBibGsgKnBibGss IHN0cnVjdCBwYmxrX2xpbmUgKmxpbmUpCj4gLXsKPiAtCXN0cnVjdCBudm1fdGd0X2RldiAqZGV2 ID0gcGJsay0+ZGV2Owo+IC0Jc3RydWN0IG52bV9nZW8gKmdlbyA9ICZkZXYtPmdlbzsKPiAtCWlu dCBkaXN0YW5jZSA9IGdlby0+bXdfY3VuaXRzICogZ2VvLT5hbGxfbHVucyAqIGdlby0+d3Nfb3B0 Owo+IC0KPiAtCXJldHVybiAoZGlzdGFuY2UgPiBsaW5lLT5sZWZ0X21zZWNzKSA/IGxpbmUtPmxl ZnRfbXNlY3MgOiBkaXN0YW5jZTsKPiAtfQo+IC0KPiAtLyogUmV0dXJuIGEgY2h1bmsgYmVsb25n aW5nIHRvIGEgbGluZSBieSBzdHJpcGUod3JpdGUgb3JkZXIpIGluZGV4ICovCj4gLXN0YXRpYyBz dHJ1Y3QgbnZtX2Noa19tZXRhICpwYmxrX2dldF9zdHJpcGVfY2h1bmsoc3RydWN0IHBibGsgKnBi bGssCj4gLQkJCQkJCSAgc3RydWN0IHBibGtfbGluZSAqbGluZSwKPiAtCQkJCQkJICBpbnQgaW5k ZXgpCj4gLXsKPiAtCXN0cnVjdCBudm1fdGd0X2RldiAqZGV2ID0gcGJsay0+ZGV2Owo+IC0Jc3Ry dWN0IG52bV9nZW8gKmdlbyA9ICZkZXYtPmdlbzsKPiAtCXN0cnVjdCBwYmxrX2x1biAqcmx1bjsK PiAtCXN0cnVjdCBwcGFfYWRkciBwcGE7Cj4gLQlpbnQgcG9zOwo+IC0KPiAtCXJsdW4gPSAmcGJs ay0+bHVuc1tpbmRleF07Cj4gLQlwcGEgPSBybHVuLT5icHBhOwo+IC0JcG9zID0gcGJsa19wcGFf dG9fcG9zKGdlbywgcHBhKTsKPiAtCj4gLQlyZXR1cm4gJmxpbmUtPmNoa3NbcG9zXTsKPiAtfQo+ IC0KPiAtc3RhdGljIGludCBwYmxrX2xpbmVfd3BzX2FyZV91bmJhbGFuY2VkKHN0cnVjdCBwYmxr ICpwYmxrLAo+IC0JCQkJICAgICAgc3RydWN0IHBibGtfbGluZSAqbGluZSkKPiAtewo+IC0Jc3Ry dWN0IHBibGtfbGluZV9tZXRhICpsbSA9ICZwYmxrLT5sbTsKPiAtCWludCBibGtfaW5fbGluZSA9 IGxtLT5ibGtfcGVyX2xpbmU7Cj4gLQlzdHJ1Y3QgbnZtX2Noa19tZXRhICpjaHVuazsKPiAtCXU2 NCBtYXhfd3AsIG1pbl93cDsKPiAtCWludCBpOwo+IC0KPiAtCWkgPSBmaW5kX2ZpcnN0X3plcm9f Yml0KGxpbmUtPmJsa19iaXRtYXAsIGJsa19pbl9saW5lKTsKPiAtCj4gLQkvKiBJZiB0aGVyZSBp cyBvbmUgb3IgemVybyBnb29kIGNodW5rcyBpbiB0aGUgbGluZSwKPiAtCSAqIHRoZSB3cml0ZSBw b2ludGVycyBjYW4ndCBiZSB1bmJhbGFuY2VkLgo+IC0JICovCj4gLQlpZiAoaSA+PSAoYmxrX2lu X2xpbmUgLSAxKSkKPiAtCQlyZXR1cm4gMDsKPiAtCj4gLQljaHVuayA9IHBibGtfZ2V0X3N0cmlw ZV9jaHVuayhwYmxrLCBsaW5lLCBpKTsKPiAtCW1heF93cCA9IGNodW5rLT53cDsKPiAtCWlmICht YXhfd3AgPiBwYmxrLT5tYXhfd3JpdGVfcGdzKQo+IC0JCW1pbl93cCA9IG1heF93cCAtIHBibGst Pm1heF93cml0ZV9wZ3M7Cj4gLQllbHNlCj4gLQkJbWluX3dwID0gMDsKPiAtCj4gLQlpID0gZmlu ZF9uZXh0X3plcm9fYml0KGxpbmUtPmJsa19iaXRtYXAsIGJsa19pbl9saW5lLCBpICsgMSk7Cj4g LQl3aGlsZSAoaSA8IGJsa19pbl9saW5lKSB7Cj4gLQkJY2h1bmsgPSBwYmxrX2dldF9zdHJpcGVf Y2h1bmsocGJsaywgbGluZSwgaSk7Cj4gLQkJaWYgKGNodW5rLT53cCA+IG1heF93cCB8fCBjaHVu ay0+d3AgPCBtaW5fd3ApCj4gLQkJCXJldHVybiAxOwo+IC0KPiAtCQlpID0gZmluZF9uZXh0X3pl cm9fYml0KGxpbmUtPmJsa19iaXRtYXAsIGJsa19pbl9saW5lLCBpICsgMSk7Cj4gLQl9Cj4gLQo+ IC0JcmV0dXJuIDA7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbnQgcGJsa19yZWNvdl9zY2FuX29vYihz dHJ1Y3QgcGJsayAqcGJsaywgc3RydWN0IHBibGtfbGluZSAqbGluZSwKPiAtCQkJICAgICAgIHN0 cnVjdCBwYmxrX3JlY292X2FsbG9jIHApCj4gLXsKPiAtCXN0cnVjdCBudm1fdGd0X2RldiAqZGV2 ID0gcGJsay0+ZGV2Owo+IC0Jc3RydWN0IHBibGtfbGluZV9tZXRhICpsbSA9ICZwYmxrLT5sbTsK PiAtCXN0cnVjdCBudm1fZ2VvICpnZW8gPSAmZGV2LT5nZW87Cj4gLQlzdHJ1Y3QgcHBhX2FkZHIg KnBwYV9saXN0Owo+IC0Jdm9pZCAqbWV0YV9saXN0Owo+IC0Jc3RydWN0IG52bV9ycSAqcnFkOwo+ IC0Jdm9pZCAqZGF0YTsKPiAtCWRtYV9hZGRyX3QgZG1hX3BwYV9saXN0LCBkbWFfbWV0YV9saXN0 Owo+IC0JX19sZTY0ICpsYmFfbGlzdDsKPiAtCXU2NCBwYWRkciA9IHBibGtfbGluZV9zbWV0YV9z dGFydChwYmxrLCBsaW5lKSArIGxtLT5zbWV0YV9zZWM7Cj4gLQlib29sIHBhZGRlZCA9IGZhbHNl Owo+IC0JaW50IHJxX3BwYXM7Cj4gLQlpbnQgaSwgajsKPiAtCWludCByZXQ7Cj4gLQl1NjQgbGVm dF9wcGFzID0gcGJsa19zZWNfaW5fb3Blbl9saW5lKHBibGssIGxpbmUpIC0gbG0tPnNtZXRhX3Nl YzsKPiAtCj4gLQlpZiAocGJsa19saW5lX3dwc19hcmVfdW5iYWxhbmNlZChwYmxrLCBsaW5lKSkK PiAtCQlwYmxrX3dhcm4ocGJsaywgInJlY292ZXJpbmcgdW5iYWxhbmNlZCBsaW5lICglZClcbiIs IGxpbmUtPmlkKTsKPiAtCj4gLQlwcGFfbGlzdCA9IHAucHBhX2xpc3Q7Cj4gLQltZXRhX2xpc3Qg PSBwLm1ldGFfbGlzdDsKPiAtCXJxZCA9IHAucnFkOwo+IC0JZGF0YSA9IHAuZGF0YTsKPiAtCWRt YV9wcGFfbGlzdCA9IHAuZG1hX3BwYV9saXN0Owo+IC0JZG1hX21ldGFfbGlzdCA9IHAuZG1hX21l dGFfbGlzdDsKPiAtCj4gLQlsYmFfbGlzdCA9IGVtZXRhX3RvX2xiYXMocGJsaywgbGluZS0+ZW1l dGEtPmJ1Zik7Cj4gLQo+IC1uZXh0X3JxOgo+IC0JbWVtc2V0KHJxZCwgMCwgcGJsa19nX3JxX3Np emUpOwo+IC0KPiAtCXJxX3BwYXMgPSBwYmxrX2NhbGNfc2VjcyhwYmxrLCBsZWZ0X3BwYXMsIDAs IGZhbHNlKTsKPiAtCWlmICghcnFfcHBhcykKPiAtCQlycV9wcGFzID0gcGJsay0+bWluX3dyaXRl X3BnczsKPiAtCj4gLXJldHJ5X3JxOgo+IC0JcnFkLT5iaW8gPSBOVUxMOwo+IC0JcnFkLT5vcGNv ZGUgPSBOVk1fT1BfUFJFQUQ7Cj4gLQlycWQtPm1ldGFfbGlzdCA9IG1ldGFfbGlzdDsKPiAtCXJx ZC0+bnJfcHBhcyA9IHJxX3BwYXM7Cj4gLQlycWQtPnBwYV9saXN0ID0gcHBhX2xpc3Q7Cj4gLQly cWQtPmRtYV9wcGFfbGlzdCA9IGRtYV9wcGFfbGlzdDsKPiAtCXJxZC0+ZG1hX21ldGFfbGlzdCA9 IGRtYV9tZXRhX2xpc3Q7Cj4gLQlwcGFfbGlzdCA9IG52bV9ycV90b19wcGFfbGlzdChycWQpOwo+ IC0KPiAtCWlmIChwYmxrX2lvX2FsaWduZWQocGJsaywgcnFfcHBhcykpCj4gLQkJcnFkLT5pc19z ZXEgPSAxOwo+IC0KPiAtCWZvciAoaSA9IDA7IGkgPCBycWQtPm5yX3BwYXM7ICkgewo+IC0JCXN0 cnVjdCBwcGFfYWRkciBwcGE7Cj4gLQkJaW50IHBvczsKPiAtCj4gLQkJcHBhID0gYWRkcl90b19n ZW5fcHBhKHBibGssIHBhZGRyLCBsaW5lLT5pZCk7Cj4gLQkJcG9zID0gcGJsa19wcGFfdG9fcG9z KGdlbywgcHBhKTsKPiAtCj4gLQkJd2hpbGUgKHRlc3RfYml0KHBvcywgbGluZS0+YmxrX2JpdG1h cCkpIHsKPiAtCQkJcGFkZHIgKz0gcGJsay0+bWluX3dyaXRlX3BnczsKPiAtCQkJcHBhID0gYWRk cl90b19nZW5fcHBhKHBibGssIHBhZGRyLCBsaW5lLT5pZCk7Cj4gLQkJCXBvcyA9IHBibGtfcHBh X3RvX3BvcyhnZW8sIHBwYSk7Cj4gLQkJfQo+IC0KPiAtCQlmb3IgKGogPSAwOyBqIDwgcGJsay0+ bWluX3dyaXRlX3BnczsgaisrLCBpKyspCj4gLQkJCXBwYV9saXN0W2ldID0KPiAtCQkJCWFkZHJf dG9fZ2VuX3BwYShwYmxrLCBwYWRkciArIGosIGxpbmUtPmlkKTsKPiAtCX0KPiAtCj4gLQlyZXQg PSBwYmxrX3N1Ym1pdF9pb19zeW5jKHBibGssIHJxZCwgZGF0YSk7Cj4gLQlpZiAocmV0KSB7Cj4g LQkJcGJsa19lcnIocGJsaywgIkkvTyBzdWJtaXNzaW9uIGZhaWxlZDogJWRcbiIsIHJldCk7Cj4g LQkJcmV0dXJuIHJldDsKPiAtCX0KPiAtCj4gLQlhdG9taWNfZGVjKCZwYmxrLT5pbmZsaWdodF9p byk7Cj4gLQo+IC0JLyogSWYgYSByZWFkIGZhaWxzLCBkbyBhIGJlc3QgZWZmb3J0IGJ5IHBhZGRp bmcgdGhlIGxpbmUgYW5kIHJldHJ5aW5nICovCj4gLQlpZiAocnFkLT5lcnJvciAmJiBycWQtPmVy cm9yICE9IE5WTV9SU1BfV0FSTl9ISUdIRUNDKSB7Cj4gLQkJaW50IHBhZF9kaXN0YW5jZSwgcmV0 Owo+IC0KPiAtCQlpZiAocGFkZGVkKSB7Cj4gLQkJCXBibGtfbG9nX3JlYWRfZXJyKHBibGssIHJx ZCk7Cj4gLQkJCXJldHVybiAtRUlOVFI7Cj4gLQkJfQo+IC0KPiAtCQlwYWRfZGlzdGFuY2UgPSBw YmxrX3BhZF9kaXN0YW5jZShwYmxrLCBsaW5lKTsKPiAtCQlyZXQgPSBwYmxrX3JlY292X3BhZF9s aW5lKHBibGssIGxpbmUsIHBhZF9kaXN0YW5jZSk7Cj4gLQkJaWYgKHJldCkgewo+IC0JCQlyZXR1 cm4gcmV0Owo+IC0JCX0KPiAtCj4gLQkJcGFkZGVkID0gdHJ1ZTsKPiAtCQlnb3RvIHJldHJ5X3Jx Owo+IC0JfQo+IC0KPiAtCXBibGtfZ2V0X3BhY2tlZF9tZXRhKHBibGssIHJxZCk7Cj4gLQo+IC0J Zm9yIChpID0gMDsgaSA8IHJxZC0+bnJfcHBhczsgaSsrKSB7Cj4gLQkJc3RydWN0IHBibGtfc2Vj X21ldGEgKm1ldGEgPSBwYmxrX2dldF9tZXRhKHBibGssIG1ldGFfbGlzdCwgaSk7Cj4gLQkJdTY0 IGxiYSA9IGxlNjRfdG9fY3B1KG1ldGEtPmxiYSk7Cj4gLQo+IC0JCWxiYV9saXN0W3BhZGRyKytd ID0gY3B1X3RvX2xlNjQobGJhKTsKPiAtCj4gLQkJaWYgKGxiYSA9PSBBRERSX0VNUFRZIHx8IGxi YSA+PSBwYmxrLT5jYXBhY2l0eSkKPiAtCQkJY29udGludWU7Cj4gLQo+IC0JCWxpbmUtPm5yX3Zh bGlkX2xiYXMrKzsKPiAtCQlwYmxrX3VwZGF0ZV9tYXAocGJsaywgbGJhLCBwcGFfbGlzdFtpXSk7 Cj4gLQl9Cj4gLQo+IC0JbGVmdF9wcGFzIC09IHJxX3BwYXM7Cj4gLQlpZiAobGVmdF9wcGFzID4g MCkKPiAtCQlnb3RvIG5leHRfcnE7Cj4gLQo+IC0jaWZkZWYgQ09ORklHX05WTV9QQkxLX0RFQlVH Cj4gLQlXQVJOX09OKHBhZGRlZCAmJiAhcGJsa19saW5lX2lzX2Z1bGwobGluZSkpOwo+IC0jZW5k aWYKPiAtCj4gLQlyZXR1cm4gMDsKPiAtfQo+IC0KPiAtLyogU2NhbiBsaW5lIGZvciBsYmFzIG9u IG91dCBvZiBib3VuZCBhcmVhICovCj4gLXN0YXRpYyBpbnQgcGJsa19yZWNvdl9sMnBfZnJvbV9v b2Ioc3RydWN0IHBibGsgKnBibGssIHN0cnVjdCBwYmxrX2xpbmUgKmxpbmUpCj4gLXsKPiAtCXN0 cnVjdCBudm1fdGd0X2RldiAqZGV2ID0gcGJsay0+ZGV2Owo+IC0Jc3RydWN0IG52bV9nZW8gKmdl byA9ICZkZXYtPmdlbzsKPiAtCXN0cnVjdCBudm1fcnEgKnJxZDsKPiAtCXN0cnVjdCBwcGFfYWRk ciAqcHBhX2xpc3Q7Cj4gLQl2b2lkICptZXRhX2xpc3Q7Cj4gLQlzdHJ1Y3QgcGJsa19yZWNvdl9h bGxvYyBwOwo+IC0Jdm9pZCAqZGF0YTsKPiAtCWRtYV9hZGRyX3QgZG1hX3BwYV9saXN0LCBkbWFf bWV0YV9saXN0Owo+IC0JaW50IHJldCA9IDA7Cj4gLQo+IC0JbWV0YV9saXN0ID0gbnZtX2Rldl9k bWFfYWxsb2MoZGV2LT5wYXJlbnQsIEdGUF9LRVJORUwsICZkbWFfbWV0YV9saXN0KTsKPiAtCWlm ICghbWV0YV9saXN0KQo+IC0JCXJldHVybiAtRU5PTUVNOwo+IC0KPiAtCXBwYV9saXN0ID0gKHZv aWQgKikobWV0YV9saXN0KSArIHBibGtfZG1hX21ldGFfc2l6ZShwYmxrKTsKPiAtCWRtYV9wcGFf bGlzdCA9IGRtYV9tZXRhX2xpc3QgKyBwYmxrX2RtYV9tZXRhX3NpemUocGJsayk7Cj4gLQo+IC0J ZGF0YSA9IGtjYWxsb2MocGJsay0+bWF4X3dyaXRlX3BncywgZ2VvLT5jc2VjcywgR0ZQX0tFUk5F TCk7Cj4gLQlpZiAoIWRhdGEpIHsKPiAtCQlyZXQgPSAtRU5PTUVNOwo+IC0JCWdvdG8gZnJlZV9t ZXRhX2xpc3Q7Cj4gLQl9Cj4gLQo+IC0JcnFkID0gbWVtcG9vbF9hbGxvYygmcGJsay0+cl9ycV9w b29sLCBHRlBfS0VSTkVMKTsKPiAtCW1lbXNldChycWQsIDAsIHBibGtfZ19ycV9zaXplKTsKPiAt Cj4gLQlwLnBwYV9saXN0ID0gcHBhX2xpc3Q7Cj4gLQlwLm1ldGFfbGlzdCA9IG1ldGFfbGlzdDsK PiAtCXAucnFkID0gcnFkOwo+IC0JcC5kYXRhID0gZGF0YTsKPiAtCXAuZG1hX3BwYV9saXN0ID0g ZG1hX3BwYV9saXN0Owo+IC0JcC5kbWFfbWV0YV9saXN0ID0gZG1hX21ldGFfbGlzdDsKPiAtCj4g LQlyZXQgPSBwYmxrX3JlY292X3NjYW5fb29iKHBibGssIGxpbmUsIHApOwo+IC0JaWYgKHJldCkg ewo+IC0JCXBibGtfZXJyKHBibGssICJjb3VsZCBub3QgcmVjb3ZlciBMMlAgZm9ybSBPT0JcbiIp Owo+IC0JCWdvdG8gb3V0Owo+IC0JfQo+IC0KPiAtCWlmIChwYmxrX2xpbmVfaXNfZnVsbChsaW5l KSkKPiAtCQlwYmxrX2xpbmVfcmVjb3ZfY2xvc2UocGJsaywgbGluZSk7Cj4gLQo+IC1vdXQ6Cj4g LQltZW1wb29sX2ZyZWUocnFkLCAmcGJsay0+cl9ycV9wb29sKTsKPiAtCWtmcmVlKGRhdGEpOwo+ IC1mcmVlX21ldGFfbGlzdDoKPiAtCW52bV9kZXZfZG1hX2ZyZWUoZGV2LT5wYXJlbnQsIG1ldGFf bGlzdCwgZG1hX21ldGFfbGlzdCk7Cj4gLQo+IC0JcmV0dXJuIHJldDsKPiAtfQo+IC0KPiAtLyog SW5zZXJ0IGxpbmVzIG9yZGVyZWQgYnkgc2VxdWVuY2UgbnVtYmVyIChzZXFfbnVtKSBvbiBsaXN0 ICovCj4gLXN0YXRpYyB2b2lkIHBibGtfcmVjb3ZfbGluZV9hZGRfb3JkZXJlZChzdHJ1Y3QgbGlz dF9oZWFkICpoZWFkLAo+IC0JCQkJCXN0cnVjdCBwYmxrX2xpbmUgKmxpbmUpCj4gLXsKPiAtCXN0 cnVjdCBwYmxrX2xpbmUgKnQgPSBOVUxMOwo+IC0KPiAtCWxpc3RfZm9yX2VhY2hfZW50cnkodCwg aGVhZCwgbGlzdCkKPiAtCQlpZiAodC0+c2VxX25yID4gbGluZS0+c2VxX25yKQo+IC0JCQlicmVh azsKPiAtCj4gLQlfX2xpc3RfYWRkKCZsaW5lLT5saXN0LCB0LT5saXN0LnByZXYsICZ0LT5saXN0 KTsKPiAtfQo+IC0KPiAtc3RhdGljIHU2NCBwYmxrX2xpbmVfZW1ldGFfc3RhcnQoc3RydWN0IHBi bGsgKnBibGssIHN0cnVjdCBwYmxrX2xpbmUgKmxpbmUpCj4gLXsKPiAtCXN0cnVjdCBudm1fdGd0 X2RldiAqZGV2ID0gcGJsay0+ZGV2Owo+IC0Jc3RydWN0IG52bV9nZW8gKmdlbyA9ICZkZXYtPmdl bzsKPiAtCXN0cnVjdCBwYmxrX2xpbmVfbWV0YSAqbG0gPSAmcGJsay0+bG07Cj4gLQl1bnNpZ25l ZCBpbnQgZW1ldGFfc2VjczsKPiAtCXU2NCBlbWV0YV9zdGFydDsKPiAtCXN0cnVjdCBwcGFfYWRk ciBwcGE7Cj4gLQlpbnQgcG9zOwo+IC0KPiAtCWVtZXRhX3NlY3MgPSBsbS0+ZW1ldGFfc2VjWzBd Owo+IC0JZW1ldGFfc3RhcnQgPSBsbS0+c2VjX3Blcl9saW5lOwo+IC0KPiAtCXdoaWxlIChlbWV0 YV9zZWNzKSB7Cj4gLQkJZW1ldGFfc3RhcnQtLTsKPiAtCQlwcGEgPSBhZGRyX3RvX2dlbl9wcGEo cGJsaywgZW1ldGFfc3RhcnQsIGxpbmUtPmlkKTsKPiAtCQlwb3MgPSBwYmxrX3BwYV90b19wb3Mo Z2VvLCBwcGEpOwo+IC0JCWlmICghdGVzdF9iaXQocG9zLCBsaW5lLT5ibGtfYml0bWFwKSkKPiAt CQkJZW1ldGFfc2Vjcy0tOwo+IC0JfQo+IC0KPiAtCXJldHVybiBlbWV0YV9zdGFydDsKPiAtfQo+ IC0KPiAtc3RhdGljIGludCBwYmxrX3JlY292X2NoZWNrX2xpbmVfdmVyc2lvbihzdHJ1Y3QgcGJs ayAqcGJsaywKPiAtCQkJCQkgc3RydWN0IGxpbmVfZW1ldGEgKmVtZXRhKQo+IC17Cj4gLQlzdHJ1 Y3QgbGluZV9oZWFkZXIgKmhlYWRlciA9ICZlbWV0YS0+aGVhZGVyOwo+IC0KPiAtCWlmIChoZWFk ZXItPnZlcnNpb25fbWFqb3IgIT0gRU1FVEFfVkVSU0lPTl9NQUpPUikgewo+IC0JCXBibGtfZXJy KHBibGssICJsaW5lIG1ham9yIHZlcnNpb24gbWlzbWF0Y2g6ICVkLCBleHBlY3RlZDogJWRcbiIs Cj4gLQkJCSBoZWFkZXItPnZlcnNpb25fbWFqb3IsIEVNRVRBX1ZFUlNJT05fTUFKT1IpOwo+IC0J CXJldHVybiAxOwo+IC0JfQo+IC0KPiAtI2lmZGVmIENPTkZJR19OVk1fUEJMS19ERUJVRwo+IC0J aWYgKGhlYWRlci0+dmVyc2lvbl9taW5vciA+IEVNRVRBX1ZFUlNJT05fTUlOT1IpCj4gLQkJcGJs a19pbmZvKHBibGssICJuZXdlciBsaW5lIG1pbm9yIHZlcnNpb24gZm91bmQ6ICVkXG4iLAo+IC0J CQkJaGVhZGVyLT52ZXJzaW9uX21pbm9yKTsKPiAtI2VuZGlmCj4gLQo+IC0JcmV0dXJuIDA7Cj4g LX0KPiAtCj4gLXN0YXRpYyB2b2lkIHBibGtfcmVjb3Zfd2FfY291bnRlcnMoc3RydWN0IHBibGsg KnBibGssCj4gLQkJCQkgICBzdHJ1Y3QgbGluZV9lbWV0YSAqZW1ldGEpCj4gLXsKPiAtCXN0cnVj dCBwYmxrX2xpbmVfbWV0YSAqbG0gPSAmcGJsay0+bG07Cj4gLQlzdHJ1Y3QgbGluZV9oZWFkZXIg KmhlYWRlciA9ICZlbWV0YS0+aGVhZGVyOwo+IC0Jc3RydWN0IHdhX2NvdW50ZXJzICp3YSA9IGVt ZXRhX3RvX3dhKGxtLCBlbWV0YSk7Cj4gLQo+IC0JLyogV0EgY291bnRlcnMgd2VyZSBpbnRyb2R1 Y2VkIGluIGVtZXRhIHZlcnNpb24gMC4yICovCj4gLQlpZiAoaGVhZGVyLT52ZXJzaW9uX21ham9y ID4gMCB8fCBoZWFkZXItPnZlcnNpb25fbWlub3IgPj0gMikgewo+IC0JCXU2NCB1c2VyID0gbGU2 NF90b19jcHUod2EtPnVzZXIpOwo+IC0JCXU2NCBwYWQgPSBsZTY0X3RvX2NwdSh3YS0+cGFkKTsK PiAtCQl1NjQgZ2MgPSBsZTY0X3RvX2NwdSh3YS0+Z2MpOwo+IC0KPiAtCQlhdG9taWM2NF9zZXQo JnBibGstPnVzZXJfd2EsIHVzZXIpOwo+IC0JCWF0b21pYzY0X3NldCgmcGJsay0+cGFkX3dhLCBw YWQpOwo+IC0JCWF0b21pYzY0X3NldCgmcGJsay0+Z2Nfd2EsIGdjKTsKPiAtCj4gLQkJcGJsay0+ dXNlcl9yc3Rfd2EgPSB1c2VyOwo+IC0JCXBibGstPnBhZF9yc3Rfd2EgPSBwYWQ7Cj4gLQkJcGJs ay0+Z2NfcnN0X3dhID0gZ2M7Cj4gLQl9Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbnQgcGJsa19saW5l X3dhc193cml0dGVuKHN0cnVjdCBwYmxrX2xpbmUgKmxpbmUsCj4gLQkJCQkgc3RydWN0IHBibGsg KnBibGspCj4gLXsKPiAtCj4gLQlzdHJ1Y3QgcGJsa19saW5lX21ldGEgKmxtID0gJnBibGstPmxt Owo+IC0Jc3RydWN0IG52bV90Z3RfZGV2ICpkZXYgPSBwYmxrLT5kZXY7Cj4gLQlzdHJ1Y3QgbnZt X2dlbyAqZ2VvID0gJmRldi0+Z2VvOwo+IC0Jc3RydWN0IG52bV9jaGtfbWV0YSAqY2h1bms7Cj4g LQlzdHJ1Y3QgcHBhX2FkZHIgYnBwYTsKPiAtCWludCBzbWV0YV9ibGs7Cj4gLQo+IC0JaWYgKGxp bmUtPnN0YXRlID09IFBCTEtfTElORVNUQVRFX0JBRCkKPiAtCQlyZXR1cm4gMDsKPiAtCj4gLQlz bWV0YV9ibGsgPSBmaW5kX2ZpcnN0X3plcm9fYml0KGxpbmUtPmJsa19iaXRtYXAsIGxtLT5ibGtf cGVyX2xpbmUpOwo+IC0JaWYgKHNtZXRhX2JsayA+PSBsbS0+YmxrX3Blcl9saW5lKQo+IC0JCXJl dHVybiAwOwo+IC0KPiAtCWJwcGEgPSBwYmxrLT5sdW5zW3NtZXRhX2Jsa10uYnBwYTsKPiAtCWNo dW5rID0gJmxpbmUtPmNoa3NbcGJsa19wcGFfdG9fcG9zKGdlbywgYnBwYSldOwo+IC0KPiAtCWlm IChjaHVuay0+c3RhdGUgJiBOVk1fQ0hLX1NUX0NMT1NFRCB8fAo+IC0JICAgIChjaHVuay0+c3Rh dGUgJiBOVk1fQ0hLX1NUX09QRU4KPiAtCSAgICAgJiYgY2h1bmstPndwID49IGxtLT5zbWV0YV9z ZWMpKQo+IC0JCXJldHVybiAxOwo+IC0KPiAtCXJldHVybiAwOwo+IC19Cj4gLQo+IC1zdGF0aWMg Ym9vbCBwYmxrX2xpbmVfaXNfb3BlbihzdHJ1Y3QgcGJsayAqcGJsaywgc3RydWN0IHBibGtfbGlu ZSAqbGluZSkKPiAtewo+IC0Jc3RydWN0IHBibGtfbGluZV9tZXRhICpsbSA9ICZwYmxrLT5sbTsK PiAtCWludCBpOwo+IC0KPiAtCWZvciAoaSA9IDA7IGkgPCBsbS0+YmxrX3Blcl9saW5lOyBpKysp Cj4gLQkJaWYgKGxpbmUtPmNoa3NbaV0uc3RhdGUgJiBOVk1fQ0hLX1NUX09QRU4pCj4gLQkJCXJl dHVybiB0cnVlOwo+IC0KPiAtCXJldHVybiBmYWxzZTsKPiAtfQo+IC0KPiAtc3RydWN0IHBibGtf bGluZSAqcGJsa19yZWNvdl9sMnAoc3RydWN0IHBibGsgKnBibGspCj4gLXsKPiAtCXN0cnVjdCBw YmxrX2xpbmVfbWV0YSAqbG0gPSAmcGJsay0+bG07Cj4gLQlzdHJ1Y3QgcGJsa19saW5lX21nbXQg KmxfbWcgPSAmcGJsay0+bF9tZzsKPiAtCXN0cnVjdCBwYmxrX2xpbmUgKmxpbmUsICp0bGluZSwg KmRhdGFfbGluZSA9IE5VTEw7Cj4gLQlzdHJ1Y3QgcGJsa19zbWV0YSAqc21ldGE7Cj4gLQlzdHJ1 Y3QgcGJsa19lbWV0YSAqZW1ldGE7Cj4gLQlzdHJ1Y3QgbGluZV9zbWV0YSAqc21ldGFfYnVmOwo+ IC0JaW50IGZvdW5kX2xpbmVzID0gMCwgcmVjb3ZlcmVkX2xpbmVzID0gMCwgb3Blbl9saW5lcyA9 IDA7Cj4gLQlpbnQgaXNfbmV4dCA9IDA7Cj4gLQlpbnQgbWV0YV9saW5lOwo+IC0JaW50IGksIHZh bGlkX3V1aWQgPSAwOwo+IC0JTElTVF9IRUFEKHJlY292X2xpc3QpOwo+IC0KPiAtCS8qIFRPRE86 IEltcGxlbWVudCBGVEwgc25hcHNob3QgKi8KPiAtCj4gLQkvKiBTY2FuIHJlY292ZXJ5IC0gdGFr ZXMgcGxhY2Ugd2hlbiBGVEwgc25hcHNob3QgZmFpbHMgKi8KPiAtCXNwaW5fbG9jaygmbF9tZy0+ ZnJlZV9sb2NrKTsKPiAtCW1ldGFfbGluZSA9IGZpbmRfZmlyc3RfemVyb19iaXQoJmxfbWctPm1l dGFfYml0bWFwLCBQQkxLX0RBVEFfTElORVMpOwo+IC0Jc2V0X2JpdChtZXRhX2xpbmUsICZsX21n LT5tZXRhX2JpdG1hcCk7Cj4gLQlzbWV0YSA9IGxfbWctPnNsaW5lX21ldGFbbWV0YV9saW5lXTsK PiAtCWVtZXRhID0gbF9tZy0+ZWxpbmVfbWV0YVttZXRhX2xpbmVdOwo+IC0Jc21ldGFfYnVmID0g KHN0cnVjdCBsaW5lX3NtZXRhICopc21ldGE7Cj4gLQlzcGluX3VubG9jaygmbF9tZy0+ZnJlZV9s b2NrKTsKPiAtCj4gLQkvKiBPcmRlciBkYXRhIGxpbmVzIHVzaW5nIHRoZWlyIHNlcXVlbmNlIG51 bWJlciAqLwo+IC0JZm9yIChpID0gMDsgaSA8IGxfbWctPm5yX2xpbmVzOyBpKyspIHsKPiAtCQl1 MzIgY3JjOwo+IC0KPiAtCQlsaW5lID0gJnBibGstPmxpbmVzW2ldOwo+IC0KPiAtCQltZW1zZXQo c21ldGEsIDAsIGxtLT5zbWV0YV9sZW4pOwo+IC0JCWxpbmUtPnNtZXRhID0gc21ldGE7Cj4gLQkJ bGluZS0+bHVuX2JpdG1hcCA9ICgodm9pZCAqKShzbWV0YV9idWYpKSArCj4gLQkJCQkJCXNpemVv ZihzdHJ1Y3QgbGluZV9zbWV0YSk7Cj4gLQo+IC0JCWlmICghcGJsa19saW5lX3dhc193cml0dGVu KGxpbmUsIHBibGspKQo+IC0JCQljb250aW51ZTsKPiAtCj4gLQkJLyogTGluZXMgdGhhdCBjYW5u b3QgYmUgcmVhZCBhcmUgYXNzdW1lZCBhcyBub3Qgd3JpdHRlbiBoZXJlICovCj4gLQkJaWYgKHBi bGtfbGluZV9zbWV0YV9yZWFkKHBibGssIGxpbmUpKQo+IC0JCQljb250aW51ZTsKPiAtCj4gLQkJ Y3JjID0gcGJsa19jYWxjX3NtZXRhX2NyYyhwYmxrLCBzbWV0YV9idWYpOwo+IC0JCWlmIChsZTMy X3RvX2NwdShzbWV0YV9idWYtPmNyYykgIT0gY3JjKQo+IC0JCQljb250aW51ZTsKPiAtCj4gLQkJ aWYgKGxlMzJfdG9fY3B1KHNtZXRhX2J1Zi0+aGVhZGVyLmlkZW50aWZpZXIpICE9IFBCTEtfTUFH SUMpCj4gLQkJCWNvbnRpbnVlOwo+IC0KPiAtCQlpZiAoc21ldGFfYnVmLT5oZWFkZXIudmVyc2lv bl9tYWpvciAhPSBTTUVUQV9WRVJTSU9OX01BSk9SKSB7Cj4gLQkJCXBibGtfZXJyKHBibGssICJm b3VuZCBpbmNvbXBhdGlibGUgbGluZSB2ZXJzaW9uICV1XG4iLAo+IC0JCQkJCXNtZXRhX2J1Zi0+ aGVhZGVyLnZlcnNpb25fbWFqb3IpOwo+IC0JCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKPiAt CQl9Cj4gLQo+IC0JCS8qIFRoZSBmaXJzdCB2YWxpZCBpbnN0YW5jZSB1dWlkIGlzIHVzZWQgZm9y IGluaXRpYWxpemF0aW9uICovCj4gLQkJaWYgKCF2YWxpZF91dWlkKSB7Cj4gLQkJCWltcG9ydF9n dWlkKCZwYmxrLT5pbnN0YW5jZV91dWlkLCBzbWV0YV9idWYtPmhlYWRlci51dWlkKTsKPiAtCQkJ dmFsaWRfdXVpZCA9IDE7Cj4gLQkJfQo+IC0KPiAtCQlpZiAoIWd1aWRfZXF1YWwoJnBibGstPmlu c3RhbmNlX3V1aWQsCj4gLQkJCQkoZ3VpZF90ICopJnNtZXRhX2J1Zi0+aGVhZGVyLnV1aWQpKSB7 Cj4gLQkJCXBibGtfZGVidWcocGJsaywgImlnbm9yZSBsaW5lICV1IGR1ZSB0byB1dWlkIG1pc21h dGNoXG4iLAo+IC0JCQkJCWkpOwo+IC0JCQljb250aW51ZTsKPiAtCQl9Cj4gLQo+IC0JCS8qIFVw ZGF0ZSBsaW5lIG1ldGFkYXRhICovCj4gLQkJc3Bpbl9sb2NrKCZsaW5lLT5sb2NrKTsKPiAtCQls aW5lLT5pZCA9IGxlMzJfdG9fY3B1KHNtZXRhX2J1Zi0+aGVhZGVyLmlkKTsKPiAtCQlsaW5lLT50 eXBlID0gbGUxNl90b19jcHUoc21ldGFfYnVmLT5oZWFkZXIudHlwZSk7Cj4gLQkJbGluZS0+c2Vx X25yID0gbGU2NF90b19jcHUoc21ldGFfYnVmLT5zZXFfbnIpOwo+IC0JCXNwaW5fdW5sb2NrKCZs aW5lLT5sb2NrKTsKPiAtCj4gLQkJLyogVXBkYXRlIGdlbmVyYWwgbWV0YWRhdGEgKi8KPiAtCQlz cGluX2xvY2soJmxfbWctPmZyZWVfbG9jayk7Cj4gLQkJaWYgKGxpbmUtPnNlcV9uciA+PSBsX21n LT5kX3NlcV9ucikKPiAtCQkJbF9tZy0+ZF9zZXFfbnIgPSBsaW5lLT5zZXFfbnIgKyAxOwo+IC0J CWxfbWctPm5yX2ZyZWVfbGluZXMtLTsKPiAtCQlzcGluX3VubG9jaygmbF9tZy0+ZnJlZV9sb2Nr KTsKPiAtCj4gLQkJaWYgKHBibGtfbGluZV9yZWNvdl9hbGxvYyhwYmxrLCBsaW5lKSkKPiAtCQkJ Z290byBvdXQ7Cj4gLQo+IC0JCXBibGtfcmVjb3ZfbGluZV9hZGRfb3JkZXJlZCgmcmVjb3ZfbGlz dCwgbGluZSk7Cj4gLQkJZm91bmRfbGluZXMrKzsKPiAtCQlwYmxrX2RlYnVnKHBibGssICJyZWNv dmVyaW5nIGRhdGEgbGluZSAlZCwgc2VxOiVsbHVcbiIsCj4gLQkJCQkJCWxpbmUtPmlkLCBzbWV0 YV9idWYtPnNlcV9ucik7Cj4gLQl9Cj4gLQo+IC0JaWYgKCFmb3VuZF9saW5lcykgewo+IC0JCWd1 aWRfZ2VuKCZwYmxrLT5pbnN0YW5jZV91dWlkKTsKPiAtCj4gLQkJc3Bpbl9sb2NrKCZsX21nLT5m cmVlX2xvY2spOwo+IC0JCVdBUk5fT05fT05DRSghdGVzdF9hbmRfY2xlYXJfYml0KG1ldGFfbGlu ZSwKPiAtCQkJCQkJCSZsX21nLT5tZXRhX2JpdG1hcCkpOwo+IC0JCXNwaW5fdW5sb2NrKCZsX21n LT5mcmVlX2xvY2spOwo+IC0KPiAtCQlnb3RvIG91dDsKPiAtCX0KPiAtCj4gLQkvKiBWZXJpZnkg Y2xvc2VkIGJsb2NrcyBhbmQgcmVjb3ZlciB0aGlzIHBvcnRpb24gb2YgTDJQIHRhYmxlKi8KPiAt CWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShsaW5lLCB0bGluZSwgJnJlY292X2xpc3QsIGxpc3Qp IHsKPiAtCQlyZWNvdmVyZWRfbGluZXMrKzsKPiAtCj4gLQkJbGluZS0+ZW1ldGFfc3NlYyA9IHBi bGtfbGluZV9lbWV0YV9zdGFydChwYmxrLCBsaW5lKTsKPiAtCQlsaW5lLT5lbWV0YSA9IGVtZXRh Owo+IC0JCW1lbXNldChsaW5lLT5lbWV0YS0+YnVmLCAwLCBsbS0+ZW1ldGFfbGVuWzBdKTsKPiAt Cj4gLQkJaWYgKHBibGtfbGluZV9pc19vcGVuKHBibGssIGxpbmUpKSB7Cj4gLQkJCXBibGtfcmVj b3ZfbDJwX2Zyb21fb29iKHBibGssIGxpbmUpOwo+IC0JCQlnb3RvIG5leHQ7Cj4gLQkJfQo+IC0K PiAtCQlpZiAocGJsa19saW5lX2VtZXRhX3JlYWQocGJsaywgbGluZSwgbGluZS0+ZW1ldGEtPmJ1 ZikpIHsKPiAtCQkJcGJsa19yZWNvdl9sMnBfZnJvbV9vb2IocGJsaywgbGluZSk7Cj4gLQkJCWdv dG8gbmV4dDsKPiAtCQl9Cj4gLQo+IC0JCWlmIChwYmxrX3JlY292X2NoZWNrX2VtZXRhKHBibGss IGxpbmUtPmVtZXRhLT5idWYpKSB7Cj4gLQkJCXBibGtfcmVjb3ZfbDJwX2Zyb21fb29iKHBibGss IGxpbmUpOwo+IC0JCQlnb3RvIG5leHQ7Cj4gLQkJfQo+IC0KPiAtCQlpZiAocGJsa19yZWNvdl9j aGVja19saW5lX3ZlcnNpb24ocGJsaywgbGluZS0+ZW1ldGEtPmJ1ZikpCj4gLQkJCXJldHVybiBF UlJfUFRSKC1FSU5WQUwpOwo+IC0KPiAtCQlwYmxrX3JlY292X3dhX2NvdW50ZXJzKHBibGssIGxp bmUtPmVtZXRhLT5idWYpOwo+IC0KPiAtCQlpZiAocGJsa19yZWNvdl9sMnBfZnJvbV9lbWV0YShw YmxrLCBsaW5lKSkKPiAtCQkJcGJsa19yZWNvdl9sMnBfZnJvbV9vb2IocGJsaywgbGluZSk7Cj4g LQo+IC1uZXh0Ogo+IC0JCWlmIChwYmxrX2xpbmVfaXNfZnVsbChsaW5lKSkgewo+IC0JCQlzdHJ1 Y3QgbGlzdF9oZWFkICptb3ZlX2xpc3Q7Cj4gLQo+IC0JCQlzcGluX2xvY2soJmxpbmUtPmxvY2sp Owo+IC0JCQlsaW5lLT5zdGF0ZSA9IFBCTEtfTElORVNUQVRFX0NMT1NFRDsKPiAtCQkJdHJhY2Vf cGJsa19saW5lX3N0YXRlKHBibGtfZGlza19uYW1lKHBibGspLCBsaW5lLT5pZCwKPiAtCQkJCQls aW5lLT5zdGF0ZSk7Cj4gLQkJCW1vdmVfbGlzdCA9IHBibGtfbGluZV9nY19saXN0KHBibGssIGxp bmUpOwo+IC0JCQlzcGluX3VubG9jaygmbGluZS0+bG9jayk7Cj4gLQo+IC0JCQlzcGluX2xvY2so JmxfbWctPmdjX2xvY2spOwo+IC0JCQlsaXN0X21vdmVfdGFpbCgmbGluZS0+bGlzdCwgbW92ZV9s aXN0KTsKPiAtCQkJc3Bpbl91bmxvY2soJmxfbWctPmdjX2xvY2spOwo+IC0KPiAtCQkJbWVtcG9v bF9mcmVlKGxpbmUtPm1hcF9iaXRtYXAsIGxfbWctPmJpdG1hcF9wb29sKTsKPiAtCQkJbGluZS0+ bWFwX2JpdG1hcCA9IE5VTEw7Cj4gLQkJCWxpbmUtPnNtZXRhID0gTlVMTDsKPiAtCQkJbGluZS0+ ZW1ldGEgPSBOVUxMOwo+IC0JCX0gZWxzZSB7Cj4gLQkJCXNwaW5fbG9jaygmbGluZS0+bG9jayk7 Cj4gLQkJCWxpbmUtPnN0YXRlID0gUEJMS19MSU5FU1RBVEVfT1BFTjsKPiAtCQkJc3Bpbl91bmxv Y2soJmxpbmUtPmxvY2spOwo+IC0KPiAtCQkJbGluZS0+ZW1ldGEtPm1lbSA9IDA7Cj4gLQkJCWF0 b21pY19zZXQoJmxpbmUtPmVtZXRhLT5zeW5jLCAwKTsKPiAtCj4gLQkJCXRyYWNlX3BibGtfbGlu ZV9zdGF0ZShwYmxrX2Rpc2tfbmFtZShwYmxrKSwgbGluZS0+aWQsCj4gLQkJCQkJbGluZS0+c3Rh dGUpOwo+IC0KPiAtCQkJZGF0YV9saW5lID0gbGluZTsKPiAtCQkJbGluZS0+bWV0YV9saW5lID0g bWV0YV9saW5lOwo+IC0KPiAtCQkJb3Blbl9saW5lcysrOwo+IC0JCX0KPiAtCX0KPiAtCj4gLQlp ZiAoIW9wZW5fbGluZXMpIHsKPiAtCQlzcGluX2xvY2soJmxfbWctPmZyZWVfbG9jayk7Cj4gLQkJ V0FSTl9PTl9PTkNFKCF0ZXN0X2FuZF9jbGVhcl9iaXQobWV0YV9saW5lLAo+IC0JCQkJCQkJJmxf bWctPm1ldGFfYml0bWFwKSk7Cj4gLQkJc3Bpbl91bmxvY2soJmxfbWctPmZyZWVfbG9jayk7Cj4g LQl9IGVsc2Ugewo+IC0JCXNwaW5fbG9jaygmbF9tZy0+ZnJlZV9sb2NrKTsKPiAtCQlsX21nLT5k YXRhX2xpbmUgPSBkYXRhX2xpbmU7Cj4gLQkJLyogQWxsb2NhdGUgbmV4dCBsaW5lIGZvciBwcmVw YXJhdGlvbiAqLwo+IC0JCWxfbWctPmRhdGFfbmV4dCA9IHBibGtfbGluZV9nZXQocGJsayk7Cj4g LQkJaWYgKGxfbWctPmRhdGFfbmV4dCkgewo+IC0JCQlsX21nLT5kYXRhX25leHQtPnNlcV9uciA9 IGxfbWctPmRfc2VxX25yKys7Cj4gLQkJCWxfbWctPmRhdGFfbmV4dC0+dHlwZSA9IFBCTEtfTElO RVRZUEVfREFUQTsKPiAtCQkJaXNfbmV4dCA9IDE7Cj4gLQkJfQo+IC0JCXNwaW5fdW5sb2NrKCZs X21nLT5mcmVlX2xvY2spOwo+IC0JfQo+IC0KPiAtCWlmIChpc19uZXh0KQo+IC0JCXBibGtfbGlu ZV9lcmFzZShwYmxrLCBsX21nLT5kYXRhX25leHQpOwo+IC0KPiAtb3V0Ogo+IC0JaWYgKGZvdW5k X2xpbmVzICE9IHJlY292ZXJlZF9saW5lcykKPiAtCQlwYmxrX2VycihwYmxrLCAiZmFpbGVkIHRv IHJlY292ZXIgYWxsIGZvdW5kIGxpbmVzICVkLyVkXG4iLAo+IC0JCQkJCQlmb3VuZF9saW5lcywg cmVjb3ZlcmVkX2xpbmVzKTsKPiAtCj4gLQlyZXR1cm4gZGF0YV9saW5lOwo+IC19Cj4gLQo+IC0v Kgo+IC0gKiBQYWQgY3VycmVudCBsaW5lCj4gLSAqLwo+IC1pbnQgcGJsa19yZWNvdl9wYWQoc3Ry dWN0IHBibGsgKnBibGspCj4gLXsKPiAtCXN0cnVjdCBwYmxrX2xpbmUgKmxpbmU7Cj4gLQlzdHJ1 Y3QgcGJsa19saW5lX21nbXQgKmxfbWcgPSAmcGJsay0+bF9tZzsKPiAtCWludCBsZWZ0X21zZWNz Owo+IC0JaW50IHJldCA9IDA7Cj4gLQo+IC0Jc3Bpbl9sb2NrKCZsX21nLT5mcmVlX2xvY2spOwo+ IC0JbGluZSA9IGxfbWctPmRhdGFfbGluZTsKPiAtCWxlZnRfbXNlY3MgPSBsaW5lLT5sZWZ0X21z ZWNzOwo+IC0Jc3Bpbl91bmxvY2soJmxfbWctPmZyZWVfbG9jayk7Cj4gLQo+IC0JcmV0ID0gcGJs a19yZWNvdl9wYWRfbGluZShwYmxrLCBsaW5lLCBsZWZ0X21zZWNzKTsKPiAtCWlmIChyZXQpIHsK PiAtCQlwYmxrX2VycihwYmxrLCAidGVhciBkb3duIHBhZGRpbmcgZmFpbGVkICglZClcbiIsIHJl dCk7Cj4gLQkJcmV0dXJuIHJldDsKPiAtCX0KPiAtCj4gLQlwYmxrX2xpbmVfY2xvc2VfbWV0YShw YmxrLCBsaW5lKTsKPiAtCXJldHVybiByZXQ7Cj4gLX0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9s aWdodG52bS9wYmxrLXJsLmMgYi9kcml2ZXJzL2xpZ2h0bnZtL3BibGstcmwuYwo+IGRlbGV0ZWQg ZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IGE1ZjhiYzJkZWZiYy4uMDAwMDAwMDAwMDAwCj4gLS0t IGEvZHJpdmVycy9saWdodG52bS9wYmxrLXJsLmMKPiArKysgL2Rldi9udWxsCj4gQEAgLTEsMjU0 ICswLDAgQEAKPiAtLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKPiAtLyoKPiAt ICogQ29weXJpZ2h0IChDKSAyMDE2IENORVggTGFicwo+IC0gKiBJbml0aWFsIHJlbGVhc2U6IEph dmllciBHb256YWxleiA8amF2aWVyQGNuZXhsYWJzLmNvbT4KPiAtICogICAgICAgICAgICAgICAg ICBNYXRpYXMgQmpvcmxpbmcgPG1hdGlhc0BjbmV4bGFicy5jb20+Cj4gLSAqCj4gLSAqIFRoaXMg cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK PiAtICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgdmVyc2lvbgo+IC0gKiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLgo+IC0gKgo+IC0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Cj4gLSAqIFdJVEhPVVQgQU5ZIFdB UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPiAtICogTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH TlUKPiAtICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+IC0gKgo+ IC0gKiBwYmxrLXJsLmMgLSBwYmxrJ3MgcmF0ZSBsaW1pdGVyIGZvciB1c2VyIEkvTwo+IC0gKgo+ IC0gKi8KPiAtCj4gLSNpbmNsdWRlICJwYmxrLmgiCj4gLQo+IC1zdGF0aWMgdm9pZCBwYmxrX3Js X2tpY2tfdV90aW1lcihzdHJ1Y3QgcGJsa19ybCAqcmwpCj4gLXsKPiAtCW1vZF90aW1lcigmcmwt PnVfdGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDUwMDApKTsKPiAtfQo+IC0KPiAt aW50IHBibGtfcmxfaXNfbGltaXQoc3RydWN0IHBibGtfcmwgKnJsKQo+IC17Cj4gLQlpbnQgcmJf c3BhY2U7Cj4gLQo+IC0JcmJfc3BhY2UgPSBhdG9taWNfcmVhZCgmcmwtPnJiX3NwYWNlKTsKPiAt Cj4gLQlyZXR1cm4gKHJiX3NwYWNlID09IDApOwo+IC19Cj4gLQo+IC1pbnQgcGJsa19ybF91c2Vy X21heV9pbnNlcnQoc3RydWN0IHBibGtfcmwgKnJsLCBpbnQgbnJfZW50cmllcykKPiAtewo+IC0J aW50IHJiX3VzZXJfY250ID0gYXRvbWljX3JlYWQoJnJsLT5yYl91c2VyX2NudCk7Cj4gLQlpbnQg cmJfc3BhY2UgPSBhdG9taWNfcmVhZCgmcmwtPnJiX3NwYWNlKTsKPiAtCj4gLQlpZiAodW5saWtl bHkocmJfc3BhY2UgPj0gMCkgJiYgKHJiX3NwYWNlIC0gbnJfZW50cmllcyA8IDApKQo+IC0JCXJl dHVybiBOVk1fSU9fRVJSOwo+IC0KPiAtCWlmIChyYl91c2VyX2NudCA+PSBybC0+cmJfdXNlcl9t YXgpCj4gLQkJcmV0dXJuIE5WTV9JT19SRVFVRVVFOwo+IC0KPiAtCXJldHVybiBOVk1fSU9fT0s7 Cj4gLX0KPiAtCj4gLXZvaWQgcGJsa19ybF9pbnNlcnRlZChzdHJ1Y3QgcGJsa19ybCAqcmwsIGlu dCBucl9lbnRyaWVzKQo+IC17Cj4gLQlpbnQgcmJfc3BhY2UgPSBhdG9taWNfcmVhZCgmcmwtPnJi X3NwYWNlKTsKPiAtCj4gLQlpZiAodW5saWtlbHkocmJfc3BhY2UgPj0gMCkpCj4gLQkJYXRvbWlj X3N1Yihucl9lbnRyaWVzLCAmcmwtPnJiX3NwYWNlKTsKPiAtfQo+IC0KPiAtaW50IHBibGtfcmxf Z2NfbWF5X2luc2VydChzdHJ1Y3QgcGJsa19ybCAqcmwsIGludCBucl9lbnRyaWVzKQo+IC17Cj4g LQlpbnQgcmJfZ2NfY250ID0gYXRvbWljX3JlYWQoJnJsLT5yYl9nY19jbnQpOwo+IC0JaW50IHJi X3VzZXJfYWN0aXZlOwo+IC0KPiAtCS8qIElmIHRoZXJlIGlzIG5vIHVzZXIgSS9PIGxldCBHQyB0 YWtlIG92ZXIgc3BhY2Ugb24gdGhlIHdyaXRlIGJ1ZmZlciAqLwo+IC0JcmJfdXNlcl9hY3RpdmUg PSBSRUFEX09OQ0UocmwtPnJiX3VzZXJfYWN0aXZlKTsKPiAtCXJldHVybiAoIShyYl9nY19jbnQg Pj0gcmwtPnJiX2djX21heCAmJiByYl91c2VyX2FjdGl2ZSkpOwo+IC19Cj4gLQo+IC12b2lkIHBi bGtfcmxfdXNlcl9pbihzdHJ1Y3QgcGJsa19ybCAqcmwsIGludCBucl9lbnRyaWVzKQo+IC17Cj4g LQlhdG9taWNfYWRkKG5yX2VudHJpZXMsICZybC0+cmJfdXNlcl9jbnQpOwo+IC0KPiAtCS8qIFJl bGVhc2UgdXNlciBJL08gc3RhdGUuIFByb3RlY3QgZnJvbSBHQyAqLwo+IC0Jc21wX3N0b3JlX3Jl bGVhc2UoJnJsLT5yYl91c2VyX2FjdGl2ZSwgMSk7Cj4gLQlwYmxrX3JsX2tpY2tfdV90aW1lcihy bCk7Cj4gLX0KPiAtCj4gLXZvaWQgcGJsa19ybF93ZXJyX2xpbmVfaW4oc3RydWN0IHBibGtfcmwg KnJsKQo+IC17Cj4gLQlhdG9taWNfaW5jKCZybC0+d2Vycl9saW5lcyk7Cj4gLX0KPiAtCj4gLXZv aWQgcGJsa19ybF93ZXJyX2xpbmVfb3V0KHN0cnVjdCBwYmxrX3JsICpybCkKPiAtewo+IC0JYXRv bWljX2RlYygmcmwtPndlcnJfbGluZXMpOwo+IC19Cj4gLQo+IC12b2lkIHBibGtfcmxfZ2NfaW4o c3RydWN0IHBibGtfcmwgKnJsLCBpbnQgbnJfZW50cmllcykKPiAtewo+IC0JYXRvbWljX2FkZChu cl9lbnRyaWVzLCAmcmwtPnJiX2djX2NudCk7Cj4gLX0KPiAtCj4gLXZvaWQgcGJsa19ybF9vdXQo c3RydWN0IHBibGtfcmwgKnJsLCBpbnQgbnJfdXNlciwgaW50IG5yX2djKQo+IC17Cj4gLQlhdG9t aWNfc3ViKG5yX3VzZXIsICZybC0+cmJfdXNlcl9jbnQpOwo+IC0JYXRvbWljX3N1Yihucl9nYywg JnJsLT5yYl9nY19jbnQpOwo+IC19Cj4gLQo+IC11bnNpZ25lZCBsb25nIHBibGtfcmxfbnJfZnJl ZV9ibGtzKHN0cnVjdCBwYmxrX3JsICpybCkKPiAtewo+IC0JcmV0dXJuIGF0b21pY19yZWFkKCZy bC0+ZnJlZV9ibG9ja3MpOwo+IC19Cj4gLQo+IC11bnNpZ25lZCBsb25nIHBibGtfcmxfbnJfdXNl cl9mcmVlX2Jsa3Moc3RydWN0IHBibGtfcmwgKnJsKQo+IC17Cj4gLQlyZXR1cm4gYXRvbWljX3Jl YWQoJnJsLT5mcmVlX3VzZXJfYmxvY2tzKTsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgX19wYmxr X3JsX3VwZGF0ZV9yYXRlcyhzdHJ1Y3QgcGJsa19ybCAqcmwsCj4gLQkJCQkgICB1bnNpZ25lZCBs b25nIGZyZWVfYmxvY2tzKQo+IC17Cj4gLQlzdHJ1Y3QgcGJsayAqcGJsayA9IGNvbnRhaW5lcl9v ZihybCwgc3RydWN0IHBibGssIHJsKTsKPiAtCWludCBtYXggPSBybC0+cmJfYnVkZ2V0Owo+IC0J aW50IHdlcnJfZ2NfbmVlZGVkID0gYXRvbWljX3JlYWQoJnJsLT53ZXJyX2xpbmVzKTsKPiAtCj4g LQlpZiAoZnJlZV9ibG9ja3MgPj0gcmwtPmhpZ2gpIHsKPiAtCQlpZiAod2Vycl9nY19uZWVkZWQp IHsKPiAtCQkJLyogQWxsb2NhdGUgYSBzbWFsbCBidWRnZXQgZm9yIHJlY292ZXJpbmcKPiAtCQkJ ICogbGluZXMgd2l0aCB3cml0ZSBlcnJvcnMKPiAtCQkJICovCj4gLQkJCXJsLT5yYl9nY19tYXgg PSAxIDw8IHJsLT5yYl93aW5kb3dzX3B3Owo+IC0JCQlybC0+cmJfdXNlcl9tYXggPSBtYXggLSBy bC0+cmJfZ2NfbWF4Owo+IC0JCQlybC0+cmJfc3RhdGUgPSBQQkxLX1JMX1dFUlI7Cj4gLQkJfSBl bHNlIHsKPiAtCQkJcmwtPnJiX3VzZXJfbWF4ID0gbWF4Owo+IC0JCQlybC0+cmJfZ2NfbWF4ID0g MDsKPiAtCQkJcmwtPnJiX3N0YXRlID0gUEJMS19STF9PRkY7Cj4gLQkJfQo+IC0JfSBlbHNlIGlm IChmcmVlX2Jsb2NrcyA8IHJsLT5oaWdoKSB7Cj4gLQkJaW50IHNoaWZ0ID0gcmwtPmhpZ2hfcHcg LSBybC0+cmJfd2luZG93c19wdzsKPiAtCQlpbnQgdXNlcl93aW5kb3dzID0gZnJlZV9ibG9ja3Mg Pj4gc2hpZnQ7Cj4gLQkJaW50IHVzZXJfbWF4ID0gdXNlcl93aW5kb3dzIDw8IGlsb2cyKE5WTV9N QVhfVkxCQSk7Cj4gLQo+IC0JCXJsLT5yYl91c2VyX21heCA9IHVzZXJfbWF4Owo+IC0JCXJsLT5y Yl9nY19tYXggPSBtYXggLSB1c2VyX21heDsKPiAtCj4gLQkJaWYgKGZyZWVfYmxvY2tzIDw9IHJs LT5yc3ZfYmxvY2tzKSB7Cj4gLQkJCXJsLT5yYl91c2VyX21heCA9IDA7Cj4gLQkJCXJsLT5yYl9n Y19tYXggPSBtYXg7Cj4gLQkJfQo+IC0KPiAtCQkvKiBJbiB0aGUgd29yc3QgY2FzZSwgd2Ugd2ls bCBuZWVkIHRvIEdDIGxpbmVzIGluIHRoZSBsb3cgbGlzdAo+IC0JCSAqIChoaWdoIHZhbGlkIHNl Y3RvciBjb3VudCkuIElmIHRoZXJlIGFyZSBsaW5lcyB0byBHQyBvbiBoaWdoCj4gLQkJICogb3Ig bWlkIGxpc3RzLCB0aGVzZSB3aWxsIGJlIHByaW9yaXRpemVkCj4gLQkJICovCj4gLQkJcmwtPnJi X3N0YXRlID0gUEJMS19STF9MT1c7Cj4gLQl9Cj4gLQo+IC0JaWYgKHJsLT5yYl9zdGF0ZSAhPSBQ QkxLX1JMX09GRikKPiAtCQlwYmxrX2djX3Nob3VsZF9zdGFydChwYmxrKTsKPiAtCWVsc2UKPiAt CQlwYmxrX2djX3Nob3VsZF9zdG9wKHBibGspOwo+IC19Cj4gLQo+IC12b2lkIHBibGtfcmxfdXBk YXRlX3JhdGVzKHN0cnVjdCBwYmxrX3JsICpybCkKPiAtewo+IC0JX19wYmxrX3JsX3VwZGF0ZV9y YXRlcyhybCwgcGJsa19ybF9ucl91c2VyX2ZyZWVfYmxrcyhybCkpOwo+IC19Cj4gLQo+IC12b2lk IHBibGtfcmxfZnJlZV9saW5lc19pbmMoc3RydWN0IHBibGtfcmwgKnJsLCBzdHJ1Y3QgcGJsa19s aW5lICpsaW5lKQo+IC17Cj4gLQlpbnQgYmxrX2luX2xpbmUgPSBhdG9taWNfcmVhZCgmbGluZS0+ YmxrX2luX2xpbmUpOwo+IC0JaW50IGZyZWVfYmxvY2tzOwo+IC0KPiAtCWF0b21pY19hZGQoYmxr X2luX2xpbmUsICZybC0+ZnJlZV9ibG9ja3MpOwo+IC0JZnJlZV9ibG9ja3MgPSBhdG9taWNfYWRk X3JldHVybihibGtfaW5fbGluZSwgJnJsLT5mcmVlX3VzZXJfYmxvY2tzKTsKPiAtCj4gLQlfX3Bi bGtfcmxfdXBkYXRlX3JhdGVzKHJsLCBmcmVlX2Jsb2Nrcyk7Cj4gLX0KPiAtCj4gLXZvaWQgcGJs a19ybF9mcmVlX2xpbmVzX2RlYyhzdHJ1Y3QgcGJsa19ybCAqcmwsIHN0cnVjdCBwYmxrX2xpbmUg KmxpbmUsCj4gLQkJCSAgICBib29sIHVzZWQpCj4gLXsKPiAtCWludCBibGtfaW5fbGluZSA9IGF0 b21pY19yZWFkKCZsaW5lLT5ibGtfaW5fbGluZSk7Cj4gLQlpbnQgZnJlZV9ibG9ja3M7Cj4gLQo+ IC0JYXRvbWljX3N1YihibGtfaW5fbGluZSwgJnJsLT5mcmVlX2Jsb2Nrcyk7Cj4gLQo+IC0JaWYg KHVzZWQpCj4gLQkJZnJlZV9ibG9ja3MgPSBhdG9taWNfc3ViX3JldHVybihibGtfaW5fbGluZSwK PiAtCQkJCQkJCSZybC0+ZnJlZV91c2VyX2Jsb2Nrcyk7Cj4gLQllbHNlCj4gLQkJZnJlZV9ibG9j a3MgPSBhdG9taWNfcmVhZCgmcmwtPmZyZWVfdXNlcl9ibG9ja3MpOwo+IC0KPiAtCV9fcGJsa19y bF91cGRhdGVfcmF0ZXMocmwsIGZyZWVfYmxvY2tzKTsKPiAtfQo+IC0KPiAtaW50IHBibGtfcmxf aGlnaF90aHJzKHN0cnVjdCBwYmxrX3JsICpybCkKPiAtewo+IC0JcmV0dXJuIHJsLT5oaWdoOwo+ IC19Cj4gLQo+IC1pbnQgcGJsa19ybF9tYXhfaW8oc3RydWN0IHBibGtfcmwgKnJsKQo+IC17Cj4g LQlyZXR1cm4gcmwtPnJiX21heF9pbzsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgcGJsa19ybF91 X3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KQo+IC17Cj4gLQlzdHJ1Y3QgcGJsa19ybCAqcmwg PSBmcm9tX3RpbWVyKHJsLCB0LCB1X3RpbWVyKTsKPiAtCj4gLQkvKiBSZWxlYXNlIHVzZXIgSS9P IHN0YXRlLiBQcm90ZWN0IGZyb20gR0MgKi8KPiAtCXNtcF9zdG9yZV9yZWxlYXNlKCZybC0+cmJf dXNlcl9hY3RpdmUsIDApOwo+IC19Cj4gLQo+IC12b2lkIHBibGtfcmxfZnJlZShzdHJ1Y3QgcGJs a19ybCAqcmwpCj4gLXsKPiAtCWRlbF90aW1lcigmcmwtPnVfdGltZXIpOwo+IC19Cj4gLQo+IC12 b2lkIHBibGtfcmxfaW5pdChzdHJ1Y3QgcGJsa19ybCAqcmwsIGludCBidWRnZXQsIGludCB0aHJl c2hvbGQpCj4gLXsKPiAtCXN0cnVjdCBwYmxrICpwYmxrID0gY29udGFpbmVyX29mKHJsLCBzdHJ1 Y3QgcGJsaywgcmwpOwo+IC0Jc3RydWN0IG52bV90Z3RfZGV2ICpkZXYgPSBwYmxrLT5kZXY7Cj4g LQlzdHJ1Y3QgbnZtX2dlbyAqZ2VvID0gJmRldi0+Z2VvOwo+IC0Jc3RydWN0IHBibGtfbGluZV9t Z210ICpsX21nID0gJnBibGstPmxfbWc7Cj4gLQlzdHJ1Y3QgcGJsa19saW5lX21ldGEgKmxtID0g JnBibGstPmxtOwo+IC0JaW50IHNlY19tZXRhLCBibGtfbWV0YTsKPiAtCXVuc2lnbmVkIGludCBy Yl93aW5kb3dzOwo+IC0KPiAtCS8qIENvbnNpZGVyIHNlY3RvcnMgdXNlZCBmb3IgbWV0YWRhdGEg Ki8KPiAtCXNlY19tZXRhID0gKGxtLT5zbWV0YV9zZWMgKyBsbS0+ZW1ldGFfc2VjWzBdKSAqIGxf bWctPm5yX2ZyZWVfbGluZXM7Cj4gLQlibGtfbWV0YSA9IERJVl9ST1VORF9VUChzZWNfbWV0YSwg Z2VvLT5jbGJhKTsKPiAtCj4gLQlybC0+aGlnaCA9IHBibGstPm9wX2Jsa3MgLSBibGtfbWV0YSAt IGxtLT5ibGtfcGVyX2xpbmU7Cj4gLQlybC0+aGlnaF9wdyA9IGdldF9jb3VudF9vcmRlcihybC0+ aGlnaCk7Cj4gLQo+IC0JcmwtPnJzdl9ibG9ja3MgPSBwYmxrX2dldF9taW5fY2hrcyhwYmxrKTsK PiAtCj4gLQkvKiBUaGlzIHdpbGwgYWx3YXlzIGJlIGEgcG93ZXItb2YtMiAqLwo+IC0JcmJfd2lu ZG93cyA9IGJ1ZGdldCAvIE5WTV9NQVhfVkxCQTsKPiAtCXJsLT5yYl93aW5kb3dzX3B3ID0gZ2V0 X2NvdW50X29yZGVyKHJiX3dpbmRvd3MpOwo+IC0KPiAtCS8qIFRvIHN0YXJ0IHdpdGgsIGFsbCBi dWZmZXIgaXMgYXZhaWxhYmxlIHRvIHVzZXIgSS9PIHdyaXRlcnMgKi8KPiAtCXJsLT5yYl9idWRn ZXQgPSBidWRnZXQ7Cj4gLQlybC0+cmJfdXNlcl9tYXggPSBidWRnZXQ7Cj4gLQlybC0+cmJfZ2Nf bWF4ID0gMDsKPiAtCXJsLT5yYl9zdGF0ZSA9IFBCTEtfUkxfSElHSDsKPiAtCj4gLQkvKiBNYXhp bWl6ZSBJL08gc2l6ZSBhbmQgYW5zdXJlIHRoYXQgYmFjayB0aHJlc2hvbGQgaXMgcmVzcGVjdGVk ICovCj4gLQlpZiAodGhyZXNob2xkKQo+IC0JCXJsLT5yYl9tYXhfaW8gPSBidWRnZXQgLSBwYmxr LT5taW5fd3JpdGVfcGdzX2RhdGEgLSB0aHJlc2hvbGQ7Cj4gLQllbHNlCj4gLQkJcmwtPnJiX21h eF9pbyA9IGJ1ZGdldCAtIHBibGstPm1pbl93cml0ZV9wZ3NfZGF0YSAtIDE7Cj4gLQo+IC0JYXRv bWljX3NldCgmcmwtPnJiX3VzZXJfY250LCAwKTsKPiAtCWF0b21pY19zZXQoJnJsLT5yYl9nY19j bnQsIDApOwo+IC0JYXRvbWljX3NldCgmcmwtPnJiX3NwYWNlLCAtMSk7Cj4gLQlhdG9taWNfc2V0 KCZybC0+d2Vycl9saW5lcywgMCk7Cj4gLQo+IC0JdGltZXJfc2V0dXAoJnJsLT51X3RpbWVyLCBw YmxrX3JsX3VfdGltZXIsIDApOwo+IC0KPiAtCXJsLT5yYl91c2VyX2FjdGl2ZSA9IDA7Cj4gLQly bC0+cmJfZ2NfYWN0aXZlID0gMDsKPiAtfQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2xpZ2h0bnZt L3BibGstc3lzZnMuYyBiL2RyaXZlcnMvbGlnaHRudm0vcGJsay1zeXNmcy5jCj4gZGVsZXRlZCBm aWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggNjM4NzMwMmIwM2YyLi4wMDAwMDAwMDAwMDAKPiAtLS0g YS9kcml2ZXJzL2xpZ2h0bnZtL3BibGstc3lzZnMuYwo+ICsrKyAvZGV2L251bGwKPiBAQCAtMSw3 MjggKzAsMCBAQAo+IC0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAo+IC0vKgo+ IC0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQ05FWCBMYWJzCj4gLSAqIEluaXRpYWwgcmVsZWFzZTog SmF2aWVyIEdvbnphbGV6IDxqYXZpZXJAY25leGxhYnMuY29tPgo+IC0gKiAgICAgICAgICAgICAg ICAgIE1hdGlhcyBCam9ybGluZyA8bWF0aWFzQGNuZXhsYWJzLmNvbT4KPiAtICoKPiAtICogVGhp cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v cgo+IC0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSB2ZXJzaW9uCj4gLSAqIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb24uCj4gLSAqCj4gLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBp biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKPiAtICogV0lUSE9VVCBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+IC0gKiBNRVJD SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl IEdOVQo+IC0gKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCj4gLSAq Cj4gLSAqIEltcGxlbWVudGF0aW9uIG9mIGEgcGh5c2ljYWwgYmxvY2stZGV2aWNlIHRhcmdldCBm b3IgT3Blbi1jaGFubmVsIFNTRHMuCj4gLSAqCj4gLSAqIHBibGstc3lzZnMuYyAtIHBibGsncyBz eXNmcwo+IC0gKgo+IC0gKi8KPiAtCj4gLSNpbmNsdWRlICJwYmxrLmgiCj4gLQo+IC1zdGF0aWMg c3NpemVfdCBwYmxrX3N5c2ZzX2x1bnNfc2hvdyhzdHJ1Y3QgcGJsayAqcGJsaywgY2hhciAqcGFn ZSkKPiAtewo+IC0Jc3RydWN0IG52bV90Z3RfZGV2ICpkZXYgPSBwYmxrLT5kZXY7Cj4gLQlzdHJ1 Y3QgbnZtX2dlbyAqZ2VvID0gJmRldi0+Z2VvOwo+IC0Jc3RydWN0IHBibGtfbHVuICpybHVuOwo+ IC0Jc3NpemVfdCBzeiA9IDA7Cj4gLQlpbnQgaTsKPiAtCj4gLQlmb3IgKGkgPSAwOyBpIDwgZ2Vv LT5hbGxfbHVuczsgaSsrKSB7Cj4gLQkJaW50IGFjdGl2ZSA9IDE7Cj4gLQo+IC0JCXJsdW4gPSAm cGJsay0+bHVuc1tpXTsKPiAtCQlpZiAoIWRvd25fdHJ5bG9jaygmcmx1bi0+d3Jfc2VtKSkgewo+ IC0JCQlhY3RpdmUgPSAwOwo+IC0JCQl1cCgmcmx1bi0+d3Jfc2VtKTsKPiAtCQl9Cj4gLQkJc3og Kz0gc2NucHJpbnRmKHBhZ2UgKyBzeiwgUEFHRV9TSVpFIC0gc3osCj4gLQkJCQkicGJsazogcG9z OiVkLCBjaDolZCwgbHVuOiVkIC0gJWRcbiIsCj4gLQkJCQkJaSwKPiAtCQkJCQlybHVuLT5icHBh LmEuY2gsCj4gLQkJCQkJcmx1bi0+YnBwYS5hLmx1biwKPiAtCQkJCQlhY3RpdmUpOwo+IC0JfQo+ IC0KPiAtCXJldHVybiBzejsKPiAtfQo+IC0KPiAtc3RhdGljIHNzaXplX3QgcGJsa19zeXNmc19y YXRlX2xpbWl0ZXIoc3RydWN0IHBibGsgKnBibGssIGNoYXIgKnBhZ2UpCj4gLXsKPiAtCWludCBm cmVlX2Jsb2NrcywgZnJlZV91c2VyX2Jsb2NrcywgdG90YWxfYmxvY2tzOwo+IC0JaW50IHJiX3Vz ZXJfbWF4LCByYl91c2VyX2NudDsKPiAtCWludCByYl9nY19tYXgsIHJiX2djX2NudCwgcmJfYnVk Z2V0LCByYl9zdGF0ZTsKPiAtCj4gLQlmcmVlX2Jsb2NrcyA9IHBibGtfcmxfbnJfZnJlZV9ibGtz KCZwYmxrLT5ybCk7Cj4gLQlmcmVlX3VzZXJfYmxvY2tzID0gcGJsa19ybF9ucl91c2VyX2ZyZWVf YmxrcygmcGJsay0+cmwpOwo+IC0JcmJfdXNlcl9tYXggPSBwYmxrLT5ybC5yYl91c2VyX21heDsK PiAtCXJiX3VzZXJfY250ID0gYXRvbWljX3JlYWQoJnBibGstPnJsLnJiX3VzZXJfY250KTsKPiAt CXJiX2djX21heCA9IHBibGstPnJsLnJiX2djX21heDsKPiAtCXJiX2djX2NudCA9IGF0b21pY19y ZWFkKCZwYmxrLT5ybC5yYl9nY19jbnQpOwo+IC0JcmJfYnVkZ2V0ID0gcGJsay0+cmwucmJfYnVk Z2V0Owo+IC0JcmJfc3RhdGUgPSBwYmxrLT5ybC5yYl9zdGF0ZTsKPiAtCj4gLQl0b3RhbF9ibG9j a3MgPSBwYmxrLT5ybC50b3RhbF9ibG9ja3M7Cj4gLQo+IC0JcmV0dXJuIHNucHJpbnRmKHBhZ2Us IFBBR0VfU0laRSwKPiAtCQkidToldS8ldSxnYzoldS8ldSgldSkoc3RvcDo8JXUsZnVsbDo+JXUs ZnJlZTolZC8lZC8lZCktJWRcbiIsCj4gLQkJCQlyYl91c2VyX2NudCwKPiAtCQkJCXJiX3VzZXJf bWF4LAo+IC0JCQkJcmJfZ2NfY250LAo+IC0JCQkJcmJfZ2NfbWF4LAo+IC0JCQkJcmJfc3RhdGUs Cj4gLQkJCQlyYl9idWRnZXQsCj4gLQkJCQlwYmxrLT5ybC5oaWdoLAo+IC0JCQkJZnJlZV9ibG9j a3MsCj4gLQkJCQlmcmVlX3VzZXJfYmxvY2tzLAo+IC0JCQkJdG90YWxfYmxvY2tzLAo+IC0JCQkJ UkVBRF9PTkNFKHBibGstPnJsLnJiX3VzZXJfYWN0aXZlKSk7Cj4gLX0KPiAtCj4gLXN0YXRpYyBz c2l6ZV90IHBibGtfc3lzZnNfZ2Nfc3RhdGVfc2hvdyhzdHJ1Y3QgcGJsayAqcGJsaywgY2hhciAq cGFnZSkKPiAtewo+IC0JaW50IGdjX2VuYWJsZWQsIGdjX2FjdGl2ZTsKPiAtCj4gLQlwYmxrX2dj X3N5c2ZzX3N0YXRlX3Nob3cocGJsaywgJmdjX2VuYWJsZWQsICZnY19hY3RpdmUpOwo+IC0JcmV0 dXJuIHNucHJpbnRmKHBhZ2UsIFBBR0VfU0laRSwgImdjX2VuYWJsZWQ9JWQsIGdjX2FjdGl2ZT0l ZFxuIiwKPiAtCQkJCQlnY19lbmFibGVkLCBnY19hY3RpdmUpOwo+IC19Cj4gLQo+IC1zdGF0aWMg c3NpemVfdCBwYmxrX3N5c2ZzX3N0YXRzKHN0cnVjdCBwYmxrICpwYmxrLCBjaGFyICpwYWdlKQo+ IC17Cj4gLQlzc2l6ZV90IHN6Owo+IC0KPiAtCXN6ID0gc25wcmludGYocGFnZSwgUEFHRV9TSVpF LAo+IC0JCQkicmVhZF9mYWlsZWQ9JWx1LCByZWFkX2hpZ2hfZWNjPSVsdSwgcmVhZF9lbXB0eT0l bHUsIHJlYWRfZmFpbGVkX2djPSVsdSwgd3JpdGVfZmFpbGVkPSVsdSwgZXJhc2VfZmFpbGVkPSVs dVxuIiwKPiAtCQkJYXRvbWljX2xvbmdfcmVhZCgmcGJsay0+cmVhZF9mYWlsZWQpLAo+IC0JCQlh dG9taWNfbG9uZ19yZWFkKCZwYmxrLT5yZWFkX2hpZ2hfZWNjKSwKPiAtCQkJYXRvbWljX2xvbmdf cmVhZCgmcGJsay0+cmVhZF9lbXB0eSksCj4gLQkJCWF0b21pY19sb25nX3JlYWQoJnBibGstPnJl YWRfZmFpbGVkX2djKSwKPiAtCQkJYXRvbWljX2xvbmdfcmVhZCgmcGJsay0+d3JpdGVfZmFpbGVk KSwKPiAtCQkJYXRvbWljX2xvbmdfcmVhZCgmcGJsay0+ZXJhc2VfZmFpbGVkKSk7Cj4gLQo+IC0J cmV0dXJuIHN6Owo+IC19Cj4gLQo+IC1zdGF0aWMgc3NpemVfdCBwYmxrX3N5c2ZzX3dyaXRlX2J1 ZmZlcihzdHJ1Y3QgcGJsayAqcGJsaywgY2hhciAqcGFnZSkKPiAtewo+IC0JcmV0dXJuIHBibGtf cmJfc3lzZnMoJnBibGstPnJ3YiwgcGFnZSk7Cj4gLX0KPiAtCj4gLXN0YXRpYyBzc2l6ZV90IHBi bGtfc3lzZnNfcHBhZihzdHJ1Y3QgcGJsayAqcGJsaywgY2hhciAqcGFnZSkKPiAtewo+IC0Jc3Ry dWN0IG52bV90Z3RfZGV2ICpkZXYgPSBwYmxrLT5kZXY7Cj4gLQlzdHJ1Y3QgbnZtX2dlbyAqZ2Vv ID0gJmRldi0+Z2VvOwo+IC0Jc3NpemVfdCBzeiA9IDA7Cj4gLQo+IC0JaWYgKGdlby0+dmVyc2lv biA9PSBOVk1fT0NTU0RfU1BFQ18xMikgewo+IC0JCXN0cnVjdCBudm1fYWRkcmZfMTIgKnBwYWYg PSAoc3RydWN0IG52bV9hZGRyZl8xMiAqKSZwYmxrLT5hZGRyZjsKPiAtCQlzdHJ1Y3QgbnZtX2Fk ZHJmXzEyICpncHBhZiA9IChzdHJ1Y3QgbnZtX2FkZHJmXzEyICopJmdlby0+YWRkcmY7Cj4gLQo+ IC0JCXN6ID0gc2NucHJpbnRmKHBhZ2UsIFBBR0VfU0laRSwKPiAtCQkJImc6KGI6JWQpYmxrOiVk LyVkLHBnOiVkLyVkLGx1bjolZC8lZCxjaDolZC8lZCxwbDolZC8lZCxzZWM6JWQvJWRcbiIsCj4g LQkJCXBibGstPmFkZHJmX2xlbiwKPiAtCQkJcHBhZi0+YmxrX29mZnNldCwgcHBhZi0+YmxrX2xl biwKPiAtCQkJcHBhZi0+cGdfb2Zmc2V0LCBwcGFmLT5wZ19sZW4sCj4gLQkJCXBwYWYtPmx1bl9v ZmZzZXQsIHBwYWYtPmx1bl9sZW4sCj4gLQkJCXBwYWYtPmNoX29mZnNldCwgcHBhZi0+Y2hfbGVu LAo+IC0JCQlwcGFmLT5wbG5fb2Zmc2V0LCBwcGFmLT5wbG5fbGVuLAo+IC0JCQlwcGFmLT5zZWNf b2Zmc2V0LCBwcGFmLT5zZWNfbGVuKTsKPiAtCj4gLQkJc3ogKz0gc2NucHJpbnRmKHBhZ2UgKyBz eiwgUEFHRV9TSVpFIC0gc3osCj4gLQkJCSJkOmJsazolZC8lZCxwZzolZC8lZCxsdW46JWQvJWQs Y2g6JWQvJWQscGw6JWQvJWQsc2VjOiVkLyVkXG4iLAo+IC0JCQlncHBhZi0+YmxrX29mZnNldCwg Z3BwYWYtPmJsa19sZW4sCj4gLQkJCWdwcGFmLT5wZ19vZmZzZXQsIGdwcGFmLT5wZ19sZW4sCj4g LQkJCWdwcGFmLT5sdW5fb2Zmc2V0LCBncHBhZi0+bHVuX2xlbiwKPiAtCQkJZ3BwYWYtPmNoX29m ZnNldCwgZ3BwYWYtPmNoX2xlbiwKPiAtCQkJZ3BwYWYtPnBsbl9vZmZzZXQsIGdwcGFmLT5wbG5f bGVuLAo+IC0JCQlncHBhZi0+c2VjX29mZnNldCwgZ3BwYWYtPnNlY19sZW4pOwo+IC0JfSBlbHNl IHsKPiAtCQlzdHJ1Y3QgbnZtX2FkZHJmICpwcGFmID0gJnBibGstPmFkZHJmOwo+IC0JCXN0cnVj dCBudm1fYWRkcmYgKmdwcGFmID0gJmdlby0+YWRkcmY7Cj4gLQo+IC0JCXN6ID0gc2NucHJpbnRm KHBhZ2UsIFBBR0VfU0laRSwKPiAtCQkJInBibGs6KHM6JWQpY2g6JWQvJWQsbHVuOiVkLyVkLGNo azolZC8lZC9zZWM6JWQvJWRcbiIsCj4gLQkJCXBibGstPmFkZHJmX2xlbiwKPiAtCQkJcHBhZi0+ Y2hfb2Zmc2V0LCBwcGFmLT5jaF9sZW4sCj4gLQkJCXBwYWYtPmx1bl9vZmZzZXQsIHBwYWYtPmx1 bl9sZW4sCj4gLQkJCXBwYWYtPmNoa19vZmZzZXQsIHBwYWYtPmNoa19sZW4sCj4gLQkJCXBwYWYt PnNlY19vZmZzZXQsIHBwYWYtPnNlY19sZW4pOwo+IC0KPiAtCQlzeiArPSBzY25wcmludGYocGFn ZSArIHN6LCBQQUdFX1NJWkUgLSBzeiwKPiAtCQkJImRldmljZTpjaDolZC8lZCxsdW46JWQvJWQs Y2hrOiVkLyVkLHNlYzolZC8lZFxuIiwKPiAtCQkJZ3BwYWYtPmNoX29mZnNldCwgZ3BwYWYtPmNo X2xlbiwKPiAtCQkJZ3BwYWYtPmx1bl9vZmZzZXQsIGdwcGFmLT5sdW5fbGVuLAo+IC0JCQlncHBh Zi0+Y2hrX29mZnNldCwgZ3BwYWYtPmNoa19sZW4sCj4gLQkJCWdwcGFmLT5zZWNfb2Zmc2V0LCBn cHBhZi0+c2VjX2xlbik7Cj4gLQl9Cj4gLQo+IC0JcmV0dXJuIHN6Owo+IC19Cj4gLQo+IC1zdGF0 aWMgc3NpemVfdCBwYmxrX3N5c2ZzX2xpbmVzKHN0cnVjdCBwYmxrICpwYmxrLCBjaGFyICpwYWdl KQo+IC17Cj4gLQlzdHJ1Y3QgbnZtX3RndF9kZXYgKmRldiA9IHBibGstPmRldjsKPiAtCXN0cnVj dCBudm1fZ2VvICpnZW8gPSAmZGV2LT5nZW87Cj4gLQlzdHJ1Y3QgcGJsa19saW5lX21ldGEgKmxt ID0gJnBibGstPmxtOwo+IC0Jc3RydWN0IHBibGtfbGluZV9tZ210ICpsX21nID0gJnBibGstPmxf bWc7Cj4gLQlzdHJ1Y3QgcGJsa19saW5lICpsaW5lOwo+IC0Jc3NpemVfdCBzeiA9IDA7Cj4gLQlp bnQgbnJfZnJlZV9saW5lczsKPiAtCWludCBjdXJfZGF0YSwgY3VyX2xvZzsKPiAtCWludCBmcmVl X2xpbmVfY250ID0gMCwgY2xvc2VkX2xpbmVfY250ID0gMCwgZW1ldGFfbGluZV9jbnQgPSAwOwo+ IC0JaW50IGRfbGluZV9jbnQgPSAwLCBsX2xpbmVfY250ID0gMDsKPiAtCWludCBnY19mdWxsID0g MCwgZ2NfaGlnaCA9IDAsIGdjX21pZCA9IDAsIGdjX2xvdyA9IDAsIGdjX2VtcHR5ID0gMDsKPiAt CWludCBnY193ZXJyID0gMDsKPiAtCj4gLQlpbnQgYmFkID0gMCwgY29yID0gMDsKPiAtCWludCBt c2VjcyA9IDAsIGN1cl9zZWMgPSAwLCB2c2MgPSAwLCBzZWNfaW5fbGluZSA9IDA7Cj4gLQlpbnQg bWFwX3dlaWdodCA9IDAsIG1ldGFfd2VpZ2h0ID0gMDsKPiAtCj4gLQlzcGluX2xvY2soJmxfbWct PmZyZWVfbG9jayk7Cj4gLQljdXJfZGF0YSA9IChsX21nLT5kYXRhX2xpbmUpID8gbF9tZy0+ZGF0 YV9saW5lLT5pZCA6IC0xOwo+IC0JY3VyX2xvZyA9IChsX21nLT5sb2dfbGluZSkgPyBsX21nLT5s b2dfbGluZS0+aWQgOiAtMTsKPiAtCW5yX2ZyZWVfbGluZXMgPSBsX21nLT5ucl9mcmVlX2xpbmVz Owo+IC0KPiAtCWxpc3RfZm9yX2VhY2hfZW50cnkobGluZSwgJmxfbWctPmZyZWVfbGlzdCwgbGlz dCkKPiAtCQlmcmVlX2xpbmVfY250Kys7Cj4gLQlzcGluX3VubG9jaygmbF9tZy0+ZnJlZV9sb2Nr KTsKPiAtCj4gLQlzcGluX2xvY2soJmxfbWctPmNsb3NlX2xvY2spOwo+IC0JbGlzdF9mb3JfZWFj aF9lbnRyeShsaW5lLCAmbF9tZy0+ZW1ldGFfbGlzdCwgbGlzdCkKPiAtCQllbWV0YV9saW5lX2Nu dCsrOwo+IC0Jc3Bpbl91bmxvY2soJmxfbWctPmNsb3NlX2xvY2spOwo+IC0KPiAtCXNwaW5fbG9j aygmbF9tZy0+Z2NfbG9jayk7Cj4gLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGxpbmUsICZsX21nLT5n Y19mdWxsX2xpc3QsIGxpc3QpIHsKPiAtCQlpZiAobGluZS0+dHlwZSA9PSBQQkxLX0xJTkVUWVBF X0RBVEEpCj4gLQkJCWRfbGluZV9jbnQrKzsKPiAtCQllbHNlIGlmIChsaW5lLT50eXBlID09IFBC TEtfTElORVRZUEVfTE9HKQo+IC0JCQlsX2xpbmVfY250Kys7Cj4gLQkJY2xvc2VkX2xpbmVfY250 Kys7Cj4gLQkJZ2NfZnVsbCsrOwo+IC0JfQo+IC0KPiAtCWxpc3RfZm9yX2VhY2hfZW50cnkobGlu ZSwgJmxfbWctPmdjX2hpZ2hfbGlzdCwgbGlzdCkgewo+IC0JCWlmIChsaW5lLT50eXBlID09IFBC TEtfTElORVRZUEVfREFUQSkKPiAtCQkJZF9saW5lX2NudCsrOwo+IC0JCWVsc2UgaWYgKGxpbmUt PnR5cGUgPT0gUEJMS19MSU5FVFlQRV9MT0cpCj4gLQkJCWxfbGluZV9jbnQrKzsKPiAtCQljbG9z ZWRfbGluZV9jbnQrKzsKPiAtCQlnY19oaWdoKys7Cj4gLQl9Cj4gLQo+IC0JbGlzdF9mb3JfZWFj aF9lbnRyeShsaW5lLCAmbF9tZy0+Z2NfbWlkX2xpc3QsIGxpc3QpIHsKPiAtCQlpZiAobGluZS0+ dHlwZSA9PSBQQkxLX0xJTkVUWVBFX0RBVEEpCj4gLQkJCWRfbGluZV9jbnQrKzsKPiAtCQllbHNl IGlmIChsaW5lLT50eXBlID09IFBCTEtfTElORVRZUEVfTE9HKQo+IC0JCQlsX2xpbmVfY250Kys7 Cj4gLQkJY2xvc2VkX2xpbmVfY250Kys7Cj4gLQkJZ2NfbWlkKys7Cj4gLQl9Cj4gLQo+IC0JbGlz dF9mb3JfZWFjaF9lbnRyeShsaW5lLCAmbF9tZy0+Z2NfbG93X2xpc3QsIGxpc3QpIHsKPiAtCQlp ZiAobGluZS0+dHlwZSA9PSBQQkxLX0xJTkVUWVBFX0RBVEEpCj4gLQkJCWRfbGluZV9jbnQrKzsK PiAtCQllbHNlIGlmIChsaW5lLT50eXBlID09IFBCTEtfTElORVRZUEVfTE9HKQo+IC0JCQlsX2xp bmVfY250Kys7Cj4gLQkJY2xvc2VkX2xpbmVfY250Kys7Cj4gLQkJZ2NfbG93Kys7Cj4gLQl9Cj4g LQo+IC0JbGlzdF9mb3JfZWFjaF9lbnRyeShsaW5lLCAmbF9tZy0+Z2NfZW1wdHlfbGlzdCwgbGlz dCkgewo+IC0JCWlmIChsaW5lLT50eXBlID09IFBCTEtfTElORVRZUEVfREFUQSkKPiAtCQkJZF9s aW5lX2NudCsrOwo+IC0JCWVsc2UgaWYgKGxpbmUtPnR5cGUgPT0gUEJMS19MSU5FVFlQRV9MT0cp Cj4gLQkJCWxfbGluZV9jbnQrKzsKPiAtCQljbG9zZWRfbGluZV9jbnQrKzsKPiAtCQlnY19lbXB0 eSsrOwo+IC0JfQo+IC0KPiAtCWxpc3RfZm9yX2VhY2hfZW50cnkobGluZSwgJmxfbWctPmdjX3dl cnJfbGlzdCwgbGlzdCkgewo+IC0JCWlmIChsaW5lLT50eXBlID09IFBCTEtfTElORVRZUEVfREFU QSkKPiAtCQkJZF9saW5lX2NudCsrOwo+IC0JCWVsc2UgaWYgKGxpbmUtPnR5cGUgPT0gUEJMS19M SU5FVFlQRV9MT0cpCj4gLQkJCWxfbGluZV9jbnQrKzsKPiAtCQljbG9zZWRfbGluZV9jbnQrKzsK PiAtCQlnY193ZXJyKys7Cj4gLQl9Cj4gLQo+IC0JbGlzdF9mb3JfZWFjaF9lbnRyeShsaW5lLCAm bF9tZy0+YmFkX2xpc3QsIGxpc3QpCj4gLQkJYmFkKys7Cj4gLQlsaXN0X2Zvcl9lYWNoX2VudHJ5 KGxpbmUsICZsX21nLT5jb3JydXB0X2xpc3QsIGxpc3QpCj4gLQkJY29yKys7Cj4gLQlzcGluX3Vu bG9jaygmbF9tZy0+Z2NfbG9jayk7Cj4gLQo+IC0Jc3Bpbl9sb2NrKCZsX21nLT5mcmVlX2xvY2sp Owo+IC0JaWYgKGxfbWctPmRhdGFfbGluZSkgewo+IC0JCWN1cl9zZWMgPSBsX21nLT5kYXRhX2xp bmUtPmN1cl9zZWM7Cj4gLQkJbXNlY3MgPSBsX21nLT5kYXRhX2xpbmUtPmxlZnRfbXNlY3M7Cj4g LQkJdnNjID0gbGUzMl90b19jcHUoKmxfbWctPmRhdGFfbGluZS0+dnNjKTsKPiAtCQlzZWNfaW5f bGluZSA9IGxfbWctPmRhdGFfbGluZS0+c2VjX2luX2xpbmU7Cj4gLQkJbWV0YV93ZWlnaHQgPSBi aXRtYXBfd2VpZ2h0KCZsX21nLT5tZXRhX2JpdG1hcCwKPiAtCQkJCQkJCVBCTEtfREFUQV9MSU5F Uyk7Cj4gLQo+IC0JCXNwaW5fbG9jaygmbF9tZy0+ZGF0YV9saW5lLT5sb2NrKTsKPiAtCQlpZiAo bF9tZy0+ZGF0YV9saW5lLT5tYXBfYml0bWFwKQo+IC0JCQltYXBfd2VpZ2h0ID0gYml0bWFwX3dl aWdodChsX21nLT5kYXRhX2xpbmUtPm1hcF9iaXRtYXAsCj4gLQkJCQkJCQlsbS0+c2VjX3Blcl9s aW5lKTsKPiAtCQllbHNlCj4gLQkJCW1hcF93ZWlnaHQgPSAwOwo+IC0JCXNwaW5fdW5sb2NrKCZs X21nLT5kYXRhX2xpbmUtPmxvY2spOwo+IC0JfQo+IC0Jc3Bpbl91bmxvY2soJmxfbWctPmZyZWVf bG9jayk7Cj4gLQo+IC0JaWYgKG5yX2ZyZWVfbGluZXMgIT0gZnJlZV9saW5lX2NudCkKPiAtCQlw YmxrX2VycihwYmxrLCAiY29ycnVwdGVkIGZyZWUgbGluZSBsaXN0OiVkLyVkXG4iLAo+IC0JCQkJ CQlucl9mcmVlX2xpbmVzLCBmcmVlX2xpbmVfY250KTsKPiAtCj4gLQlzeiA9IHNjbnByaW50Zihw YWdlLCBQQUdFX1NJWkUgLSBzeiwKPiAtCQkibGluZTogbmx1bnM6JWQsIG5ibGtzOiVkLCBuc2Vj czolZFxuIiwKPiAtCQlnZW8tPmFsbF9sdW5zLCBsbS0+YmxrX3Blcl9saW5lLCBsbS0+c2VjX3Bl cl9saW5lKTsKPiAtCj4gLQlzeiArPSBzY25wcmludGYocGFnZSArIHN6LCBQQUdFX1NJWkUgLSBz eiwKPiAtCQkibGluZXM6ZDolZCxsOiVkLWY6JWQsbTolZC8lZCxjOiVkLGI6JWQsY286JWQoZDol ZCxsOiVkKXQ6JWRcbiIsCj4gLQkJCQkJY3VyX2RhdGEsIGN1cl9sb2csCj4gLQkJCQkJbnJfZnJl ZV9saW5lcywKPiAtCQkJCQllbWV0YV9saW5lX2NudCwgbWV0YV93ZWlnaHQsCj4gLQkJCQkJY2xv c2VkX2xpbmVfY250LAo+IC0JCQkJCWJhZCwgY29yLAo+IC0JCQkJCWRfbGluZV9jbnQsIGxfbGlu ZV9jbnQsCj4gLQkJCQkJbF9tZy0+bnJfbGluZXMpOwo+IC0KPiAtCXN6ICs9IHNjbnByaW50Zihw YWdlICsgc3osIFBBR0VfU0laRSAtIHN6LAo+IC0JCSJHQzogZnVsbDolZCwgaGlnaDolZCwgbWlk OiVkLCBsb3c6JWQsIGVtcHR5OiVkLCB3ZXJyOiAlZCwgcXVldWU6JWRcbiIsCj4gLQkJCWdjX2Z1 bGwsIGdjX2hpZ2gsIGdjX21pZCwgZ2NfbG93LCBnY19lbXB0eSwgZ2Nfd2VyciwKPiAtCQkJYXRv bWljX3JlYWQoJnBibGstPmdjLnJlYWRfaW5mbGlnaHRfZ2MpKTsKPiAtCj4gLQlzeiArPSBzY25w cmludGYocGFnZSArIHN6LCBQQUdFX1NJWkUgLSBzeiwKPiAtCQkiZGF0YSAoJWQpIGN1cjolZCwg bGVmdDolZCwgdnNjOiVkLCBzOiVkLCBtYXA6JWQvJWQgKCVkKVxuIiwKPiAtCQkJY3VyX2RhdGEs IGN1cl9zZWMsIG1zZWNzLCB2c2MsIHNlY19pbl9saW5lLAo+IC0JCQltYXBfd2VpZ2h0LCBsbS0+ c2VjX3Blcl9saW5lLAo+IC0JCQlhdG9taWNfcmVhZCgmcGJsay0+aW5mbGlnaHRfaW8pKTsKPiAt Cj4gLQlyZXR1cm4gc3o7Cj4gLX0KPiAtCj4gLXN0YXRpYyBzc2l6ZV90IHBibGtfc3lzZnNfbGlu ZXNfaW5mbyhzdHJ1Y3QgcGJsayAqcGJsaywgY2hhciAqcGFnZSkKPiAtewo+IC0Jc3RydWN0IG52 bV90Z3RfZGV2ICpkZXYgPSBwYmxrLT5kZXY7Cj4gLQlzdHJ1Y3QgbnZtX2dlbyAqZ2VvID0gJmRl di0+Z2VvOwo+IC0Jc3RydWN0IHBibGtfbGluZV9tZXRhICpsbSA9ICZwYmxrLT5sbTsKPiAtCXNz aXplX3Qgc3ogPSAwOwo+IC0KPiAtCXN6ID0gc2NucHJpbnRmKHBhZ2UsIFBBR0VfU0laRSAtIHN6 LAo+IC0JCQkJInNtZXRhIC0gbGVuOiVkLCBzZWNzOiVkXG4iLAo+IC0JCQkJCWxtLT5zbWV0YV9s ZW4sIGxtLT5zbWV0YV9zZWMpOwo+IC0Jc3ogKz0gc2NucHJpbnRmKHBhZ2UgKyBzeiwgUEFHRV9T SVpFIC0gc3osCj4gLQkJCQkiZW1ldGEgLSBsZW46JWQsIHNlYzolZCwgYmJfc3RhcnQ6JWRcbiIs Cj4gLQkJCQkJbG0tPmVtZXRhX2xlblswXSwgbG0tPmVtZXRhX3NlY1swXSwKPiAtCQkJCQlsbS0+ ZW1ldGFfYmIpOwo+IC0Jc3ogKz0gc2NucHJpbnRmKHBhZ2UgKyBzeiwgUEFHRV9TSVpFIC0gc3os Cj4gLQkJCQkiYml0bWFwIGxlbmd0aHM6IHNlYzolZCwgYmxrOiVkLCBsdW46JWRcbiIsCj4gLQkJ CQkJbG0tPnNlY19iaXRtYXBfbGVuLAo+IC0JCQkJCWxtLT5ibGtfYml0bWFwX2xlbiwKPiAtCQkJ CQlsbS0+bHVuX2JpdG1hcF9sZW4pOwo+IC0Jc3ogKz0gc2NucHJpbnRmKHBhZ2UgKyBzeiwgUEFH RV9TSVpFIC0gc3osCj4gLQkJCQkiYmxrX2xpbmU6JWQsIHNlY19saW5lOiVkLCBzZWNfYmxrOiVk XG4iLAo+IC0JCQkJCWxtLT5ibGtfcGVyX2xpbmUsCj4gLQkJCQkJbG0tPnNlY19wZXJfbGluZSwK PiAtCQkJCQlnZW8tPmNsYmEpOwo+IC0KPiAtCXJldHVybiBzejsKPiAtfQo+IC0KPiAtc3RhdGlj IHNzaXplX3QgcGJsa19zeXNmc19nZXRfc2VjX3Blcl93cml0ZShzdHJ1Y3QgcGJsayAqcGJsaywg Y2hhciAqcGFnZSkKPiAtewo+IC0JcmV0dXJuIHNucHJpbnRmKHBhZ2UsIFBBR0VfU0laRSwgIiVk XG4iLCBwYmxrLT5zZWNfcGVyX3dyaXRlKTsKPiAtfQo+IC0KPiAtc3RhdGljIHNzaXplX3QgcGJs a19nZXRfd3JpdGVfYW1wKHU2NCB1c2VyLCB1NjQgZ2MsIHU2NCBwYWQsCj4gLQkJCQkgIGNoYXIg KnBhZ2UpCj4gLXsKPiAtCWludCBzejsKPiAtCj4gLQlzeiA9IHNjbnByaW50ZihwYWdlLCBQQUdF X1NJWkUsCj4gLQkJCSJ1c2VyOiVsbGQgZ2M6JWxsZCBwYWQ6JWxsZCBXQToiLAo+IC0JCQl1c2Vy LCBnYywgcGFkKTsKPiAtCj4gLQlpZiAoIXVzZXIpIHsKPiAtCQlzeiArPSBzY25wcmludGYocGFn ZSArIHN6LCBQQUdFX1NJWkUgLSBzeiwgIk5hTlxuIik7Cj4gLQl9IGVsc2Ugewo+IC0JCXU2NCB3 YV9pbnQ7Cj4gLQkJdTMyIHdhX2ZyYWM7Cj4gLQo+IC0JCXdhX2ludCA9ICh1c2VyICsgZ2MgKyBw YWQpICogMTAwMDAwOwo+IC0JCXdhX2ludCA9IGRpdjY0X3U2NCh3YV9pbnQsIHVzZXIpOwo+IC0J CXdhX2ludCA9IGRpdl91NjRfcmVtKHdhX2ludCwgMTAwMDAwLCAmd2FfZnJhYyk7Cj4gLQo+IC0J CXN6ICs9IHNjbnByaW50ZihwYWdlICsgc3osIFBBR0VfU0laRSAtIHN6LCAiJWxsdS4lMDV1XG4i LAo+IC0JCQkJCQkJd2FfaW50LCB3YV9mcmFjKTsKPiAtCX0KPiAtCj4gLQlyZXR1cm4gc3o7Cj4g LX0KPiAtCj4gLXN0YXRpYyBzc2l6ZV90IHBibGtfc3lzZnNfZ2V0X3dyaXRlX2FtcF9taWxlYWdl KHN0cnVjdCBwYmxrICpwYmxrLCBjaGFyICpwYWdlKQo+IC17Cj4gLQlyZXR1cm4gcGJsa19nZXRf d3JpdGVfYW1wKGF0b21pYzY0X3JlYWQoJnBibGstPnVzZXJfd2EpLAo+IC0JCWF0b21pYzY0X3Jl YWQoJnBibGstPmdjX3dhKSwgYXRvbWljNjRfcmVhZCgmcGJsay0+cGFkX3dhKSwKPiAtCQlwYWdl KTsKPiAtfQo+IC0KPiAtc3RhdGljIHNzaXplX3QgcGJsa19zeXNmc19nZXRfd3JpdGVfYW1wX3Ry aXAoc3RydWN0IHBibGsgKnBibGssIGNoYXIgKnBhZ2UpCj4gLXsKPiAtCXJldHVybiBwYmxrX2dl dF93cml0ZV9hbXAoCj4gLQkJYXRvbWljNjRfcmVhZCgmcGJsay0+dXNlcl93YSkgLSBwYmxrLT51 c2VyX3JzdF93YSwKPiAtCQlhdG9taWM2NF9yZWFkKCZwYmxrLT5nY193YSkgLSBwYmxrLT5nY19y c3Rfd2EsCj4gLQkJYXRvbWljNjRfcmVhZCgmcGJsay0+cGFkX3dhKSAtIHBibGstPnBhZF9yc3Rf d2EsIHBhZ2UpOwo+IC19Cj4gLQo+IC1zdGF0aWMgbG9uZyBsb25nIGJ1Y2tldF9wZXJjZW50YWdl KHVuc2lnbmVkIGxvbmcgbG9uZyBidWNrZXQsCj4gLQkJCQkgICB1bnNpZ25lZCBsb25nIGxvbmcg dG90YWwpCj4gLXsKPiAtCWludCBwID0gYnVja2V0ICogMTAwOwo+IC0KPiAtCXAgPSBkaXZfdTY0 KHAsIHRvdGFsKTsKPiAtCj4gLQlyZXR1cm4gcDsKPiAtfQo+IC0KPiAtc3RhdGljIHNzaXplX3Qg cGJsa19zeXNmc19nZXRfcGFkZGluZ19kaXN0KHN0cnVjdCBwYmxrICpwYmxrLCBjaGFyICpwYWdl KQo+IC17Cj4gLQlpbnQgc3ogPSAwOwo+IC0JdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsOwo+IC0J dW5zaWduZWQgbG9uZyBsb25nIHRvdGFsX2J1Y2tldHMgPSAwOwo+IC0JaW50IGJ1Y2tldHMgPSBw YmxrLT5taW5fd3JpdGVfcGdzIC0gMTsKPiAtCWludCBpOwo+IC0KPiAtCXRvdGFsID0gYXRvbWlj NjRfcmVhZCgmcGJsay0+bnJfZmx1c2gpIC0gcGJsay0+bnJfZmx1c2hfcnN0Owo+IC0JaWYgKCF0 b3RhbCkgewo+IC0JCWZvciAoaSA9IDA7IGkgPCAoYnVja2V0cyArIDEpOyBpKyspCj4gLQkJCXN6 ICs9IHNjbnByaW50ZihwYWdlICsgc3osIFBBR0VfU0laRSAtIHN6LAo+IC0JCQkJIiVkOjAgIiwg aSk7Cj4gLQkJc3ogKz0gc2NucHJpbnRmKHBhZ2UgKyBzeiwgUEFHRV9TSVpFIC0gc3osICJcbiIp Owo+IC0KPiAtCQlyZXR1cm4gc3o7Cj4gLQl9Cj4gLQo+IC0JZm9yIChpID0gMDsgaSA8IGJ1Y2tl dHM7IGkrKykKPiAtCQl0b3RhbF9idWNrZXRzICs9IGF0b21pYzY0X3JlYWQoJnBibGstPnBhZF9k aXN0W2ldKTsKPiAtCj4gLQlzeiArPSBzY25wcmludGYocGFnZSArIHN6LCBQQUdFX1NJWkUgLSBz eiwgIjA6JWxsZCUlICIsCj4gLQkJYnVja2V0X3BlcmNlbnRhZ2UodG90YWwgLSB0b3RhbF9idWNr ZXRzLCB0b3RhbCkpOwo+IC0KPiAtCWZvciAoaSA9IDA7IGkgPCBidWNrZXRzOyBpKyspIHsKPiAt CQl1bnNpZ25lZCBsb25nIGxvbmcgcDsKPiAtCj4gLQkJcCA9IGJ1Y2tldF9wZXJjZW50YWdlKGF0 b21pYzY0X3JlYWQoJnBibGstPnBhZF9kaXN0W2ldKSwKPiAtCQkJCQkgIHRvdGFsKTsKPiAtCQlz eiArPSBzY25wcmludGYocGFnZSArIHN6LCBQQUdFX1NJWkUgLSBzeiwgIiVkOiVsbGQlJSAiLAo+ IC0JCQkJaSArIDEsIHApOwo+IC0JfQo+IC0Jc3ogKz0gc2NucHJpbnRmKHBhZ2UgKyBzeiwgUEFH RV9TSVpFIC0gc3osICJcbiIpOwo+IC0KPiAtCXJldHVybiBzejsKPiAtfQo+IC0KPiAtI2lmZGVm IENPTkZJR19OVk1fUEJMS19ERUJVRwo+IC1zdGF0aWMgc3NpemVfdCBwYmxrX3N5c2ZzX3N0YXRz X2RlYnVnKHN0cnVjdCBwYmxrICpwYmxrLCBjaGFyICpwYWdlKQo+IC17Cj4gLQlyZXR1cm4gc25w cmludGYocGFnZSwgUEFHRV9TSVpFLAo+IC0JCSIlbHVcdCVsdVx0JWxkXHQlbGx1XHQlbGRcdCVs dVx0JWx1XHQlbHVcdCVsdVx0JWx1XHQlbHVcdCVsdVx0JWx1XG4iLAo+IC0JCQlhdG9taWNfbG9u Z19yZWFkKCZwYmxrLT5pbmZsaWdodF93cml0ZXMpLAo+IC0JCQlhdG9taWNfbG9uZ19yZWFkKCZw YmxrLT5pbmZsaWdodF9yZWFkcyksCj4gLQkJCWF0b21pY19sb25nX3JlYWQoJnBibGstPnJlcV93 cml0ZXMpLAo+IC0JCQkodTY0KWF0b21pYzY0X3JlYWQoJnBibGstPm5yX2ZsdXNoKSwKPiAtCQkJ YXRvbWljX2xvbmdfcmVhZCgmcGJsay0+cGFkZGVkX3dyaXRlcyksCj4gLQkJCWF0b21pY19sb25n X3JlYWQoJnBibGstPnBhZGRlZF93YiksCj4gLQkJCWF0b21pY19sb25nX3JlYWQoJnBibGstPnN1 Yl93cml0ZXMpLAo+IC0JCQlhdG9taWNfbG9uZ19yZWFkKCZwYmxrLT5zeW5jX3dyaXRlcyksCj4g LQkJCWF0b21pY19sb25nX3JlYWQoJnBibGstPnJlY292X3dyaXRlcyksCj4gLQkJCWF0b21pY19s b25nX3JlYWQoJnBibGstPnJlY292X2djX3dyaXRlcyksCj4gLQkJCWF0b21pY19sb25nX3JlYWQo JnBibGstPnJlY292X2djX3JlYWRzKSwKPiAtCQkJYXRvbWljX2xvbmdfcmVhZCgmcGJsay0+Y2Fj aGVfcmVhZHMpLAo+IC0JCQlhdG9taWNfbG9uZ19yZWFkKCZwYmxrLT5zeW5jX3JlYWRzKSk7Cj4g LX0KPiAtI2VuZGlmCj4gLQo+IC1zdGF0aWMgc3NpemVfdCBwYmxrX3N5c2ZzX2djX2ZvcmNlKHN0 cnVjdCBwYmxrICpwYmxrLCBjb25zdCBjaGFyICpwYWdlLAo+IC0JCQkJICAgc2l6ZV90IGxlbikK PiAtewo+IC0Jc2l6ZV90IGNfbGVuOwo+IC0JaW50IGZvcmNlOwo+IC0KPiAtCWNfbGVuID0gc3Ry Y3NwbihwYWdlLCAiXG4iKTsKPiAtCWlmIChjX2xlbiA+PSBsZW4pCj4gLQkJcmV0dXJuIC1FSU5W QUw7Cj4gLQo+IC0JaWYgKGtzdHJ0b3VpbnQocGFnZSwgMCwgJmZvcmNlKSkKPiAtCQlyZXR1cm4g LUVJTlZBTDsKPiAtCj4gLQlwYmxrX2djX3N5c2ZzX2ZvcmNlKHBibGssIGZvcmNlKTsKPiAtCj4g LQlyZXR1cm4gbGVuOwo+IC19Cj4gLQo+IC1zdGF0aWMgc3NpemVfdCBwYmxrX3N5c2ZzX3NldF9z ZWNfcGVyX3dyaXRlKHN0cnVjdCBwYmxrICpwYmxrLAo+IC0JCQkJCSAgICAgY29uc3QgY2hhciAq cGFnZSwgc2l6ZV90IGxlbikKPiAtewo+IC0Jc2l6ZV90IGNfbGVuOwo+IC0JaW50IHNlY19wZXJf d3JpdGU7Cj4gLQo+IC0JY19sZW4gPSBzdHJjc3BuKHBhZ2UsICJcbiIpOwo+IC0JaWYgKGNfbGVu ID49IGxlbikKPiAtCQlyZXR1cm4gLUVJTlZBTDsKPiAtCj4gLQlpZiAoa3N0cnRvdWludChwYWdl LCAwLCAmc2VjX3Blcl93cml0ZSkpCj4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4gLQo+IC0JaWYgKCFw YmxrX2lzX29vYl9tZXRhX3N1cHBvcnRlZChwYmxrKSkgewo+IC0JCS8qIEZvciBwYWNrZWQgbWV0 YWRhdGEgY2FzZSBpdCBpcwo+IC0JCSAqIG5vdCBhbGxvd2VkIHRvIGNoYW5nZSBzZWNfcGVyX3dy aXRlLgo+IC0JCSAqLwo+IC0JCXJldHVybiAtRUlOVkFMOwo+IC0JfQo+IC0KPiAtCWlmIChzZWNf cGVyX3dyaXRlIDwgcGJsay0+bWluX3dyaXRlX3Bncwo+IC0JCQkJfHwgc2VjX3Blcl93cml0ZSA+ IHBibGstPm1heF93cml0ZV9wZ3MKPiAtCQkJCXx8IHNlY19wZXJfd3JpdGUgJSBwYmxrLT5taW5f d3JpdGVfcGdzICE9IDApCj4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4gLQo+IC0JcGJsa19zZXRfc2Vj X3Blcl93cml0ZShwYmxrLCBzZWNfcGVyX3dyaXRlKTsKPiAtCj4gLQlyZXR1cm4gbGVuOwo+IC19 Cj4gLQo+IC1zdGF0aWMgc3NpemVfdCBwYmxrX3N5c2ZzX3NldF93cml0ZV9hbXBfdHJpcChzdHJ1 Y3QgcGJsayAqcGJsaywKPiAtCQkJY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGxlbikKPiAtewo+ IC0Jc2l6ZV90IGNfbGVuOwo+IC0JaW50IHJlc2V0X3ZhbHVlOwo+IC0KPiAtCWNfbGVuID0gc3Ry Y3NwbihwYWdlLCAiXG4iKTsKPiAtCWlmIChjX2xlbiA+PSBsZW4pCj4gLQkJcmV0dXJuIC1FSU5W QUw7Cj4gLQo+IC0JaWYgKGtzdHJ0b3VpbnQocGFnZSwgMCwgJnJlc2V0X3ZhbHVlKSkKPiAtCQly ZXR1cm4gLUVJTlZBTDsKPiAtCj4gLQlpZiAocmVzZXRfdmFsdWUgIT0gIDApCj4gLQkJcmV0dXJu IC1FSU5WQUw7Cj4gLQo+IC0JcGJsay0+dXNlcl9yc3Rfd2EgPSBhdG9taWM2NF9yZWFkKCZwYmxr LT51c2VyX3dhKTsKPiAtCXBibGstPnBhZF9yc3Rfd2EgPSBhdG9taWM2NF9yZWFkKCZwYmxrLT5w YWRfd2EpOwo+IC0JcGJsay0+Z2NfcnN0X3dhID0gYXRvbWljNjRfcmVhZCgmcGJsay0+Z2Nfd2Ep Owo+IC0KPiAtCXJldHVybiBsZW47Cj4gLX0KPiAtCj4gLQo+IC1zdGF0aWMgc3NpemVfdCBwYmxr X3N5c2ZzX3NldF9wYWRkaW5nX2Rpc3Qoc3RydWN0IHBibGsgKnBibGssCj4gLQkJCWNvbnN0IGNo YXIgKnBhZ2UsIHNpemVfdCBsZW4pCj4gLXsKPiAtCXNpemVfdCBjX2xlbjsKPiAtCWludCByZXNl dF92YWx1ZTsKPiAtCWludCBidWNrZXRzID0gcGJsay0+bWluX3dyaXRlX3BncyAtIDE7Cj4gLQlp bnQgaTsKPiAtCj4gLQljX2xlbiA9IHN0cmNzcG4ocGFnZSwgIlxuIik7Cj4gLQlpZiAoY19sZW4g Pj0gbGVuKQo+IC0JCXJldHVybiAtRUlOVkFMOwo+IC0KPiAtCWlmIChrc3RydG91aW50KHBhZ2Us IDAsICZyZXNldF92YWx1ZSkpCj4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4gLQo+IC0JaWYgKHJlc2V0 X3ZhbHVlICE9ICAwKQo+IC0JCXJldHVybiAtRUlOVkFMOwo+IC0KPiAtCWZvciAoaSA9IDA7IGkg PCBidWNrZXRzOyBpKyspCj4gLQkJYXRvbWljNjRfc2V0KCZwYmxrLT5wYWRfZGlzdFtpXSwgMCk7 Cj4gLQo+IC0JcGJsay0+bnJfZmx1c2hfcnN0ID0gYXRvbWljNjRfcmVhZCgmcGJsay0+bnJfZmx1 c2gpOwo+IC0KPiAtCXJldHVybiBsZW47Cj4gLX0KPiAtCj4gLXN0YXRpYyBzdHJ1Y3QgYXR0cmli dXRlIHN5c193cml0ZV9sdW5zID0gewo+IC0JLm5hbWUgPSAid3JpdGVfbHVucyIsCj4gLQkubW9k ZSA9IDA0NDQsCj4gLX07Cj4gLQo+IC1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSBzeXNfcmF0ZV9s aW1pdGVyX2F0dHIgPSB7Cj4gLQkubmFtZSA9ICJyYXRlX2xpbWl0ZXIiLAo+IC0JLm1vZGUgPSAw NDQ0LAo+IC19Owo+IC0KPiAtc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgc3lzX2djX3N0YXRlID0g ewo+IC0JLm5hbWUgPSAiZ2Nfc3RhdGUiLAo+IC0JLm1vZGUgPSAwNDQ0LAo+IC19Owo+IC0KPiAt c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgc3lzX2Vycm9yc19hdHRyID0gewo+IC0JLm5hbWUgPSAi ZXJyb3JzIiwKPiAtCS5tb2RlID0gMDQ0NCwKPiAtfTsKPiAtCj4gLXN0YXRpYyBzdHJ1Y3QgYXR0 cmlidXRlIHN5c19yYl9hdHRyID0gewo+IC0JLm5hbWUgPSAid3JpdGVfYnVmZmVyIiwKPiAtCS5t b2RlID0gMDQ0NCwKPiAtfTsKPiAtCj4gLXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlIHN5c19zdGF0 c19wcGFmX2F0dHIgPSB7Cj4gLQkubmFtZSA9ICJwcGFfZm9ybWF0IiwKPiAtCS5tb2RlID0gMDQ0 NCwKPiAtfTsKPiAtCj4gLXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlIHN5c19saW5lc19hdHRyID0g ewo+IC0JLm5hbWUgPSAibGluZXMiLAo+IC0JLm1vZGUgPSAwNDQ0LAo+IC19Owo+IC0KPiAtc3Rh dGljIHN0cnVjdCBhdHRyaWJ1dGUgc3lzX2xpbmVzX2luZm9fYXR0ciA9IHsKPiAtCS5uYW1lID0g ImxpbmVzX2luZm8iLAo+IC0JLm1vZGUgPSAwNDQ0LAo+IC19Owo+IC0KPiAtc3RhdGljIHN0cnVj dCBhdHRyaWJ1dGUgc3lzX2djX2ZvcmNlID0gewo+IC0JLm5hbWUgPSAiZ2NfZm9yY2UiLAo+IC0J Lm1vZGUgPSAwMjAwLAo+IC19Owo+IC0KPiAtc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgc3lzX21h eF9zZWNfcGVyX3dyaXRlID0gewo+IC0JLm5hbWUgPSAibWF4X3NlY19wZXJfd3JpdGUiLAo+IC0J Lm1vZGUgPSAwNjQ0LAo+IC19Owo+IC0KPiAtc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgc3lzX3dy aXRlX2FtcF9taWxlYWdlID0gewo+IC0JLm5hbWUgPSAid3JpdGVfYW1wX21pbGVhZ2UiLAo+IC0J Lm1vZGUgPSAwNDQ0LAo+IC19Owo+IC0KPiAtc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgc3lzX3dy aXRlX2FtcF90cmlwID0gewo+IC0JLm5hbWUgPSAid3JpdGVfYW1wX3RyaXAiLAo+IC0JLm1vZGUg PSAwNjQ0LAo+IC19Owo+IC0KPiAtc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgc3lzX3BhZGRpbmdf ZGlzdCA9IHsKPiAtCS5uYW1lID0gInBhZGRpbmdfZGlzdCIsCj4gLQkubW9kZSA9IDA2NDQsCj4g LX07Cj4gLQo+IC0jaWZkZWYgQ09ORklHX05WTV9QQkxLX0RFQlVHCj4gLXN0YXRpYyBzdHJ1Y3Qg YXR0cmlidXRlIHN5c19zdGF0c19kZWJ1Z19hdHRyID0gewo+IC0JLm5hbWUgPSAic3RhdHMiLAo+ IC0JLm1vZGUgPSAwNDQ0LAo+IC19Owo+IC0jZW5kaWYKPiAtCj4gLXN0YXRpYyBzdHJ1Y3QgYXR0 cmlidXRlICpwYmxrX2F0dHJzW10gPSB7Cj4gLQkmc3lzX3dyaXRlX2x1bnMsCj4gLQkmc3lzX3Jh dGVfbGltaXRlcl9hdHRyLAo+IC0JJnN5c19lcnJvcnNfYXR0ciwKPiAtCSZzeXNfZ2Nfc3RhdGUs Cj4gLQkmc3lzX2djX2ZvcmNlLAo+IC0JJnN5c19tYXhfc2VjX3Blcl93cml0ZSwKPiAtCSZzeXNf cmJfYXR0ciwKPiAtCSZzeXNfc3RhdHNfcHBhZl9hdHRyLAo+IC0JJnN5c19saW5lc19hdHRyLAo+ IC0JJnN5c19saW5lc19pbmZvX2F0dHIsCj4gLQkmc3lzX3dyaXRlX2FtcF9taWxlYWdlLAo+IC0J JnN5c193cml0ZV9hbXBfdHJpcCwKPiAtCSZzeXNfcGFkZGluZ19kaXN0LAo+IC0jaWZkZWYgQ09O RklHX05WTV9QQkxLX0RFQlVHCj4gLQkmc3lzX3N0YXRzX2RlYnVnX2F0dHIsCj4gLSNlbmRpZgo+ IC0JTlVMTCwKPiAtfTsKPiAtCj4gLXN0YXRpYyBzc2l6ZV90IHBibGtfc3lzZnNfc2hvdyhzdHJ1 Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwKPiAtCQkJICAgICAgIGNo YXIgKmJ1ZikKPiAtewo+IC0Jc3RydWN0IHBibGsgKnBibGsgPSBjb250YWluZXJfb2Yoa29iaiwg c3RydWN0IHBibGssIGtvYmopOwo+IC0KPiAtCWlmIChzdHJjbXAoYXR0ci0+bmFtZSwgInJhdGVf bGltaXRlciIpID09IDApCj4gLQkJcmV0dXJuIHBibGtfc3lzZnNfcmF0ZV9saW1pdGVyKHBibGss IGJ1Zik7Cj4gLQllbHNlIGlmIChzdHJjbXAoYXR0ci0+bmFtZSwgIndyaXRlX2x1bnMiKSA9PSAw KQo+IC0JCXJldHVybiBwYmxrX3N5c2ZzX2x1bnNfc2hvdyhwYmxrLCBidWYpOwo+IC0JZWxzZSBp ZiAoc3RyY21wKGF0dHItPm5hbWUsICJnY19zdGF0ZSIpID09IDApCj4gLQkJcmV0dXJuIHBibGtf c3lzZnNfZ2Nfc3RhdGVfc2hvdyhwYmxrLCBidWYpOwo+IC0JZWxzZSBpZiAoc3RyY21wKGF0dHIt Pm5hbWUsICJlcnJvcnMiKSA9PSAwKQo+IC0JCXJldHVybiBwYmxrX3N5c2ZzX3N0YXRzKHBibGss IGJ1Zik7Cj4gLQllbHNlIGlmIChzdHJjbXAoYXR0ci0+bmFtZSwgIndyaXRlX2J1ZmZlciIpID09 IDApCj4gLQkJcmV0dXJuIHBibGtfc3lzZnNfd3JpdGVfYnVmZmVyKHBibGssIGJ1Zik7Cj4gLQll bHNlIGlmIChzdHJjbXAoYXR0ci0+bmFtZSwgInBwYV9mb3JtYXQiKSA9PSAwKQo+IC0JCXJldHVy biBwYmxrX3N5c2ZzX3BwYWYocGJsaywgYnVmKTsKPiAtCWVsc2UgaWYgKHN0cmNtcChhdHRyLT5u YW1lLCAibGluZXMiKSA9PSAwKQo+IC0JCXJldHVybiBwYmxrX3N5c2ZzX2xpbmVzKHBibGssIGJ1 Zik7Cj4gLQllbHNlIGlmIChzdHJjbXAoYXR0ci0+bmFtZSwgImxpbmVzX2luZm8iKSA9PSAwKQo+ IC0JCXJldHVybiBwYmxrX3N5c2ZzX2xpbmVzX2luZm8ocGJsaywgYnVmKTsKPiAtCWVsc2UgaWYg KHN0cmNtcChhdHRyLT5uYW1lLCAibWF4X3NlY19wZXJfd3JpdGUiKSA9PSAwKQo+IC0JCXJldHVy biBwYmxrX3N5c2ZzX2dldF9zZWNfcGVyX3dyaXRlKHBibGssIGJ1Zik7Cj4gLQllbHNlIGlmIChz dHJjbXAoYXR0ci0+bmFtZSwgIndyaXRlX2FtcF9taWxlYWdlIikgPT0gMCkKPiAtCQlyZXR1cm4g cGJsa19zeXNmc19nZXRfd3JpdGVfYW1wX21pbGVhZ2UocGJsaywgYnVmKTsKPiAtCWVsc2UgaWYg KHN0cmNtcChhdHRyLT5uYW1lLCAid3JpdGVfYW1wX3RyaXAiKSA9PSAwKQo+IC0JCXJldHVybiBw YmxrX3N5c2ZzX2dldF93cml0ZV9hbXBfdHJpcChwYmxrLCBidWYpOwo+IC0JZWxzZSBpZiAoc3Ry Y21wKGF0dHItPm5hbWUsICJwYWRkaW5nX2Rpc3QiKSA9PSAwKQo+IC0JCXJldHVybiBwYmxrX3N5 c2ZzX2dldF9wYWRkaW5nX2Rpc3QocGJsaywgYnVmKTsKPiAtI2lmZGVmIENPTkZJR19OVk1fUEJM S19ERUJVRwo+IC0JZWxzZSBpZiAoc3RyY21wKGF0dHItPm5hbWUsICJzdGF0cyIpID09IDApCj4g LQkJcmV0dXJuIHBibGtfc3lzZnNfc3RhdHNfZGVidWcocGJsaywgYnVmKTsKPiAtI2VuZGlmCj4g LQlyZXR1cm4gMDsKPiAtfQo+IC0KPiAtc3RhdGljIHNzaXplX3QgcGJsa19zeXNmc19zdG9yZShz dHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwKPiAtCQkJCWNvbnN0 IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKPiAtewo+IC0Jc3RydWN0IHBibGsgKnBibGsgPSBjb250 YWluZXJfb2Yoa29iaiwgc3RydWN0IHBibGssIGtvYmopOwo+IC0KPiAtCWlmIChzdHJjbXAoYXR0 ci0+bmFtZSwgImdjX2ZvcmNlIikgPT0gMCkKPiAtCQlyZXR1cm4gcGJsa19zeXNmc19nY19mb3Jj ZShwYmxrLCBidWYsIGxlbik7Cj4gLQllbHNlIGlmIChzdHJjbXAoYXR0ci0+bmFtZSwgIm1heF9z ZWNfcGVyX3dyaXRlIikgPT0gMCkKPiAtCQlyZXR1cm4gcGJsa19zeXNmc19zZXRfc2VjX3Blcl93 cml0ZShwYmxrLCBidWYsIGxlbik7Cj4gLQllbHNlIGlmIChzdHJjbXAoYXR0ci0+bmFtZSwgIndy aXRlX2FtcF90cmlwIikgPT0gMCkKPiAtCQlyZXR1cm4gcGJsa19zeXNmc19zZXRfd3JpdGVfYW1w X3RyaXAocGJsaywgYnVmLCBsZW4pOwo+IC0JZWxzZSBpZiAoc3RyY21wKGF0dHItPm5hbWUsICJw YWRkaW5nX2Rpc3QiKSA9PSAwKQo+IC0JCXJldHVybiBwYmxrX3N5c2ZzX3NldF9wYWRkaW5nX2Rp c3QocGJsaywgYnVmLCBsZW4pOwo+IC0JcmV0dXJuIDA7Cj4gLX0KPiAtCj4gLXN0YXRpYyBjb25z dCBzdHJ1Y3Qgc3lzZnNfb3BzIHBibGtfc3lzZnNfb3BzID0gewo+IC0JLnNob3cgPSBwYmxrX3N5 c2ZzX3Nob3csCj4gLQkuc3RvcmUgPSBwYmxrX3N5c2ZzX3N0b3JlLAo+IC19Owo+IC0KPiAtc3Rh dGljIHN0cnVjdCBrb2JqX3R5cGUgcGJsa19rdHlwZSA9IHsKPiAtCS5zeXNmc19vcHMJPSAmcGJs a19zeXNmc19vcHMsCj4gLQkuZGVmYXVsdF9hdHRycwk9IHBibGtfYXR0cnMsCj4gLX07Cj4gLQo+ IC1pbnQgcGJsa19zeXNmc19pbml0KHN0cnVjdCBnZW5kaXNrICp0ZGlzaykKPiAtewo+IC0Jc3Ry dWN0IHBibGsgKnBibGsgPSB0ZGlzay0+cHJpdmF0ZV9kYXRhOwo+IC0Jc3RydWN0IGRldmljZSAq cGFyZW50X2RldiA9IGRpc2tfdG9fZGV2KHBibGstPmRpc2spOwo+IC0JaW50IHJldDsKPiAtCj4g LQlyZXQgPSBrb2JqZWN0X2luaXRfYW5kX2FkZCgmcGJsay0+a29iaiwgJnBibGtfa3R5cGUsCj4g LQkJCQkJa29iamVjdF9nZXQoJnBhcmVudF9kZXYtPmtvYmopLAo+IC0JCQkJCSIlcyIsICJwYmxr Iik7Cj4gLQlpZiAocmV0KSB7Cj4gLQkJcGJsa19lcnIocGJsaywgImNvdWxkIG5vdCByZWdpc3Rl clxuIik7Cj4gLQkJcmV0dXJuIHJldDsKPiAtCX0KPiAtCj4gLQlrb2JqZWN0X3VldmVudCgmcGJs ay0+a29iaiwgS09CSl9BREQpOwo+IC0JcmV0dXJuIDA7Cj4gLX0KPiAtCj4gLXZvaWQgcGJsa19z eXNmc19leGl0KHN0cnVjdCBnZW5kaXNrICp0ZGlzaykKPiAtewo+IC0Jc3RydWN0IHBibGsgKnBi bGsgPSB0ZGlzay0+cHJpdmF0ZV9kYXRhOwo+IC0KPiAtCWtvYmplY3RfdWV2ZW50KCZwYmxrLT5r b2JqLCBLT0JKX1JFTU9WRSk7Cj4gLQlrb2JqZWN0X2RlbCgmcGJsay0+a29iaik7Cj4gLQlrb2Jq ZWN0X3B1dCgmcGJsay0+a29iaik7Cj4gLX0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9saWdodG52 bS9wYmxrLXRyYWNlLmggYi9kcml2ZXJzL2xpZ2h0bnZtL3BibGstdHJhY2UuaAo+IGRlbGV0ZWQg ZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDQ3YjY3YzZiZmY3YS4uMDAwMDAwMDAwMDAwCj4gLS0t IGEvZHJpdmVycy9saWdodG52bS9wYmxrLXRyYWNlLmgKPiArKysgL2Rldi9udWxsCj4gQEAgLTEs MTQ1ICswLDAgQEAKPiAtLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KPiAt I3VuZGVmIFRSQUNFX1NZU1RFTQo+IC0jZGVmaW5lIFRSQUNFX1NZU1RFTSBwYmxrCj4gLQo+IC0j aWYgIWRlZmluZWQoX1RSQUNFX1BCTEtfSCkgfHwgZGVmaW5lZChUUkFDRV9IRUFERVJfTVVMVElf UkVBRCkKPiAtI2RlZmluZSBfVFJBQ0VfUEJMS19ICj4gLQo+IC0jaW5jbHVkZSA8bGludXgvdHJh Y2Vwb2ludC5oPgo+IC0KPiAtc3RydWN0IHBwYV9hZGRyOwo+IC0KPiAtI2RlZmluZSBzaG93X2No dW5rX2ZsYWdzKHN0YXRlKSBfX3ByaW50X2ZsYWdzKHN0YXRlLCAiIiwJXAo+IC0JeyBOVk1fQ0hL X1NUX0ZSRUUsCQkiRlJFRSIsCQl9LAlcCj4gLQl7IE5WTV9DSEtfU1RfQ0xPU0VELAkJIkNMT1NF RCIsCX0sCVwKPiAtCXsgTlZNX0NIS19TVF9PUEVOLAkJIk9QRU4iLAkJfSwJXAo+IC0JeyBOVk1f Q0hLX1NUX09GRkxJTkUsCQkiT0ZGTElORSIsCX0pCj4gLQo+IC0jZGVmaW5lIHNob3dfbGluZV9z dGF0ZShzdGF0ZSkgX19wcmludF9zeW1ib2xpYyhzdGF0ZSwJCVwKPiAtCXsgUEJMS19MSU5FU1RB VEVfTkVXLAkJIk5FVyIsCQl9LAlcCj4gLQl7IFBCTEtfTElORVNUQVRFX0ZSRUUsCQkiRlJFRSIs CQl9LAlcCj4gLQl7IFBCTEtfTElORVNUQVRFX09QRU4sCQkiT1BFTiIsCQl9LAlcCj4gLQl7IFBC TEtfTElORVNUQVRFX0NMT1NFRCwJIkNMT1NFRCIsCX0sCVwKPiAtCXsgUEJMS19MSU5FU1RBVEVf R0MsCQkiR0MiLAkJfSwJXAo+IC0JeyBQQkxLX0xJTkVTVEFURV9CQUQsCQkiQkFEIiwJCX0sCVwK PiAtCXsgUEJMS19MSU5FU1RBVEVfQ09SUlVQVCwJIkNPUlJVUFQiCX0pCj4gLQo+IC0KPiAtI2Rl ZmluZSBzaG93X3BibGtfc3RhdGUoc3RhdGUpIF9fcHJpbnRfc3ltYm9saWMoc3RhdGUsCQlcCj4g LQl7IFBCTEtfU1RBVEVfUlVOTklORywJCSJSVU5OSU5HIiwJfSwJXAo+IC0JeyBQQkxLX1NUQVRF X1NUT1BQSU5HLAkJIlNUT1BQSU5HIiwJfSwJXAo+IC0JeyBQQkxLX1NUQVRFX1JFQ09WRVJJTkcs CSJSRUNPVkVSSU5HIiwJfSwJXAo+IC0JeyBQQkxLX1NUQVRFX1NUT1BQRUQsCQkiU1RPUFBFRCIJ fSkKPiAtCj4gLSNkZWZpbmUgc2hvd19jaHVua19lcmFzZV9zdGF0ZShzdGF0ZSkgX19wcmludF9z eW1ib2xpYyhzdGF0ZSwJXAo+IC0JeyBQQkxLX0NIVU5LX1JFU0VUX1NUQVJULAkiU1RBUlQiLAl9 LAlcCj4gLQl7IFBCTEtfQ0hVTktfUkVTRVRfRE9ORSwJIk9LIiwJCX0sCVwKPiAtCXsgUEJMS19D SFVOS19SRVNFVF9GQUlMRUQsCSJGQUlMRUQiCX0pCj4gLQo+IC0KPiAtVFJBQ0VfRVZFTlQocGJs a19jaHVua19yZXNldCwKPiAtCj4gLQlUUF9QUk9UTyhjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qg cHBhX2FkZHIgKnBwYSwgaW50IHN0YXRlKSwKPiAtCj4gLQlUUF9BUkdTKG5hbWUsIHBwYSwgc3Rh dGUpLAo+IC0KPiAtCVRQX1NUUlVDVF9fZW50cnkoCj4gLQkJX19zdHJpbmcobmFtZSwgbmFtZSkK PiAtCQlfX2ZpZWxkKHU2NCwgcHBhKQo+IC0JCV9fZmllbGQoaW50LCBzdGF0ZSkKPiAtCSksCj4g LQo+IC0JVFBfZmFzdF9hc3NpZ24oCj4gLQkJX19hc3NpZ25fc3RyKG5hbWUsIG5hbWUpOwo+IC0J CV9fZW50cnktPnBwYSA9IHBwYS0+cHBhOwo+IC0JCV9fZW50cnktPnN0YXRlID0gc3RhdGU7Cj4g LQkpLAo+IC0KPiAtCVRQX3ByaW50aygiZGV2PSVzIGdycD0lbGx1IHB1PSVsbHUgY2hrPSVsbHUg c3RhdGU9JXMiLCBfX2dldF9zdHIobmFtZSksCj4gLQkJCSh1NjQpKCgoc3RydWN0IHBwYV9hZGRy ICopKCZfX2VudHJ5LT5wcGEpKS0+bS5ncnApLAo+IC0JCQkodTY0KSgoKHN0cnVjdCBwcGFfYWRk ciAqKSgmX19lbnRyeS0+cHBhKSktPm0ucHUpLAo+IC0JCQkodTY0KSgoKHN0cnVjdCBwcGFfYWRk ciAqKSgmX19lbnRyeS0+cHBhKSktPm0uY2hrKSwKPiAtCQkJc2hvd19jaHVua19lcmFzZV9zdGF0 ZSgoaW50KV9fZW50cnktPnN0YXRlKSkKPiAtCj4gLSk7Cj4gLQo+IC1UUkFDRV9FVkVOVChwYmxr X2NodW5rX3N0YXRlLAo+IC0KPiAtCVRQX1BST1RPKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBw cGFfYWRkciAqcHBhLCBpbnQgc3RhdGUpLAo+IC0KPiAtCVRQX0FSR1MobmFtZSwgcHBhLCBzdGF0 ZSksCj4gLQo+IC0JVFBfU1RSVUNUX19lbnRyeSgKPiAtCQlfX3N0cmluZyhuYW1lLCBuYW1lKQo+ IC0JCV9fZmllbGQodTY0LCBwcGEpCj4gLQkJX19maWVsZChpbnQsIHN0YXRlKQo+IC0JKSwKPiAt Cj4gLQlUUF9mYXN0X2Fzc2lnbigKPiAtCQlfX2Fzc2lnbl9zdHIobmFtZSwgbmFtZSk7Cj4gLQkJ X19lbnRyeS0+cHBhID0gcHBhLT5wcGE7Cj4gLQkJX19lbnRyeS0+c3RhdGUgPSBzdGF0ZTsKPiAt CSksCj4gLQo+IC0JVFBfcHJpbnRrKCJkZXY9JXMgZ3JwPSVsbHUgcHU9JWxsdSBjaGs9JWxsdSBz dGF0ZT0lcyIsIF9fZ2V0X3N0cihuYW1lKSwKPiAtCQkJKHU2NCkoKChzdHJ1Y3QgcHBhX2FkZHIg KikoJl9fZW50cnktPnBwYSkpLT5tLmdycCksCj4gLQkJCSh1NjQpKCgoc3RydWN0IHBwYV9hZGRy ICopKCZfX2VudHJ5LT5wcGEpKS0+bS5wdSksCj4gLQkJCSh1NjQpKCgoc3RydWN0IHBwYV9hZGRy ICopKCZfX2VudHJ5LT5wcGEpKS0+bS5jaGspLAo+IC0JCQlzaG93X2NodW5rX2ZsYWdzKChpbnQp X19lbnRyeS0+c3RhdGUpKQo+IC0KPiAtKTsKPiAtCj4gLVRSQUNFX0VWRU5UKHBibGtfbGluZV9z dGF0ZSwKPiAtCj4gLQlUUF9QUk9UTyhjb25zdCBjaGFyICpuYW1lLCBpbnQgbGluZSwgaW50IHN0 YXRlKSwKPiAtCj4gLQlUUF9BUkdTKG5hbWUsIGxpbmUsIHN0YXRlKSwKPiAtCj4gLQlUUF9TVFJV Q1RfX2VudHJ5KAo+IC0JCV9fc3RyaW5nKG5hbWUsIG5hbWUpCj4gLQkJX19maWVsZChpbnQsIGxp bmUpCj4gLQkJX19maWVsZChpbnQsIHN0YXRlKQo+IC0JKSwKPiAtCj4gLQlUUF9mYXN0X2Fzc2ln bigKPiAtCQlfX2Fzc2lnbl9zdHIobmFtZSwgbmFtZSk7Cj4gLQkJX19lbnRyeS0+bGluZSA9IGxp bmU7Cj4gLQkJX19lbnRyeS0+c3RhdGUgPSBzdGF0ZTsKPiAtCSksCj4gLQo+IC0JVFBfcHJpbnRr KCJkZXY9JXMgbGluZT0lZCBzdGF0ZT0lcyIsIF9fZ2V0X3N0cihuYW1lKSwKPiAtCQkJKGludClf X2VudHJ5LT5saW5lLAo+IC0JCQlzaG93X2xpbmVfc3RhdGUoKGludClfX2VudHJ5LT5zdGF0ZSkp Cj4gLQo+IC0pOwo+IC0KPiAtVFJBQ0VfRVZFTlQocGJsa19zdGF0ZSwKPiAtCj4gLQlUUF9QUk9U Tyhjb25zdCBjaGFyICpuYW1lLCBpbnQgc3RhdGUpLAo+IC0KPiAtCVRQX0FSR1MobmFtZSwgc3Rh dGUpLAo+IC0KPiAtCVRQX1NUUlVDVF9fZW50cnkoCj4gLQkJX19zdHJpbmcobmFtZSwgbmFtZSkK PiAtCQlfX2ZpZWxkKGludCwgc3RhdGUpCj4gLQkpLAo+IC0KPiAtCVRQX2Zhc3RfYXNzaWduKAo+ IC0JCV9fYXNzaWduX3N0cihuYW1lLCBuYW1lKTsKPiAtCQlfX2VudHJ5LT5zdGF0ZSA9IHN0YXRl Owo+IC0JKSwKPiAtCj4gLQlUUF9wcmludGsoImRldj0lcyBzdGF0ZT0lcyIsIF9fZ2V0X3N0cihu YW1lKSwKPiAtCQkJc2hvd19wYmxrX3N0YXRlKChpbnQpX19lbnRyeS0+c3RhdGUpKQo+IC0KPiAt KTsKPiAtCj4gLSNlbmRpZiAvKiAhZGVmaW5lZChfVFJBQ0VfUEJMS19IKSB8fCBkZWZpbmVkKFRS QUNFX0hFQURFUl9NVUxUSV9SRUFEKSAqLwo+IC0KPiAtLyogVGhpcyBwYXJ0IG11c3QgYmUgb3V0 c2lkZSBwcm90ZWN0aW9uICovCj4gLQo+IC0jdW5kZWYgVFJBQ0VfSU5DTFVERV9QQVRICj4gLSNk ZWZpbmUgVFJBQ0VfSU5DTFVERV9QQVRIIC4uLy4uL2RyaXZlcnMvbGlnaHRudm0KPiAtI3VuZGVm IFRSQUNFX0lOQ0xVREVfRklMRQo+IC0jZGVmaW5lIFRSQUNFX0lOQ0xVREVfRklMRSBwYmxrLXRy YWNlCj4gLSNpbmNsdWRlIDx0cmFjZS9kZWZpbmVfdHJhY2UuaD4KPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9saWdodG52bS9wYmxrLXdyaXRlLmMgYi9kcml2ZXJzL2xpZ2h0bnZtL3BibGstd3JpdGUu Ywo+IGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IGI5YTJhZWJhOTVhYi4uMDAwMDAw MDAwMDAwCj4gLS0tIGEvZHJpdmVycy9saWdodG52bS9wYmxrLXdyaXRlLmMKPiArKysgL2Rldi9u dWxsCj4gQEAgLTEsNjY1ICswLDAgQEAKPiAtLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQ TC0yLjAKPiAtLyoKPiAtICogQ29weXJpZ2h0IChDKSAyMDE2IENORVggTGFicwo+IC0gKiBJbml0 aWFsIHJlbGVhc2U6IEphdmllciBHb256YWxleiA8amF2aWVyQGNuZXhsYWJzLmNvbT4KPiAtICog ICAgICAgICAgICAgICAgICBNYXRpYXMgQmpvcmxpbmcgPG1hdGlhc0BjbmV4bGFicy5jb20+Cj4g LSAqCj4gLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IKPiAtICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbgo+IC0gKiAyIGFzIHB1Ymxpc2hlZCBieSB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgo+IC0gKgo+IC0gKiBUaGlzIHByb2dyYW0gaXMg ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Cj4gLSAq IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg b2YKPiAtICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLiAgU2VlIHRoZSBHTlUKPiAtICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk ZXRhaWxzLgo+IC0gKgo+IC0gKiBwYmxrLXdyaXRlLmMgLSBwYmxrJ3Mgd3JpdGUgcGF0aCBmcm9t IHdyaXRlIGJ1ZmZlciB0byBtZWRpYQo+IC0gKi8KPiAtCj4gLSNpbmNsdWRlICJwYmxrLmgiCj4g LSNpbmNsdWRlICJwYmxrLXRyYWNlLmgiCj4gLQo+IC1zdGF0aWMgdW5zaWduZWQgbG9uZyBwYmxr X2VuZF93X2JpbyhzdHJ1Y3QgcGJsayAqcGJsaywgc3RydWN0IG52bV9ycSAqcnFkLAo+IC0JCQkJ ICAgIHN0cnVjdCBwYmxrX2NfY3R4ICpjX2N0eCkKPiAtewo+IC0Jc3RydWN0IGJpbyAqb3JpZ2lu YWxfYmlvOwo+IC0Jc3RydWN0IHBibGtfcmIgKnJ3YiA9ICZwYmxrLT5yd2I7Cj4gLQl1bnNpZ25l ZCBsb25nIHJldDsKPiAtCWludCBpOwo+IC0KPiAtCWZvciAoaSA9IDA7IGkgPCBjX2N0eC0+bnJf dmFsaWQ7IGkrKykgewo+IC0JCXN0cnVjdCBwYmxrX3dfY3R4ICp3X2N0eDsKPiAtCQlpbnQgcG9z ID0gY19jdHgtPnNlbnRyeSArIGk7Cj4gLQkJaW50IGZsYWdzOwo+IC0KPiAtCQl3X2N0eCA9IHBi bGtfcmJfd19jdHgocndiLCBwb3MpOwo+IC0JCWZsYWdzID0gUkVBRF9PTkNFKHdfY3R4LT5mbGFn cyk7Cj4gLQo+IC0JCWlmIChmbGFncyAmIFBCTEtfRkxVU0hfRU5UUlkpIHsKPiAtCQkJZmxhZ3Mg Jj0gflBCTEtfRkxVU0hfRU5UUlk7Cj4gLQkJCS8qIFJlbGVhc2UgZmxhZ3Mgb24gY29udGV4dC4g UHJvdGVjdCBmcm9tIHdyaXRlcyAqLwo+IC0JCQlzbXBfc3RvcmVfcmVsZWFzZSgmd19jdHgtPmZs YWdzLCBmbGFncyk7Cj4gLQo+IC0jaWZkZWYgQ09ORklHX05WTV9QQkxLX0RFQlVHCj4gLQkJCWF0 b21pY19kZWMoJnJ3Yi0+aW5mbGlnaHRfZmx1c2hfcG9pbnQpOwo+IC0jZW5kaWYKPiAtCQl9Cj4g LQo+IC0JCXdoaWxlICgob3JpZ2luYWxfYmlvID0gYmlvX2xpc3RfcG9wKCZ3X2N0eC0+Ymlvcykp KQo+IC0JCQliaW9fZW5kaW8ob3JpZ2luYWxfYmlvKTsKPiAtCX0KPiAtCj4gLQlpZiAoY19jdHgt Pm5yX3BhZGRlZCkKPiAtCQlwYmxrX2Jpb19mcmVlX3BhZ2VzKHBibGssIHJxZC0+YmlvLCBjX2N0 eC0+bnJfdmFsaWQsCj4gLQkJCQkJCQljX2N0eC0+bnJfcGFkZGVkKTsKPiAtCj4gLSNpZmRlZiBD T05GSUdfTlZNX1BCTEtfREVCVUcKPiAtCWF0b21pY19sb25nX2FkZChycWQtPm5yX3BwYXMsICZw YmxrLT5zeW5jX3dyaXRlcyk7Cj4gLSNlbmRpZgo+IC0KPiAtCXJldCA9IHBibGtfcmJfc3luY19h ZHZhbmNlKCZwYmxrLT5yd2IsIGNfY3R4LT5ucl92YWxpZCk7Cj4gLQo+IC0JYmlvX3B1dChycWQt PmJpbyk7Cj4gLQlwYmxrX2ZyZWVfcnFkKHBibGssIHJxZCwgUEJMS19XUklURSk7Cj4gLQo+IC0J cmV0dXJuIHJldDsKPiAtfQo+IC0KPiAtc3RhdGljIHVuc2lnbmVkIGxvbmcgcGJsa19lbmRfcXVl dWVkX3dfYmlvKHN0cnVjdCBwYmxrICpwYmxrLAo+IC0JCQkJCSAgIHN0cnVjdCBudm1fcnEgKnJx ZCwKPiAtCQkJCQkgICBzdHJ1Y3QgcGJsa19jX2N0eCAqY19jdHgpCj4gLXsKPiAtCWxpc3RfZGVs KCZjX2N0eC0+bGlzdCk7Cj4gLQlyZXR1cm4gcGJsa19lbmRfd19iaW8ocGJsaywgcnFkLCBjX2N0 eCk7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIHBibGtfY29tcGxldGVfd3JpdGUoc3RydWN0IHBi bGsgKnBibGssIHN0cnVjdCBudm1fcnEgKnJxZCwKPiAtCQkJCXN0cnVjdCBwYmxrX2NfY3R4ICpj X2N0eCkKPiAtewo+IC0Jc3RydWN0IHBibGtfY19jdHggKmMsICpyOwo+IC0JdW5zaWduZWQgbG9u ZyBmbGFnczsKPiAtCXVuc2lnbmVkIGxvbmcgcG9zOwo+IC0KPiAtI2lmZGVmIENPTkZJR19OVk1f UEJMS19ERUJVRwo+IC0JYXRvbWljX2xvbmdfc3ViKGNfY3R4LT5ucl92YWxpZCwgJnBibGstPmlu ZmxpZ2h0X3dyaXRlcyk7Cj4gLSNlbmRpZgo+IC0JcGJsa191cF9ycShwYmxrLCBjX2N0eC0+bHVu X2JpdG1hcCk7Cj4gLQo+IC0JcG9zID0gcGJsa19yYl9zeW5jX2luaXQoJnBibGstPnJ3YiwgJmZs YWdzKTsKPiAtCWlmIChwb3MgPT0gY19jdHgtPnNlbnRyeSkgewo+IC0JCXBvcyA9IHBibGtfZW5k X3dfYmlvKHBibGssIHJxZCwgY19jdHgpOwo+IC0KPiAtcmV0cnk6Cj4gLQkJbGlzdF9mb3JfZWFj aF9lbnRyeV9zYWZlKGMsIHIsICZwYmxrLT5jb21wbF9saXN0LCBsaXN0KSB7Cj4gLQkJCXJxZCA9 IG52bV9ycV9mcm9tX2NfY3R4KGMpOwo+IC0JCQlpZiAoYy0+c2VudHJ5ID09IHBvcykgewo+IC0J CQkJcG9zID0gcGJsa19lbmRfcXVldWVkX3dfYmlvKHBibGssIHJxZCwgYyk7Cj4gLQkJCQlnb3Rv IHJldHJ5Owo+IC0JCQl9Cj4gLQkJfQo+IC0JfSBlbHNlIHsKPiAtCQlXQVJOX09OKG52bV9ycV9m cm9tX2NfY3R4KGNfY3R4KSAhPSBycWQpOwo+IC0JCWxpc3RfYWRkX3RhaWwoJmNfY3R4LT5saXN0 LCAmcGJsay0+Y29tcGxfbGlzdCk7Cj4gLQl9Cj4gLQlwYmxrX3JiX3N5bmNfZW5kKCZwYmxrLT5y d2IsICZmbGFncyk7Cj4gLX0KPiAtCj4gLS8qIE1hcCByZW1haW5pbmcgc2VjdG9ycyBpbiBjaHVu aywgc3RhcnRpbmcgZnJvbSBwcGEgKi8KPiAtc3RhdGljIHZvaWQgcGJsa19tYXBfcmVtYWluaW5n KHN0cnVjdCBwYmxrICpwYmxrLCBzdHJ1Y3QgcHBhX2FkZHIgKnBwYSwKPiAtCQlpbnQgcnFkX3Bw YXMpCj4gLXsKPiAtCXN0cnVjdCBwYmxrX2xpbmUgKmxpbmU7Cj4gLQlzdHJ1Y3QgcHBhX2FkZHIg bWFwX3BwYSA9ICpwcGE7Cj4gLQlfX2xlNjQgYWRkcl9lbXB0eSA9IGNwdV90b19sZTY0KEFERFJf RU1QVFkpOwo+IC0JX19sZTY0ICpsYmFfbGlzdDsKPiAtCXU2NCBwYWRkcjsKPiAtCWludCBkb25l ID0gMDsKPiAtCWludCBuID0gMDsKPiAtCj4gLQlsaW5lID0gcGJsa19wcGFfdG9fbGluZShwYmxr LCAqcHBhKTsKPiAtCWxiYV9saXN0ID0gZW1ldGFfdG9fbGJhcyhwYmxrLCBsaW5lLT5lbWV0YS0+ YnVmKTsKPiAtCj4gLQlzcGluX2xvY2soJmxpbmUtPmxvY2spOwo+IC0KPiAtCXdoaWxlICghZG9u ZSkgIHsKPiAtCQlwYWRkciA9IHBibGtfZGV2X3BwYV90b19saW5lX2FkZHIocGJsaywgbWFwX3Bw YSk7Cj4gLQo+IC0JCWlmICghdGVzdF9hbmRfc2V0X2JpdChwYWRkciwgbGluZS0+bWFwX2JpdG1h cCkpCj4gLQkJCWxpbmUtPmxlZnRfbXNlY3MtLTsKPiAtCj4gLQkJaWYgKG4gPCBycWRfcHBhcyAm JiBsYmFfbGlzdFtwYWRkcl0gIT0gYWRkcl9lbXB0eSkKPiAtCQkJbGluZS0+bnJfdmFsaWRfbGJh cy0tOwo+IC0KPiAtCQlsYmFfbGlzdFtwYWRkcl0gPSBhZGRyX2VtcHR5Owo+IC0KPiAtCQlpZiAo IXRlc3RfYW5kX3NldF9iaXQocGFkZHIsIGxpbmUtPmludmFsaWRfYml0bWFwKSkKPiAtCQkJbGUz Ml9hZGRfY3B1KGxpbmUtPnZzYywgLTEpOwo+IC0KPiAtCQlkb25lID0gbnZtX25leHRfcHBhX2lu X2NoayhwYmxrLT5kZXYsICZtYXBfcHBhKTsKPiAtCj4gLQkJbisrOwo+IC0JfQo+IC0KPiAtCWxp bmUtPndfZXJyX2djLT5oYXNfd3JpdGVfZXJyID0gMTsKPiAtCXNwaW5fdW5sb2NrKCZsaW5lLT5s b2NrKTsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgcGJsa19wcmVwYXJlX3Jlc3VibWl0KHN0cnVj dCBwYmxrICpwYmxrLCB1bnNpZ25lZCBpbnQgc2VudHJ5LAo+IC0JCQkJICB1bnNpZ25lZCBpbnQg bnJfZW50cmllcykKPiAtewo+IC0Jc3RydWN0IHBibGtfcmIgKnJiID0gJnBibGstPnJ3YjsKPiAt CXN0cnVjdCBwYmxrX3JiX2VudHJ5ICplbnRyeTsKPiAtCXN0cnVjdCBwYmxrX2xpbmUgKmxpbmU7 Cj4gLQlzdHJ1Y3QgcGJsa193X2N0eCAqd19jdHg7Cj4gLQlzdHJ1Y3QgcHBhX2FkZHIgcHBhX2wy cDsKPiAtCWludCBmbGFnczsKPiAtCXVuc2lnbmVkIGludCBpOwo+IC0KPiAtCXNwaW5fbG9jaygm cGJsay0+dHJhbnNfbG9jayk7Cj4gLQlmb3IgKGkgPSAwOyBpIDwgbnJfZW50cmllczsgaSsrKSB7 Cj4gLQkJZW50cnkgPSAmcmItPmVudHJpZXNbcGJsa19yYl9wdHJfd3JhcChyYiwgc2VudHJ5LCBp KV07Cj4gLQkJd19jdHggPSAmZW50cnktPndfY3R4Owo+IC0KPiAtCQkvKiBDaGVjayBpZiB0aGUg bGJhIGhhcyBiZWVuIG92ZXJ3cml0dGVuICovCj4gLQkJaWYgKHdfY3R4LT5sYmEgIT0gQUREUl9F TVBUWSkgewo+IC0JCQlwcGFfbDJwID0gcGJsa190cmFuc19tYXBfZ2V0KHBibGssIHdfY3R4LT5s YmEpOwo+IC0JCQlpZiAoIXBibGtfcHBhX2NvbXAocHBhX2wycCwgZW50cnktPmNhY2hlbGluZSkp Cj4gLQkJCQl3X2N0eC0+bGJhID0gQUREUl9FTVBUWTsKPiAtCQl9Cj4gLQo+IC0JCS8qIE1hcmsg dXAgdGhlIGVudHJ5IGFzIHN1Ym1pdHRhYmxlIGFnYWluICovCj4gLQkJZmxhZ3MgPSBSRUFEX09O Q0Uod19jdHgtPmZsYWdzKTsKPiAtCQlmbGFncyB8PSBQQkxLX1dSSVRURU5fREFUQTsKPiAtCQkv KiBSZWxlYXNlIGZsYWdzIG9uIHdyaXRlIGNvbnRleHQuIFByb3RlY3QgZnJvbSB3cml0ZXMgKi8K PiAtCQlzbXBfc3RvcmVfcmVsZWFzZSgmd19jdHgtPmZsYWdzLCBmbGFncyk7Cj4gLQo+IC0JCS8q IERlY3JlYXNlIHRoZSByZWZlcmVuY2UgY291bnQgdG8gdGhlIGxpbmUgYXMgd2Ugd2lsbAo+IC0J CSAqIHJlLW1hcCB0aGVzZSBlbnRyaWVzCj4gLQkJICovCj4gLQkJbGluZSA9IHBibGtfcHBhX3Rv X2xpbmUocGJsaywgd19jdHgtPnBwYSk7Cj4gLQkJYXRvbWljX2RlYygmbGluZS0+c2VjX3RvX3Vw ZGF0ZSk7Cj4gLQkJa3JlZl9wdXQoJmxpbmUtPnJlZiwgcGJsa19saW5lX3B1dCk7Cj4gLQl9Cj4g LQlzcGluX3VubG9jaygmcGJsay0+dHJhbnNfbG9jayk7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lk IHBibGtfcXVldWVfcmVzdWJtaXQoc3RydWN0IHBibGsgKnBibGssIHN0cnVjdCBwYmxrX2NfY3R4 ICpjX2N0eCkKPiAtewo+IC0Jc3RydWN0IHBibGtfY19jdHggKnJfY3R4Owo+IC0KPiAtCXJfY3R4 ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBibGtfY19jdHgpLCBHRlBfS0VSTkVMKTsKPiAtCWlm ICghcl9jdHgpCj4gLQkJcmV0dXJuOwo+IC0KPiAtCXJfY3R4LT5sdW5fYml0bWFwID0gTlVMTDsK PiAtCXJfY3R4LT5zZW50cnkgPSBjX2N0eC0+c2VudHJ5Owo+IC0Jcl9jdHgtPm5yX3ZhbGlkID0g Y19jdHgtPm5yX3ZhbGlkOwo+IC0Jcl9jdHgtPm5yX3BhZGRlZCA9IGNfY3R4LT5ucl9wYWRkZWQ7 Cj4gLQo+IC0Jc3Bpbl9sb2NrKCZwYmxrLT5yZXN1Ym1pdF9sb2NrKTsKPiAtCWxpc3RfYWRkX3Rh aWwoJnJfY3R4LT5saXN0LCAmcGJsay0+cmVzdWJtaXRfbGlzdCk7Cj4gLQlzcGluX3VubG9jaygm cGJsay0+cmVzdWJtaXRfbG9jayk7Cj4gLQo+IC0jaWZkZWYgQ09ORklHX05WTV9QQkxLX0RFQlVH Cj4gLQlhdG9taWNfbG9uZ19hZGQoY19jdHgtPm5yX3ZhbGlkLCAmcGJsay0+cmVjb3Zfd3JpdGVz KTsKPiAtI2VuZGlmCj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIHBibGtfc3VibWl0X3JlYyhzdHJ1 Y3Qgd29ya19zdHJ1Y3QgKndvcmspCj4gLXsKPiAtCXN0cnVjdCBwYmxrX3JlY19jdHggKnJlY292 ZXJ5ID0KPiAtCQkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBwYmxrX3JlY19jdHgsIHdzX3Jl Yyk7Cj4gLQlzdHJ1Y3QgcGJsayAqcGJsayA9IHJlY292ZXJ5LT5wYmxrOwo+IC0Jc3RydWN0IG52 bV9ycSAqcnFkID0gcmVjb3ZlcnktPnJxZDsKPiAtCXN0cnVjdCBwYmxrX2NfY3R4ICpjX2N0eCA9 IG52bV9ycV90b19wZHUocnFkKTsKPiAtCXN0cnVjdCBwcGFfYWRkciAqcHBhX2xpc3QgPSBudm1f cnFfdG9fcHBhX2xpc3QocnFkKTsKPiAtCj4gLQlwYmxrX2xvZ193cml0ZV9lcnIocGJsaywgcnFk KTsKPiAtCj4gLQlwYmxrX21hcF9yZW1haW5pbmcocGJsaywgcHBhX2xpc3QsIHJxZC0+bnJfcHBh cyk7Cj4gLQlwYmxrX3F1ZXVlX3Jlc3VibWl0KHBibGssIGNfY3R4KTsKPiAtCj4gLQlwYmxrX3Vw X3JxKHBibGssIGNfY3R4LT5sdW5fYml0bWFwKTsKPiAtCWlmIChjX2N0eC0+bnJfcGFkZGVkKQo+ IC0JCXBibGtfYmlvX2ZyZWVfcGFnZXMocGJsaywgcnFkLT5iaW8sIGNfY3R4LT5ucl92YWxpZCwK PiAtCQkJCQkJCWNfY3R4LT5ucl9wYWRkZWQpOwo+IC0JYmlvX3B1dChycWQtPmJpbyk7Cj4gLQlw YmxrX2ZyZWVfcnFkKHBibGssIHJxZCwgUEJMS19XUklURSk7Cj4gLQltZW1wb29sX2ZyZWUocmVj b3ZlcnksICZwYmxrLT5yZWNfcG9vbCk7Cj4gLQo+IC0JYXRvbWljX2RlYygmcGJsay0+aW5mbGln aHRfaW8pOwo+IC0JcGJsa193cml0ZV9raWNrKHBibGspOwo+IC19Cj4gLQo+IC0KPiAtc3RhdGlj IHZvaWQgcGJsa19lbmRfd19mYWlsKHN0cnVjdCBwYmxrICpwYmxrLCBzdHJ1Y3QgbnZtX3JxICpy cWQpCj4gLXsKPiAtCXN0cnVjdCBwYmxrX3JlY19jdHggKnJlY292ZXJ5Owo+IC0KPiAtCXJlY292 ZXJ5ID0gbWVtcG9vbF9hbGxvYygmcGJsay0+cmVjX3Bvb2wsIEdGUF9BVE9NSUMpOwo+IC0JaWYg KCFyZWNvdmVyeSkgewo+IC0JCXBibGtfZXJyKHBibGssICJjb3VsZCBub3QgYWxsb2NhdGUgcmVj b3Zlcnkgd29ya1xuIik7Cj4gLQkJcmV0dXJuOwo+IC0JfQo+IC0KPiAtCXJlY292ZXJ5LT5wYmxr ID0gcGJsazsKPiAtCXJlY292ZXJ5LT5ycWQgPSBycWQ7Cj4gLQo+IC0JSU5JVF9XT1JLKCZyZWNv dmVyeS0+d3NfcmVjLCBwYmxrX3N1Ym1pdF9yZWMpOwo+IC0JcXVldWVfd29yayhwYmxrLT5jbG9z ZV93cSwgJnJlY292ZXJ5LT53c19yZWMpOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBwYmxrX2Vu ZF9pb193cml0ZShzdHJ1Y3QgbnZtX3JxICpycWQpCj4gLXsKPiAtCXN0cnVjdCBwYmxrICpwYmxr ID0gcnFkLT5wcml2YXRlOwo+IC0Jc3RydWN0IHBibGtfY19jdHggKmNfY3R4ID0gbnZtX3JxX3Rv X3BkdShycWQpOwo+IC0KPiAtCWlmIChycWQtPmVycm9yKSB7Cj4gLQkJcGJsa19lbmRfd19mYWls KHBibGssIHJxZCk7Cj4gLQkJcmV0dXJuOwo+IC0JfSBlbHNlIHsKPiAtCQlpZiAodHJhY2VfcGJs a19jaHVua19zdGF0ZV9lbmFibGVkKCkpCj4gLQkJCXBibGtfY2hlY2tfY2h1bmtfc3RhdGVfdXBk YXRlKHBibGssIHJxZCk7Cj4gLSNpZmRlZiBDT05GSUdfTlZNX1BCTEtfREVCVUcKPiAtCQlXQVJO X09OQ0UocnFkLT5iaW8tPmJpX3N0YXR1cywgInBibGs6IGNvcnJ1cHRlZCB3cml0ZSBlcnJvclxu Iik7Cj4gLSNlbmRpZgo+IC0JfQo+IC0KPiAtCXBibGtfY29tcGxldGVfd3JpdGUocGJsaywgcnFk LCBjX2N0eCk7Cj4gLQlhdG9taWNfZGVjKCZwYmxrLT5pbmZsaWdodF9pbyk7Cj4gLX0KPiAtCj4g LXN0YXRpYyB2b2lkIHBibGtfZW5kX2lvX3dyaXRlX21ldGEoc3RydWN0IG52bV9ycSAqcnFkKQo+ IC17Cj4gLQlzdHJ1Y3QgcGJsayAqcGJsayA9IHJxZC0+cHJpdmF0ZTsKPiAtCXN0cnVjdCBwYmxr X2dfY3R4ICptX2N0eCA9IG52bV9ycV90b19wZHUocnFkKTsKPiAtCXN0cnVjdCBwYmxrX2xpbmUg KmxpbmUgPSBtX2N0eC0+cHJpdmF0ZTsKPiAtCXN0cnVjdCBwYmxrX2VtZXRhICplbWV0YSA9IGxp bmUtPmVtZXRhOwo+IC0Jc3RydWN0IHBwYV9hZGRyICpwcGFfbGlzdCA9IG52bV9ycV90b19wcGFf bGlzdChycWQpOwo+IC0JaW50IHN5bmM7Cj4gLQo+IC0JcGJsa191cF9jaHVuayhwYmxrLCBwcGFf bGlzdFswXSk7Cj4gLQo+IC0JaWYgKHJxZC0+ZXJyb3IpIHsKPiAtCQlwYmxrX2xvZ193cml0ZV9l cnIocGJsaywgcnFkKTsKPiAtCQlwYmxrX2VycihwYmxrLCAibWV0YWRhdGEgSS9PIGZhaWxlZC4g TGluZSAlZFxuIiwgbGluZS0+aWQpOwo+IC0JCWxpbmUtPndfZXJyX2djLT5oYXNfd3JpdGVfZXJy ID0gMTsKPiAtCX0gZWxzZSB7Cj4gLQkJaWYgKHRyYWNlX3BibGtfY2h1bmtfc3RhdGVfZW5hYmxl ZCgpKQo+IC0JCQlwYmxrX2NoZWNrX2NodW5rX3N0YXRlX3VwZGF0ZShwYmxrLCBycWQpOwo+IC0J fQo+IC0KPiAtCXN5bmMgPSBhdG9taWNfYWRkX3JldHVybihycWQtPm5yX3BwYXMsICZlbWV0YS0+ c3luYyk7Cj4gLQlpZiAoc3luYyA9PSBlbWV0YS0+bnJfZW50cmllcykKPiAtCQlwYmxrX2dlbl9y dW5fd3MocGJsaywgbGluZSwgTlVMTCwgcGJsa19saW5lX2Nsb3NlX3dzLAo+IC0JCQkJCQlHRlBf QVRPTUlDLCBwYmxrLT5jbG9zZV93cSk7Cj4gLQo+IC0JcGJsa19mcmVlX3JxZChwYmxrLCBycWQs IFBCTEtfV1JJVEVfSU5UKTsKPiAtCj4gLQlhdG9taWNfZGVjKCZwYmxrLT5pbmZsaWdodF9pbyk7 Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbnQgcGJsa19hbGxvY193X3JxKHN0cnVjdCBwYmxrICpwYmxr LCBzdHJ1Y3QgbnZtX3JxICpycWQsCj4gLQkJCSAgIHVuc2lnbmVkIGludCBucl9zZWNzLCBudm1f ZW5kX2lvX2ZuKCplbmRfaW8pKQo+IC17Cj4gLQkvKiBTZXR1cCB3cml0ZSByZXF1ZXN0ICovCj4g LQlycWQtPm9wY29kZSA9IE5WTV9PUF9QV1JJVEU7Cj4gLQlycWQtPm5yX3BwYXMgPSBucl9zZWNz Owo+IC0JcnFkLT5pc19zZXEgPSAxOwo+IC0JcnFkLT5wcml2YXRlID0gcGJsazsKPiAtCXJxZC0+ ZW5kX2lvID0gZW5kX2lvOwo+IC0KPiAtCXJldHVybiBwYmxrX2FsbG9jX3JxZF9tZXRhKHBibGss IHJxZCk7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbnQgcGJsa19zZXR1cF93X3JxKHN0cnVjdCBwYmxr ICpwYmxrLCBzdHJ1Y3QgbnZtX3JxICpycWQsCj4gLQkJCSAgIHN0cnVjdCBwcGFfYWRkciAqZXJh c2VfcHBhKQo+IC17Cj4gLQlzdHJ1Y3QgcGJsa19saW5lX21ldGEgKmxtID0gJnBibGstPmxtOwo+ IC0Jc3RydWN0IHBibGtfbGluZSAqZV9saW5lID0gcGJsa19saW5lX2dldF9lcmFzZShwYmxrKTsK PiAtCXN0cnVjdCBwYmxrX2NfY3R4ICpjX2N0eCA9IG52bV9ycV90b19wZHUocnFkKTsKPiAtCXVu c2lnbmVkIGludCB2YWxpZCA9IGNfY3R4LT5ucl92YWxpZDsKPiAtCXVuc2lnbmVkIGludCBwYWRk ZWQgPSBjX2N0eC0+bnJfcGFkZGVkOwo+IC0JdW5zaWduZWQgaW50IG5yX3NlY3MgPSB2YWxpZCAr IHBhZGRlZDsKPiAtCXVuc2lnbmVkIGxvbmcgKmx1bl9iaXRtYXA7Cj4gLQlpbnQgcmV0Owo+IC0K PiAtCWx1bl9iaXRtYXAgPSBremFsbG9jKGxtLT5sdW5fYml0bWFwX2xlbiwgR0ZQX0tFUk5FTCk7 Cj4gLQlpZiAoIWx1bl9iaXRtYXApCj4gLQkJcmV0dXJuIC1FTk9NRU07Cj4gLQljX2N0eC0+bHVu X2JpdG1hcCA9IGx1bl9iaXRtYXA7Cj4gLQo+IC0JcmV0ID0gcGJsa19hbGxvY193X3JxKHBibGss IHJxZCwgbnJfc2VjcywgcGJsa19lbmRfaW9fd3JpdGUpOwo+IC0JaWYgKHJldCkgewo+IC0JCWtm cmVlKGx1bl9iaXRtYXApOwo+IC0JCXJldHVybiByZXQ7Cj4gLQl9Cj4gLQo+IC0JaWYgKGxpa2Vs eSghZV9saW5lIHx8ICFhdG9taWNfcmVhZCgmZV9saW5lLT5sZWZ0X2VibGtzKSkpCj4gLQkJcmV0 ID0gcGJsa19tYXBfcnEocGJsaywgcnFkLCBjX2N0eC0+c2VudHJ5LCBsdW5fYml0bWFwLAo+IC0J CQkJCQkJdmFsaWQsIDApOwo+IC0JZWxzZQo+IC0JCXJldCA9IHBibGtfbWFwX2VyYXNlX3JxKHBi bGssIHJxZCwgY19jdHgtPnNlbnRyeSwgbHVuX2JpdG1hcCwKPiAtCQkJCQkJCXZhbGlkLCBlcmFz ZV9wcGEpOwo+IC0KPiAtCXJldHVybiByZXQ7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbnQgcGJsa19j YWxjX3NlY3NfdG9fc3luYyhzdHJ1Y3QgcGJsayAqcGJsaywgdW5zaWduZWQgaW50IHNlY3NfYXZh aWwsCj4gLQkJCQkgIHVuc2lnbmVkIGludCBzZWNzX3RvX2ZsdXNoKQo+IC17Cj4gLQlpbnQgc2Vj c190b19zeW5jOwo+IC0KPiAtCXNlY3NfdG9fc3luYyA9IHBibGtfY2FsY19zZWNzKHBibGssIHNl Y3NfYXZhaWwsIHNlY3NfdG9fZmx1c2gsIHRydWUpOwo+IC0KPiAtI2lmZGVmIENPTkZJR19OVk1f UEJMS19ERUJVRwo+IC0JaWYgKCghc2Vjc190b19zeW5jICYmIHNlY3NfdG9fZmx1c2gpCj4gLQkJ CXx8IChzZWNzX3RvX3N5bmMgPCAwKQo+IC0JCQl8fCAoc2Vjc190b19zeW5jID4gc2Vjc19hdmFp bCAmJiAhc2Vjc190b19mbHVzaCkpIHsKPiAtCQlwYmxrX2VycihwYmxrLCAiYmFkIHNlY3RvciBj YWxjdWxhdGlvbiAoYTolZCxzOiVkLGY6JWQpXG4iLAo+IC0JCQkJc2Vjc19hdmFpbCwgc2Vjc190 b19zeW5jLCBzZWNzX3RvX2ZsdXNoKTsKPiAtCX0KPiAtI2VuZGlmCj4gLQo+IC0JcmV0dXJuIHNl Y3NfdG9fc3luYzsKPiAtfQo+IC0KPiAtaW50IHBibGtfc3VibWl0X21ldGFfaW8oc3RydWN0IHBi bGsgKnBibGssIHN0cnVjdCBwYmxrX2xpbmUgKm1ldGFfbGluZSkKPiAtewo+IC0Jc3RydWN0IG52 bV90Z3RfZGV2ICpkZXYgPSBwYmxrLT5kZXY7Cj4gLQlzdHJ1Y3QgbnZtX2dlbyAqZ2VvID0gJmRl di0+Z2VvOwo+IC0Jc3RydWN0IHBibGtfbGluZV9tZ210ICpsX21nID0gJnBibGstPmxfbWc7Cj4g LQlzdHJ1Y3QgcGJsa19saW5lX21ldGEgKmxtID0gJnBibGstPmxtOwo+IC0Jc3RydWN0IHBibGtf ZW1ldGEgKmVtZXRhID0gbWV0YV9saW5lLT5lbWV0YTsKPiAtCXN0cnVjdCBwcGFfYWRkciAqcHBh X2xpc3Q7Cj4gLQlzdHJ1Y3QgcGJsa19nX2N0eCAqbV9jdHg7Cj4gLQlzdHJ1Y3QgbnZtX3JxICpy cWQ7Cj4gLQl2b2lkICpkYXRhOwo+IC0JdTY0IHBhZGRyOwo+IC0JaW50IHJxX3BwYXMgPSBwYmxr LT5taW5fd3JpdGVfcGdzOwo+IC0JaW50IGlkID0gbWV0YV9saW5lLT5pZDsKPiAtCWludCBycV9s ZW47Cj4gLQlpbnQgaSwgajsKPiAtCWludCByZXQ7Cj4gLQo+IC0JcnFkID0gcGJsa19hbGxvY19y cWQocGJsaywgUEJMS19XUklURV9JTlQpOwo+IC0KPiAtCW1fY3R4ID0gbnZtX3JxX3RvX3BkdShy cWQpOwo+IC0JbV9jdHgtPnByaXZhdGUgPSBtZXRhX2xpbmU7Cj4gLQo+IC0JcnFfbGVuID0gcnFf cHBhcyAqIGdlby0+Y3NlY3M7Cj4gLQlkYXRhID0gKCh2b2lkICopZW1ldGEtPmJ1ZikgKyBlbWV0 YS0+bWVtOwo+IC0KPiAtCXJldCA9IHBibGtfYWxsb2Nfd19ycShwYmxrLCBycWQsIHJxX3BwYXMs IHBibGtfZW5kX2lvX3dyaXRlX21ldGEpOwo+IC0JaWYgKHJldCkKPiAtCQlnb3RvIGZhaWxfZnJl ZV9ycWQ7Cj4gLQo+IC0JcHBhX2xpc3QgPSBudm1fcnFfdG9fcHBhX2xpc3QocnFkKTsKPiAtCWZv ciAoaSA9IDA7IGkgPCBycWQtPm5yX3BwYXM7ICkgewo+IC0JCXNwaW5fbG9jaygmbWV0YV9saW5l LT5sb2NrKTsKPiAtCQlwYWRkciA9IF9fcGJsa19hbGxvY19wYWdlKHBibGssIG1ldGFfbGluZSwg cnFfcHBhcyk7Cj4gLQkJc3Bpbl91bmxvY2soJm1ldGFfbGluZS0+bG9jayk7Cj4gLQkJZm9yIChq ID0gMDsgaiA8IHJxX3BwYXM7IGorKywgaSsrLCBwYWRkcisrKQo+IC0JCQlwcGFfbGlzdFtpXSA9 IGFkZHJfdG9fZ2VuX3BwYShwYmxrLCBwYWRkciwgaWQpOwo+IC0JfQo+IC0KPiAtCXNwaW5fbG9j aygmbF9tZy0+Y2xvc2VfbG9jayk7Cj4gLQllbWV0YS0+bWVtICs9IHJxX2xlbjsKPiAtCWlmIChl bWV0YS0+bWVtID49IGxtLT5lbWV0YV9sZW5bMF0pCj4gLQkJbGlzdF9kZWwoJm1ldGFfbGluZS0+ bGlzdCk7Cj4gLQlzcGluX3VubG9jaygmbF9tZy0+Y2xvc2VfbG9jayk7Cj4gLQo+IC0JcGJsa19k b3duX2NodW5rKHBibGssIHBwYV9saXN0WzBdKTsKPiAtCj4gLQlyZXQgPSBwYmxrX3N1Ym1pdF9p byhwYmxrLCBycWQsIGRhdGEpOwo+IC0JaWYgKHJldCkgewo+IC0JCXBibGtfZXJyKHBibGssICJl bWV0YSBJL08gc3VibWlzc2lvbiBmYWlsZWQ6ICVkXG4iLCByZXQpOwo+IC0JCWdvdG8gZmFpbF9y b2xsYmFjazsKPiAtCX0KPiAtCj4gLQlyZXR1cm4gTlZNX0lPX09LOwo+IC0KPiAtZmFpbF9yb2xs YmFjazoKPiAtCXBibGtfdXBfY2h1bmsocGJsaywgcHBhX2xpc3RbMF0pOwo+IC0Jc3Bpbl9sb2Nr KCZsX21nLT5jbG9zZV9sb2NrKTsKPiAtCXBibGtfZGVhbGxvY19wYWdlKHBibGssIG1ldGFfbGlu ZSwgcnFfcHBhcyk7Cj4gLQlsaXN0X2FkZCgmbWV0YV9saW5lLT5saXN0LCAmbWV0YV9saW5lLT5s aXN0KTsKPiAtCXNwaW5fdW5sb2NrKCZsX21nLT5jbG9zZV9sb2NrKTsKPiAtZmFpbF9mcmVlX3Jx ZDoKPiAtCXBibGtfZnJlZV9ycWQocGJsaywgcnFkLCBQQkxLX1dSSVRFX0lOVCk7Cj4gLQlyZXR1 cm4gcmV0Owo+IC19Cj4gLQo+IC1zdGF0aWMgaW5saW5lIGJvb2wgcGJsa192YWxpZF9tZXRhX3Bw YShzdHJ1Y3QgcGJsayAqcGJsaywKPiAtCQkJCSAgICAgICBzdHJ1Y3QgcGJsa19saW5lICptZXRh X2xpbmUsCj4gLQkJCQkgICAgICAgc3RydWN0IG52bV9ycSAqZGF0YV9ycWQpCj4gLXsKPiAtCXN0 cnVjdCBudm1fdGd0X2RldiAqZGV2ID0gcGJsay0+ZGV2Owo+IC0Jc3RydWN0IG52bV9nZW8gKmdl byA9ICZkZXYtPmdlbzsKPiAtCXN0cnVjdCBwYmxrX2NfY3R4ICpkYXRhX2NfY3R4ID0gbnZtX3Jx X3RvX3BkdShkYXRhX3JxZCk7Cj4gLQlzdHJ1Y3QgcGJsa19saW5lICpkYXRhX2xpbmUgPSBwYmxr X2xpbmVfZ2V0X2RhdGEocGJsayk7Cj4gLQlzdHJ1Y3QgcHBhX2FkZHIgcHBhLCBwcGFfb3B0Owo+ IC0JdTY0IHBhZGRyOwo+IC0JaW50IHBvc19vcHQ7Cj4gLQo+IC0JLyogU2NoZWR1bGUgYSBtZXRh ZGF0YSBJL08gdGhhdCBpcyBoYWxmIHRoZSBkaXN0YW5jZSBmcm9tIHRoZSBkYXRhIEkvTwo+IC0J ICogd2l0aCByZWdhcmRzIHRvIHRoZSBudW1iZXIgb2YgTFVOcyBmb3JtaW5nIHRoZSBwYmxrIGlu c3RhbmNlLiBUaGlzCj4gLQkgKiBiYWxhbmNlcyBMVU4gY29uZmxpY3RzIGFjcm9zcyBldmVyeSBJ L08uCj4gLQkgKgo+IC0JICogV2hlbiB0aGUgTFVOIGNvbmZpZ3VyYXRpb24gY2hhbmdlcyAoZS5n LiwgZHVlIHRvIEdDKSwgdGhpcyBkaXN0YW5jZQo+IC0JICogY2FuIGFsaWduLCB3aGljaCB3b3Vs ZCByZXN1bHQgb24gbWV0YWRhdGEgYW5kIGRhdGEgSS9PcyBjb2xsaWRpbmcuIEluCj4gLQkgKiB0 aGlzIGNhc2UsIG1vZGlmeSB0aGUgZGlzdGFuY2UgdG8gbm90IGJlIG9wdGltYWwsIGJ1dCBtb3Zl IHRoZQo+IC0JICogb3B0aW1hbCBpbiB0aGUgcmlnaHQgZGlyZWN0aW9uLgo+IC0JICovCj4gLQlw YWRkciA9IHBibGtfbG9va3VwX3BhZ2UocGJsaywgbWV0YV9saW5lKTsKPiAtCXBwYSA9IGFkZHJf dG9fZ2VuX3BwYShwYmxrLCBwYWRkciwgMCk7Cj4gLQlwcGFfb3B0ID0gYWRkcl90b19nZW5fcHBh KHBibGssIHBhZGRyICsgZGF0YV9saW5lLT5tZXRhX2Rpc3RhbmNlLCAwKTsKPiAtCXBvc19vcHQg PSBwYmxrX3BwYV90b19wb3MoZ2VvLCBwcGFfb3B0KTsKPiAtCj4gLQlpZiAodGVzdF9iaXQocG9z X29wdCwgZGF0YV9jX2N0eC0+bHVuX2JpdG1hcCkgfHwKPiAtCQkJCXRlc3RfYml0KHBvc19vcHQs IGRhdGFfbGluZS0+YmxrX2JpdG1hcCkpCj4gLQkJcmV0dXJuIHRydWU7Cj4gLQo+IC0JaWYgKHVu bGlrZWx5KHBibGtfcHBhX2NvbXAocHBhX29wdCwgcHBhKSkpCj4gLQkJZGF0YV9saW5lLT5tZXRh X2Rpc3RhbmNlLS07Cj4gLQo+IC0JcmV0dXJuIGZhbHNlOwo+IC19Cj4gLQo+IC1zdGF0aWMgc3Ry dWN0IHBibGtfbGluZSAqcGJsa19zaG91bGRfc3VibWl0X21ldGFfaW8oc3RydWN0IHBibGsgKnBi bGssCj4gLQkJCQkJCSAgICBzdHJ1Y3QgbnZtX3JxICpkYXRhX3JxZCkKPiAtewo+IC0Jc3RydWN0 IHBibGtfbGluZV9tZXRhICpsbSA9ICZwYmxrLT5sbTsKPiAtCXN0cnVjdCBwYmxrX2xpbmVfbWdt dCAqbF9tZyA9ICZwYmxrLT5sX21nOwo+IC0Jc3RydWN0IHBibGtfbGluZSAqbWV0YV9saW5lOwo+ IC0KPiAtCXNwaW5fbG9jaygmbF9tZy0+Y2xvc2VfbG9jayk7Cj4gLQlpZiAobGlzdF9lbXB0eSgm bF9tZy0+ZW1ldGFfbGlzdCkpIHsKPiAtCQlzcGluX3VubG9jaygmbF9tZy0+Y2xvc2VfbG9jayk7 Cj4gLQkJcmV0dXJuIE5VTEw7Cj4gLQl9Cj4gLQltZXRhX2xpbmUgPSBsaXN0X2ZpcnN0X2VudHJ5 KCZsX21nLT5lbWV0YV9saXN0LCBzdHJ1Y3QgcGJsa19saW5lLCBsaXN0KTsKPiAtCWlmIChtZXRh X2xpbmUtPmVtZXRhLT5tZW0gPj0gbG0tPmVtZXRhX2xlblswXSkgewo+IC0JCXNwaW5fdW5sb2Nr KCZsX21nLT5jbG9zZV9sb2NrKTsKPiAtCQlyZXR1cm4gTlVMTDsKPiAtCX0KPiAtCXNwaW5fdW5s b2NrKCZsX21nLT5jbG9zZV9sb2NrKTsKPiAtCj4gLQlpZiAoIXBibGtfdmFsaWRfbWV0YV9wcGEo cGJsaywgbWV0YV9saW5lLCBkYXRhX3JxZCkpCj4gLQkJcmV0dXJuIE5VTEw7Cj4gLQo+IC0JcmV0 dXJuIG1ldGFfbGluZTsKPiAtfQo+IC0KPiAtc3RhdGljIGludCBwYmxrX3N1Ym1pdF9pb19zZXQo c3RydWN0IHBibGsgKnBibGssIHN0cnVjdCBudm1fcnEgKnJxZCkKPiAtewo+IC0Jc3RydWN0IHBw YV9hZGRyIGVyYXNlX3BwYTsKPiAtCXN0cnVjdCBwYmxrX2xpbmUgKm1ldGFfbGluZTsKPiAtCWlu dCBlcnI7Cj4gLQo+IC0JcGJsa19wcGFfc2V0X2VtcHR5KCZlcmFzZV9wcGEpOwo+IC0KPiAtCS8q IEFzc2lnbiBsYmFzIHRvIHBwYXMgYW5kIHBvcHVsYXRlIHJlcXVlc3Qgc3RydWN0dXJlICovCj4g LQllcnIgPSBwYmxrX3NldHVwX3dfcnEocGJsaywgcnFkLCAmZXJhc2VfcHBhKTsKPiAtCWlmIChl cnIpIHsKPiAtCQlwYmxrX2VycihwYmxrLCAiY291bGQgbm90IHNldHVwIHdyaXRlIHJlcXVlc3Q6 ICVkXG4iLCBlcnIpOwo+IC0JCXJldHVybiBOVk1fSU9fRVJSOwo+IC0JfQo+IC0KPiAtCW1ldGFf bGluZSA9IHBibGtfc2hvdWxkX3N1Ym1pdF9tZXRhX2lvKHBibGssIHJxZCk7Cj4gLQo+IC0JLyog U3VibWl0IGRhdGEgd3JpdGUgZm9yIGN1cnJlbnQgZGF0YSBsaW5lICovCj4gLQllcnIgPSBwYmxr X3N1Ym1pdF9pbyhwYmxrLCBycWQsIE5VTEwpOwo+IC0JaWYgKGVycikgewo+IC0JCXBibGtfZXJy KHBibGssICJkYXRhIEkvTyBzdWJtaXNzaW9uIGZhaWxlZDogJWRcbiIsIGVycik7Cj4gLQkJcmV0 dXJuIE5WTV9JT19FUlI7Cj4gLQl9Cj4gLQo+IC0JaWYgKCFwYmxrX3BwYV9lbXB0eShlcmFzZV9w cGEpKSB7Cj4gLQkJLyogU3VibWl0IGVyYXNlIGZvciBuZXh0IGRhdGEgbGluZSAqLwo+IC0JCWlm IChwYmxrX2Jsa19lcmFzZV9hc3luYyhwYmxrLCBlcmFzZV9wcGEpKSB7Cj4gLQkJCXN0cnVjdCBw YmxrX2xpbmUgKmVfbGluZSA9IHBibGtfbGluZV9nZXRfZXJhc2UocGJsayk7Cj4gLQkJCXN0cnVj dCBudm1fdGd0X2RldiAqZGV2ID0gcGJsay0+ZGV2Owo+IC0JCQlzdHJ1Y3QgbnZtX2dlbyAqZ2Vv ID0gJmRldi0+Z2VvOwo+IC0JCQlpbnQgYml0Owo+IC0KPiAtCQkJYXRvbWljX2luYygmZV9saW5l LT5sZWZ0X2VibGtzKTsKPiAtCQkJYml0ID0gcGJsa19wcGFfdG9fcG9zKGdlbywgZXJhc2VfcHBh KTsKPiAtCQkJV0FSTl9PTighdGVzdF9hbmRfY2xlYXJfYml0KGJpdCwgZV9saW5lLT5lcmFzZV9i aXRtYXApKTsKPiAtCQl9Cj4gLQl9Cj4gLQo+IC0JaWYgKG1ldGFfbGluZSkgewo+IC0JCS8qIFN1 Ym1pdCBtZXRhZGF0YSB3cml0ZSBmb3IgcHJldmlvdXMgZGF0YSBsaW5lICovCj4gLQkJZXJyID0g cGJsa19zdWJtaXRfbWV0YV9pbyhwYmxrLCBtZXRhX2xpbmUpOwo+IC0JCWlmIChlcnIpIHsKPiAt CQkJcGJsa19lcnIocGJsaywgIm1ldGFkYXRhIEkvTyBzdWJtaXNzaW9uIGZhaWxlZDogJWQiLAo+ IC0JCQkJCWVycik7Cj4gLQkJCXJldHVybiBOVk1fSU9fRVJSOwo+IC0JCX0KPiAtCX0KPiAtCj4g LQlyZXR1cm4gTlZNX0lPX09LOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBwYmxrX2ZyZWVfd3Jp dGVfcnFkKHN0cnVjdCBwYmxrICpwYmxrLCBzdHJ1Y3QgbnZtX3JxICpycWQpCj4gLXsKPiAtCXN0 cnVjdCBwYmxrX2NfY3R4ICpjX2N0eCA9IG52bV9ycV90b19wZHUocnFkKTsKPiAtCXN0cnVjdCBi aW8gKmJpbyA9IHJxZC0+YmlvOwo+IC0KPiAtCWlmIChjX2N0eC0+bnJfcGFkZGVkKQo+IC0JCXBi bGtfYmlvX2ZyZWVfcGFnZXMocGJsaywgYmlvLCBjX2N0eC0+bnJfdmFsaWQsCj4gLQkJCQkJCQlj X2N0eC0+bnJfcGFkZGVkKTsKPiAtfQo+IC0KPiAtc3RhdGljIGludCBwYmxrX3N1Ym1pdF93cml0 ZShzdHJ1Y3QgcGJsayAqcGJsaywgaW50ICpzZWNzX2xlZnQpCj4gLXsKPiAtCXN0cnVjdCBiaW8g KmJpbzsKPiAtCXN0cnVjdCBudm1fcnEgKnJxZDsKPiAtCXVuc2lnbmVkIGludCBzZWNzX2F2YWls LCBzZWNzX3RvX3N5bmMsIHNlY3NfdG9fY29tOwo+IC0JdW5zaWduZWQgaW50IHNlY3NfdG9fZmx1 c2gsIHBhY2tlZF9tZXRhX3BnczsKPiAtCXVuc2lnbmVkIGxvbmcgcG9zOwo+IC0JdW5zaWduZWQg aW50IHJlc3VibWl0Owo+IC0KPiAtCSpzZWNzX2xlZnQgPSAwOwo+IC0KPiAtCXNwaW5fbG9jaygm cGJsay0+cmVzdWJtaXRfbG9jayk7Cj4gLQlyZXN1Ym1pdCA9ICFsaXN0X2VtcHR5KCZwYmxrLT5y ZXN1Ym1pdF9saXN0KTsKPiAtCXNwaW5fdW5sb2NrKCZwYmxrLT5yZXN1Ym1pdF9sb2NrKTsKPiAt Cj4gLQkvKiBSZXN1Ym1pdCBmYWlsZWQgd3JpdGVzIGZpcnN0ICovCj4gLQlpZiAocmVzdWJtaXQp IHsKPiAtCQlzdHJ1Y3QgcGJsa19jX2N0eCAqcl9jdHg7Cj4gLQo+IC0JCXNwaW5fbG9jaygmcGJs ay0+cmVzdWJtaXRfbG9jayk7Cj4gLQkJcl9jdHggPSBsaXN0X2ZpcnN0X2VudHJ5KCZwYmxrLT5y ZXN1Ym1pdF9saXN0LAo+IC0JCQkJCXN0cnVjdCBwYmxrX2NfY3R4LCBsaXN0KTsKPiAtCQlsaXN0 X2RlbCgmcl9jdHgtPmxpc3QpOwo+IC0JCXNwaW5fdW5sb2NrKCZwYmxrLT5yZXN1Ym1pdF9sb2Nr KTsKPiAtCj4gLQkJc2Vjc19hdmFpbCA9IHJfY3R4LT5ucl92YWxpZDsKPiAtCQlwb3MgPSByX2N0 eC0+c2VudHJ5Owo+IC0KPiAtCQlwYmxrX3ByZXBhcmVfcmVzdWJtaXQocGJsaywgcG9zLCBzZWNz X2F2YWlsKTsKPiAtCQlzZWNzX3RvX3N5bmMgPSBwYmxrX2NhbGNfc2Vjc190b19zeW5jKHBibGss IHNlY3NfYXZhaWwsCj4gLQkJCQlzZWNzX2F2YWlsKTsKPiAtCj4gLQkJa2ZyZWUocl9jdHgpOwo+ IC0JfSBlbHNlIHsKPiAtCQkvKiBJZiB0aGVyZSBhcmUgbm8gc2VjdG9ycyBpbiB0aGUgY2FjaGUs Cj4gLQkJICogZmx1c2hlcyAoYmlvcyB3aXRob3V0IGRhdGEpIHdpbGwgYmUgY2xlYXJlZCBvbgo+ IC0JCSAqIHRoZSBjYWNoZSB0aHJlYWRzCj4gLQkJICovCj4gLQkJc2Vjc19hdmFpbCA9IHBibGtf cmJfcmVhZF9jb3VudCgmcGJsay0+cndiKTsKPiAtCQlpZiAoIXNlY3NfYXZhaWwpCj4gLQkJCXJl dHVybiAwOwo+IC0KPiAtCQlzZWNzX3RvX2ZsdXNoID0gcGJsa19yYl9mbHVzaF9wb2ludF9jb3Vu dCgmcGJsay0+cndiKTsKPiAtCQlpZiAoIXNlY3NfdG9fZmx1c2ggJiYgc2Vjc19hdmFpbCA8IHBi bGstPm1pbl93cml0ZV9wZ3NfZGF0YSkKPiAtCQkJcmV0dXJuIDA7Cj4gLQo+IC0JCXNlY3NfdG9f c3luYyA9IHBibGtfY2FsY19zZWNzX3RvX3N5bmMocGJsaywgc2Vjc19hdmFpbCwKPiAtCQkJCQlz ZWNzX3RvX2ZsdXNoKTsKPiAtCQlpZiAoc2Vjc190b19zeW5jID4gcGJsay0+bWF4X3dyaXRlX3Bn cykgewo+IC0JCQlwYmxrX2VycihwYmxrLCAiYmFkIGJ1ZmZlciBzeW5jIGNhbGN1bGF0aW9uXG4i KTsKPiAtCQkJcmV0dXJuIDA7Cj4gLQkJfQo+IC0KPiAtCQlzZWNzX3RvX2NvbSA9IChzZWNzX3Rv X3N5bmMgPiBzZWNzX2F2YWlsKSA/Cj4gLQkJCXNlY3NfYXZhaWwgOiBzZWNzX3RvX3N5bmM7Cj4g LQkJcG9zID0gcGJsa19yYl9yZWFkX2NvbW1pdCgmcGJsay0+cndiLCBzZWNzX3RvX2NvbSk7Cj4g LQl9Cj4gLQo+IC0JcGFja2VkX21ldGFfcGdzID0gKHBibGstPm1pbl93cml0ZV9wZ3MgLSBwYmxr LT5taW5fd3JpdGVfcGdzX2RhdGEpOwo+IC0JYmlvID0gYmlvX2FsbG9jKEdGUF9LRVJORUwsIHNl Y3NfdG9fc3luYyArIHBhY2tlZF9tZXRhX3Bncyk7Cj4gLQo+IC0JYmlvLT5iaV9pdGVyLmJpX3Nl Y3RvciA9IDA7IC8qIGludGVybmFsIGJpbyAqLwo+IC0JYmlvX3NldF9vcF9hdHRycyhiaW8sIFJF UV9PUF9XUklURSwgMCk7Cj4gLQo+IC0JcnFkID0gcGJsa19hbGxvY19ycWQocGJsaywgUEJMS19X UklURSk7Cj4gLQlycWQtPmJpbyA9IGJpbzsKPiAtCj4gLQlpZiAocGJsa19yYl9yZWFkX3RvX2Jp bygmcGJsay0+cndiLCBycWQsIHBvcywgc2Vjc190b19zeW5jLAo+IC0JCQkJCQkJCXNlY3NfYXZh aWwpKSB7Cj4gLQkJcGJsa19lcnIocGJsaywgImNvcnJ1cHRlZCB3cml0ZSBiaW9cbiIpOwo+IC0J CWdvdG8gZmFpbF9wdXRfYmlvOwo+IC0JfQo+IC0KPiAtCWlmIChwYmxrX3N1Ym1pdF9pb19zZXQo cGJsaywgcnFkKSkKPiAtCQlnb3RvIGZhaWxfZnJlZV9iaW87Cj4gLQo+IC0jaWZkZWYgQ09ORklH X05WTV9QQkxLX0RFQlVHCj4gLQlhdG9taWNfbG9uZ19hZGQoc2Vjc190b19zeW5jLCAmcGJsay0+ c3ViX3dyaXRlcyk7Cj4gLSNlbmRpZgo+IC0KPiAtCSpzZWNzX2xlZnQgPSAxOwo+IC0JcmV0dXJu IDA7Cj4gLQo+IC1mYWlsX2ZyZWVfYmlvOgo+IC0JcGJsa19mcmVlX3dyaXRlX3JxZChwYmxrLCBy cWQpOwo+IC1mYWlsX3B1dF9iaW86Cj4gLQliaW9fcHV0KGJpbyk7Cj4gLQlwYmxrX2ZyZWVfcnFk KHBibGssIHJxZCwgUEJMS19XUklURSk7Cj4gLQo+IC0JcmV0dXJuIC1FSU5UUjsKPiAtfQo+IC0K PiAtaW50IHBibGtfd3JpdGVfdHModm9pZCAqZGF0YSkKPiAtewo+IC0Jc3RydWN0IHBibGsgKnBi bGsgPSBkYXRhOwo+IC0JaW50IHNlY3NfbGVmdDsKPiAtCWludCB3cml0ZV9mYWlsdXJlID0gMDsK PiAtCj4gLQl3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgewo+IC0JCWlmICghd3JpdGVf ZmFpbHVyZSkgewo+IC0JCQl3cml0ZV9mYWlsdXJlID0gcGJsa19zdWJtaXRfd3JpdGUocGJsaywg JnNlY3NfbGVmdCk7Cj4gLQo+IC0JCQlpZiAoc2Vjc19sZWZ0KQo+IC0JCQkJY29udGludWU7Cj4g LQkJfQo+IC0JCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Cj4gLQkJaW9f c2NoZWR1bGUoKTsKPiAtCX0KPiAtCj4gLQlyZXR1cm4gMDsKPiAtfQo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2xpZ2h0bnZtL3BibGsuaCBiL2RyaXZlcnMvbGlnaHRudm0vcGJsay5oCj4gZGVsZXRl ZCBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggODZmZmE4NzViZmUxLi4wMDAwMDAwMDAwMDAKPiAt LS0gYS9kcml2ZXJzL2xpZ2h0bnZtL3BibGsuaAo+ICsrKyAvZGV2L251bGwKPiBAQCAtMSwxMzU4 ICswLDAgQEAKPiAtLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KPiAtLyoK PiAtICogQ29weXJpZ2h0IChDKSAyMDE1IElUIFVuaXZlcnNpdHkgb2YgQ29wZW5oYWdlbiAocnJw Yy5oKQo+IC0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQ05FWCBMYWJzCj4gLSAqIEluaXRpYWwgcmVs ZWFzZTogTWF0aWFzIEJqb3JsaW5nIDxtYXRpYXNAY25leGxhYnMuY29tPgo+IC0gKiBXcml0ZSBi dWZmZXJpbmc6IEphdmllciBHb256YWxleiA8amF2aWVyQGNuZXhsYWJzLmNvbT4KPiAtICoKPiAt ICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vcgo+IC0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uCj4gLSAqIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb24uCj4gLSAqCj4gLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmli dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKPiAtICogV0lUSE9V VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+IC0g KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT ZWUgdGhlIEdOVQo+IC0gKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu Cj4gLSAqCj4gLSAqIEltcGxlbWVudGF0aW9uIG9mIGEgUGh5c2ljYWwgQmxvY2stZGV2aWNlIHRh cmdldCBmb3IgT3Blbi1jaGFubmVsIFNTRHMuCj4gLSAqCj4gLSAqLwo+IC0KPiAtI2lmbmRlZiBQ QkxLX0hfCj4gLSNkZWZpbmUgUEJMS19IXwo+IC0KPiAtI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5o Pgo+IC0jaW5jbHVkZSA8bGludXgvYmxrLW1xLmg+Cj4gLSNpbmNsdWRlIDxsaW51eC9iaW8uaD4K PiAtI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgo+IC0jaW5jbHVkZSA8bGludXgva3RocmVhZC5o Pgo+IC0jaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgo+IC0jaW5jbHVkZSA8bGludXgvY3JjMzIu aD4KPiAtI2luY2x1ZGUgPGxpbnV4L3V1aWQuaD4KPiAtCj4gLSNpbmNsdWRlIDxsaW51eC9saWdo dG52bS5oPgo+IC0KPiAtLyogUnVuIG9ubHkgR0MgaWYgbGVzcyB0aGFuIDEvWCBibG9ja3MgYXJl IGZyZWUgKi8KPiAtI2RlZmluZSBHQ19MSU1JVF9JTlZFUlNFIDUKPiAtI2RlZmluZSBHQ19USU1F X01TRUNTIDEwMDAKPiAtCj4gLSNkZWZpbmUgUEJMS19TRUNUT1IgKDUxMikKPiAtI2RlZmluZSBQ QkxLX0VYUE9TRURfUEFHRV9TSVpFICg0MDk2KQo+IC0KPiAtI2RlZmluZSBQQkxLX05SX0NMT1NF X0pPQlMgKDQpCj4gLQo+IC0jZGVmaW5lIFBCTEtfQ0FDSEVfTkFNRV9MRU4gKERJU0tfTkFNRV9M RU4gKyAxNikKPiAtCj4gLS8qIE1heCA1MTIgTFVOcyBwZXIgZGV2aWNlICovCj4gLSNkZWZpbmUg UEJMS19NQVhfTFVOU19CSVRNQVAgKDQpCj4gLQo+IC0jZGVmaW5lIE5SX1BIWV9JTl9MT0cgKFBC TEtfRVhQT1NFRF9QQUdFX1NJWkUgLyBQQkxLX1NFQ1RPUikKPiAtCj4gLS8qIFN0YXRpYyBwb29s IHNpemVzICovCj4gLSNkZWZpbmUgUEJMS19HRU5fV1NfUE9PTF9TSVpFICgyKQo+IC0KPiAtI2Rl ZmluZSBQQkxLX0RFRkFVTFRfT1AgKDExKQo+IC0KPiAtZW51bSB7Cj4gLQlQQkxLX1JFQUQJCT0g UkVBRCwKPiAtCVBCTEtfV1JJVEUJCT0gV1JJVEUsLyogV3JpdGUgZnJvbSB3cml0ZSBidWZmZXIg Ki8KPiAtCVBCTEtfV1JJVEVfSU5ULAkJCS8qIEludGVybmFsIHdyaXRlIC0gbm8gd3JpdGUgYnVm ZmVyICovCj4gLQlQQkxLX1JFQURfUkVDT1YsCQkvKiBSZWNvdmVyeSByZWFkIC0gZXJyb3JzIGFs bG93ZWQgKi8KPiAtCVBCTEtfRVJBU0UsCj4gLX07Cj4gLQo+IC1lbnVtIHsKPiAtCS8qIElPIFR5 cGVzICovCj4gLQlQQkxLX0lPVFlQRV9VU0VSCT0gMSA8PCAwLAo+IC0JUEJMS19JT1RZUEVfR0MJ CT0gMSA8PCAxLAo+IC0KPiAtCS8qIFdyaXRlIGJ1ZmZlciBmbGFncyAqLwo+IC0JUEJMS19GTFVT SF9FTlRSWQk9IDEgPDwgMiwKPiAtCVBCTEtfV1JJVFRFTl9EQVRBCT0gMSA8PCAzLAo+IC0JUEJM S19TVUJNSVRURURfRU5UUlkJPSAxIDw8IDQsCj4gLQlQQkxLX1dSSVRBQkxFX0VOVFJZCT0gMSA8 PCA1LAo+IC19Owo+IC0KPiAtZW51bSB7Cj4gLQlQQkxLX0JMS19TVF9PUEVOID0JMHgxLAo+IC0J UEJMS19CTEtfU1RfQ0xPU0VEID0JMHgyLAo+IC19Owo+IC0KPiAtZW51bSB7Cj4gLQlQQkxLX0NI VU5LX1JFU0VUX1NUQVJULAo+IC0JUEJMS19DSFVOS19SRVNFVF9ET05FLAo+IC0JUEJMS19DSFVO S19SRVNFVF9GQUlMRUQsCj4gLX07Cj4gLQo+IC1zdHJ1Y3QgcGJsa19zZWNfbWV0YSB7Cj4gLQl1 NjQgcmVzZXJ2ZWQ7Cj4gLQlfX2xlNjQgbGJhOwo+IC19Owo+IC0KPiAtLyogVGhlIG51bWJlciBv ZiBHQyBsaXN0cyBhbmQgdGhlIHJhdGUtbGltaXRlciBzdGF0ZXMgZ28gdG9nZXRoZXIuIFRoaXMg d2F5IHRoZQo+IC0gKiByYXRlLWxpbWl0ZXIgY2FuIGRpY3RhdGUgaG93IG11Y2ggR0MgaXMgbmVl ZGVkIGJhc2VkIG9uIHJlc291cmNlIHV0aWxpemF0aW9uLgo+IC0gKi8KPiAtI2RlZmluZSBQQkxL X0dDX05SX0xJU1RTIDQKPiAtCj4gLWVudW0gewo+IC0JUEJMS19STF9PRkYgPSAwLAo+IC0JUEJM S19STF9XRVJSID0gMSwKPiAtCVBCTEtfUkxfSElHSCA9IDIsCj4gLQlQQkxLX1JMX01JRCA9IDMs Cj4gLQlQQkxLX1JMX0xPVyA9IDQKPiAtfTsKPiAtCj4gLSNkZWZpbmUgcGJsa19kbWFfcHBhX3Np emUgKHNpemVvZih1NjQpICogTlZNX01BWF9WTEJBKQo+IC0KPiAtLyogd3JpdGUgYnVmZmVyIGNv bXBsZXRpb24gY29udGV4dCAqLwo+IC1zdHJ1Y3QgcGJsa19jX2N0eCB7Cj4gLQlzdHJ1Y3QgbGlz dF9oZWFkIGxpc3Q7CQkvKiBIZWFkIGZvciBvdXQtb2Ytb3JkZXIgY29tcGxldGlvbiAqLwo+IC0K PiAtCXVuc2lnbmVkIGxvbmcgKmx1bl9iaXRtYXA7CS8qIEx1bnMgdXNlZCBvbiBjdXJyZW50IHJl cXVlc3QgKi8KPiAtCXVuc2lnbmVkIGludCBzZW50cnk7Cj4gLQl1bnNpZ25lZCBpbnQgbnJfdmFs aWQ7Cj4gLQl1bnNpZ25lZCBpbnQgbnJfcGFkZGVkOwo+IC19Owo+IC0KPiAtLyogcmVhZCBjb250 ZXh0ICovCj4gLXN0cnVjdCBwYmxrX2dfY3R4IHsKPiAtCXZvaWQgKnByaXZhdGU7Cj4gLQl1bnNp Z25lZCBsb25nIHN0YXJ0X3RpbWU7Cj4gLQl1NjQgbGJhOwo+IC19Owo+IC0KPiAtLyogUGFkIGNv bnRleHQgKi8KPiAtc3RydWN0IHBibGtfcGFkX3JxIHsKPiAtCXN0cnVjdCBwYmxrICpwYmxrOwo+ IC0Jc3RydWN0IGNvbXBsZXRpb24gd2FpdDsKPiAtCXN0cnVjdCBrcmVmIHJlZjsKPiAtfTsKPiAt Cj4gLS8qIFJlY292ZXJ5IGNvbnRleHQgKi8KPiAtc3RydWN0IHBibGtfcmVjX2N0eCB7Cj4gLQlz dHJ1Y3QgcGJsayAqcGJsazsKPiAtCXN0cnVjdCBudm1fcnEgKnJxZDsKPiAtCXN0cnVjdCB3b3Jr X3N0cnVjdCB3c19yZWM7Cj4gLX07Cj4gLQo+IC0vKiBXcml0ZSBjb250ZXh0ICovCj4gLXN0cnVj dCBwYmxrX3dfY3R4IHsKPiAtCXN0cnVjdCBiaW9fbGlzdCBiaW9zOwkJLyogT3JpZ2luYWwgYmlv cyAtIHVzZWQgZm9yIGNvbXBsZXRpb24KPiAtCQkJCQkgKiBpbiBSRVFfRlVBLCBSRVFfRkxVU0gg Y2FzZQo+IC0JCQkJCSAqLwo+IC0JdTY0IGxiYTsJCQkvKiBMb2dpYyBhZGRyLiBhc3NvY2lhdGVk IHdpdGggZW50cnkgKi8KPiAtCXN0cnVjdCBwcGFfYWRkciBwcGE7CQkvKiBQaHlzaWMgYWRkci4g YXNzb2NpYXRlZCB3aXRoIGVudHJ5ICovCj4gLQlpbnQgZmxhZ3M7CQkJLyogV3JpdGUgY29udGV4 dCBmbGFncyAqLwo+IC19Owo+IC0KPiAtc3RydWN0IHBibGtfcmJfZW50cnkgewo+IC0Jc3RydWN0 IHBwYV9hZGRyIGNhY2hlbGluZTsJLyogQ2FjaGVsaW5lIGZvciB0aGlzIGVudHJ5ICovCj4gLQl2 b2lkICpkYXRhOwkJCS8qIFBvaW50ZXIgdG8gZGF0YSBvbiB0aGlzIGVudHJ5ICovCj4gLQlzdHJ1 Y3QgcGJsa193X2N0eCB3X2N0eDsJLyogQ29udGV4dCBmb3IgdGhpcyBlbnRyeSAqLwo+IC0Jc3Ry dWN0IGxpc3RfaGVhZCBpbmRleDsJCS8qIExpc3QgaGVhZCB0byBlbmFibGUgaW5kZXhlcyAqLwo+ IC19Owo+IC0KPiAtI2RlZmluZSBFTVBUWV9FTlRSWSAofjBVKQo+IC0KPiAtc3RydWN0IHBibGtf cmJfcGFnZXMgewo+IC0Jc3RydWN0IHBhZ2UgKnBhZ2VzOwo+IC0JaW50IG9yZGVyOwo+IC0Jc3Ry dWN0IGxpc3RfaGVhZCBsaXN0Owo+IC19Owo+IC0KPiAtc3RydWN0IHBibGtfcmIgewo+IC0Jc3Ry dWN0IHBibGtfcmJfZW50cnkgKmVudHJpZXM7CS8qIFJpbmcgYnVmZmVyIGVudHJpZXMgKi8KPiAt CXVuc2lnbmVkIGludCBtZW07CQkvKiBXcml0ZSBvZmZzZXQgLSBwb2ludHMgdG8gbmV4dAo+IC0J CQkJCSAqIHdyaXRhYmxlIGVudHJ5IGluIG1lbW9yeQo+IC0JCQkJCSAqLwo+IC0JdW5zaWduZWQg aW50IHN1Ym07CQkvKiBSZWFkIG9mZnNldCAtIHBvaW50cyB0byBsYXN0IGVudHJ5Cj4gLQkJCQkJ ICogdGhhdCBoYXMgYmVlbiBzdWJtaXR0ZWQgdG8gdGhlIG1lZGlhCj4gLQkJCQkJICogdG8gYmUg cGVyc2lzdGVkCj4gLQkJCQkJICovCj4gLQl1bnNpZ25lZCBpbnQgc3luYzsJCS8qIFN5bmNlZCAt IGJhY2twb2ludGVyIHRoYXQgc2lnbmFscwo+IC0JCQkJCSAqIHRoZSBsYXN0IHN1Ym1pdHRlZCBl bnRyeSB0aGF0IGhhcwo+IC0JCQkJCSAqIGJlZW4gc3VjY2Vzc2Z1bGx5IHBlcnNpc3RlZCB0byBt ZWRpYQo+IC0JCQkJCSAqLwo+IC0JdW5zaWduZWQgaW50IGZsdXNoX3BvaW50OwkvKiBTeW5jIHBv aW50IC0gbGFzdCBlbnRyeSB0aGF0IG11c3QgYmUKPiAtCQkJCQkgKiBmbHVzaGVkIHRvIHRoZSBt ZWRpYS4gVXNlZCB3aXRoCj4gLQkJCQkJICogUkVRX0ZMVVNIIGFuZCBSRVFfRlVBCj4gLQkJCQkJ ICovCj4gLQl1bnNpZ25lZCBpbnQgbDJwX3VwZGF0ZTsJLyogbDJwIHVwZGF0ZSBwb2ludCAtIG5l eHQgZW50cnkgZm9yCj4gLQkJCQkJICogd2hpY2ggbDJwIG1hcHBpbmcgd2lsbCBiZSB1cGRhdGVk IHRvCj4gLQkJCQkJICogY29udGFpbiBhIGRldmljZSBwcGEgYWRkcmVzcyAoaW5zdGVhZAo+IC0J CQkJCSAqIG9mIGEgY2FjaGVsaW5lCj4gLQkJCQkJICovCj4gLQl1bnNpZ25lZCBpbnQgbnJfZW50 cmllczsJLyogTnVtYmVyIG9mIGVudHJpZXMgaW4gd3JpdGUgYnVmZmVyIC0KPiAtCQkJCQkgKiBt dXN0IGJlIGEgcG93ZXIgb2YgdHdvCj4gLQkJCQkJICovCj4gLQl1bnNpZ25lZCBpbnQgc2VnX3Np emU7CQkvKiBTaXplIG9mIHRoZSBkYXRhIHNlZ21lbnRzIGJlaW5nCj4gLQkJCQkJICogc3RvcmVk IG9uIGVhY2ggZW50cnkuIFR5cGljYWxseSB0aGlzCj4gLQkJCQkJICogd2lsbCBiZSA0S0IKPiAt CQkJCQkgKi8KPiAtCj4gLQl1bnNpZ25lZCBpbnQgYmFja190aHJlczsJLyogVGhyZXNob2xkIHRo YXQgc2hhbGwgYmUgbWFpbnRhaW5lZCBieQo+IC0JCQkJCSAqIHRoZSBiYWNrcG9pbnRlciBpbiBv cmRlciB0byByZXNwZWN0Cj4gLQkJCQkJICogZ2VvLT5td19jdW5pdHMgb24gYSBwZXIgY2h1bmsg YmFzaXMKPiAtCQkJCQkgKi8KPiAtCj4gLQlzdHJ1Y3QgbGlzdF9oZWFkIHBhZ2VzOwkJLyogTGlz dCBvZiBkYXRhIHBhZ2VzICovCj4gLQo+IC0Jc3BpbmxvY2tfdCB3X2xvY2s7CQkvKiBXcml0ZSBs b2NrICovCj4gLQlzcGlubG9ja190IHNfbG9jazsJCS8qIFN5bmMgbG9jayAqLwo+IC0KPiAtI2lm ZGVmIENPTkZJR19OVk1fUEJMS19ERUJVRwo+IC0JYXRvbWljX3QgaW5mbGlnaHRfZmx1c2hfcG9p bnQ7CS8qIE5vdCBzZXJ2ZWQgUkVRX0ZMVVNIIHwgUkVRX0ZVQSAqLwo+IC0jZW5kaWYKPiAtfTsK PiAtCj4gLSNkZWZpbmUgUEJMS19SRUNPVkVSWV9TRUNUT1JTIDE2Cj4gLQo+IC1zdHJ1Y3QgcGJs a19sdW4gewo+IC0Jc3RydWN0IHBwYV9hZGRyIGJwcGE7Cj4gLQlzdHJ1Y3Qgc2VtYXBob3JlIHdy X3NlbTsKPiAtfTsKPiAtCj4gLXN0cnVjdCBwYmxrX2djX3JxIHsKPiAtCXN0cnVjdCBwYmxrX2xp bmUgKmxpbmU7Cj4gLQl2b2lkICpkYXRhOwo+IC0JdTY0IHBhZGRyX2xpc3RbTlZNX01BWF9WTEJB XTsKPiAtCXU2NCBsYmFfbGlzdFtOVk1fTUFYX1ZMQkFdOwo+IC0JaW50IG5yX3NlY3M7Cj4gLQlp bnQgc2Vjc190b19nYzsKPiAtCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKPiAtfTsKPiAtCj4gLXN0 cnVjdCBwYmxrX2djIHsKPiAtCS8qIFRoZXNlIHN0YXRlcyBhcmUgbm90IHByb3RlY3RlZCBieSBh IGxvY2sgc2luY2UgKGkpIHRoZXkgYXJlIGluIHRoZQo+IC0JICogZmFzdCBwYXRoLCBhbmQgKGlp KSB0aGV5IGFyZSBub3QgY3JpdGljYWwuCj4gLQkgKi8KPiAtCWludCBnY19hY3RpdmU7Cj4gLQlp bnQgZ2NfZW5hYmxlZDsKPiAtCWludCBnY19mb3JjZWQ7Cj4gLQo+IC0Jc3RydWN0IHRhc2tfc3Ry dWN0ICpnY190czsKPiAtCXN0cnVjdCB0YXNrX3N0cnVjdCAqZ2Nfd3JpdGVyX3RzOwo+IC0Jc3Ry dWN0IHRhc2tfc3RydWN0ICpnY19yZWFkZXJfdHM7Cj4gLQo+IC0Jc3RydWN0IHdvcmtxdWV1ZV9z dHJ1Y3QgKmdjX2xpbmVfcmVhZGVyX3dxOwo+IC0Jc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmdj X3JlYWRlcl93cTsKPiAtCj4gLQlzdHJ1Y3QgdGltZXJfbGlzdCBnY190aW1lcjsKPiAtCj4gLQlz dHJ1Y3Qgc2VtYXBob3JlIGdjX3NlbTsKPiAtCWF0b21pY190IHJlYWRfaW5mbGlnaHRfZ2M7IC8q IE51bWJlciBvZiBsaW5lcyB3aXRoIGluZmxpZ2h0IEdDIHJlYWRzICovCj4gLQlhdG9taWNfdCBw aXBlbGluZV9nYzsJICAgLyogTnVtYmVyIG9mIGxpbmVzIGluIHRoZSBHQyBwaXBlbGluZSAtCj4g LQkJCQkgICAgKiBzdGFydGVkIHJlYWRzIHRvIGZpbmlzaGVkIHdyaXRlcwo+IC0JCQkJICAgICov Cj4gLQlpbnQgd19lbnRyaWVzOwo+IC0KPiAtCXN0cnVjdCBsaXN0X2hlYWQgd19saXN0Owo+IC0J c3RydWN0IGxpc3RfaGVhZCByX2xpc3Q7Cj4gLQo+IC0Jc3BpbmxvY2tfdCBsb2NrOwo+IC0Jc3Bp bmxvY2tfdCB3X2xvY2s7Cj4gLQlzcGlubG9ja190IHJfbG9jazsKPiAtfTsKPiAtCj4gLXN0cnVj dCBwYmxrX3JsIHsKPiAtCXVuc2lnbmVkIGludCBoaWdoOwkvKiBVcHBlciB0aHJlc2hvbGQgZm9y IHJhdGUgbGltaXRlciAoZnJlZSBydW4gLQo+IC0JCQkJICogdXNlciBJL08gcmF0ZSBsaW1pdGVy Cj4gLQkJCQkgKi8KPiAtCXVuc2lnbmVkIGludCBoaWdoX3B3OwkvKiBIaWdoIHJvdW5kZWQgdXAg YXMgYSBwb3dlciBvZiAyICovCj4gLQo+IC0jZGVmaW5lIFBCTEtfVVNFUl9ISUdIX1RIUlMgOAkv KiBCZWdpbiB3cml0ZSBsaW1pdCBhdCAxMiUgYXZhaWxhYmxlIGJsa3MgKi8KPiAtI2RlZmluZSBQ QkxLX1VTRVJfTE9XX1RIUlMgMTAJLyogQWdncmVzc2l2ZSBHQyBhdCAxMCUgYXZhaWxhYmxlIGJs b2NrcyAqLwo+IC0KPiAtCWludCByYl93aW5kb3dzX3B3OwkvKiBOdW1iZXIgb2YgcmF0ZSB3aW5k b3dzIGluIHRoZSB3cml0ZSBidWZmZXIKPiAtCQkJCSAqIGdpdmVuIGFzIGEgcG93ZXItb2YtMi4g VGhpcyBndWFyYW50ZWVzIHRoYXQKPiAtCQkJCSAqIHdoZW4gdXNlciBJL08gaXMgYmVpbmcgcmF0 ZSBsaW1pdGVkLCB0aGVyZQo+IC0JCQkJICogd2lsbCBiZSByZXNlcnZlZCBlbm91Z2ggc3BhY2Ug Zm9yIHRoZSBHQyB0bwo+IC0JCQkJICogcGxhY2UgaXRzIHBheWxvYWQuIEEgd2luZG93IGlzIG9m Cj4gLQkJCQkgKiBwYmxrLT5tYXhfd3JpdGVfcGdzIHNpemUsIHdoaWNoIGluIE5WTWUgaXMKPiAt CQkJCSAqIDY0LCBpLmUuLCAyNTZrYi4KPiAtCQkJCSAqLwo+IC0JaW50IHJiX2J1ZGdldDsJCS8q IFRvdGFsIG51bWJlciBvZiBlbnRyaWVzIGF2YWlsYWJsZSBmb3IgSS9PICovCj4gLQlpbnQgcmJf dXNlcl9tYXg7CS8qIE1heCBidWZmZXIgZW50cmllcyBhdmFpbGFibGUgZm9yIHVzZXIgSS9PICov Cj4gLQlpbnQgcmJfZ2NfbWF4OwkJLyogTWF4IGJ1ZmZlciBlbnRyaWVzIGF2YWlsYWJsZSBmb3Ig R0MgSS9PICovCj4gLQlpbnQgcmJfZ2NfcnN2OwkJLyogUmVzZXJ2ZWQgYnVmZmVyIGVudHJpZXMg Zm9yIEdDIEkvTyAqLwo+IC0JaW50IHJiX3N0YXRlOwkJLyogUmF0ZS1saW1pdGVyIGN1cnJlbnQg c3RhdGUgKi8KPiAtCWludCByYl9tYXhfaW87CQkvKiBNYXhpbXVtIHNpemUgZm9yIGFuIEkvTyBn aXZpbmcgdGhlIGNvbmZpZyAqLwo+IC0KPiAtCWF0b21pY190IHJiX3VzZXJfY250OwkvKiBVc2Vy IEkvTyBidWZmZXIgY291bnRlciAqLwo+IC0JYXRvbWljX3QgcmJfZ2NfY250OwkvKiBHQyBJL08g YnVmZmVyIGNvdW50ZXIgKi8KPiAtCWF0b21pY190IHJiX3NwYWNlOwkvKiBTcGFjZSBsaW1pdCBp biBjYXNlIG9mIHJlYWNoaW5nIGNhcGFjaXR5ICovCj4gLQo+IC0JaW50IHJzdl9ibG9ja3M7CQkv KiBSZXNlcnZlZCBibG9ja3MgZm9yIEdDICovCj4gLQo+IC0JaW50IHJiX3VzZXJfYWN0aXZlOwo+ IC0JaW50IHJiX2djX2FjdGl2ZTsKPiAtCj4gLQlhdG9taWNfdCB3ZXJyX2xpbmVzOwkvKiBOdW1i ZXIgb2Ygd3JpdGUgZXJyb3IgbGluZXMgdGhhdCBuZWVkcyBnYyAqLwo+IC0KPiAtCXN0cnVjdCB0 aW1lcl9saXN0IHVfdGltZXI7Cj4gLQo+IC0JdW5zaWduZWQgbG9uZyB0b3RhbF9ibG9ja3M7Cj4g LQo+IC0JYXRvbWljX3QgZnJlZV9ibG9ja3M7CQkvKiBUb3RhbCBudW1iZXIgb2YgZnJlZSBibG9j a3MgKCsgT1ApICovCj4gLQlhdG9taWNfdCBmcmVlX3VzZXJfYmxvY2tzOwkvKiBOdW1iZXIgb2Yg dXNlciBmcmVlIGJsb2NrcyAobm8gT1ApICovCj4gLX07Cj4gLQo+IC0jZGVmaW5lIFBCTEtfTElO RV9FTVBUWSAofjBVKQo+IC0KPiAtZW51bSB7Cj4gLQkvKiBMaW5lIFR5cGVzICovCj4gLQlQQkxL X0xJTkVUWVBFX0ZSRUUgPSAwLAo+IC0JUEJMS19MSU5FVFlQRV9MT0cgPSAxLAo+IC0JUEJMS19M SU5FVFlQRV9EQVRBID0gMiwKPiAtCj4gLQkvKiBMaW5lIHN0YXRlICovCj4gLQlQQkxLX0xJTkVT VEFURV9ORVcgPSA5LAo+IC0JUEJMS19MSU5FU1RBVEVfRlJFRSA9IDEwLAo+IC0JUEJMS19MSU5F U1RBVEVfT1BFTiA9IDExLAo+IC0JUEJMS19MSU5FU1RBVEVfQ0xPU0VEID0gMTIsCj4gLQlQQkxL X0xJTkVTVEFURV9HQyA9IDEzLAo+IC0JUEJMS19MSU5FU1RBVEVfQkFEID0gMTQsCj4gLQlQQkxL X0xJTkVTVEFURV9DT1JSVVBUID0gMTUsCj4gLQo+IC0JLyogR0MgZ3JvdXAgKi8KPiAtCVBCTEtf TElORUdDX05PTkUgPSAyMCwKPiAtCVBCTEtfTElORUdDX0VNUFRZID0gMjEsCj4gLQlQQkxLX0xJ TkVHQ19MT1cgPSAyMiwKPiAtCVBCTEtfTElORUdDX01JRCA9IDIzLAo+IC0JUEJMS19MSU5FR0Nf SElHSCA9IDI0LAo+IC0JUEJMS19MSU5FR0NfRlVMTCA9IDI1LAo+IC0JUEJMS19MSU5FR0NfV0VS UiA9IDI2Cj4gLX07Cj4gLQo+IC0jZGVmaW5lIFBCTEtfTUFHSUMgMHg3MDYyNmM2YiAvKnBibGsq Lwo+IC0KPiAtLyogZW1ldGEvc21ldGEgcGVyc2lzdGVudCBzdG9yYWdlIGZvcm1hdCB2ZXJzaW9u czoKPiAtICogQ2hhbmdlcyBpbiBtYWpvciB2ZXJzaW9uIHJlcXVpcmVzIG9mZmxpbmUgbWlncmF0 aW9uLgo+IC0gKiBDaGFuZ2VzIGluIG1pbm9yIHZlcnNpb24gYXJlIGhhbmRsZWQgYXV0b21hdGlj YWxseSBkdXJpbmcKPiAtICogcmVjb3ZlcnkuCj4gLSAqLwo+IC0KPiAtI2RlZmluZSBTTUVUQV9W RVJTSU9OX01BSk9SICgwKQo+IC0jZGVmaW5lIFNNRVRBX1ZFUlNJT05fTUlOT1IgKDEpCj4gLQo+ IC0jZGVmaW5lIEVNRVRBX1ZFUlNJT05fTUFKT1IgKDApCj4gLSNkZWZpbmUgRU1FVEFfVkVSU0lP Tl9NSU5PUiAoMikKPiAtCj4gLXN0cnVjdCBsaW5lX2hlYWRlciB7Cj4gLQlfX2xlMzIgY3JjOwo+ IC0JX19sZTMyIGlkZW50aWZpZXI7CS8qIHBibGsgaWRlbnRpZmllciAqLwo+IC0JX191OCB1dWlk WzE2XTsJCS8qIGluc3RhbmNlIHV1aWQgKi8KPiAtCV9fbGUxNiB0eXBlOwkJLyogbGluZSB0eXBl ICovCj4gLQlfX3U4IHZlcnNpb25fbWFqb3I7CS8qIHZlcnNpb24gbWFqb3IgKi8KPiAtCV9fdTgg dmVyc2lvbl9taW5vcjsJLyogdmVyc2lvbiBtaW5vciAqLwo+IC0JX19sZTMyIGlkOwkJLyogbGlu ZSBpZCBmb3IgY3VycmVudCBsaW5lICovCj4gLX07Cj4gLQo+IC1zdHJ1Y3QgbGluZV9zbWV0YSB7 Cj4gLQlzdHJ1Y3QgbGluZV9oZWFkZXIgaGVhZGVyOwo+IC0KPiAtCV9fbGUzMiBjcmM7CQkvKiBG dWxsIHN0cnVjdHVyZSBpbmNsdWRpbmcgc3RydWN0IGNyYyAqLwo+IC0JLyogUHJldmlvdXMgbGlu ZSBtZXRhZGF0YSAqLwo+IC0JX19sZTMyIHByZXZfaWQ7CQkvKiBMaW5lIGlkIGZvciBwcmV2aW91 cyBsaW5lICovCj4gLQo+IC0JLyogQ3VycmVudCBsaW5lIG1ldGFkYXRhICovCj4gLQlfX2xlNjQg c2VxX25yOwkJLyogU2VxdWVuY2UgbnVtYmVyIGZvciBjdXJyZW50IGxpbmUgKi8KPiAtCj4gLQkv KiBBY3RpdmUgd3JpdGVycyAqLwo+IC0JX19sZTMyIHdpbmRvd193cl9sdW47CS8qIE51bWJlciBv ZiBwYXJhbGxlbCBMVU5zIHRvIHdyaXRlICovCj4gLQo+IC0JX19sZTMyIHJzdmRbMl07Cj4gLQo+ IC0JX19sZTY0IGx1bl9iaXRtYXBbXTsKPiAtfTsKPiAtCj4gLQo+IC0vKgo+IC0gKiBNZXRhZGF0 YSBsYXlvdXQgaW4gbWVkaWE6Cj4gLSAqCUZpcnN0IHNlY3RvcjoKPiAtICoJCTEuIHN0cnVjdCBs aW5lX2VtZXRhCj4gLSAqCQkyLiBiYWQgYmxvY2sgYml0bWFwICh1NjQgKiB3aW5kb3dfd3JfbHVu KQo+IC0gKgkJMy4gd3JpdGUgYW1wbGlmaWNhdGlvbiBjb3VudGVycwo+IC0gKglNaWQgc2VjdG9y cyAoc3RhcnQgYXQgbGJhc19zZWN0b3IpOgo+IC0gKgkJMy4gbnJfbGJhcyAodTY0KSBmb3JtaW5n IGxiYSBsaXN0Cj4gLSAqCUxhc3Qgc2VjdG9ycyAoc3RhcnQgYXQgdnNjX3NlY3Rvcik6Cj4gLSAq CQk0LiB1MzIgdmFsaWQgc2VjdG9yIGNvdW50ICh2c2MpIGZvciBhbGwgbGluZXMgKH4wVTogZnJl ZSBsaW5lKQo+IC0gKi8KPiAtc3RydWN0IGxpbmVfZW1ldGEgewo+IC0Jc3RydWN0IGxpbmVfaGVh ZGVyIGhlYWRlcjsKPiAtCj4gLQlfX2xlMzIgY3JjOwkJLyogRnVsbCBzdHJ1Y3R1cmUgaW5jbHVk aW5nIHN0cnVjdCBjcmMgKi8KPiAtCj4gLQkvKiBQcmV2aW91cyBsaW5lIG1ldGFkYXRhICovCj4g LQlfX2xlMzIgcHJldl9pZDsJCS8qIExpbmUgaWQgZm9yIHByZXYgbGluZSAqLwo+IC0KPiAtCS8q IEN1cnJlbnQgbGluZSBtZXRhZGF0YSAqLwo+IC0JX19sZTY0IHNlcV9ucjsJCS8qIFNlcXVlbmNl IG51bWJlciBmb3IgY3VycmVudCBsaW5lICovCj4gLQo+IC0JLyogQWN0aXZlIHdyaXRlcnMgKi8K PiAtCV9fbGUzMiB3aW5kb3dfd3JfbHVuOwkvKiBOdW1iZXIgb2YgcGFyYWxsZWwgTFVOcyB0byB3 cml0ZSAqLwo+IC0KPiAtCS8qIEJvb2trZWVwaW5nIGZvciByZWNvdmVyeSAqLwo+IC0JX19sZTMy IG5leHRfaWQ7CQkvKiBMaW5lIGlkIGZvciBuZXh0IGxpbmUgKi8KPiAtCV9fbGU2NCBucl9sYmFz OwkJLyogTnVtYmVyIG9mIGxiYXMgbWFwcGVkIGluIGxpbmUgKi8KPiAtCV9fbGU2NCBucl92YWxp ZF9sYmFzOwkvKiBOdW1iZXIgb2YgdmFsaWQgbGJhcyBtYXBwZWQgaW4gbGluZSAqLwo+IC0JX19s ZTY0IGJiX2JpdG1hcFtdOyAgICAgLyogVXBkYXRlZCBiYWQgYmxvY2sgYml0bWFwIGZvciBsaW5l ICovCj4gLX07Cj4gLQo+IC0KPiAtLyogV3JpdGUgYW1wbGlmaWNhdGlvbiBjb3VudGVycyBzdG9y ZWQgb24gbWVkaWEgKi8KPiAtc3RydWN0IHdhX2NvdW50ZXJzIHsKPiAtCV9fbGU2NCB1c2VyOwkJ LyogTnVtYmVyIG9mIHVzZXIgd3JpdHRlbiBzZWN0b3JzICovCj4gLQlfX2xlNjQgZ2M7CQkvKiBO dW1iZXIgb2Ygc2VjdG9ycyB3cml0dGVuIGJ5IEdDKi8KPiAtCV9fbGU2NCBwYWQ7CQkvKiBOdW1i ZXIgb2YgcGFkZGVkIHNlY3RvcnMgKi8KPiAtfTsKPiAtCj4gLXN0cnVjdCBwYmxrX2VtZXRhIHsK PiAtCXN0cnVjdCBsaW5lX2VtZXRhICpidWY7CQkvKiBlbWV0YSBidWZmZXIgaW4gbWVkaWEgZm9y bWF0ICovCj4gLQlpbnQgbWVtOwkJCS8qIFdyaXRlIG9mZnNldCAtIHBvaW50cyB0byBuZXh0Cj4g LQkJCQkJICogd3JpdGFibGUgZW50cnkgaW4gbWVtb3J5Cj4gLQkJCQkJICovCj4gLQlhdG9taWNf dCBzeW5jOwkJCS8qIFN5bmNlZCAtIGJhY2twb2ludGVyIHRoYXQgc2lnbmFscyB0aGUKPiAtCQkJ CQkgKiBsYXN0IGVudHJ5IHRoYXQgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5Cj4gLQkJCQkJICogcGVy c2lzdGVkIHRvIG1lZGlhCj4gLQkJCQkJICovCj4gLQl1bnNpZ25lZCBpbnQgbnJfZW50cmllczsJ LyogTnVtYmVyIG9mIGVtZXRhIGVudHJpZXMgKi8KPiAtfTsKPiAtCj4gLXN0cnVjdCBwYmxrX3Nt ZXRhIHsKPiAtCXN0cnVjdCBsaW5lX3NtZXRhICpidWY7CQkvKiBzbWV0YSBidWZmZXIgaW4gcGVy c2lzdGVudCBmb3JtYXQgKi8KPiAtfTsKPiAtCj4gLXN0cnVjdCBwYmxrX3dfZXJyX2djIHsKPiAt CWludCBoYXNfd3JpdGVfZXJyOwo+IC0JaW50IGhhc19nY19lcnI7Cj4gLQlfX2xlNjQgKmxiYV9s aXN0Owo+IC19Owo+IC0KPiAtc3RydWN0IHBibGtfbGluZSB7Cj4gLQlzdHJ1Y3QgcGJsayAqcGJs azsKPiAtCXVuc2lnbmVkIGludCBpZDsJCS8qIExpbmUgbnVtYmVyIGNvcnJlc3BvbmRzIHRvIHRo ZQo+IC0JCQkJCSAqIGJsb2NrIGxpbmUKPiAtCQkJCQkgKi8KPiAtCXVuc2lnbmVkIGludCBzZXFf bnI7CQkvKiBVbmlxdWUgbGluZSBzZXF1ZW5jZSBudW1iZXIgKi8KPiAtCj4gLQlpbnQgc3RhdGU7 CQkJLyogUEJMS19MSU5FU1RBVEVfWCAqLwo+IC0JaW50IHR5cGU7CQkJLyogUEJMS19MSU5FVFlQ RV9YICovCj4gLQlpbnQgZ2NfZ3JvdXA7CQkJLyogUEJMS19MSU5FR0NfWCAqLwo+IC0Jc3RydWN0 IGxpc3RfaGVhZCBsaXN0OwkJLyogRnJlZSwgR0MgbGlzdHMgKi8KPiAtCj4gLQl1bnNpZ25lZCBs b25nICpsdW5fYml0bWFwOwkvKiBCaXRtYXAgZm9yIExVTnMgbWFwcGVkIGluIGxpbmUgKi8KPiAt Cj4gLQlzdHJ1Y3QgbnZtX2Noa19tZXRhICpjaGtzOwkvKiBDaHVua3MgZm9ybWluZyBsaW5lICov Cj4gLQo+IC0Jc3RydWN0IHBibGtfc21ldGEgKnNtZXRhOwkvKiBTdGFydCBtZXRhZGF0YSAqLwo+ IC0Jc3RydWN0IHBibGtfZW1ldGEgKmVtZXRhOwkvKiBFbmQgbWVkYXRhZGEgKi8KPiAtCj4gLQlp bnQgbWV0YV9saW5lOwkJCS8qIE1ldGFkYXRhIGxpbmUgaWQgKi8KPiAtCWludCBtZXRhX2Rpc3Rh bmNlOwkJLyogRGlzdGFuY2UgYmV0d2VlbiBkYXRhIGFuZCBtZXRhZGF0YSAqLwo+IC0KPiAtCXU2 NCBlbWV0YV9zc2VjOwkJCS8qIFNlY3RvciB3aGVyZSBlbWV0YSBzdGFydHMgKi8KPiAtCj4gLQl1 bnNpZ25lZCBpbnQgc2VjX2luX2xpbmU7CS8qIE51bWJlciBvZiB1c2FibGUgc2VjcyBpbiBsaW5l ICovCj4gLQo+IC0JYXRvbWljX3QgYmxrX2luX2xpbmU7CQkvKiBOdW1iZXIgb2YgZ29vZCBibG9j a3MgaW4gbGluZSAqLwo+IC0JdW5zaWduZWQgbG9uZyAqYmxrX2JpdG1hcDsJLyogQml0bWFwIGZv ciB2YWxpZC9pbnZhbGlkIGJsb2NrcyAqLwo+IC0JdW5zaWduZWQgbG9uZyAqZXJhc2VfYml0bWFw OwkvKiBCaXRtYXAgZm9yIGVyYXNlZCBibG9ja3MgKi8KPiAtCj4gLQl1bnNpZ25lZCBsb25nICpt YXBfYml0bWFwOwkvKiBCaXRtYXAgZm9yIG1hcHBlZCBzZWN0b3JzIGluIGxpbmUgKi8KPiAtCXVu c2lnbmVkIGxvbmcgKmludmFsaWRfYml0bWFwOwkvKiBCaXRtYXAgZm9yIGludmFsaWQgc2VjdG9y cyBpbiBsaW5lICovCj4gLQo+IC0JYXRvbWljX3QgbGVmdF9lYmxrczsJCS8qIEJsb2NrcyBsZWZ0 IGZvciBlcmFzaW5nICovCj4gLQlhdG9taWNfdCBsZWZ0X3NlYmxrczsJCS8qIEJsb2NrcyBsZWZ0 IGZvciBzeW5jIGVyYXNpbmcgKi8KPiAtCj4gLQlpbnQgbGVmdF9tc2VjczsJCQkvKiBTZWN0b3Jz IGxlZnQgZm9yIG1hcHBpbmcgKi8KPiAtCXVuc2lnbmVkIGludCBjdXJfc2VjOwkJLyogU2VjdG9y IG1hcCBwb2ludGVyICovCj4gLQl1bnNpZ25lZCBpbnQgbnJfdmFsaWRfbGJhczsJLyogTnVtYmVy IG9mIHZhbGlkIGxiYXMgaW4gbGluZSAqLwo+IC0KPiAtCV9fbGUzMiAqdnNjOwkJCS8qIFZhbGlk IHNlY3RvciBjb3VudCBpbiBsaW5lICovCj4gLQo+IC0Jc3RydWN0IGtyZWYgcmVmOwkJLyogV3Jp dGUgYnVmZmVyIEwyUCByZWZlcmVuY2VzICovCj4gLQlhdG9taWNfdCBzZWNfdG9fdXBkYXRlOyAg ICAgICAgIC8qIE91dHN0YW5kaW5nIEwyUCB1cGRhdGVzIHRvIHBwYSAqLwo+IC0KPiAtCXN0cnVj dCBwYmxrX3dfZXJyX2djICp3X2Vycl9nYzsJLyogV3JpdGUgZXJyb3IgZ2MgcmVjb3ZlcnkgbWV0 YWRhdGEgKi8KPiAtCj4gLQlzcGlubG9ja190IGxvY2s7CQkvKiBOZWNlc3NhcnkgZm9yIGludmFs aWRfYml0bWFwIG9ubHkgKi8KPiAtfTsKPiAtCj4gLSNkZWZpbmUgUEJMS19EQVRBX0xJTkVTIDQK PiAtCj4gLWVudW0gewo+IC0JUEJMS19FTUVUQV9UWVBFX0hFQURFUiA9IDEsCS8qIHN0cnVjdCBs aW5lX2VtZXRhIGZpcnN0IHNlY3RvciAqLwo+IC0JUEJMS19FTUVUQV9UWVBFX0xMQkEgPSAyLAkv KiBsYmEgbGlzdCAtIHR5cGU6IF9fbGU2NCAqLwo+IC0JUEJMS19FTUVUQV9UWVBFX1ZTQyA9IDMs CS8qIHZzYyBsaXN0IC0gdHlwZTogX19sZTMyICovCj4gLX07Cj4gLQo+IC1zdHJ1Y3QgcGJsa19s aW5lX21nbXQgewo+IC0JaW50IG5yX2xpbmVzOwkJCS8qIFRvdGFsIG51bWJlciBvZiBmdWxsIGxp bmVzICovCj4gLQlpbnQgbnJfZnJlZV9saW5lczsJCS8qIE51bWJlciBvZiBmdWxsIGxpbmVzIGlu IGZyZWUgbGlzdCAqLwo+IC0KPiAtCS8qIEZyZWUgbGlzdHMgLSB1c2UgZnJlZV9sb2NrICovCj4g LQlzdHJ1Y3QgbGlzdF9oZWFkIGZyZWVfbGlzdDsJLyogRnVsbCBsaW5lcyByZWFkeSB0byB1c2Ug Ki8KPiAtCXN0cnVjdCBsaXN0X2hlYWQgY29ycnVwdF9saXN0OwkvKiBGdWxsIGxpbmVzIGNvcnJ1 cHRlZCAqLwo+IC0Jc3RydWN0IGxpc3RfaGVhZCBiYWRfbGlzdDsJLyogRnVsbCBsaW5lcyBiYWQg Ki8KPiAtCj4gLQkvKiBHQyBsaXN0cyAtIHVzZSBnY19sb2NrICovCj4gLQlzdHJ1Y3QgbGlzdF9o ZWFkICpnY19saXN0c1tQQkxLX0dDX05SX0xJU1RTXTsKPiAtCXN0cnVjdCBsaXN0X2hlYWQgZ2Nf aGlnaF9saXN0OwkvKiBGdWxsIGxpbmVzIHJlYWR5IHRvIEdDLCBoaWdoIGlzYyAqLwo+IC0Jc3Ry dWN0IGxpc3RfaGVhZCBnY19taWRfbGlzdDsJLyogRnVsbCBsaW5lcyByZWFkeSB0byBHQywgbWlk IGlzYyAqLwo+IC0Jc3RydWN0IGxpc3RfaGVhZCBnY19sb3dfbGlzdDsJLyogRnVsbCBsaW5lcyBy ZWFkeSB0byBHQywgbG93IGlzYyAqLwo+IC0KPiAtCXN0cnVjdCBsaXN0X2hlYWQgZ2Nfd2Vycl9s aXN0OyAgLyogV3JpdGUgZXJyIHJlY292ZXJ5IGxpc3QgKi8KPiAtCj4gLQlzdHJ1Y3QgbGlzdF9o ZWFkIGdjX2Z1bGxfbGlzdDsJLyogRnVsbCBsaW5lcyByZWFkeSB0byBHQywgbm8gdmFsaWQgKi8K PiAtCXN0cnVjdCBsaXN0X2hlYWQgZ2NfZW1wdHlfbGlzdDsJLyogRnVsbCBsaW5lcyBjbG9zZSwg YWxsIHZhbGlkICovCj4gLQo+IC0Jc3RydWN0IHBibGtfbGluZSAqbG9nX2xpbmU7CS8qIEN1cnJl bnQgRlRMIGxvZyBsaW5lICovCj4gLQlzdHJ1Y3QgcGJsa19saW5lICpkYXRhX2xpbmU7CS8qIEN1 cnJlbnQgZGF0YSBsaW5lICovCj4gLQlzdHJ1Y3QgcGJsa19saW5lICpsb2dfbmV4dDsJLyogTmV4 dCBGVEwgbG9nIGxpbmUgKi8KPiAtCXN0cnVjdCBwYmxrX2xpbmUgKmRhdGFfbmV4dDsJLyogTmV4 dCBkYXRhIGxpbmUgKi8KPiAtCj4gLQlzdHJ1Y3QgbGlzdF9oZWFkIGVtZXRhX2xpc3Q7CS8qIExp bmVzIHF1ZXVlZCB0byBzY2hlZHVsZSBlbWV0YSAqLwo+IC0KPiAtCV9fbGUzMiAqdnNjX2xpc3Q7 CQkvKiBWYWxpZCBzZWN0b3IgY291bnRzIGZvciBhbGwgbGluZXMgKi8KPiAtCj4gLQkvKiBQcmUt YWxsb2NhdGVkIG1ldGFkYXRhIGZvciBkYXRhIGxpbmVzICovCj4gLQlzdHJ1Y3QgcGJsa19zbWV0 YSAqc2xpbmVfbWV0YVtQQkxLX0RBVEFfTElORVNdOwo+IC0Jc3RydWN0IHBibGtfZW1ldGEgKmVs aW5lX21ldGFbUEJMS19EQVRBX0xJTkVTXTsKPiAtCXVuc2lnbmVkIGxvbmcgbWV0YV9iaXRtYXA7 Cj4gLQo+IC0JLyogQ2FjaGUgYW5kIG1lbXBvb2wgZm9yIG1hcC9pbnZhbGlkIGJpdG1hcHMgKi8K PiAtCXN0cnVjdCBrbWVtX2NhY2hlICpiaXRtYXBfY2FjaGU7Cj4gLQltZW1wb29sX3QgKmJpdG1h cF9wb29sOwo+IC0KPiAtCS8qIEhlbHBlcnMgZm9yIGZhc3QgYml0bWFwIGNhbGN1bGF0aW9ucyAq Lwo+IC0JdW5zaWduZWQgbG9uZyAqYmJfdGVtcGxhdGU7Cj4gLQl1bnNpZ25lZCBsb25nICpiYl9h dXg7Cj4gLQo+IC0JdW5zaWduZWQgbG9uZyBkX3NlcV9ucjsJCS8qIERhdGEgbGluZSB1bmlxdWUg c2VxdWVuY2UgbnVtYmVyICovCj4gLQl1bnNpZ25lZCBsb25nIGxfc2VxX25yOwkJLyogTG9nIGxp bmUgdW5pcXVlIHNlcXVlbmNlIG51bWJlciAqLwo+IC0KPiAtCXNwaW5sb2NrX3QgZnJlZV9sb2Nr Owo+IC0Jc3BpbmxvY2tfdCBjbG9zZV9sb2NrOwo+IC0Jc3BpbmxvY2tfdCBnY19sb2NrOwo+IC19 Owo+IC0KPiAtc3RydWN0IHBibGtfbGluZV9tZXRhIHsKPiAtCXVuc2lnbmVkIGludCBzbWV0YV9s ZW47CQkvKiBUb3RhbCBsZW5ndGggZm9yIHNtZXRhICovCj4gLQl1bnNpZ25lZCBpbnQgc21ldGFf c2VjOwkJLyogU2VjdG9ycyBuZWVkZWQgZm9yIHNtZXRhICovCj4gLQo+IC0JdW5zaWduZWQgaW50 IGVtZXRhX2xlbls0XTsJLyogTGVuZ3RocyBmb3IgZW1ldGE6Cj4gLQkJCQkJICogIFswXTogVG90 YWwKPiAtCQkJCQkgKiAgWzFdOiBzdHJ1Y3QgbGluZV9lbWV0YSArCj4gLQkJCQkJICogICAgICAg YmJfYml0bWFwICsgc3RydWN0IHdhX2NvdW50ZXJzCj4gLQkJCQkJICogIFsyXTogTDJQIHBvcnRp b24KPiAtCQkJCQkgKiAgWzNdOiB2c2MKPiAtCQkJCQkgKi8KPiAtCXVuc2lnbmVkIGludCBlbWV0 YV9zZWNbNF07CS8qIFNlY3RvcnMgbmVlZGVkIGZvciBlbWV0YS4gU2FtZSBsYXlvdXQKPiAtCQkJ CQkgKiBhcyBlbWV0YV9sZW4KPiAtCQkJCQkgKi8KPiAtCj4gLQl1bnNpZ25lZCBpbnQgZW1ldGFf YmI7CQkvKiBCb3VuZGFyeSBmb3IgYmIgdGhhdCBhZmZlY3RzIGVtZXRhICovCj4gLQo+IC0JdW5z aWduZWQgaW50IHZzY19saXN0X2xlbjsJLyogTGVuZ3RoIGZvciB2c2MgbGlzdCAqLwo+IC0JdW5z aWduZWQgaW50IHNlY19iaXRtYXBfbGVuOwkvKiBMZW5ndGggZm9yIHNlY3RvciBiaXRtYXAgaW4g bGluZSAqLwo+IC0JdW5zaWduZWQgaW50IGJsa19iaXRtYXBfbGVuOwkvKiBMZW5ndGggZm9yIGJs b2NrIGJpdG1hcCBpbiBsaW5lICovCj4gLQl1bnNpZ25lZCBpbnQgbHVuX2JpdG1hcF9sZW47CS8q IExlbmd0aCBmb3IgbHVuIGJpdG1hcCBpbiBsaW5lICovCj4gLQo+IC0JdW5zaWduZWQgaW50IGJs a19wZXJfbGluZTsJLyogTnVtYmVyIG9mIGJsb2NrcyBpbiBhIGZ1bGwgbGluZSAqLwo+IC0JdW5z aWduZWQgaW50IHNlY19wZXJfbGluZTsJLyogTnVtYmVyIG9mIHNlY3RvcnMgaW4gYSBsaW5lICov Cj4gLQl1bnNpZ25lZCBpbnQgZHNlY19wZXJfbGluZTsJLyogTnVtYmVyIG9mIGRhdGEgc2VjdG9y cyBpbiBhIGxpbmUgKi8KPiAtCXVuc2lnbmVkIGludCBtaW5fYmxrX2xpbmU7CS8qIE1pbi4gbnVt YmVyIG9mIGdvb2QgYmxvY2tzIGluIGxpbmUgKi8KPiAtCj4gLQl1bnNpZ25lZCBpbnQgbWlkX3Ro cnM7CQkvKiBUaHJlc2hvbGQgZm9yIEdDIG1pZCBsaXN0ICovCj4gLQl1bnNpZ25lZCBpbnQgaGln aF90aHJzOwkJLyogVGhyZXNob2xkIGZvciBHQyBoaWdoIGxpc3QgKi8KPiAtCj4gLQl1bnNpZ25l ZCBpbnQgbWV0YV9kaXN0YW5jZTsJLyogRGlzdGFuY2UgYmV0d2VlbiBkYXRhIGFuZCBtZXRhZGF0 YSAqLwo+IC19Owo+IC0KPiAtZW51bSB7Cj4gLQlQQkxLX1NUQVRFX1JVTk5JTkcgPSAwLAo+IC0J UEJMS19TVEFURV9TVE9QUElORyA9IDEsCj4gLQlQQkxLX1NUQVRFX1JFQ09WRVJJTkcgPSAyLAo+ IC0JUEJMS19TVEFURV9TVE9QUEVEID0gMywKPiAtfTsKPiAtCj4gLS8qIEludGVybmFsIGZvcm1h dCB0byBzdXBwb3J0IG5vdCBwb3dlci1vZi0yIGRldmljZSBmb3JtYXRzICovCj4gLXN0cnVjdCBw YmxrX2FkZHJmIHsKPiAtCS8qIGdlbiB0byBkZXYgKi8KPiAtCWludCBzZWNfc3RyaXBlOwo+IC0J aW50IGNoX3N0cmlwZTsKPiAtCWludCBsdW5fc3RyaXBlOwo+IC0KPiAtCS8qIGRldiB0byBnZW4g Ki8KPiAtCWludCBzZWNfbHVuX3N0cmlwZTsKPiAtCWludCBzZWNfd3Nfc3RyaXBlOwo+IC19Owo+ IC0KPiAtc3RydWN0IHBibGsgewo+IC0Jc3RydWN0IG52bV90Z3RfZGV2ICpkZXY7Cj4gLQlzdHJ1 Y3QgZ2VuZGlzayAqZGlzazsKPiAtCj4gLQlzdHJ1Y3Qga29iamVjdCBrb2JqOwo+IC0KPiAtCXN0 cnVjdCBwYmxrX2x1biAqbHVuczsKPiAtCj4gLQlzdHJ1Y3QgcGJsa19saW5lICpsaW5lczsJCS8q IExpbmUgYXJyYXkgKi8KPiAtCXN0cnVjdCBwYmxrX2xpbmVfbWdtdCBsX21nOwkJLyogTGluZSBt YW5hZ2VtZW50ICovCj4gLQlzdHJ1Y3QgcGJsa19saW5lX21ldGEgbG07CQkvKiBMaW5lIG1ldGFk YXRhICovCj4gLQo+IC0Jc3RydWN0IG52bV9hZGRyZiBhZGRyZjsJCS8qIEFsaWduZWQgYWRkcmVz cyBmb3JtYXQgKi8KPiAtCXN0cnVjdCBwYmxrX2FkZHJmIHVhZGRyZjsJLyogVW5hbGlnbmVkIGFk ZHJlc3MgZm9ybWF0ICovCj4gLQlpbnQgYWRkcmZfbGVuOwo+IC0KPiAtCXN0cnVjdCBwYmxrX3Ji IHJ3YjsKPiAtCj4gLQlpbnQgc3RhdGU7CQkJLyogcGJsayBsaW5lIHN0YXRlICovCj4gLQo+IC0J aW50IG1pbl93cml0ZV9wZ3M7IC8qIE1pbmltdW0gYW1vdW50IG9mIHBhZ2VzIHJlcXVpcmVkIGJ5 IGNvbnRyb2xsZXIgKi8KPiAtCWludCBtaW5fd3JpdGVfcGdzX2RhdGE7IC8qIE1pbmltdW0gYW1v dW50IG9mIHBheWxvYWQgcGFnZXMgKi8KPiAtCWludCBtYXhfd3JpdGVfcGdzOyAvKiBNYXhpbXVt IGFtb3VudCBvZiBwYWdlcyBzdXBwb3J0ZWQgYnkgY29udHJvbGxlciAqLwo+IC0JaW50IG9vYl9t ZXRhX3NpemU7IC8qIFNpemUgb2YgT09CIHNlY3RvciBtZXRhZGF0YSAqLwo+IC0KPiAtCXNlY3Rv cl90IGNhcGFjaXR5OyAvKiBEZXZpY2UgY2FwYWNpdHkgd2hlbiBiYWQgYmxvY2tzIGFyZSBzdWJ0 cmFjdGVkICovCj4gLQo+IC0JaW50IG9wOyAgICAgIC8qIFBlcmNlbnRhZ2Ugb2YgZGV2aWNlIHVz ZWQgZm9yIG92ZXItcHJvdmlzaW9uaW5nICovCj4gLQlpbnQgb3BfYmxrczsgLyogTnVtYmVyIG9m IGJsb2NrcyB1c2VkIGZvciBvdmVyLXByb3Zpc2lvbmluZyAqLwo+IC0KPiAtCS8qIHBibGsgcHJv dmlzaW9uaW5nIHZhbHVlcy4gVXNlZCBieSByYXRlIGxpbWl0ZXIgKi8KPiAtCXN0cnVjdCBwYmxr X3JsIHJsOwo+IC0KPiAtCWludCBzZWNfcGVyX3dyaXRlOwo+IC0KPiAtCWd1aWRfdCBpbnN0YW5j ZV91dWlkOwo+IC0KPiAtCS8qIFBlcnNpc3RlbnQgd3JpdGUgYW1wbGlmaWNhdGlvbiBjb3VudGVy cywgNGtiIHNlY3RvciBJL09zICovCj4gLQlhdG9taWM2NF90IHVzZXJfd2E7CQkvKiBTZWN0b3Jz IHdyaXR0ZW4gYnkgdXNlciAqLwo+IC0JYXRvbWljNjRfdCBnY193YTsJCS8qIFNlY3RvcnMgd3Jp dHRlbiBieSBHQyAqLwo+IC0JYXRvbWljNjRfdCBwYWRfd2E7CQkvKiBQYWRkZWQgc2VjdG9ycyB3 cml0dGVuICovCj4gLQo+IC0JLyogUmVzZXQgdmFsdWVzIGZvciBkZWx0YSB3cml0ZSBhbXBsaWZp Y2F0aW9uIG1lYXN1cmVtZW50cyAqLwo+IC0JdTY0IHVzZXJfcnN0X3dhOwo+IC0JdTY0IGdjX3Jz dF93YTsKPiAtCXU2NCBwYWRfcnN0X3dhOwo+IC0KPiAtCS8qIENvdW50ZXJzIHVzZWQgZm9yIGNh bGN1bGF0aW5nIHBhZGRpbmcgZGlzdHJpYnV0aW9uICovCj4gLQlhdG9taWM2NF90ICpwYWRfZGlz dDsJCS8qIFBhZGRpbmcgZGlzdHJpYnV0aW9uIGJ1Y2tldHMgKi8KPiAtCXU2NCBucl9mbHVzaF9y c3Q7CQkvKiBGbHVzaGVzIHJlc2V0IHZhbHVlIGZvciBwYWQgZGlzdC4qLwo+IC0JYXRvbWljNjRf dCBucl9mbHVzaDsJCS8qIE51bWJlciBvZiBmbHVzaC9mdWEgSS9PICovCj4gLQo+IC0jaWZkZWYg Q09ORklHX05WTV9QQkxLX0RFQlVHCj4gLQkvKiBOb24tcGVyc2lzdGVudCBkZWJ1ZyBjb3VudGVy cywgNGtiIHNlY3RvciBJL09zICovCj4gLQlhdG9taWNfbG9uZ190IGluZmxpZ2h0X3dyaXRlczsJ LyogSW5mbGlnaHQgd3JpdGVzICh1c2VyIGFuZCBnYykgKi8KPiAtCWF0b21pY19sb25nX3QgcGFk ZGVkX3dyaXRlczsJLyogU2VjdG9ycyBwYWRkZWQgZHVlIHRvIGZsdXNoL2Z1YSAqLwo+IC0JYXRv bWljX2xvbmdfdCBwYWRkZWRfd2I7CS8qIFNlY3RvcnMgcGFkZGVkIGluIHdyaXRlIGJ1ZmZlciAq Lwo+IC0JYXRvbWljX2xvbmdfdCByZXFfd3JpdGVzOwkvKiBTZWN0b3JzIHN0b3JlZCBvbiB3cml0 ZSBidWZmZXIgKi8KPiAtCWF0b21pY19sb25nX3Qgc3ViX3dyaXRlczsJLyogU2VjdG9ycyBzdWJt aXR0ZWQgZnJvbSBidWZmZXIgKi8KPiAtCWF0b21pY19sb25nX3Qgc3luY193cml0ZXM7CS8qIFNl Y3RvcnMgc3luY2VkIHRvIG1lZGlhICovCj4gLQlhdG9taWNfbG9uZ190IGluZmxpZ2h0X3JlYWRz OwkvKiBJbmZsaWdodCBzZWN0b3IgcmVhZCByZXF1ZXN0cyAqLwo+IC0JYXRvbWljX2xvbmdfdCBj YWNoZV9yZWFkczsJLyogUmVhZCByZXF1ZXN0cyB0aGF0IGhpdCB0aGUgY2FjaGUgKi8KPiAtCWF0 b21pY19sb25nX3Qgc3luY19yZWFkczsJLyogQ29tcGxldGVkIHNlY3RvciByZWFkIHJlcXVlc3Rz ICovCj4gLQlhdG9taWNfbG9uZ190IHJlY292X3dyaXRlczsJLyogU2VjdG9ycyBzdWJtaXR0ZWQg ZnJvbSByZWNvdmVyeSAqLwo+IC0JYXRvbWljX2xvbmdfdCByZWNvdl9nY193cml0ZXM7CS8qIFNl Y3RvcnMgc3VibWl0dGVkIGZyb20gd3JpdGUgR0MgKi8KPiAtCWF0b21pY19sb25nX3QgcmVjb3Zf Z2NfcmVhZHM7CS8qIFNlY3RvcnMgc3VibWl0dGVkIGZyb20gcmVhZCBHQyAqLwo+IC0jZW5kaWYK PiAtCj4gLQlzcGlubG9ja190IGxvY2s7Cj4gLQo+IC0JYXRvbWljX2xvbmdfdCByZWFkX2ZhaWxl ZDsKPiAtCWF0b21pY19sb25nX3QgcmVhZF9lbXB0eTsKPiAtCWF0b21pY19sb25nX3QgcmVhZF9o aWdoX2VjYzsKPiAtCWF0b21pY19sb25nX3QgcmVhZF9mYWlsZWRfZ2M7Cj4gLQlhdG9taWNfbG9u Z190IHdyaXRlX2ZhaWxlZDsKPiAtCWF0b21pY19sb25nX3QgZXJhc2VfZmFpbGVkOwo+IC0KPiAt CWF0b21pY190IGluZmxpZ2h0X2lvOwkJLyogR2VuZXJhbCBpbmZsaWdodCBJL08gY291bnRlciAq Lwo+IC0KPiAtCXN0cnVjdCB0YXNrX3N0cnVjdCAqd3JpdGVyX3RzOwo+IC0KPiAtCS8qIFNpbXBs ZSB0cmFuc2xhdGlvbiBtYXAgb2YgbG9naWNhbCBhZGRyZXNzZXMgdG8gcGh5c2ljYWwgYWRkcmVz c2VzLgo+IC0JICogVGhlIGxvZ2ljYWwgYWRkcmVzc2VzIGlzIGtub3duIGJ5IHRoZSBob3N0IHN5 c3RlbSwgd2hpbGUgdGhlIHBoeXNpY2FsCj4gLQkgKiBhZGRyZXNzZXMgYXJlIHVzZWQgd2hlbiB3 cml0aW5nIHRvIHRoZSBkaXNrIGJsb2NrIGRldmljZS4KPiAtCSAqLwo+IC0JdW5zaWduZWQgY2hh ciAqdHJhbnNfbWFwOwo+IC0Jc3BpbmxvY2tfdCB0cmFuc19sb2NrOwo+IC0KPiAtCXN0cnVjdCBs aXN0X2hlYWQgY29tcGxfbGlzdDsKPiAtCj4gLQlzcGlubG9ja190IHJlc3VibWl0X2xvY2s7CSAv KiBSZXN1Ym1pdCBsaXN0IGxvY2sgKi8KPiAtCXN0cnVjdCBsaXN0X2hlYWQgcmVzdWJtaXRfbGlz dDsgLyogUmVzdWJtaXQgbGlzdCBmb3IgZmFpbGVkIHdyaXRlcyovCj4gLQo+IC0JbWVtcG9vbF90 IHBhZ2VfYmlvX3Bvb2w7Cj4gLQltZW1wb29sX3QgZ2VuX3dzX3Bvb2w7Cj4gLQltZW1wb29sX3Qg cmVjX3Bvb2w7Cj4gLQltZW1wb29sX3Qgcl9ycV9wb29sOwo+IC0JbWVtcG9vbF90IHdfcnFfcG9v bDsKPiAtCW1lbXBvb2xfdCBlX3JxX3Bvb2w7Cj4gLQo+IC0Jc3RydWN0IHdvcmtxdWV1ZV9zdHJ1 Y3QgKmNsb3NlX3dxOwo+IC0Jc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmJiX3dxOwo+IC0Jc3Ry dWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnJfZW5kX3dxOwo+IC0KPiAtCXN0cnVjdCB0aW1lcl9saXN0 IHd0aW1lcjsKPiAtCj4gLQlzdHJ1Y3QgcGJsa19nYyBnYzsKPiAtfTsKPiAtCj4gLXN0cnVjdCBw YmxrX2xpbmVfd3Mgewo+IC0Jc3RydWN0IHBibGsgKnBibGs7Cj4gLQlzdHJ1Y3QgcGJsa19saW5l ICpsaW5lOwo+IC0Jdm9pZCAqcHJpdjsKPiAtCXN0cnVjdCB3b3JrX3N0cnVjdCB3czsKPiAtfTsK PiAtCj4gLSNkZWZpbmUgcGJsa19nX3JxX3NpemUgKHNpemVvZihzdHJ1Y3QgbnZtX3JxKSArIHNp emVvZihzdHJ1Y3QgcGJsa19nX2N0eCkpCj4gLSNkZWZpbmUgcGJsa193X3JxX3NpemUgKHNpemVv ZihzdHJ1Y3QgbnZtX3JxKSArIHNpemVvZihzdHJ1Y3QgcGJsa19jX2N0eCkpCj4gLQo+IC0jZGVm aW5lIHBibGtfZXJyKHBibGssIGZtdCwgLi4uKQkJCVwKPiAtCXByX2VycigicGJsayAlczogIiBm bXQsIHBibGstPmRpc2stPmRpc2tfbmFtZSwgIyNfX1ZBX0FSR1NfXykKPiAtI2RlZmluZSBwYmxr X2luZm8ocGJsaywgZm10LCAuLi4pCQkJXAo+IC0JcHJfaW5mbygicGJsayAlczogIiBmbXQsIHBi bGstPmRpc2stPmRpc2tfbmFtZSwgIyNfX1ZBX0FSR1NfXykKPiAtI2RlZmluZSBwYmxrX3dhcm4o cGJsaywgZm10LCAuLi4pCQkJXAo+IC0JcHJfd2FybigicGJsayAlczogIiBmbXQsIHBibGstPmRp c2stPmRpc2tfbmFtZSwgIyNfX1ZBX0FSR1NfXykKPiAtI2RlZmluZSBwYmxrX2RlYnVnKHBibGss IGZtdCwgLi4uKQkJCVwKPiAtCXByX2RlYnVnKCJwYmxrICVzOiAiIGZtdCwgcGJsay0+ZGlzay0+ ZGlza19uYW1lLCAjI19fVkFfQVJHU19fKQo+IC0KPiAtLyoKPiAtICogcGJsayByaW5nIGJ1ZmZl ciBvcGVyYXRpb25zCj4gLSAqLwo+IC1pbnQgcGJsa19yYl9pbml0KHN0cnVjdCBwYmxrX3JiICpy YiwgdW5zaWduZWQgaW50IHNpemUsIHVuc2lnbmVkIGludCB0aHJlc2hvbGQsCj4gLQkJIHVuc2ln bmVkIGludCBzZWdfc3opOwo+IC1pbnQgcGJsa19yYl9tYXlfd3JpdGVfdXNlcihzdHJ1Y3QgcGJs a19yYiAqcmIsIHN0cnVjdCBiaW8gKmJpbywKPiAtCQkJICAgdW5zaWduZWQgaW50IG5yX2VudHJp ZXMsIHVuc2lnbmVkIGludCAqcG9zKTsKPiAtaW50IHBibGtfcmJfbWF5X3dyaXRlX2djKHN0cnVj dCBwYmxrX3JiICpyYiwgdW5zaWduZWQgaW50IG5yX2VudHJpZXMsCj4gLQkJCSB1bnNpZ25lZCBp bnQgKnBvcyk7Cj4gLXZvaWQgcGJsa19yYl93cml0ZV9lbnRyeV91c2VyKHN0cnVjdCBwYmxrX3Ji ICpyYiwgdm9pZCAqZGF0YSwKPiAtCQkJICAgICAgc3RydWN0IHBibGtfd19jdHggd19jdHgsIHVu c2lnbmVkIGludCBwb3MpOwo+IC12b2lkIHBibGtfcmJfd3JpdGVfZW50cnlfZ2Moc3RydWN0IHBi bGtfcmIgKnJiLCB2b2lkICpkYXRhLAo+IC0JCQkgICAgc3RydWN0IHBibGtfd19jdHggd19jdHgs IHN0cnVjdCBwYmxrX2xpbmUgKmxpbmUsCj4gLQkJCSAgICB1NjQgcGFkZHIsIHVuc2lnbmVkIGlu dCBwb3MpOwo+IC1zdHJ1Y3QgcGJsa193X2N0eCAqcGJsa19yYl93X2N0eChzdHJ1Y3QgcGJsa19y YiAqcmIsIHVuc2lnbmVkIGludCBwb3MpOwo+IC12b2lkIHBibGtfcmJfZmx1c2goc3RydWN0IHBi bGtfcmIgKnJiKTsKPiAtCj4gLXZvaWQgcGJsa19yYl9zeW5jX2wycChzdHJ1Y3QgcGJsa19yYiAq cmIpOwo+IC11bnNpZ25lZCBpbnQgcGJsa19yYl9yZWFkX3RvX2JpbyhzdHJ1Y3QgcGJsa19yYiAq cmIsIHN0cnVjdCBudm1fcnEgKnJxZCwKPiAtCQkJCSB1bnNpZ25lZCBpbnQgcG9zLCB1bnNpZ25l ZCBpbnQgbnJfZW50cmllcywKPiAtCQkJCSB1bnNpZ25lZCBpbnQgY291bnQpOwo+IC1pbnQgcGJs a19yYl9jb3B5X3RvX2JpbyhzdHJ1Y3QgcGJsa19yYiAqcmIsIHN0cnVjdCBiaW8gKmJpbywgc2Vj dG9yX3QgbGJhLAo+IC0JCQlzdHJ1Y3QgcHBhX2FkZHIgcHBhKTsKPiAtdW5zaWduZWQgaW50IHBi bGtfcmJfcmVhZF9jb21taXQoc3RydWN0IHBibGtfcmIgKnJiLCB1bnNpZ25lZCBpbnQgZW50cmll cyk7Cj4gLQo+IC11bnNpZ25lZCBpbnQgcGJsa19yYl9zeW5jX2luaXQoc3RydWN0IHBibGtfcmIg KnJiLCB1bnNpZ25lZCBsb25nICpmbGFncyk7Cj4gLXVuc2lnbmVkIGludCBwYmxrX3JiX3N5bmNf YWR2YW5jZShzdHJ1Y3QgcGJsa19yYiAqcmIsIHVuc2lnbmVkIGludCBucl9lbnRyaWVzKTsKPiAt dW5zaWduZWQgaW50IHBibGtfcmJfcHRyX3dyYXAoc3RydWN0IHBibGtfcmIgKnJiLCB1bnNpZ25l ZCBpbnQgcCwKPiAtCQkJICAgICAgdW5zaWduZWQgaW50IG5yX2VudHJpZXMpOwo+IC12b2lkIHBi bGtfcmJfc3luY19lbmQoc3RydWN0IHBibGtfcmIgKnJiLCB1bnNpZ25lZCBsb25nICpmbGFncyk7 Cj4gLXVuc2lnbmVkIGludCBwYmxrX3JiX2ZsdXNoX3BvaW50X2NvdW50KHN0cnVjdCBwYmxrX3Ji ICpyYik7Cj4gLQo+IC11bnNpZ25lZCBpbnQgcGJsa19yYl9yZWFkX2NvdW50KHN0cnVjdCBwYmxr X3JiICpyYik7Cj4gLXVuc2lnbmVkIGludCBwYmxrX3JiX3N5bmNfY291bnQoc3RydWN0IHBibGtf cmIgKnJiKTsKPiAtdW5zaWduZWQgaW50IHBibGtfcmJfd3JhcF9wb3Moc3RydWN0IHBibGtfcmIg KnJiLCB1bnNpZ25lZCBpbnQgcG9zKTsKPiAtCj4gLWludCBwYmxrX3JiX3RlYXJfZG93bl9jaGVj ayhzdHJ1Y3QgcGJsa19yYiAqcmIpOwo+IC1pbnQgcGJsa19yYl9wb3Nfb29iKHN0cnVjdCBwYmxr X3JiICpyYiwgdTY0IHBvcyk7Cj4gLXZvaWQgcGJsa19yYl9mcmVlKHN0cnVjdCBwYmxrX3JiICpy Yik7Cj4gLXNzaXplX3QgcGJsa19yYl9zeXNmcyhzdHJ1Y3QgcGJsa19yYiAqcmIsIGNoYXIgKmJ1 Zik7Cj4gLQo+IC0vKgo+IC0gKiBwYmxrIGNvcmUKPiAtICovCj4gLXN0cnVjdCBudm1fcnEgKnBi bGtfYWxsb2NfcnFkKHN0cnVjdCBwYmxrICpwYmxrLCBpbnQgdHlwZSk7Cj4gLXZvaWQgcGJsa19m cmVlX3JxZChzdHJ1Y3QgcGJsayAqcGJsaywgc3RydWN0IG52bV9ycSAqcnFkLCBpbnQgdHlwZSk7 Cj4gLWludCBwYmxrX2FsbG9jX3JxZF9tZXRhKHN0cnVjdCBwYmxrICpwYmxrLCBzdHJ1Y3QgbnZt X3JxICpycWQpOwo+IC12b2lkIHBibGtfZnJlZV9ycWRfbWV0YShzdHJ1Y3QgcGJsayAqcGJsaywg c3RydWN0IG52bV9ycSAqcnFkKTsKPiAtdm9pZCBwYmxrX3NldF9zZWNfcGVyX3dyaXRlKHN0cnVj dCBwYmxrICpwYmxrLCBpbnQgc2VjX3Blcl93cml0ZSk7Cj4gLWludCBwYmxrX3NldHVwX3dfcmVj X3JxKHN0cnVjdCBwYmxrICpwYmxrLCBzdHJ1Y3QgbnZtX3JxICpycWQsCj4gLQkJCXN0cnVjdCBw YmxrX2NfY3R4ICpjX2N0eCk7Cj4gLXZvaWQgcGJsa19kaXNjYXJkKHN0cnVjdCBwYmxrICpwYmxr LCBzdHJ1Y3QgYmlvICpiaW8pOwo+IC1zdHJ1Y3QgbnZtX2Noa19tZXRhICpwYmxrX2dldF9jaHVu a19tZXRhKHN0cnVjdCBwYmxrICpwYmxrKTsKPiAtc3RydWN0IG52bV9jaGtfbWV0YSAqcGJsa19j aHVua19nZXRfb2ZmKHN0cnVjdCBwYmxrICpwYmxrLAo+IC0JCQkJCSAgICAgIHN0cnVjdCBudm1f Y2hrX21ldGEgKmxwLAo+IC0JCQkJCSAgICAgIHN0cnVjdCBwcGFfYWRkciBwcGEpOwo+IC12b2lk IHBibGtfbG9nX3dyaXRlX2VycihzdHJ1Y3QgcGJsayAqcGJsaywgc3RydWN0IG52bV9ycSAqcnFk KTsKPiAtdm9pZCBwYmxrX2xvZ19yZWFkX2VycihzdHJ1Y3QgcGJsayAqcGJsaywgc3RydWN0IG52 bV9ycSAqcnFkKTsKPiAtaW50IHBibGtfc3VibWl0X2lvKHN0cnVjdCBwYmxrICpwYmxrLCBzdHJ1 Y3QgbnZtX3JxICpycWQsIHZvaWQgKmJ1Zik7Cj4gLWludCBwYmxrX3N1Ym1pdF9pb19zeW5jKHN0 cnVjdCBwYmxrICpwYmxrLCBzdHJ1Y3QgbnZtX3JxICpycWQsIHZvaWQgKmJ1Zik7Cj4gLWludCBw YmxrX3N1Ym1pdF9tZXRhX2lvKHN0cnVjdCBwYmxrICpwYmxrLCBzdHJ1Y3QgcGJsa19saW5lICpt ZXRhX2xpbmUpOwo+IC12b2lkIHBibGtfY2hlY2tfY2h1bmtfc3RhdGVfdXBkYXRlKHN0cnVjdCBw YmxrICpwYmxrLCBzdHJ1Y3QgbnZtX3JxICpycWQpOwo+IC1zdHJ1Y3QgcGJsa19saW5lICpwYmxr X2xpbmVfZ2V0KHN0cnVjdCBwYmxrICpwYmxrKTsKPiAtc3RydWN0IHBibGtfbGluZSAqcGJsa19s aW5lX2dldF9maXJzdF9kYXRhKHN0cnVjdCBwYmxrICpwYmxrKTsKPiAtc3RydWN0IHBibGtfbGlu ZSAqcGJsa19saW5lX3JlcGxhY2VfZGF0YShzdHJ1Y3QgcGJsayAqcGJsayk7Cj4gLXZvaWQgcGJs a19wcGFfdG9fbGluZV9wdXQoc3RydWN0IHBibGsgKnBibGssIHN0cnVjdCBwcGFfYWRkciBwcGEp Owo+IC12b2lkIHBibGtfcnFfdG9fbGluZV9wdXQoc3RydWN0IHBibGsgKnBibGssIHN0cnVjdCBu dm1fcnEgKnJxZCk7Cj4gLWludCBwYmxrX2xpbmVfcmVjb3ZfYWxsb2Moc3RydWN0IHBibGsgKnBi bGssIHN0cnVjdCBwYmxrX2xpbmUgKmxpbmUpOwo+IC12b2lkIHBibGtfbGluZV9yZWNvdl9jbG9z ZShzdHJ1Y3QgcGJsayAqcGJsaywgc3RydWN0IHBibGtfbGluZSAqbGluZSk7Cj4gLXN0cnVjdCBw YmxrX2xpbmUgKnBibGtfbGluZV9nZXRfZGF0YShzdHJ1Y3QgcGJsayAqcGJsayk7Cj4gLXN0cnVj dCBwYmxrX2xpbmUgKnBibGtfbGluZV9nZXRfZXJhc2Uoc3RydWN0IHBibGsgKnBibGspOwo+IC1p bnQgcGJsa19saW5lX2VyYXNlKHN0cnVjdCBwYmxrICpwYmxrLCBzdHJ1Y3QgcGJsa19saW5lICps aW5lKTsKPiAtaW50IHBibGtfbGluZV9pc19mdWxsKHN0cnVjdCBwYmxrX2xpbmUgKmxpbmUpOwo+ IC12b2lkIHBibGtfbGluZV9mcmVlKHN0cnVjdCBwYmxrX2xpbmUgKmxpbmUpOwo+IC12b2lkIHBi bGtfbGluZV9jbG9zZV9tZXRhKHN0cnVjdCBwYmxrICpwYmxrLCBzdHJ1Y3QgcGJsa19saW5lICps aW5lKTsKPiAtdm9pZCBwYmxrX2xpbmVfY2xvc2Uoc3RydWN0IHBibGsgKnBibGssIHN0cnVjdCBw YmxrX2xpbmUgKmxpbmUpOwo+IC12b2lkIHBibGtfbGluZV9jbG9zZV93cyhzdHJ1Y3Qgd29ya19z dHJ1Y3QgKndvcmspOwo+IC12b2lkIHBibGtfcGlwZWxpbmVfc3RvcChzdHJ1Y3QgcGJsayAqcGJs ayk7Cj4gLXZvaWQgX19wYmxrX3BpcGVsaW5lX3N0b3Aoc3RydWN0IHBibGsgKnBibGspOwo+IC12 b2lkIF9fcGJsa19waXBlbGluZV9mbHVzaChzdHJ1Y3QgcGJsayAqcGJsayk7Cj4gLXZvaWQgcGJs a19nZW5fcnVuX3dzKHN0cnVjdCBwYmxrICpwYmxrLCBzdHJ1Y3QgcGJsa19saW5lICpsaW5lLCB2 b2lkICpwcml2LAo+IC0JCSAgICAgdm9pZCAoKndvcmspKHN0cnVjdCB3b3JrX3N0cnVjdCAqKSwg Z2ZwX3QgZ2ZwX21hc2ssCj4gLQkJICAgICBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd3EpOwo+ IC11NjQgcGJsa19saW5lX3NtZXRhX3N0YXJ0KHN0cnVjdCBwYmxrICpwYmxrLCBzdHJ1Y3QgcGJs a19saW5lICpsaW5lKTsKPiAtaW50IHBibGtfbGluZV9zbWV0YV9yZWFkKHN0cnVjdCBwYmxrICpw YmxrLCBzdHJ1Y3QgcGJsa19saW5lICpsaW5lKTsKPiAtaW50IHBibGtfbGluZV9lbWV0YV9yZWFk KHN0cnVjdCBwYmxrICpwYmxrLCBzdHJ1Y3QgcGJsa19saW5lICpsaW5lLAo+IC0JCQkgdm9pZCAq ZW1ldGFfYnVmKTsKPiAtaW50IHBibGtfYmxrX2VyYXNlX2FzeW5jKHN0cnVjdCBwYmxrICpwYmxr LCBzdHJ1Y3QgcHBhX2FkZHIgZXJhc2VfcHBhKTsKPiAtdm9pZCBwYmxrX2xpbmVfcHV0KHN0cnVj dCBrcmVmICpyZWYpOwo+IC12b2lkIHBibGtfbGluZV9wdXRfd3Eoc3RydWN0IGtyZWYgKnJlZik7 Cj4gLXN0cnVjdCBsaXN0X2hlYWQgKnBibGtfbGluZV9nY19saXN0KHN0cnVjdCBwYmxrICpwYmxr LCBzdHJ1Y3QgcGJsa19saW5lICpsaW5lKTsKPiAtdTY0IHBibGtfbG9va3VwX3BhZ2Uoc3RydWN0 IHBibGsgKnBibGssIHN0cnVjdCBwYmxrX2xpbmUgKmxpbmUpOwo+IC12b2lkIHBibGtfZGVhbGxv Y19wYWdlKHN0cnVjdCBwYmxrICpwYmxrLCBzdHJ1Y3QgcGJsa19saW5lICpsaW5lLCBpbnQgbnJf c2Vjcyk7Cj4gLXU2NCBwYmxrX2FsbG9jX3BhZ2Uoc3RydWN0IHBibGsgKnBibGssIHN0cnVjdCBw YmxrX2xpbmUgKmxpbmUsIGludCBucl9zZWNzKTsKPiAtdTY0IF9fcGJsa19hbGxvY19wYWdlKHN0 cnVjdCBwYmxrICpwYmxrLCBzdHJ1Y3QgcGJsa19saW5lICpsaW5lLCBpbnQgbnJfc2Vjcyk7Cj4g LWludCBwYmxrX2NhbGNfc2VjcyhzdHJ1Y3QgcGJsayAqcGJsaywgdW5zaWduZWQgbG9uZyBzZWNz X2F2YWlsLAo+IC0JCSAgIHVuc2lnbmVkIGxvbmcgc2Vjc190b19mbHVzaCwgYm9vbCBza2lwX21l dGEpOwo+IC12b2lkIHBibGtfZG93bl9ycShzdHJ1Y3QgcGJsayAqcGJsaywgc3RydWN0IHBwYV9h ZGRyIHBwYSwKPiAtCQkgIHVuc2lnbmVkIGxvbmcgKmx1bl9iaXRtYXApOwo+IC12b2lkIHBibGtf ZG93bl9jaHVuayhzdHJ1Y3QgcGJsayAqcGJsaywgc3RydWN0IHBwYV9hZGRyIHBwYSk7Cj4gLXZv aWQgcGJsa191cF9jaHVuayhzdHJ1Y3QgcGJsayAqcGJsaywgc3RydWN0IHBwYV9hZGRyIHBwYSk7 Cj4gLXZvaWQgcGJsa191cF9ycShzdHJ1Y3QgcGJsayAqcGJsaywgdW5zaWduZWQgbG9uZyAqbHVu X2JpdG1hcCk7Cj4gLWludCBwYmxrX2Jpb19hZGRfcGFnZXMoc3RydWN0IHBibGsgKnBibGssIHN0 cnVjdCBiaW8gKmJpbywgZ2ZwX3QgZmxhZ3MsCj4gLQkJICAgICAgIGludCBucl9wYWdlcyk7Cj4g LXZvaWQgcGJsa19iaW9fZnJlZV9wYWdlcyhzdHJ1Y3QgcGJsayAqcGJsaywgc3RydWN0IGJpbyAq YmlvLCBpbnQgb2ZmLAo+IC0JCQkgaW50IG5yX3BhZ2VzKTsKPiAtdm9pZCBwYmxrX21hcF9pbnZh bGlkYXRlKHN0cnVjdCBwYmxrICpwYmxrLCBzdHJ1Y3QgcHBhX2FkZHIgcHBhKTsKPiAtdm9pZCBf X3BibGtfbWFwX2ludmFsaWRhdGUoc3RydWN0IHBibGsgKnBibGssIHN0cnVjdCBwYmxrX2xpbmUg KmxpbmUsCj4gLQkJCSAgIHU2NCBwYWRkcik7Cj4gLXZvaWQgcGJsa191cGRhdGVfbWFwKHN0cnVj dCBwYmxrICpwYmxrLCBzZWN0b3JfdCBsYmEsIHN0cnVjdCBwcGFfYWRkciBwcGEpOwo+IC12b2lk IHBibGtfdXBkYXRlX21hcF9jYWNoZShzdHJ1Y3QgcGJsayAqcGJsaywgc2VjdG9yX3QgbGJhLAo+ IC0JCQkgICBzdHJ1Y3QgcHBhX2FkZHIgcHBhKTsKPiAtdm9pZCBwYmxrX3VwZGF0ZV9tYXBfZGV2 KHN0cnVjdCBwYmxrICpwYmxrLCBzZWN0b3JfdCBsYmEsCj4gLQkJCSBzdHJ1Y3QgcHBhX2FkZHIg cHBhLCBzdHJ1Y3QgcHBhX2FkZHIgZW50cnlfbGluZSk7Cj4gLWludCBwYmxrX3VwZGF0ZV9tYXBf Z2Moc3RydWN0IHBibGsgKnBibGssIHNlY3Rvcl90IGxiYSwgc3RydWN0IHBwYV9hZGRyIHBwYSwK PiAtCQkgICAgICAgc3RydWN0IHBibGtfbGluZSAqZ2NfbGluZSwgdTY0IHBhZGRyKTsKPiAtdm9p ZCBwYmxrX2xvb2t1cF9sMnBfcmFuZChzdHJ1Y3QgcGJsayAqcGJsaywgc3RydWN0IHBwYV9hZGRy ICpwcGFzLAo+IC0JCQkgIHU2NCAqbGJhX2xpc3QsIGludCBucl9zZWNzKTsKPiAtaW50IHBibGtf bG9va3VwX2wycF9zZXEoc3RydWN0IHBibGsgKnBibGssIHN0cnVjdCBwcGFfYWRkciAqcHBhcywK PiAtCQkJIHNlY3Rvcl90IGJsYmEsIGludCBucl9zZWNzLCBib29sICpmcm9tX2NhY2hlKTsKPiAt dm9pZCAqcGJsa19nZXRfbWV0YV9mb3Jfd3JpdGVzKHN0cnVjdCBwYmxrICpwYmxrLCBzdHJ1Y3Qg bnZtX3JxICpycWQpOwo+IC12b2lkIHBibGtfZ2V0X3BhY2tlZF9tZXRhKHN0cnVjdCBwYmxrICpw YmxrLCBzdHJ1Y3QgbnZtX3JxICpycWQpOwo+IC0KPiAtLyoKPiAtICogcGJsayB1c2VyIEkvTyB3 cml0ZSBwYXRoCj4gLSAqLwo+IC12b2lkIHBibGtfd3JpdGVfdG9fY2FjaGUoc3RydWN0IHBibGsg KnBibGssIHN0cnVjdCBiaW8gKmJpbywKPiAtCQkJdW5zaWduZWQgbG9uZyBmbGFncyk7Cj4gLWlu dCBwYmxrX3dyaXRlX2djX3RvX2NhY2hlKHN0cnVjdCBwYmxrICpwYmxrLCBzdHJ1Y3QgcGJsa19n Y19ycSAqZ2NfcnEpOwo+IC0KPiAtLyoKPiAtICogcGJsayBtYXAKPiAtICovCj4gLWludCBwYmxr X21hcF9lcmFzZV9ycShzdHJ1Y3QgcGJsayAqcGJsaywgc3RydWN0IG52bV9ycSAqcnFkLAo+IC0J CSAgICAgICB1bnNpZ25lZCBpbnQgc2VudHJ5LCB1bnNpZ25lZCBsb25nICpsdW5fYml0bWFwLAo+ IC0JCSAgICAgICB1bnNpZ25lZCBpbnQgdmFsaWRfc2Vjcywgc3RydWN0IHBwYV9hZGRyICplcmFz ZV9wcGEpOwo+IC1pbnQgcGJsa19tYXBfcnEoc3RydWN0IHBibGsgKnBibGssIHN0cnVjdCBudm1f cnEgKnJxZCwgdW5zaWduZWQgaW50IHNlbnRyeSwKPiAtCQkgdW5zaWduZWQgbG9uZyAqbHVuX2Jp dG1hcCwgdW5zaWduZWQgaW50IHZhbGlkX3NlY3MsCj4gLQkJIHVuc2lnbmVkIGludCBvZmYpOwo+ IC0KPiAtLyoKPiAtICogcGJsayB3cml0ZSB0aHJlYWQKPiAtICovCj4gLWludCBwYmxrX3dyaXRl X3RzKHZvaWQgKmRhdGEpOwo+IC12b2lkIHBibGtfd3JpdGVfdGltZXJfZm4oc3RydWN0IHRpbWVy X2xpc3QgKnQpOwo+IC12b2lkIHBibGtfd3JpdGVfc2hvdWxkX2tpY2soc3RydWN0IHBibGsgKnBi bGspOwo+IC12b2lkIHBibGtfd3JpdGVfa2ljayhzdHJ1Y3QgcGJsayAqcGJsayk7Cj4gLQo+IC0v Kgo+IC0gKiBwYmxrIHJlYWQgcGF0aAo+IC0gKi8KPiAtZXh0ZXJuIHN0cnVjdCBiaW9fc2V0IHBi bGtfYmlvX3NldDsKPiAtdm9pZCBwYmxrX3N1Ym1pdF9yZWFkKHN0cnVjdCBwYmxrICpwYmxrLCBz dHJ1Y3QgYmlvICpiaW8pOwo+IC1pbnQgcGJsa19zdWJtaXRfcmVhZF9nYyhzdHJ1Y3QgcGJsayAq cGJsaywgc3RydWN0IHBibGtfZ2NfcnEgKmdjX3JxKTsKPiAtLyoKPiAtICogcGJsayByZWNvdmVy eQo+IC0gKi8KPiAtc3RydWN0IHBibGtfbGluZSAqcGJsa19yZWNvdl9sMnAoc3RydWN0IHBibGsg KnBibGspOwo+IC1pbnQgcGJsa19yZWNvdl9wYWQoc3RydWN0IHBibGsgKnBibGspOwo+IC1pbnQg cGJsa19yZWNvdl9jaGVja19lbWV0YShzdHJ1Y3QgcGJsayAqcGJsaywgc3RydWN0IGxpbmVfZW1l dGEgKmVtZXRhKTsKPiAtCj4gLS8qCj4gLSAqIHBibGsgZ2MKPiAtICovCj4gLSNkZWZpbmUgUEJM S19HQ19NQVhfUkVBREVSUyA4CS8qIE1heCBudW1iZXIgb2Ygb3V0c3RhbmRpbmcgR0MgcmVhZGVy IGpvYnMgKi8KPiAtI2RlZmluZSBQQkxLX0dDX1JRX1FEIDEyOAkvKiBRdWV1ZSBkZXB0aCBmb3Ig aW5mbGlnaHQgR0MgcmVxdWVzdHMgKi8KPiAtI2RlZmluZSBQQkxLX0dDX0xfUUQgNAkJLyogUXVl dWUgZGVwdGggZm9yIGluZmxpZ2h0IEdDIGxpbmVzICovCj4gLQo+IC1pbnQgcGJsa19nY19pbml0 KHN0cnVjdCBwYmxrICpwYmxrKTsKPiAtdm9pZCBwYmxrX2djX2V4aXQoc3RydWN0IHBibGsgKnBi bGssIGJvb2wgZ3JhY2VmdWwpOwo+IC12b2lkIHBibGtfZ2Nfc2hvdWxkX3N0YXJ0KHN0cnVjdCBw YmxrICpwYmxrKTsKPiAtdm9pZCBwYmxrX2djX3Nob3VsZF9zdG9wKHN0cnVjdCBwYmxrICpwYmxr KTsKPiAtdm9pZCBwYmxrX2djX3Nob3VsZF9raWNrKHN0cnVjdCBwYmxrICpwYmxrKTsKPiAtdm9p ZCBwYmxrX2djX2ZyZWVfZnVsbF9saW5lcyhzdHJ1Y3QgcGJsayAqcGJsayk7Cj4gLXZvaWQgcGJs a19nY19zeXNmc19zdGF0ZV9zaG93KHN0cnVjdCBwYmxrICpwYmxrLCBpbnQgKmdjX2VuYWJsZWQs Cj4gLQkJCSAgICAgIGludCAqZ2NfYWN0aXZlKTsKPiAtaW50IHBibGtfZ2Nfc3lzZnNfZm9yY2Uo c3RydWN0IHBibGsgKnBibGssIGludCBmb3JjZSk7Cj4gLXZvaWQgcGJsa19wdXRfbGluZV9iYWNr KHN0cnVjdCBwYmxrICpwYmxrLCBzdHJ1Y3QgcGJsa19saW5lICpsaW5lKTsKPiAtCj4gLS8qCj4g LSAqIHBibGsgcmF0ZSBsaW1pdGVyCj4gLSAqLwo+IC12b2lkIHBibGtfcmxfaW5pdChzdHJ1Y3Qg cGJsa19ybCAqcmwsIGludCBidWRnZXQsIGludCB0aHJlc2hvbGQpOwo+IC12b2lkIHBibGtfcmxf ZnJlZShzdHJ1Y3QgcGJsa19ybCAqcmwpOwo+IC12b2lkIHBibGtfcmxfdXBkYXRlX3JhdGVzKHN0 cnVjdCBwYmxrX3JsICpybCk7Cj4gLWludCBwYmxrX3JsX2hpZ2hfdGhycyhzdHJ1Y3QgcGJsa19y bCAqcmwpOwo+IC11bnNpZ25lZCBsb25nIHBibGtfcmxfbnJfZnJlZV9ibGtzKHN0cnVjdCBwYmxr X3JsICpybCk7Cj4gLXVuc2lnbmVkIGxvbmcgcGJsa19ybF9ucl91c2VyX2ZyZWVfYmxrcyhzdHJ1 Y3QgcGJsa19ybCAqcmwpOwo+IC1pbnQgcGJsa19ybF91c2VyX21heV9pbnNlcnQoc3RydWN0IHBi bGtfcmwgKnJsLCBpbnQgbnJfZW50cmllcyk7Cj4gLXZvaWQgcGJsa19ybF9pbnNlcnRlZChzdHJ1 Y3QgcGJsa19ybCAqcmwsIGludCBucl9lbnRyaWVzKTsKPiAtdm9pZCBwYmxrX3JsX3VzZXJfaW4o c3RydWN0IHBibGtfcmwgKnJsLCBpbnQgbnJfZW50cmllcyk7Cj4gLWludCBwYmxrX3JsX2djX21h eV9pbnNlcnQoc3RydWN0IHBibGtfcmwgKnJsLCBpbnQgbnJfZW50cmllcyk7Cj4gLXZvaWQgcGJs a19ybF9nY19pbihzdHJ1Y3QgcGJsa19ybCAqcmwsIGludCBucl9lbnRyaWVzKTsKPiAtdm9pZCBw YmxrX3JsX291dChzdHJ1Y3QgcGJsa19ybCAqcmwsIGludCBucl91c2VyLCBpbnQgbnJfZ2MpOwo+ IC1pbnQgcGJsa19ybF9tYXhfaW8oc3RydWN0IHBibGtfcmwgKnJsKTsKPiAtdm9pZCBwYmxrX3Js X2ZyZWVfbGluZXNfaW5jKHN0cnVjdCBwYmxrX3JsICpybCwgc3RydWN0IHBibGtfbGluZSAqbGlu ZSk7Cj4gLXZvaWQgcGJsa19ybF9mcmVlX2xpbmVzX2RlYyhzdHJ1Y3QgcGJsa19ybCAqcmwsIHN0 cnVjdCBwYmxrX2xpbmUgKmxpbmUsCj4gLQkJCSAgICBib29sIHVzZWQpOwo+IC1pbnQgcGJsa19y bF9pc19saW1pdChzdHJ1Y3QgcGJsa19ybCAqcmwpOwo+IC0KPiAtdm9pZCBwYmxrX3JsX3dlcnJf bGluZV9pbihzdHJ1Y3QgcGJsa19ybCAqcmwpOwo+IC12b2lkIHBibGtfcmxfd2Vycl9saW5lX291 dChzdHJ1Y3QgcGJsa19ybCAqcmwpOwo+IC0KPiAtLyoKPiAtICogcGJsayBzeXNmcwo+IC0gKi8K PiAtaW50IHBibGtfc3lzZnNfaW5pdChzdHJ1Y3QgZ2VuZGlzayAqdGRpc2spOwo+IC12b2lkIHBi bGtfc3lzZnNfZXhpdChzdHJ1Y3QgZ2VuZGlzayAqdGRpc2spOwo+IC0KPiAtc3RhdGljIGlubGlu ZSBzdHJ1Y3QgbnZtX3JxICpudm1fcnFfZnJvbV9jX2N0eCh2b2lkICpjX2N0eCkKPiAtewo+IC0J cmV0dXJuIGNfY3R4IC0gc2l6ZW9mKHN0cnVjdCBudm1fcnEpOwo+IC19Cj4gLQo+IC1zdGF0aWMg aW5saW5lIHZvaWQgKmVtZXRhX3RvX2JiKHN0cnVjdCBsaW5lX2VtZXRhICplbWV0YSkKPiAtewo+ IC0JcmV0dXJuIGVtZXRhLT5iYl9iaXRtYXA7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbmxpbmUgdm9p ZCAqZW1ldGFfdG9fd2Eoc3RydWN0IHBibGtfbGluZV9tZXRhICpsbSwKPiAtCQkJCXN0cnVjdCBs aW5lX2VtZXRhICplbWV0YSkKPiAtewo+IC0JcmV0dXJuIGVtZXRhLT5iYl9iaXRtYXAgKyBsbS0+ YmxrX2JpdG1hcF9sZW47Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbmxpbmUgdm9pZCAqZW1ldGFfdG9f bGJhcyhzdHJ1Y3QgcGJsayAqcGJsaywgc3RydWN0IGxpbmVfZW1ldGEgKmVtZXRhKQo+IC17Cj4g LQlyZXR1cm4gKCh2b2lkICopZW1ldGEgKyBwYmxrLT5sbS5lbWV0YV9sZW5bMV0pOwo+IC19Cj4g LQo+IC1zdGF0aWMgaW5saW5lIHZvaWQgKmVtZXRhX3RvX3ZzYyhzdHJ1Y3QgcGJsayAqcGJsaywg c3RydWN0IGxpbmVfZW1ldGEgKmVtZXRhKQo+IC17Cj4gLQlyZXR1cm4gKGVtZXRhX3RvX2xiYXMo cGJsaywgZW1ldGEpICsgcGJsay0+bG0uZW1ldGFfbGVuWzJdKTsKPiAtfQo+IC0KPiAtc3RhdGlj IGlubGluZSBpbnQgcGJsa19saW5lX3ZzYyhzdHJ1Y3QgcGJsa19saW5lICpsaW5lKQo+IC17Cj4g LQlyZXR1cm4gbGUzMl90b19jcHUoKmxpbmUtPnZzYyk7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbmxp bmUgaW50IHBibGtfcHBhX3RvX2xpbmVfaWQoc3RydWN0IHBwYV9hZGRyIHApCj4gLXsKPiAtCXJl dHVybiBwLmEuYmxrOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW5saW5lIHN0cnVjdCBwYmxrX2xpbmUg KnBibGtfcHBhX3RvX2xpbmUoc3RydWN0IHBibGsgKnBibGssCj4gLQkJCQkJCSBzdHJ1Y3QgcHBh X2FkZHIgcCkKPiAtewo+IC0JcmV0dXJuICZwYmxrLT5saW5lc1twYmxrX3BwYV90b19saW5lX2lk KHApXTsKPiAtfQo+IC0KPiAtc3RhdGljIGlubGluZSBpbnQgcGJsa19wcGFfdG9fcG9zKHN0cnVj dCBudm1fZ2VvICpnZW8sIHN0cnVjdCBwcGFfYWRkciBwKQo+IC17Cj4gLQlyZXR1cm4gcC5hLmx1 biAqIGdlby0+bnVtX2NoICsgcC5hLmNoOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW5saW5lIHN0cnVj dCBwcGFfYWRkciBhZGRyX3RvX2dlbl9wcGEoc3RydWN0IHBibGsgKnBibGssIHU2NCBwYWRkciwK PiAtCQkJCQkgICAgICB1NjQgbGluZV9pZCkKPiAtewo+IC0Jc3RydWN0IG52bV90Z3RfZGV2ICpk ZXYgPSBwYmxrLT5kZXY7Cj4gLQlzdHJ1Y3QgbnZtX2dlbyAqZ2VvID0gJmRldi0+Z2VvOwo+IC0J c3RydWN0IHBwYV9hZGRyIHBwYTsKPiAtCj4gLQlpZiAoZ2VvLT52ZXJzaW9uID09IE5WTV9PQ1NT RF9TUEVDXzEyKSB7Cj4gLQkJc3RydWN0IG52bV9hZGRyZl8xMiAqcHBhZiA9IChzdHJ1Y3QgbnZt X2FkZHJmXzEyICopJnBibGstPmFkZHJmOwo+IC0KPiAtCQlwcGEucHBhID0gMDsKPiAtCQlwcGEu Zy5ibGsgPSBsaW5lX2lkOwo+IC0JCXBwYS5nLnBnID0gKHBhZGRyICYgcHBhZi0+cGdfbWFzaykg Pj4gcHBhZi0+cGdfb2Zmc2V0Owo+IC0JCXBwYS5nLmx1biA9IChwYWRkciAmIHBwYWYtPmx1bl9t YXNrKSA+PiBwcGFmLT5sdW5fb2Zmc2V0Owo+IC0JCXBwYS5nLmNoID0gKHBhZGRyICYgcHBhZi0+ Y2hfbWFzaykgPj4gcHBhZi0+Y2hfb2Zmc2V0Owo+IC0JCXBwYS5nLnBsID0gKHBhZGRyICYgcHBh Zi0+cGxuX21hc2spID4+IHBwYWYtPnBsbl9vZmZzZXQ7Cj4gLQkJcHBhLmcuc2VjID0gKHBhZGRy ICYgcHBhZi0+c2VjX21hc2spID4+IHBwYWYtPnNlY19vZmZzZXQ7Cj4gLQl9IGVsc2Ugewo+IC0J CXN0cnVjdCBwYmxrX2FkZHJmICp1YWRkcmYgPSAmcGJsay0+dWFkZHJmOwo+IC0JCWludCBzZWNz LCBjaG5scywgbHVuczsKPiAtCj4gLQkJcHBhLnBwYSA9IDA7Cj4gLQo+IC0JCXBwYS5tLmNoayA9 IGxpbmVfaWQ7Cj4gLQo+IC0JCXBhZGRyID0gZGl2X3U2NF9yZW0ocGFkZHIsIHVhZGRyZi0+c2Vj X3N0cmlwZSwgJnNlY3MpOwo+IC0JCXBwYS5tLnNlYyA9IHNlY3M7Cj4gLQo+IC0JCXBhZGRyID0g ZGl2X3U2NF9yZW0ocGFkZHIsIHVhZGRyZi0+Y2hfc3RyaXBlLCAmY2hubHMpOwo+IC0JCXBwYS5t LmdycCA9IGNobmxzOwo+IC0KPiAtCQlwYWRkciA9IGRpdl91NjRfcmVtKHBhZGRyLCB1YWRkcmYt Pmx1bl9zdHJpcGUsICZsdW5zKTsKPiAtCQlwcGEubS5wdSA9IGx1bnM7Cj4gLQo+IC0JCXBwYS5t LnNlYyArPSB1YWRkcmYtPnNlY19zdHJpcGUgKiBwYWRkcjsKPiAtCX0KPiAtCj4gLQlyZXR1cm4g cHBhOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW5saW5lIHN0cnVjdCBudm1fY2hrX21ldGEgKnBibGtf ZGV2X3BwYV90b19jaHVuayhzdHJ1Y3QgcGJsayAqcGJsaywKPiAtCQkJCQkJCXN0cnVjdCBwcGFf YWRkciBwKQo+IC17Cj4gLQlzdHJ1Y3QgbnZtX3RndF9kZXYgKmRldiA9IHBibGstPmRldjsKPiAt CXN0cnVjdCBudm1fZ2VvICpnZW8gPSAmZGV2LT5nZW87Cj4gLQlzdHJ1Y3QgcGJsa19saW5lICps aW5lID0gcGJsa19wcGFfdG9fbGluZShwYmxrLCBwKTsKPiAtCWludCBwb3MgPSBwYmxrX3BwYV90 b19wb3MoZ2VvLCBwKTsKPiAtCj4gLQlyZXR1cm4gJmxpbmUtPmNoa3NbcG9zXTsKPiAtfQo+IC0K PiAtc3RhdGljIGlubGluZSB1NjQgcGJsa19kZXZfcHBhX3RvX2NodW5rX2FkZHIoc3RydWN0IHBi bGsgKnBibGssCj4gLQkJCQkJCQlzdHJ1Y3QgcHBhX2FkZHIgcCkKPiAtewo+IC0Jc3RydWN0IG52 bV90Z3RfZGV2ICpkZXYgPSBwYmxrLT5kZXY7Cj4gLQo+IC0JcmV0dXJuIGRldl90b19jaHVua19h ZGRyKGRldi0+cGFyZW50LCAmcGJsay0+YWRkcmYsIHApOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW5s aW5lIHU2NCBwYmxrX2Rldl9wcGFfdG9fbGluZV9hZGRyKHN0cnVjdCBwYmxrICpwYmxrLAo+IC0J CQkJCQkJc3RydWN0IHBwYV9hZGRyIHApCj4gLXsKPiAtCXN0cnVjdCBudm1fdGd0X2RldiAqZGV2 ID0gcGJsay0+ZGV2Owo+IC0Jc3RydWN0IG52bV9nZW8gKmdlbyA9ICZkZXYtPmdlbzsKPiAtCXU2 NCBwYWRkcjsKPiAtCj4gLQlpZiAoZ2VvLT52ZXJzaW9uID09IE5WTV9PQ1NTRF9TUEVDXzEyKSB7 Cj4gLQkJc3RydWN0IG52bV9hZGRyZl8xMiAqcHBhZiA9IChzdHJ1Y3QgbnZtX2FkZHJmXzEyICop JnBibGstPmFkZHJmOwo+IC0KPiAtCQlwYWRkciA9ICh1NjQpcC5nLmNoIDw8IHBwYWYtPmNoX29m ZnNldDsKPiAtCQlwYWRkciB8PSAodTY0KXAuZy5sdW4gPDwgcHBhZi0+bHVuX29mZnNldDsKPiAt CQlwYWRkciB8PSAodTY0KXAuZy5wZyA8PCBwcGFmLT5wZ19vZmZzZXQ7Cj4gLQkJcGFkZHIgfD0g KHU2NClwLmcucGwgPDwgcHBhZi0+cGxuX29mZnNldDsKPiAtCQlwYWRkciB8PSAodTY0KXAuZy5z ZWMgPDwgcHBhZi0+c2VjX29mZnNldDsKPiAtCX0gZWxzZSB7Cj4gLQkJc3RydWN0IHBibGtfYWRk cmYgKnVhZGRyZiA9ICZwYmxrLT51YWRkcmY7Cj4gLQkJdTY0IHNlY3MgPSBwLm0uc2VjOwo+IC0J CWludCBzZWNfc3RyaXBlOwo+IC0KPiAtCQlwYWRkciA9ICh1NjQpcC5tLmdycCAqIHVhZGRyZi0+ c2VjX3N0cmlwZTsKPiAtCQlwYWRkciArPSAodTY0KXAubS5wdSAqIHVhZGRyZi0+c2VjX2x1bl9z dHJpcGU7Cj4gLQo+IC0JCXNlY3MgPSBkaXZfdTY0X3JlbShzZWNzLCB1YWRkcmYtPnNlY19zdHJp cGUsICZzZWNfc3RyaXBlKTsKPiAtCQlwYWRkciArPSBzZWNzICogdWFkZHJmLT5zZWNfd3Nfc3Ry aXBlOwo+IC0JCXBhZGRyICs9IHNlY19zdHJpcGU7Cj4gLQl9Cj4gLQo+IC0JcmV0dXJuIHBhZGRy Owo+IC19Cj4gLQo+IC1zdGF0aWMgaW5saW5lIHN0cnVjdCBwcGFfYWRkciBwYmxrX3BwYTMyX3Rv X3BwYTY0KHN0cnVjdCBwYmxrICpwYmxrLCB1MzIgcHBhMzIpCj4gLXsKPiAtCXN0cnVjdCBudm1f dGd0X2RldiAqZGV2ID0gcGJsay0+ZGV2Owo+IC0KPiAtCXJldHVybiBudm1fcHBhMzJfdG9fcHBh NjQoZGV2LT5wYXJlbnQsICZwYmxrLT5hZGRyZiwgcHBhMzIpOwo+IC19Cj4gLQo+IC1zdGF0aWMg aW5saW5lIHUzMiBwYmxrX3BwYTY0X3RvX3BwYTMyKHN0cnVjdCBwYmxrICpwYmxrLCBzdHJ1Y3Qg cHBhX2FkZHIgcHBhNjQpCj4gLXsKPiAtCXN0cnVjdCBudm1fdGd0X2RldiAqZGV2ID0gcGJsay0+ ZGV2Owo+IC0KPiAtCXJldHVybiBudm1fcHBhNjRfdG9fcHBhMzIoZGV2LT5wYXJlbnQsICZwYmxr LT5hZGRyZiwgcHBhNjQpOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW5saW5lIHN0cnVjdCBwcGFfYWRk ciBwYmxrX3RyYW5zX21hcF9nZXQoc3RydWN0IHBibGsgKnBibGssCj4gLQkJCQkJCQkJc2VjdG9y X3QgbGJhKQo+IC17Cj4gLQlzdHJ1Y3QgcHBhX2FkZHIgcHBhOwo+IC0KPiAtCWlmIChwYmxrLT5h ZGRyZl9sZW4gPCAzMikgewo+IC0JCXUzMiAqbWFwID0gKHUzMiAqKXBibGstPnRyYW5zX21hcDsK PiAtCj4gLQkJcHBhID0gcGJsa19wcGEzMl90b19wcGE2NChwYmxrLCBtYXBbbGJhXSk7Cj4gLQl9 IGVsc2Ugewo+IC0JCXN0cnVjdCBwcGFfYWRkciAqbWFwID0gKHN0cnVjdCBwcGFfYWRkciAqKXBi bGstPnRyYW5zX21hcDsKPiAtCj4gLQkJcHBhID0gbWFwW2xiYV07Cj4gLQl9Cj4gLQo+IC0JcmV0 dXJuIHBwYTsKPiAtfQo+IC0KPiAtc3RhdGljIGlubGluZSB2b2lkIHBibGtfdHJhbnNfbWFwX3Nl dChzdHJ1Y3QgcGJsayAqcGJsaywgc2VjdG9yX3QgbGJhLAo+IC0JCQkJCQlzdHJ1Y3QgcHBhX2Fk ZHIgcHBhKQo+IC17Cj4gLQlpZiAocGJsay0+YWRkcmZfbGVuIDwgMzIpIHsKPiAtCQl1MzIgKm1h cCA9ICh1MzIgKilwYmxrLT50cmFuc19tYXA7Cj4gLQo+IC0JCW1hcFtsYmFdID0gcGJsa19wcGE2 NF90b19wcGEzMihwYmxrLCBwcGEpOwo+IC0JfSBlbHNlIHsKPiAtCQl1NjQgKm1hcCA9ICh1NjQg KilwYmxrLT50cmFuc19tYXA7Cj4gLQo+IC0JCW1hcFtsYmFdID0gcHBhLnBwYTsKPiAtCX0KPiAt fQo+IC0KPiAtc3RhdGljIGlubGluZSBpbnQgcGJsa19wcGFfZW1wdHkoc3RydWN0IHBwYV9hZGRy IHBwYV9hZGRyKQo+IC17Cj4gLQlyZXR1cm4gKHBwYV9hZGRyLnBwYSA9PSBBRERSX0VNUFRZKTsK PiAtfQo+IC0KPiAtc3RhdGljIGlubGluZSB2b2lkIHBibGtfcHBhX3NldF9lbXB0eShzdHJ1Y3Qg cHBhX2FkZHIgKnBwYV9hZGRyKQo+IC17Cj4gLQlwcGFfYWRkci0+cHBhID0gQUREUl9FTVBUWTsK PiAtfQo+IC0KPiAtc3RhdGljIGlubGluZSBib29sIHBibGtfcHBhX2NvbXAoc3RydWN0IHBwYV9h ZGRyIGxwcGEsIHN0cnVjdCBwcGFfYWRkciBycHBhKQo+IC17Cj4gLQlyZXR1cm4gKGxwcGEucHBh ID09IHJwcGEucHBhKTsKPiAtfQo+IC0KPiAtc3RhdGljIGlubGluZSBpbnQgcGJsa19hZGRyX2lu X2NhY2hlKHN0cnVjdCBwcGFfYWRkciBwcGEpCj4gLXsKPiAtCXJldHVybiAocHBhLnBwYSAhPSBB RERSX0VNUFRZICYmIHBwYS5jLmlzX2NhY2hlZCk7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbmxpbmUg aW50IHBibGtfYWRkcl90b19jYWNoZWxpbmUoc3RydWN0IHBwYV9hZGRyIHBwYSkKPiAtewo+IC0J cmV0dXJuIHBwYS5jLmxpbmU7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbmxpbmUgc3RydWN0IHBwYV9h ZGRyIHBibGtfY2FjaGVsaW5lX3RvX2FkZHIoaW50IGFkZHIpCj4gLXsKPiAtCXN0cnVjdCBwcGFf YWRkciBwOwo+IC0KPiAtCXAuYy5saW5lID0gYWRkcjsKPiAtCXAuYy5pc19jYWNoZWQgPSAxOwo+ IC0KPiAtCXJldHVybiBwOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW5saW5lIHUzMiBwYmxrX2NhbGNf bWV0YV9oZWFkZXJfY3JjKHN0cnVjdCBwYmxrICpwYmxrLAo+IC0JCQkJCSAgICBzdHJ1Y3QgbGlu ZV9oZWFkZXIgKmhlYWRlcikKPiAtewo+IC0JdTMyIGNyYyA9IH4odTMyKTA7Cj4gLQo+IC0JY3Jj ID0gY3JjMzJfbGUoY3JjLCAodW5zaWduZWQgY2hhciAqKWhlYWRlciArIHNpemVvZihjcmMpLAo+ IC0JCQkJc2l6ZW9mKHN0cnVjdCBsaW5lX2hlYWRlcikgLSBzaXplb2YoY3JjKSk7Cj4gLQo+IC0J cmV0dXJuIGNyYzsKPiAtfQo+IC0KPiAtc3RhdGljIGlubGluZSB1MzIgcGJsa19jYWxjX3NtZXRh X2NyYyhzdHJ1Y3QgcGJsayAqcGJsaywKPiAtCQkJCSAgICAgIHN0cnVjdCBsaW5lX3NtZXRhICpz bWV0YSkKPiAtewo+IC0Jc3RydWN0IHBibGtfbGluZV9tZXRhICpsbSA9ICZwYmxrLT5sbTsKPiAt CXUzMiBjcmMgPSB+KHUzMikwOwo+IC0KPiAtCWNyYyA9IGNyYzMyX2xlKGNyYywgKHVuc2lnbmVk IGNoYXIgKilzbWV0YSArCj4gLQkJCQlzaXplb2Yoc3RydWN0IGxpbmVfaGVhZGVyKSArIHNpemVv ZihjcmMpLAo+IC0JCQkJbG0tPnNtZXRhX2xlbiAtCj4gLQkJCQlzaXplb2Yoc3RydWN0IGxpbmVf aGVhZGVyKSAtIHNpemVvZihjcmMpKTsKPiAtCj4gLQlyZXR1cm4gY3JjOwo+IC19Cj4gLQo+IC1z dGF0aWMgaW5saW5lIHUzMiBwYmxrX2NhbGNfZW1ldGFfY3JjKHN0cnVjdCBwYmxrICpwYmxrLAo+ IC0JCQkJICAgICAgc3RydWN0IGxpbmVfZW1ldGEgKmVtZXRhKQo+IC17Cj4gLQlzdHJ1Y3QgcGJs a19saW5lX21ldGEgKmxtID0gJnBibGstPmxtOwo+IC0JdTMyIGNyYyA9IH4odTMyKTA7Cj4gLQo+ IC0JY3JjID0gY3JjMzJfbGUoY3JjLCAodW5zaWduZWQgY2hhciAqKWVtZXRhICsKPiAtCQkJCXNp emVvZihzdHJ1Y3QgbGluZV9oZWFkZXIpICsgc2l6ZW9mKGNyYyksCj4gLQkJCQlsbS0+ZW1ldGFf bGVuWzBdIC0KPiAtCQkJCXNpemVvZihzdHJ1Y3QgbGluZV9oZWFkZXIpIC0gc2l6ZW9mKGNyYykp Owo+IC0KPiAtCXJldHVybiBjcmM7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbmxpbmUgaW50IHBibGtf aW9fYWxpZ25lZChzdHJ1Y3QgcGJsayAqcGJsaywgaW50IG5yX3NlY3MpCj4gLXsKPiAtCXJldHVy biAhKG5yX3NlY3MgJSBwYmxrLT5taW5fd3JpdGVfcGdzKTsKPiAtfQo+IC0KPiAtI2lmZGVmIENP TkZJR19OVk1fUEJMS19ERUJVRwo+IC1zdGF0aWMgaW5saW5lIHZvaWQgcHJpbnRfcHBhKHN0cnVj dCBwYmxrICpwYmxrLCBzdHJ1Y3QgcHBhX2FkZHIgKnAsCj4gLQkJCSAgICAgY2hhciAqbXNnLCBp bnQgZXJyb3IpCj4gLXsKPiAtCXN0cnVjdCBudm1fZ2VvICpnZW8gPSAmcGJsay0+ZGV2LT5nZW87 Cj4gLQo+IC0JaWYgKHAtPmMuaXNfY2FjaGVkKSB7Cj4gLQkJcGJsa19lcnIocGJsaywgInBwYTog KCVzOiAleCkgY2FjaGUgbGluZTogJWxsdVxuIiwKPiAtCQkJCW1zZywgZXJyb3IsICh1NjQpcC0+ Yy5saW5lKTsKPiAtCX0gZWxzZSBpZiAoZ2VvLT52ZXJzaW9uID09IE5WTV9PQ1NTRF9TUEVDXzEy KSB7Cj4gLQkJcGJsa19lcnIocGJsaywgInBwYTogKCVzOiAleCk6Y2g6JWQsbHVuOiVkLGJsazol ZCxwZzolZCxwbDolZCxzZWM6JWRcbiIsCj4gLQkJCW1zZywgZXJyb3IsCj4gLQkJCXAtPmcuY2gs IHAtPmcubHVuLCBwLT5nLmJsaywKPiAtCQkJcC0+Zy5wZywgcC0+Zy5wbCwgcC0+Zy5zZWMpOwo+ IC0JfSBlbHNlIHsKPiAtCQlwYmxrX2VycihwYmxrLCAicHBhOiAoJXM6ICV4KTpjaDolZCxsdW46 JWQsY2hrOiVkLHNlYzolZFxuIiwKPiAtCQkJbXNnLCBlcnJvciwKPiAtCQkJcC0+bS5ncnAsIHAt Pm0ucHUsIHAtPm0uY2hrLCBwLT5tLnNlYyk7Cj4gLQl9Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbmxp bmUgdm9pZCBwYmxrX3ByaW50X2ZhaWxlZF9ycWQoc3RydWN0IHBibGsgKnBibGssIHN0cnVjdCBu dm1fcnEgKnJxZCwKPiAtCQkJCQkgaW50IGVycm9yKQo+IC17Cj4gLQlpbnQgYml0ID0gLTE7Cj4g LQo+IC0JaWYgKHJxZC0+bnJfcHBhcyA9PSAgMSkgewo+IC0JCXByaW50X3BwYShwYmxrLCAmcnFk LT5wcGFfYWRkciwgInJxZCIsIGVycm9yKTsKPiAtCQlyZXR1cm47Cj4gLQl9Cj4gLQo+IC0Jd2hp bGUgKChiaXQgPSBmaW5kX25leHRfYml0KCh2b2lkICopJnJxZC0+cHBhX3N0YXR1cywgcnFkLT5u cl9wcGFzLAo+IC0JCQkJCQliaXQgKyAxKSkgPCBycWQtPm5yX3BwYXMpIHsKPiAtCQlwcmludF9w cGEocGJsaywgJnJxZC0+cHBhX2xpc3RbYml0XSwgInJxZCIsIGVycm9yKTsKPiAtCX0KPiAtCj4g LQlwYmxrX2VycihwYmxrLCAiZXJyb3I6JWQsIHBwYV9zdGF0dXM6JWxseFxuIiwgZXJyb3IsIHJx ZC0+cHBhX3N0YXR1cyk7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbmxpbmUgaW50IHBibGtfYm91bmRh cnlfcHBhX2NoZWNrcyhzdHJ1Y3QgbnZtX3RndF9kZXYgKnRndF9kZXYsCj4gLQkJCQkgICAgICAg c3RydWN0IHBwYV9hZGRyICpwcGFzLCBpbnQgbnJfcHBhcykKPiAtewo+IC0Jc3RydWN0IG52bV9n ZW8gKmdlbyA9ICZ0Z3RfZGV2LT5nZW87Cj4gLQlzdHJ1Y3QgcHBhX2FkZHIgKnBwYTsKPiAtCWlu dCBpOwo+IC0KPiAtCWZvciAoaSA9IDA7IGkgPCBucl9wcGFzOyBpKyspIHsKPiAtCQlwcGEgPSAm cHBhc1tpXTsKPiAtCj4gLQkJaWYgKGdlby0+dmVyc2lvbiA9PSBOVk1fT0NTU0RfU1BFQ18xMikg ewo+IC0JCQlpZiAoIXBwYS0+Yy5pc19jYWNoZWQgJiYKPiAtCQkJCQlwcGEtPmcuY2ggPCBnZW8t Pm51bV9jaCAmJgo+IC0JCQkJCXBwYS0+Zy5sdW4gPCBnZW8tPm51bV9sdW4gJiYKPiAtCQkJCQlw cGEtPmcucGwgPCBnZW8tPm51bV9wbG4gJiYKPiAtCQkJCQlwcGEtPmcuYmxrIDwgZ2VvLT5udW1f Y2hrICYmCj4gLQkJCQkJcHBhLT5nLnBnIDwgZ2VvLT5udW1fcGcgJiYKPiAtCQkJCQlwcGEtPmcu c2VjIDwgZ2VvLT53c19taW4pCj4gLQkJCQljb250aW51ZTsKPiAtCQl9IGVsc2Ugewo+IC0JCQlp ZiAoIXBwYS0+Yy5pc19jYWNoZWQgJiYKPiAtCQkJCQlwcGEtPm0uZ3JwIDwgZ2VvLT5udW1fY2gg JiYKPiAtCQkJCQlwcGEtPm0ucHUgPCBnZW8tPm51bV9sdW4gJiYKPiAtCQkJCQlwcGEtPm0uY2hr IDwgZ2VvLT5udW1fY2hrICYmCj4gLQkJCQkJcHBhLT5tLnNlYyA8IGdlby0+Y2xiYSkKPiAtCQkJ CWNvbnRpbnVlOwo+IC0JCX0KPiAtCj4gLQkJcHJpbnRfcHBhKHRndF9kZXYtPnEtPnF1ZXVlZGF0 YSwgcHBhLCAiYm91bmRhcnkiLCBpKTsKPiAtCj4gLQkJcmV0dXJuIDE7Cj4gLQl9Cj4gLQlyZXR1 cm4gMDsKPiAtfQo+IC0KPiAtc3RhdGljIGlubGluZSBpbnQgcGJsa19jaGVja19pbyhzdHJ1Y3Qg cGJsayAqcGJsaywgc3RydWN0IG52bV9ycSAqcnFkKQo+IC17Cj4gLQlzdHJ1Y3QgbnZtX3RndF9k ZXYgKmRldiA9IHBibGstPmRldjsKPiAtCXN0cnVjdCBwcGFfYWRkciAqcHBhX2xpc3QgPSBudm1f cnFfdG9fcHBhX2xpc3QocnFkKTsKPiAtCj4gLQlpZiAocGJsa19ib3VuZGFyeV9wcGFfY2hlY2tz KGRldiwgcHBhX2xpc3QsIHJxZC0+bnJfcHBhcykpIHsKPiAtCQlXQVJOX09OKDEpOwo+IC0JCXJl dHVybiAtRUlOVkFMOwo+IC0JfQo+IC0KPiAtCWlmIChycWQtPm9wY29kZSA9PSBOVk1fT1BfUFdS SVRFKSB7Cj4gLQkJc3RydWN0IHBibGtfbGluZSAqbGluZTsKPiAtCQlpbnQgaTsKPiAtCj4gLQkJ Zm9yIChpID0gMDsgaSA8IHJxZC0+bnJfcHBhczsgaSsrKSB7Cj4gLQkJCWxpbmUgPSBwYmxrX3Bw YV90b19saW5lKHBibGssIHBwYV9saXN0W2ldKTsKPiAtCj4gLQkJCXNwaW5fbG9jaygmbGluZS0+ bG9jayk7Cj4gLQkJCWlmIChsaW5lLT5zdGF0ZSAhPSBQQkxLX0xJTkVTVEFURV9PUEVOKSB7Cj4g LQkJCQlwYmxrX2VycihwYmxrLCAiYmFkIHBwYTogbGluZTolZCxzdGF0ZTolZFxuIiwKPiAtCQkJ CQkJCWxpbmUtPmlkLCBsaW5lLT5zdGF0ZSk7Cj4gLQkJCQlXQVJOX09OKDEpOwo+IC0JCQkJc3Bp bl91bmxvY2soJmxpbmUtPmxvY2spOwo+IC0JCQkJcmV0dXJuIC1FSU5WQUw7Cj4gLQkJCX0KPiAt CQkJc3Bpbl91bmxvY2soJmxpbmUtPmxvY2spOwo+IC0JCX0KPiAtCX0KPiAtCj4gLQlyZXR1cm4g MDsKPiAtfQo+IC0jZW5kaWYKPiAtCj4gLXN0YXRpYyBpbmxpbmUgaW50IHBibGtfYm91bmRhcnlf cGFkZHJfY2hlY2tzKHN0cnVjdCBwYmxrICpwYmxrLCB1NjQgcGFkZHIpCj4gLXsKPiAtCXN0cnVj dCBwYmxrX2xpbmVfbWV0YSAqbG0gPSAmcGJsay0+bG07Cj4gLQo+IC0JaWYgKHBhZGRyID4gbG0t PnNlY19wZXJfbGluZSkKPiAtCQlyZXR1cm4gMTsKPiAtCj4gLQlyZXR1cm4gMDsKPiAtfQo+IC0K PiAtc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgcGJsa19nZXRfYmlfaWR4KHN0cnVjdCBiaW8g KmJpbykKPiAtewo+IC0JcmV0dXJuIGJpby0+YmlfaXRlci5iaV9pZHg7Cj4gLX0KPiAtCj4gLXN0 YXRpYyBpbmxpbmUgc2VjdG9yX3QgcGJsa19nZXRfbGJhKHN0cnVjdCBiaW8gKmJpbykKPiAtewo+ IC0JcmV0dXJuIGJpby0+YmlfaXRlci5iaV9zZWN0b3IgLyBOUl9QSFlfSU5fTE9HOwo+IC19Cj4g LQo+IC1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBwYmxrX2dldF9zZWNzKHN0cnVjdCBiaW8g KmJpbykKPiAtewo+IC0JcmV0dXJuICBiaW8tPmJpX2l0ZXIuYmlfc2l6ZSAvIFBCTEtfRVhQT1NF RF9QQUdFX1NJWkU7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbmxpbmUgY2hhciAqcGJsa19kaXNrX25h bWUoc3RydWN0IHBibGsgKnBibGspCj4gLXsKPiAtCXN0cnVjdCBnZW5kaXNrICpkaXNrID0gcGJs ay0+ZGlzazsKPiAtCj4gLQlyZXR1cm4gZGlzay0+ZGlza19uYW1lOwo+IC19Cj4gLQo+IC1zdGF0 aWMgaW5saW5lIHVuc2lnbmVkIGludCBwYmxrX2dldF9taW5fY2hrcyhzdHJ1Y3QgcGJsayAqcGJs aykKPiAtewo+IC0Jc3RydWN0IHBibGtfbGluZV9tZXRhICpsbSA9ICZwYmxrLT5sbTsKPiAtCS8q IEluIGEgd29yc3QtY2FzZSBzY2VuYXJpbyBldmVyeSBsaW5lIHdpbGwgaGF2ZSBPUCBpbnZhbGlk IHNlY3RvcnMuCj4gLQkgKiBXZSB3aWxsIHRoZW4gbmVlZCBhIG1pbmltdW0gb2YgMS9PUCBsaW5l cyB0byBmcmVlIHVwIGEgc2luZ2xlIGxpbmUKPiAtCSAqLwo+IC0KPiAtCXJldHVybiBESVZfUk9V TkRfVVAoMTAwLCBwYmxrLT5vcCkgKiBsbS0+YmxrX3Blcl9saW5lOwo+IC19Cj4gLQo+IC1zdGF0 aWMgaW5saW5lIHN0cnVjdCBwYmxrX3NlY19tZXRhICpwYmxrX2dldF9tZXRhKHN0cnVjdCBwYmxr ICpwYmxrLAo+IC0JCQkJCQkJIHZvaWQgKm1ldGEsIGludCBpbmRleCkKPiAtewo+IC0JcmV0dXJu IG1ldGEgKwo+IC0JICAgICAgIG1heF90KGludCwgc2l6ZW9mKHN0cnVjdCBwYmxrX3NlY19tZXRh KSwgcGJsay0+b29iX21ldGFfc2l6ZSkKPiAtCSAgICAgICAqIGluZGV4Owo+IC19Cj4gLQo+IC1z dGF0aWMgaW5saW5lIGludCBwYmxrX2RtYV9tZXRhX3NpemUoc3RydWN0IHBibGsgKnBibGspCj4g LXsKPiAtCXJldHVybiBtYXhfdChpbnQsIHNpemVvZihzdHJ1Y3QgcGJsa19zZWNfbWV0YSksIHBi bGstPm9vYl9tZXRhX3NpemUpCj4gLQkgICAgICAgKiBOVk1fTUFYX1ZMQkE7Cj4gLX0KPiAtCj4g LXN0YXRpYyBpbmxpbmUgaW50IHBibGtfaXNfb29iX21ldGFfc3VwcG9ydGVkKHN0cnVjdCBwYmxr ICpwYmxrKQo+IC17Cj4gLQlyZXR1cm4gcGJsay0+b29iX21ldGFfc2l6ZSA+PSBzaXplb2Yoc3Ry dWN0IHBibGtfc2VjX21ldGEpOwo+IC19Cj4gLSNlbmRpZiAvKiBQQkxLX0hfICovCj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvbnZtZS9ob3N0L01ha2VmaWxlIGIvZHJpdmVycy9udm1lL2hvc3QvTWFr ZWZpbGUKPiBpbmRleCBjYmM1MDk3ODRiMmUuLmRmYWFjZDQ3MmU1ZCAxMDA2NDQKPiAtLS0gYS9k cml2ZXJzL252bWUvaG9zdC9NYWtlZmlsZQo+ICsrKyBiL2RyaXZlcnMvbnZtZS9ob3N0L01ha2Vm aWxlCj4gQEAgLTEyLDcgKzEyLDYgQEAgb2JqLSQoQ09ORklHX05WTUVfVENQKQkJCSs9IG52bWUt dGNwLm8KPiAgIG52bWUtY29yZS15CQkJCTo9IGNvcmUubyBpb2N0bC5vCj4gICBudm1lLWNvcmUt JChDT05GSUdfVFJBQ0lORykJCSs9IHRyYWNlLm8KPiAgIG52bWUtY29yZS0kKENPTkZJR19OVk1F X01VTFRJUEFUSCkJKz0gbXVsdGlwYXRoLm8KPiAtbnZtZS1jb3JlLSQoQ09ORklHX05WTSkJCQkr PSBsaWdodG52bS5vCj4gICBudm1lLWNvcmUtJChDT05GSUdfQkxLX0RFVl9aT05FRCkJKz0gem5z Lm8KPiAgIG52bWUtY29yZS0kKENPTkZJR19GQVVMVF9JTkpFQ1RJT05fREVCVUdfRlMpCSs9IGZh dWx0X2luamVjdC5vCj4gICBudm1lLWNvcmUtJChDT05GSUdfTlZNRV9IV01PTikJCSs9IGh3bW9u Lm8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL2hvc3QvY29yZS5jIGIvZHJpdmVycy9udm1l L2hvc3QvY29yZS5jCj4gaW5kZXggMmYwY2JhYmExMmFjLi5iOWE0NmM1NGY3MTQgMTAwNjQ0Cj4g LS0tIGEvZHJpdmVycy9udm1lL2hvc3QvY29yZS5jCj4gKysrIGIvZHJpdmVycy9udm1lL2hvc3Qv Y29yZS5jCj4gQEAgLTU4Nyw5ICs1ODcsNiBAQCBzdGF0aWMgdm9pZCBudm1lX2ZyZWVfbnMoc3Ry dWN0IGtyZWYgKmtyZWYpCj4gICB7Cj4gICAJc3RydWN0IG52bWVfbnMgKm5zID0gY29udGFpbmVy X29mKGtyZWYsIHN0cnVjdCBudm1lX25zLCBrcmVmKTsKPiAgIAo+IC0JaWYgKG5zLT5uZGV2KQo+ IC0JCW52bWVfbnZtX3VucmVnaXN0ZXIobnMpOwo+IC0KPiAgIAlwdXRfZGlzayhucy0+ZGlzayk7 Cj4gICAJbnZtZV9wdXRfbnNfaGVhZChucy0+aGVhZCk7Cj4gICAJbnZtZV9wdXRfY3RybChucy0+ Y3RybCk7Cj4gQEAgLTMyMTksOSArMzIxNiw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmli dXRlX2dyb3VwIG52bWVfbnNfaWRfYXR0cl9ncm91cCA9IHsKPiAgIAo+ICAgY29uc3Qgc3RydWN0 IGF0dHJpYnV0ZV9ncm91cCAqbnZtZV9uc19pZF9hdHRyX2dyb3Vwc1tdID0gewo+ICAgCSZudm1l X25zX2lkX2F0dHJfZ3JvdXAsCj4gLSNpZmRlZiBDT05GSUdfTlZNCj4gLQkmbnZtZV9udm1fYXR0 cl9ncm91cCwKPiAtI2VuZGlmCj4gICAJTlVMTCwKPiAgIH07Cj4gICAKPiBAQCAtMzc2OCwxMyAr Mzc2Miw2IEBAIHN0YXRpYyB2b2lkIG52bWVfYWxsb2NfbnMoc3RydWN0IG52bWVfY3RybCAqY3Ry bCwgdW5zaWduZWQgbnNpZCwKPiAgIAlpZiAobnZtZV91cGRhdGVfbnNfaW5mbyhucywgaWQpKQo+ ICAgCQlnb3RvIG91dF9wdXRfZGlzazsKPiAgIAo+IC0JaWYgKChjdHJsLT5xdWlya3MgJiBOVk1F X1FVSVJLX0xJR0hUTlZNKSAmJiBpZC0+dnNbMF0gPT0gMHgxKSB7Cj4gLQkJaWYgKG52bWVfbnZt X3JlZ2lzdGVyKG5zLCBkaXNrLT5kaXNrX25hbWUsIG5vZGUpKSB7Cj4gLQkJCWRldl93YXJuKGN0 cmwtPmRldmljZSwgIkxpZ2h0TlZNIGluaXQgZmFpbHVyZVxuIik7Cj4gLQkJCWdvdG8gb3V0X3B1 dF9kaXNrOwo+IC0JCX0KPiAtCX0KPiAtCj4gICAJZG93bl93cml0ZSgmY3RybC0+bmFtZXNwYWNl c19yd3NlbSk7Cj4gICAJbGlzdF9hZGRfdGFpbCgmbnMtPmxpc3QsICZjdHJsLT5uYW1lc3BhY2Vz KTsKPiAgIAl1cF93cml0ZSgmY3RybC0+bmFtZXNwYWNlc19yd3NlbSk7Cj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvbnZtZS9ob3N0L2lvY3RsLmMgYi9kcml2ZXJzL252bWUvaG9zdC9pb2N0bC5jCj4g aW5kZXggMzA1ZGRkNDE1ZTQ1Li4yMjMxNDk2Mjg0MmQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9u dm1lL2hvc3QvaW9jdGwuYwo+ICsrKyBiL2RyaXZlcnMvbnZtZS9ob3N0L2lvY3RsLmMKPiBAQCAt MzQyLDkgKzM0Miw3IEBAIHN0YXRpYyBpbnQgbnZtZV9uc19pb2N0bChzdHJ1Y3QgbnZtZV9ucyAq bnMsIHVuc2lnbmVkIGludCBjbWQsCj4gICAJY2FzZSBOVk1FX0lPQ1RMX0lPNjRfQ01EOgo+ICAg CQlyZXR1cm4gbnZtZV91c2VyX2NtZDY0KG5zLT5jdHJsLCBucywgYXJncCk7Cj4gICAJZGVmYXVs dDoKPiAtCQlpZiAoIW5zLT5uZGV2KQo+IC0JCQlyZXR1cm4gLUVOT1RUWTsKPiAtCQlyZXR1cm4g bnZtZV9udm1faW9jdGwobnMsIGNtZCwgYXJncCk7Cj4gKwkJcmV0dXJuIC1FTk9UVFk7Cj4gICAJ fQo+ICAgfQo+ICAgCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS9ob3N0L2xpZ2h0bnZtLmMg Yi9kcml2ZXJzL252bWUvaG9zdC9saWdodG52bS5jCj4gZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0 Cj4gaW5kZXggZTlkOWFkNDdmNzBmLi4wMDAwMDAwMDAwMDAKPiAtLS0gYS9kcml2ZXJzL252bWUv aG9zdC9saWdodG52bS5jCj4gKysrIC9kZXYvbnVsbAo+IEBAIC0xLDEyNzQgKzAsMCBAQAo+IC0v LyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAo+IC0vKgo+IC0gKiBudm1lLWxpZ2h0 bnZtLmMgLSBMaWdodE5WTSBOVk1lIGRldmljZQo+IC0gKgo+IC0gKiBDb3B5cmlnaHQgKEMpIDIw MTQtMjAxNSBJVCBVbml2ZXJzaXR5IG9mIENvcGVuaGFnZW4KPiAtICogSW5pdGlhbCByZWxlYXNl OiBNYXRpYXMgQmpvcmxpbmcgPG1iQGxpZ2h0bnZtLmlvPgo+IC0gKi8KPiAtCj4gLSNpbmNsdWRl ICJudm1lLmgiCj4gLQo+IC0jaW5jbHVkZSA8bGludXgvbnZtZS5oPgo+IC0jaW5jbHVkZSA8bGlu dXgvYml0b3BzLmg+Cj4gLSNpbmNsdWRlIDxsaW51eC9saWdodG52bS5oPgo+IC0jaW5jbHVkZSA8 bGludXgvdm1hbGxvYy5oPgo+IC0jaW5jbHVkZSA8bGludXgvc2NoZWQvc3lzY3RsLmg+Cj4gLSNp bmNsdWRlIDx1YXBpL2xpbnV4L2xpZ2h0bnZtLmg+Cj4gLQo+IC1lbnVtIG52bWVfbnZtX2FkbWlu X29wY29kZSB7Cj4gLQludm1lX252bV9hZG1pbl9pZGVudGl0eQkJPSAweGUyLAo+IC0JbnZtZV9u dm1fYWRtaW5fZ2V0X2JiX3RibAk9IDB4ZjIsCj4gLQludm1lX252bV9hZG1pbl9zZXRfYmJfdGJs CT0gMHhmMSwKPiAtfTsKPiAtCj4gLWVudW0gbnZtZV9udm1fbG9nX3BhZ2Ugewo+IC0JTlZNRV9O Vk1fTE9HX1JFUE9SVF9DSFVOSwk9IDB4Y2EsCj4gLX07Cj4gLQo+IC1zdHJ1Y3QgbnZtZV9udm1f cGhfcncgewo+IC0JX191OAkJCW9wY29kZTsKPiAtCV9fdTgJCQlmbGFnczsKPiAtCV9fdTE2CQkJ Y29tbWFuZF9pZDsKPiAtCV9fbGUzMgkJCW5zaWQ7Cj4gLQlfX3U2NAkJCXJzdmQyOwo+IC0JX19s ZTY0CQkJbWV0YWRhdGE7Cj4gLQlfX2xlNjQJCQlwcnAxOwo+IC0JX19sZTY0CQkJcHJwMjsKPiAt CV9fbGU2NAkJCXNwYmE7Cj4gLQlfX2xlMTYJCQlsZW5ndGg7Cj4gLQlfX2xlMTYJCQljb250cm9s Owo+IC0JX19sZTMyCQkJZHNtZ210Owo+IC0JX19sZTY0CQkJcmVzdjsKPiAtfTsKPiAtCj4gLXN0 cnVjdCBudm1lX252bV9lcmFzZV9ibGsgewo+IC0JX191OAkJCW9wY29kZTsKPiAtCV9fdTgJCQlm bGFnczsKPiAtCV9fdTE2CQkJY29tbWFuZF9pZDsKPiAtCV9fbGUzMgkJCW5zaWQ7Cj4gLQlfX3U2 NAkJCXJzdmRbMl07Cj4gLQlfX2xlNjQJCQlwcnAxOwo+IC0JX19sZTY0CQkJcHJwMjsKPiAtCV9f bGU2NAkJCXNwYmE7Cj4gLQlfX2xlMTYJCQlsZW5ndGg7Cj4gLQlfX2xlMTYJCQljb250cm9sOwo+ IC0JX19sZTMyCQkJZHNtZ210Owo+IC0JX19sZTY0CQkJcmVzdjsKPiAtfTsKPiAtCj4gLXN0cnVj dCBudm1lX252bV9pZGVudGl0eSB7Cj4gLQlfX3U4CQkJb3Bjb2RlOwo+IC0JX191OAkJCWZsYWdz Owo+IC0JX191MTYJCQljb21tYW5kX2lkOwo+IC0JX19sZTMyCQkJbnNpZDsKPiAtCV9fdTY0CQkJ cnN2ZFsyXTsKPiAtCV9fbGU2NAkJCXBycDE7Cj4gLQlfX2xlNjQJCQlwcnAyOwo+IC0JX191MzIJ CQlyc3ZkMTFbNl07Cj4gLX07Cj4gLQo+IC1zdHJ1Y3QgbnZtZV9udm1fZ2V0YmJ0Ymwgewo+IC0J X191OAkJCW9wY29kZTsKPiAtCV9fdTgJCQlmbGFnczsKPiAtCV9fdTE2CQkJY29tbWFuZF9pZDsK PiAtCV9fbGUzMgkJCW5zaWQ7Cj4gLQlfX3U2NAkJCXJzdmRbMl07Cj4gLQlfX2xlNjQJCQlwcnAx Owo+IC0JX19sZTY0CQkJcHJwMjsKPiAtCV9fbGU2NAkJCXNwYmE7Cj4gLQlfX3UzMgkJCXJzdmQ0 WzRdOwo+IC19Owo+IC0KPiAtc3RydWN0IG52bWVfbnZtX3NldGJidGJsIHsKPiAtCV9fdTgJCQlv cGNvZGU7Cj4gLQlfX3U4CQkJZmxhZ3M7Cj4gLQlfX3UxNgkJCWNvbW1hbmRfaWQ7Cj4gLQlfX2xl MzIJCQluc2lkOwo+IC0JX19sZTY0CQkJcnN2ZFsyXTsKPiAtCV9fbGU2NAkJCXBycDE7Cj4gLQlf X2xlNjQJCQlwcnAyOwo+IC0JX19sZTY0CQkJc3BiYTsKPiAtCV9fbGUxNgkJCW5sYjsKPiAtCV9f dTgJCQl2YWx1ZTsKPiAtCV9fdTgJCQlyc3ZkMzsKPiAtCV9fdTMyCQkJcnN2ZDRbM107Cj4gLX07 Cj4gLQo+IC1zdHJ1Y3QgbnZtZV9udm1fY29tbWFuZCB7Cj4gLQl1bmlvbiB7Cj4gLQkJc3RydWN0 IG52bWVfY29tbW9uX2NvbW1hbmQgY29tbW9uOwo+IC0JCXN0cnVjdCBudm1lX252bV9waF9ydyBw aF9ydzsKPiAtCQlzdHJ1Y3QgbnZtZV9udm1fZXJhc2VfYmxrIGVyYXNlOwo+IC0JCXN0cnVjdCBu dm1lX252bV9pZGVudGl0eSBpZGVudGl0eTsKPiAtCQlzdHJ1Y3QgbnZtZV9udm1fZ2V0YmJ0Ymwg Z2V0X2JiOwo+IC0JCXN0cnVjdCBudm1lX252bV9zZXRiYnRibCBzZXRfYmI7Cj4gLQl9Owo+IC19 Owo+IC0KPiAtc3RydWN0IG52bWVfbnZtX2lkMTJfZ3JwIHsKPiAtCV9fdTgJCQltdHlwZTsKPiAt CV9fdTgJCQlmbXR5cGU7Cj4gLQlfX2xlMTYJCQlyZXMxNjsKPiAtCV9fdTgJCQludW1fY2g7Cj4g LQlfX3U4CQkJbnVtX2x1bjsKPiAtCV9fdTgJCQludW1fcGxuOwo+IC0JX191OAkJCXJzdmQxOwo+ IC0JX19sZTE2CQkJbnVtX2NoazsKPiAtCV9fbGUxNgkJCW51bV9wZzsKPiAtCV9fbGUxNgkJCWZw Z19zejsKPiAtCV9fbGUxNgkJCWNzZWNzOwo+IC0JX19sZTE2CQkJc29zOwo+IC0JX19sZTE2CQkJ cnN2ZDI7Cj4gLQlfX2xlMzIJCQl0cmR0Owo+IC0JX19sZTMyCQkJdHJkbTsKPiAtCV9fbGUzMgkJ CXRwcnQ7Cj4gLQlfX2xlMzIJCQl0cHJtOwo+IC0JX19sZTMyCQkJdGJldDsKPiAtCV9fbGUzMgkJ CXRiZW07Cj4gLQlfX2xlMzIJCQltcG9zOwo+IC0JX19sZTMyCQkJbWNjYXA7Cj4gLQlfX2xlMTYJ CQljcGFyOwo+IC0JX191OAkJCXJlc2VydmVkWzkwNl07Cj4gLX0gX19wYWNrZWQ7Cj4gLQo+IC1z dHJ1Y3QgbnZtZV9udm1faWQxMl9hZGRyZiB7Cj4gLQlfX3U4CQkJY2hfb2Zmc2V0Owo+IC0JX191 OAkJCWNoX2xlbjsKPiAtCV9fdTgJCQlsdW5fb2Zmc2V0Owo+IC0JX191OAkJCWx1bl9sZW47Cj4g LQlfX3U4CQkJcGxuX29mZnNldDsKPiAtCV9fdTgJCQlwbG5fbGVuOwo+IC0JX191OAkJCWJsa19v ZmZzZXQ7Cj4gLQlfX3U4CQkJYmxrX2xlbjsKPiAtCV9fdTgJCQlwZ19vZmZzZXQ7Cj4gLQlfX3U4 CQkJcGdfbGVuOwo+IC0JX191OAkJCXNlY19vZmZzZXQ7Cj4gLQlfX3U4CQkJc2VjX2xlbjsKPiAt CV9fdTgJCQlyZXNbNF07Cj4gLX0gX19wYWNrZWQ7Cj4gLQo+IC1zdHJ1Y3QgbnZtZV9udm1faWQx MiB7Cj4gLQlfX3U4CQkJdmVyX2lkOwo+IC0JX191OAkJCXZtbnQ7Cj4gLQlfX3U4CQkJY2dycHM7 Cj4gLQlfX3U4CQkJcmVzOwo+IC0JX19sZTMyCQkJY2FwOwo+IC0JX19sZTMyCQkJZG9tOwo+IC0J c3RydWN0IG52bWVfbnZtX2lkMTJfYWRkcmYgcHBhZjsKPiAtCV9fdTgJCQlyZXN2WzIyOF07Cj4g LQlzdHJ1Y3QgbnZtZV9udm1faWQxMl9ncnAgZ3JwOwo+IC0JX191OAkJCXJlc3YyWzI4ODBdOwo+ IC19IF9fcGFja2VkOwo+IC0KPiAtc3RydWN0IG52bWVfbnZtX2JiX3RibCB7Cj4gLQlfX3U4CXRi bGlkWzRdOwo+IC0JX19sZTE2CXZlcmlkOwo+IC0JX19sZTE2CXJldmlkOwo+IC0JX19sZTMyCXJ2 c2QxOwo+IC0JX19sZTMyCXRibGtzOwo+IC0JX19sZTMyCXRmYWN0Owo+IC0JX19sZTMyCXRncm93 bjsKPiAtCV9fbGUzMgl0ZHJlc3Y7Cj4gLQlfX2xlMzIJdGhyZXN2Owo+IC0JX19sZTMyCXJzdmQy WzhdOwo+IC0JX191OAlibGtbXTsKPiAtfTsKPiAtCj4gLXN0cnVjdCBudm1lX252bV9pZDIwX2Fk ZHJmIHsKPiAtCV9fdTgJCQlncnBfbGVuOwo+IC0JX191OAkJCXB1X2xlbjsKPiAtCV9fdTgJCQlj aGtfbGVuOwo+IC0JX191OAkJCWxiYV9sZW47Cj4gLQlfX3U4CQkJcmVzdls0XTsKPiAtfTsKPiAt Cj4gLXN0cnVjdCBudm1lX252bV9pZDIwIHsKPiAtCV9fdTgJCQltanI7Cj4gLQlfX3U4CQkJbW5y Owo+IC0JX191OAkJCXJlc3ZbNl07Cj4gLQo+IC0Jc3RydWN0IG52bWVfbnZtX2lkMjBfYWRkcmYg bGJhZjsKPiAtCj4gLQlfX2xlMzIJCQltY2NhcDsKPiAtCV9fdTgJCQlyZXN2MlsxMl07Cj4gLQo+ IC0JX191OAkJCXdpdDsKPiAtCV9fdTgJCQlyZXN2M1szMV07Cj4gLQo+IC0JLyogR2VvbWV0cnkg Ki8KPiAtCV9fbGUxNgkJCW51bV9ncnA7Cj4gLQlfX2xlMTYJCQludW1fcHU7Cj4gLQlfX2xlMzIJ CQludW1fY2hrOwo+IC0JX19sZTMyCQkJY2xiYTsKPiAtCV9fdTgJCQlyZXN2NFs1Ml07Cj4gLQo+ IC0JLyogV3JpdGUgZGF0YSByZXF1aXJlbWVudHMgKi8KPiAtCV9fbGUzMgkJCXdzX21pbjsKPiAt CV9fbGUzMgkJCXdzX29wdDsKPiAtCV9fbGUzMgkJCW13X2N1bml0czsKPiAtCV9fbGUzMgkJCW1h eG9jOwo+IC0JX19sZTMyCQkJbWF4b2NwdTsKPiAtCV9fdTgJCQlyZXN2NVs0NF07Cj4gLQo+IC0J LyogUGVyZm9ybWFuY2UgcmVsYXRlZCBtZXRyaWNzICovCj4gLQlfX2xlMzIJCQl0cmR0Owo+IC0J X19sZTMyCQkJdHJkbTsKPiAtCV9fbGUzMgkJCXR3cnQ7Cj4gLQlfX2xlMzIJCQl0d3JtOwo+IC0J X19sZTMyCQkJdGNyc3Q7Cj4gLQlfX2xlMzIJCQl0Y3JzbTsKPiAtCV9fdTgJCQlyZXN2Nls0MF07 Cj4gLQo+IC0JLyogUmVzZXJ2ZWQgYXJlYSAqLwo+IC0JX191OAkJCXJlc3Y3WzI4MTZdOwo+IC0K PiAtCS8qIFZlbmRvciBzcGVjaWZpYyAqLwo+IC0JX191OAkJCXZzWzEwMjRdOwo+IC19Owo+IC0K PiAtc3RydWN0IG52bWVfbnZtX2Noa19tZXRhIHsKPiAtCV9fdTgJc3RhdGU7Cj4gLQlfX3U4CXR5 cGU7Cj4gLQlfX3U4CXdpOwo+IC0JX191OAlyc3ZkWzVdOwo+IC0JX19sZTY0CXNsYmE7Cj4gLQlf X2xlNjQJY25sYjsKPiAtCV9fbGU2NAl3cDsKPiAtfTsKPiAtCj4gLS8qCj4gLSAqIENoZWNrIHdl IGRpZG4ndCBpbmFkdmVydGVudGx5IGdyb3cgdGhlIGNvbW1hbmQgc3RydWN0Cj4gLSAqLwo+IC1z dGF0aWMgaW5saW5lIHZvaWQgX252bWVfbnZtX2NoZWNrX3NpemUodm9pZCkKPiAtewo+IC0JQlVJ TERfQlVHX09OKHNpemVvZihzdHJ1Y3QgbnZtZV9udm1faWRlbnRpdHkpICE9IDY0KTsKPiAtCUJV SUxEX0JVR19PTihzaXplb2Yoc3RydWN0IG52bWVfbnZtX3BoX3J3KSAhPSA2NCk7Cj4gLQlCVUlM RF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBudm1lX252bV9lcmFzZV9ibGspICE9IDY0KTsKPiAtCUJV SUxEX0JVR19PTihzaXplb2Yoc3RydWN0IG52bWVfbnZtX2dldGJidGJsKSAhPSA2NCk7Cj4gLQlC VUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBudm1lX252bV9zZXRiYnRibCkgIT0gNjQpOwo+IC0J QlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgbnZtZV9udm1faWQxMl9ncnApICE9IDk2MCk7Cj4g LQlCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBudm1lX252bV9pZDEyX2FkZHJmKSAhPSAxNik7 Cj4gLQlCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBudm1lX252bV9pZDEyKSAhPSBOVk1FX0lE RU5USUZZX0RBVEFfU0laRSk7Cj4gLQlCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBudm1lX252 bV9iYl90YmwpICE9IDY0KTsKPiAtCUJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IG52bWVfbnZt X2lkMjBfYWRkcmYpICE9IDgpOwo+IC0JQlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgbnZtZV9u dm1faWQyMCkgIT0gTlZNRV9JREVOVElGWV9EQVRBX1NJWkUpOwo+IC0JQlVJTERfQlVHX09OKHNp emVvZihzdHJ1Y3QgbnZtZV9udm1fY2hrX21ldGEpICE9IDMyKTsKPiAtCUJVSUxEX0JVR19PTihz aXplb2Yoc3RydWN0IG52bWVfbnZtX2Noa19tZXRhKSAhPQo+IC0JCQkJCQlzaXplb2Yoc3RydWN0 IG52bV9jaGtfbWV0YSkpOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBudm1lX252bV9zZXRfYWRk cl8xMihzdHJ1Y3QgbnZtX2FkZHJmXzEyICpkc3QsCj4gLQkJCQkgc3RydWN0IG52bWVfbnZtX2lk MTJfYWRkcmYgKnNyYykKPiAtewo+IC0JZHN0LT5jaF9sZW4gPSBzcmMtPmNoX2xlbjsKPiAtCWRz dC0+bHVuX2xlbiA9IHNyYy0+bHVuX2xlbjsKPiAtCWRzdC0+YmxrX2xlbiA9IHNyYy0+YmxrX2xl bjsKPiAtCWRzdC0+cGdfbGVuID0gc3JjLT5wZ19sZW47Cj4gLQlkc3QtPnBsbl9sZW4gPSBzcmMt PnBsbl9sZW47Cj4gLQlkc3QtPnNlY19sZW4gPSBzcmMtPnNlY19sZW47Cj4gLQo+IC0JZHN0LT5j aF9vZmZzZXQgPSBzcmMtPmNoX29mZnNldDsKPiAtCWRzdC0+bHVuX29mZnNldCA9IHNyYy0+bHVu X29mZnNldDsKPiAtCWRzdC0+YmxrX29mZnNldCA9IHNyYy0+YmxrX29mZnNldDsKPiAtCWRzdC0+ cGdfb2Zmc2V0ID0gc3JjLT5wZ19vZmZzZXQ7Cj4gLQlkc3QtPnBsbl9vZmZzZXQgPSBzcmMtPnBs bl9vZmZzZXQ7Cj4gLQlkc3QtPnNlY19vZmZzZXQgPSBzcmMtPnNlY19vZmZzZXQ7Cj4gLQo+IC0J ZHN0LT5jaF9tYXNrID0gKCgxVUxMIDw8IGRzdC0+Y2hfbGVuKSAtIDEpIDw8IGRzdC0+Y2hfb2Zm c2V0Owo+IC0JZHN0LT5sdW5fbWFzayA9ICgoMVVMTCA8PCBkc3QtPmx1bl9sZW4pIC0gMSkgPDwg ZHN0LT5sdW5fb2Zmc2V0Owo+IC0JZHN0LT5ibGtfbWFzayA9ICgoMVVMTCA8PCBkc3QtPmJsa19s ZW4pIC0gMSkgPDwgZHN0LT5ibGtfb2Zmc2V0Owo+IC0JZHN0LT5wZ19tYXNrID0gKCgxVUxMIDw8 IGRzdC0+cGdfbGVuKSAtIDEpIDw8IGRzdC0+cGdfb2Zmc2V0Owo+IC0JZHN0LT5wbG5fbWFzayA9 ICgoMVVMTCA8PCBkc3QtPnBsbl9sZW4pIC0gMSkgPDwgZHN0LT5wbG5fb2Zmc2V0Owo+IC0JZHN0 LT5zZWNfbWFzayA9ICgoMVVMTCA8PCBkc3QtPnNlY19sZW4pIC0gMSkgPDwgZHN0LT5zZWNfb2Zm c2V0Owo+IC19Cj4gLQo+IC1zdGF0aWMgaW50IG52bWVfbnZtX3NldHVwXzEyKHN0cnVjdCBudm1l X252bV9pZDEyICppZCwKPiAtCQkJICAgICBzdHJ1Y3QgbnZtX2dlbyAqZ2VvKQo+IC17Cj4gLQlz dHJ1Y3QgbnZtZV9udm1faWQxMl9ncnAgKnNyYzsKPiAtCWludCBzZWNfcGVyX3BnLCBzZWNfcGVy X3BsLCBwZ19wZXJfYmxrOwo+IC0KPiAtCWlmIChpZC0+Y2dycHMgIT0gMSkKPiAtCQlyZXR1cm4g LUVJTlZBTDsKPiAtCj4gLQlzcmMgPSAmaWQtPmdycDsKPiAtCj4gLQlpZiAoc3JjLT5tdHlwZSAh PSAwKSB7Cj4gLQkJcHJfZXJyKCJudm06IG1lbW9yeSB0eXBlIG5vdCBzdXBwb3J0ZWRcbiIpOwo+ IC0JCXJldHVybiAtRUlOVkFMOwo+IC0JfQo+IC0KPiAtCS8qIDEuMiBzcGVjLiBvbmx5IHJlcG9y dHMgYSBzaW5nbGUgdmVyc2lvbiBpZCAtIHVuZm9sZCAqLwo+IC0JZ2VvLT5tYWpvcl92ZXJfaWQg PSBpZC0+dmVyX2lkOwo+IC0JZ2VvLT5taW5vcl92ZXJfaWQgPSAyOwo+IC0KPiAtCS8qIFNldCBj b21wYWN0ZWQgdmVyc2lvbiBmb3IgdXBwZXIgbGF5ZXJzICovCj4gLQlnZW8tPnZlcnNpb24gPSBO Vk1fT0NTU0RfU1BFQ18xMjsKPiAtCj4gLQlnZW8tPm51bV9jaCA9IHNyYy0+bnVtX2NoOwo+IC0J Z2VvLT5udW1fbHVuID0gc3JjLT5udW1fbHVuOwo+IC0JZ2VvLT5hbGxfbHVucyA9IGdlby0+bnVt X2NoICogZ2VvLT5udW1fbHVuOwo+IC0KPiAtCWdlby0+bnVtX2NoayA9IGxlMTZfdG9fY3B1KHNy Yy0+bnVtX2Noayk7Cj4gLQo+IC0JZ2VvLT5jc2VjcyA9IGxlMTZfdG9fY3B1KHNyYy0+Y3NlY3Mp Owo+IC0JZ2VvLT5zb3MgPSBsZTE2X3RvX2NwdShzcmMtPnNvcyk7Cj4gLQo+IC0JcGdfcGVyX2Js ayA9IGxlMTZfdG9fY3B1KHNyYy0+bnVtX3BnKTsKPiAtCXNlY19wZXJfcGcgPSBsZTE2X3RvX2Nw dShzcmMtPmZwZ19zeikgLyBnZW8tPmNzZWNzOwo+IC0Jc2VjX3Blcl9wbCA9IHNlY19wZXJfcGcg KiBzcmMtPm51bV9wbG47Cj4gLQlnZW8tPmNsYmEgPSBzZWNfcGVyX3BsICogcGdfcGVyX2JsazsK PiAtCj4gLQlnZW8tPmFsbF9jaHVua3MgPSBnZW8tPmFsbF9sdW5zICogZ2VvLT5udW1fY2hrOwo+ IC0JZ2VvLT50b3RhbF9zZWNzID0gZ2VvLT5jbGJhICogZ2VvLT5hbGxfY2h1bmtzOwo+IC0KPiAt CWdlby0+d3NfbWluID0gc2VjX3Blcl9wZzsKPiAtCWdlby0+d3Nfb3B0ID0gc2VjX3Blcl9wZzsK PiAtCWdlby0+bXdfY3VuaXRzID0gZ2VvLT53c19vcHQgPDwgMzsJLyogZGVmYXVsdCB0byBNTEMg c2FmZSB2YWx1ZXMgKi8KPiAtCj4gLQkvKiBEbyBub3QgaW1wb3NlIHZhbHVlcyBmb3IgbWF4aW11 bSBudW1iZXIgb2Ygb3BlbiBibG9ja3MgYXMgaXQgaXMKPiAtCSAqIHVuc3BlY2lmaWVkIGluIDEu Mi4gVXNlcnMgb2YgMS4yIG11c3QgYmUgYXdhcmUgb2YgdGhpcyBhbmQgZXZlbnR1YWxseQo+IC0J ICogc3BlY2lmeSB0aGVzZSB2YWx1ZXMgdGhyb3VnaCBhIHF1aXJrIGlmIHJlc3RyaWN0aW9ucyBh cHBseS4KPiAtCSAqLwo+IC0JZ2VvLT5tYXhvYyA9IGdlby0+YWxsX2x1bnMgKiBnZW8tPm51bV9j aGs7Cj4gLQlnZW8tPm1heG9jcHUgPSBnZW8tPm51bV9jaGs7Cj4gLQo+IC0JZ2VvLT5tY2NhcCA9 IGxlMzJfdG9fY3B1KHNyYy0+bWNjYXApOwo+IC0KPiAtCWdlby0+dHJkdCA9IGxlMzJfdG9fY3B1 KHNyYy0+dHJkdCk7Cj4gLQlnZW8tPnRyZG0gPSBsZTMyX3RvX2NwdShzcmMtPnRyZG0pOwo+IC0J Z2VvLT50cHJ0ID0gbGUzMl90b19jcHUoc3JjLT50cHJ0KTsKPiAtCWdlby0+dHBybSA9IGxlMzJf dG9fY3B1KHNyYy0+dHBybSk7Cj4gLQlnZW8tPnRiZXQgPSBsZTMyX3RvX2NwdShzcmMtPnRiZXQp Owo+IC0JZ2VvLT50YmVtID0gbGUzMl90b19jcHUoc3JjLT50YmVtKTsKPiAtCj4gLQkvKiAxLjIg Y29tcGF0aWJpbGl0eSAqLwo+IC0JZ2VvLT52bW50ID0gaWQtPnZtbnQ7Cj4gLQlnZW8tPmNhcCA9 IGxlMzJfdG9fY3B1KGlkLT5jYXApOwo+IC0JZ2VvLT5kb20gPSBsZTMyX3RvX2NwdShpZC0+ZG9t KTsKPiAtCj4gLQlnZW8tPm10eXBlID0gc3JjLT5tdHlwZTsKPiAtCWdlby0+Zm10eXBlID0gc3Jj LT5mbXR5cGU7Cj4gLQo+IC0JZ2VvLT5jcGFyID0gbGUxNl90b19jcHUoc3JjLT5jcGFyKTsKPiAt CWdlby0+bXBvcyA9IGxlMzJfdG9fY3B1KHNyYy0+bXBvcyk7Cj4gLQo+IC0JZ2VvLT5wbG5fbW9k ZSA9IE5WTV9QTEFORV9TSU5HTEU7Cj4gLQo+IC0JaWYgKGdlby0+bXBvcyAmIDB4MDIwMjAyKSB7 Cj4gLQkJZ2VvLT5wbG5fbW9kZSA9IE5WTV9QTEFORV9ET1VCTEU7Cj4gLQkJZ2VvLT53c19vcHQg PDw9IDE7Cj4gLQl9IGVsc2UgaWYgKGdlby0+bXBvcyAmIDB4MDQwNDA0KSB7Cj4gLQkJZ2VvLT5w bG5fbW9kZSA9IE5WTV9QTEFORV9RVUFEOwo+IC0JCWdlby0+d3Nfb3B0IDw8PSAyOwo+IC0JfQo+ IC0KPiAtCWdlby0+bnVtX3BsbiA9IHNyYy0+bnVtX3BsbjsKPiAtCWdlby0+bnVtX3BnID0gbGUx Nl90b19jcHUoc3JjLT5udW1fcGcpOwo+IC0JZ2VvLT5mcGdfc3ogPSBsZTE2X3RvX2NwdShzcmMt PmZwZ19zeik7Cj4gLQo+IC0JbnZtZV9udm1fc2V0X2FkZHJfMTIoKHN0cnVjdCBudm1fYWRkcmZf MTIgKikmZ2VvLT5hZGRyZiwgJmlkLT5wcGFmKTsKPiAtCj4gLQlyZXR1cm4gMDsKPiAtfQo+IC0K PiAtc3RhdGljIHZvaWQgbnZtZV9udm1fc2V0X2FkZHJfMjAoc3RydWN0IG52bV9hZGRyZiAqZHN0 LAo+IC0JCQkJIHN0cnVjdCBudm1lX252bV9pZDIwX2FkZHJmICpzcmMpCj4gLXsKPiAtCWRzdC0+ Y2hfbGVuID0gc3JjLT5ncnBfbGVuOwo+IC0JZHN0LT5sdW5fbGVuID0gc3JjLT5wdV9sZW47Cj4g LQlkc3QtPmNoa19sZW4gPSBzcmMtPmNoa19sZW47Cj4gLQlkc3QtPnNlY19sZW4gPSBzcmMtPmxi YV9sZW47Cj4gLQo+IC0JZHN0LT5zZWNfb2Zmc2V0ID0gMDsKPiAtCWRzdC0+Y2hrX29mZnNldCA9 IGRzdC0+c2VjX2xlbjsKPiAtCWRzdC0+bHVuX29mZnNldCA9IGRzdC0+Y2hrX29mZnNldCArIGRz dC0+Y2hrX2xlbjsKPiAtCWRzdC0+Y2hfb2Zmc2V0ID0gZHN0LT5sdW5fb2Zmc2V0ICsgZHN0LT5s dW5fbGVuOwo+IC0KPiAtCWRzdC0+Y2hfbWFzayA9ICgoMVVMTCA8PCBkc3QtPmNoX2xlbikgLSAx KSA8PCBkc3QtPmNoX29mZnNldDsKPiAtCWRzdC0+bHVuX21hc2sgPSAoKDFVTEwgPDwgZHN0LT5s dW5fbGVuKSAtIDEpIDw8IGRzdC0+bHVuX29mZnNldDsKPiAtCWRzdC0+Y2hrX21hc2sgPSAoKDFV TEwgPDwgZHN0LT5jaGtfbGVuKSAtIDEpIDw8IGRzdC0+Y2hrX29mZnNldDsKPiAtCWRzdC0+c2Vj X21hc2sgPSAoKDFVTEwgPDwgZHN0LT5zZWNfbGVuKSAtIDEpIDw8IGRzdC0+c2VjX29mZnNldDsK PiAtfQo+IC0KPiAtc3RhdGljIGludCBudm1lX252bV9zZXR1cF8yMChzdHJ1Y3QgbnZtZV9udm1f aWQyMCAqaWQsCj4gLQkJCSAgICAgc3RydWN0IG52bV9nZW8gKmdlbykKPiAtewo+IC0JZ2VvLT5t YWpvcl92ZXJfaWQgPSBpZC0+bWpyOwo+IC0JZ2VvLT5taW5vcl92ZXJfaWQgPSBpZC0+bW5yOwo+ IC0KPiAtCS8qIFNldCBjb21wYWN0ZWQgdmVyc2lvbiBmb3IgdXBwZXIgbGF5ZXJzICovCj4gLQln ZW8tPnZlcnNpb24gPSBOVk1fT0NTU0RfU1BFQ18yMDsKPiAtCj4gLQlnZW8tPm51bV9jaCA9IGxl MTZfdG9fY3B1KGlkLT5udW1fZ3JwKTsKPiAtCWdlby0+bnVtX2x1biA9IGxlMTZfdG9fY3B1KGlk LT5udW1fcHUpOwo+IC0JZ2VvLT5hbGxfbHVucyA9IGdlby0+bnVtX2NoICogZ2VvLT5udW1fbHVu Owo+IC0KPiAtCWdlby0+bnVtX2NoayA9IGxlMzJfdG9fY3B1KGlkLT5udW1fY2hrKTsKPiAtCWdl by0+Y2xiYSA9IGxlMzJfdG9fY3B1KGlkLT5jbGJhKTsKPiAtCj4gLQlnZW8tPmFsbF9jaHVua3Mg PSBnZW8tPmFsbF9sdW5zICogZ2VvLT5udW1fY2hrOwo+IC0JZ2VvLT50b3RhbF9zZWNzID0gZ2Vv LT5jbGJhICogZ2VvLT5hbGxfY2h1bmtzOwo+IC0KPiAtCWdlby0+d3NfbWluID0gbGUzMl90b19j cHUoaWQtPndzX21pbik7Cj4gLQlnZW8tPndzX29wdCA9IGxlMzJfdG9fY3B1KGlkLT53c19vcHQp Owo+IC0JZ2VvLT5td19jdW5pdHMgPSBsZTMyX3RvX2NwdShpZC0+bXdfY3VuaXRzKTsKPiAtCWdl by0+bWF4b2MgPSBsZTMyX3RvX2NwdShpZC0+bWF4b2MpOwo+IC0JZ2VvLT5tYXhvY3B1ID0gbGUz Ml90b19jcHUoaWQtPm1heG9jcHUpOwo+IC0KPiAtCWdlby0+dHJkdCA9IGxlMzJfdG9fY3B1KGlk LT50cmR0KTsKPiAtCWdlby0+dHJkbSA9IGxlMzJfdG9fY3B1KGlkLT50cmRtKTsKPiAtCWdlby0+ dHBydCA9IGxlMzJfdG9fY3B1KGlkLT50d3J0KTsKPiAtCWdlby0+dHBybSA9IGxlMzJfdG9fY3B1 KGlkLT50d3JtKTsKPiAtCWdlby0+dGJldCA9IGxlMzJfdG9fY3B1KGlkLT50Y3JzdCk7Cj4gLQln ZW8tPnRiZW0gPSBsZTMyX3RvX2NwdShpZC0+dGNyc20pOwo+IC0KPiAtCW52bWVfbnZtX3NldF9h ZGRyXzIwKCZnZW8tPmFkZHJmLCAmaWQtPmxiYWYpOwo+IC0KPiAtCXJldHVybiAwOwo+IC19Cj4g LQo+IC1zdGF0aWMgaW50IG52bWVfbnZtX2lkZW50aXR5KHN0cnVjdCBudm1fZGV2ICpudm1kZXYp Cj4gLXsKPiAtCXN0cnVjdCBudm1lX25zICpucyA9IG52bWRldi0+cS0+cXVldWVkYXRhOwo+IC0J c3RydWN0IG52bWVfbnZtX2lkMTIgKmlkOwo+IC0Jc3RydWN0IG52bWVfbnZtX2NvbW1hbmQgYyA9 IHt9Owo+IC0JaW50IHJldDsKPiAtCj4gLQljLmlkZW50aXR5Lm9wY29kZSA9IG52bWVfbnZtX2Fk bWluX2lkZW50aXR5Owo+IC0JYy5pZGVudGl0eS5uc2lkID0gY3B1X3RvX2xlMzIobnMtPmhlYWQt Pm5zX2lkKTsKPiAtCj4gLQlpZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBudm1lX252bV9pZDEy KSwgR0ZQX0tFUk5FTCk7Cj4gLQlpZiAoIWlkKQo+IC0JCXJldHVybiAtRU5PTUVNOwo+IC0KPiAt CXJldCA9IG52bWVfc3VibWl0X3N5bmNfY21kKG5zLT5jdHJsLT5hZG1pbl9xLCAoc3RydWN0IG52 bWVfY29tbWFuZCAqKSZjLAo+IC0JCQkJaWQsIHNpemVvZihzdHJ1Y3QgbnZtZV9udm1faWQxMikp Owo+IC0JaWYgKHJldCkgewo+IC0JCXJldCA9IC1FSU87Cj4gLQkJZ290byBvdXQ7Cj4gLQl9Cj4g LQo+IC0JLyoKPiAtCSAqIFRoZSAxLjIgYW5kIDIuMCBzcGVjaWZpY2F0aW9ucyBzaGFyZSB0aGUg Zmlyc3QgYnl0ZSBpbiB0aGVpciBnZW9tZXRyeQo+IC0JICogY29tbWFuZCB0byBtYWtlIGl0IHBv c3NpYmxlIHRvIGtub3cgd2hhdCB2ZXJzaW9uIGEgZGV2aWNlIGltcGxlbWVudHMuCj4gLQkgKi8K PiAtCXN3aXRjaCAoaWQtPnZlcl9pZCkgewo+IC0JY2FzZSAxOgo+IC0JCXJldCA9IG52bWVfbnZt X3NldHVwXzEyKGlkLCAmbnZtZGV2LT5nZW8pOwo+IC0JCWJyZWFrOwo+IC0JY2FzZSAyOgo+IC0J CXJldCA9IG52bWVfbnZtX3NldHVwXzIwKChzdHJ1Y3QgbnZtZV9udm1faWQyMCAqKWlkLAo+IC0J CQkJCQkJJm52bWRldi0+Z2VvKTsKPiAtCQlicmVhazsKPiAtCWRlZmF1bHQ6Cj4gLQkJZGV2X2Vy cihucy0+Y3RybC0+ZGV2aWNlLCAiT0NTU0QgcmV2aXNpb24gbm90IHN1cHBvcnRlZCAoJWQpXG4i LAo+IC0JCQkJCQkJaWQtPnZlcl9pZCk7Cj4gLQkJcmV0ID0gLUVJTlZBTDsKPiAtCX0KPiAtCj4g LW91dDoKPiAtCWtmcmVlKGlkKTsKPiAtCXJldHVybiByZXQ7Cj4gLX0KPiAtCj4gLXN0YXRpYyBp bnQgbnZtZV9udm1fZ2V0X2JiX3RibChzdHJ1Y3QgbnZtX2RldiAqbnZtZGV2LCBzdHJ1Y3QgcHBh X2FkZHIgcHBhLAo+IC0JCQkJCQkJCXU4ICpibGtzKQo+IC17Cj4gLQlzdHJ1Y3QgcmVxdWVzdF9x dWV1ZSAqcSA9IG52bWRldi0+cTsKPiAtCXN0cnVjdCBudm1fZ2VvICpnZW8gPSAmbnZtZGV2LT5n ZW87Cj4gLQlzdHJ1Y3QgbnZtZV9ucyAqbnMgPSBxLT5xdWV1ZWRhdGE7Cj4gLQlzdHJ1Y3QgbnZt ZV9jdHJsICpjdHJsID0gbnMtPmN0cmw7Cj4gLQlzdHJ1Y3QgbnZtZV9udm1fY29tbWFuZCBjID0g e307Cj4gLQlzdHJ1Y3QgbnZtZV9udm1fYmJfdGJsICpiYl90Ymw7Cj4gLQlpbnQgbnJfYmxrcyA9 IGdlby0+bnVtX2NoayAqIGdlby0+bnVtX3BsbjsKPiAtCWludCB0YmxzeiA9IHNpemVvZihzdHJ1 Y3QgbnZtZV9udm1fYmJfdGJsKSArIG5yX2Jsa3M7Cj4gLQlpbnQgcmV0ID0gMDsKPiAtCj4gLQlj LmdldF9iYi5vcGNvZGUgPSBudm1lX252bV9hZG1pbl9nZXRfYmJfdGJsOwo+IC0JYy5nZXRfYmIu bnNpZCA9IGNwdV90b19sZTMyKG5zLT5oZWFkLT5uc19pZCk7Cj4gLQljLmdldF9iYi5zcGJhID0g Y3B1X3RvX2xlNjQocHBhLnBwYSk7Cj4gLQo+IC0JYmJfdGJsID0ga3phbGxvYyh0YmxzeiwgR0ZQ X0tFUk5FTCk7Cj4gLQlpZiAoIWJiX3RibCkKPiAtCQlyZXR1cm4gLUVOT01FTTsKPiAtCj4gLQly ZXQgPSBudm1lX3N1Ym1pdF9zeW5jX2NtZChjdHJsLT5hZG1pbl9xLCAoc3RydWN0IG52bWVfY29t bWFuZCAqKSZjLAo+IC0JCQkJCQkJCWJiX3RibCwgdGJsc3opOwo+IC0JaWYgKHJldCkgewo+IC0J CWRldl9lcnIoY3RybC0+ZGV2aWNlLCAiZ2V0IGJhZCBibG9jayB0YWJsZSBmYWlsZWQgKCVkKVxu IiwgcmV0KTsKPiAtCQlyZXQgPSAtRUlPOwo+IC0JCWdvdG8gb3V0Owo+IC0JfQo+IC0KPiAtCWlm IChiYl90YmwtPnRibGlkWzBdICE9ICdCJyB8fCBiYl90YmwtPnRibGlkWzFdICE9ICdCJyB8fAo+ IC0JCWJiX3RibC0+dGJsaWRbMl0gIT0gJ0wnIHx8IGJiX3RibC0+dGJsaWRbM10gIT0gJ1QnKSB7 Cj4gLQkJZGV2X2VycihjdHJsLT5kZXZpY2UsICJiYnQgZm9ybWF0IG1pc21hdGNoXG4iKTsKPiAt CQlyZXQgPSAtRUlOVkFMOwo+IC0JCWdvdG8gb3V0Owo+IC0JfQo+IC0KPiAtCWlmIChsZTE2X3Rv X2NwdShiYl90YmwtPnZlcmlkKSAhPSAxKSB7Cj4gLQkJcmV0ID0gLUVJTlZBTDsKPiAtCQlkZXZf ZXJyKGN0cmwtPmRldmljZSwgImJidCB2ZXJzaW9uIG5vdCBzdXBwb3J0ZWRcbiIpOwo+IC0JCWdv dG8gb3V0Owo+IC0JfQo+IC0KPiAtCWlmIChsZTMyX3RvX2NwdShiYl90YmwtPnRibGtzKSAhPSBu cl9ibGtzKSB7Cj4gLQkJcmV0ID0gLUVJTlZBTDsKPiAtCQlkZXZfZXJyKGN0cmwtPmRldmljZSwK PiAtCQkJCSJiYnQgdW5zdXNwZWN0ZWQgYmxvY2tzIHJldHVybmVkICgldSE9JXUpIiwKPiAtCQkJ CWxlMzJfdG9fY3B1KGJiX3RibC0+dGJsa3MpLCBucl9ibGtzKTsKPiAtCQlnb3RvIG91dDsKPiAt CX0KPiAtCj4gLQltZW1jcHkoYmxrcywgYmJfdGJsLT5ibGssIGdlby0+bnVtX2NoayAqIGdlby0+ bnVtX3Bsbik7Cj4gLW91dDoKPiAtCWtmcmVlKGJiX3RibCk7Cj4gLQlyZXR1cm4gcmV0Owo+IC19 Cj4gLQo+IC1zdGF0aWMgaW50IG52bWVfbnZtX3NldF9iYl90Ymwoc3RydWN0IG52bV9kZXYgKm52 bWRldiwgc3RydWN0IHBwYV9hZGRyICpwcGFzLAo+IC0JCQkJCQkJaW50IG5yX3BwYXMsIGludCB0 eXBlKQo+IC17Cj4gLQlzdHJ1Y3QgbnZtZV9ucyAqbnMgPSBudm1kZXYtPnEtPnF1ZXVlZGF0YTsK PiAtCXN0cnVjdCBudm1lX252bV9jb21tYW5kIGMgPSB7fTsKPiAtCWludCByZXQgPSAwOwo+IC0K PiAtCWMuc2V0X2JiLm9wY29kZSA9IG52bWVfbnZtX2FkbWluX3NldF9iYl90Ymw7Cj4gLQljLnNl dF9iYi5uc2lkID0gY3B1X3RvX2xlMzIobnMtPmhlYWQtPm5zX2lkKTsKPiAtCWMuc2V0X2JiLnNw YmEgPSBjcHVfdG9fbGU2NChwcGFzLT5wcGEpOwo+IC0JYy5zZXRfYmIubmxiID0gY3B1X3RvX2xl MTYobnJfcHBhcyAtIDEpOwo+IC0JYy5zZXRfYmIudmFsdWUgPSB0eXBlOwo+IC0KPiAtCXJldCA9 IG52bWVfc3VibWl0X3N5bmNfY21kKG5zLT5jdHJsLT5hZG1pbl9xLCAoc3RydWN0IG52bWVfY29t bWFuZCAqKSZjLAo+IC0JCQkJCQkJCU5VTEwsIDApOwo+IC0JaWYgKHJldCkKPiAtCQlkZXZfZXJy KG5zLT5jdHJsLT5kZXZpY2UsICJzZXQgYmFkIGJsb2NrIHRhYmxlIGZhaWxlZCAoJWQpXG4iLAo+ IC0JCQkJCQkJCQlyZXQpOwo+IC0JcmV0dXJuIHJldDsKPiAtfQo+IC0KPiAtLyoKPiAtICogRXhw ZWN0IHRoZSBsYmEgaW4gZGV2aWNlIGZvcm1hdAo+IC0gKi8KPiAtc3RhdGljIGludCBudm1lX252 bV9nZXRfY2hrX21ldGEoc3RydWN0IG52bV9kZXYgKm5kZXYsCj4gLQkJCQkgc2VjdG9yX3Qgc2xi YSwgaW50IG5jaGtzLAo+IC0JCQkJIHN0cnVjdCBudm1fY2hrX21ldGEgKm1ldGEpCj4gLXsKPiAt CXN0cnVjdCBudm1fZ2VvICpnZW8gPSAmbmRldi0+Z2VvOwo+IC0Jc3RydWN0IG52bWVfbnMgKm5z ID0gbmRldi0+cS0+cXVldWVkYXRhOwo+IC0Jc3RydWN0IG52bWVfY3RybCAqY3RybCA9IG5zLT5j dHJsOwo+IC0Jc3RydWN0IG52bWVfbnZtX2Noa19tZXRhICpkZXZfbWV0YSwgKmRldl9tZXRhX29m ZjsKPiAtCXN0cnVjdCBwcGFfYWRkciBwcGE7Cj4gLQlzaXplX3QgbGVmdCA9IG5jaGtzICogc2l6 ZW9mKHN0cnVjdCBudm1lX252bV9jaGtfbWV0YSk7Cj4gLQlzaXplX3QgbG9nX3Bvcywgb2Zmc2V0 LCBsZW47Cj4gLQlpbnQgaSwgbWF4X2xlbjsKPiAtCWludCByZXQgPSAwOwo+IC0KPiAtCS8qCj4g LQkgKiBsaW1pdCByZXF1ZXN0cyB0byBtYXhpbXVtIDI1NksgdG8gYXZvaWQgaXNzdWluZyBhcmJp dHJhcnkgbGFyZ2UKPiAtCSAqIHJlcXVlc3RzIHdoZW4gdGhlIGRldmljZSBkb2VzIG5vdCBzcGVj aWZpYyBhIG1heGltdW0gdHJhbnNmZXIgc2l6ZS4KPiAtCSAqLwo+IC0JbWF4X2xlbiA9IG1pbl90 KHVuc2lnbmVkIGludCwgY3RybC0+bWF4X2h3X3NlY3RvcnMgPDwgOSwgMjU2ICogMTAyNCk7Cj4g LQo+IC0JZGV2X21ldGEgPSBrbWFsbG9jKG1heF9sZW4sIEdGUF9LRVJORUwpOwo+IC0JaWYgKCFk ZXZfbWV0YSkKPiAtCQlyZXR1cm4gLUVOT01FTTsKPiAtCj4gLQkvKiBOb3JtYWxpemUgbGJhIGFk ZHJlc3Mgc3BhY2UgdG8gb2J0YWluIGxvZyBvZmZzZXQgKi8KPiAtCXBwYS5wcGEgPSBzbGJhOwo+ IC0JcHBhID0gZGV2X3RvX2dlbmVyaWNfYWRkcihuZGV2LCBwcGEpOwo+IC0KPiAtCWxvZ19wb3Mg PSBwcGEubS5jaGs7Cj4gLQlsb2dfcG9zICs9IHBwYS5tLnB1ICogZ2VvLT5udW1fY2hrOwo+IC0J bG9nX3BvcyArPSBwcGEubS5ncnAgKiBnZW8tPm51bV9sdW4gKiBnZW8tPm51bV9jaGs7Cj4gLQo+ IC0Jb2Zmc2V0ID0gbG9nX3BvcyAqIHNpemVvZihzdHJ1Y3QgbnZtZV9udm1fY2hrX21ldGEpOwo+ IC0KPiAtCXdoaWxlIChsZWZ0KSB7Cj4gLQkJbGVuID0gbWluX3QodW5zaWduZWQgaW50LCBsZWZ0 LCBtYXhfbGVuKTsKPiAtCj4gLQkJbWVtc2V0KGRldl9tZXRhLCAwLCBtYXhfbGVuKTsKPiAtCQlk ZXZfbWV0YV9vZmYgPSBkZXZfbWV0YTsKPiAtCj4gLQkJcmV0ID0gbnZtZV9nZXRfbG9nKGN0cmws IG5zLT5oZWFkLT5uc19pZCwKPiAtCQkJCU5WTUVfTlZNX0xPR19SRVBPUlRfQ0hVTkssIDAsIE5W TUVfQ1NJX05WTSwKPiAtCQkJCWRldl9tZXRhLCBsZW4sIG9mZnNldCk7Cj4gLQkJaWYgKHJldCkg ewo+IC0JCQlkZXZfZXJyKGN0cmwtPmRldmljZSwgIkdldCBSRVBPUlQgQ0hVTksgbG9nIGVycm9y XG4iKTsKPiAtCQkJYnJlYWs7Cj4gLQkJfQo+IC0KPiAtCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBp ICs9IHNpemVvZihzdHJ1Y3QgbnZtZV9udm1fY2hrX21ldGEpKSB7Cj4gLQkJCW1ldGEtPnN0YXRl ID0gZGV2X21ldGFfb2ZmLT5zdGF0ZTsKPiAtCQkJbWV0YS0+dHlwZSA9IGRldl9tZXRhX29mZi0+ dHlwZTsKPiAtCQkJbWV0YS0+d2kgPSBkZXZfbWV0YV9vZmYtPndpOwo+IC0JCQltZXRhLT5zbGJh ID0gbGU2NF90b19jcHUoZGV2X21ldGFfb2ZmLT5zbGJhKTsKPiAtCQkJbWV0YS0+Y25sYiA9IGxl NjRfdG9fY3B1KGRldl9tZXRhX29mZi0+Y25sYik7Cj4gLQkJCW1ldGEtPndwID0gbGU2NF90b19j cHUoZGV2X21ldGFfb2ZmLT53cCk7Cj4gLQo+IC0JCQltZXRhKys7Cj4gLQkJCWRldl9tZXRhX29m ZisrOwo+IC0JCX0KPiAtCj4gLQkJb2Zmc2V0ICs9IGxlbjsKPiAtCQlsZWZ0IC09IGxlbjsKPiAt CX0KPiAtCj4gLQlrZnJlZShkZXZfbWV0YSk7Cj4gLQo+IC0JcmV0dXJuIHJldDsKPiAtfQo+IC0K PiAtc3RhdGljIGlubGluZSB2b2lkIG52bWVfbnZtX3JxdG9jbWQoc3RydWN0IG52bV9ycSAqcnFk LCBzdHJ1Y3QgbnZtZV9ucyAqbnMsCj4gLQkJCQkgICAgc3RydWN0IG52bWVfbnZtX2NvbW1hbmQg KmMpCj4gLXsKPiAtCWMtPnBoX3J3Lm9wY29kZSA9IHJxZC0+b3Bjb2RlOwo+IC0JYy0+cGhfcncu bnNpZCA9IGNwdV90b19sZTMyKG5zLT5oZWFkLT5uc19pZCk7Cj4gLQljLT5waF9ydy5zcGJhID0g Y3B1X3RvX2xlNjQocnFkLT5wcGFfYWRkci5wcGEpOwo+IC0JYy0+cGhfcncubWV0YWRhdGEgPSBj cHVfdG9fbGU2NChycWQtPmRtYV9tZXRhX2xpc3QpOwo+IC0JYy0+cGhfcncuY29udHJvbCA9IGNw dV90b19sZTE2KHJxZC0+ZmxhZ3MpOwo+IC0JYy0+cGhfcncubGVuZ3RoID0gY3B1X3RvX2xlMTYo cnFkLT5ucl9wcGFzIC0gMSk7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIG52bWVfbnZtX2VuZF9p byhzdHJ1Y3QgcmVxdWVzdCAqcnEsIGJsa19zdGF0dXNfdCBzdGF0dXMpCj4gLXsKPiAtCXN0cnVj dCBudm1fcnEgKnJxZCA9IHJxLT5lbmRfaW9fZGF0YTsKPiAtCj4gLQlycWQtPnBwYV9zdGF0dXMg PSBsZTY0X3RvX2NwdShudm1lX3JlcShycSktPnJlc3VsdC51NjQpOwo+IC0JcnFkLT5lcnJvciA9 IG52bWVfcmVxKHJxKS0+c3RhdHVzOwo+IC0JbnZtX2VuZF9pbyhycWQpOwo+IC0KPiAtCWtmcmVl KG52bWVfcmVxKHJxKS0+Y21kKTsKPiAtCWJsa19tcV9mcmVlX3JlcXVlc3QocnEpOwo+IC19Cj4g LQo+IC1zdGF0aWMgc3RydWN0IHJlcXVlc3QgKm52bWVfbnZtX2FsbG9jX3JlcXVlc3Qoc3RydWN0 IHJlcXVlc3RfcXVldWUgKnEsCj4gLQkJCQkJICAgICAgc3RydWN0IG52bV9ycSAqcnFkLAo+IC0J CQkJCSAgICAgIHN0cnVjdCBudm1lX252bV9jb21tYW5kICpjbWQpCj4gLXsKPiAtCXN0cnVjdCBu dm1lX25zICpucyA9IHEtPnF1ZXVlZGF0YTsKPiAtCXN0cnVjdCByZXF1ZXN0ICpycTsKPiAtCj4g LQludm1lX252bV9ycXRvY21kKHJxZCwgbnMsIGNtZCk7Cj4gLQo+IC0JcnEgPSBudm1lX2FsbG9j X3JlcXVlc3QocSwgKHN0cnVjdCBudm1lX2NvbW1hbmQgKiljbWQsIDApOwo+IC0JaWYgKElTX0VS UihycSkpCj4gLQkJcmV0dXJuIHJxOwo+IC0KPiAtCXJxLT5jbWRfZmxhZ3MgJj0gflJFUV9GQUlM RkFTVF9EUklWRVI7Cj4gLQo+IC0JaWYgKHJxZC0+YmlvKQo+IC0JCWJsa19ycV9hcHBlbmRfYmlv KHJxLCBycWQtPmJpbyk7Cj4gLQllbHNlCj4gLQkJcnEtPmlvcHJpbyA9IElPUFJJT19QUklPX1ZB TFVFKElPUFJJT19DTEFTU19CRSwgSU9QUklPX05PUk0pOwo+IC0KPiAtCXJldHVybiBycTsKPiAt fQo+IC0KPiAtc3RhdGljIGludCBudm1lX252bV9zdWJtaXRfaW8oc3RydWN0IG52bV9kZXYgKmRl diwgc3RydWN0IG52bV9ycSAqcnFkLAo+IC0JCQkgICAgICB2b2lkICpidWYpCj4gLXsKPiAtCXN0 cnVjdCBudm1fZ2VvICpnZW8gPSAmZGV2LT5nZW87Cj4gLQlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAq cSA9IGRldi0+cTsKPiAtCXN0cnVjdCBudm1lX252bV9jb21tYW5kICpjbWQ7Cj4gLQlzdHJ1Y3Qg cmVxdWVzdCAqcnE7Cj4gLQlpbnQgcmV0Owo+IC0KPiAtCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKHN0 cnVjdCBudm1lX252bV9jb21tYW5kKSwgR0ZQX0tFUk5FTCk7Cj4gLQlpZiAoIWNtZCkKPiAtCQly ZXR1cm4gLUVOT01FTTsKPiAtCj4gLQlycSA9IG52bWVfbnZtX2FsbG9jX3JlcXVlc3QocSwgcnFk LCBjbWQpOwo+IC0JaWYgKElTX0VSUihycSkpIHsKPiAtCQlyZXQgPSBQVFJfRVJSKHJxKTsKPiAt CQlnb3RvIGVycl9mcmVlX2NtZDsKPiAtCX0KPiAtCj4gLQlpZiAoYnVmKSB7Cj4gLQkJcmV0ID0g YmxrX3JxX21hcF9rZXJuKHEsIHJxLCBidWYsIGdlby0+Y3NlY3MgKiBycWQtPm5yX3BwYXMsCj4g LQkJCQlHRlBfS0VSTkVMKTsKPiAtCQlpZiAocmV0KQo+IC0JCQlnb3RvIGVycl9mcmVlX2NtZDsK PiAtCX0KPiAtCj4gLQlycS0+ZW5kX2lvX2RhdGEgPSBycWQ7Cj4gLQo+IC0JYmxrX2V4ZWN1dGVf cnFfbm93YWl0KE5VTEwsIHJxLCAwLCBudm1lX252bV9lbmRfaW8pOwo+IC0KPiAtCXJldHVybiAw Owo+IC0KPiAtZXJyX2ZyZWVfY21kOgo+IC0Ja2ZyZWUoY21kKTsKPiAtCXJldHVybiByZXQ7Cj4g LX0KPiAtCj4gLXN0YXRpYyB2b2lkICpudm1lX252bV9jcmVhdGVfZG1hX3Bvb2woc3RydWN0IG52 bV9kZXYgKm52bWRldiwgY2hhciAqbmFtZSwKPiAtCQkJCQlpbnQgc2l6ZSkKPiAtewo+IC0Jc3Ry dWN0IG52bWVfbnMgKm5zID0gbnZtZGV2LT5xLT5xdWV1ZWRhdGE7Cj4gLQo+IC0JcmV0dXJuIGRt YV9wb29sX2NyZWF0ZShuYW1lLCBucy0+Y3RybC0+ZGV2LCBzaXplLCBQQUdFX1NJWkUsIDApOwo+ IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBudm1lX252bV9kZXN0cm95X2RtYV9wb29sKHZvaWQgKnBv b2wpCj4gLXsKPiAtCXN0cnVjdCBkbWFfcG9vbCAqZG1hX3Bvb2wgPSBwb29sOwo+IC0KPiAtCWRt YV9wb29sX2Rlc3Ryb3koZG1hX3Bvb2wpOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCAqbnZtZV9u dm1fZGV2X2RtYV9hbGxvYyhzdHJ1Y3QgbnZtX2RldiAqZGV2LCB2b2lkICpwb29sLAo+IC0JCQkJ ICAgIGdmcF90IG1lbV9mbGFncywgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZXIpCj4gLXsKPiAtCXJl dHVybiBkbWFfcG9vbF9hbGxvYyhwb29sLCBtZW1fZmxhZ3MsIGRtYV9oYW5kbGVyKTsKPiAtfQo+ IC0KPiAtc3RhdGljIHZvaWQgbnZtZV9udm1fZGV2X2RtYV9mcmVlKHZvaWQgKnBvb2wsIHZvaWQg KmFkZHIsCj4gLQkJCQkJCQlkbWFfYWRkcl90IGRtYV9oYW5kbGVyKQo+IC17Cj4gLQlkbWFfcG9v bF9mcmVlKHBvb2wsIGFkZHIsIGRtYV9oYW5kbGVyKTsKPiAtfQo+IC0KPiAtc3RhdGljIHN0cnVj dCBudm1fZGV2X29wcyBudm1lX252bV9kZXZfb3BzID0gewo+IC0JLmlkZW50aXR5CQk9IG52bWVf bnZtX2lkZW50aXR5LAo+IC0KPiAtCS5nZXRfYmJfdGJsCQk9IG52bWVfbnZtX2dldF9iYl90Ymws Cj4gLQkuc2V0X2JiX3RibAkJPSBudm1lX252bV9zZXRfYmJfdGJsLAo+IC0KPiAtCS5nZXRfY2hr X21ldGEJCT0gbnZtZV9udm1fZ2V0X2Noa19tZXRhLAo+IC0KPiAtCS5zdWJtaXRfaW8JCT0gbnZt ZV9udm1fc3VibWl0X2lvLAo+IC0KPiAtCS5jcmVhdGVfZG1hX3Bvb2wJPSBudm1lX252bV9jcmVh dGVfZG1hX3Bvb2wsCj4gLQkuZGVzdHJveV9kbWFfcG9vbAk9IG52bWVfbnZtX2Rlc3Ryb3lfZG1h X3Bvb2wsCj4gLQkuZGV2X2RtYV9hbGxvYwkJPSBudm1lX252bV9kZXZfZG1hX2FsbG9jLAo+IC0J LmRldl9kbWFfZnJlZQkJPSBudm1lX252bV9kZXZfZG1hX2ZyZWUsCj4gLX07Cj4gLQo+IC1zdGF0 aWMgaW50IG52bWVfbnZtX3N1Ym1pdF91c2VyX2NtZChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwK PiAtCQkJCXN0cnVjdCBudm1lX25zICpucywKPiAtCQkJCXN0cnVjdCBudm1lX252bV9jb21tYW5k ICp2Y21kLAo+IC0JCQkJdm9pZCBfX3VzZXIgKnVidWYsIHVuc2lnbmVkIGludCBidWZmbGVuLAo+ IC0JCQkJdm9pZCBfX3VzZXIgKm1ldGFfYnVmLCB1bnNpZ25lZCBpbnQgbWV0YV9sZW4sCj4gLQkJ CQl2b2lkIF9fdXNlciAqcHBhX2J1ZiwgdW5zaWduZWQgaW50IHBwYV9sZW4sCj4gLQkJCQl1MzIg KnJlc3VsdCwgdTY0ICpzdGF0dXMsIHVuc2lnbmVkIGludCB0aW1lb3V0KQo+IC17Cj4gLQlib29s IHdyaXRlID0gbnZtZV9pc193cml0ZSgoc3RydWN0IG52bWVfY29tbWFuZCAqKXZjbWQpOwo+IC0J c3RydWN0IG52bV9kZXYgKmRldiA9IG5zLT5uZGV2Owo+IC0Jc3RydWN0IHJlcXVlc3QgKnJxOwo+ IC0Jc3RydWN0IGJpbyAqYmlvID0gTlVMTDsKPiAtCV9fbGU2NCAqcHBhX2xpc3QgPSBOVUxMOwo+ IC0JZG1hX2FkZHJfdCBwcGFfZG1hOwo+IC0JX19sZTY0ICptZXRhZGF0YSA9IE5VTEw7Cj4gLQlk bWFfYWRkcl90IG1ldGFkYXRhX2RtYTsKPiAtCURFQ0xBUkVfQ09NUExFVElPTl9PTlNUQUNLKHdh aXQpOwo+IC0JaW50IHJldCA9IDA7Cj4gLQo+IC0JcnEgPSBudm1lX2FsbG9jX3JlcXVlc3QocSwg KHN0cnVjdCBudm1lX2NvbW1hbmQgKil2Y21kLCAwKTsKPiAtCWlmIChJU19FUlIocnEpKSB7Cj4g LQkJcmV0ID0gLUVOT01FTTsKPiAtCQlnb3RvIGVycl9jbWQ7Cj4gLQl9Cj4gLQo+IC0JaWYgKHRp bWVvdXQpCj4gLQkJcnEtPnRpbWVvdXQgPSB0aW1lb3V0Owo+IC0KPiAtCWlmIChwcGFfYnVmICYm IHBwYV9sZW4pIHsKPiAtCQlwcGFfbGlzdCA9IGRtYV9wb29sX2FsbG9jKGRldi0+ZG1hX3Bvb2ws IEdGUF9LRVJORUwsICZwcGFfZG1hKTsKPiAtCQlpZiAoIXBwYV9saXN0KSB7Cj4gLQkJCXJldCA9 IC1FTk9NRU07Cj4gLQkJCWdvdG8gZXJyX3JxOwo+IC0JCX0KPiAtCQlpZiAoY29weV9mcm9tX3Vz ZXIocHBhX2xpc3QsICh2b2lkIF9fdXNlciAqKXBwYV9idWYsCj4gLQkJCQkJCXNpemVvZih1NjQp ICogKHBwYV9sZW4gKyAxKSkpIHsKPiAtCQkJcmV0ID0gLUVGQVVMVDsKPiAtCQkJZ290byBlcnJf cHBhOwo+IC0JCX0KPiAtCQl2Y21kLT5waF9ydy5zcGJhID0gY3B1X3RvX2xlNjQocHBhX2RtYSk7 Cj4gLQl9IGVsc2Ugewo+IC0JCXZjbWQtPnBoX3J3LnNwYmEgPSBjcHVfdG9fbGU2NCgodWludHB0 cl90KXBwYV9idWYpOwo+IC0JfQo+IC0KPiAtCWlmICh1YnVmICYmIGJ1ZmZsZW4pIHsKPiAtCQly ZXQgPSBibGtfcnFfbWFwX3VzZXIocSwgcnEsIE5VTEwsIHVidWYsIGJ1ZmZsZW4sIEdGUF9LRVJO RUwpOwo+IC0JCWlmIChyZXQpCj4gLQkJCWdvdG8gZXJyX3BwYTsKPiAtCQliaW8gPSBycS0+Ymlv Owo+IC0KPiAtCQlpZiAobWV0YV9idWYgJiYgbWV0YV9sZW4pIHsKPiAtCQkJbWV0YWRhdGEgPSBk bWFfcG9vbF9hbGxvYyhkZXYtPmRtYV9wb29sLCBHRlBfS0VSTkVMLAo+IC0JCQkJCQkJCSZtZXRh ZGF0YV9kbWEpOwo+IC0JCQlpZiAoIW1ldGFkYXRhKSB7Cj4gLQkJCQlyZXQgPSAtRU5PTUVNOwo+ IC0JCQkJZ290byBlcnJfbWFwOwo+IC0JCQl9Cj4gLQo+IC0JCQlpZiAod3JpdGUpIHsKPiAtCQkJ CWlmIChjb3B5X2Zyb21fdXNlcihtZXRhZGF0YSwKPiAtCQkJCQkJKHZvaWQgX191c2VyICopbWV0 YV9idWYsCj4gLQkJCQkJCW1ldGFfbGVuKSkgewo+IC0JCQkJCXJldCA9IC1FRkFVTFQ7Cj4gLQkJ CQkJZ290byBlcnJfbWV0YTsKPiAtCQkJCX0KPiAtCQkJfQo+IC0JCQl2Y21kLT5waF9ydy5tZXRh ZGF0YSA9IGNwdV90b19sZTY0KG1ldGFkYXRhX2RtYSk7Cj4gLQkJfQo+IC0KPiAtCQliaW9fc2V0 X2RldihiaW8sIG5zLT5kaXNrLT5wYXJ0MCk7Cj4gLQl9Cj4gLQo+IC0JYmxrX2V4ZWN1dGVfcnEo TlVMTCwgcnEsIDApOwo+IC0KPiAtCWlmIChudm1lX3JlcShycSktPmZsYWdzICYgTlZNRV9SRVFf Q0FOQ0VMTEVEKQo+IC0JCXJldCA9IC1FSU5UUjsKPiAtCWVsc2UgaWYgKG52bWVfcmVxKHJxKS0+ c3RhdHVzICYgMHg3ZmYpCj4gLQkJcmV0ID0gLUVJTzsKPiAtCWlmIChyZXN1bHQpCj4gLQkJKnJl c3VsdCA9IG52bWVfcmVxKHJxKS0+c3RhdHVzICYgMHg3ZmY7Cj4gLQlpZiAoc3RhdHVzKQo+IC0J CSpzdGF0dXMgPSBsZTY0X3RvX2NwdShudm1lX3JlcShycSktPnJlc3VsdC51NjQpOwo+IC0KPiAt CWlmIChtZXRhZGF0YSAmJiAhcmV0ICYmICF3cml0ZSkgewo+IC0JCWlmIChjb3B5X3RvX3VzZXIo bWV0YV9idWYsICh2b2lkICopbWV0YWRhdGEsIG1ldGFfbGVuKSkKPiAtCQkJcmV0ID0gLUVGQVVM VDsKPiAtCX0KPiAtZXJyX21ldGE6Cj4gLQlpZiAobWV0YV9idWYgJiYgbWV0YV9sZW4pCj4gLQkJ ZG1hX3Bvb2xfZnJlZShkZXYtPmRtYV9wb29sLCBtZXRhZGF0YSwgbWV0YWRhdGFfZG1hKTsKPiAt ZXJyX21hcDoKPiAtCWlmIChiaW8pCj4gLQkJYmxrX3JxX3VubWFwX3VzZXIoYmlvKTsKPiAtZXJy X3BwYToKPiAtCWlmIChwcGFfYnVmICYmIHBwYV9sZW4pCj4gLQkJZG1hX3Bvb2xfZnJlZShkZXYt PmRtYV9wb29sLCBwcGFfbGlzdCwgcHBhX2RtYSk7Cj4gLWVycl9ycToKPiAtCWJsa19tcV9mcmVl X3JlcXVlc3QocnEpOwo+IC1lcnJfY21kOgo+IC0JcmV0dXJuIHJldDsKPiAtfQo+IC0KPiAtc3Rh dGljIGludCBudm1lX252bV9zdWJtaXRfdmlvKHN0cnVjdCBudm1lX25zICpucywKPiAtCQkJCQlz dHJ1Y3QgbnZtX3VzZXJfdmlvIF9fdXNlciAqdXZpbykKPiAtewo+IC0Jc3RydWN0IG52bV91c2Vy X3ZpbyB2aW87Cj4gLQlzdHJ1Y3QgbnZtZV9udm1fY29tbWFuZCBjOwo+IC0JdW5zaWduZWQgaW50 IGxlbmd0aDsKPiAtCWludCByZXQ7Cj4gLQo+IC0JaWYgKGNvcHlfZnJvbV91c2VyKCZ2aW8sIHV2 aW8sIHNpemVvZih2aW8pKSkKPiAtCQlyZXR1cm4gLUVGQVVMVDsKPiAtCWlmICh2aW8uZmxhZ3Mp Cj4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4gLQo+IC0JbWVtc2V0KCZjLCAwLCBzaXplb2YoYykpOwo+ IC0JYy5waF9ydy5vcGNvZGUgPSB2aW8ub3Bjb2RlOwo+IC0JYy5waF9ydy5uc2lkID0gY3B1X3Rv X2xlMzIobnMtPmhlYWQtPm5zX2lkKTsKPiAtCWMucGhfcncuY29udHJvbCA9IGNwdV90b19sZTE2 KHZpby5jb250cm9sKTsKPiAtCWMucGhfcncubGVuZ3RoID0gY3B1X3RvX2xlMTYodmlvLm5wcGFz KTsKPiAtCj4gLQlsZW5ndGggPSAodmlvLm5wcGFzICsgMSkgPDwgbnMtPmxiYV9zaGlmdDsKPiAt Cj4gLQlyZXQgPSBudm1lX252bV9zdWJtaXRfdXNlcl9jbWQobnMtPnF1ZXVlLCBucywgJmMsCj4g LQkJCSh2b2lkIF9fdXNlciAqKSh1aW50cHRyX3QpdmlvLmFkZHIsIGxlbmd0aCwKPiAtCQkJKHZv aWQgX191c2VyICopKHVpbnRwdHJfdCl2aW8ubWV0YWRhdGEsCj4gLQkJCQkJCQl2aW8ubWV0YWRh dGFfbGVuLAo+IC0JCQkodm9pZCBfX3VzZXIgKikodWludHB0cl90KXZpby5wcGFfbGlzdCwgdmlv Lm5wcGFzLAo+IC0JCQkmdmlvLnJlc3VsdCwgJnZpby5zdGF0dXMsIDApOwo+IC0KPiAtCWlmIChy ZXQgJiYgY29weV90b191c2VyKHV2aW8sICZ2aW8sIHNpemVvZih2aW8pKSkKPiAtCQlyZXR1cm4g LUVGQVVMVDsKPiAtCj4gLQlyZXR1cm4gcmV0Owo+IC19Cj4gLQo+IC1zdGF0aWMgaW50IG52bWVf bnZtX3VzZXJfdmNtZChzdHJ1Y3QgbnZtZV9ucyAqbnMsIGludCBhZG1pbiwKPiAtCQkJCQlzdHJ1 Y3QgbnZtX3Bhc3N0aHJ1X3ZpbyBfX3VzZXIgKnV2Y21kKQo+IC17Cj4gLQlzdHJ1Y3QgbnZtX3Bh c3N0aHJ1X3ZpbyB2Y21kOwo+IC0Jc3RydWN0IG52bWVfbnZtX2NvbW1hbmQgYzsKPiAtCXN0cnVj dCByZXF1ZXN0X3F1ZXVlICpxOwo+IC0JdW5zaWduZWQgaW50IHRpbWVvdXQgPSAwOwo+IC0JaW50 IHJldDsKPiAtCj4gLQlpZiAoY29weV9mcm9tX3VzZXIoJnZjbWQsIHV2Y21kLCBzaXplb2YodmNt ZCkpKQo+IC0JCXJldHVybiAtRUZBVUxUOwo+IC0JaWYgKCh2Y21kLm9wY29kZSAhPSAweEYyKSAm JiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpKQo+IC0JCXJldHVybiAtRUFDQ0VTOwo+IC0JaWYg KHZjbWQuZmxhZ3MpCj4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4gLQo+IC0JbWVtc2V0KCZjLCAwLCBz aXplb2YoYykpOwo+IC0JYy5jb21tb24ub3Bjb2RlID0gdmNtZC5vcGNvZGU7Cj4gLQljLmNvbW1v bi5uc2lkID0gY3B1X3RvX2xlMzIobnMtPmhlYWQtPm5zX2lkKTsKPiAtCWMuY29tbW9uLmNkdzJb MF0gPSBjcHVfdG9fbGUzMih2Y21kLmNkdzIpOwo+IC0JYy5jb21tb24uY2R3MlsxXSA9IGNwdV90 b19sZTMyKHZjbWQuY2R3Myk7Cj4gLQkvKiBjZHcxMS0xMiAqLwo+IC0JYy5waF9ydy5sZW5ndGgg PSBjcHVfdG9fbGUxNih2Y21kLm5wcGFzKTsKPiAtCWMucGhfcncuY29udHJvbCAgPSBjcHVfdG9f bGUxNih2Y21kLmNvbnRyb2wpOwo+IC0JYy5jb21tb24uY2R3MTMgPSBjcHVfdG9fbGUzMih2Y21k LmNkdzEzKTsKPiAtCWMuY29tbW9uLmNkdzE0ID0gY3B1X3RvX2xlMzIodmNtZC5jZHcxNCk7Cj4g LQljLmNvbW1vbi5jZHcxNSA9IGNwdV90b19sZTMyKHZjbWQuY2R3MTUpOwo+IC0KPiAtCWlmICh2 Y21kLnRpbWVvdXRfbXMpCj4gLQkJdGltZW91dCA9IG1zZWNzX3RvX2ppZmZpZXModmNtZC50aW1l b3V0X21zKTsKPiAtCj4gLQlxID0gYWRtaW4gPyBucy0+Y3RybC0+YWRtaW5fcSA6IG5zLT5xdWV1 ZTsKPiAtCj4gLQlyZXQgPSBudm1lX252bV9zdWJtaXRfdXNlcl9jbWQocSwgbnMsCj4gLQkJCShz dHJ1Y3QgbnZtZV9udm1fY29tbWFuZCAqKSZjLAo+IC0JCQkodm9pZCBfX3VzZXIgKikodWludHB0 cl90KXZjbWQuYWRkciwgdmNtZC5kYXRhX2xlbiwKPiAtCQkJKHZvaWQgX191c2VyICopKHVpbnRw dHJfdCl2Y21kLm1ldGFkYXRhLAo+IC0JCQkJCQkJdmNtZC5tZXRhZGF0YV9sZW4sCj4gLQkJCSh2 b2lkIF9fdXNlciAqKSh1aW50cHRyX3QpdmNtZC5wcGFfbGlzdCwgdmNtZC5ucHBhcywKPiAtCQkJ JnZjbWQucmVzdWx0LCAmdmNtZC5zdGF0dXMsIHRpbWVvdXQpOwo+IC0KPiAtCWlmIChyZXQgJiYg Y29weV90b191c2VyKHV2Y21kLCAmdmNtZCwgc2l6ZW9mKHZjbWQpKSkKPiAtCQlyZXR1cm4gLUVG QVVMVDsKPiAtCj4gLQlyZXR1cm4gcmV0Owo+IC19Cj4gLQo+IC1pbnQgbnZtZV9udm1faW9jdGwo c3RydWN0IG52bWVfbnMgKm5zLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkIF9fdXNlciAqYXJncCkK PiAtewo+IC0Jc3dpdGNoIChjbWQpIHsKPiAtCWNhc2UgTlZNRV9OVk1fSU9DVExfQURNSU5fVklP Ogo+IC0JCXJldHVybiBudm1lX252bV91c2VyX3ZjbWQobnMsIDEsIGFyZ3ApOwo+IC0JY2FzZSBO Vk1FX05WTV9JT0NUTF9JT19WSU86Cj4gLQkJcmV0dXJuIG52bWVfbnZtX3VzZXJfdmNtZChucywg MCwgYXJncCk7Cj4gLQljYXNlIE5WTUVfTlZNX0lPQ1RMX1NVQk1JVF9WSU86Cj4gLQkJcmV0dXJu IG52bWVfbnZtX3N1Ym1pdF92aW8obnMsIGFyZ3ApOwo+IC0JZGVmYXVsdDoKPiAtCQlyZXR1cm4g LUVOT1RUWTsKPiAtCX0KPiAtfQo+IC0KPiAtaW50IG52bWVfbnZtX3JlZ2lzdGVyKHN0cnVjdCBu dm1lX25zICpucywgY2hhciAqZGlza19uYW1lLCBpbnQgbm9kZSkKPiAtewo+IC0Jc3RydWN0IHJl cXVlc3RfcXVldWUgKnEgPSBucy0+cXVldWU7Cj4gLQlzdHJ1Y3QgbnZtX2RldiAqZGV2Owo+IC0J c3RydWN0IG52bV9nZW8gKmdlbzsKPiAtCj4gLQlfbnZtZV9udm1fY2hlY2tfc2l6ZSgpOwo+IC0K PiAtCWRldiA9IG52bV9hbGxvY19kZXYobm9kZSk7Cj4gLQlpZiAoIWRldikKPiAtCQlyZXR1cm4g LUVOT01FTTsKPiAtCj4gLQkvKiBOb3RlIHRoYXQgY3NlY3MgYW5kIHNvcyB3aWxsIGJlIG92ZXJy aWRkZW4gaWYgaXQgaXMgYSAxLjIgZHJpdmUuICovCj4gLQlnZW8gPSAmZGV2LT5nZW87Cj4gLQln ZW8tPmNzZWNzID0gMSA8PCBucy0+bGJhX3NoaWZ0Owo+IC0JZ2VvLT5zb3MgPSBucy0+bXM7Cj4g LQlpZiAobnMtPmZlYXR1cmVzICYgTlZNRV9OU19FWFRfTEJBUykKPiAtCQlnZW8tPmV4dCA9IHRy dWU7Cj4gLQllbHNlCj4gLQkJZ2VvLT5leHQgPSBmYWxzZTsKPiAtCWdlby0+bWR0cyA9IG5zLT5j dHJsLT5tYXhfaHdfc2VjdG9yczsKPiAtCj4gLQlkZXYtPnEgPSBxOwo+IC0JbWVtY3B5KGRldi0+ bmFtZSwgZGlza19uYW1lLCBESVNLX05BTUVfTEVOKTsKPiAtCWRldi0+b3BzID0gJm52bWVfbnZt X2Rldl9vcHM7Cj4gLQlkZXYtPnByaXZhdGVfZGF0YSA9IG5zOwo+IC0JbnMtPm5kZXYgPSBkZXY7 Cj4gLQo+IC0JcmV0dXJuIG52bV9yZWdpc3RlcihkZXYpOwo+IC19Cj4gLQo+IC12b2lkIG52bWVf bnZtX3VucmVnaXN0ZXIoc3RydWN0IG52bWVfbnMgKm5zKQo+IC17Cj4gLQludm1fdW5yZWdpc3Rl cihucy0+bmRldik7Cj4gLX0KPiAtCj4gLXN0YXRpYyBzc2l6ZV90IG52bV9kZXZfYXR0cl9zaG93 KHN0cnVjdCBkZXZpY2UgKmRldiwKPiAtCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGF0dHIs IGNoYXIgKnBhZ2UpCj4gLXsKPiAtCXN0cnVjdCBudm1lX25zICpucyA9IG52bWVfZ2V0X25zX2Zy b21fZGV2KGRldik7Cj4gLQlzdHJ1Y3QgbnZtX2RldiAqbmRldiA9IG5zLT5uZGV2Owo+IC0Jc3Ry dWN0IG52bV9nZW8gKmdlbyA9ICZuZGV2LT5nZW87Cj4gLQlzdHJ1Y3QgYXR0cmlidXRlICphdHRy Owo+IC0KPiAtCWlmICghbmRldikKPiAtCQlyZXR1cm4gMDsKPiAtCj4gLQlhdHRyID0gJmRhdHRy LT5hdHRyOwo+IC0KPiAtCWlmIChzdHJjbXAoYXR0ci0+bmFtZSwgInZlcnNpb24iKSA9PSAwKSB7 Cj4gLQkJaWYgKGdlby0+bWFqb3JfdmVyX2lkID09IDEpCj4gLQkJCXJldHVybiBzY25wcmludGYo cGFnZSwgUEFHRV9TSVpFLCAiJXVcbiIsCj4gLQkJCQkJCWdlby0+bWFqb3JfdmVyX2lkKTsKPiAt CQllbHNlCj4gLQkJCXJldHVybiBzY25wcmludGYocGFnZSwgUEFHRV9TSVpFLCAiJXUuJXVcbiIs Cj4gLQkJCQkJCWdlby0+bWFqb3JfdmVyX2lkLAo+IC0JCQkJCQlnZW8tPm1pbm9yX3Zlcl9pZCk7 Cj4gLQl9IGVsc2UgaWYgKHN0cmNtcChhdHRyLT5uYW1lLCAiY2FwYWJpbGl0aWVzIikgPT0gMCkg ewo+IC0JCXJldHVybiBzY25wcmludGYocGFnZSwgUEFHRV9TSVpFLCAiJXVcbiIsIGdlby0+Y2Fw KTsKPiAtCX0gZWxzZSBpZiAoc3RyY21wKGF0dHItPm5hbWUsICJyZWFkX3R5cCIpID09IDApIHsK PiAtCQlyZXR1cm4gc2NucHJpbnRmKHBhZ2UsIFBBR0VfU0laRSwgIiV1XG4iLCBnZW8tPnRyZHQp Owo+IC0JfSBlbHNlIGlmIChzdHJjbXAoYXR0ci0+bmFtZSwgInJlYWRfbWF4IikgPT0gMCkgewo+ IC0JCXJldHVybiBzY25wcmludGYocGFnZSwgUEFHRV9TSVpFLCAiJXVcbiIsIGdlby0+dHJkbSk7 Cj4gLQl9IGVsc2Ugewo+IC0JCXJldHVybiBzY25wcmludGYocGFnZSwKPiAtCQkJCSBQQUdFX1NJ WkUsCj4gLQkJCQkgIlVuaGFuZGxlZCBhdHRyKCVzKSBpbiBgJXNgXG4iLAo+IC0JCQkJIGF0dHIt Pm5hbWUsIF9fZnVuY19fKTsKPiAtCX0KPiAtfQo+IC0KPiAtc3RhdGljIHNzaXplX3QgbnZtX2Rl dl9hdHRyX3Nob3dfcHBhZihzdHJ1Y3QgbnZtX2FkZHJmXzEyICpwcGFmLCBjaGFyICpwYWdlKQo+ IC17Cj4gLQlyZXR1cm4gc2NucHJpbnRmKHBhZ2UsIFBBR0VfU0laRSwKPiAtCQkiMHglMDJ4JTAy eCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnhcbiIsCj4gLQkJCQlwcGFm LT5jaF9vZmZzZXQsIHBwYWYtPmNoX2xlbiwKPiAtCQkJCXBwYWYtPmx1bl9vZmZzZXQsIHBwYWYt Pmx1bl9sZW4sCj4gLQkJCQlwcGFmLT5wbG5fb2Zmc2V0LCBwcGFmLT5wbG5fbGVuLAo+IC0JCQkJ cHBhZi0+YmxrX29mZnNldCwgcHBhZi0+YmxrX2xlbiwKPiAtCQkJCXBwYWYtPnBnX29mZnNldCwg cHBhZi0+cGdfbGVuLAo+IC0JCQkJcHBhZi0+c2VjX29mZnNldCwgcHBhZi0+c2VjX2xlbik7Cj4g LX0KPiAtCj4gLXN0YXRpYyBzc2l6ZV90IG52bV9kZXZfYXR0cl9zaG93XzEyKHN0cnVjdCBkZXZp Y2UgKmRldiwKPiAtCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGF0dHIsIGNoYXIgKnBhZ2Up Cj4gLXsKPiAtCXN0cnVjdCBudm1lX25zICpucyA9IG52bWVfZ2V0X25zX2Zyb21fZGV2KGRldik7 Cj4gLQlzdHJ1Y3QgbnZtX2RldiAqbmRldiA9IG5zLT5uZGV2Owo+IC0Jc3RydWN0IG52bV9nZW8g KmdlbyA9ICZuZGV2LT5nZW87Cj4gLQlzdHJ1Y3QgYXR0cmlidXRlICphdHRyOwo+IC0KPiAtCWlm ICghbmRldikKPiAtCQlyZXR1cm4gMDsKPiAtCj4gLQlhdHRyID0gJmRhdHRyLT5hdHRyOwo+IC0K PiAtCWlmIChzdHJjbXAoYXR0ci0+bmFtZSwgInZlbmRvcl9vcGNvZGUiKSA9PSAwKSB7Cj4gLQkJ cmV0dXJuIHNjbnByaW50ZihwYWdlLCBQQUdFX1NJWkUsICIldVxuIiwgZ2VvLT52bW50KTsKPiAt CX0gZWxzZSBpZiAoc3RyY21wKGF0dHItPm5hbWUsICJkZXZpY2VfbW9kZSIpID09IDApIHsKPiAt CQlyZXR1cm4gc2NucHJpbnRmKHBhZ2UsIFBBR0VfU0laRSwgIiV1XG4iLCBnZW8tPmRvbSk7Cj4g LQkvKiBrZXB0IGZvciBjb21wYXRpYmlsaXR5ICovCj4gLQl9IGVsc2UgaWYgKHN0cmNtcChhdHRy LT5uYW1lLCAibWVkaWFfbWFuYWdlciIpID09IDApIHsKPiAtCQlyZXR1cm4gc2NucHJpbnRmKHBh Z2UsIFBBR0VfU0laRSwgIiVzXG4iLCAiZ2VubnZtIik7Cj4gLQl9IGVsc2UgaWYgKHN0cmNtcChh dHRyLT5uYW1lLCAicHBhX2Zvcm1hdCIpID09IDApIHsKPiAtCQlyZXR1cm4gbnZtX2Rldl9hdHRy X3Nob3dfcHBhZigodm9pZCAqKSZnZW8tPmFkZHJmLCBwYWdlKTsKPiAtCX0gZWxzZSBpZiAoc3Ry Y21wKGF0dHItPm5hbWUsICJtZWRpYV90eXBlIikgPT0gMCkgewkvKiB1OCAqLwo+IC0JCXJldHVy biBzY25wcmludGYocGFnZSwgUEFHRV9TSVpFLCAiJXVcbiIsIGdlby0+bXR5cGUpOwo+IC0JfSBl bHNlIGlmIChzdHJjbXAoYXR0ci0+bmFtZSwgImZsYXNoX21lZGlhX3R5cGUiKSA9PSAwKSB7Cj4g LQkJcmV0dXJuIHNjbnByaW50ZihwYWdlLCBQQUdFX1NJWkUsICIldVxuIiwgZ2VvLT5mbXR5cGUp Owo+IC0JfSBlbHNlIGlmIChzdHJjbXAoYXR0ci0+bmFtZSwgIm51bV9jaGFubmVscyIpID09IDAp IHsKPiAtCQlyZXR1cm4gc2NucHJpbnRmKHBhZ2UsIFBBR0VfU0laRSwgIiV1XG4iLCBnZW8tPm51 bV9jaCk7Cj4gLQl9IGVsc2UgaWYgKHN0cmNtcChhdHRyLT5uYW1lLCAibnVtX2x1bnMiKSA9PSAw KSB7Cj4gLQkJcmV0dXJuIHNjbnByaW50ZihwYWdlLCBQQUdFX1NJWkUsICIldVxuIiwgZ2VvLT5u dW1fbHVuKTsKPiAtCX0gZWxzZSBpZiAoc3RyY21wKGF0dHItPm5hbWUsICJudW1fcGxhbmVzIikg PT0gMCkgewo+IC0JCXJldHVybiBzY25wcmludGYocGFnZSwgUEFHRV9TSVpFLCAiJXVcbiIsIGdl by0+bnVtX3Bsbik7Cj4gLQl9IGVsc2UgaWYgKHN0cmNtcChhdHRyLT5uYW1lLCAibnVtX2Jsb2Nr cyIpID09IDApIHsJLyogdTE2ICovCj4gLQkJcmV0dXJuIHNjbnByaW50ZihwYWdlLCBQQUdFX1NJ WkUsICIldVxuIiwgZ2VvLT5udW1fY2hrKTsKPiAtCX0gZWxzZSBpZiAoc3RyY21wKGF0dHItPm5h bWUsICJudW1fcGFnZXMiKSA9PSAwKSB7Cj4gLQkJcmV0dXJuIHNjbnByaW50ZihwYWdlLCBQQUdF X1NJWkUsICIldVxuIiwgZ2VvLT5udW1fcGcpOwo+IC0JfSBlbHNlIGlmIChzdHJjbXAoYXR0ci0+ bmFtZSwgInBhZ2Vfc2l6ZSIpID09IDApIHsKPiAtCQlyZXR1cm4gc2NucHJpbnRmKHBhZ2UsIFBB R0VfU0laRSwgIiV1XG4iLCBnZW8tPmZwZ19zeik7Cj4gLQl9IGVsc2UgaWYgKHN0cmNtcChhdHRy LT5uYW1lLCAiaHdfc2VjdG9yX3NpemUiKSA9PSAwKSB7Cj4gLQkJcmV0dXJuIHNjbnByaW50Zihw YWdlLCBQQUdFX1NJWkUsICIldVxuIiwgZ2VvLT5jc2Vjcyk7Cj4gLQl9IGVsc2UgaWYgKHN0cmNt cChhdHRyLT5uYW1lLCAib29iX3NlY3Rvcl9zaXplIikgPT0gMCkgey8qIHUzMiAqLwo+IC0JCXJl dHVybiBzY25wcmludGYocGFnZSwgUEFHRV9TSVpFLCAiJXVcbiIsIGdlby0+c29zKTsKPiAtCX0g ZWxzZSBpZiAoc3RyY21wKGF0dHItPm5hbWUsICJwcm9nX3R5cCIpID09IDApIHsKPiAtCQlyZXR1 cm4gc2NucHJpbnRmKHBhZ2UsIFBBR0VfU0laRSwgIiV1XG4iLCBnZW8tPnRwcnQpOwo+IC0JfSBl bHNlIGlmIChzdHJjbXAoYXR0ci0+bmFtZSwgInByb2dfbWF4IikgPT0gMCkgewo+IC0JCXJldHVy biBzY25wcmludGYocGFnZSwgUEFHRV9TSVpFLCAiJXVcbiIsIGdlby0+dHBybSk7Cj4gLQl9IGVs c2UgaWYgKHN0cmNtcChhdHRyLT5uYW1lLCAiZXJhc2VfdHlwIikgPT0gMCkgewo+IC0JCXJldHVy biBzY25wcmludGYocGFnZSwgUEFHRV9TSVpFLCAiJXVcbiIsIGdlby0+dGJldCk7Cj4gLQl9IGVs c2UgaWYgKHN0cmNtcChhdHRyLT5uYW1lLCAiZXJhc2VfbWF4IikgPT0gMCkgewo+IC0JCXJldHVy biBzY25wcmludGYocGFnZSwgUEFHRV9TSVpFLCAiJXVcbiIsIGdlby0+dGJlbSk7Cj4gLQl9IGVs c2UgaWYgKHN0cmNtcChhdHRyLT5uYW1lLCAibXVsdGlwbGFuZV9tb2RlcyIpID09IDApIHsKPiAt CQlyZXR1cm4gc2NucHJpbnRmKHBhZ2UsIFBBR0VfU0laRSwgIjB4JTA4eFxuIiwgZ2VvLT5tcG9z KTsKPiAtCX0gZWxzZSBpZiAoc3RyY21wKGF0dHItPm5hbWUsICJtZWRpYV9jYXBhYmlsaXRpZXMi KSA9PSAwKSB7Cj4gLQkJcmV0dXJuIHNjbnByaW50ZihwYWdlLCBQQUdFX1NJWkUsICIweCUwOHhc biIsIGdlby0+bWNjYXApOwo+IC0JfSBlbHNlIGlmIChzdHJjbXAoYXR0ci0+bmFtZSwgIm1heF9w aHlzX3NlY3MiKSA9PSAwKSB7Cj4gLQkJcmV0dXJuIHNjbnByaW50ZihwYWdlLCBQQUdFX1NJWkUs ICIldVxuIiwgTlZNX01BWF9WTEJBKTsKPiAtCX0gZWxzZSB7Cj4gLQkJcmV0dXJuIHNjbnByaW50 ZihwYWdlLCBQQUdFX1NJWkUsCj4gLQkJCSJVbmhhbmRsZWQgYXR0ciglcykgaW4gYCVzYFxuIiwK PiAtCQkJYXR0ci0+bmFtZSwgX19mdW5jX18pOwo+IC0JfQo+IC19Cj4gLQo+IC1zdGF0aWMgc3Np emVfdCBudm1fZGV2X2F0dHJfc2hvd18yMChzdHJ1Y3QgZGV2aWNlICpkZXYsCj4gLQkJc3RydWN0 IGRldmljZV9hdHRyaWJ1dGUgKmRhdHRyLCBjaGFyICpwYWdlKQo+IC17Cj4gLQlzdHJ1Y3QgbnZt ZV9ucyAqbnMgPSBudm1lX2dldF9uc19mcm9tX2RldihkZXYpOwo+IC0Jc3RydWN0IG52bV9kZXYg Km5kZXYgPSBucy0+bmRldjsKPiAtCXN0cnVjdCBudm1fZ2VvICpnZW8gPSAmbmRldi0+Z2VvOwo+ IC0Jc3RydWN0IGF0dHJpYnV0ZSAqYXR0cjsKPiAtCj4gLQlpZiAoIW5kZXYpCj4gLQkJcmV0dXJu IDA7Cj4gLQo+IC0JYXR0ciA9ICZkYXR0ci0+YXR0cjsKPiAtCj4gLQlpZiAoc3RyY21wKGF0dHIt Pm5hbWUsICJncm91cHMiKSA9PSAwKSB7Cj4gLQkJcmV0dXJuIHNjbnByaW50ZihwYWdlLCBQQUdF X1NJWkUsICIldVxuIiwgZ2VvLT5udW1fY2gpOwo+IC0JfSBlbHNlIGlmIChzdHJjbXAoYXR0ci0+ bmFtZSwgInB1bml0cyIpID09IDApIHsKPiAtCQlyZXR1cm4gc2NucHJpbnRmKHBhZ2UsIFBBR0Vf U0laRSwgIiV1XG4iLCBnZW8tPm51bV9sdW4pOwo+IC0JfSBlbHNlIGlmIChzdHJjbXAoYXR0ci0+ bmFtZSwgImNodW5rcyIpID09IDApIHsKPiAtCQlyZXR1cm4gc2NucHJpbnRmKHBhZ2UsIFBBR0Vf U0laRSwgIiV1XG4iLCBnZW8tPm51bV9jaGspOwo+IC0JfSBlbHNlIGlmIChzdHJjbXAoYXR0ci0+ bmFtZSwgImNsYmEiKSA9PSAwKSB7Cj4gLQkJcmV0dXJuIHNjbnByaW50ZihwYWdlLCBQQUdFX1NJ WkUsICIldVxuIiwgZ2VvLT5jbGJhKTsKPiAtCX0gZWxzZSBpZiAoc3RyY21wKGF0dHItPm5hbWUs ICJ3c19taW4iKSA9PSAwKSB7Cj4gLQkJcmV0dXJuIHNjbnByaW50ZihwYWdlLCBQQUdFX1NJWkUs ICIldVxuIiwgZ2VvLT53c19taW4pOwo+IC0JfSBlbHNlIGlmIChzdHJjbXAoYXR0ci0+bmFtZSwg IndzX29wdCIpID09IDApIHsKPiAtCQlyZXR1cm4gc2NucHJpbnRmKHBhZ2UsIFBBR0VfU0laRSwg IiV1XG4iLCBnZW8tPndzX29wdCk7Cj4gLQl9IGVsc2UgaWYgKHN0cmNtcChhdHRyLT5uYW1lLCAi bWF4b2MiKSA9PSAwKSB7Cj4gLQkJcmV0dXJuIHNjbnByaW50ZihwYWdlLCBQQUdFX1NJWkUsICIl dVxuIiwgZ2VvLT5tYXhvYyk7Cj4gLQl9IGVsc2UgaWYgKHN0cmNtcChhdHRyLT5uYW1lLCAibWF4 b2NwdSIpID09IDApIHsKPiAtCQlyZXR1cm4gc2NucHJpbnRmKHBhZ2UsIFBBR0VfU0laRSwgIiV1 XG4iLCBnZW8tPm1heG9jcHUpOwo+IC0JfSBlbHNlIGlmIChzdHJjbXAoYXR0ci0+bmFtZSwgIm13 X2N1bml0cyIpID09IDApIHsKPiAtCQlyZXR1cm4gc2NucHJpbnRmKHBhZ2UsIFBBR0VfU0laRSwg IiV1XG4iLCBnZW8tPm13X2N1bml0cyk7Cj4gLQl9IGVsc2UgaWYgKHN0cmNtcChhdHRyLT5uYW1l LCAid3JpdGVfdHlwIikgPT0gMCkgewo+IC0JCXJldHVybiBzY25wcmludGYocGFnZSwgUEFHRV9T SVpFLCAiJXVcbiIsIGdlby0+dHBydCk7Cj4gLQl9IGVsc2UgaWYgKHN0cmNtcChhdHRyLT5uYW1l LCAid3JpdGVfbWF4IikgPT0gMCkgewo+IC0JCXJldHVybiBzY25wcmludGYocGFnZSwgUEFHRV9T SVpFLCAiJXVcbiIsIGdlby0+dHBybSk7Cj4gLQl9IGVsc2UgaWYgKHN0cmNtcChhdHRyLT5uYW1l LCAicmVzZXRfdHlwIikgPT0gMCkgewo+IC0JCXJldHVybiBzY25wcmludGYocGFnZSwgUEFHRV9T SVpFLCAiJXVcbiIsIGdlby0+dGJldCk7Cj4gLQl9IGVsc2UgaWYgKHN0cmNtcChhdHRyLT5uYW1l LCAicmVzZXRfbWF4IikgPT0gMCkgewo+IC0JCXJldHVybiBzY25wcmludGYocGFnZSwgUEFHRV9T SVpFLCAiJXVcbiIsIGdlby0+dGJlbSk7Cj4gLQl9IGVsc2Ugewo+IC0JCXJldHVybiBzY25wcmlu dGYocGFnZSwgUEFHRV9TSVpFLAo+IC0JCQkiVW5oYW5kbGVkIGF0dHIoJXMpIGluIGAlc2BcbiIs Cj4gLQkJCWF0dHItPm5hbWUsIF9fZnVuY19fKTsKPiAtCX0KPiAtfQo+IC0KPiAtI2RlZmluZSBO Vk1fREVWX0FUVFJfUk8oX25hbWUpCQkJCQlcCj4gLQlERVZJQ0VfQVRUUihfbmFtZSwgU19JUlVH TywgbnZtX2Rldl9hdHRyX3Nob3csIE5VTEwpCj4gLSNkZWZpbmUgTlZNX0RFVl9BVFRSXzEyX1JP KF9uYW1lKQkJCQkJXAo+IC0JREVWSUNFX0FUVFIoX25hbWUsIFNfSVJVR08sIG52bV9kZXZfYXR0 cl9zaG93XzEyLCBOVUxMKQo+IC0jZGVmaW5lIE5WTV9ERVZfQVRUUl8yMF9STyhfbmFtZSkJCQkJ CVwKPiAtCURFVklDRV9BVFRSKF9uYW1lLCBTX0lSVUdPLCBudm1fZGV2X2F0dHJfc2hvd18yMCwg TlVMTCkKPiAtCj4gLS8qIGdlbmVyYWwgYXR0cmlidXRlcyAqLwo+IC1zdGF0aWMgTlZNX0RFVl9B VFRSX1JPKHZlcnNpb24pOwo+IC1zdGF0aWMgTlZNX0RFVl9BVFRSX1JPKGNhcGFiaWxpdGllcyk7 Cj4gLQo+IC1zdGF0aWMgTlZNX0RFVl9BVFRSX1JPKHJlYWRfdHlwKTsKPiAtc3RhdGljIE5WTV9E RVZfQVRUUl9STyhyZWFkX21heCk7Cj4gLQo+IC0vKiAxLjIgdmFsdWVzICovCj4gLXN0YXRpYyBO Vk1fREVWX0FUVFJfMTJfUk8odmVuZG9yX29wY29kZSk7Cj4gLXN0YXRpYyBOVk1fREVWX0FUVFJf MTJfUk8oZGV2aWNlX21vZGUpOwo+IC1zdGF0aWMgTlZNX0RFVl9BVFRSXzEyX1JPKHBwYV9mb3Jt YXQpOwo+IC1zdGF0aWMgTlZNX0RFVl9BVFRSXzEyX1JPKG1lZGlhX21hbmFnZXIpOwo+IC1zdGF0 aWMgTlZNX0RFVl9BVFRSXzEyX1JPKG1lZGlhX3R5cGUpOwo+IC1zdGF0aWMgTlZNX0RFVl9BVFRS XzEyX1JPKGZsYXNoX21lZGlhX3R5cGUpOwo+IC1zdGF0aWMgTlZNX0RFVl9BVFRSXzEyX1JPKG51 bV9jaGFubmVscyk7Cj4gLXN0YXRpYyBOVk1fREVWX0FUVFJfMTJfUk8obnVtX2x1bnMpOwo+IC1z dGF0aWMgTlZNX0RFVl9BVFRSXzEyX1JPKG51bV9wbGFuZXMpOwo+IC1zdGF0aWMgTlZNX0RFVl9B VFRSXzEyX1JPKG51bV9ibG9ja3MpOwo+IC1zdGF0aWMgTlZNX0RFVl9BVFRSXzEyX1JPKG51bV9w YWdlcyk7Cj4gLXN0YXRpYyBOVk1fREVWX0FUVFJfMTJfUk8ocGFnZV9zaXplKTsKPiAtc3RhdGlj IE5WTV9ERVZfQVRUUl8xMl9STyhod19zZWN0b3Jfc2l6ZSk7Cj4gLXN0YXRpYyBOVk1fREVWX0FU VFJfMTJfUk8ob29iX3NlY3Rvcl9zaXplKTsKPiAtc3RhdGljIE5WTV9ERVZfQVRUUl8xMl9STyhw cm9nX3R5cCk7Cj4gLXN0YXRpYyBOVk1fREVWX0FUVFJfMTJfUk8ocHJvZ19tYXgpOwo+IC1zdGF0 aWMgTlZNX0RFVl9BVFRSXzEyX1JPKGVyYXNlX3R5cCk7Cj4gLXN0YXRpYyBOVk1fREVWX0FUVFJf MTJfUk8oZXJhc2VfbWF4KTsKPiAtc3RhdGljIE5WTV9ERVZfQVRUUl8xMl9STyhtdWx0aXBsYW5l X21vZGVzKTsKPiAtc3RhdGljIE5WTV9ERVZfQVRUUl8xMl9STyhtZWRpYV9jYXBhYmlsaXRpZXMp Owo+IC1zdGF0aWMgTlZNX0RFVl9BVFRSXzEyX1JPKG1heF9waHlzX3NlY3MpOwo+IC0KPiAtLyog Mi4wIHZhbHVlcyAqLwo+IC1zdGF0aWMgTlZNX0RFVl9BVFRSXzIwX1JPKGdyb3Vwcyk7Cj4gLXN0 YXRpYyBOVk1fREVWX0FUVFJfMjBfUk8ocHVuaXRzKTsKPiAtc3RhdGljIE5WTV9ERVZfQVRUUl8y MF9STyhjaHVua3MpOwo+IC1zdGF0aWMgTlZNX0RFVl9BVFRSXzIwX1JPKGNsYmEpOwo+IC1zdGF0 aWMgTlZNX0RFVl9BVFRSXzIwX1JPKHdzX21pbik7Cj4gLXN0YXRpYyBOVk1fREVWX0FUVFJfMjBf Uk8od3Nfb3B0KTsKPiAtc3RhdGljIE5WTV9ERVZfQVRUUl8yMF9STyhtYXhvYyk7Cj4gLXN0YXRp YyBOVk1fREVWX0FUVFJfMjBfUk8obWF4b2NwdSk7Cj4gLXN0YXRpYyBOVk1fREVWX0FUVFJfMjBf Uk8obXdfY3VuaXRzKTsKPiAtc3RhdGljIE5WTV9ERVZfQVRUUl8yMF9STyh3cml0ZV90eXApOwo+ IC1zdGF0aWMgTlZNX0RFVl9BVFRSXzIwX1JPKHdyaXRlX21heCk7Cj4gLXN0YXRpYyBOVk1fREVW X0FUVFJfMjBfUk8ocmVzZXRfdHlwKTsKPiAtc3RhdGljIE5WTV9ERVZfQVRUUl8yMF9STyhyZXNl dF9tYXgpOwo+IC0KPiAtc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKm52bV9kZXZfYXR0cnNbXSA9 IHsKPiAtCS8qIHZlcnNpb24gYWdub3N0aWMgYXR0cnMgKi8KPiAtCSZkZXZfYXR0cl92ZXJzaW9u LmF0dHIsCj4gLQkmZGV2X2F0dHJfY2FwYWJpbGl0aWVzLmF0dHIsCj4gLQkmZGV2X2F0dHJfcmVh ZF90eXAuYXR0ciwKPiAtCSZkZXZfYXR0cl9yZWFkX21heC5hdHRyLAo+IC0KPiAtCS8qIDEuMiBh dHRycyAqLwo+IC0JJmRldl9hdHRyX3ZlbmRvcl9vcGNvZGUuYXR0ciwKPiAtCSZkZXZfYXR0cl9k ZXZpY2VfbW9kZS5hdHRyLAo+IC0JJmRldl9hdHRyX21lZGlhX21hbmFnZXIuYXR0ciwKPiAtCSZk ZXZfYXR0cl9wcGFfZm9ybWF0LmF0dHIsCj4gLQkmZGV2X2F0dHJfbWVkaWFfdHlwZS5hdHRyLAo+ IC0JJmRldl9hdHRyX2ZsYXNoX21lZGlhX3R5cGUuYXR0ciwKPiAtCSZkZXZfYXR0cl9udW1fY2hh bm5lbHMuYXR0ciwKPiAtCSZkZXZfYXR0cl9udW1fbHVucy5hdHRyLAo+IC0JJmRldl9hdHRyX251 bV9wbGFuZXMuYXR0ciwKPiAtCSZkZXZfYXR0cl9udW1fYmxvY2tzLmF0dHIsCj4gLQkmZGV2X2F0 dHJfbnVtX3BhZ2VzLmF0dHIsCj4gLQkmZGV2X2F0dHJfcGFnZV9zaXplLmF0dHIsCj4gLQkmZGV2 X2F0dHJfaHdfc2VjdG9yX3NpemUuYXR0ciwKPiAtCSZkZXZfYXR0cl9vb2Jfc2VjdG9yX3NpemUu YXR0ciwKPiAtCSZkZXZfYXR0cl9wcm9nX3R5cC5hdHRyLAo+IC0JJmRldl9hdHRyX3Byb2dfbWF4 LmF0dHIsCj4gLQkmZGV2X2F0dHJfZXJhc2VfdHlwLmF0dHIsCj4gLQkmZGV2X2F0dHJfZXJhc2Vf bWF4LmF0dHIsCj4gLQkmZGV2X2F0dHJfbXVsdGlwbGFuZV9tb2Rlcy5hdHRyLAo+IC0JJmRldl9h dHRyX21lZGlhX2NhcGFiaWxpdGllcy5hdHRyLAo+IC0JJmRldl9hdHRyX21heF9waHlzX3NlY3Mu YXR0ciwKPiAtCj4gLQkvKiAyLjAgYXR0cnMgKi8KPiAtCSZkZXZfYXR0cl9ncm91cHMuYXR0ciwK PiAtCSZkZXZfYXR0cl9wdW5pdHMuYXR0ciwKPiAtCSZkZXZfYXR0cl9jaHVua3MuYXR0ciwKPiAt CSZkZXZfYXR0cl9jbGJhLmF0dHIsCj4gLQkmZGV2X2F0dHJfd3NfbWluLmF0dHIsCj4gLQkmZGV2 X2F0dHJfd3Nfb3B0LmF0dHIsCj4gLQkmZGV2X2F0dHJfbWF4b2MuYXR0ciwKPiAtCSZkZXZfYXR0 cl9tYXhvY3B1LmF0dHIsCj4gLQkmZGV2X2F0dHJfbXdfY3VuaXRzLmF0dHIsCj4gLQo+IC0JJmRl dl9hdHRyX3dyaXRlX3R5cC5hdHRyLAo+IC0JJmRldl9hdHRyX3dyaXRlX21heC5hdHRyLAo+IC0J JmRldl9hdHRyX3Jlc2V0X3R5cC5hdHRyLAo+IC0JJmRldl9hdHRyX3Jlc2V0X21heC5hdHRyLAo+ IC0KPiAtCU5VTEwsCj4gLX07Cj4gLQo+IC1zdGF0aWMgdW1vZGVfdCBudm1fZGV2X2F0dHJzX3Zp c2libGUoc3RydWN0IGtvYmplY3QgKmtvYmosCj4gLQkJCQkgICAgIHN0cnVjdCBhdHRyaWJ1dGUg KmF0dHIsIGludCBpbmRleCkKPiAtewo+IC0Jc3RydWN0IGRldmljZSAqZGV2ID0ga29ial90b19k ZXYoa29iaik7Cj4gLQlzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGRldl90b19kaXNrKGRldik7Cj4g LQlzdHJ1Y3QgbnZtZV9ucyAqbnMgPSBkaXNrLT5wcml2YXRlX2RhdGE7Cj4gLQlzdHJ1Y3QgbnZt X2RldiAqbmRldiA9IG5zLT5uZGV2Owo+IC0Jc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldl9h dHRyID0KPiAtCQljb250YWluZXJfb2YoYXR0ciwgdHlwZW9mKCpkZXZfYXR0ciksIGF0dHIpOwo+ IC0KPiAtCWlmICghbmRldikKPiAtCQlyZXR1cm4gMDsKPiAtCj4gLQlpZiAoZGV2X2F0dHItPnNo b3cgPT0gbnZtX2Rldl9hdHRyX3Nob3cpCj4gLQkJcmV0dXJuIGF0dHItPm1vZGU7Cj4gLQo+IC0J c3dpdGNoIChuZGV2LT5nZW8ubWFqb3JfdmVyX2lkKSB7Cj4gLQljYXNlIDE6Cj4gLQkJaWYgKGRl dl9hdHRyLT5zaG93ID09IG52bV9kZXZfYXR0cl9zaG93XzEyKQo+IC0JCQlyZXR1cm4gYXR0ci0+ bW9kZTsKPiAtCQlicmVhazsKPiAtCWNhc2UgMjoKPiAtCQlpZiAoZGV2X2F0dHItPnNob3cgPT0g bnZtX2Rldl9hdHRyX3Nob3dfMjApCj4gLQkJCXJldHVybiBhdHRyLT5tb2RlOwo+IC0JCWJyZWFr Owo+IC0JfQo+IC0KPiAtCXJldHVybiAwOwo+IC19Cj4gLQo+IC1jb25zdCBzdHJ1Y3QgYXR0cmli dXRlX2dyb3VwIG52bWVfbnZtX2F0dHJfZ3JvdXAgPSB7Cj4gLQkubmFtZQkJPSAibGlnaHRudm0i LAo+IC0JLmF0dHJzCQk9IG52bV9kZXZfYXR0cnMsCj4gLQkuaXNfdmlzaWJsZQk9IG52bV9kZXZf YXR0cnNfdmlzaWJsZSwKPiAtfTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL2hvc3QvbnZt ZS5oIGIvZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oCj4gaW5kZXggMjY1MTE3OTQ2MjliLi41N2Qy YWMwMGE2YmQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oCj4gKysrIGIv ZHJpdmVycy9udm1lL2hvc3QvbnZtZS5oCj4gQEAgLTExLDcgKzExLDYgQEAKPiAgICNpbmNsdWRl IDxsaW51eC9wY2kuaD4KPiAgICNpbmNsdWRlIDxsaW51eC9rcmVmLmg+Cj4gICAjaW5jbHVkZSA8 bGludXgvYmxrLW1xLmg+Cj4gLSNpbmNsdWRlIDxsaW51eC9saWdodG52bS5oPgo+ICAgI2luY2x1 ZGUgPGxpbnV4L3NlZC1vcGFsLmg+Cj4gICAjaW5jbHVkZSA8bGludXgvZmF1bHQtaW5qZWN0Lmg+ Cj4gICAjaW5jbHVkZSA8bGludXgvcmN1cGRhdGUuaD4KPiBAQCAtOTIsMTEgKzkxLDYgQEAgZW51 bSBudm1lX3F1aXJrcyB7Cj4gICAJICovCj4gICAJTlZNRV9RVUlSS19OT19ERUVQRVNUX1BTCQk9 ICgxIDw8IDUpLAo+ICAgCj4gLQkvKgo+IC0JICogU3VwcG9ydHMgdGhlIExpZ2hOVk0gY29tbWFu ZCBzZXQgaWYgaW5kaWNhdGVkIGluIHZzWzFdLgo+IC0JICovCj4gLQlOVk1FX1FVSVJLX0xJR0hU TlZNCQkJPSAoMSA8PCA2KSwKPiAtCj4gICAJLyoKPiAgIAkgKiBTZXQgTUVESVVNIHByaW9yaXR5 IG9uIFNRIGNyZWF0aW9uCj4gICAJICovCj4gQEAgLTg2OCwyNiArODYyLDYgQEAgc3RhdGljIGlu bGluZSBpbnQgbnZtZV91cGRhdGVfem9uZV9pbmZvKHN0cnVjdCBudm1lX25zICpucywgdW5zaWdu ZWQgbGJhZikKPiAgIH0KPiAgICNlbmRpZgo+ICAgCj4gLSNpZmRlZiBDT05GSUdfTlZNCj4gLWlu dCBudm1lX252bV9yZWdpc3RlcihzdHJ1Y3QgbnZtZV9ucyAqbnMsIGNoYXIgKmRpc2tfbmFtZSwg aW50IG5vZGUpOwo+IC12b2lkIG52bWVfbnZtX3VucmVnaXN0ZXIoc3RydWN0IG52bWVfbnMgKm5z KTsKPiAtZXh0ZXJuIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbnZtZV9udm1fYXR0cl9n cm91cDsKPiAtaW50IG52bWVfbnZtX2lvY3RsKHN0cnVjdCBudm1lX25zICpucywgdW5zaWduZWQg aW50IGNtZCwgdm9pZCBfX3VzZXIgKmFyZ3ApOwo+IC0jZWxzZQo+IC1zdGF0aWMgaW5saW5lIGlu dCBudm1lX252bV9yZWdpc3RlcihzdHJ1Y3QgbnZtZV9ucyAqbnMsIGNoYXIgKmRpc2tfbmFtZSwK PiAtCQkJCSAgICBpbnQgbm9kZSkKPiAtewo+IC0JcmV0dXJuIDA7Cj4gLX0KPiAtCj4gLXN0YXRp YyBpbmxpbmUgdm9pZCBudm1lX252bV91bnJlZ2lzdGVyKHN0cnVjdCBudm1lX25zICpucykge307 Cj4gLXN0YXRpYyBpbmxpbmUgaW50IG52bWVfbnZtX2lvY3RsKHN0cnVjdCBudm1lX25zICpucywg dW5zaWduZWQgaW50IGNtZCwKPiAtCQl2b2lkIF9fdXNlciAqYXJncCkKPiAtewo+IC0JcmV0dXJu IC1FTk9UVFk7Cj4gLX0KPiAtI2VuZGlmIC8qIENPTkZJR19OVk0gKi8KPiAtCj4gICBzdGF0aWMg aW5saW5lIHN0cnVjdCBudm1lX25zICpudm1lX2dldF9uc19mcm9tX2RldihzdHJ1Y3QgZGV2aWNl ICpkZXYpCj4gICB7Cj4gICAJcmV0dXJuIGRldl90b19kaXNrKGRldiktPnByaXZhdGVfZGF0YTsK PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL2hvc3QvcGNpLmMgYi9kcml2ZXJzL252bWUvaG9z dC9wY2kuYwo+IGluZGV4IDQyZDRjYmUzMWEyOC4uYjgyNDkyY2Q3NTAzIDEwMDY0NAo+IC0tLSBh L2RyaXZlcnMvbnZtZS9ob3N0L3BjaS5jCj4gKysrIGIvZHJpdmVycy9udm1lL2hvc3QvcGNpLmMK PiBAQCAtMzMzNiwxMiArMzMzNiw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9p ZCBudm1lX2lkX3RhYmxlW10gPSB7Cj4gICAJeyBQQ0lfREVWSUNFKDB4MWI0YiwgMHgxMDkyKSwJ LyogTGV4YXIgMjU2IEdCIFNTRCAqLwo+ICAgCQkuZHJpdmVyX2RhdGEgPSBOVk1FX1FVSVJLX05P X05TX0RFU0NfTElTVCB8Cj4gICAJCQkJTlZNRV9RVUlSS19JR05PUkVfREVWX1NVQk5RTiwgfSwK PiAtCXsgUENJX0RFVklDRSgweDFkMWQsIDB4MWYxZiksCS8qIExpZ2hOVk0gcWVtdSBkZXZpY2Ug Ki8KPiAtCQkuZHJpdmVyX2RhdGEgPSBOVk1FX1FVSVJLX0xJR0hUTlZNLCB9LAo+IC0JeyBQQ0lf REVWSUNFKDB4MWQxZCwgMHgyODA3KSwJLyogQ05FWCBXTCAqLwo+IC0JCS5kcml2ZXJfZGF0YSA9 IE5WTUVfUVVJUktfTElHSFROVk0sIH0sCj4gLQl7IFBDSV9ERVZJQ0UoMHgxZDFkLCAweDI2MDEp LAkvKiBDTkVYIEdyYW5ieSAqLwo+IC0JCS5kcml2ZXJfZGF0YSA9IE5WTUVfUVVJUktfTElHSFRO Vk0sIH0sCj4gICAJeyBQQ0lfREVWSUNFKDB4MTBlYywgMHg1NzYyKSwgICAvKiBBREFUQSBTWDYw MDBMTlAgKi8KPiAgIAkJLmRyaXZlcl9kYXRhID0gTlZNRV9RVUlSS19JR05PUkVfREVWX1NVQk5R TiwgfSwKPiAgIAl7IFBDSV9ERVZJQ0UoMHgxY2MxLCAweDgyMDEpLCAgIC8qIEFEQVRBIFNYODIw MFBOUCA1MTJHQiAqLwo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xpZ2h0bnZtLmggYi9p bmNsdWRlL2xpbnV4L2xpZ2h0bnZtLmgKPiBkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRl eCAwOTA4YWJkYTljMWIuLjAwMDAwMDAwMDAwMAo+IC0tLSBhL2luY2x1ZGUvbGludXgvbGlnaHRu dm0uaAo+ICsrKyAvZGV2L251bGwKPiBAQCAtMSw2OTcgKzAsMCBAQAo+IC0vKiBTUERYLUxpY2Vu c2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLwo+IC0jaWZuZGVmIE5WTV9ICj4gLSNkZWZpbmUgTlZN X0gKPiAtCj4gLSNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KPiAtI2luY2x1ZGUgPGxpbnV4L3R5 cGVzLmg+Cj4gLSNpbmNsdWRlIDx1YXBpL2xpbnV4L2xpZ2h0bnZtLmg+Cj4gLQo+IC1lbnVtIHsK PiAtCU5WTV9JT19PSyA9IDAsCj4gLQlOVk1fSU9fUkVRVUVVRSA9IDEsCj4gLQlOVk1fSU9fRE9O RSA9IDIsCj4gLQlOVk1fSU9fRVJSID0gMywKPiAtCj4gLQlOVk1fSU9UWVBFX05PTkUgPSAwLAo+ IC0JTlZNX0lPVFlQRV9HQyA9IDEsCj4gLX07Cj4gLQo+IC0vKiBjb21tb24gZm9ybWF0ICovCj4g LSNkZWZpbmUgTlZNX0dFTl9DSF9CSVRTICAoOCkKPiAtI2RlZmluZSBOVk1fR0VOX0xVTl9CSVRT ICg4KQo+IC0jZGVmaW5lIE5WTV9HRU5fQkxLX0JJVFMgKDE2KQo+IC0jZGVmaW5lIE5WTV9HRU5f UkVTRVJWRUQgKDMyKQo+IC0KPiAtLyogMS4yIGZvcm1hdCAqLwo+IC0jZGVmaW5lIE5WTV8xMl9Q R19CSVRTICAoMTYpCj4gLSNkZWZpbmUgTlZNXzEyX1BMX0JJVFMgICg0KQo+IC0jZGVmaW5lIE5W TV8xMl9TRUNfQklUUyAoNCkKPiAtI2RlZmluZSBOVk1fMTJfUkVTRVJWRUQgKDgpCj4gLQo+IC0v KiAyLjAgZm9ybWF0ICovCj4gLSNkZWZpbmUgTlZNXzIwX1NFQ19CSVRTICgyNCkKPiAtI2RlZmlu ZSBOVk1fMjBfUkVTRVJWRUQgKDgpCj4gLQo+IC1lbnVtIHsKPiAtCU5WTV9PQ1NTRF9TUEVDXzEy ID0gMTIsCj4gLQlOVk1fT0NTU0RfU1BFQ18yMCA9IDIwLAo+IC19Owo+IC0KPiAtc3RydWN0IHBw YV9hZGRyIHsKPiAtCS8qIEdlbmVyaWMgc3RydWN0dXJlIGZvciBhbGwgYWRkcmVzc2VzICovCj4g LQl1bmlvbiB7Cj4gLQkJLyogZ2VuZXJpYyBkZXZpY2UgZm9ybWF0ICovCj4gLQkJc3RydWN0IHsK PiAtCQkJdTY0IGNoCQk6IE5WTV9HRU5fQ0hfQklUUzsKPiAtCQkJdTY0IGx1bgkJOiBOVk1fR0VO X0xVTl9CSVRTOwo+IC0JCQl1NjQgYmxrCQk6IE5WTV9HRU5fQkxLX0JJVFM7Cj4gLQkJCXU2NCBy ZXNlcnZlZAk6IE5WTV9HRU5fUkVTRVJWRUQ7Cj4gLQkJfSBhOwo+IC0KPiAtCQkvKiAxLjIgZGV2 aWNlIGZvcm1hdCAqLwo+IC0JCXN0cnVjdCB7Cj4gLQkJCXU2NCBjaAkJOiBOVk1fR0VOX0NIX0JJ VFM7Cj4gLQkJCXU2NCBsdW4JCTogTlZNX0dFTl9MVU5fQklUUzsKPiAtCQkJdTY0IGJsawkJOiBO Vk1fR0VOX0JMS19CSVRTOwo+IC0JCQl1NjQgcGcJCTogTlZNXzEyX1BHX0JJVFM7Cj4gLQkJCXU2 NCBwbAkJOiBOVk1fMTJfUExfQklUUzsKPiAtCQkJdTY0IHNlYwkJOiBOVk1fMTJfU0VDX0JJVFM7 Cj4gLQkJCXU2NCByZXNlcnZlZAk6IE5WTV8xMl9SRVNFUlZFRDsKPiAtCQl9IGc7Cj4gLQo+IC0J CS8qIDIuMCBkZXZpY2UgZm9ybWF0ICovCj4gLQkJc3RydWN0IHsKPiAtCQkJdTY0IGdycAkJOiBO Vk1fR0VOX0NIX0JJVFM7Cj4gLQkJCXU2NCBwdQkJOiBOVk1fR0VOX0xVTl9CSVRTOwo+IC0JCQl1 NjQgY2hrCQk6IE5WTV9HRU5fQkxLX0JJVFM7Cj4gLQkJCXU2NCBzZWMJCTogTlZNXzIwX1NFQ19C SVRTOwo+IC0JCQl1NjQgcmVzZXJ2ZWQJOiBOVk1fMjBfUkVTRVJWRUQ7Cj4gLQkJfSBtOwo+IC0K PiAtCQlzdHJ1Y3Qgewo+IC0JCQl1NjQgbGluZQk6IDYzOwo+IC0JCQl1NjQgaXNfY2FjaGVkCTog MTsKPiAtCQl9IGM7Cj4gLQo+IC0JCXU2NCBwcGE7Cj4gLQl9Owo+IC19Owo+IC0KPiAtc3RydWN0 IG52bV9ycTsKPiAtc3RydWN0IG52bV9pZDsKPiAtc3RydWN0IG52bV9kZXY7Cj4gLXN0cnVjdCBu dm1fdGd0X2RldjsKPiAtc3RydWN0IG52bV9jaGtfbWV0YTsKPiAtCj4gLXR5cGVkZWYgaW50IChu dm1faWRfZm4pKHN0cnVjdCBudm1fZGV2ICopOwo+IC10eXBlZGVmIGludCAobnZtX29wX2JiX3Ri bF9mbikoc3RydWN0IG52bV9kZXYgKiwgc3RydWN0IHBwYV9hZGRyLCB1OCAqKTsKPiAtdHlwZWRl ZiBpbnQgKG52bV9vcF9zZXRfYmJfZm4pKHN0cnVjdCBudm1fZGV2ICosIHN0cnVjdCBwcGFfYWRk ciAqLCBpbnQsIGludCk7Cj4gLXR5cGVkZWYgaW50IChudm1fZ2V0X2Noa19tZXRhX2ZuKShzdHJ1 Y3QgbnZtX2RldiAqLCBzZWN0b3JfdCwgaW50LAo+IC0JCQkJCQkJc3RydWN0IG52bV9jaGtfbWV0 YSAqKTsKPiAtdHlwZWRlZiBpbnQgKG52bV9zdWJtaXRfaW9fZm4pKHN0cnVjdCBudm1fZGV2ICos IHN0cnVjdCBudm1fcnEgKiwgdm9pZCAqKTsKPiAtdHlwZWRlZiB2b2lkICoobnZtX2NyZWF0ZV9k bWFfcG9vbF9mbikoc3RydWN0IG52bV9kZXYgKiwgY2hhciAqLCBpbnQpOwo+IC10eXBlZGVmIHZv aWQgKG52bV9kZXN0cm95X2RtYV9wb29sX2ZuKSh2b2lkICopOwo+IC10eXBlZGVmIHZvaWQgKihu dm1fZGV2X2RtYV9hbGxvY19mbikoc3RydWN0IG52bV9kZXYgKiwgdm9pZCAqLCBnZnBfdCwKPiAt CQkJCQkJCQlkbWFfYWRkcl90ICopOwo+IC10eXBlZGVmIHZvaWQgKG52bV9kZXZfZG1hX2ZyZWVf Zm4pKHZvaWQgKiwgdm9pZCosIGRtYV9hZGRyX3QpOwo+IC0KPiAtc3RydWN0IG52bV9kZXZfb3Bz IHsKPiAtCW52bV9pZF9mbgkJKmlkZW50aXR5Owo+IC0JbnZtX29wX2JiX3RibF9mbgkqZ2V0X2Ji X3RibDsKPiAtCW52bV9vcF9zZXRfYmJfZm4JKnNldF9iYl90Ymw7Cj4gLQo+IC0JbnZtX2dldF9j aGtfbWV0YV9mbgkqZ2V0X2Noa19tZXRhOwo+IC0KPiAtCW52bV9zdWJtaXRfaW9fZm4JKnN1Ym1p dF9pbzsKPiAtCj4gLQludm1fY3JlYXRlX2RtYV9wb29sX2ZuCSpjcmVhdGVfZG1hX3Bvb2w7Cj4g LQludm1fZGVzdHJveV9kbWFfcG9vbF9mbgkqZGVzdHJveV9kbWFfcG9vbDsKPiAtCW52bV9kZXZf ZG1hX2FsbG9jX2ZuCSpkZXZfZG1hX2FsbG9jOwo+IC0JbnZtX2Rldl9kbWFfZnJlZV9mbgkqZGV2 X2RtYV9mcmVlOwo+IC19Owo+IC0KPiAtI2lmZGVmIENPTkZJR19OVk0KPiAtCj4gLSNpbmNsdWRl IDxsaW51eC9maWxlLmg+Cj4gLSNpbmNsdWRlIDxsaW51eC9kbWFwb29sLmg+Cj4gLQo+IC1lbnVt IHsKPiAtCS8qIEhXIFJlc3BvbnNpYmlsaXRpZXMgKi8KPiAtCU5WTV9SU1BfTDJQCT0gMSA8PCAw LAo+IC0JTlZNX1JTUF9FQ0MJPSAxIDw8IDEsCj4gLQo+IC0JLyogUGh5c2ljYWwgQWRyZXNzaW5n IE1vZGUgKi8KPiAtCU5WTV9BRERSTU9ERV9MSU5FQVIJPSAwLAo+IC0JTlZNX0FERFJNT0RFX0NI QU5ORUwJPSAxLAo+IC0KPiAtCS8qIFBsYW5lIHByb2dyYW1taW5nIG1vZGUgZm9yIExVTiAqLwo+ IC0JTlZNX1BMQU5FX1NJTkdMRQk9IDEsCj4gLQlOVk1fUExBTkVfRE9VQkxFCT0gMiwKPiAtCU5W TV9QTEFORV9RVUFECQk9IDQsCj4gLQo+IC0JLyogU3RhdHVzIGNvZGVzICovCj4gLQlOVk1fUlNQ X1NVQ0NFU1MJCT0gMHgwLAo+IC0JTlZNX1JTUF9OT1RfQ0hBTkdFQUJMRQk9IDB4MSwKPiAtCU5W TV9SU1BfRVJSX0ZBSUxXUklURQk9IDB4NDBmZiwKPiAtCU5WTV9SU1BfRVJSX0VNUFRZUEFHRQk9 IDB4NDJmZiwKPiAtCU5WTV9SU1BfRVJSX0ZBSUxFQ0MJPSAweDQyODEsCj4gLQlOVk1fUlNQX0VS Ul9GQUlMQ1JDCT0gMHg0MDA0LAo+IC0JTlZNX1JTUF9XQVJOX0hJR0hFQ0MJPSAweDQ3MDAsCj4g LQo+IC0JLyogRGV2aWNlIG9wY29kZXMgKi8KPiAtCU5WTV9PUF9QV1JJVEUJCT0gMHg5MSwKPiAt CU5WTV9PUF9QUkVBRAkJPSAweDkyLAo+IC0JTlZNX09QX0VSQVNFCQk9IDB4OTAsCj4gLQo+IC0J LyogUFBBIENvbW1hbmQgRmxhZ3MgKi8KPiAtCU5WTV9JT19TTkdMX0FDQ0VTUwk9IDB4MCwKPiAt CU5WTV9JT19EVUFMX0FDQ0VTUwk9IDB4MSwKPiAtCU5WTV9JT19RVUFEX0FDQ0VTUwk9IDB4MiwK PiAtCj4gLQkvKiBOQU5EIEFjY2VzcyBNb2RlcyAqLwo+IC0JTlZNX0lPX1NVU1BFTkQJCT0gMHg4 MCwKPiAtCU5WTV9JT19TTENfTU9ERQkJPSAweDEwMCwKPiAtCU5WTV9JT19TQ1JBTUJMRV9FTkFC TEUJPSAweDIwMCwKPiAtCj4gLQkvKiBCbG9jayBUeXBlcyAqLwo+IC0JTlZNX0JMS19UX0ZSRUUJ CT0gMHgwLAo+IC0JTlZNX0JMS19UX0JBRAkJPSAweDEsCj4gLQlOVk1fQkxLX1RfR1JXTl9CQUQJ PSAweDIsCj4gLQlOVk1fQkxLX1RfREVWCQk9IDB4NCwKPiAtCU5WTV9CTEtfVF9IT1NUCQk9IDB4 OCwKPiAtCj4gLQkvKiBNZW1vcnkgY2FwYWJpbGl0aWVzICovCj4gLQlOVk1fSURfQ0FQX1NMQwkJ PSAweDEsCj4gLQlOVk1fSURfQ0FQX0NNRF9TVVNQRU5ECT0gMHgyLAo+IC0JTlZNX0lEX0NBUF9T Q1JBTUJMRQk9IDB4NCwKPiAtCU5WTV9JRF9DQVBfRU5DUllQVAk9IDB4OCwKPiAtCj4gLQkvKiBN ZW1vcnkgdHlwZXMgKi8KPiAtCU5WTV9JRF9GTVRZUEVfU0xDCT0gMCwKPiAtCU5WTV9JRF9GTVRZ UEVfTUxDCT0gMSwKPiAtCj4gLQkvKiBEZXZpY2UgY2FwYWJpbGl0aWVzICovCj4gLQlOVk1fSURf RENBUF9CQkxLTUdNVAk9IDB4MSwKPiAtCU5WTV9VRF9EQ0FQX0VDQwkJPSAweDIsCj4gLX07Cj4g LQo+IC1zdHJ1Y3QgbnZtX2lkX2xwX21sYyB7Cj4gLQl1MTYJbnVtX3BhaXJzOwo+IC0JdTgJcGFp cnNbODg2XTsKPiAtfTsKPiAtCj4gLXN0cnVjdCBudm1faWRfbHBfdGJsIHsKPiAtCV9fdTgJaWRb OF07Cj4gLQlzdHJ1Y3QgbnZtX2lkX2xwX21sYyBtbGM7Cj4gLX07Cj4gLQo+IC1zdHJ1Y3QgbnZt X2FkZHJmXzEyIHsKPiAtCXU4CWNoX2xlbjsKPiAtCXU4CWx1bl9sZW47Cj4gLQl1OAlibGtfbGVu Owo+IC0JdTgJcGdfbGVuOwo+IC0JdTgJcGxuX2xlbjsKPiAtCXU4CXNlY19sZW47Cj4gLQo+IC0J dTgJY2hfb2Zmc2V0Owo+IC0JdTgJbHVuX29mZnNldDsKPiAtCXU4CWJsa19vZmZzZXQ7Cj4gLQl1 OAlwZ19vZmZzZXQ7Cj4gLQl1OAlwbG5fb2Zmc2V0Owo+IC0JdTgJc2VjX29mZnNldDsKPiAtCj4g LQl1NjQJY2hfbWFzazsKPiAtCXU2NAlsdW5fbWFzazsKPiAtCXU2NAlibGtfbWFzazsKPiAtCXU2 NAlwZ19tYXNrOwo+IC0JdTY0CXBsbl9tYXNrOwo+IC0JdTY0CXNlY19tYXNrOwo+IC19Owo+IC0K PiAtc3RydWN0IG52bV9hZGRyZiB7Cj4gLQl1OAljaF9sZW47Cj4gLQl1OAlsdW5fbGVuOwo+IC0J dTgJY2hrX2xlbjsKPiAtCXU4CXNlY19sZW47Cj4gLQl1OAlyc3ZfbGVuWzJdOwo+IC0KPiAtCXU4 CWNoX29mZnNldDsKPiAtCXU4CWx1bl9vZmZzZXQ7Cj4gLQl1OAljaGtfb2Zmc2V0Owo+IC0JdTgJ c2VjX29mZnNldDsKPiAtCXU4CXJzdl9vZmZbMl07Cj4gLQo+IC0JdTY0CWNoX21hc2s7Cj4gLQl1 NjQJbHVuX21hc2s7Cj4gLQl1NjQJY2hrX21hc2s7Cj4gLQl1NjQJc2VjX21hc2s7Cj4gLQl1NjQJ cnN2X21hc2tbMl07Cj4gLX07Cj4gLQo+IC1lbnVtIHsKPiAtCS8qIENodW5rIHN0YXRlcyAqLwo+ IC0JTlZNX0NIS19TVF9GUkVFID0JMSA8PCAwLAo+IC0JTlZNX0NIS19TVF9DTE9TRUQgPQkxIDw8 IDEsCj4gLQlOVk1fQ0hLX1NUX09QRU4gPQkxIDw8IDIsCj4gLQlOVk1fQ0hLX1NUX09GRkxJTkUg PQkxIDw8IDMsCj4gLQo+IC0JLyogQ2h1bmsgdHlwZXMgKi8KPiAtCU5WTV9DSEtfVFBfV19TRVEg PQkxIDw8IDAsCj4gLQlOVk1fQ0hLX1RQX1dfUkFOID0JMSA8PCAxLAo+IC0JTlZNX0NIS19UUF9T Wl9TUEVDID0JMSA8PCA0LAo+IC19Owo+IC0KPiAtLyoKPiAtICogTm90ZTogVGhlIHN0cnVjdHVy ZSBzaXplIGlzIGxpbmtlZCB0byBudm1lX252bV9jaGtfbWV0YSBzdWNoIHRoYXQgdGhlIHNhbWUK PiAtICogYnVmZmVyIGNhbiBiZSB1c2VkIHdoZW4gY29udmVydGluZyBmcm9tIGxpdHRsZSBlbmRp YW4gdG8gY3B1IGFkZHJlc3NpbmcuCj4gLSAqLwo+IC1zdHJ1Y3QgbnZtX2Noa19tZXRhIHsKPiAt CXU4CXN0YXRlOwo+IC0JdTgJdHlwZTsKPiAtCXU4CXdpOwo+IC0JdTgJcnN2ZFs1XTsKPiAtCXU2 NAlzbGJhOwo+IC0JdTY0CWNubGI7Cj4gLQl1NjQJd3A7Cj4gLX07Cj4gLQo+IC1zdHJ1Y3QgbnZt X3RhcmdldCB7Cj4gLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Cj4gLQlzdHJ1Y3QgbnZtX3RndF9k ZXYgKmRldjsKPiAtCXN0cnVjdCBudm1fdGd0X3R5cGUgKnR5cGU7Cj4gLQlzdHJ1Y3QgZ2VuZGlz ayAqZGlzazsKPiAtfTsKPiAtCj4gLSNkZWZpbmUgQUREUl9FTVBUWSAofjBVTEwpCj4gLQo+IC0j ZGVmaW5lIE5WTV9UQVJHRVRfREVGQVVMVF9PUCAoMTAxKQo+IC0jZGVmaW5lIE5WTV9UQVJHRVRf TUlOX09QICgzKQo+IC0jZGVmaW5lIE5WTV9UQVJHRVRfTUFYX09QICg4MCkKPiAtCj4gLSNkZWZp bmUgTlZNX1ZFUlNJT05fTUFKT1IgMQo+IC0jZGVmaW5lIE5WTV9WRVJTSU9OX01JTk9SIDAKPiAt I2RlZmluZSBOVk1fVkVSU0lPTl9QQVRDSCAwCj4gLQo+IC0jZGVmaW5lIE5WTV9NQVhfVkxCQSAo NjQpIC8qIG1heCBsb2dpY2FsIGJsb2NrcyBpbiBhIHZlY3RvciBjb21tYW5kICovCj4gLQo+IC1z dHJ1Y3QgbnZtX3JxOwo+IC10eXBlZGVmIHZvaWQgKG52bV9lbmRfaW9fZm4pKHN0cnVjdCBudm1f cnEgKik7Cj4gLQo+IC1zdHJ1Y3QgbnZtX3JxIHsKPiAtCXN0cnVjdCBudm1fdGd0X2RldiAqZGV2 Owo+IC0KPiAtCXN0cnVjdCBiaW8gKmJpbzsKPiAtCj4gLQl1bmlvbiB7Cj4gLQkJc3RydWN0IHBw YV9hZGRyIHBwYV9hZGRyOwo+IC0JCWRtYV9hZGRyX3QgZG1hX3BwYV9saXN0Owo+IC0JfTsKPiAt Cj4gLQlzdHJ1Y3QgcHBhX2FkZHIgKnBwYV9saXN0Owo+IC0KPiAtCXZvaWQgKm1ldGFfbGlzdDsK PiAtCWRtYV9hZGRyX3QgZG1hX21ldGFfbGlzdDsKPiAtCj4gLQludm1fZW5kX2lvX2ZuICplbmRf aW87Cj4gLQo+IC0JdWludDhfdCBvcGNvZGU7Cj4gLQl1aW50MTZfdCBucl9wcGFzOwo+IC0JdWlu dDE2X3QgZmxhZ3M7Cj4gLQo+IC0JdTY0IHBwYV9zdGF0dXM7IC8qIHBwYSBtZWRpYSBzdGF0dXMg Ki8KPiAtCWludCBlcnJvcjsKPiAtCj4gLQlpbnQgaXNfc2VxOyAvKiBTZXF1ZW50aWFsIGhpbnQg ZmxhZy4gMS4yIG9ubHkgKi8KPiAtCj4gLQl2b2lkICpwcml2YXRlOwo+IC19Owo+IC0KPiAtc3Rh dGljIGlubGluZSBzdHJ1Y3QgbnZtX3JxICpudm1fcnFfZnJvbV9wZHUodm9pZCAqcGR1KQo+IC17 Cj4gLQlyZXR1cm4gcGR1IC0gc2l6ZW9mKHN0cnVjdCBudm1fcnEpOwo+IC19Cj4gLQo+IC1zdGF0 aWMgaW5saW5lIHZvaWQgKm52bV9ycV90b19wZHUoc3RydWN0IG52bV9ycSAqcnFkYXRhKQo+IC17 Cj4gLQlyZXR1cm4gcnFkYXRhICsgMTsKPiAtfQo+IC0KPiAtc3RhdGljIGlubGluZSBzdHJ1Y3Qg cHBhX2FkZHIgKm52bV9ycV90b19wcGFfbGlzdChzdHJ1Y3QgbnZtX3JxICpycWQpCj4gLXsKPiAt CXJldHVybiAocnFkLT5ucl9wcGFzID4gMSkgPyBycWQtPnBwYV9saXN0IDogJnJxZC0+cHBhX2Fk ZHI7Cj4gLX0KPiAtCj4gLWVudW0gewo+IC0JTlZNX0JMS19TVF9GUkVFID0JMHgxLAkvKiBGcmVl IGJsb2NrICovCj4gLQlOVk1fQkxLX1NUX1RHVCA9CTB4MiwJLyogQmxvY2sgaW4gdXNlIGJ5IHRh cmdldCAqLwo+IC0JTlZNX0JMS19TVF9CQUQgPQkweDgsCS8qIEJhZCBibG9jayAqLwo+IC19Owo+ IC0KPiAtLyogSW5zdGFuY2UgZ2VvbWV0cnkgKi8KPiAtc3RydWN0IG52bV9nZW8gewo+IC0JLyog ZGV2aWNlIHJlcG9ydGVkIHZlcnNpb24gKi8KPiAtCXU4CW1ham9yX3Zlcl9pZDsKPiAtCXU4CW1p bm9yX3Zlcl9pZDsKPiAtCj4gLQkvKiBrZXJuZWwgc2hvcnQgdmVyc2lvbiAqLwo+IC0JdTgJdmVy c2lvbjsKPiAtCj4gLQkvKiBpbnN0YW5jZSBzcGVjaWZpYyBnZW9tZXRyeSAqLwo+IC0JaW50IG51 bV9jaDsKPiAtCWludCBudW1fbHVuOwkJLyogcGVyIGNoYW5uZWwgKi8KPiAtCj4gLQkvKiBjYWxj dWxhdGVkIHZhbHVlcyAqLwo+IC0JaW50IGFsbF9sdW5zOwkJLyogYWNyb3NzIGNoYW5uZWxzICov Cj4gLQlpbnQgYWxsX2NodW5rczsJCS8qIGFjcm9zcyBjaGFubmVscyAqLwo+IC0KPiAtCWludCBv cDsJCQkvKiBvdmVyLXByb3Zpc2lvbiBpbiBpbnN0YW5jZSAqLwo+IC0KPiAtCXNlY3Rvcl90IHRv dGFsX3NlY3M7CS8qIGFjcm9zcyBjaGFubmVscyAqLwo+IC0KPiAtCS8qIGNodW5rIGdlb21ldHJ5 ICovCj4gLQl1MzIJbnVtX2NoazsJLyogY2h1bmtzIHBlciBsdW4gKi8KPiAtCXUzMgljbGJhOwkJ Lyogc2VjdG9ycyBwZXIgY2h1bmsgKi8KPiAtCXUxNgljc2VjczsJCS8qIHNlY3RvciBzaXplICov Cj4gLQl1MTYJc29zOwkJLyogb3V0LW9mLWJhbmQgYXJlYSBzaXplICovCj4gLQlib29sCWV4dDsJ CS8qIG1ldGFkYXRhIGluIGV4dGVuZGVkIGRhdGEgYnVmZmVyICovCj4gLQl1MzIJbWR0czsJCS8q IE1heCBkYXRhIHRyYW5zZmVyIHNpemUqLwo+IC0KPiAtCS8qIGRldmljZSB3cml0ZSBjb25zdHJh aW5zICovCj4gLQl1MzIJd3NfbWluOwkJLyogbWluaW11bSB3cml0ZSBzaXplICovCj4gLQl1MzIJ d3Nfb3B0OwkJLyogb3B0aW1hbCB3cml0ZSBzaXplICovCj4gLQl1MzIJbXdfY3VuaXRzOwkvKiBk aXN0YW5jZSByZXF1aXJlZCBmb3Igc3VjY2Vzc2Z1bCByZWFkICovCj4gLQl1MzIJbWF4b2M7CQkv KiBtYXhpbXVtIG9wZW4gY2h1bmtzICovCj4gLQl1MzIJbWF4b2NwdTsJLyogbWF4aW11bSBvcGVu IGNodW5rcyBwZXIgcGFyYWxsZWwgdW5pdCAqLwo+IC0KPiAtCS8qIGRldmljZSBjYXBhYmlsaXRp ZXMgKi8KPiAtCXUzMgltY2NhcDsKPiAtCj4gLQkvKiBkZXZpY2UgdGltaW5ncyAqLwo+IC0JdTMy CXRyZHQ7CQkvKiBBdmcuIFRyZWFkIChucykgKi8KPiAtCXUzMgl0cmRtOwkJLyogTWF4IFRyZWFk IChucykgKi8KPiAtCXUzMgl0cHJ0OwkJLyogQXZnLiBUcHJvZyAobnMpICovCj4gLQl1MzIJdHBy bTsJCS8qIE1heCBUcHJvZyAobnMpICovCj4gLQl1MzIJdGJldDsJCS8qIEF2Zy4gVGVyYXNlIChu cykgKi8KPiAtCXUzMgl0YmVtOwkJLyogTWF4IFRlcmFzZSAobnMpICovCj4gLQo+IC0JLyogZ2Vu ZXJpYyBhZGRyZXNzIGZvcm1hdCAqLwo+IC0Jc3RydWN0IG52bV9hZGRyZiBhZGRyZjsKPiAtCj4g LQkvKiAxLjIgY29tcGF0aWJpbGl0eSAqLwo+IC0JdTgJdm1udDsKPiAtCXUzMgljYXA7Cj4gLQl1 MzIJZG9tOwo+IC0KPiAtCXU4CW10eXBlOwo+IC0JdTgJZm10eXBlOwo+IC0KPiAtCXUxNgljcGFy Owo+IC0JdTMyCW1wb3M7Cj4gLQo+IC0JdTgJbnVtX3BsbjsKPiAtCXU4CXBsbl9tb2RlOwo+IC0J dTE2CW51bV9wZzsKPiAtCXUxNglmcGdfc3o7Cj4gLX07Cj4gLQo+IC0vKiBzdWItZGV2aWNlIHN0 cnVjdHVyZSAqLwo+IC1zdHJ1Y3QgbnZtX3RndF9kZXYgewo+IC0JLyogRGV2aWNlIGluZm9ybWF0 aW9uICovCj4gLQlzdHJ1Y3QgbnZtX2dlbyBnZW87Cj4gLQo+IC0JLyogQmFzZSBwcGFzIGZvciB0 YXJnZXQgTFVOcyAqLwo+IC0Jc3RydWN0IHBwYV9hZGRyICpsdW5zOwo+IC0KPiAtCXN0cnVjdCBy ZXF1ZXN0X3F1ZXVlICpxOwo+IC0KPiAtCXN0cnVjdCBudm1fZGV2ICpwYXJlbnQ7Cj4gLQl2b2lk ICptYXA7Cj4gLX07Cj4gLQo+IC1zdHJ1Y3QgbnZtX2RldiB7Cj4gLQlzdHJ1Y3QgbnZtX2Rldl9v cHMgKm9wczsKPiAtCj4gLQlzdHJ1Y3QgbGlzdF9oZWFkIGRldmljZXM7Cj4gLQo+IC0JLyogRGV2 aWNlIGluZm9ybWF0aW9uICovCj4gLQlzdHJ1Y3QgbnZtX2dlbyBnZW87Cj4gLQo+IC0JdW5zaWdu ZWQgbG9uZyAqbHVuX21hcDsKPiAtCXZvaWQgKmRtYV9wb29sOwo+IC0KPiAtCS8qIEJhY2tlbmQg ZGV2aWNlICovCj4gLQlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcTsKPiAtCWNoYXIgbmFtZVtESVNL X05BTUVfTEVOXTsKPiAtCXZvaWQgKnByaXZhdGVfZGF0YTsKPiAtCj4gLQlzdHJ1Y3Qga3JlZiBy ZWY7Cj4gLQl2b2lkICpybWFwOwo+IC0KPiAtCXN0cnVjdCBtdXRleCBtbG9jazsKPiAtCXNwaW5s b2NrX3QgbG9jazsKPiAtCj4gLQkvKiB0YXJnZXQgbWFuYWdlbWVudCAqLwo+IC0Jc3RydWN0IGxp c3RfaGVhZCBhcmVhX2xpc3Q7Cj4gLQlzdHJ1Y3QgbGlzdF9oZWFkIHRhcmdldHM7Cj4gLX07Cj4g LQo+IC1zdGF0aWMgaW5saW5lIHN0cnVjdCBwcGFfYWRkciBnZW5lcmljX3RvX2Rldl9hZGRyKHN0 cnVjdCBudm1fZGV2ICpkZXYsCj4gLQkJCQkJCSAgc3RydWN0IHBwYV9hZGRyIHIpCj4gLXsKPiAt CXN0cnVjdCBudm1fZ2VvICpnZW8gPSAmZGV2LT5nZW87Cj4gLQlzdHJ1Y3QgcHBhX2FkZHIgbDsK PiAtCj4gLQlpZiAoZ2VvLT52ZXJzaW9uID09IE5WTV9PQ1NTRF9TUEVDXzEyKSB7Cj4gLQkJc3Ry dWN0IG52bV9hZGRyZl8xMiAqcHBhZiA9IChzdHJ1Y3QgbnZtX2FkZHJmXzEyICopJmdlby0+YWRk cmY7Cj4gLQo+IC0JCWwucHBhID0gKCh1NjQpci5nLmNoKSA8PCBwcGFmLT5jaF9vZmZzZXQ7Cj4g LQkJbC5wcGEgfD0gKCh1NjQpci5nLmx1bikgPDwgcHBhZi0+bHVuX29mZnNldDsKPiAtCQlsLnBw YSB8PSAoKHU2NClyLmcuYmxrKSA8PCBwcGFmLT5ibGtfb2Zmc2V0Owo+IC0JCWwucHBhIHw9ICgo dTY0KXIuZy5wZykgPDwgcHBhZi0+cGdfb2Zmc2V0Owo+IC0JCWwucHBhIHw9ICgodTY0KXIuZy5w bCkgPDwgcHBhZi0+cGxuX29mZnNldDsKPiAtCQlsLnBwYSB8PSAoKHU2NClyLmcuc2VjKSA8PCBw cGFmLT5zZWNfb2Zmc2V0Owo+IC0JfSBlbHNlIHsKPiAtCQlzdHJ1Y3QgbnZtX2FkZHJmICpsYmFm ID0gJmdlby0+YWRkcmY7Cj4gLQo+IC0JCWwucHBhID0gKCh1NjQpci5tLmdycCkgPDwgbGJhZi0+ Y2hfb2Zmc2V0Owo+IC0JCWwucHBhIHw9ICgodTY0KXIubS5wdSkgPDwgbGJhZi0+bHVuX29mZnNl dDsKPiAtCQlsLnBwYSB8PSAoKHU2NClyLm0uY2hrKSA8PCBsYmFmLT5jaGtfb2Zmc2V0Owo+IC0J CWwucHBhIHw9ICgodTY0KXIubS5zZWMpIDw8IGxiYWYtPnNlY19vZmZzZXQ7Cj4gLQl9Cj4gLQo+ IC0JcmV0dXJuIGw7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbmxpbmUgc3RydWN0IHBwYV9hZGRyIGRl dl90b19nZW5lcmljX2FkZHIoc3RydWN0IG52bV9kZXYgKmRldiwKPiAtCQkJCQkJICBzdHJ1Y3Qg cHBhX2FkZHIgcikKPiAtewo+IC0Jc3RydWN0IG52bV9nZW8gKmdlbyA9ICZkZXYtPmdlbzsKPiAt CXN0cnVjdCBwcGFfYWRkciBsOwo+IC0KPiAtCWwucHBhID0gMDsKPiAtCj4gLQlpZiAoZ2VvLT52 ZXJzaW9uID09IE5WTV9PQ1NTRF9TUEVDXzEyKSB7Cj4gLQkJc3RydWN0IG52bV9hZGRyZl8xMiAq cHBhZiA9IChzdHJ1Y3QgbnZtX2FkZHJmXzEyICopJmdlby0+YWRkcmY7Cj4gLQo+IC0JCWwuZy5j aCA9IChyLnBwYSAmIHBwYWYtPmNoX21hc2spID4+IHBwYWYtPmNoX29mZnNldDsKPiAtCQlsLmcu bHVuID0gKHIucHBhICYgcHBhZi0+bHVuX21hc2spID4+IHBwYWYtPmx1bl9vZmZzZXQ7Cj4gLQkJ bC5nLmJsayA9IChyLnBwYSAmIHBwYWYtPmJsa19tYXNrKSA+PiBwcGFmLT5ibGtfb2Zmc2V0Owo+ IC0JCWwuZy5wZyA9IChyLnBwYSAmIHBwYWYtPnBnX21hc2spID4+IHBwYWYtPnBnX29mZnNldDsK PiAtCQlsLmcucGwgPSAoci5wcGEgJiBwcGFmLT5wbG5fbWFzaykgPj4gcHBhZi0+cGxuX29mZnNl dDsKPiAtCQlsLmcuc2VjID0gKHIucHBhICYgcHBhZi0+c2VjX21hc2spID4+IHBwYWYtPnNlY19v ZmZzZXQ7Cj4gLQl9IGVsc2Ugewo+IC0JCXN0cnVjdCBudm1fYWRkcmYgKmxiYWYgPSAmZ2VvLT5h ZGRyZjsKPiAtCj4gLQkJbC5tLmdycCA9IChyLnBwYSAmIGxiYWYtPmNoX21hc2spID4+IGxiYWYt PmNoX29mZnNldDsKPiAtCQlsLm0ucHUgPSAoci5wcGEgJiBsYmFmLT5sdW5fbWFzaykgPj4gbGJh Zi0+bHVuX29mZnNldDsKPiAtCQlsLm0uY2hrID0gKHIucHBhICYgbGJhZi0+Y2hrX21hc2spID4+ IGxiYWYtPmNoa19vZmZzZXQ7Cj4gLQkJbC5tLnNlYyA9IChyLnBwYSAmIGxiYWYtPnNlY19tYXNr KSA+PiBsYmFmLT5zZWNfb2Zmc2V0Owo+IC0JfQo+IC0KPiAtCXJldHVybiBsOwo+IC19Cj4gLQo+ IC1zdGF0aWMgaW5saW5lIHU2NCBkZXZfdG9fY2h1bmtfYWRkcihzdHJ1Y3QgbnZtX2RldiAqZGV2 LCB2b2lkICphZGRyZiwKPiAtCQkJCSAgICBzdHJ1Y3QgcHBhX2FkZHIgcCkKPiAtewo+IC0Jc3Ry dWN0IG52bV9nZW8gKmdlbyA9ICZkZXYtPmdlbzsKPiAtCXU2NCBjYWRkcjsKPiAtCj4gLQlpZiAo Z2VvLT52ZXJzaW9uID09IE5WTV9PQ1NTRF9TUEVDXzEyKSB7Cj4gLQkJc3RydWN0IG52bV9hZGRy Zl8xMiAqcHBhZiA9IChzdHJ1Y3QgbnZtX2FkZHJmXzEyICopYWRkcmY7Cj4gLQo+IC0JCWNhZGRy ID0gKHU2NClwLmcucGcgPDwgcHBhZi0+cGdfb2Zmc2V0Owo+IC0JCWNhZGRyIHw9ICh1NjQpcC5n LnBsIDw8IHBwYWYtPnBsbl9vZmZzZXQ7Cj4gLQkJY2FkZHIgfD0gKHU2NClwLmcuc2VjIDw8IHBw YWYtPnNlY19vZmZzZXQ7Cj4gLQl9IGVsc2Ugewo+IC0JCWNhZGRyID0gcC5tLnNlYzsKPiAtCX0K PiAtCj4gLQlyZXR1cm4gY2FkZHI7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbmxpbmUgc3RydWN0IHBw YV9hZGRyIG52bV9wcGEzMl90b19wcGE2NChzdHJ1Y3QgbnZtX2RldiAqZGV2LAo+IC0JCQkJCQkg dm9pZCAqYWRkcmYsIHUzMiBwcGEzMikKPiAtewo+IC0Jc3RydWN0IHBwYV9hZGRyIHBwYTY0Owo+ IC0KPiAtCXBwYTY0LnBwYSA9IDA7Cj4gLQo+IC0JaWYgKHBwYTMyID09IC0xKSB7Cj4gLQkJcHBh NjQucHBhID0gQUREUl9FTVBUWTsKPiAtCX0gZWxzZSBpZiAocHBhMzIgJiAoMVUgPDwgMzEpKSB7 Cj4gLQkJcHBhNjQuYy5saW5lID0gcHBhMzIgJiAoKH4wVSkgPj4gMSk7Cj4gLQkJcHBhNjQuYy5p c19jYWNoZWQgPSAxOwo+IC0JfSBlbHNlIHsKPiAtCQlzdHJ1Y3QgbnZtX2dlbyAqZ2VvID0gJmRl di0+Z2VvOwo+IC0KPiAtCQlpZiAoZ2VvLT52ZXJzaW9uID09IE5WTV9PQ1NTRF9TUEVDXzEyKSB7 Cj4gLQkJCXN0cnVjdCBudm1fYWRkcmZfMTIgKnBwYWYgPSBhZGRyZjsKPiAtCj4gLQkJCXBwYTY0 LmcuY2ggPSAocHBhMzIgJiBwcGFmLT5jaF9tYXNrKSA+Pgo+IC0JCQkJCQkJcHBhZi0+Y2hfb2Zm c2V0Owo+IC0JCQlwcGE2NC5nLmx1biA9IChwcGEzMiAmIHBwYWYtPmx1bl9tYXNrKSA+Pgo+IC0J CQkJCQkJcHBhZi0+bHVuX29mZnNldDsKPiAtCQkJcHBhNjQuZy5ibGsgPSAocHBhMzIgJiBwcGFm LT5ibGtfbWFzaykgPj4KPiAtCQkJCQkJCXBwYWYtPmJsa19vZmZzZXQ7Cj4gLQkJCXBwYTY0Lmcu cGcgPSAocHBhMzIgJiBwcGFmLT5wZ19tYXNrKSA+Pgo+IC0JCQkJCQkJcHBhZi0+cGdfb2Zmc2V0 Owo+IC0JCQlwcGE2NC5nLnBsID0gKHBwYTMyICYgcHBhZi0+cGxuX21hc2spID4+Cj4gLQkJCQkJ CQlwcGFmLT5wbG5fb2Zmc2V0Owo+IC0JCQlwcGE2NC5nLnNlYyA9IChwcGEzMiAmIHBwYWYtPnNl Y19tYXNrKSA+Pgo+IC0JCQkJCQkJcHBhZi0+c2VjX29mZnNldDsKPiAtCQl9IGVsc2Ugewo+IC0J CQlzdHJ1Y3QgbnZtX2FkZHJmICpsYmFmID0gYWRkcmY7Cj4gLQo+IC0JCQlwcGE2NC5tLmdycCA9 IChwcGEzMiAmIGxiYWYtPmNoX21hc2spID4+Cj4gLQkJCQkJCQlsYmFmLT5jaF9vZmZzZXQ7Cj4g LQkJCXBwYTY0Lm0ucHUgPSAocHBhMzIgJiBsYmFmLT5sdW5fbWFzaykgPj4KPiAtCQkJCQkJCWxi YWYtPmx1bl9vZmZzZXQ7Cj4gLQkJCXBwYTY0Lm0uY2hrID0gKHBwYTMyICYgbGJhZi0+Y2hrX21h c2spID4+Cj4gLQkJCQkJCQlsYmFmLT5jaGtfb2Zmc2V0Owo+IC0JCQlwcGE2NC5tLnNlYyA9IChw cGEzMiAmIGxiYWYtPnNlY19tYXNrKSA+Pgo+IC0JCQkJCQkJbGJhZi0+c2VjX29mZnNldDsKPiAt CQl9Cj4gLQl9Cj4gLQo+IC0JcmV0dXJuIHBwYTY0Owo+IC19Cj4gLQo+IC1zdGF0aWMgaW5saW5l IHUzMiBudm1fcHBhNjRfdG9fcHBhMzIoc3RydWN0IG52bV9kZXYgKmRldiwKPiAtCQkJCSAgICAg dm9pZCAqYWRkcmYsIHN0cnVjdCBwcGFfYWRkciBwcGE2NCkKPiAtewo+IC0JdTMyIHBwYTMyID0g MDsKPiAtCj4gLQlpZiAocHBhNjQucHBhID09IEFERFJfRU1QVFkpIHsKPiAtCQlwcGEzMiA9IH4w VTsKPiAtCX0gZWxzZSBpZiAocHBhNjQuYy5pc19jYWNoZWQpIHsKPiAtCQlwcGEzMiB8PSBwcGE2 NC5jLmxpbmU7Cj4gLQkJcHBhMzIgfD0gMVUgPDwgMzE7Cj4gLQl9IGVsc2Ugewo+IC0JCXN0cnVj dCBudm1fZ2VvICpnZW8gPSAmZGV2LT5nZW87Cj4gLQo+IC0JCWlmIChnZW8tPnZlcnNpb24gPT0g TlZNX09DU1NEX1NQRUNfMTIpIHsKPiAtCQkJc3RydWN0IG52bV9hZGRyZl8xMiAqcHBhZiA9IGFk ZHJmOwo+IC0KPiAtCQkJcHBhMzIgfD0gcHBhNjQuZy5jaCA8PCBwcGFmLT5jaF9vZmZzZXQ7Cj4g LQkJCXBwYTMyIHw9IHBwYTY0LmcubHVuIDw8IHBwYWYtPmx1bl9vZmZzZXQ7Cj4gLQkJCXBwYTMy IHw9IHBwYTY0LmcuYmxrIDw8IHBwYWYtPmJsa19vZmZzZXQ7Cj4gLQkJCXBwYTMyIHw9IHBwYTY0 LmcucGcgPDwgcHBhZi0+cGdfb2Zmc2V0Owo+IC0JCQlwcGEzMiB8PSBwcGE2NC5nLnBsIDw8IHBw YWYtPnBsbl9vZmZzZXQ7Cj4gLQkJCXBwYTMyIHw9IHBwYTY0Lmcuc2VjIDw8IHBwYWYtPnNlY19v ZmZzZXQ7Cj4gLQkJfSBlbHNlIHsKPiAtCQkJc3RydWN0IG52bV9hZGRyZiAqbGJhZiA9IGFkZHJm Owo+IC0KPiAtCQkJcHBhMzIgfD0gcHBhNjQubS5ncnAgPDwgbGJhZi0+Y2hfb2Zmc2V0Owo+IC0J CQlwcGEzMiB8PSBwcGE2NC5tLnB1IDw8IGxiYWYtPmx1bl9vZmZzZXQ7Cj4gLQkJCXBwYTMyIHw9 IHBwYTY0Lm0uY2hrIDw8IGxiYWYtPmNoa19vZmZzZXQ7Cj4gLQkJCXBwYTMyIHw9IHBwYTY0Lm0u c2VjIDw8IGxiYWYtPnNlY19vZmZzZXQ7Cj4gLQkJfQo+IC0JfQo+IC0KPiAtCXJldHVybiBwcGEz MjsKPiAtfQo+IC0KPiAtc3RhdGljIGlubGluZSBpbnQgbnZtX25leHRfcHBhX2luX2NoayhzdHJ1 Y3QgbnZtX3RndF9kZXYgKmRldiwKPiAtCQkJCSAgICAgIHN0cnVjdCBwcGFfYWRkciAqcHBhKQo+ IC17Cj4gLQlzdHJ1Y3QgbnZtX2dlbyAqZ2VvID0gJmRldi0+Z2VvOwo+IC0JaW50IGxhc3QgPSAw Owo+IC0KPiAtCWlmIChnZW8tPnZlcnNpb24gPT0gTlZNX09DU1NEX1NQRUNfMTIpIHsKPiAtCQlp bnQgc2VjID0gcHBhLT5nLnNlYzsKPiAtCj4gLQkJc2VjKys7Cj4gLQkJaWYgKHNlYyA9PSBnZW8t PndzX21pbikgewo+IC0JCQlpbnQgcGcgPSBwcGEtPmcucGc7Cj4gLQo+IC0JCQlzZWMgPSAwOwo+ IC0JCQlwZysrOwo+IC0JCQlpZiAocGcgPT0gZ2VvLT5udW1fcGcpIHsKPiAtCQkJCWludCBwbCA9 IHBwYS0+Zy5wbDsKPiAtCj4gLQkJCQlwZyA9IDA7Cj4gLQkJCQlwbCsrOwo+IC0JCQkJaWYgKHBs ID09IGdlby0+bnVtX3BsbikKPiAtCQkJCQlsYXN0ID0gMTsKPiAtCj4gLQkJCQlwcGEtPmcucGwg PSBwbDsKPiAtCQkJfQo+IC0JCQlwcGEtPmcucGcgPSBwZzsKPiAtCQl9Cj4gLQkJcHBhLT5nLnNl YyA9IHNlYzsKPiAtCX0gZWxzZSB7Cj4gLQkJcHBhLT5tLnNlYysrOwo+IC0JCWlmIChwcGEtPm0u c2VjID09IGdlby0+Y2xiYSkKPiAtCQkJbGFzdCA9IDE7Cj4gLQl9Cj4gLQo+IC0JcmV0dXJuIGxh c3Q7Cj4gLX0KPiAtCj4gLXR5cGVkZWYgc2VjdG9yX3QgKG52bV90Z3RfY2FwYWNpdHlfZm4pKHZv aWQgKik7Cj4gLXR5cGVkZWYgdm9pZCAqKG52bV90Z3RfaW5pdF9mbikoc3RydWN0IG52bV90Z3Rf ZGV2ICosIHN0cnVjdCBnZW5kaXNrICosCj4gLQkJCQlpbnQgZmxhZ3MpOwo+IC10eXBlZGVmIHZv aWQgKG52bV90Z3RfZXhpdF9mbikodm9pZCAqLCBib29sKTsKPiAtdHlwZWRlZiBpbnQgKG52bV90 Z3Rfc3lzZnNfaW5pdF9mbikoc3RydWN0IGdlbmRpc2sgKik7Cj4gLXR5cGVkZWYgdm9pZCAobnZt X3RndF9zeXNmc19leGl0X2ZuKShzdHJ1Y3QgZ2VuZGlzayAqKTsKPiAtCj4gLWVudW0gewo+IC0J TlZNX1RHVF9GX0RFVl9MMlAgPSAwLAo+IC0JTlZNX1RHVF9GX0hPU1RfTDJQID0gMSA8PCAwLAo+ IC19Owo+IC0KPiAtc3RydWN0IG52bV90Z3RfdHlwZSB7Cj4gLQljb25zdCBjaGFyICpuYW1lOwo+ IC0JdW5zaWduZWQgaW50IHZlcnNpb25bM107Cj4gLQlpbnQgZmxhZ3M7Cj4gLQo+IC0JLyogdGFy Z2V0IGVudHJ5IHBvaW50cyAqLwo+IC0JY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRp b25zICpib3BzOwo+IC0JbnZtX3RndF9jYXBhY2l0eV9mbiAqY2FwYWNpdHk7Cj4gLQo+IC0JLyog bW9kdWxlLXNwZWNpZmljIGluaXQvdGVhcmRvd24gKi8KPiAtCW52bV90Z3RfaW5pdF9mbiAqaW5p dDsKPiAtCW52bV90Z3RfZXhpdF9mbiAqZXhpdDsKPiAtCj4gLQkvKiBzeXNmcyAqLwo+IC0JbnZt X3RndF9zeXNmc19pbml0X2ZuICpzeXNmc19pbml0Owo+IC0JbnZtX3RndF9zeXNmc19leGl0X2Zu ICpzeXNmc19leGl0Owo+IC0KPiAtCS8qIEZvciBpbnRlcm5hbCB1c2UgKi8KPiAtCXN0cnVjdCBs aXN0X2hlYWQgbGlzdDsKPiAtCXN0cnVjdCBtb2R1bGUgKm93bmVyOwo+IC19Owo+IC0KPiAtZXh0 ZXJuIGludCBudm1fcmVnaXN0ZXJfdGd0X3R5cGUoc3RydWN0IG52bV90Z3RfdHlwZSAqKTsKPiAt ZXh0ZXJuIHZvaWQgbnZtX3VucmVnaXN0ZXJfdGd0X3R5cGUoc3RydWN0IG52bV90Z3RfdHlwZSAq KTsKPiAtCj4gLWV4dGVybiB2b2lkICpudm1fZGV2X2RtYV9hbGxvYyhzdHJ1Y3QgbnZtX2RldiAq LCBnZnBfdCwgZG1hX2FkZHJfdCAqKTsKPiAtZXh0ZXJuIHZvaWQgbnZtX2Rldl9kbWFfZnJlZShz dHJ1Y3QgbnZtX2RldiAqLCB2b2lkICosIGRtYV9hZGRyX3QpOwo+IC0KPiAtZXh0ZXJuIHN0cnVj dCBudm1fZGV2ICpudm1fYWxsb2NfZGV2KGludCk7Cj4gLWV4dGVybiBpbnQgbnZtX3JlZ2lzdGVy KHN0cnVjdCBudm1fZGV2ICopOwo+IC1leHRlcm4gdm9pZCBudm1fdW5yZWdpc3RlcihzdHJ1Y3Qg bnZtX2RldiAqKTsKPiAtCj4gLWV4dGVybiBpbnQgbnZtX2dldF9jaHVua19tZXRhKHN0cnVjdCBu dm1fdGd0X2RldiAqLCBzdHJ1Y3QgcHBhX2FkZHIsCj4gLQkJCSAgICAgIGludCwgc3RydWN0IG52 bV9jaGtfbWV0YSAqKTsKPiAtZXh0ZXJuIGludCBudm1fc2V0X2NodW5rX21ldGEoc3RydWN0IG52 bV90Z3RfZGV2ICosIHN0cnVjdCBwcGFfYWRkciAqLAo+IC0JCQkgICAgICBpbnQsIGludCk7Cj4g LWV4dGVybiBpbnQgbnZtX3N1Ym1pdF9pbyhzdHJ1Y3QgbnZtX3RndF9kZXYgKiwgc3RydWN0IG52 bV9ycSAqLCB2b2lkICopOwo+IC1leHRlcm4gaW50IG52bV9zdWJtaXRfaW9fc3luYyhzdHJ1Y3Qg bnZtX3RndF9kZXYgKiwgc3RydWN0IG52bV9ycSAqLCB2b2lkICopOwo+IC1leHRlcm4gdm9pZCBu dm1fZW5kX2lvKHN0cnVjdCBudm1fcnEgKik7Cj4gLQo+IC0jZWxzZSAvKiBDT05GSUdfTlZNICov Cj4gLXN0cnVjdCBudm1fZGV2X29wczsKPiAtCj4gLXN0YXRpYyBpbmxpbmUgc3RydWN0IG52bV9k ZXYgKm52bV9hbGxvY19kZXYoaW50IG5vZGUpCj4gLXsKPiAtCXJldHVybiBFUlJfUFRSKC1FSU5W QUwpOwo+IC19Cj4gLXN0YXRpYyBpbmxpbmUgaW50IG52bV9yZWdpc3RlcihzdHJ1Y3QgbnZtX2Rl diAqZGV2KQo+IC17Cj4gLQlyZXR1cm4gLUVJTlZBTDsKPiAtfQo+IC1zdGF0aWMgaW5saW5lIHZv aWQgbnZtX3VucmVnaXN0ZXIoc3RydWN0IG52bV9kZXYgKmRldikge30KPiAtI2VuZGlmIC8qIENP TkZJR19OVk0gKi8KPiAtI2VuZGlmIC8qIExJR0hUTlZNLkggKi8KPiBkaWZmIC0tZ2l0IGEvaW5j bHVkZS91YXBpL2xpbnV4L2xpZ2h0bnZtLmggYi9pbmNsdWRlL3VhcGkvbGludXgvbGlnaHRudm0u aAo+IGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDI3NDVhZmQ5YjhmYS4uMDAwMDAw MDAwMDAwCj4gLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2xpZ2h0bnZtLmgKPiArKysgL2Rldi9u dWxsCj4gQEAgLTEsMjI0ICswLDAgQEAKPiAtLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQ TC0yLjAgV0lUSCBMaW51eC1zeXNjYWxsLW5vdGUgKi8KPiAtLyoKPiAtICogQ29weXJpZ2h0IChD KSAyMDE1IENORVggTGFicy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCj4gLSAqCj4gLSAqIFRoaXMg cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK PiAtICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgdmVyc2lvbgo+IC0gKiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLgo+IC0gKgo+IC0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Cj4gLSAqIFdJVEhPVVQgQU5ZIFdB UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPiAtICogTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH TlUKPiAtICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+IC0gKgo+ IC0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZQo+IC0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxl IENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCj4gLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb24sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwKPiAtICogVVNBLgo+IC0g Ki8KPiAtCj4gLSNpZm5kZWYgX1VBUElfTElOVVhfTElHSFROVk1fSAo+IC0jZGVmaW5lIF9VQVBJ X0xJTlVYX0xJR0hUTlZNX0gKPiAtCj4gLSNpZmRlZiBfX0tFUk5FTF9fCj4gLSNpbmNsdWRlIDxs aW51eC9jb25zdC5oPgo+IC0jZWxzZSAvKiBfX0tFUk5FTF9fICovCj4gLSNpbmNsdWRlIDxzdGRp by5oPgo+IC0jaW5jbHVkZSA8c3lzL2lvY3RsLmg+Cj4gLSNkZWZpbmUgRElTS19OQU1FX0xFTiAz Mgo+IC0jZW5kaWYgLyogX19LRVJORUxfXyAqLwo+IC0KPiAtI2luY2x1ZGUgPGxpbnV4L3R5cGVz Lmg+Cj4gLSNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgo+IC0KPiAtI2RlZmluZSBOVk1fVFRZUEVf TkFNRV9NQVggNDgKPiAtI2RlZmluZSBOVk1fVFRZUEVfTUFYIDYzCj4gLSNkZWZpbmUgTlZNX01N VFlQRV9MRU4gOAo+IC0KPiAtI2RlZmluZSBOVk1fQ1RSTF9GSUxFICIvZGV2L2xpZ2h0bnZtL2Nv bnRyb2wiCj4gLQo+IC1zdHJ1Y3QgbnZtX2lvY3RsX2luZm9fdGd0IHsKPiAtCV9fdTMyIHZlcnNp b25bM107Cj4gLQlfX3UzMiByZXNlcnZlZDsKPiAtCWNoYXIgdGd0bmFtZVtOVk1fVFRZUEVfTkFN RV9NQVhdOwo+IC19Owo+IC0KPiAtc3RydWN0IG52bV9pb2N0bF9pbmZvIHsKPiAtCV9fdTMyIHZl cnNpb25bM107CS8qIGluL291dCAtIG1ham9yLCBtaW5vciwgcGF0Y2ggKi8KPiAtCV9fdTE2IHRn dHNpemU7CQkvKiBudW1iZXIgb2YgdGFyZ2V0cyAqLwo+IC0JX191MTYgcmVzZXJ2ZWQxNjsJLyog cGFkIHRvIDRLIHBhZ2UgKi8KPiAtCV9fdTMyIHJlc2VydmVkWzEyXTsKPiAtCXN0cnVjdCBudm1f aW9jdGxfaW5mb190Z3QgdGd0c1tOVk1fVFRZUEVfTUFYXTsKPiAtfTsKPiAtCj4gLWVudW0gewo+ IC0JTlZNX0RFVklDRV9BQ1RJVkUgPSAxIDw8IDAsCj4gLX07Cj4gLQo+IC1zdHJ1Y3QgbnZtX2lv Y3RsX2RldmljZV9pbmZvIHsKPiAtCWNoYXIgZGV2bmFtZVtESVNLX05BTUVfTEVOXTsKPiAtCWNo YXIgYm1uYW1lW05WTV9UVFlQRV9OQU1FX01BWF07Cj4gLQlfX3UzMiBibXZlcnNpb25bM107Cj4g LQlfX3UzMiBmbGFnczsKPiAtCV9fdTMyIHJlc2VydmVkWzhdOwo+IC19Owo+IC0KPiAtc3RydWN0 IG52bV9pb2N0bF9nZXRfZGV2aWNlcyB7Cj4gLQlfX3UzMiBucl9kZXZpY2VzOwo+IC0JX191MzIg cmVzZXJ2ZWRbMzFdOwo+IC0Jc3RydWN0IG52bV9pb2N0bF9kZXZpY2VfaW5mbyBpbmZvWzMxXTsK PiAtfTsKPiAtCj4gLXN0cnVjdCBudm1faW9jdGxfY3JlYXRlX3NpbXBsZSB7Cj4gLQlfX3UzMiBs dW5fYmVnaW47Cj4gLQlfX3UzMiBsdW5fZW5kOwo+IC19Owo+IC0KPiAtc3RydWN0IG52bV9pb2N0 bF9jcmVhdGVfZXh0ZW5kZWQgewo+IC0JX191MTYgbHVuX2JlZ2luOwo+IC0JX191MTYgbHVuX2Vu ZDsKPiAtCV9fdTE2IG9wOwo+IC0JX191MTYgcnN2Owo+IC19Owo+IC0KPiAtZW51bSB7Cj4gLQlO Vk1fQ09ORklHX1RZUEVfU0lNUExFID0gMCwKPiAtCU5WTV9DT05GSUdfVFlQRV9FWFRFTkRFRCA9 IDEsCj4gLX07Cj4gLQo+IC1zdHJ1Y3QgbnZtX2lvY3RsX2NyZWF0ZV9jb25mIHsKPiAtCV9fdTMy IHR5cGU7Cj4gLQl1bmlvbiB7Cj4gLQkJc3RydWN0IG52bV9pb2N0bF9jcmVhdGVfc2ltcGxlIHM7 Cj4gLQkJc3RydWN0IG52bV9pb2N0bF9jcmVhdGVfZXh0ZW5kZWQgZTsKPiAtCX07Cj4gLX07Cj4g LQo+IC1lbnVtIHsKPiAtCU5WTV9UQVJHRVRfRkFDVE9SWSA9IDEgPDwgMCwJLyogSW5pdCB0YXJn ZXQgaW4gZmFjdG9yeSBtb2RlICovCj4gLX07Cj4gLQo+IC1zdHJ1Y3QgbnZtX2lvY3RsX2NyZWF0 ZSB7Cj4gLQljaGFyIGRldltESVNLX05BTUVfTEVOXTsJCS8qIG9wZW4tY2hhbm5lbCBTU0QgZGV2 aWNlICovCj4gLQljaGFyIHRndHR5cGVbTlZNX1RUWVBFX05BTUVfTUFYXTsJLyogdGFyZ2V0IHR5 cGUgbmFtZSAqLwo+IC0JY2hhciB0Z3RuYW1lW0RJU0tfTkFNRV9MRU5dOwkJLyogZGV2IHRvIGV4 cG9zZSB0YXJnZXQgYXMgKi8KPiAtCj4gLQlfX3UzMiBmbGFnczsKPiAtCj4gLQlzdHJ1Y3QgbnZt X2lvY3RsX2NyZWF0ZV9jb25mIGNvbmY7Cj4gLX07Cj4gLQo+IC1zdHJ1Y3QgbnZtX2lvY3RsX3Jl bW92ZSB7Cj4gLQljaGFyIHRndG5hbWVbRElTS19OQU1FX0xFTl07Cj4gLQo+IC0JX191MzIgZmxh Z3M7Cj4gLX07Cj4gLQo+IC1zdHJ1Y3QgbnZtX2lvY3RsX2Rldl9pbml0IHsKPiAtCWNoYXIgZGV2 W0RJU0tfTkFNRV9MRU5dOwkJLyogb3Blbi1jaGFubmVsIFNTRCBkZXZpY2UgKi8KPiAtCWNoYXIg bW10eXBlW05WTV9NTVRZUEVfTEVOXTsJCS8qIHJlZ2lzdGVyIHRvIG1lZGlhIG1hbmFnZXIgKi8K PiAtCj4gLQlfX3UzMiBmbGFnczsKPiAtfTsKPiAtCj4gLWVudW0gewo+IC0JTlZNX0ZBQ1RPUllf RVJBU0VfT05MWV9VU0VSCT0gMSA8PCAwLCAvKiBlcmFzZSBvbmx5IGJsb2NrcyB1c2VkIGFzCj4g LQkJCQkJCSAgICogaG9zdCBibGtzIG9yIGdyb3duIGJsa3MgKi8KPiAtCU5WTV9GQUNUT1JZX1JF U0VUX0hPU1RfQkxLUwk9IDEgPDwgMSwgLyogcmVtb3ZlIGhvc3QgYmxrIG1hcmtzICovCj4gLQlO Vk1fRkFDVE9SWV9SRVNFVF9HUldOX0JCTEtTCT0gMSA8PCAyLCAvKiByZW1vdmUgZ3Jvd24gYmxr IG1hcmtzICovCj4gLQlOVk1fRkFDVE9SWV9OUl9CSVRTCQk9IDEgPDwgMywgLyogc3RvcHMgaGVy ZSAqLwo+IC19Owo+IC0KPiAtc3RydWN0IG52bV9pb2N0bF9kZXZfZmFjdG9yeSB7Cj4gLQljaGFy IGRldltESVNLX05BTUVfTEVOXTsKPiAtCj4gLQlfX3UzMiBmbGFnczsKPiAtfTsKPiAtCj4gLXN0 cnVjdCBudm1fdXNlcl92aW8gewo+IC0JX191OCBvcGNvZGU7Cj4gLQlfX3U4IGZsYWdzOwo+IC0J X191MTYgY29udHJvbDsKPiAtCV9fdTE2IG5wcGFzOwo+IC0JX191MTYgcnN2ZDsKPiAtCV9fdTY0 IG1ldGFkYXRhOwo+IC0JX191NjQgYWRkcjsKPiAtCV9fdTY0IHBwYV9saXN0Owo+IC0JX191MzIg bWV0YWRhdGFfbGVuOwo+IC0JX191MzIgZGF0YV9sZW47Cj4gLQlfX3U2NCBzdGF0dXM7Cj4gLQlf X3UzMiByZXN1bHQ7Cj4gLQlfX3UzMiByc3ZkM1szXTsKPiAtfTsKPiAtCj4gLXN0cnVjdCBudm1f cGFzc3RocnVfdmlvIHsKPiAtCV9fdTggb3Bjb2RlOwo+IC0JX191OCBmbGFnczsKPiAtCV9fdTgg cnN2ZFsyXTsKPiAtCV9fdTMyIG5zaWQ7Cj4gLQlfX3UzMiBjZHcyOwo+IC0JX191MzIgY2R3MzsK PiAtCV9fdTY0IG1ldGFkYXRhOwo+IC0JX191NjQgYWRkcjsKPiAtCV9fdTMyIG1ldGFkYXRhX2xl bjsKPiAtCV9fdTMyIGRhdGFfbGVuOwo+IC0JX191NjQgcHBhX2xpc3Q7Cj4gLQlfX3UxNiBucHBh czsKPiAtCV9fdTE2IGNvbnRyb2w7Cj4gLQlfX3UzMiBjZHcxMzsKPiAtCV9fdTMyIGNkdzE0Owo+ IC0JX191MzIgY2R3MTU7Cj4gLQlfX3U2NCBzdGF0dXM7Cj4gLQlfX3UzMiByZXN1bHQ7Cj4gLQlf X3UzMiB0aW1lb3V0X21zOwo+IC19Owo+IC0KPiAtLyogVGhlIGlvY3RsIHR5cGUsICdMJywgMHgy MCAtIDB4MkYgZG9jdW1lbnRlZCBpbiBpb2N0bC1udW1iZXIudHh0ICovCj4gLWVudW0gewo+IC0J LyogdG9wIGxldmVsIGNtZHMgKi8KPiAtCU5WTV9JTkZPX0NNRCA9IDB4MjAsCj4gLQlOVk1fR0VU X0RFVklDRVNfQ01ELAo+IC0KPiAtCS8qIGRldmljZSBsZXZlbCBjbWRzICovCj4gLQlOVk1fREVW X0NSRUFURV9DTUQsCj4gLQlOVk1fREVWX1JFTU9WRV9DTUQsCj4gLQo+IC0JLyogSW5pdCBhIGRl dmljZSB0byBzdXBwb3J0IExpZ2h0TlZNIG1lZGlhIG1hbmFnZXJzICovCj4gLQlOVk1fREVWX0lO SVRfQ01ELAo+IC0KPiAtCS8qIEZhY3RvcnkgcmVzZXQgZGV2aWNlICovCj4gLQlOVk1fREVWX0ZB Q1RPUllfQ01ELAo+IC0KPiAtCS8qIFZlY3RvciB1c2VyIEkvTyAqLwo+IC0JTlZNX0RFVl9WSU9f QURNSU5fQ01EID0gMHg0MSwKPiAtCU5WTV9ERVZfVklPX0NNRCA9IDB4NDIsCj4gLQlOVk1fREVW X1ZJT19VU0VSX0NNRCA9IDB4NDMsCj4gLX07Cj4gLQo+IC0jZGVmaW5lIE5WTV9JT0NUTCAnTCcg LyogMHg0YyAqLwo+IC0KPiAtI2RlZmluZSBOVk1fSU5GTwkJX0lPV1IoTlZNX0lPQ1RMLCBOVk1f SU5GT19DTUQsIFwKPiAtCQkJCQkJc3RydWN0IG52bV9pb2N0bF9pbmZvKQo+IC0jZGVmaW5lIE5W TV9HRVRfREVWSUNFUwkJX0lPUihOVk1fSU9DVEwsIE5WTV9HRVRfREVWSUNFU19DTUQsIFwKPiAt CQkJCQkJc3RydWN0IG52bV9pb2N0bF9nZXRfZGV2aWNlcykKPiAtI2RlZmluZSBOVk1fREVWX0NS RUFURQkJX0lPVyhOVk1fSU9DVEwsIE5WTV9ERVZfQ1JFQVRFX0NNRCwgXAo+IC0JCQkJCQlzdHJ1 Y3QgbnZtX2lvY3RsX2NyZWF0ZSkKPiAtI2RlZmluZSBOVk1fREVWX1JFTU9WRQkJX0lPVyhOVk1f SU9DVEwsIE5WTV9ERVZfUkVNT1ZFX0NNRCwgXAo+IC0JCQkJCQlzdHJ1Y3QgbnZtX2lvY3RsX3Jl bW92ZSkKPiAtI2RlZmluZSBOVk1fREVWX0lOSVQJCV9JT1coTlZNX0lPQ1RMLCBOVk1fREVWX0lO SVRfQ01ELCBcCj4gLQkJCQkJCXN0cnVjdCBudm1faW9jdGxfZGV2X2luaXQpCj4gLSNkZWZpbmUg TlZNX0RFVl9GQUNUT1JZCQlfSU9XKE5WTV9JT0NUTCwgTlZNX0RFVl9GQUNUT1JZX0NNRCwgXAo+ IC0JCQkJCQlzdHJ1Y3QgbnZtX2lvY3RsX2Rldl9mYWN0b3J5KQo+IC0KPiAtI2RlZmluZSBOVk1F X05WTV9JT0NUTF9JT19WSU8JCV9JT1dSKE5WTV9JT0NUTCwgTlZNX0RFVl9WSU9fVVNFUl9DTUQs IFwKPiAtCQkJCQkJc3RydWN0IG52bV9wYXNzdGhydV92aW8pCj4gLSNkZWZpbmUgTlZNRV9OVk1f SU9DVExfQURNSU5fVklPCV9JT1dSKE5WTV9JT0NUTCwgTlZNX0RFVl9WSU9fQURNSU5fQ01ELFwK PiAtCQkJCQkJc3RydWN0IG52bV9wYXNzdGhydV92aW8pCj4gLSNkZWZpbmUgTlZNRV9OVk1fSU9D VExfU1VCTUlUX1ZJTwlfSU9XUihOVk1fSU9DVEwsIE5WTV9ERVZfVklPX0NNRCxcCj4gLQkJCQkJ CXN0cnVjdCBudm1fdXNlcl92aW8pCj4gLQo+IC0jZGVmaW5lIE5WTV9WRVJTSU9OX01BSk9SCTEK PiAtI2RlZmluZSBOVk1fVkVSU0lPTl9NSU5PUgkwCj4gLSNkZWZpbmUgTlZNX1ZFUlNJT05fUEFU Q0hMRVZFTAkwCj4gLQo+IC0jZW5kaWYKClRoYW5rcywgQ2hyaXN0b3BoLgoKUmV2aWV3ZWQtYnk6 IE1hdGlhcyBCasO4cmxpbmcgPG1iQGxpZ2h0bnZtLmlvPgoKSmF2aWVyLCBpZiB5b3UgYWdyZWUg dG8gdGhlIHJlbW92YWwgb2YgdGhlIHN1YnN5c3RlbSwgd291bGQgeW91IGxpa2UgdG8gCnByb3Zp ZGUgeW91ciByZXZpZXdlZC1ieSBhcyB3ZWxsPyBUaGFua3MhCgpCZXN0LCBNYXRpYXMKCgoKCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkxpbnV4LW52bWUg bWFpbGluZyBsaXN0CkxpbnV4LW52bWVAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMu aW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LW52bWUK