From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 8E9F2CDB46E for ; Thu, 12 Oct 2023 07:18:43 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=Gyee/k46fGc0j0xFfTWNVaic5V/rdyTxPMeX1GTZnqI=; b=2MdejESx7bcvwu 4xQHk7unahQ9kZ/KL6M45n6f+79vZRs7jKJKFgqfmBs4JswovDSg4iIndlg94HVQF5QBiWVwmJ+wg Kpg/TODEFhc0b7908fdK0bsozRF0AA64g94VPFSntH1mKN7JnrVJLn8IIZ4/1rnAZCsowTTBmoqGD DSc8yigvu6ELdsyuHTnepHf+bn+TJJCFyc8zxFY+1vCdE41IG7kcVS2RfIjVb9lVoYIkyzurpkSjU jK9eQEFczb5lg/nZB8FpMBGI6c8JzV9cyTpS64H9CWdy7/Qr0QN/ygU/7aiq+yPW/rPnrKAXr4nWg 1p8goK3fddjpw5iwuy6g==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qqpxt-0001vU-0N; Thu, 12 Oct 2023 07:18:37 +0000 Received: from relay7-d.mail.gandi.net ([217.70.183.200]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1qqpxo-0001ue-2N for linux-mtd@lists.infradead.org; Thu, 12 Oct 2023 07:18:35 +0000 Received: by mail.gandi.net (Postfix) with ESMTPSA id 30ECA20011; Thu, 12 Oct 2023 07:18:22 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1697095106; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=q8QUtIhNcKLCo60+yb4edn36jcfTyG6JLbBFj0TShCE=; b=o2FwsU6stj4JauUFG0WKrKgifp364+ae6WUW4XAsrR75f41/m0faBGo7mFoJxF4NBy28Hw /liGnsjrks4YizeehEgd6khD2KRETc1nrUgNO4XpM10bcKTwv3YILrDVgEjD3N9OmuQOMx 8rjfvdVLt+gbFoCIMz6girc1NDLA2z9zSMeQTLn7DfnjLPoGXgzIVIXlfXRdx2IIsdp1Jo ShNdyE6EG+sAUlWCoU2mEDJlvgPyEPo+yPitz3s93xM5jzB9IaQfIxr5HqULvBO3sO425N Sw7daz6Quct5l2f8pARBE/SuXp3BjAiJ7B4DN6fDUrkS1k4uUSyTd+6fC+/QRQ== Date: Thu, 12 Oct 2023 09:18:21 +0200 From: Miquel Raynal To: dregan@mail.com Cc: bcm-kernel-feedback-list@broadcom.com, linux-mtd@lists.infradead.org, f.fainelli@gmail.com, rafal@milecki.pl, joel.peshkin@broadcom.com, computersforpeace@gmail.com, dan.beygelman@broadcom.com, william.zhang@broadcom.com, frieder.schrempf@kontron.de, linux-kernel@vger.kernel.org, vigneshr@ti.com, richard@nod.at, bbrezillon@kernel.org, kdasu.kdev@gmail.com, JaimeLiao , Arseniy Krasnov , Adam Borowski Subject: Re: [PATCH v2 4/4] mtd: rawnand: brcmnand: exec_op implementation Message-ID: <20231012091821.278170ed@xps-13> In-Reply-To: References: Organization: Bootlin X-Mailer: Claws Mail 4.0.0 (GTK+ 3.24.33; x86_64-pc-linux-gnu) MIME-Version: 1.0 X-GND-Sasl: miquel.raynal@bootlin.com X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20231012_001833_048477_BB6EC89E X-CRM114-Status: GOOD ( 29.37 ) X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-mtd" Errors-To: linux-mtd-bounces+linux-mtd=archiver.kernel.org@lists.infradead.org SGVsbG8sCgpkcmVnYW5AbWFpbC5jb20gd3JvdGUgb24gVGh1LCAxMiBPY3QgMjAyMyAwMjo0Mjoz NyArMDIwMDoKCj4gZXhlY19vcCBpbXBsZW1lbnRhdGlvbiBmb3IgQnJvYWRjb20gU1RCLCBCcm9h ZGJhbmQgYW5kIGlQcm9jIFNvQwo+IFRoaXMgYWRkcyBleGVjX29wIGFuZCByZW1vdmVzIHRoZSBs ZWdhY3kgaW50ZXJmYWNlLiBCYXNlZCBvbiBjaGFuZ2VzCj4gcHJvcG9zZWQgYnkgQm9yaXMgQnJl emlsbG9uLgo+IAo+IGh0dHBzOi8vZ2l0aHViLmNvbS9iYnJlemlsbG9uL2xpbnV4L2NvbW1pdC80 ZWM2ZjhkOGQ4M2Y1YWFjYTVkMTg3N2YwMmQ0OGRhOTZkNDFmY2JhCj4gaHR0cHM6Ly9naXRodWIu Y29tL2JicmV6aWxsb24vbGludXgvY29tbWl0LzExYjRhY2ZmZDc2MWM0OTI4NjUyZDcwMjhkMTlm Y2Q2ZjQ1ZTQ2OTYKPiAKPiBTaWduZWQtb2ZmLWJ5OiBEYXZpZCBSZWdhbiA8ZHJlZ2FuQG1haWwu Y29tPgo+IAo+IC0tLQo+IAo+IENoYW5nZXMgaW4gdjI6IG1vdmVkIHN0YXR1cyBhbmQgcmVzZXQg Y29tbWFuZCBkZXRlY3Qgb3V0IG9mIGxvb3AKPiAtLS0KPiAgZHJpdmVycy9tdGQvbmFuZC9yYXcv YnJjbW5hbmQvYnJjbW5hbmQuYyB8IDM3NCArKysrKysrKystLS0tLS0tLS0tLS0tLQo+ICAxIGZp bGUgY2hhbmdlZCwgMTUxIGluc2VydGlvbnMoKyksIDIyMyBkZWxldGlvbnMoLSkKPiAKPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9yYXcvYnJjbW5hbmQvYnJjbW5hbmQuYyBiL2RyaXZl cnMvbXRkL25hbmQvcmF3L2JyY21uYW5kL2JyY21uYW5kLmMKPiBpbmRleCA4ZDQyOWViM2I3MmEu LmYxYjBjYTNlYmM5YyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL210ZC9uYW5kL3Jhdy9icmNtbmFu ZC9icmNtbmFuZC5jCj4gKysrIGIvZHJpdmVycy9tdGQvbmFuZC9yYXcvYnJjbW5hbmQvYnJjbW5h bmQuYwo+IEBAIC02MjUsNiArNjI1LDggQEAgZW51bSB7Cj4gIC8qIE9ubHkgZm9yIHY3LjIgKi8K PiAgI2RlZmluZQlBQ0NfQ09OVFJPTF9FQ0NfRVhUX1NISUZUCQkxMwo+IAo+ICtzdGF0aWMgdTgg YnJjbW5hbmRfc3RhdHVzKHN0cnVjdCBicmNtbmFuZF9ob3N0ICpob3N0KTsKPiArCj4gIHN0YXRp YyBpbmxpbmUgYm9vbCBicmNtbmFuZF9ub25fbW1pb19vcHMoc3RydWN0IGJyY21uYW5kX2NvbnRy b2xsZXIgKmN0cmwpCj4gIHsKPiAgI2lmIElTX0VOQUJMRUQoQ09ORklHX01URF9OQU5EX0JSQ01O QU5EX0JDTUEpCj4gQEAgLTEwMjIsMTkgKzEwMjQsNiBAQCBzdGF0aWMgaW5saW5lIGludCBicmNt bmFuZF9zZWN0b3JfMWtfc2hpZnQoc3RydWN0IGJyY21uYW5kX2NvbnRyb2xsZXIgKmN0cmwpCj4g IAkJcmV0dXJuIC0xOwo+ICB9Cj4gCj4gLXN0YXRpYyBpbnQgYnJjbW5hbmRfZ2V0X3NlY3Rvcl9z aXplXzFrKHN0cnVjdCBicmNtbmFuZF9ob3N0ICpob3N0KQo+IC17Cj4gLQlzdHJ1Y3QgYnJjbW5h bmRfY29udHJvbGxlciAqY3RybCA9IGhvc3QtPmN0cmw7Cj4gLQlpbnQgc2hpZnQgPSBicmNtbmFu ZF9zZWN0b3JfMWtfc2hpZnQoY3RybCk7Cj4gLQl1MTYgYWNjX2NvbnRyb2xfb2ZmcyA9IGJyY21u YW5kX2NzX29mZnNldChjdHJsLCBob3N0LT5jcywKPiAtCQkJCQkJICBCUkNNTkFORF9DU19BQ0Nf Q09OVFJPTCk7Cj4gLQo+IC0JaWYgKHNoaWZ0IDwgMCkKPiAtCQlyZXR1cm4gMDsKPiAtCj4gLQly ZXR1cm4gKG5hbmRfcmVhZHJlZyhjdHJsLCBhY2NfY29udHJvbF9vZmZzKSA+PiBzaGlmdCkgJiAw eDE7Cj4gLX0KPiAtCj4gIHN0YXRpYyB2b2lkIGJyY21uYW5kX3NldF9zZWN0b3Jfc2l6ZV8xayhz dHJ1Y3QgYnJjbW5hbmRfaG9zdCAqaG9zdCwgaW50IHZhbCkKPiAgewo+ICAJc3RydWN0IGJyY21u YW5kX2NvbnRyb2xsZXIgKmN0cmwgPSBob3N0LT5jdHJsOwo+IEBAIC0xMDc0LDYgKzEwNjMsOSBA QCBzdGF0aWMgaW50IGJjbW5hbmRfY3RybF9wb2xsX3N0YXR1cyhzdHJ1Y3QgYnJjbW5hbmRfaG9z dCAqaG9zdCwKPiAKPiAgCWxpbWl0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXModGltZW91 dF9tcyk7Cj4gIAlkbyB7Cj4gKwkJaWYgKG1hc2sgJiBJTlRGQ19GTEFTSF9TVEFUVVMpCj4gKwkJ CWJyY21uYW5kX3N0YXR1cyhob3N0KTsKPiArCj4gIAkJdmFsID0gYnJjbW5hbmRfcmVhZF9yZWco Y3RybCwgQlJDTU5BTkRfSU5URkNfU1RBVFVTKTsKPiAgCQlpZiAoKHZhbCAmIG1hc2spID09IGV4 cGVjdGVkX3ZhbCkKPiAgCQkJcmV0dXJuIDA7Cj4gQEAgLTEzODgsNyArMTM4MCw4IEBAIHN0YXRp YyB2b2lkIGJyY21uYW5kX3dwKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgd3ApCj4gIAkJCXJl dHVybjsKPiAKPiAgCQlicmNtbmFuZF9zZXRfd3AoY3RybCwgd3ApOwo+IC0JCW5hbmRfc3RhdHVz X29wKGNoaXAsIE5VTEwpOwo+ICsJCS8qIGZvcmNlIGNvbnRyb2xsZXIgb3BlcmF0aW9uIHRvIHVw ZGF0ZSBpbnRlcm5hbCBjb3B5IG9mIE5BTkQgY2hpcCBzdGF0dXMgKi8KPiArCQlicmNtbmFuZF9z dGF0dXMoaG9zdCk7Cj4gIAkJLyogTkFORF9TVEFUVVNfV1AgMHgwMCA9IHByb3RlY3RlZCwgMHg4 MCA9IG5vdCBwcm90ZWN0ZWQgKi8KPiAgCQlyZXQgPSBiY21uYW5kX2N0cmxfcG9sbF9zdGF0dXMo aG9zdCwKPiAgCQkJCQkgICAgICAgTkFORF9DVFJMX1JEWSB8Cj4gQEAgLTE2NDQsMTYgKzE2Mzcs NiBAQCBzdGF0aWMgdm9pZCBicmNtbmFuZF9zZW5kX2NtZChzdHJ1Y3QgYnJjbW5hbmRfaG9zdCAq aG9zdCwgaW50IGNtZCkKPiAgCQkJICAgY21kIDw8IGJyY21uYW5kX2NtZF9zaGlmdChjdHJsKSk7 Cj4gIH0KPiAKPiAtLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqCj4gLSAqIE5BTkQgTVREIEFQSTogcmVhZC9wcm9n cmFtL2VyYXNlCj4gLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KPiAtCj4gLXN0YXRpYyB2b2lkIGJyY21uYW5k X2NtZF9jdHJsKHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsIGludCBkYXQsCj4gLQkJCSAgICAgIHVu c2lnbmVkIGludCBjdHJsKQo+IC17Cj4gLQkvKiBpbnRlbnRpb25hbGx5IGxlZnQgYmxhbmsgKi8K PiAtfQo+IC0KPiAgc3RhdGljIGJvb2wgYnJjbXN0Yl9uYW5kX3dhaXRfZm9yX2NvbXBsZXRpb24o c3RydWN0IG5hbmRfY2hpcCAqY2hpcCkKPiAgewo+ICAJc3RydWN0IGJyY21uYW5kX2hvc3QgKmhv c3QgPSBuYW5kX2dldF9jb250cm9sbGVyX2RhdGEoY2hpcCk7Cj4gQEAgLTE3MDQsNiArMTY4Nywx NyBAQCBzdGF0aWMgaW50IGJyY21uYW5kX3dhaXRmdW5jKHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAp Cj4gIAkJCQkgSU5URkNfRkxBU0hfU1RBVFVTOwo+ICB9Cj4gCj4gK3N0YXRpYyB1OCBicmNtbmFu ZF9zdGF0dXMoc3RydWN0IGJyY21uYW5kX2hvc3QgKmhvc3QpCj4gK3sKPiArCXN0cnVjdCBuYW5k X2NoaXAgKmNoaXAgPSAmaG9zdC0+Y2hpcDsKPiArCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gbmFu ZF90b19tdGQoY2hpcCk7Cj4gKwo+ICsJYnJjbW5hbmRfc2V0X2NtZF9hZGRyKG10ZCwgMCk7Cj4g KwlicmNtbmFuZF9zZW5kX2NtZChob3N0LCBDTURfU1RBVFVTX1JFQUQpOwo+ICsKPiArCXJldHVy biBicmNtbmFuZF93YWl0ZnVuYyhjaGlwKTsKPiArfQo+ICsKPiAgZW51bSB7Cj4gIAlMTE9QX1JF CQkJCT0gQklUKDE2KSwKPiAgCUxMT1BfV0UJCQkJPSBCSVQoMTcpLAo+IEBAIC0xNzUzLDE5MCAr MTc0Nyw2IEBAIHN0YXRpYyBpbnQgYnJjbW5hbmRfbG93X2xldmVsX29wKHN0cnVjdCBicmNtbmFu ZF9ob3N0ICpob3N0LAo+ICAJcmV0dXJuIGJyY21uYW5kX3dhaXRmdW5jKGNoaXApOwo+ICB9Cj4g Cj4gLXN0YXRpYyB2b2lkIGJyY21uYW5kX2NtZGZ1bmMoc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwg dW5zaWduZWQgY29tbWFuZCwKPiAtCQkJICAgICBpbnQgY29sdW1uLCBpbnQgcGFnZV9hZGRyKQo+ IC17Cj4gLQlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IG5hbmRfdG9fbXRkKGNoaXApOwo+IC0Jc3Ry dWN0IGJyY21uYW5kX2hvc3QgKmhvc3QgPSBuYW5kX2dldF9jb250cm9sbGVyX2RhdGEoY2hpcCk7 Cj4gLQlzdHJ1Y3QgYnJjbW5hbmRfY29udHJvbGxlciAqY3RybCA9IGhvc3QtPmN0cmw7Cj4gLQl1 NjQgYWRkciA9ICh1NjQpcGFnZV9hZGRyIDw8IGNoaXAtPnBhZ2Vfc2hpZnQ7Cj4gLQlpbnQgbmF0 aXZlX2NtZCA9IDA7Cj4gLQo+IC0JaWYgKGNvbW1hbmQgPT0gTkFORF9DTURfUkVBRElEIHx8IGNv bW1hbmQgPT0gTkFORF9DTURfUEFSQU0gfHwKPiAtCQkJY29tbWFuZCA9PSBOQU5EX0NNRF9STkRP VVQpCj4gLQkJYWRkciA9ICh1NjQpY29sdW1uOwo+IC0JLyogQXZvaWQgcHJvcGFnYXRpbmcgYSBu ZWdhdGl2ZSwgZG9uJ3QtY2FyZSBhZGRyZXNzICovCj4gLQllbHNlIGlmIChwYWdlX2FkZHIgPCAw KQo+IC0JCWFkZHIgPSAwOwo+IC0KPiAtCWRldl9kYmcoY3RybC0+ZGV2LCAiY21kIDB4JXggYWRk ciAweCVsbHhcbiIsIGNvbW1hbmQsCj4gLQkJKHVuc2lnbmVkIGxvbmcgbG9uZylhZGRyKTsKPiAt Cj4gLQlob3N0LT5sYXN0X2NtZCA9IGNvbW1hbmQ7Cj4gLQlob3N0LT5sYXN0X2J5dGUgPSAwOwo+ IC0JaG9zdC0+bGFzdF9hZGRyID0gYWRkcjsKPiAtCj4gLQlzd2l0Y2ggKGNvbW1hbmQpIHsKPiAt CWNhc2UgTkFORF9DTURfUkVTRVQ6Cj4gLQkJbmF0aXZlX2NtZCA9IENNRF9GTEFTSF9SRVNFVDsK PiAtCQlicmVhazsKPiAtCWNhc2UgTkFORF9DTURfU1RBVFVTOgo+IC0JCW5hdGl2ZV9jbWQgPSBD TURfU1RBVFVTX1JFQUQ7Cj4gLQkJYnJlYWs7Cj4gLQljYXNlIE5BTkRfQ01EX1JFQURJRDoKPiAt CQluYXRpdmVfY21kID0gQ01EX0RFVklDRV9JRF9SRUFEOwo+IC0JCWJyZWFrOwo+IC0JY2FzZSBO QU5EX0NNRF9SRUFET09COgo+IC0JCW5hdGl2ZV9jbWQgPSBDTURfU1BBUkVfQVJFQV9SRUFEOwo+ IC0JCWJyZWFrOwo+IC0JY2FzZSBOQU5EX0NNRF9FUkFTRTE6Cj4gLQkJbmF0aXZlX2NtZCA9IENN RF9CTE9DS19FUkFTRTsKPiAtCQlicmNtbmFuZF93cChtdGQsIDApOwo+IC0JCWJyZWFrOwo+IC0J Y2FzZSBOQU5EX0NNRF9QQVJBTToKPiAtCQluYXRpdmVfY21kID0gQ01EX1BBUkFNRVRFUl9SRUFE Owo+IC0JCWJyZWFrOwo+IC0JY2FzZSBOQU5EX0NNRF9TRVRfRkVBVFVSRVM6Cj4gLQljYXNlIE5B TkRfQ01EX0dFVF9GRUFUVVJFUzoKPiAtCQlicmNtbmFuZF9sb3dfbGV2ZWxfb3AoaG9zdCwgTExf T1BfQ01ELCBjb21tYW5kLCBmYWxzZSk7Cj4gLQkJYnJjbW5hbmRfbG93X2xldmVsX29wKGhvc3Qs IExMX09QX0FERFIsIGNvbHVtbiwgZmFsc2UpOwo+IC0JCWJyZWFrOwo+IC0JY2FzZSBOQU5EX0NN RF9STkRPVVQ6Cj4gLQkJbmF0aXZlX2NtZCA9IENNRF9QQVJBTUVURVJfQ0hBTkdFX0NPTDsKPiAt CQlhZGRyICY9IH4oKHU2NCkoRkNfQllURVMgLSAxKSk7Cj4gLQkJLyoKPiAtCQkgKiBIVyBxdWly azogUEFSQU1FVEVSX0NIQU5HRV9DT0wgcmVxdWlyZXMgU0VDVE9SX1NJWkVfMUs9MAo+IC0JCSAq IE5COiBod2NmZy5zZWN0b3Jfc2l6ZV8xayBtYXkgbm90IGJlIGluaXRpYWxpemVkIHlldAo+IC0J CSAqLwo+IC0JCWlmIChicmNtbmFuZF9nZXRfc2VjdG9yX3NpemVfMWsoaG9zdCkpIHsKPiAtCQkJ aG9zdC0+aHdjZmcuc2VjdG9yX3NpemVfMWsgPQo+IC0JCQkJYnJjbW5hbmRfZ2V0X3NlY3Rvcl9z aXplXzFrKGhvc3QpOwo+IC0JCQlicmNtbmFuZF9zZXRfc2VjdG9yX3NpemVfMWsoaG9zdCwgMCk7 Cj4gLQkJfQo+IC0JCWJyZWFrOwo+IC0JfQo+IC0KPiAtCWlmICghbmF0aXZlX2NtZCkKPiAtCQly ZXR1cm47Cj4gLQo+IC0JYnJjbW5hbmRfc2V0X2NtZF9hZGRyKG10ZCwgYWRkcik7Cj4gLQlicmNt bmFuZF9zZW5kX2NtZChob3N0LCBuYXRpdmVfY21kKTsKPiAtCWJyY21uYW5kX3dhaXRmdW5jKGNo aXApOwo+IC0KPiAtCWlmIChuYXRpdmVfY21kID09IENNRF9QQVJBTUVURVJfUkVBRCB8fAo+IC0J CQluYXRpdmVfY21kID09IENNRF9QQVJBTUVURVJfQ0hBTkdFX0NPTCkgewo+IC0JCS8qIENvcHkg Zmxhc2ggY2FjaGUgd29yZC13aXNlICovCj4gLQkJdTMyICpmbGFzaF9jYWNoZSA9ICh1MzIgKilj dHJsLT5mbGFzaF9jYWNoZTsKPiAtCQlpbnQgaTsKPiAtCj4gLQkJYnJjbW5hbmRfc29jX2RhdGFf YnVzX3ByZXBhcmUoY3RybC0+c29jLCB0cnVlKTsKPiAtCj4gLQkJLyoKPiAtCQkgKiBNdXN0IGNh Y2hlIHRoZSBGTEFTSF9DQUNIRSBub3csIHNpbmNlIGNoYW5nZXMgaW4KPiAtCQkgKiBTRUNUT1Jf U0laRV8xSyBtYXkgaW52YWxpZGF0ZSBpdAo+IC0JCSAqLwo+IC0JCWZvciAoaSA9IDA7IGkgPCBG Q19XT1JEUzsgaSsrKQo+IC0JCQkvKgo+IC0JCQkgKiBGbGFzaCBjYWNoZSBpcyBiaWcgZW5kaWFu IGZvciBwYXJhbWV0ZXIgcGFnZXMsIGF0Cj4gLQkJCSAqIGxlYXN0IG9uIFNUQiBTb0NzCj4gLQkJ CSAqLwo+IC0JCQlmbGFzaF9jYWNoZVtpXSA9IGJlMzJfdG9fY3B1KGJyY21uYW5kX3JlYWRfZmMo Y3RybCwgaSkpOwo+IC0KPiAtCQlicmNtbmFuZF9zb2NfZGF0YV9idXNfdW5wcmVwYXJlKGN0cmwt PnNvYywgdHJ1ZSk7Cj4gLQo+IC0JCS8qIENsZWFudXAgZnJvbSBIVyBxdWlyazogcmVzdG9yZSBT RUNUT1JfU0laRV8xSyAqLwo+IC0JCWlmIChob3N0LT5od2NmZy5zZWN0b3Jfc2l6ZV8xaykKPiAt CQkJYnJjbW5hbmRfc2V0X3NlY3Rvcl9zaXplXzFrKGhvc3QsCj4gLQkJCQkJCSAgICBob3N0LT5o d2NmZy5zZWN0b3Jfc2l6ZV8xayk7Cj4gLQl9Cj4gLQo+IC0JLyogUmUtZW5hYmxlIHByb3RlY3Rp b24gaXMgbmVjZXNzYXJ5IG9ubHkgYWZ0ZXIgZXJhc2UgKi8KPiAtCWlmIChjb21tYW5kID09IE5B TkRfQ01EX0VSQVNFMSkKPiAtCQlicmNtbmFuZF93cChtdGQsIDEpOwo+IC19Cj4gLQo+IC1zdGF0 aWMgdWludDhfdCBicmNtbmFuZF9yZWFkX2J5dGUoc3RydWN0IG5hbmRfY2hpcCAqY2hpcCkKPiAt ewo+IC0Jc3RydWN0IGJyY21uYW5kX2hvc3QgKmhvc3QgPSBuYW5kX2dldF9jb250cm9sbGVyX2Rh dGEoY2hpcCk7Cj4gLQlzdHJ1Y3QgYnJjbW5hbmRfY29udHJvbGxlciAqY3RybCA9IGhvc3QtPmN0 cmw7Cj4gLQl1aW50OF90IHJldCA9IDA7Cj4gLQlpbnQgYWRkciwgb2ZmczsKPiAtCj4gLQlzd2l0 Y2ggKGhvc3QtPmxhc3RfY21kKSB7Cj4gLQljYXNlIE5BTkRfQ01EX1JFQURJRDoKPiAtCQlpZiAo aG9zdC0+bGFzdF9ieXRlIDwgNCkKPiAtCQkJcmV0ID0gYnJjbW5hbmRfcmVhZF9yZWcoY3RybCwg QlJDTU5BTkRfSUQpID4+Cj4gLQkJCQkoMjQgLSAoaG9zdC0+bGFzdF9ieXRlIDw8IDMpKTsKPiAt CQllbHNlIGlmIChob3N0LT5sYXN0X2J5dGUgPCA4KQo+IC0JCQlyZXQgPSBicmNtbmFuZF9yZWFk X3JlZyhjdHJsLCBCUkNNTkFORF9JRF9FWFQpID4+Cj4gLQkJCQkoNTYgLSAoaG9zdC0+bGFzdF9i eXRlIDw8IDMpKTsKPiAtCQlicmVhazsKPiAtCj4gLQljYXNlIE5BTkRfQ01EX1JFQURPT0I6Cj4g LQkJcmV0ID0gb29iX3JlZ19yZWFkKGN0cmwsIGhvc3QtPmxhc3RfYnl0ZSk7Cj4gLQkJYnJlYWs7 Cj4gLQo+IC0JY2FzZSBOQU5EX0NNRF9TVEFUVVM6Cj4gLQkJcmV0ID0gYnJjbW5hbmRfcmVhZF9y ZWcoY3RybCwgQlJDTU5BTkRfSU5URkNfU1RBVFVTKSAmCj4gLQkJCQkJSU5URkNfRkxBU0hfU1RB VFVTOwo+IC0JCWlmICh3cF9vbikgLyogaGlkZSBXUCBzdGF0dXMgKi8KPiAtCQkJcmV0IHw9IE5B TkRfU1RBVFVTX1dQOwo+IC0JCWJyZWFrOwo+IC0KPiAtCWNhc2UgTkFORF9DTURfUEFSQU06Cj4g LQljYXNlIE5BTkRfQ01EX1JORE9VVDoKPiAtCQlhZGRyID0gaG9zdC0+bGFzdF9hZGRyICsgaG9z dC0+bGFzdF9ieXRlOwo+IC0JCW9mZnMgPSBhZGRyICYgKEZDX0JZVEVTIC0gMSk7Cj4gLQo+IC0J CS8qIEF0IEZDX0JZVEVTIGJvdW5kYXJ5LCBzd2l0Y2ggdG8gbmV4dCBjb2x1bW4gKi8KPiAtCQlp ZiAoaG9zdC0+bGFzdF9ieXRlID4gMCAmJiBvZmZzID09IDApCj4gLQkJCW5hbmRfY2hhbmdlX3Jl YWRfY29sdW1uX29wKGNoaXAsIGFkZHIsIE5VTEwsIDAsIGZhbHNlKTsKPiAtCj4gLQkJcmV0ID0g Y3RybC0+Zmxhc2hfY2FjaGVbb2Zmc107Cj4gLQkJYnJlYWs7Cj4gLQljYXNlIE5BTkRfQ01EX0dF VF9GRUFUVVJFUzoKPiAtCQlpZiAoaG9zdC0+bGFzdF9ieXRlID49IE9ORklfU1VCRkVBVFVSRV9Q QVJBTV9MRU4pIHsKPiAtCQkJcmV0ID0gMDsKPiAtCQl9IGVsc2Ugewo+IC0JCQlib29sIGxhc3Qg PSBob3N0LT5sYXN0X2J5dGUgPT0KPiAtCQkJCU9ORklfU1VCRkVBVFVSRV9QQVJBTV9MRU4gLSAx Owo+IC0JCQlicmNtbmFuZF9sb3dfbGV2ZWxfb3AoaG9zdCwgTExfT1BfUkQsIDAsIGxhc3QpOwo+ IC0JCQlyZXQgPSBicmNtbmFuZF9yZWFkX3JlZyhjdHJsLCBCUkNNTkFORF9MTF9SREFUQSkgJiAw eGZmOwo+IC0JCX0KPiAtCX0KPiAtCj4gLQlkZXZfZGJnKGN0cmwtPmRldiwgInJlYWQgYnl0ZSA9 IDB4JTAyeFxuIiwgcmV0KTsKPiAtCWhvc3QtPmxhc3RfYnl0ZSsrOwo+IC0KPiAtCXJldHVybiBy ZXQ7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIGJyY21uYW5kX3JlYWRfYnVmKHN0cnVjdCBuYW5k X2NoaXAgKmNoaXAsIHVpbnQ4X3QgKmJ1ZiwgaW50IGxlbikKPiAtewo+IC0JaW50IGk7Cj4gLQo+ IC0JZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrLCBidWYrKykKPiAtCQkqYnVmID0gYnJjbW5hbmRf cmVhZF9ieXRlKGNoaXApOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBicmNtbmFuZF93cml0ZV9i dWYoc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwgY29uc3QgdWludDhfdCAqYnVmLAo+IC0JCQkgICAg ICAgaW50IGxlbikKPiAtewo+IC0JaW50IGk7Cj4gLQlzdHJ1Y3QgYnJjbW5hbmRfaG9zdCAqaG9z dCA9IG5hbmRfZ2V0X2NvbnRyb2xsZXJfZGF0YShjaGlwKTsKPiAtCj4gLQlzd2l0Y2ggKGhvc3Qt Pmxhc3RfY21kKSB7Cj4gLQljYXNlIE5BTkRfQ01EX1NFVF9GRUFUVVJFUzoKPiAtCQlmb3IgKGkg PSAwOyBpIDwgbGVuOyBpKyspCj4gLQkJCWJyY21uYW5kX2xvd19sZXZlbF9vcChob3N0LCBMTF9P UF9XUiwgYnVmW2ldLAo+IC0JCQkJCQkgIChpICsgMSkgPT0gbGVuKTsKPiAtCQlicmVhazsKPiAt CWRlZmF1bHQ6Cj4gLQkJQlVHKCk7Cj4gLQkJYnJlYWs7Cj4gLQl9Cj4gLX0KPiAtCj4gIC8qCj4g ICAqICBLaWNrIEVEVSBlbmdpbmUKPiAgICovCj4gQEAgLTIzNDYsOCArMjE1Niw5IEBAIHN0YXRp YyBpbnQgYnJjbW5hbmRfcmVhZF9wYWdlKHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsIHVpbnQ4X3Qg KmJ1ZiwKPiAgCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gbmFuZF90b19tdGQoY2hpcCk7Cj4gIAlz dHJ1Y3QgYnJjbW5hbmRfaG9zdCAqaG9zdCA9IG5hbmRfZ2V0X2NvbnRyb2xsZXJfZGF0YShjaGlw KTsKPiAgCXU4ICpvb2IgPSBvb2JfcmVxdWlyZWQgPyAodTggKiljaGlwLT5vb2JfcG9pIDogTlVM TDsKPiArCXU2NCBhZGRyID0gKHU2NClwYWdlIDw8IGNoaXAtPnBhZ2Vfc2hpZnQ7Cj4gCj4gLQlu YW5kX3JlYWRfcGFnZV9vcChjaGlwLCBwYWdlLCAwLCBOVUxMLCAwKTsKPiArCWhvc3QtPmxhc3Rf YWRkciA9IGFkZHI7Cj4gCj4gIAlyZXR1cm4gYnJjbW5hbmRfcmVhZChtdGQsIGNoaXAsIGhvc3Qt Pmxhc3RfYWRkciwKPiAgCQkJbXRkLT53cml0ZXNpemUgPj4gRkNfU0hJRlQsICh1MzIgKilidWYs IG9vYik7Cj4gQEAgLTIzNjAsOCArMjE3MSw5IEBAIHN0YXRpYyBpbnQgYnJjbW5hbmRfcmVhZF9w YWdlX3JhdyhzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLCB1aW50OF90ICpidWYsCj4gIAlzdHJ1Y3Qg bXRkX2luZm8gKm10ZCA9IG5hbmRfdG9fbXRkKGNoaXApOwo+ICAJdTggKm9vYiA9IG9vYl9yZXF1 aXJlZCA/ICh1OCAqKWNoaXAtPm9vYl9wb2kgOiBOVUxMOwo+ICAJaW50IHJldDsKPiArCXU2NCBh ZGRyID0gKHU2NClwYWdlIDw8IGNoaXAtPnBhZ2Vfc2hpZnQ7Cj4gCj4gLQluYW5kX3JlYWRfcGFn ZV9vcChjaGlwLCBwYWdlLCAwLCBOVUxMLCAwKTsKPiArCWhvc3QtPmxhc3RfYWRkciA9IGFkZHI7 Cj4gCj4gIAlicmNtbmFuZF9zZXRfZWNjX2VuYWJsZWQoaG9zdCwgMCk7Cj4gIAlyZXQgPSBicmNt bmFuZF9yZWFkKG10ZCwgY2hpcCwgaG9zdC0+bGFzdF9hZGRyLAo+IEBAIC0yNDY5LDExICsyMjgx LDExIEBAIHN0YXRpYyBpbnQgYnJjbW5hbmRfd3JpdGVfcGFnZShzdHJ1Y3QgbmFuZF9jaGlwICpj aGlwLCBjb25zdCB1aW50OF90ICpidWYsCj4gIAlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IG5hbmRf dG9fbXRkKGNoaXApOwo+ICAJc3RydWN0IGJyY21uYW5kX2hvc3QgKmhvc3QgPSBuYW5kX2dldF9j b250cm9sbGVyX2RhdGEoY2hpcCk7Cj4gIAl2b2lkICpvb2IgPSBvb2JfcmVxdWlyZWQgPyBjaGlw LT5vb2JfcG9pIDogTlVMTDsKPiArCXU2NCBhZGRyID0gKHU2NClwYWdlIDw8IGNoaXAtPnBhZ2Vf c2hpZnQ7Cj4gCj4gLQluYW5kX3Byb2dfcGFnZV9iZWdpbl9vcChjaGlwLCBwYWdlLCAwLCBOVUxM LCAwKTsKPiAtCWJyY21uYW5kX3dyaXRlKG10ZCwgY2hpcCwgaG9zdC0+bGFzdF9hZGRyLCAoY29u c3QgdTMyICopYnVmLCBvb2IpOwo+ICsJaG9zdC0+bGFzdF9hZGRyID0gYWRkcjsKPiAKPiAtCXJl dHVybiBuYW5kX3Byb2dfcGFnZV9lbmRfb3AoY2hpcCk7Cj4gKwlyZXR1cm4gYnJjbW5hbmRfd3Jp dGUobXRkLCBjaGlwLCBob3N0LT5sYXN0X2FkZHIsIChjb25zdCB1MzIgKilidWYsIG9vYik7Cj4g IH0KPiAKPiAgc3RhdGljIGludCBicmNtbmFuZF93cml0ZV9wYWdlX3JhdyhzdHJ1Y3QgbmFuZF9j aGlwICpjaGlwLCBjb25zdCB1aW50OF90ICpidWYsCj4gQEAgLTI0ODIsMTMgKzIyOTQsMTUgQEAg c3RhdGljIGludCBicmNtbmFuZF93cml0ZV9wYWdlX3JhdyhzdHJ1Y3QgbmFuZF9jaGlwICpjaGlw LCBjb25zdCB1aW50OF90ICpidWYsCj4gIAlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IG5hbmRfdG9f bXRkKGNoaXApOwo+ICAJc3RydWN0IGJyY21uYW5kX2hvc3QgKmhvc3QgPSBuYW5kX2dldF9jb250 cm9sbGVyX2RhdGEoY2hpcCk7Cj4gIAl2b2lkICpvb2IgPSBvb2JfcmVxdWlyZWQgPyBjaGlwLT5v b2JfcG9pIDogTlVMTDsKPiArCXU2NCBhZGRyID0gKHU2NClwYWdlIDw8IGNoaXAtPnBhZ2Vfc2hp ZnQ7Cj4gKwlpbnQgcmV0ID0gMDsKPiAKPiAtCW5hbmRfcHJvZ19wYWdlX2JlZ2luX29wKGNoaXAs IHBhZ2UsIDAsIE5VTEwsIDApOwo+ICsJaG9zdC0+bGFzdF9hZGRyID0gYWRkcjsKPiAgCWJyY21u YW5kX3NldF9lY2NfZW5hYmxlZChob3N0LCAwKTsKPiAtCWJyY21uYW5kX3dyaXRlKG10ZCwgY2hp cCwgaG9zdC0+bGFzdF9hZGRyLCAoY29uc3QgdTMyICopYnVmLCBvb2IpOwo+ICsJcmV0ID0gYnJj bW5hbmRfd3JpdGUobXRkLCBjaGlwLCBob3N0LT5sYXN0X2FkZHIsIChjb25zdCB1MzIgKilidWYs IG9vYik7Cj4gIAlicmNtbmFuZF9zZXRfZWNjX2VuYWJsZWQoaG9zdCwgMSk7Cj4gCj4gLQlyZXR1 cm4gbmFuZF9wcm9nX3BhZ2VfZW5kX29wKGNoaXApOwo+ICsJcmV0dXJuIHJldDsKPiAgfQo+IAo+ ICBzdGF0aWMgaW50IGJyY21uYW5kX3dyaXRlX29vYihzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLCBp bnQgcGFnZSkKPiBAQCAtMjUxMiw2ICsyMzI2LDEyNSBAQCBzdGF0aWMgaW50IGJyY21uYW5kX3dy aXRlX29vYl9yYXcoc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwgaW50IHBhZ2UpCj4gIAlyZXR1cm4g cmV0Owo+ICB9Cj4gCj4gK3N0YXRpYyBpbnQgYnJjbW5hbmRfZXhlY19pbnN0cihzdHJ1Y3QgYnJj bW5hbmRfaG9zdCAqaG9zdCwKPiArCQkJCWNvbnN0IHN0cnVjdCBuYW5kX29wX2luc3RyICppbnN0 ciwKPiArCQkJCWJvb2wgbGFzdF9vcCkKPiArewo+ICsJc3RydWN0IGJyY21uYW5kX2NvbnRyb2xs ZXIgKmN0cmwgPSBob3N0LT5jdHJsOwo+ICsJdW5zaWduZWQgaW50IGk7Cj4gKwljb25zdCB1OCAq b3V0Owo+ICsJdTggKmluOwo+ICsJaW50IHJldCA9IDA7Cj4gKwo+ICsJYmNtbmFuZF9jdHJsX3Bv bGxfc3RhdHVzKGhvc3QsIE5BTkRfQ1RSTF9SRFksIE5BTkRfQ1RSTF9SRFksIDApOwo+ICsKPiAr CXN3aXRjaCAoaW5zdHItPnR5cGUpIHsKPiArCWNhc2UgTkFORF9PUF9DTURfSU5TVFI6Cj4gKwkJ YnJjbW5hbmRfbG93X2xldmVsX29wKGhvc3QsIExMX09QX0NNRCwKPiArCQkJCSAgICAgIGluc3Ry LT5jdHguY21kLm9wY29kZSwgbGFzdF9vcCk7Cj4gKwkJYnJlYWs7Cj4gKwo+ICsJY2FzZSBOQU5E X09QX0FERFJfSU5TVFI6Cj4gKwkJZm9yIChpID0gMDsgaSA8IGluc3RyLT5jdHguYWRkci5uYWRk cnM7IGkrKykKPiArCQkJYnJjbW5hbmRfbG93X2xldmVsX29wKGhvc3QsIExMX09QX0FERFIsCj4g KwkJCQkJICAgICAgaW5zdHItPmN0eC5hZGRyLmFkZHJzW2ldLAo+ICsJCQkJCSAgICAgIGxhc3Rf b3ApOwo+ICsJCWJyZWFrOwo+ICsKPiArCWNhc2UgTkFORF9PUF9EQVRBX0lOX0lOU1RSOgo+ICsJ CWluID0gaW5zdHItPmN0eC5kYXRhLmJ1Zi5pbjsKPiArCQlmb3IgKGkgPSAwOyBpIDwgaW5zdHIt PmN0eC5kYXRhLmxlbjsgaSsrKSB7Cj4gKwkJCWJyY21uYW5kX2xvd19sZXZlbF9vcChob3N0LCBM TF9PUF9SRCwgMCwgbGFzdF9vcCk7Cj4gKwkJCWluW2ldID0gYnJjbW5hbmRfcmVhZF9yZWcoaG9z dC0+Y3RybCwKPiArCQkJCQkJICBCUkNNTkFORF9MTF9SREFUQSk7Cj4gKwkJfQo+ICsJCWJyZWFr Owo+ICsKPiArCWNhc2UgTkFORF9PUF9EQVRBX09VVF9JTlNUUjoKPiArCQlvdXQgPSBpbnN0ci0+ Y3R4LmRhdGEuYnVmLm91dDsKPiArCQlmb3IgKGkgPSAwOyBpIDwgaW5zdHItPmN0eC5kYXRhLmxl bjsgaSsrKQo+ICsJCQlicmNtbmFuZF9sb3dfbGV2ZWxfb3AoaG9zdCwgTExfT1BfV1IsIG91dFtp XSwgbGFzdF9vcCk7Cj4gKwkJYnJlYWs7Cj4gKwo+ICsJZGVmYXVsdDoKPiArCQlkZXZfZXJyKGN0 cmwtPmRldiwgInVuc3VwcG9ydGVkIGluc3RydWN0aW9uIHR5cGU6ICVkXG4iLAo+ICsJCQlpbnN0 ci0+dHlwZSk7Cj4gKwkJcmV0ID0gLUVJTlZBTDsKPiArCQlicmVhazsKPiArCX0KPiArCj4gKwly ZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtpbnQgYnJjbW5hbmRfZXhlY19vcF9pc19zdGF0dXMoY29u c3Qgc3RydWN0IG5hbmRfb3BlcmF0aW9uICpvcCkKPiArewo+ICsJaWYgKChvcC0+aW5zdHJzWzBd LnR5cGUgPT0gTkFORF9PUF9DTURfSU5TVFIpICYmCj4gKwkJKG9wLT5pbnN0cnNbMF0uY3R4LmNt ZC5vcGNvZGUgPT0gTkFORF9DTURfU1RBVFVTKSAmJgo+ICsJCShvcC0+bmluc3RycyA+IDEpICYm Cj4gKwkJKG9wLT5pbnN0cnNbMV0udHlwZSA9PSBOQU5EX09QX0RBVEFfSU5fSU5TVFIpKQoKWW91 IG5lZWQgdG8gc3RhcnQgY2hlY2tpbmcgaWYgb3AtPm5pbnN0cnMgPT0gMiwgbm8/Cgo+ICsJCXJl dHVybiAxOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtpbnQgYnJjbW5hbmRfZXhlY19v cF9pc19yZXNldChjb25zdCBzdHJ1Y3QgbmFuZF9vcGVyYXRpb24gKm9wKQo+ICt7Cj4gKwlpZiAo KG9wLT5pbnN0cnNbMF0udHlwZSA9PSBOQU5EX09QX0NNRF9JTlNUUikgJiYKPiArCQkob3AtPmlu c3Ryc1swXS5jdHguY21kLm9wY29kZSA9PSBOQU5EX0NNRF9SRVNFVCkpCgpQbGVhc2UgY2hlY2sg bmluc3RycyBhcyB3ZWxsIChmaXJzdCkuCgo+ICsJCXJldHVybiAxOwo+ICsKPiArCXJldHVybiAw Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGJyY21uYW5kX2V4ZWNfb3Aoc3RydWN0IG5hbmRfY2hp cCAqY2hpcCwKPiArCQkJICAgIGNvbnN0IHN0cnVjdCBuYW5kX29wZXJhdGlvbiAqb3AsCj4gKwkJ CSAgICBib29sIGNoZWNrX29ubHkpCj4gK3sKPiArCXN0cnVjdCBicmNtbmFuZF9ob3N0ICpob3N0 ID0gbmFuZF9nZXRfY29udHJvbGxlcl9kYXRhKGNoaXApOwo+ICsJc3RydWN0IG10ZF9pbmZvICpt dGQgPSBuYW5kX3RvX210ZChjaGlwKTsKPiArCWNvbnN0IHN0cnVjdCBuYW5kX29wX2luc3RyICpp bnN0ciA9ICZvcC0+aW5zdHJzWzBdOwo+ICsJdTggKnN0YXR1czsKPiArCXVuc2lnbmVkIGludCBp Owo+ICsJaW50IHJldCA9IDA7Cj4gKwo+ICsJaWYgKGNoZWNrX29ubHkpCj4gKwkJcmV0dXJuIDA7 Cj4gKwo+ICsJaWYgKGJyY21uYW5kX2V4ZWNfb3BfaXNfc3RhdHVzKG9wKSkgewo+ICsJCXN0YXR1 cyA9IG9wLT5pbnN0cnNbMV0uY3R4LmRhdGEuYnVmLmluOwo+ICsJCSpzdGF0dXMgPSBicmNtbmFu ZF9zdGF0dXMoaG9zdCk7Cj4gKwo+ICsJCXJldHVybiAwOwo+ICsJfQo+ICsKPiArCWlmIChvcC0+ ZGVhc3NlcnRfd3ApCj4gKwkJYnJjbW5hbmRfd3AobXRkLCAwKTsKPiArCj4gKwlmb3IgKGkgPSAw OyBpIDwgb3AtPm5pbnN0cnM7IGkrKykgewo+ICsJCWluc3RyID0gJm9wLT5pbnN0cnNbaV07Cj4g Kwo+ICsJCWlmIChpbnN0ci0+dHlwZSA9PSBOQU5EX09QX1dBSVRSRFlfSU5TVFIpIHsKPiArCQkJ cmV0ID0gYmNtbmFuZF9jdHJsX3BvbGxfc3RhdHVzKGhvc3QsIE5BTkRfQ1RSTF9SRFksIE5BTkRf Q1RSTF9SRFksIDApOwoKV2h5IGRvbid0IHlvdSBoYW5kbGUgdGhpcyBpbiBicmNtbmFuZF9leGVj X2luc3RyKCkgPyBJdCB3b3VsZCBsb29rIG11Y2gKbmljZXIuIEV2ZW4gaWYgdGhpcyBkb2VzIG5v dCBpbnZvbHZlIGFueSBhZGRpdGlvbmFsICJjeWNsZSIgb24gdGhlIE5BTkQKYnVzLCBpdCBzdGls bCBpcyBhbiBpbnN0cnVjdGlvbiBvZiB0aGUgY3VycmVudCBvcGVyYXRpb24uCgo+ICsJCQlpZiAo cmV0KQo+ICsJCQkJYnJlYWs7Cj4gKwkJfSBlbHNlIHsgLyogb3RoZXJ3aXNlIHBhc3MgdG8gbG93 IGxldmVsIGltcGxlbWVudGF0aW9uICovCj4gKwkJCXJldCA9IGJyY21uYW5kX2V4ZWNfaW5zdHIo aG9zdCwgaW5zdHIsIGkgPT0gKG9wLT5uaW5zdHJzIC0gMSkpOwoKV2hhdCdzIHRoZSBwb2ludCBv ZiB0aGlzIGkgPT0gb3AtPm5pbnN0cnMgLSAxIGNoZWNrPwoKPiArCQkJaWYgKHJldCkKPiArCQkJ CWJyZWFrOwo+ICsJCX0KPiArCX0KPiArCj4gKwlpZiAob3AtPmRlYXNzZXJ0X3dwKQo+ICsJCWJy Y21uYW5kX3dwKG10ZCwgMSk7Cj4gKwo+ICsJaWYgKGJyY21uYW5kX2V4ZWNfb3BfaXNfcmVzZXQo b3ApKSB7Cj4gKwkJYnJjbW5hbmRfc3RhdHVzKGhvc3QpOwo+ICsJCWJyY21uYW5kX3dwKG10ZCwg MSk7CgpUaGlzIHNob3VsZCBiZSBkb25lIHJpZ2h0IGFmdGVyIHRoZSBzdGF0dXMgY2hlY2ssIG5v PwoKQW55d2F5LCBJJ20gbm90IHN1cmUgSSB1bmRlcnN0YW5kIHRoaXMuIFdoeSBkbyB5b3UgcmVh ZCB0aGUgc3RhdHVzIGFuZAphc3NlcnQgV1A/Cgo+ICsJfQo+ICsKPiArCXJldHVybiByZXQ7Cj4g K30KPiArCj4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKgo+ICAgKiBQZXItQ1Mgc2V0dXAgKDEgTkFORCBkZXZp Y2UpCj4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKi8KPiBAQCAtMjgyMiw2ICsyNzU1LDcgQEAgc3RhdGljIGlu dCBicmNtbmFuZF9hdHRhY2hfY2hpcChzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwKQo+IAo+ICBzdGF0 aWMgY29uc3Qgc3RydWN0IG5hbmRfY29udHJvbGxlcl9vcHMgYnJjbW5hbmRfY29udHJvbGxlcl9v cHMgPSB7Cj4gIAkuYXR0YWNoX2NoaXAgPSBicmNtbmFuZF9hdHRhY2hfY2hpcCwKPiArCS5leGVj X29wID0gYnJjbW5hbmRfZXhlY19vcCwKPiAgfTsKPiAKPiAgc3RhdGljIGludCBicmNtbmFuZF9p bml0X2NzKHN0cnVjdCBicmNtbmFuZF9ob3N0ICpob3N0LAo+IEBAIC0yODQ2LDEzICsyNzgwLDYg QEAgc3RhdGljIGludCBicmNtbmFuZF9pbml0X2NzKHN0cnVjdCBicmNtbmFuZF9ob3N0ICpob3N0 LAo+ICAJbXRkLT5vd25lciA9IFRISVNfTU9EVUxFOwo+ICAJbXRkLT5kZXYucGFyZW50ID0gZGV2 Owo+IAo+IC0JY2hpcC0+bGVnYWN5LmNtZF9jdHJsID0gYnJjbW5hbmRfY21kX2N0cmw7Cj4gLQlj aGlwLT5sZWdhY3kuY21kZnVuYyA9IGJyY21uYW5kX2NtZGZ1bmM7Cj4gLQljaGlwLT5sZWdhY3ku d2FpdGZ1bmMgPSBicmNtbmFuZF93YWl0ZnVuYzsKPiAtCWNoaXAtPmxlZ2FjeS5yZWFkX2J5dGUg PSBicmNtbmFuZF9yZWFkX2J5dGU7Cj4gLQljaGlwLT5sZWdhY3kucmVhZF9idWYgPSBicmNtbmFu ZF9yZWFkX2J1ZjsKPiAtCWNoaXAtPmxlZ2FjeS53cml0ZV9idWYgPSBicmNtbmFuZF93cml0ZV9i dWY7Cj4gLQo+ICAJY2hpcC0+ZWNjLmVuZ2luZV90eXBlID0gTkFORF9FQ0NfRU5HSU5FX1RZUEVf T05fSE9TVDsKPiAgCWNoaXAtPmVjYy5yZWFkX3BhZ2UgPSBicmNtbmFuZF9yZWFkX3BhZ2U7Cj4g IAljaGlwLT5lY2Mud3JpdGVfcGFnZSA9IGJyY21uYW5kX3dyaXRlX3BhZ2U7Cj4gQEAgLTI4NjQs NiArMjc5MSw3IEBAIHN0YXRpYyBpbnQgYnJjbW5hbmRfaW5pdF9jcyhzdHJ1Y3QgYnJjbW5hbmRf aG9zdCAqaG9zdCwKPiAgCWNoaXAtPmVjYy53cml0ZV9vb2IgPSBicmNtbmFuZF93cml0ZV9vb2I7 Cj4gCj4gIAljaGlwLT5jb250cm9sbGVyID0gJmN0cmwtPmNvbnRyb2xsZXI7Cj4gKwljdHJsLT5j b250cm9sbGVyLmNvbnRyb2xsZXJfd3AgPSAxOwo+IAo+ICAJLyoKPiAgCSAqIFRoZSBib290bG9h ZGVyIG1pZ2h0IGhhdmUgY29uZmlndXJlZCAxNmJpdCBtb2RlIGJ1dAo+IC0tCj4gMi4zNy4zCj4g Cj4gCgoKVGhhbmtzLApNaXF1w6hsCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KTGludXggTVREIGRpc2N1c3Npb24gbWFpbGluZyBsaXN0Cmh0 dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtbXRkLwo=