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 X-Spam-Level: X-Spam-Status: No, score=-9.8 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 39B6DC2D0C0 for ; Mon, 23 Dec 2019 11:07:00 +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 02500206B7 for ; Mon, 23 Dec 2019 11:07:00 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="Eg9Z4QZ4"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=ti.com header.i=@ti.com header.b="A0wRdeG2" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 02500206B7 Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=ti.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=W/Ba1Yf9JaCL3rj4rFVi66XNAoV2ArUXyMIuN6uYNbI=; b=Eg9Z4QZ4AQTu/E J/XIKY+hHJi1As8S/TWpXaPkX3rexcLjGK4cB6iUO7tRfQgKzPKhMB3JNz87Dr6T0j07upKa2TE10 XyC3KN3ARI+FJmymOy4nl8vDQOSAaw7NU2ndpQjvKhtM8itYw+ru1eoe4tTwNmBD8P3O67A93mO9p iSuI2R4TRAD2L5WQyCiM8AtWFjWtuXCJhiUxJ86ksqmBDRmOeosa4Ld8n5z3D20almEzlLgvLsMnK 7oCl/oyhYRdKm3b8qMfzz50UcV+ex2SgIjIDujLdyFJczKvtuSV+KKpUvv8q5qBduvGmP034vOdPp AEKPS1PXqrfmEBj7NH7w==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1ijLYB-0003CU-H3; Mon, 23 Dec 2019 11:06:59 +0000 Received: from lelv0142.ext.ti.com ([198.47.23.249]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1ijLWM-0000v9-P9 for linux-arm-kernel@lists.infradead.org; Mon, 23 Dec 2019 11:05:14 +0000 Received: from lelv0266.itg.ti.com ([10.180.67.225]) by lelv0142.ext.ti.com (8.15.2/8.15.2) with ESMTP id xBNB4sKO110478; Mon, 23 Dec 2019 05:04:54 -0600 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1577099094; bh=6euieU/CA4Rbzgf284kjF39DAXqoBKrNfZb+p7f8Vvk=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=A0wRdeG2FDzXs4nMJQ/tk8LDlOyrH7JtXzXagy2ED74iMnof0hlePeg2Jdnr0ypEm Z1+rSHbU8RxealD3827NxAcIXzT3Sg0rBVbVTUHsdL9PR3d52YrQxqoDsChluIc2XD SSwbmzHEWShFDR3Wu5qpE5qTGlOuqG7oM9KGmfrY= Received: from DLEE102.ent.ti.com (dlee102.ent.ti.com [157.170.170.32]) by lelv0266.itg.ti.com (8.15.2/8.15.2) with ESMTPS id xBNB4sp7024841 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Mon, 23 Dec 2019 05:04:54 -0600 Received: from DLEE113.ent.ti.com (157.170.170.24) by DLEE102.ent.ti.com (157.170.170.32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1847.3; Mon, 23 Dec 2019 05:04:53 -0600 Received: from lelv0327.itg.ti.com (10.180.67.183) by DLEE113.ent.ti.com (157.170.170.24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1847.3 via Frontend Transport; Mon, 23 Dec 2019 05:04:52 -0600 Received: from feketebors.ti.com (ileax41-snat.itg.ti.com [10.172.224.153]) by lelv0327.itg.ti.com (8.15.2/8.15.2) with ESMTP id xBNB4eM9025693; Mon, 23 Dec 2019 05:04:48 -0600 From: Peter Ujfalusi To: , , , Subject: [PATCH v8 02/18] soc: ti: k3: add navss ringacc driver Date: Mon, 23 Dec 2019 13:04:42 +0200 Message-ID: <20191223110458.30766-3-peter.ujfalusi@ti.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20191223110458.30766-1-peter.ujfalusi@ti.com> References: <20191223110458.30766-1-peter.ujfalusi@ti.com> MIME-Version: 1.0 X-EXCLAIMER-MD-CONFIG: e1e8a2fd-e40a-4ac6-ac9b-f7e9cc9ee180 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20191223_030507_192512_09D6709E X-CRM114-Status: GOOD ( 23.10 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: devicetree@vger.kernel.org, grygorii.strashko@ti.com, vigneshr@ti.com, lokeshvutla@ti.com, j-keerthy@ti.com, linux-kernel@vger.kernel.org, t-kristo@ti.com, tony@atomide.com, dmaengine@vger.kernel.org, dan.j.williams@intel.com, frowand.list@gmail.com, linux-arm-kernel@lists.infradead.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org RnJvbTogR3J5Z29yaWkgU3RyYXNoa28gPGdyeWdvcmlpLnN0cmFzaGtvQHRpLmNvbT4KClRoZSBS aW5nIEFjY2VsZXJhdG9yIChSSU5HQUNDIG9yIFJBKSBwcm92aWRlcyBoYXJkd2FyZSBhY2NlbGVy YXRpb24gdG8KZW5hYmxlIHN0cmFpZ2h0Zm9yd2FyZCBwYXNzaW5nIG9mIHdvcmsgYmV0d2VlbiBh IHByb2R1Y2VyIGFuZCBhIGNvbnN1bWVyLgpUaGVyZSBpcyBvbmUgUklOR0FDQyBtb2R1bGUgcGVy IE5BVlNTIG9uIFRJIEFNNjV4IFNvQ3MuCgpUaGUgUklOR0FDQyBjb252ZXJ0cyBjb25zdGFudC1h ZGRyZXNzIHJlYWQgYW5kIHdyaXRlIGFjY2Vzc2VzIHRvIGVxdWl2YWxlbnQKcmVhZCBvciB3cml0 ZSBhY2Nlc3NlcyB0byBhIGNpcmN1bGFyIGRhdGEgc3RydWN0dXJlIGluIG1lbW9yeS4gVGhlIFJJ TkdBQ0MKZWxpbWluYXRlcyB0aGUgbmVlZCBmb3IgZWFjaCBETUEgY29udHJvbGxlciB3aGljaCBu ZWVkcyB0byBhY2Nlc3MgcmluZwplbGVtZW50cyBmcm9tIGhhdmluZyB0byBrbm93IHRoZSBjdXJy ZW50IHN0YXRlIG9mIHRoZSByaW5nIChiYXNlIGFkZHJlc3MsCmN1cnJlbnQgb2Zmc2V0KS4gVGhl IERNQSBjb250cm9sbGVyIHBlcmZvcm1zIGEgcmVhZCBvciB3cml0ZSBhY2Nlc3MgdG8gYQpzcGVj aWZpYyBhZGRyZXNzIHJhbmdlICh3aGljaCBtYXBzIHRvIHRoZSBzb3VyY2UgaW50ZXJmYWNlIG9u IHRoZSBSSU5HQUNDKQphbmQgdGhlIFJJTkdBQ0MgcmVwbGFjZXMgdGhlIGFkZHJlc3MgZm9yIHRo ZSB0cmFuc2FjdGlvbiB3aXRoIGEgbmV3IGFkZHJlc3MKd2hpY2ggY29ycmVzcG9uZHMgdG8gdGhl IGhlYWQgb3IgdGFpbCBlbGVtZW50IG9mIHRoZSByaW5nIChoZWFkIGZvciByZWFkcywKdGFpbCBm b3Igd3JpdGVzKS4gU2luY2UgdGhlIFJJTkdBQ0MgbWFpbnRhaW5zIHRoZSBzdGF0ZSwgbXVsdGlw bGUgRE1BCmNvbnRyb2xsZXJzIG9yIGNoYW5uZWxzIGFyZSBhbGxvd2VkIHRvIGNvaGVyZW50bHkg c2hhcmUgdGhlIHNhbWUgcmluZ3MgYXMKYXBwbGljYWJsZS4gVGhlIFJJTkdBQ0MgaXMgYWJsZSB0 byBwbGFjZSBkYXRhIHdoaWNoIGlzIGRlc3RpbmVkIHRvd2FyZHMKc29mdHdhcmUgaW50byBjYWNo ZWQgbWVtb3J5IGRpcmVjdGx5LgoKU3VwcG9ydGVkIHJpbmcgbW9kZXM6Ci0gUmluZyBNb2RlCi0g TWVzc2FnaW5nIE1vZGUKLSBDcmVkZW50aWFscyBNb2RlCi0gUXVldWUgTWFuYWdlciBNb2RlCgpU SS1TQ0kgaW50ZWdyYXRpb246CgpUZXhhcyBJbnN0cnVtZW50J3MgU3lzdGVtIENvbnRyb2wgSW50 ZXJmYWNlIChUSS1TQ0kpIE1lc3NhZ2UgUHJvdG9jb2wgbm93CmhhcyBjb250cm9sIG92ZXIgUmlu Z2FjYyBtb2R1bGUgcmVzb3VyY2VzIG1hbmFnZW1lbnQgKFJNKSBhbmQgUmluZ3MKY29uZmlndXJh dGlvbi4KClRoZSBjb3JyZXNwb25kaW5nIHN1cHBvcnQgb2YgVEktU0NJIFJpbmdhY2MgbW9kdWxl IFJNIHByb3RvY29sCmludHJvZHVjZWQgYXMgb3B0aW9uIHRocm91Z2ggRFQgcGFyYW1ldGVyczoK LSB0aSxzY2k6IHBoYW5kbGUgb24gVEktU0NJIGZpcm13YXJlIGNvbnRyb2xsZXIgRFQgbm9kZQot IHRpLHNjaS1kZXYtaWQ6IFRJLVNDSSBkZXZpY2UgaWRlbnRpZmllciBhcyBwZXIgVEktU0NJIGZp cm13YXJlIHNwZWMKCmlmIGJvdGggcGFyYW1ldGVycyBwcmVzZW50IC0gUmluZ2FjYyBkcml2ZXIg d2lsbCBjb25maWd1cmUvZnJlZS9yZXNldCBSaW5ncwp1c2luZyBUSS1TQ0kgTWVzc2FnZSBSaW5n YWNjIFJNIFByb3RvY29sLgoKVGhlIFJpbmdhY2MgZHJpdmVyIG1hbmFnZXMgUmluZ3MgYWxsb2Nh dGlvbiBieSBpdHNlbGYgbm93IGFuZCByZXF1ZXN0cwpUSS1TQ0kgZmlybXdhcmUgdG8gYWxsb2Nh dGUgYW5kIGNvbmZpZ3VyZSBzcGVjaWZpYyBSaW5ncyBvbmx5LiBJdCdzIGRvbmUKdGhpcyB3YXkg YmVjYXVzZSwgTGludXggZHJpdmVyIGltcGxlbWVudHMgdHdvIHN0YWdlIFJpbmdzIGFsbG9jYXRp b24gYW5kCmNvbmZpZ3VyYXRpb24gKGFsbG9jYXRlIHJpbmcgYW5kIGNvbmZpZ3VyZSByaW5nKSB3 aGlsZSBUSS1TQ0kgTWVzc2FnZQpQcm90b2NvbCBzdXBwb3J0cyBvbmx5IG9uZSBjb21iaW5lZCBv cGVyYXRpb24gKGFsbG9jYXRlK2NvbmZpZ3VyZSkuCgpTaWduZWQtb2ZmLWJ5OiBHcnlnb3JpaSBT dHJhc2hrbyA8Z3J5Z29yaWkuc3RyYXNoa29AdGkuY29tPgpTaWduZWQtb2ZmLWJ5OiBQZXRlciBV amZhbHVzaSA8cGV0ZXIudWpmYWx1c2lAdGkuY29tPgpSZXZpZXdlZC1ieTogVGVybyBLcmlzdG8g PHQta3Jpc3RvQHRpLmNvbT4KVGVzdGVkLWJ5OiBLZWVydGh5IDxqLWtlZXJ0aHlAdGkuY29tPgot LS0KIGRyaXZlcnMvc29jL3RpL0tjb25maWcgICAgICAgICAgICB8ICAgMTEgKwogZHJpdmVycy9z b2MvdGkvTWFrZWZpbGUgICAgICAgICAgIHwgICAgMSArCiBkcml2ZXJzL3NvYy90aS9rMy1yaW5n YWNjLmMgICAgICAgfCAxMTU3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBpbmNsdWRl L2xpbnV4L3NvYy90aS9rMy1yaW5nYWNjLmggfCAgMjQ0ICsrKysrKwogNCBmaWxlcyBjaGFuZ2Vk LCAxNDEzIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3NvYy90aS9r My1yaW5nYWNjLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL2xpbnV4L3NvYy90aS9rMy1y aW5nYWNjLmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NvYy90aS9LY29uZmlnIGIvZHJpdmVycy9z b2MvdGkvS2NvbmZpZwppbmRleCBjZjU0NWY0MjhkMDMuLjQ0ODZlMDU1Nzk0YyAxMDA2NDQKLS0t IGEvZHJpdmVycy9zb2MvdGkvS2NvbmZpZworKysgYi9kcml2ZXJzL3NvYy90aS9LY29uZmlnCkBA IC04MCw2ICs4MCwxNyBAQCBjb25maWcgVElfU0NJX1BNX0RPTUFJTlMKIAkgIGNhbGxlZCB0aV9z Y2lfcG1fZG9tYWlucy4gTm90ZSB0aGlzIGlzIG5lZWRlZCBlYXJseSBpbiBib290IGJlZm9yZQog CSAgcm9vdGZzIG1heSBiZSBhdmFpbGFibGUuCiAKK2NvbmZpZyBUSV9LM19SSU5HQUNDCisJYm9v bCAiSzMgUmluZyBhY2NlbGVyYXRvciBTdWIgU3lzdGVtIgorCWRlcGVuZHMgb24gQVJDSF9LMyB8 fCBDT01QSUxFX1RFU1QKKwlkZXBlbmRzIG9uIFRJX1NDSV9JTlRBX0lSUUNISVAKKwloZWxwCisJ ICBTYXkgeSBoZXJlIHRvIHN1cHBvcnQgdGhlIEszIFJpbmcgYWNjZWxlcmF0b3IgbW9kdWxlLgor CSAgVGhlIFJpbmcgQWNjZWxlcmF0b3IgKFJJTkdBQ0Mgb3IgUkEpICBwcm92aWRlcyBoYXJkd2Fy ZSBhY2NlbGVyYXRpb24KKwkgIHRvIGVuYWJsZSBzdHJhaWdodGZvcndhcmQgcGFzc2luZyBvZiB3 b3JrIGJldHdlZW4gYSBwcm9kdWNlcgorCSAgYW5kIGEgY29uc3VtZXIuIFRoZXJlIGlzIG9uZSBS SU5HQUNDIG1vZHVsZSBwZXIgTkFWU1Mgb24gVEkgQU02NXggU29DcworCSAgSWYgdW5zdXJlLCBz YXkgTi4KKwogZW5kaWYgIyBTT0NfVEkKIAogY29uZmlnIFRJX1NDSV9JTlRBX01TSV9ET01BSU4K ZGlmZiAtLWdpdCBhL2RyaXZlcnMvc29jL3RpL01ha2VmaWxlIGIvZHJpdmVycy9zb2MvdGkvTWFr ZWZpbGUKaW5kZXggNzg4YjVjZDFlMTgwLi5iZWM4Mjc5MzdhNWYgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvc29jL3RpL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc29jL3RpL01ha2VmaWxlCkBAIC0xMCwz ICsxMCw0IEBAIG9iai0kKENPTkZJR19BUkNIX09NQVAyUExVUykJCSs9IG9tYXBfcHJtLm8KIG9i ai0kKENPTkZJR19XS1VQX00zX0lQQykJCSs9IHdrdXBfbTNfaXBjLm8KIG9iai0kKENPTkZJR19U SV9TQ0lfUE1fRE9NQUlOUykJCSs9IHRpX3NjaV9wbV9kb21haW5zLm8KIG9iai0kKENPTkZJR19U SV9TQ0lfSU5UQV9NU0lfRE9NQUlOKQkrPSB0aV9zY2lfaW50YV9tc2kubworb2JqLSQoQ09ORklH X1RJX0szX1JJTkdBQ0MpCQkrPSBrMy1yaW5nYWNjLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc29j L3RpL2szLXJpbmdhY2MuYyBiL2RyaXZlcnMvc29jL3RpL2szLXJpbmdhY2MuYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjVmYjJlZTJhYzk3OAotLS0gL2Rldi9udWxs CisrKyBiL2RyaXZlcnMvc29jL3RpL2szLXJpbmdhY2MuYwpAQCAtMCwwICsxLDExNTcgQEAKKy8v IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisvKgorICogVEkgSzMgTkFWU1MgUmlu ZyBBY2NlbGVyYXRvciBzdWJzeXN0ZW0gZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE5 IFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZCAtIGh0dHA6Ly93d3cudGkuY29tCisgKi8K KworI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4K KyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRl IDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zb2MvdGkvazMtcmlu Z2FjYy5oPgorI2luY2x1ZGUgPGxpbnV4L3NvYy90aS90aV9zY2lfcHJvdG9jb2wuaD4KKyNpbmNs dWRlIDxsaW51eC9zb2MvdGkvdGlfc2NpX2ludGFfbXNpLmg+CisjaW5jbHVkZSA8bGludXgvb2Zf aXJxLmg+CisjaW5jbHVkZSA8bGludXgvaXJxZG9tYWluLmg+CisKK3N0YXRpYyBMSVNUX0hFQUQo azNfcmluZ2FjY19saXN0KTsKK3N0YXRpYyBERUZJTkVfTVVURVgoazNfcmluZ2FjY19saXN0X2xv Y2spOworCisjZGVmaW5lIEszX1JJTkdBQ0NfQ0ZHX1JJTkdfU0laRV9FTENOVF9NQVNLCQlHRU5N QVNLKDE5LCAwKQorCisvKioKKyAqIHN0cnVjdCBrM19yaW5nX3J0X3JlZ3MgLSBUaGUgUkEgcmVh bHRpbWUgQ29udHJvbC9TdGF0dXMgUmVnaXN0ZXJzIHJlZ2lvbgorICoKKyAqIEByZXN2XzE2OiBS ZXNlcnZlZAorICogQGRiOiBSaW5nIERvb3JiZWxsIFJlZ2lzdGVyCisgKiBAcmVzdl80OiBSZXNl cnZlZAorICogQG9jYzogUmluZyBPY2N1cGFuY3kgUmVnaXN0ZXIKKyAqIEBpbmR4OiBSaW5nIEN1 cnJlbnQgSW5kZXggUmVnaXN0ZXIKKyAqIEBod29jYzogUmluZyBIYXJkd2FyZSBPY2N1cGFuY3kg UmVnaXN0ZXIKKyAqIEBod2luZHg6IFJpbmcgSGFyZHdhcmUgQ3VycmVudCBJbmRleCBSZWdpc3Rl cgorICovCitzdHJ1Y3QgazNfcmluZ19ydF9yZWdzIHsKKwl1MzIJcmVzdl8xNls0XTsKKwl1MzIJ ZGI7CisJdTMyCXJlc3ZfNFsxXTsKKwl1MzIJb2NjOworCXUzMglpbmR4OworCXUzMglod29jYzsK Kwl1MzIJaHdpbmR4OworfTsKKworI2RlZmluZSBLM19SSU5HQUNDX1JUX1JFR1NfU1RFUAkweDEw MDAKKworLyoqCisgKiBzdHJ1Y3QgazNfcmluZ19maWZvX3JlZ3MgLSBUaGUgUmluZyBBY2NlbGVy YXRvciBRdWV1ZXMgUmVnaXN0ZXJzIHJlZ2lvbgorICoKKyAqIEBoZWFkX2RhdGE6IFJpbmcgSGVh ZCBFbnRyeSBEYXRhIFJlZ2lzdGVycworICogQHRhaWxfZGF0YTogUmluZyBUYWlsIEVudHJ5IERh dGEgUmVnaXN0ZXJzCisgKiBAcGVla19oZWFkX2RhdGE6IFJpbmcgUGVlayBIZWFkIEVudHJ5IERh dGEgUmVncworICogQHBlZWtfdGFpbF9kYXRhOiBSaW5nIFBlZWsgVGFpbCBFbnRyeSBEYXRhIFJl Z3MKKyAqLworc3RydWN0IGszX3JpbmdfZmlmb19yZWdzIHsKKwl1MzIJaGVhZF9kYXRhWzEyOF07 CisJdTMyCXRhaWxfZGF0YVsxMjhdOworCXUzMglwZWVrX2hlYWRfZGF0YVsxMjhdOworCXUzMglw ZWVrX3RhaWxfZGF0YVsxMjhdOworfTsKKworLyoqCisgKiBzdHJ1Y3QgazNfcmluZ2FjY19wcm94 eV9nY2ZnX3JlZ3MgLSBSQSBQcm94eSBHbG9iYWwgQ29uZmlnIE1NSU8gUmVnaW9uCisgKgorICog QHJldmlzaW9uOiBSZXZpc2lvbiBSZWdpc3RlcgorICogQGNvbmZpZzogQ29uZmlnIFJlZ2lzdGVy CisgKi8KK3N0cnVjdCBrM19yaW5nYWNjX3Byb3h5X2djZmdfcmVncyB7CisJdTMyCXJldmlzaW9u OworCXUzMgljb25maWc7Cit9OworCisjZGVmaW5lIEszX1JJTkdBQ0NfUFJPWFlfQ0ZHX1RIUkVB RFNfTUFTSwkJR0VOTUFTSygxNSwgMCkKKworLyoqCisgKiBzdHJ1Y3QgazNfcmluZ2FjY19wcm94 eV90YXJnZXRfcmVncyAtIFByb3h5IERhdGFwYXRoIE1NSU8gUmVnaW9uCisgKgorICogQGNvbnRy b2w6IFByb3h5IENvbnRyb2wgUmVnaXN0ZXIKKyAqIEBzdGF0dXM6IFByb3h5IFN0YXR1cyBSZWdp c3RlcgorICogQHJlc3ZfNTEyOiBSZXNlcnZlZAorICogQGRhdGE6IFByb3h5IERhdGEgUmVnaXN0 ZXIKKyAqLworc3RydWN0IGszX3JpbmdhY2NfcHJveHlfdGFyZ2V0X3JlZ3MgeworCXUzMgljb250 cm9sOworCXUzMglzdGF0dXM7CisJdTgJcmVzdl81MTJbNTA0XTsKKwl1MzIJZGF0YVsxMjhdOwor fTsKKworI2RlZmluZSBLM19SSU5HQUNDX1BST1hZX1RBUkdFVF9TVEVQCTB4MTAwMAorI2RlZmlu ZSBLM19SSU5HQUNDX1BST1hZX05PVF9VU0VECSgtMSkKKworZW51bSBrM19yaW5nYWNjX3Byb3h5 X2FjY2Vzc19tb2RlIHsKKwlQUk9YWV9BQ0NFU1NfTU9ERV9IRUFEID0gMCwKKwlQUk9YWV9BQ0NF U1NfTU9ERV9UQUlMID0gMSwKKwlQUk9YWV9BQ0NFU1NfTU9ERV9QRUVLX0hFQUQgPSAyLAorCVBS T1hZX0FDQ0VTU19NT0RFX1BFRUtfVEFJTCA9IDMsCit9OworCisjZGVmaW5lIEszX1JJTkdBQ0Nf RklGT19XSU5ET1dfU0laRV9CWVRFUyAgKDUxMlUpCisjZGVmaW5lIEszX1JJTkdBQ0NfRklGT19S RUdTX1NURVAJMHgxMDAwCisjZGVmaW5lIEszX1JJTkdBQ0NfTUFYX0RCX1JJTkdfQ05UICAgICgx MjdVKQorCitzdHJ1Y3QgazNfcmluZ19vcHMgeworCWludCAoKnB1c2hfdGFpbCkoc3RydWN0IGsz X3JpbmcgKnJpbmcsIHZvaWQgKmVsbSk7CisJaW50ICgqcHVzaF9oZWFkKShzdHJ1Y3QgazNfcmlu ZyAqcmluZywgdm9pZCAqZWxtKTsKKwlpbnQgKCpwb3BfdGFpbCkoc3RydWN0IGszX3JpbmcgKnJp bmcsIHZvaWQgKmVsbSk7CisJaW50ICgqcG9wX2hlYWQpKHN0cnVjdCBrM19yaW5nICpyaW5nLCB2 b2lkICplbG0pOworfTsKKworLyoqCisgKiBzdHJ1Y3QgazNfcmluZyAtIFJBIFJpbmcgZGVzY3Jp cHRvcgorICoKKyAqIEBydDogUmluZyBjb250cm9sL3N0YXR1cyByZWdpc3RlcnMKKyAqIEBmaWZv czogUmluZyBxdWV1ZXMgcmVnaXN0ZXJzCisgKiBAcHJveHk6IFJpbmcgUHJveHkgRGF0YXBhdGgg cmVnaXN0ZXJzCisgKiBAcmluZ19tZW1fZG1hOiBSaW5nIGJ1ZmZlciBkbWEgYWRkcmVzcworICog QHJpbmdfbWVtX3ZpcnQ6IFJpbmcgYnVmZmVyIHZpcnQgYWRkcmVzcworICogQG9wczogUmluZyBv cGVyYXRpb25zCisgKiBAc2l6ZTogUmluZyBzaXplIGluIGVsZW1lbnRzCisgKiBAZWxtX3NpemU6 IFNpemUgb2YgdGhlIHJpbmcgZWxlbWVudAorICogQG1vZGU6IFJpbmcgbW9kZQorICogQGZsYWdz OiBmbGFncworICogQGZyZWU6IE51bWJlciBvZiBmcmVlIGVsZW1lbnRzCisgKiBAb2NjOiBSaW5n IG9jY3VwYW5jeQorICogQHdpbmRleDogV3JpdGUgaW5kZXggKG9ubHkgZm9yIEBLM19SSU5HQUND X1JJTkdfTU9ERV9SSU5HKQorICogQHJpbmRleDogUmVhZCBpbmRleCAob25seSBmb3IgQEszX1JJ TkdBQ0NfUklOR19NT0RFX1JJTkcpCisgKiBAcmluZ19pZDogUmluZyBJZAorICogQHBhcmVudDog UG9pbnRlciBvbiBzdHJ1Y3QgQGszX3JpbmdhY2MKKyAqIEB1c2VfY291bnQ6IFVzZSBjb3VudCBm b3Igc2hhcmVkIHJpbmdzCisgKiBAcHJveHlfaWQ6IFJBIFJpbmcgUHJveHkgSWQgKG9ubHkgaWYg QEszX1JJTkdBQ0NfUklOR19VU0VfUFJPWFkpCisgKi8KK3N0cnVjdCBrM19yaW5nIHsKKwlzdHJ1 Y3QgazNfcmluZ19ydF9yZWdzIF9faW9tZW0gKnJ0OworCXN0cnVjdCBrM19yaW5nX2ZpZm9fcmVn cyBfX2lvbWVtICpmaWZvczsKKwlzdHJ1Y3QgazNfcmluZ2FjY19wcm94eV90YXJnZXRfcmVncyAg X19pb21lbSAqcHJveHk7CisJZG1hX2FkZHJfdAlyaW5nX21lbV9kbWE7CisJdm9pZAkJKnJpbmdf bWVtX3ZpcnQ7CisJc3RydWN0IGszX3Jpbmdfb3BzICpvcHM7CisJdTMyCQlzaXplOworCWVudW0g azNfcmluZ19zaXplIGVsbV9zaXplOworCWVudW0gazNfcmluZ19tb2RlIG1vZGU7CisJdTMyCQlm bGFnczsKKyNkZWZpbmUgSzNfUklOR19GTEFHX0JVU1kJQklUKDEpCisjZGVmaW5lIEszX1JJTkdf RkxBR19TSEFSRUQJQklUKDIpCisJdTMyCQlmcmVlOworCXUzMgkJb2NjOworCXUzMgkJd2luZGV4 OworCXUzMgkJcmluZGV4OworCXUzMgkJcmluZ19pZDsKKwlzdHJ1Y3QgazNfcmluZ2FjYwkqcGFy ZW50OworCXUzMgkJdXNlX2NvdW50OworCWludAkJcHJveHlfaWQ7Cit9OworCisvKioKKyAqIHN0 cnVjdCBrM19yaW5nYWNjIC0gUmluZ3MgYWNjZWxlcmF0b3IgZGVzY3JpcHRvcgorICoKKyAqIEBk ZXY6IHBvaW50ZXIgb24gUkEgZGV2aWNlCisgKiBAcHJveHlfZ2NmZzogUkEgcHJveHkgZ2xvYmFs IGNvbmZpZyByZWdpc3RlcnMKKyAqIEBwcm94eV90YXJnZXRfYmFzZTogUkEgcHJveHkgZGF0YXBh dGggcmVnaW9uCisgKiBAbnVtX3JpbmdzOiBudW1iZXIgb2YgcmluZyBpbiBSQQorICogQHJpbmdz X2ludXNlOiBiaXRmaWVsZCBmb3IgcmluZyB1c2FnZSB0cmFja2luZworICogQHJtX2dwX3Jhbmdl OiBnZW5lcmFsIHB1cnBvc2UgcmluZ3MgcmFuZ2UgZnJvbSB0aXNjaQorICogQGRtYV9yaW5nX3Jl c2V0X3F1aXJrOiBETUEgcmVzZXQgdy9hIGVuYWJsZQorICogQG51bV9wcm94aWVzOiBudW1iZXIg b2YgUkEgcHJveGllcworICogQHByb3h5X2ludXNlOiBiaXRmaWVsZCBmb3IgcHJveHkgdXNhZ2Ug dHJhY2tpbmcKKyAqIEByaW5nczogYXJyYXkgb2YgcmluZ3MgZGVzY3JpcHRvcnMgKHN0cnVjdCBA azNfcmluZykKKyAqIEBsaXN0OiBsaXN0IG9mIFJBcyBpbiB0aGUgc3lzdGVtCisgKiBAcmVxX2xv Y2s6IHByb3RlY3QgcmluZ3MgYWxsb2NhdGlvbgorICogQHRpc2NpOiBwb2ludGVyIHRpLXNjaSBo YW5kbGUKKyAqIEB0aXNjaV9yaW5nX29wczogdGktc2NpIHJpbmdzIG9wcworICogQHRpc2NpX2Rl dl9pZDogdGktc2NpIGRldmljZSBpZAorICovCitzdHJ1Y3QgazNfcmluZ2FjYyB7CisJc3RydWN0 IGRldmljZSAqZGV2OworCXN0cnVjdCBrM19yaW5nYWNjX3Byb3h5X2djZmdfcmVncyBfX2lvbWVt ICpwcm94eV9nY2ZnOworCXZvaWQgX19pb21lbSAqcHJveHlfdGFyZ2V0X2Jhc2U7CisJdTMyIG51 bV9yaW5nczsgLyogbnVtYmVyIG9mIHJpbmdzIGluIFJpbmdhY2MgbW9kdWxlICovCisJdW5zaWdu ZWQgbG9uZyAqcmluZ3NfaW51c2U7CisJc3RydWN0IHRpX3NjaV9yZXNvdXJjZSAqcm1fZ3BfcmFu Z2U7CisKKwlib29sIGRtYV9yaW5nX3Jlc2V0X3F1aXJrOworCXUzMiBudW1fcHJveGllczsKKwl1 bnNpZ25lZCBsb25nICpwcm94eV9pbnVzZTsKKworCXN0cnVjdCBrM19yaW5nICpyaW5nczsKKwlz dHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IG11dGV4IHJlcV9sb2NrOyAvKiBwcm90ZWN0 IHJpbmdzIGFsbG9jYXRpb24gKi8KKworCWNvbnN0IHN0cnVjdCB0aV9zY2lfaGFuZGxlICp0aXNj aTsKKwljb25zdCBzdHJ1Y3QgdGlfc2NpX3JtX3JpbmdhY2Nfb3BzICp0aXNjaV9yaW5nX29wczsK Kwl1MzIgdGlzY2lfZGV2X2lkOworfTsKKworc3RhdGljIGxvbmcgazNfcmluZ2FjY19yaW5nX2dl dF9maWZvX3BvcyhzdHJ1Y3QgazNfcmluZyAqcmluZykKK3sKKwlyZXR1cm4gSzNfUklOR0FDQ19G SUZPX1dJTkRPV19TSVpFX0JZVEVTIC0KKwkgICAgICAgKDQgPDwgcmluZy0+ZWxtX3NpemUpOwor fQorCitzdGF0aWMgdm9pZCAqazNfcmluZ2FjY19nZXRfZWxtX2FkZHIoc3RydWN0IGszX3Jpbmcg KnJpbmcsIHUzMiBpZHgpCit7CisJcmV0dXJuIChyaW5nLT5yaW5nX21lbV92aXJ0ICsgaWR4ICog KDQgPDwgcmluZy0+ZWxtX3NpemUpKTsKK30KKworc3RhdGljIGludCBrM19yaW5nYWNjX3Jpbmdf cHVzaF9tZW0oc3RydWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0pOworc3RhdGljIGludCBr M19yaW5nYWNjX3JpbmdfcG9wX21lbShzdHJ1Y3QgazNfcmluZyAqcmluZywgdm9pZCAqZWxlbSk7 CisKK3N0YXRpYyBzdHJ1Y3QgazNfcmluZ19vcHMgazNfcmluZ19tb2RlX3Jpbmdfb3BzID0gewor CQkucHVzaF90YWlsID0gazNfcmluZ2FjY19yaW5nX3B1c2hfbWVtLAorCQkucG9wX2hlYWQgPSBr M19yaW5nYWNjX3JpbmdfcG9wX21lbSwKK307CisKK3N0YXRpYyBpbnQgazNfcmluZ2FjY19yaW5n X3B1c2hfaW8oc3RydWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0pOworc3RhdGljIGludCBr M19yaW5nYWNjX3JpbmdfcG9wX2lvKHN0cnVjdCBrM19yaW5nICpyaW5nLCB2b2lkICplbGVtKTsK K3N0YXRpYyBpbnQgazNfcmluZ2FjY19yaW5nX3B1c2hfaGVhZF9pbyhzdHJ1Y3QgazNfcmluZyAq cmluZywgdm9pZCAqZWxlbSk7CitzdGF0aWMgaW50IGszX3JpbmdhY2NfcmluZ19wb3BfdGFpbF9p byhzdHJ1Y3QgazNfcmluZyAqcmluZywgdm9pZCAqZWxlbSk7CisKK3N0YXRpYyBzdHJ1Y3QgazNf cmluZ19vcHMgazNfcmluZ19tb2RlX21zZ19vcHMgPSB7CisJCS5wdXNoX3RhaWwgPSBrM19yaW5n YWNjX3JpbmdfcHVzaF9pbywKKwkJLnB1c2hfaGVhZCA9IGszX3JpbmdhY2NfcmluZ19wdXNoX2hl YWRfaW8sCisJCS5wb3BfdGFpbCA9IGszX3JpbmdhY2NfcmluZ19wb3BfdGFpbF9pbywKKwkJLnBv cF9oZWFkID0gazNfcmluZ2FjY19yaW5nX3BvcF9pbywKK307CisKK3N0YXRpYyBpbnQgazNfcmlu Z2FjY19yaW5nX3B1c2hfaGVhZF9wcm94eShzdHJ1Y3QgazNfcmluZyAqcmluZywgdm9pZCAqZWxl bSk7CitzdGF0aWMgaW50IGszX3JpbmdhY2NfcmluZ19wdXNoX3RhaWxfcHJveHkoc3RydWN0IGsz X3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0pOworc3RhdGljIGludCBrM19yaW5nYWNjX3JpbmdfcG9w X2hlYWRfcHJveHkoc3RydWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0pOworc3RhdGljIGlu dCBrM19yaW5nYWNjX3JpbmdfcG9wX3RhaWxfcHJveHkoc3RydWN0IGszX3JpbmcgKnJpbmcsIHZv aWQgKmVsZW0pOworCitzdGF0aWMgc3RydWN0IGszX3Jpbmdfb3BzIGszX3JpbmdfbW9kZV9wcm94 eV9vcHMgPSB7CisJCS5wdXNoX3RhaWwgPSBrM19yaW5nYWNjX3JpbmdfcHVzaF90YWlsX3Byb3h5 LAorCQkucHVzaF9oZWFkID0gazNfcmluZ2FjY19yaW5nX3B1c2hfaGVhZF9wcm94eSwKKwkJLnBv cF90YWlsID0gazNfcmluZ2FjY19yaW5nX3BvcF90YWlsX3Byb3h5LAorCQkucG9wX2hlYWQgPSBr M19yaW5nYWNjX3JpbmdfcG9wX2hlYWRfcHJveHksCit9OworCitzdGF0aWMgdm9pZCBrM19yaW5n YWNjX3JpbmdfZHVtcChzdHJ1Y3QgazNfcmluZyAqcmluZykKK3sKKwlzdHJ1Y3QgZGV2aWNlICpk ZXYgPSByaW5nLT5wYXJlbnQtPmRldjsKKworCWRldl9kYmcoZGV2LCAiZHVtcCByaW5nOiAlZFxu IiwgcmluZy0+cmluZ19pZCk7CisJZGV2X2RiZyhkZXYsICJkdW1wIG1lbSB2aXJ0ICVwLCBkbWEg JXBhZFxuIiwgcmluZy0+cmluZ19tZW1fdmlydCwKKwkJJnJpbmctPnJpbmdfbWVtX2RtYSk7CisJ ZGV2X2RiZyhkZXYsICJkdW1wIGVsbXNpemUgJWQsIHNpemUgJWQsIG1vZGUgJWQsIHByb3h5X2lk ICVkXG4iLAorCQlyaW5nLT5lbG1fc2l6ZSwgcmluZy0+c2l6ZSwgcmluZy0+bW9kZSwgcmluZy0+ cHJveHlfaWQpOworCisJZGV2X2RiZyhkZXYsICJkdW1wIHJpbmdfcnRfcmVnczogZGIlMDh4XG4i LCByZWFkbCgmcmluZy0+cnQtPmRiKSk7CisJZGV2X2RiZyhkZXYsICJkdW1wIG9jYyUwOHhcbiIs IHJlYWRsKCZyaW5nLT5ydC0+b2NjKSk7CisJZGV2X2RiZyhkZXYsICJkdW1wIGluZHglMDh4XG4i LCByZWFkbCgmcmluZy0+cnQtPmluZHgpKTsKKwlkZXZfZGJnKGRldiwgImR1bXAgaHdvY2MlMDh4 XG4iLCByZWFkbCgmcmluZy0+cnQtPmh3b2NjKSk7CisJZGV2X2RiZyhkZXYsICJkdW1wIGh3aW5k eCUwOHhcbiIsIHJlYWRsKCZyaW5nLT5ydC0+aHdpbmR4KSk7CisKKwlpZiAocmluZy0+cmluZ19t ZW1fdmlydCkKKwkJcHJpbnRfaGV4X2R1bXBfZGVidWcoImR1bXAgcmluZ19tZW1fdmlydCAiLCBE VU1QX1BSRUZJWF9OT05FLAorCQkJCSAgICAgMTYsIDEsIHJpbmctPnJpbmdfbWVtX3ZpcnQsIDE2 ICogOCwgZmFsc2UpOworfQorCitzdHJ1Y3QgazNfcmluZyAqazNfcmluZ2FjY19yZXF1ZXN0X3Jp bmcoc3RydWN0IGszX3JpbmdhY2MgKnJpbmdhY2MsCisJCQkJCWludCBpZCwgdTMyIGZsYWdzKQor eworCWludCBwcm94eV9pZCA9IEszX1JJTkdBQ0NfUFJPWFlfTk9UX1VTRUQ7CisKKwltdXRleF9s b2NrKCZyaW5nYWNjLT5yZXFfbG9jayk7CisKKwlpZiAoaWQgPT0gSzNfUklOR0FDQ19SSU5HX0lE X0FOWSkgeworCQkvKiBSZXF1ZXN0IGZvciBhbnkgZ2VuZXJhbCBwdXJwb3NlIHJpbmcgKi8KKwkJ c3RydWN0IHRpX3NjaV9yZXNvdXJjZV9kZXNjICpncF9yaW5ncyA9CisJCQkJCQkmcmluZ2FjYy0+ cm1fZ3BfcmFuZ2UtPmRlc2NbMF07CisJCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKworCQlzaXplID0g Z3BfcmluZ3MtPnN0YXJ0ICsgZ3BfcmluZ3MtPm51bTsKKwkJaWQgPSBmaW5kX25leHRfemVyb19i aXQocmluZ2FjYy0+cmluZ3NfaW51c2UsIHNpemUsCisJCQkJCWdwX3JpbmdzLT5zdGFydCk7CisJ CWlmIChpZCA9PSBzaXplKQorCQkJZ290byBlcnJvcjsKKwl9IGVsc2UgaWYgKGlkIDwgMCkgewor CQlnb3RvIGVycm9yOworCX0KKworCWlmICh0ZXN0X2JpdChpZCwgcmluZ2FjYy0+cmluZ3NfaW51 c2UpICYmCisJICAgICEocmluZ2FjYy0+cmluZ3NbaWRdLmZsYWdzICYgSzNfUklOR19GTEFHX1NI QVJFRCkpCisJCWdvdG8gZXJyb3I7CisJZWxzZSBpZiAocmluZ2FjYy0+cmluZ3NbaWRdLmZsYWdz ICYgSzNfUklOR19GTEFHX1NIQVJFRCkKKwkJZ290byBvdXQ7CisKKwlpZiAoZmxhZ3MgJiBLM19S SU5HQUNDX1JJTkdfVVNFX1BST1hZKSB7CisJCXByb3h5X2lkID0gZmluZF9uZXh0X3plcm9fYml0 KHJpbmdhY2MtPnByb3h5X2ludXNlLAorCQkJCQkgICAgICByaW5nYWNjLT5udW1fcHJveGllcywg MCk7CisJCWlmIChwcm94eV9pZCA9PSByaW5nYWNjLT5udW1fcHJveGllcykKKwkJCWdvdG8gZXJy b3I7CisJfQorCisJaWYgKHByb3h5X2lkICE9IEszX1JJTkdBQ0NfUFJPWFlfTk9UX1VTRUQpIHsK KwkJc2V0X2JpdChwcm94eV9pZCwgcmluZ2FjYy0+cHJveHlfaW51c2UpOworCQlyaW5nYWNjLT5y aW5nc1tpZF0ucHJveHlfaWQgPSBwcm94eV9pZDsKKwkJZGV2X2RiZyhyaW5nYWNjLT5kZXYsICJH aXZpbmcgcmluZyMlZCBwcm94eSMlZFxuIiwgaWQsCisJCQlwcm94eV9pZCk7CisJfSBlbHNlIHsK KwkJZGV2X2RiZyhyaW5nYWNjLT5kZXYsICJHaXZpbmcgcmluZyMlZFxuIiwgaWQpOworCX0KKwor CXNldF9iaXQoaWQsIHJpbmdhY2MtPnJpbmdzX2ludXNlKTsKK291dDoKKwlyaW5nYWNjLT5yaW5n c1tpZF0udXNlX2NvdW50Kys7CisJbXV0ZXhfdW5sb2NrKCZyaW5nYWNjLT5yZXFfbG9jayk7CisJ cmV0dXJuICZyaW5nYWNjLT5yaW5nc1tpZF07CisKK2Vycm9yOgorCW11dGV4X3VubG9jaygmcmlu Z2FjYy0+cmVxX2xvY2spOworCXJldHVybiBOVUxMOworfQorRVhQT1JUX1NZTUJPTF9HUEwoazNf cmluZ2FjY19yZXF1ZXN0X3JpbmcpOworCitzdGF0aWMgdm9pZCBrM19yaW5nYWNjX3JpbmdfcmVz ZXRfc2NpKHN0cnVjdCBrM19yaW5nICpyaW5nKQoreworCXN0cnVjdCBrM19yaW5nYWNjICpyaW5n YWNjID0gcmluZy0+cGFyZW50OworCWludCByZXQ7CisKKwlyZXQgPSByaW5nYWNjLT50aXNjaV9y aW5nX29wcy0+Y29uZmlnKAorCQkJcmluZ2FjYy0+dGlzY2ksCisJCQlUSV9TQ0lfTVNHX1ZBTFVF X1JNX1JJTkdfQ09VTlRfVkFMSUQsCisJCQlyaW5nYWNjLT50aXNjaV9kZXZfaWQsCisJCQlyaW5n LT5yaW5nX2lkLAorCQkJMCwKKwkJCTAsCisJCQlyaW5nLT5zaXplLAorCQkJMCwKKwkJCTAsCisJ CQkwKTsKKwlpZiAocmV0KQorCQlkZXZfZXJyKHJpbmdhY2MtPmRldiwgIlRJU0NJIHJlc2V0IHJp bmcgZmFpbCAoJWQpIHJpbmdfaWR4ICVkXG4iLAorCQkJcmV0LCByaW5nLT5yaW5nX2lkKTsKK30K Kwordm9pZCBrM19yaW5nYWNjX3JpbmdfcmVzZXQoc3RydWN0IGszX3JpbmcgKnJpbmcpCit7CisJ aWYgKCFyaW5nIHx8ICEocmluZy0+ZmxhZ3MgJiBLM19SSU5HX0ZMQUdfQlVTWSkpCisJCXJldHVy bjsKKworCXJpbmctPm9jYyA9IDA7CisJcmluZy0+ZnJlZSA9IDA7CisJcmluZy0+cmluZGV4ID0g MDsKKwlyaW5nLT53aW5kZXggPSAwOworCisJazNfcmluZ2FjY19yaW5nX3Jlc2V0X3NjaShyaW5n KTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGszX3JpbmdhY2NfcmluZ19yZXNldCk7CisKK3N0YXRp YyB2b2lkIGszX3JpbmdhY2NfcmluZ19yZWNvbmZpZ19xbW9kZV9zY2koc3RydWN0IGszX3Jpbmcg KnJpbmcsCisJCQkJCSAgICAgICBlbnVtIGszX3JpbmdfbW9kZSBtb2RlKQoreworCXN0cnVjdCBr M19yaW5nYWNjICpyaW5nYWNjID0gcmluZy0+cGFyZW50OworCWludCByZXQ7CisKKwlyZXQgPSBy aW5nYWNjLT50aXNjaV9yaW5nX29wcy0+Y29uZmlnKAorCQkJcmluZ2FjYy0+dGlzY2ksCisJCQlU SV9TQ0lfTVNHX1ZBTFVFX1JNX1JJTkdfTU9ERV9WQUxJRCwKKwkJCXJpbmdhY2MtPnRpc2NpX2Rl dl9pZCwKKwkJCXJpbmctPnJpbmdfaWQsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQltb2RlLAor CQkJMCwKKwkJCTApOworCWlmIChyZXQpCisJCWRldl9lcnIocmluZ2FjYy0+ZGV2LCAiVElTQ0kg cmVjb25mIHFtb2RlIGZhaWwgKCVkKSByaW5nX2lkeCAlZFxuIiwKKwkJCXJldCwgcmluZy0+cmlu Z19pZCk7Cit9CisKK3ZvaWQgazNfcmluZ2FjY19yaW5nX3Jlc2V0X2RtYShzdHJ1Y3QgazNfcmlu ZyAqcmluZywgdTMyIG9jYykKK3sKKwlpZiAoIXJpbmcgfHwgIShyaW5nLT5mbGFncyAmIEszX1JJ TkdfRkxBR19CVVNZKSkKKwkJcmV0dXJuOworCisJaWYgKCFyaW5nLT5wYXJlbnQtPmRtYV9yaW5n X3Jlc2V0X3F1aXJrKQorCQlnb3RvIHJlc2V0OworCisJaWYgKCFvY2MpCisJCW9jYyA9IHJlYWRs KCZyaW5nLT5ydC0+b2NjKTsKKworCWlmIChvY2MpIHsKKwkJdTMyIGRiX3JpbmdfY250LCBkYl9y aW5nX2NudF9jdXI7CisKKwkJZGV2X2RiZyhyaW5nLT5wYXJlbnQtPmRldiwgIiVzICV1IG9jYzog JXVcbiIsIF9fZnVuY19fLAorCQkJcmluZy0+cmluZ19pZCwgb2NjKTsKKwkJLyogVEktU0NJIHJp bmcgcmVzZXQgKi8KKwkJazNfcmluZ2FjY19yaW5nX3Jlc2V0X3NjaShyaW5nKTsKKworCQkvKgor CQkgKiBTZXR1cCB0aGUgcmluZyBpbiByaW5nL2Rvb3JiZWxsIG1vZGUgKGlmIG5vdCBhbHJlYWR5 IGluIHRoaXMKKwkJICogbW9kZSkKKwkJICovCisJCWlmIChyaW5nLT5tb2RlICE9IEszX1JJTkdB Q0NfUklOR19NT0RFX1JJTkcpCisJCQlrM19yaW5nYWNjX3JpbmdfcmVjb25maWdfcW1vZGVfc2Np KAorCQkJCQlyaW5nLCBLM19SSU5HQUNDX1JJTkdfTU9ERV9SSU5HKTsKKwkJLyoKKwkJICogUmlu ZyB0aGUgZG9vcmJlbGwgMioqMjIg4oCTIHJpbmdPY2MgdGltZXMuCisJCSAqIFRoaXMgd2lsbCB3 cmFwIHRoZSBpbnRlcm5hbCBVRE1BUCByaW5nIHN0YXRlIG9jY3VwYW5jeQorCQkgKiBjb3VudGVy ICh3aGljaCBpcyAyMS1iaXRzIHdpZGUpIHRvIDAuCisJCSAqLworCQlkYl9yaW5nX2NudCA9ICgx VSA8PCAyMikgLSBvY2M7CisKKwkJd2hpbGUgKGRiX3JpbmdfY250ICE9IDApIHsKKwkJCS8qCisJ CQkgKiBSaW5nIHRoZSBkb29yYmVsbCB3aXRoIHRoZSBtYXhpbXVtIGNvdW50IGVhY2gKKwkJCSAq IGl0ZXJhdGlvbiBpZiBwb3NzaWJsZSB0byBtaW5pbWl6ZSB0aGUgdG90YWwKKwkJCSAqIG9mIHdy aXRlcworCQkJICovCisJCQlpZiAoZGJfcmluZ19jbnQgPiBLM19SSU5HQUNDX01BWF9EQl9SSU5H X0NOVCkKKwkJCQlkYl9yaW5nX2NudF9jdXIgPSBLM19SSU5HQUNDX01BWF9EQl9SSU5HX0NOVDsK KwkJCWVsc2UKKwkJCQlkYl9yaW5nX2NudF9jdXIgPSBkYl9yaW5nX2NudDsKKworCQkJd3JpdGVs KGRiX3JpbmdfY250X2N1ciwgJnJpbmctPnJ0LT5kYik7CisJCQlkYl9yaW5nX2NudCAtPSBkYl9y aW5nX2NudF9jdXI7CisJCX0KKworCQkvKiBSZXN0b3JlIHRoZSBvcmlnaW5hbCByaW5nIG1vZGUg KGlmIG5vdCByaW5nIG1vZGUpICovCisJCWlmIChyaW5nLT5tb2RlICE9IEszX1JJTkdBQ0NfUklO R19NT0RFX1JJTkcpCisJCQlrM19yaW5nYWNjX3JpbmdfcmVjb25maWdfcW1vZGVfc2NpKHJpbmcs IHJpbmctPm1vZGUpOworCX0KKworcmVzZXQ6CisJLyogUmVzZXQgdGhlIHJpbmcgKi8KKwlrM19y aW5nYWNjX3JpbmdfcmVzZXQocmluZyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChrM19yaW5nYWNj X3JpbmdfcmVzZXRfZG1hKTsKKworc3RhdGljIHZvaWQgazNfcmluZ2FjY19yaW5nX2ZyZWVfc2Np KHN0cnVjdCBrM19yaW5nICpyaW5nKQoreworCXN0cnVjdCBrM19yaW5nYWNjICpyaW5nYWNjID0g cmluZy0+cGFyZW50OworCWludCByZXQ7CisKKwlyZXQgPSByaW5nYWNjLT50aXNjaV9yaW5nX29w cy0+Y29uZmlnKAorCQkJcmluZ2FjYy0+dGlzY2ksCisJCQlUSV9TQ0lfTVNHX1ZBTFVFX1JNX0FM TF9OT19PUkRFUiwKKwkJCXJpbmdhY2MtPnRpc2NpX2Rldl9pZCwKKwkJCXJpbmctPnJpbmdfaWQs CisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCTApOworCWlmIChyZXQpCisJ CWRldl9lcnIocmluZ2FjYy0+ZGV2LCAiVElTQ0kgcmluZyBmcmVlIGZhaWwgKCVkKSByaW5nX2lk eCAlZFxuIiwKKwkJCXJldCwgcmluZy0+cmluZ19pZCk7Cit9CisKK2ludCBrM19yaW5nYWNjX3Jp bmdfZnJlZShzdHJ1Y3QgazNfcmluZyAqcmluZykKK3sKKwlzdHJ1Y3QgazNfcmluZ2FjYyAqcmlu Z2FjYzsKKworCWlmICghcmluZykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyaW5nYWNjID0gcmlu Zy0+cGFyZW50OworCisJZGV2X2RiZyhyaW5nLT5wYXJlbnQtPmRldiwgImZsYWdzOiAweCUwOHhc biIsIHJpbmctPmZsYWdzKTsKKworCWlmICghdGVzdF9iaXQocmluZy0+cmluZ19pZCwgcmluZ2Fj Yy0+cmluZ3NfaW51c2UpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJnJpbmdh Y2MtPnJlcV9sb2NrKTsKKworCWlmICgtLXJpbmctPnVzZV9jb3VudCkKKwkJZ290byBvdXQ7CisK KwlpZiAoIShyaW5nLT5mbGFncyAmIEszX1JJTkdfRkxBR19CVVNZKSkKKwkJZ290byBub19pbml0 OworCisJazNfcmluZ2FjY19yaW5nX2ZyZWVfc2NpKHJpbmcpOworCisJZG1hX2ZyZWVfY29oZXJl bnQocmluZ2FjYy0+ZGV2LAorCQkJICByaW5nLT5zaXplICogKDQgPDwgcmluZy0+ZWxtX3NpemUp LAorCQkJICByaW5nLT5yaW5nX21lbV92aXJ0LCByaW5nLT5yaW5nX21lbV9kbWEpOworCXJpbmct PmZsYWdzID0gMDsKKwlyaW5nLT5vcHMgPSBOVUxMOworCWlmIChyaW5nLT5wcm94eV9pZCAhPSBL M19SSU5HQUNDX1BST1hZX05PVF9VU0VEKSB7CisJCWNsZWFyX2JpdChyaW5nLT5wcm94eV9pZCwg cmluZ2FjYy0+cHJveHlfaW51c2UpOworCQlyaW5nLT5wcm94eSA9IE5VTEw7CisJCXJpbmctPnBy b3h5X2lkID0gSzNfUklOR0FDQ19QUk9YWV9OT1RfVVNFRDsKKwl9CisKK25vX2luaXQ6CisJY2xl YXJfYml0KHJpbmctPnJpbmdfaWQsIHJpbmdhY2MtPnJpbmdzX2ludXNlKTsKKworb3V0OgorCW11 dGV4X3VubG9jaygmcmluZ2FjYy0+cmVxX2xvY2spOworCXJldHVybiAwOworfQorRVhQT1JUX1NZ TUJPTF9HUEwoazNfcmluZ2FjY19yaW5nX2ZyZWUpOworCit1MzIgazNfcmluZ2FjY19nZXRfcmlu Z19pZChzdHJ1Y3QgazNfcmluZyAqcmluZykKK3sKKwlpZiAoIXJpbmcpCisJCXJldHVybiAtRUlO VkFMOworCisJcmV0dXJuIHJpbmctPnJpbmdfaWQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChrM19y aW5nYWNjX2dldF9yaW5nX2lkKTsKKwordTMyIGszX3JpbmdhY2NfZ2V0X3Rpc2NpX2Rldl9pZChz dHJ1Y3QgazNfcmluZyAqcmluZykKK3sKKwlpZiAoIXJpbmcpCisJCXJldHVybiAtRUlOVkFMOwor CisJcmV0dXJuIHJpbmctPnBhcmVudC0+dGlzY2lfZGV2X2lkOworfQorRVhQT1JUX1NZTUJPTF9H UEwoazNfcmluZ2FjY19nZXRfdGlzY2lfZGV2X2lkKTsKKworaW50IGszX3JpbmdhY2NfZ2V0X3Jp bmdfaXJxX251bShzdHJ1Y3QgazNfcmluZyAqcmluZykKK3sKKwlpbnQgaXJxX251bTsKKworCWlm ICghcmluZykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpcnFfbnVtID0gdGlfc2NpX2ludGFfbXNp X2dldF92aXJxKHJpbmctPnBhcmVudC0+ZGV2LCByaW5nLT5yaW5nX2lkKTsKKwlpZiAoaXJxX251 bSA8PSAwKQorCQlpcnFfbnVtID0gLUVJTlZBTDsKKwlyZXR1cm4gaXJxX251bTsKK30KK0VYUE9S VF9TWU1CT0xfR1BMKGszX3JpbmdhY2NfZ2V0X3JpbmdfaXJxX251bSk7CisKK3N0YXRpYyBpbnQg azNfcmluZ2FjY19yaW5nX2NmZ19zY2koc3RydWN0IGszX3JpbmcgKnJpbmcpCit7CisJc3RydWN0 IGszX3JpbmdhY2MgKnJpbmdhY2MgPSByaW5nLT5wYXJlbnQ7CisJdTMyIHJpbmdfaWR4OworCWlu dCByZXQ7CisKKwlpZiAoIXJpbmdhY2MtPnRpc2NpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJp bmdfaWR4ID0gcmluZy0+cmluZ19pZDsKKwlyZXQgPSByaW5nYWNjLT50aXNjaV9yaW5nX29wcy0+ Y29uZmlnKAorCQkJcmluZ2FjYy0+dGlzY2ksCisJCQlUSV9TQ0lfTVNHX1ZBTFVFX1JNX0FMTF9O T19PUkRFUiwKKwkJCXJpbmdhY2MtPnRpc2NpX2Rldl9pZCwKKwkJCXJpbmdfaWR4LAorCQkJbG93 ZXJfMzJfYml0cyhyaW5nLT5yaW5nX21lbV9kbWEpLAorCQkJdXBwZXJfMzJfYml0cyhyaW5nLT5y aW5nX21lbV9kbWEpLAorCQkJcmluZy0+c2l6ZSwKKwkJCXJpbmctPm1vZGUsCisJCQlyaW5nLT5l bG1fc2l6ZSwKKwkJCTApOworCWlmIChyZXQpCisJCWRldl9lcnIocmluZ2FjYy0+ZGV2LCAiVElT Q0kgY29uZmlnIHJpbmcgZmFpbCAoJWQpIHJpbmdfaWR4ICVkXG4iLAorCQkJcmV0LCByaW5nX2lk eCk7CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgazNfcmluZ2FjY19yaW5nX2NmZyhzdHJ1Y3Qg azNfcmluZyAqcmluZywgc3RydWN0IGszX3JpbmdfY2ZnICpjZmcpCit7CisJc3RydWN0IGszX3Jp bmdhY2MgKnJpbmdhY2MgPSByaW5nLT5wYXJlbnQ7CisJaW50IHJldCA9IDA7CisKKwlpZiAoIXJp bmcgfHwgIWNmZykKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGNmZy0+ZWxtX3NpemUgPiBLM19S SU5HQUNDX1JJTkdfRUxTSVpFXzI1NiB8fAorCSAgICBjZmctPm1vZGUgPj0gSzNfUklOR0FDQ19S SU5HX01PREVfSU5WQUxJRCB8fAorCSAgICBjZmctPnNpemUgJiB+SzNfUklOR0FDQ19DRkdfUklO R19TSVpFX0VMQ05UX01BU0sgfHwKKwkgICAgIXRlc3RfYml0KHJpbmctPnJpbmdfaWQsIHJpbmdh Y2MtPnJpbmdzX2ludXNlKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoY2ZnLT5tb2RlID09 IEszX1JJTkdBQ0NfUklOR19NT0RFX01FU1NBR0UgJiYKKwkgICAgcmluZy0+cHJveHlfaWQgPT0g SzNfUklOR0FDQ19QUk9YWV9OT1RfVVNFRCAmJgorCSAgICBjZmctPmVsbV9zaXplID4gSzNfUklO R0FDQ19SSU5HX0VMU0laRV84KSB7CisJCWRldl9lcnIocmluZ2FjYy0+ZGV2LAorCQkJIk1lc3Nh Z2UgbW9kZSBtdXN0IHVzZSBwcm94eSBmb3IgJXUgZWxlbWVudCBzaXplXG4iLAorCQkJNCA8PCBy aW5nLT5lbG1fc2l6ZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qCisJICogSW4gY2Fz ZSBvZiBzaGFyZWQgcmluZyBvbmx5IHRoZSBmaXJzdCB1c2VyIChtYXN0ZXIgdXNlcikgY2FuCisJ ICogY29uZmlndXJlIHRoZSByaW5nLiBUaGUgc2VxdWVuY2Ugc2hvdWxkIGJlIGJ5IHRoZSBjbGll bnQ6CisJICogcmluZyA9IGszX3JpbmdhY2NfcmVxdWVzdF9yaW5nKHJpbmdhY2MsIHJpbmdfaWQs IDApOyAjIG1hc3RlciB1c2VyCisJICogazNfcmluZ2FjY19yaW5nX2NmZyhyaW5nLCBjZmcpOyAj IG1hc3RlciBjb25maWd1cmF0aW9uCisJICogazNfcmluZ2FjY19yZXF1ZXN0X3JpbmcocmluZ2Fj YywgcmluZ19pZCwgSzNfUklOR19GTEFHX1NIQVJFRCk7CisJICogazNfcmluZ2FjY19yZXF1ZXN0 X3JpbmcocmluZ2FjYywgcmluZ19pZCwgSzNfUklOR19GTEFHX1NIQVJFRCk7CisJICovCisJaWYg KHJpbmctPnVzZV9jb3VudCAhPSAxKQorCQlyZXR1cm4gMDsKKworCXJpbmctPnNpemUgPSBjZmct PnNpemU7CisJcmluZy0+ZWxtX3NpemUgPSBjZmctPmVsbV9zaXplOworCXJpbmctPm1vZGUgPSBj ZmctPm1vZGU7CisJcmluZy0+b2NjID0gMDsKKwlyaW5nLT5mcmVlID0gMDsKKwlyaW5nLT5yaW5k ZXggPSAwOworCXJpbmctPndpbmRleCA9IDA7CisKKwlpZiAocmluZy0+cHJveHlfaWQgIT0gSzNf UklOR0FDQ19QUk9YWV9OT1RfVVNFRCkKKwkJcmluZy0+cHJveHkgPSByaW5nYWNjLT5wcm94eV90 YXJnZXRfYmFzZSArCisJCQkgICAgICByaW5nLT5wcm94eV9pZCAqIEszX1JJTkdBQ0NfUFJPWFlf VEFSR0VUX1NURVA7CisKKwlzd2l0Y2ggKHJpbmctPm1vZGUpIHsKKwljYXNlIEszX1JJTkdBQ0Nf UklOR19NT0RFX1JJTkc6CisJCXJpbmctPm9wcyA9ICZrM19yaW5nX21vZGVfcmluZ19vcHM7CisJ CWJyZWFrOworCWNhc2UgSzNfUklOR0FDQ19SSU5HX01PREVfTUVTU0FHRToKKwkJaWYgKHJpbmct PnByb3h5KQorCQkJcmluZy0+b3BzID0gJmszX3JpbmdfbW9kZV9wcm94eV9vcHM7CisJCWVsc2UK KwkJCXJpbmctPm9wcyA9ICZrM19yaW5nX21vZGVfbXNnX29wczsKKwkJYnJlYWs7CisJZGVmYXVs dDoKKwkJcmluZy0+b3BzID0gTlVMTDsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBlcnJfZnJl ZV9wcm94eTsKKwl9OworCisJcmluZy0+cmluZ19tZW1fdmlydCA9IGRtYV9hbGxvY19jb2hlcmVu dChyaW5nYWNjLT5kZXYsCisJCQkJCXJpbmctPnNpemUgKiAoNCA8PCByaW5nLT5lbG1fc2l6ZSks CisJCQkJCSZyaW5nLT5yaW5nX21lbV9kbWEsIEdGUF9LRVJORUwpOworCWlmICghcmluZy0+cmlu Z19tZW1fdmlydCkgeworCQlkZXZfZXJyKHJpbmdhY2MtPmRldiwgIkZhaWxlZCB0byBhbGxvYyBy aW5nIG1lbVxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2ZyZWVfb3BzOworCX0K KworCXJldCA9IGszX3JpbmdhY2NfcmluZ19jZmdfc2NpKHJpbmcpOworCisJaWYgKHJldCkKKwkJ Z290byBlcnJfZnJlZV9tZW07CisKKwlyaW5nLT5mbGFncyB8PSBLM19SSU5HX0ZMQUdfQlVTWTsK KwlyaW5nLT5mbGFncyB8PSAoY2ZnLT5mbGFncyAmIEszX1JJTkdBQ0NfUklOR19TSEFSRUQpID8K KwkJCUszX1JJTkdfRkxBR19TSEFSRUQgOiAwOworCisJazNfcmluZ2FjY19yaW5nX2R1bXAocmlu Zyk7CisKKwlyZXR1cm4gMDsKKworZXJyX2ZyZWVfbWVtOgorCWRtYV9mcmVlX2NvaGVyZW50KHJp bmdhY2MtPmRldiwKKwkJCSAgcmluZy0+c2l6ZSAqICg0IDw8IHJpbmctPmVsbV9zaXplKSwKKwkJ CSAgcmluZy0+cmluZ19tZW1fdmlydCwKKwkJCSAgcmluZy0+cmluZ19tZW1fZG1hKTsKK2Vycl9m cmVlX29wczoKKwlyaW5nLT5vcHMgPSBOVUxMOworZXJyX2ZyZWVfcHJveHk6CisJcmluZy0+cHJv eHkgPSBOVUxMOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChrM19yaW5nYWNj X3JpbmdfY2ZnKTsKKwordTMyIGszX3JpbmdhY2NfcmluZ19nZXRfc2l6ZShzdHJ1Y3QgazNfcmlu ZyAqcmluZykKK3sKKwlpZiAoIXJpbmcgfHwgIShyaW5nLT5mbGFncyAmIEszX1JJTkdfRkxBR19C VVNZKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gcmluZy0+c2l6ZTsKK30KK0VYUE9S VF9TWU1CT0xfR1BMKGszX3JpbmdhY2NfcmluZ19nZXRfc2l6ZSk7CisKK3UzMiBrM19yaW5nYWNj X3JpbmdfZ2V0X2ZyZWUoc3RydWN0IGszX3JpbmcgKnJpbmcpCit7CisJaWYgKCFyaW5nIHx8ICEo cmluZy0+ZmxhZ3MgJiBLM19SSU5HX0ZMQUdfQlVTWSkpCisJCXJldHVybiAtRUlOVkFMOworCisJ aWYgKCFyaW5nLT5mcmVlKQorCQlyaW5nLT5mcmVlID0gcmluZy0+c2l6ZSAtIHJlYWRsKCZyaW5n LT5ydC0+b2NjKTsKKworCXJldHVybiByaW5nLT5mcmVlOworfQorRVhQT1JUX1NZTUJPTF9HUEwo azNfcmluZ2FjY19yaW5nX2dldF9mcmVlKTsKKwordTMyIGszX3JpbmdhY2NfcmluZ19nZXRfb2Nj KHN0cnVjdCBrM19yaW5nICpyaW5nKQoreworCWlmICghcmluZyB8fCAhKHJpbmctPmZsYWdzICYg SzNfUklOR19GTEFHX0JVU1kpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiByZWFkbCgm cmluZy0+cnQtPm9jYyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChrM19yaW5nYWNjX3JpbmdfZ2V0 X29jYyk7CisKK3UzMiBrM19yaW5nYWNjX3JpbmdfaXNfZnVsbChzdHJ1Y3QgazNfcmluZyAqcmlu ZykKK3sKKwlyZXR1cm4gIWszX3JpbmdhY2NfcmluZ19nZXRfZnJlZShyaW5nKTsKK30KK0VYUE9S VF9TWU1CT0xfR1BMKGszX3JpbmdhY2NfcmluZ19pc19mdWxsKTsKKworZW51bSBrM19yaW5nYWNj X2FjY2Vzc19tb2RlIHsKKwlLM19SSU5HQUNDX0FDQ0VTU19NT0RFX1BVU0hfSEVBRCwKKwlLM19S SU5HQUNDX0FDQ0VTU19NT0RFX1BPUF9IRUFELAorCUszX1JJTkdBQ0NfQUNDRVNTX01PREVfUFVT SF9UQUlMLAorCUszX1JJTkdBQ0NfQUNDRVNTX01PREVfUE9QX1RBSUwsCisJSzNfUklOR0FDQ19B Q0NFU1NfTU9ERV9QRUVLX0hFQUQsCisJSzNfUklOR0FDQ19BQ0NFU1NfTU9ERV9QRUVLX1RBSUws Cit9OworCisjZGVmaW5lIEszX1JJTkdBQ0NfUFJPWFlfTU9ERSh4KQkoKCh4KSAmIDB4MykgPDwg MTYpCisjZGVmaW5lIEszX1JJTkdBQ0NfUFJPWFlfRUxTSVpFKHgpCSgoKHgpICYgMHg3KSA8PCAy NCkKK3N0YXRpYyBpbnQgazNfcmluZ2FjY19yaW5nX2NmZ19wcm94eShzdHJ1Y3QgazNfcmluZyAq cmluZywKKwkJCQkgICAgIGVudW0gazNfcmluZ2FjY19wcm94eV9hY2Nlc3NfbW9kZSBtb2RlKQor eworCXUzMiB2YWw7CisKKwl2YWwgPSByaW5nLT5yaW5nX2lkOworCXZhbCB8PSBLM19SSU5HQUND X1BST1hZX01PREUobW9kZSk7CisJdmFsIHw9IEszX1JJTkdBQ0NfUFJPWFlfRUxTSVpFKHJpbmct PmVsbV9zaXplKTsKKwl3cml0ZWwodmFsLCAmcmluZy0+cHJveHktPmNvbnRyb2wpOworCXJldHVy biAwOworfQorCitzdGF0aWMgaW50IGszX3JpbmdhY2NfcmluZ19hY2Nlc3NfcHJveHkoc3RydWN0 IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0sCisJCQkJCWVudW0gazNfcmluZ2FjY19hY2Nlc3Nf bW9kZSBhY2Nlc3NfbW9kZSkKK3sKKwl2b2lkIF9faW9tZW0gKnB0cjsKKworCXB0ciA9ICh2b2lk IF9faW9tZW0gKikmcmluZy0+cHJveHktPmRhdGE7CisKKwlzd2l0Y2ggKGFjY2Vzc19tb2RlKSB7 CisJY2FzZSBLM19SSU5HQUNDX0FDQ0VTU19NT0RFX1BVU0hfSEVBRDoKKwljYXNlIEszX1JJTkdB Q0NfQUNDRVNTX01PREVfUE9QX0hFQUQ6CisJCWszX3JpbmdhY2NfcmluZ19jZmdfcHJveHkocmlu ZywgUFJPWFlfQUNDRVNTX01PREVfSEVBRCk7CisJCWJyZWFrOworCWNhc2UgSzNfUklOR0FDQ19B Q0NFU1NfTU9ERV9QVVNIX1RBSUw6CisJY2FzZSBLM19SSU5HQUNDX0FDQ0VTU19NT0RFX1BPUF9U QUlMOgorCQlrM19yaW5nYWNjX3JpbmdfY2ZnX3Byb3h5KHJpbmcsIFBST1hZX0FDQ0VTU19NT0RF X1RBSUwpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlw dHIgKz0gazNfcmluZ2FjY19yaW5nX2dldF9maWZvX3BvcyhyaW5nKTsKKworCXN3aXRjaCAoYWNj ZXNzX21vZGUpIHsKKwljYXNlIEszX1JJTkdBQ0NfQUNDRVNTX01PREVfUE9QX0hFQUQ6CisJY2Fz ZSBLM19SSU5HQUNDX0FDQ0VTU19NT0RFX1BPUF9UQUlMOgorCQlkZXZfZGJnKHJpbmctPnBhcmVu dC0+ZGV2LAorCQkJInByb3h5Om1lbWNweV9mcm9taW8oeCk6IC0tPiBwdHIoJXApLCBtb2RlOiVk XG4iLCBwdHIsCisJCQlhY2Nlc3NfbW9kZSk7CisJCW1lbWNweV9mcm9taW8oZWxlbSwgcHRyLCAo NCA8PCByaW5nLT5lbG1fc2l6ZSkpOworCQlyaW5nLT5vY2MtLTsKKwkJYnJlYWs7CisJY2FzZSBL M19SSU5HQUNDX0FDQ0VTU19NT0RFX1BVU0hfVEFJTDoKKwljYXNlIEszX1JJTkdBQ0NfQUNDRVNT X01PREVfUFVTSF9IRUFEOgorCQlkZXZfZGJnKHJpbmctPnBhcmVudC0+ZGV2LAorCQkJInByb3h5 Om1lbWNweV90b2lvKHgpOiAtLT4gcHRyKCVwKSwgbW9kZTolZFxuIiwgcHRyLAorCQkJYWNjZXNz X21vZGUpOworCQltZW1jcHlfdG9pbyhwdHIsIGVsZW0sICg0IDw8IHJpbmctPmVsbV9zaXplKSk7 CisJCXJpbmctPmZyZWUtLTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7 CisJfQorCisJZGV2X2RiZyhyaW5nLT5wYXJlbnQtPmRldiwgInByb3h5OiBmcmVlJWQgb2NjJWRc biIsIHJpbmctPmZyZWUsCisJCXJpbmctPm9jYyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBp bnQgazNfcmluZ2FjY19yaW5nX3B1c2hfaGVhZF9wcm94eShzdHJ1Y3QgazNfcmluZyAqcmluZywg dm9pZCAqZWxlbSkKK3sKKwlyZXR1cm4gazNfcmluZ2FjY19yaW5nX2FjY2Vzc19wcm94eShyaW5n LCBlbGVtLAorCQkJCQkgICAgSzNfUklOR0FDQ19BQ0NFU1NfTU9ERV9QVVNIX0hFQUQpOworfQor CitzdGF0aWMgaW50IGszX3JpbmdhY2NfcmluZ19wdXNoX3RhaWxfcHJveHkoc3RydWN0IGszX3Jp bmcgKnJpbmcsIHZvaWQgKmVsZW0pCit7CisJcmV0dXJuIGszX3JpbmdhY2NfcmluZ19hY2Nlc3Nf cHJveHkocmluZywgZWxlbSwKKwkJCQkJICAgIEszX1JJTkdBQ0NfQUNDRVNTX01PREVfUFVTSF9U QUlMKTsKK30KKworc3RhdGljIGludCBrM19yaW5nYWNjX3JpbmdfcG9wX2hlYWRfcHJveHkoc3Ry dWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0pCit7CisJcmV0dXJuIGszX3JpbmdhY2Nfcmlu Z19hY2Nlc3NfcHJveHkocmluZywgZWxlbSwKKwkJCQkJICAgIEszX1JJTkdBQ0NfQUNDRVNTX01P REVfUE9QX0hFQUQpOworfQorCitzdGF0aWMgaW50IGszX3JpbmdhY2NfcmluZ19wb3BfdGFpbF9w cm94eShzdHJ1Y3QgazNfcmluZyAqcmluZywgdm9pZCAqZWxlbSkKK3sKKwlyZXR1cm4gazNfcmlu Z2FjY19yaW5nX2FjY2Vzc19wcm94eShyaW5nLCBlbGVtLAorCQkJCQkgICAgSzNfUklOR0FDQ19B Q0NFU1NfTU9ERV9QT1BfSEVBRCk7Cit9CisKK3N0YXRpYyBpbnQgazNfcmluZ2FjY19yaW5nX2Fj Y2Vzc19pbyhzdHJ1Y3QgazNfcmluZyAqcmluZywgdm9pZCAqZWxlbSwKKwkJCQkgICAgIGVudW0g azNfcmluZ2FjY19hY2Nlc3NfbW9kZSBhY2Nlc3NfbW9kZSkKK3sKKwl2b2lkIF9faW9tZW0gKnB0 cjsKKworCXN3aXRjaCAoYWNjZXNzX21vZGUpIHsKKwljYXNlIEszX1JJTkdBQ0NfQUNDRVNTX01P REVfUFVTSF9IRUFEOgorCWNhc2UgSzNfUklOR0FDQ19BQ0NFU1NfTU9ERV9QT1BfSEVBRDoKKwkJ cHRyID0gKHZvaWQgX19pb21lbSAqKSZyaW5nLT5maWZvcy0+aGVhZF9kYXRhOworCQlicmVhazsK KwljYXNlIEszX1JJTkdBQ0NfQUNDRVNTX01PREVfUFVTSF9UQUlMOgorCWNhc2UgSzNfUklOR0FD Q19BQ0NFU1NfTU9ERV9QT1BfVEFJTDoKKwkJcHRyID0gKHZvaWQgX19pb21lbSAqKSZyaW5nLT5m aWZvcy0+dGFpbF9kYXRhOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsK Kwl9CisKKwlwdHIgKz0gazNfcmluZ2FjY19yaW5nX2dldF9maWZvX3BvcyhyaW5nKTsKKworCXN3 aXRjaCAoYWNjZXNzX21vZGUpIHsKKwljYXNlIEszX1JJTkdBQ0NfQUNDRVNTX01PREVfUE9QX0hF QUQ6CisJY2FzZSBLM19SSU5HQUNDX0FDQ0VTU19NT0RFX1BPUF9UQUlMOgorCQlkZXZfZGJnKHJp bmctPnBhcmVudC0+ZGV2LAorCQkJIm1lbWNweV9mcm9taW8oeCk6IC0tPiBwdHIoJXApLCBtb2Rl OiVkXG4iLCBwdHIsCisJCQlhY2Nlc3NfbW9kZSk7CisJCW1lbWNweV9mcm9taW8oZWxlbSwgcHRy LCAoNCA8PCByaW5nLT5lbG1fc2l6ZSkpOworCQlyaW5nLT5vY2MtLTsKKwkJYnJlYWs7CisJY2Fz ZSBLM19SSU5HQUNDX0FDQ0VTU19NT0RFX1BVU0hfVEFJTDoKKwljYXNlIEszX1JJTkdBQ0NfQUND RVNTX01PREVfUFVTSF9IRUFEOgorCQlkZXZfZGJnKHJpbmctPnBhcmVudC0+ZGV2LAorCQkJIm1l bWNweV90b2lvKHgpOiAtLT4gcHRyKCVwKSwgbW9kZTolZFxuIiwgcHRyLAorCQkJYWNjZXNzX21v ZGUpOworCQltZW1jcHlfdG9pbyhwdHIsIGVsZW0sICg0IDw8IHJpbmctPmVsbV9zaXplKSk7CisJ CXJpbmctPmZyZWUtLTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJ fQorCisJZGV2X2RiZyhyaW5nLT5wYXJlbnQtPmRldiwgImZyZWUlZCBpbmRleCVkIG9jYyVkIGlu ZGV4JWRcbiIsIHJpbmctPmZyZWUsCisJCXJpbmctPndpbmRleCwgcmluZy0+b2NjLCByaW5nLT5y aW5kZXgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGszX3JpbmdhY2NfcmluZ19wdXNo X2hlYWRfaW8oc3RydWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0pCit7CisJcmV0dXJuIGsz X3JpbmdhY2NfcmluZ19hY2Nlc3NfaW8ocmluZywgZWxlbSwKKwkJCQkJIEszX1JJTkdBQ0NfQUND RVNTX01PREVfUFVTSF9IRUFEKTsKK30KKworc3RhdGljIGludCBrM19yaW5nYWNjX3JpbmdfcHVz aF9pbyhzdHJ1Y3QgazNfcmluZyAqcmluZywgdm9pZCAqZWxlbSkKK3sKKwlyZXR1cm4gazNfcmlu Z2FjY19yaW5nX2FjY2Vzc19pbyhyaW5nLCBlbGVtLAorCQkJCQkgSzNfUklOR0FDQ19BQ0NFU1Nf TU9ERV9QVVNIX1RBSUwpOworfQorCitzdGF0aWMgaW50IGszX3JpbmdhY2NfcmluZ19wb3BfaW8o c3RydWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0pCit7CisJcmV0dXJuIGszX3JpbmdhY2Nf cmluZ19hY2Nlc3NfaW8ocmluZywgZWxlbSwKKwkJCQkJIEszX1JJTkdBQ0NfQUNDRVNTX01PREVf UE9QX0hFQUQpOworfQorCitzdGF0aWMgaW50IGszX3JpbmdhY2NfcmluZ19wb3BfdGFpbF9pbyhz dHJ1Y3QgazNfcmluZyAqcmluZywgdm9pZCAqZWxlbSkKK3sKKwlyZXR1cm4gazNfcmluZ2FjY19y aW5nX2FjY2Vzc19pbyhyaW5nLCBlbGVtLAorCQkJCQkgSzNfUklOR0FDQ19BQ0NFU1NfTU9ERV9Q T1BfSEVBRCk7Cit9CisKK3N0YXRpYyBpbnQgazNfcmluZ2FjY19yaW5nX3B1c2hfbWVtKHN0cnVj dCBrM19yaW5nICpyaW5nLCB2b2lkICplbGVtKQoreworCXZvaWQgKmVsZW1fcHRyOworCisJZWxl bV9wdHIgPSBrM19yaW5nYWNjX2dldF9lbG1fYWRkcihyaW5nLCByaW5nLT53aW5kZXgpOworCisJ bWVtY3B5KGVsZW1fcHRyLCBlbGVtLCAoNCA8PCByaW5nLT5lbG1fc2l6ZSkpOworCisJcmluZy0+ d2luZGV4ID0gKHJpbmctPndpbmRleCArIDEpICUgcmluZy0+c2l6ZTsKKwlyaW5nLT5mcmVlLS07 CisJd3JpdGVsKDEsICZyaW5nLT5ydC0+ZGIpOworCisJZGV2X2RiZyhyaW5nLT5wYXJlbnQtPmRl diwgInJpbmdfcHVzaF9tZW06IGZyZWUlZCBpbmRleCVkXG4iLAorCQlyaW5nLT5mcmVlLCByaW5n LT53aW5kZXgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgazNfcmluZ2FjY19yaW5n X3BvcF9tZW0oc3RydWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0pCit7CisJdm9pZCAqZWxl bV9wdHI7CisKKwllbGVtX3B0ciA9IGszX3JpbmdhY2NfZ2V0X2VsbV9hZGRyKHJpbmcsIHJpbmct PnJpbmRleCk7CisKKwltZW1jcHkoZWxlbSwgZWxlbV9wdHIsICg0IDw8IHJpbmctPmVsbV9zaXpl KSk7CisKKwlyaW5nLT5yaW5kZXggPSAocmluZy0+cmluZGV4ICsgMSkgJSByaW5nLT5zaXplOwor CXJpbmctPm9jYy0tOworCXdyaXRlbCgtMSwgJnJpbmctPnJ0LT5kYik7CisKKwlkZXZfZGJnKHJp bmctPnBhcmVudC0+ZGV2LCAicmluZ19wb3BfbWVtOiBvY2MlZCBpbmRleCVkIHBvc19wdHIlcFxu IiwKKwkJcmluZy0+b2NjLCByaW5nLT5yaW5kZXgsIGVsZW1fcHRyKTsKKwlyZXR1cm4gMDsKK30K KworaW50IGszX3JpbmdhY2NfcmluZ19wdXNoKHN0cnVjdCBrM19yaW5nICpyaW5nLCB2b2lkICpl bGVtKQoreworCWludCByZXQgPSAtRU9QTk9UU1VQUDsKKworCWlmICghcmluZyB8fCAhKHJpbmct PmZsYWdzICYgSzNfUklOR19GTEFHX0JVU1kpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRldl9k YmcocmluZy0+cGFyZW50LT5kZXYsICJyaW5nX3B1c2g6IGZyZWUlZCBpbmRleCVkXG4iLCByaW5n LT5mcmVlLAorCQlyaW5nLT53aW5kZXgpOworCisJaWYgKGszX3JpbmdhY2NfcmluZ19pc19mdWxs KHJpbmcpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChyaW5nLT5vcHMgJiYgcmluZy0+b3Bz LT5wdXNoX3RhaWwpCisJCXJldCA9IHJpbmctPm9wcy0+cHVzaF90YWlsKHJpbmcsIGVsZW0pOwor CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGszX3JpbmdhY2NfcmluZ19wdXNo KTsKKworaW50IGszX3JpbmdhY2NfcmluZ19wdXNoX2hlYWQoc3RydWN0IGszX3JpbmcgKnJpbmcs IHZvaWQgKmVsZW0pCit7CisJaW50IHJldCA9IC1FT1BOT1RTVVBQOworCisJaWYgKCFyaW5nIHx8 ICEocmluZy0+ZmxhZ3MgJiBLM19SSU5HX0ZMQUdfQlVTWSkpCisJCXJldHVybiAtRUlOVkFMOwor CisJZGV2X2RiZyhyaW5nLT5wYXJlbnQtPmRldiwgInJpbmdfcHVzaF9oZWFkOiBmcmVlJWQgaW5k ZXglZFxuIiwKKwkJcmluZy0+ZnJlZSwgcmluZy0+d2luZGV4KTsKKworCWlmIChrM19yaW5nYWNj X3JpbmdfaXNfZnVsbChyaW5nKSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAocmluZy0+b3Bz ICYmIHJpbmctPm9wcy0+cHVzaF9oZWFkKQorCQlyZXQgPSByaW5nLT5vcHMtPnB1c2hfaGVhZChy aW5nLCBlbGVtKTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChrM19yaW5n YWNjX3JpbmdfcHVzaF9oZWFkKTsKKworaW50IGszX3JpbmdhY2NfcmluZ19wb3Aoc3RydWN0IGsz X3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0pCit7CisJaW50IHJldCA9IC1FT1BOT1RTVVBQOworCisJ aWYgKCFyaW5nIHx8ICEocmluZy0+ZmxhZ3MgJiBLM19SSU5HX0ZMQUdfQlVTWSkpCisJCXJldHVy biAtRUlOVkFMOworCisJaWYgKCFyaW5nLT5vY2MpCisJCXJpbmctPm9jYyA9IGszX3JpbmdhY2Nf cmluZ19nZXRfb2NjKHJpbmcpOworCisJZGV2X2RiZyhyaW5nLT5wYXJlbnQtPmRldiwgInJpbmdf cG9wOiBvY2MlZCBpbmRleCVkXG4iLCByaW5nLT5vY2MsCisJCXJpbmctPnJpbmRleCk7CisKKwlp ZiAoIXJpbmctPm9jYykKKwkJcmV0dXJuIC1FTk9EQVRBOworCisJaWYgKHJpbmctPm9wcyAmJiBy aW5nLT5vcHMtPnBvcF9oZWFkKQorCQlyZXQgPSByaW5nLT5vcHMtPnBvcF9oZWFkKHJpbmcsIGVs ZW0pOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGszX3JpbmdhY2Nfcmlu Z19wb3ApOworCitpbnQgazNfcmluZ2FjY19yaW5nX3BvcF90YWlsKHN0cnVjdCBrM19yaW5nICpy aW5nLCB2b2lkICplbGVtKQoreworCWludCByZXQgPSAtRU9QTk9UU1VQUDsKKworCWlmICghcmlu ZyB8fCAhKHJpbmctPmZsYWdzICYgSzNfUklOR19GTEFHX0JVU1kpKQorCQlyZXR1cm4gLUVJTlZB TDsKKworCWlmICghcmluZy0+b2NjKQorCQlyaW5nLT5vY2MgPSBrM19yaW5nYWNjX3JpbmdfZ2V0 X29jYyhyaW5nKTsKKworCWRldl9kYmcocmluZy0+cGFyZW50LT5kZXYsICJyaW5nX3BvcF90YWls OiBvY2MlZCBpbmRleCVkXG4iLCByaW5nLT5vY2MsCisJCXJpbmctPnJpbmRleCk7CisKKwlpZiAo IXJpbmctPm9jYykKKwkJcmV0dXJuIC1FTk9EQVRBOworCisJaWYgKHJpbmctPm9wcyAmJiByaW5n LT5vcHMtPnBvcF90YWlsKQorCQlyZXQgPSByaW5nLT5vcHMtPnBvcF90YWlsKHJpbmcsIGVsZW0p OworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGszX3JpbmdhY2NfcmluZ19w b3BfdGFpbCk7CisKK3N0cnVjdCBrM19yaW5nYWNjICpvZl9rM19yaW5nYWNjX2dldF9ieV9waGFu ZGxlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCisJCQkJCQljb25zdCBjaGFyICpwcm9wZXJ0eSkK K3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnJpbmdhY2NfbnA7CisJc3RydWN0IGszX3JpbmdhY2Mg KnJpbmdhY2MgPSBFUlJfUFRSKC1FUFJPQkVfREVGRVIpOworCXN0cnVjdCBrM19yaW5nYWNjICpl bnRyeTsKKworCXJpbmdhY2NfbnAgPSBvZl9wYXJzZV9waGFuZGxlKG5wLCBwcm9wZXJ0eSwgMCk7 CisJaWYgKCFyaW5nYWNjX25wKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKKworCW11dGV4 X2xvY2soJmszX3JpbmdhY2NfbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5 LCAmazNfcmluZ2FjY19saXN0LCBsaXN0KQorCQlpZiAoZW50cnktPmRldi0+b2Zfbm9kZSA9PSBy aW5nYWNjX25wKSB7CisJCQlyaW5nYWNjID0gZW50cnk7CisJCQlicmVhazsKKwkJfQorCW11dGV4 X3VubG9jaygmazNfcmluZ2FjY19saXN0X2xvY2spOworCW9mX25vZGVfcHV0KHJpbmdhY2NfbnAp OworCisJcmV0dXJuIHJpbmdhY2M7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChvZl9rM19yaW5nYWNj X2dldF9ieV9waGFuZGxlKTsKKworc3RhdGljIGludCBrM19yaW5nYWNjX3Byb2JlX2R0KHN0cnVj dCBrM19yaW5nYWNjICpyaW5nYWNjKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSA9IHJp bmdhY2MtPmRldi0+b2Zfbm9kZTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSByaW5nYWNjLT5kZXY7 CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYp OworCWludCByZXQ7CisKKwlpZiAoIW5vZGUpIHsKKwkJZGV2X2VycihkZXYsICJkZXZpY2UgdHJl ZSBpbmZvIHVuYXZhaWxhYmxlXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcmV0ID0g b2ZfcHJvcGVydHlfcmVhZF91MzIobm9kZSwgInRpLG51bS1yaW5ncyIsICZyaW5nYWNjLT5udW1f cmluZ3MpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJ0aSxudW0tcmluZ3MgcmVhZCBm YWlsdXJlICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJpbmdhY2MtPmRtYV9y aW5nX3Jlc2V0X3F1aXJrID0KKwkJCW9mX3Byb3BlcnR5X3JlYWRfYm9vbChub2RlLCAidGksZG1h LXJpbmctcmVzZXQtcXVpcmsiKTsKKworCXJpbmdhY2MtPnRpc2NpID0gdGlfc2NpX2dldF9ieV9w aGFuZGxlKG5vZGUsICJ0aSxzY2kiKTsKKwlpZiAoSVNfRVJSKHJpbmdhY2MtPnRpc2NpKSkgewor CQlyZXQgPSBQVFJfRVJSKHJpbmdhY2MtPnRpc2NpKTsKKwkJaWYgKHJldCAhPSAtRVBST0JFX0RF RkVSKQorCQkJZGV2X2VycihkZXYsICJ0aSxzY2kgcmVhZCBmYWlsICVkXG4iLCByZXQpOworCQly aW5nYWNjLT50aXNjaSA9IE5VTEw7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gb2ZfcHJv cGVydHlfcmVhZF91MzIobm9kZSwgInRpLHNjaS1kZXYtaWQiLAorCQkJCSAgICZyaW5nYWNjLT50 aXNjaV9kZXZfaWQpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJ0aSxzY2ktZGV2LWlk IHJlYWQgZmFpbCAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlwZGV2LT5pZCA9 IHJpbmdhY2MtPnRpc2NpX2Rldl9pZDsKKworCXJpbmdhY2MtPnJtX2dwX3JhbmdlID0gZGV2bV90 aV9zY2lfZ2V0X29mX3Jlc291cmNlKHJpbmdhY2MtPnRpc2NpLCBkZXYsCisJCQkJCQlyaW5nYWNj LT50aXNjaV9kZXZfaWQsCisJCQkJCQkidGksc2NpLXJtLXJhbmdlLWdwLXJpbmdzIik7CisJaWYg KElTX0VSUihyaW5nYWNjLT5ybV9ncF9yYW5nZSkpIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQg dG8gYWxsb2NhdGUgTVNJIGludGVycnVwdHNcbiIpOworCQlyZXR1cm4gUFRSX0VSUihyaW5nYWNj LT5ybV9ncF9yYW5nZSk7CisJfQorCisJcmV0dXJuIHRpX3NjaV9pbnRhX21zaV9kb21haW5fYWxs b2NfaXJxcyhyaW5nYWNjLT5kZXYsCisJCQkJCQkgcmluZ2FjYy0+cm1fZ3BfcmFuZ2UpOworfQor CitzdGF0aWMgaW50IGszX3JpbmdhY2NfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRl dikKK3sKKwlzdHJ1Y3QgazNfcmluZ2FjYyAqcmluZ2FjYzsKKwl2b2lkIF9faW9tZW0gKmJhc2Vf ZmlmbywgKmJhc2VfcnQ7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1 Y3QgcmVzb3VyY2UgKnJlczsKKwlpbnQgcmV0LCBpOworCisJcmluZ2FjYyA9IGRldm1fa3phbGxv YyhkZXYsIHNpemVvZigqcmluZ2FjYyksIEdGUF9LRVJORUwpOworCWlmICghcmluZ2FjYykKKwkJ cmV0dXJuIC1FTk9NRU07CisKKwlyaW5nYWNjLT5kZXYgPSBkZXY7CisJbXV0ZXhfaW5pdCgmcmlu Z2FjYy0+cmVxX2xvY2spOworCisJZGV2LT5tc2lfZG9tYWluID0gb2ZfbXNpX2dldF9kb21haW4o ZGV2LCBkZXYtPm9mX25vZGUsCisJCQkJCSAgICBET01BSU5fQlVTX1RJX1NDSV9JTlRBX01TSSk7 CisJaWYgKCFkZXYtPm1zaV9kb21haW4pIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZ2V0 IE1TSSBkb21haW5cbiIpOworCQlyZXR1cm4gLUVQUk9CRV9ERUZFUjsKKwl9CisKKwlyZXQgPSBr M19yaW5nYWNjX3Byb2JlX2R0KHJpbmdhY2MpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisK KwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfTUVN LCAicnQiKTsKKwliYXNlX3J0ID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgcmVzKTsKKwlp ZiAoSVNfRVJSKGJhc2VfcnQpKQorCQlyZXR1cm4gUFRSX0VSUihiYXNlX3J0KTsKKworCXJlcyA9 IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9NRU0sICJmaWZv cyIpOworCWJhc2VfZmlmbyA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShkZXYsIHJlcyk7CisJaWYg KElTX0VSUihiYXNlX2ZpZm8pKQorCQlyZXR1cm4gUFRSX0VSUihiYXNlX2ZpZm8pOworCisJcmVz ID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX01FTSwgInBy b3h5X2djZmciKTsKKwlyaW5nYWNjLT5wcm94eV9nY2ZnID0gZGV2bV9pb3JlbWFwX3Jlc291cmNl KGRldiwgcmVzKTsKKwlpZiAoSVNfRVJSKHJpbmdhY2MtPnByb3h5X2djZmcpKQorCQlyZXR1cm4g UFRSX0VSUihyaW5nYWNjLT5wcm94eV9nY2ZnKTsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNv dXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9NRU0sCisJCQkJCSAgICJwcm94eV90YXJnZXQi KTsKKwlyaW5nYWNjLT5wcm94eV90YXJnZXRfYmFzZSA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShk ZXYsIHJlcyk7CisJaWYgKElTX0VSUihyaW5nYWNjLT5wcm94eV90YXJnZXRfYmFzZSkpCisJCXJl dHVybiBQVFJfRVJSKHJpbmdhY2MtPnByb3h5X3RhcmdldF9iYXNlKTsKKworCXJpbmdhY2MtPm51 bV9wcm94aWVzID0gcmVhZGwoJnJpbmdhY2MtPnByb3h5X2djZmctPmNvbmZpZykgJgorCQkJCSAg ICAgSzNfUklOR0FDQ19QUk9YWV9DRkdfVEhSRUFEU19NQVNLOworCisJcmluZ2FjYy0+cmluZ3Mg PSBkZXZtX2t6YWxsb2MoZGV2LAorCQkJCSAgICAgIHNpemVvZigqcmluZ2FjYy0+cmluZ3MpICoK KwkJCQkgICAgICByaW5nYWNjLT5udW1fcmluZ3MsCisJCQkJICAgICAgR0ZQX0tFUk5FTCk7CisJ cmluZ2FjYy0+cmluZ3NfaW51c2UgPSBkZXZtX2tjYWxsb2MoZGV2LAorCQkJCQkgICAgQklUU19U T19MT05HUyhyaW5nYWNjLT5udW1fcmluZ3MpLAorCQkJCQkgICAgc2l6ZW9mKHVuc2lnbmVkIGxv bmcpLCBHRlBfS0VSTkVMKTsKKwlyaW5nYWNjLT5wcm94eV9pbnVzZSA9IGRldm1fa2NhbGxvYyhk ZXYsCisJCQkJCSAgICBCSVRTX1RPX0xPTkdTKHJpbmdhY2MtPm51bV9wcm94aWVzKSwKKwkJCQkJ ICAgIHNpemVvZih1bnNpZ25lZCBsb25nKSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIXJpbmdhY2Mt PnJpbmdzIHx8ICFyaW5nYWNjLT5yaW5nc19pbnVzZSB8fCAhcmluZ2FjYy0+cHJveHlfaW51c2Up CisJCXJldHVybiAtRU5PTUVNOworCisJZm9yIChpID0gMDsgaSA8IHJpbmdhY2MtPm51bV9yaW5n czsgaSsrKSB7CisJCXJpbmdhY2MtPnJpbmdzW2ldLnJ0ID0gYmFzZV9ydCArCisJCQkJICAgICAg IEszX1JJTkdBQ0NfUlRfUkVHU19TVEVQICogaTsKKwkJcmluZ2FjYy0+cmluZ3NbaV0uZmlmb3Mg PSBiYXNlX2ZpZm8gKworCQkJCQkgIEszX1JJTkdBQ0NfRklGT19SRUdTX1NURVAgKiBpOworCQly aW5nYWNjLT5yaW5nc1tpXS5wYXJlbnQgPSByaW5nYWNjOworCQlyaW5nYWNjLT5yaW5nc1tpXS5y aW5nX2lkID0gaTsKKwkJcmluZ2FjYy0+cmluZ3NbaV0ucHJveHlfaWQgPSBLM19SSU5HQUNDX1BS T1hZX05PVF9VU0VEOworCX0KKwlkZXZfc2V0X2RydmRhdGEoZGV2LCByaW5nYWNjKTsKKworCXJp bmdhY2MtPnRpc2NpX3Jpbmdfb3BzID0gJnJpbmdhY2MtPnRpc2NpLT5vcHMucm1fcmluZ19vcHM7 CisKKwltdXRleF9sb2NrKCZrM19yaW5nYWNjX2xpc3RfbG9jayk7CisJbGlzdF9hZGRfdGFpbCgm cmluZ2FjYy0+bGlzdCwgJmszX3JpbmdhY2NfbGlzdCk7CisJbXV0ZXhfdW5sb2NrKCZrM19yaW5n YWNjX2xpc3RfbG9jayk7CisKKwlkZXZfaW5mbyhkZXYsICJSaW5nIEFjY2VsZXJhdG9yIHByb2Jl ZCByaW5nczoldSwgZ3AtcmluZ3NbJXUsJXVdIHNjaS1kZXYtaWQ6JXVcbiIsCisJCSByaW5nYWNj LT5udW1fcmluZ3MsCisJCSByaW5nYWNjLT5ybV9ncF9yYW5nZS0+ZGVzY1swXS5zdGFydCwKKwkJ IHJpbmdhY2MtPnJtX2dwX3JhbmdlLT5kZXNjWzBdLm51bSwKKwkJIHJpbmdhY2MtPnRpc2NpX2Rl dl9pZCk7CisJZGV2X2luZm8oZGV2LCAiZG1hLXJpbmctcmVzZXQtcXVpcms6ICVzXG4iLAorCQkg cmluZ2FjYy0+ZG1hX3JpbmdfcmVzZXRfcXVpcmsgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKTsK KwlkZXZfaW5mbyhkZXYsICJSQSBQcm94eSByZXYuICUwOHgsIG51bV9wcm94aWVzOiV1XG4iLAor CQkgcmVhZGwoJnJpbmdhY2MtPnByb3h5X2djZmctPnJldmlzaW9uKSwgcmluZ2FjYy0+bnVtX3By b3hpZXMpOworCXJldHVybiAwOworfQorCisvKiBNYXRjaCB0YWJsZSBmb3Igb2ZfcGxhdGZvcm0g YmluZGluZyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgazNfcmluZ2FjY19v Zl9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAidGksYW02NTQtbmF2c3MtcmluZ2FjYyIs IH0sCisJe30sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBrM19yaW5nYWNj X2RyaXZlciA9IHsKKwkucHJvYmUJCT0gazNfcmluZ2FjY19wcm9iZSwKKwkuZHJpdmVyCQk9IHsK KwkJLm5hbWUJPSAiazMtcmluZ2FjYyIsCisJCS5vZl9tYXRjaF90YWJsZSA9IGszX3JpbmdhY2Nf b2ZfbWF0Y2gsCisJCS5zdXBwcmVzc19iaW5kX2F0dHJzID0gdHJ1ZSwKKwl9LAorfTsKK2J1aWx0 aW5fcGxhdGZvcm1fZHJpdmVyKGszX3JpbmdhY2NfZHJpdmVyKTsKZGlmZiAtLWdpdCBhL2luY2x1 ZGUvbGludXgvc29jL3RpL2szLXJpbmdhY2MuaCBiL2luY2x1ZGUvbGludXgvc29jL3RpL2szLXJp bmdhY2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjI2ZjczZGYw YTUyNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvc29jL3RpL2szLXJpbmdhY2Mu aApAQCAtMCwwICsxLDI0NCBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAg Ki8KKy8qCisgKiBLMyBSaW5nIEFjY2VsZXJhdG9yIChSQSkgc3Vic3lzdGVtIGludGVyZmFjZQor ICoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQg LSBodHRwOi8vd3d3LnRpLmNvbQorICovCisKKyNpZm5kZWYgX19TT0NfVElfSzNfUklOR0FDQ19B UElfSF8KKyNkZWZpbmUgX19TT0NfVElfSzNfUklOR0FDQ19BUElfSF8KKworI2luY2x1ZGUgPGxp bnV4L3R5cGVzLmg+CisKK3N0cnVjdCBkZXZpY2Vfbm9kZTsKKworLyoqCisgKiBlbnVtIGszX3Jp bmdfbW9kZSAtICZzdHJ1Y3QgazNfcmluZ19jZmcgbW9kZQorICoKKyAqIFJBIHJpbmcgb3BlcmF0 aW9uYWwgbW9kZXMKKyAqCisgKiBASzNfUklOR0FDQ19SSU5HX01PREVfUklORzogRXhwb3NlZCBS aW5nIG1vZGUgZm9yIFNXIGRpcmVjdCBhY2Nlc3MKKyAqIEBLM19SSU5HQUNDX1JJTkdfTU9ERV9N RVNTQUdFOiBNZXNzYWdpbmcgbW9kZS4gTWVzc2FnaW5nIG1vZGUgcmVxdWlyZXMKKyAqCXRoYXQg YWxsIGFjY2Vzc2VzIHRvIHRoZSBxdWV1ZSBtdXN0IGdvIHRocm91Z2ggdGhpcyBJUCBzbyB0aGF0 IGFsbAorICoJYWNjZXNzZXMgdG8gdGhlIG1lbW9yeSBhcmUgY29udHJvbGxlZCBhbmQgb3JkZXJl ZC4gVGhpcyBJUCB0aGVuCisgKgljb250cm9scyB0aGUgZW50aXJlIHN0YXRlIG9mIHRoZSBxdWV1 ZSwgYW5kIFNXIGhhcyBubyBkaXJlY3RseSBjb250cm9sLAorICoJc3VjaCBhcyB0aHJvdWdoIGRv b3JiZWxscyBhbmQgY2Fubm90IGFjY2VzcyB0aGUgc3RvcmFnZSBtZW1vcnkgZGlyZWN0bHkuCisg KglUaGlzIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgd2hlbiBtb3JlIHRoYW4gb25lIFNXIG9yIEhX IGVudGl0eSBjYW4gYmUKKyAqCXRoZSBwcm9kdWNlciBhbmQvb3IgY29uc3VtZXIgYXQgdGhlIHNh bWUgdGltZQorICogQEszX1JJTkdBQ0NfUklOR19NT0RFX0NSRURFTlRJQUxTOiBDcmVkZW50aWFs cyBtb2RlIGlzIG1lc3NhZ2UgbW9kZSBwbHVzCisgKglzdG9yZXMgY3JlZGVudGlhbHMgd2l0aCBl YWNoIG1lc3NhZ2UsIHJlcXVpcmluZyB0aGUgZWxlbWVudCBzaXplIHRvIGJlCisgKglkb3VibGVk IHRvIGZpdCB0aGUgY3JlZGVudGlhbHMuIEFueSBleHBvc2VkIG1lbW9yeSBzaG91bGQgYmUgcHJv dGVjdGVkCisgKglieSBhIGZpcmV3YWxsIGZyb20gdW53YW50ZWQgYWNjZXNzCisgKi8KK2VudW0g azNfcmluZ19tb2RlIHsKKwlLM19SSU5HQUNDX1JJTkdfTU9ERV9SSU5HID0gMCwKKwlLM19SSU5H QUNDX1JJTkdfTU9ERV9NRVNTQUdFLAorCUszX1JJTkdBQ0NfUklOR19NT0RFX0NSRURFTlRJQUxT LAorCUszX1JJTkdBQ0NfUklOR19NT0RFX0lOVkFMSUQKK307CisKKy8qKgorICogZW51bSBrM19y aW5nX3NpemUgLSAmc3RydWN0IGszX3JpbmdfY2ZnIGVsbV9zaXplCisgKgorICogUkEgcmluZyBl bGVtZW50J3Mgc2l6ZXMgaW4gYnl0ZXMuCisgKi8KK2VudW0gazNfcmluZ19zaXplIHsKKwlLM19S SU5HQUNDX1JJTkdfRUxTSVpFXzQgPSAwLAorCUszX1JJTkdBQ0NfUklOR19FTFNJWkVfOCwKKwlL M19SSU5HQUNDX1JJTkdfRUxTSVpFXzE2LAorCUszX1JJTkdBQ0NfUklOR19FTFNJWkVfMzIsCisJ SzNfUklOR0FDQ19SSU5HX0VMU0laRV82NCwKKwlLM19SSU5HQUNDX1JJTkdfRUxTSVpFXzEyOCwK KwlLM19SSU5HQUNDX1JJTkdfRUxTSVpFXzI1NiwKKwlLM19SSU5HQUNDX1JJTkdfRUxTSVpFX0lO VkFMSUQKK307CisKK3N0cnVjdCBrM19yaW5nYWNjOworc3RydWN0IGszX3Jpbmc7CisKKy8qKgor ICogZW51bSBrM19yaW5nX2NmZyAtIFJBIHJpbmcgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUKKyAq CisgKiBAc2l6ZTogUmluZyBzaXplLCBudW1iZXIgb2YgZWxlbWVudHMKKyAqIEBlbG1fc2l6ZTog UmluZyBlbGVtZW50IHNpemUKKyAqIEBtb2RlOiBSaW5nIG9wZXJhdGlvbmFsIG1vZGUKKyAqIEBm bGFnczogUmluZyBjb25maWd1cmF0aW9uIGZsYWdzLiBQb3NzaWJsZSB2YWx1ZXM6CisgKgkgQEsz X1JJTkdBQ0NfUklOR19TSEFSRUQ6IHdoZW4gc2V0IGFsbG93cyB0byByZXF1ZXN0IHRoZSBzYW1l IHJpbmcKKyAqCSBmZXcgdGltZXMuIEl0J3MgdXNhYmxlIHdoZW4gdGhlIHNhbWUgcmluZyBpcyB1 c2VkIGFzIEZyZWUgSG9zdCBQRCByaW5nCisgKgkgZm9yIGRpZmZlcmVudCBmbG93cywgZm9yIGV4 YW1wbGUuCisgKgkgTm90ZTogTG9ja2luZyBzaG91bGQgYmUgZG9uZSBieSBjb25zdW1lciBpZiBy ZXF1aXJlZAorICovCitzdHJ1Y3QgazNfcmluZ19jZmcgeworCXUzMiBzaXplOworCWVudW0gazNf cmluZ19zaXplIGVsbV9zaXplOworCWVudW0gazNfcmluZ19tb2RlIG1vZGU7CisjZGVmaW5lIEsz X1JJTkdBQ0NfUklOR19TSEFSRUQgQklUKDEpCisJdTMyIGZsYWdzOworfTsKKworI2RlZmluZSBL M19SSU5HQUNDX1JJTkdfSURfQU5ZICgtMSkKKworLyoqCisgKiBvZl9rM19yaW5nYWNjX2dldF9i eV9waGFuZGxlIC0gZmluZCBhIFJBIGJ5IHBoYW5kbGUgcHJvcGVydHkKKyAqIEBucDogZGV2aWNl IG5vZGUKKyAqIEBwcm9wbmFtZTogcHJvcGVydHkgbmFtZSBjb250YWluaW5nIHBoYW5kbGUgb24g UkEgbm9kZQorICoKKyAqIFJldHVybnMgcG9pbnRlciBvbiB0aGUgUkEgLSBzdHJ1Y3QgazNfcmlu Z2FjYworICogb3IgLUVOT0RFViBpZiBub3QgZm91bmQsCisgKiBvciAtRVBST0JFX0RFRkVSIGlm IG5vdCB5ZXQgcmVnaXN0ZXJlZAorICovCitzdHJ1Y3QgazNfcmluZ2FjYyAqb2ZfazNfcmluZ2Fj Y19nZXRfYnlfcGhhbmRsZShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAorCQkJCQkJY29uc3QgY2hh ciAqcHJvcGVydHkpOworCisjZGVmaW5lIEszX1JJTkdBQ0NfUklOR19VU0VfUFJPWFkgQklUKDEp CisKKy8qKgorICogazNfcmluZ2FjY19yZXF1ZXN0X3JpbmcgLSByZXF1ZXN0IHJpbmcgZnJvbSBy aW5nYWNjCisgKiBAcmluZ2FjYzogcG9pbnRlciBvbiByaW5nYWNjCisgKiBAaWQ6IHJpbmcgaWQg b3IgSzNfUklOR0FDQ19SSU5HX0lEX0FOWSBmb3IgYW55IGdlbmVyYWwgcHVycG9zZSByaW5nCisg KiBAZmxhZ3M6CisgKglASzNfUklOR0FDQ19SSU5HX1VTRV9QUk9YWTogaWYgc2V0IC0gcHJveHkg d2lsbCBiZSBhbGxvY2F0ZWQgYW5kCisgKgkJdXNlZCB0byBhY2Nlc3MgcmluZyBtZW1vcnkuIFNv cHBvcnRlZCBvbmx5IGZvciByaW5ncyBpbgorICoJCU1lc3NhZ2UvQ3JlZGVudGlhbHMvUXVldWUg bW9kZS4KKyAqCisgKiBSZXR1cm5zIHBvaW50ZXIgb24gdGhlIFJpbmcgLSBzdHJ1Y3QgazNfcmlu ZworICogb3IgTlVMTCBpbiBjYXNlIG9mIGZhaWx1cmUuCisgKi8KK3N0cnVjdCBrM19yaW5nICpr M19yaW5nYWNjX3JlcXVlc3RfcmluZyhzdHJ1Y3QgazNfcmluZ2FjYyAqcmluZ2FjYywKKwkJCQkJ aW50IGlkLCB1MzIgZmxhZ3MpOworCisvKioKKyAqIGszX3JpbmdhY2NfcmluZ19yZXNldCAtIHJp bmcgcmVzZXQKKyAqIEByaW5nOiBwb2ludGVyIG9uIFJpbmcKKyAqCisgKiBSZXNldHMgcmluZyBp bnRlcm5hbCBzdGF0ZSAoKGh3KW9jYywgKGh3KWlkeCkuCisgKi8KK3ZvaWQgazNfcmluZ2FjY19y aW5nX3Jlc2V0KHN0cnVjdCBrM19yaW5nICpyaW5nKTsKKy8qKgorICogazNfcmluZ2FjY19yaW5n X3Jlc2V0IC0gcmluZyByZXNldCBmb3IgRE1BIHJpbmdzCisgKiBAcmluZzogcG9pbnRlciBvbiBS aW5nCisgKgorICogUmVzZXRzIHJpbmcgaW50ZXJuYWwgc3RhdGUgKChodylvY2MsIChodylpZHgp LiBTaG91bGQgYmUgdXNlZCBmb3IgcmluZ3MKKyAqIHdoaWNoIGFyZSByZWFkIGJ5IEszIFVETUEs IGxpa2UgVFggb3IgRnJlZSBIb3N0IFBEIHJpbmdzLgorICovCit2b2lkIGszX3JpbmdhY2Nfcmlu Z19yZXNldF9kbWEoc3RydWN0IGszX3JpbmcgKnJpbmcsIHUzMiBvY2MpOworCisvKioKKyAqIGsz X3JpbmdhY2NfcmluZ19mcmVlIC0gcmluZyBmcmVlCisgKiBAcmluZzogcG9pbnRlciBvbiBSaW5n CisgKgorICogUmVzZXRzIHJpbmcgYW5kIGZyZWUgYWxsIGFsb2NhdGVkIHJlc291cmNlcy4KKyAq LworaW50IGszX3JpbmdhY2NfcmluZ19mcmVlKHN0cnVjdCBrM19yaW5nICpyaW5nKTsKKworLyoq CisgKiBrM19yaW5nYWNjX2dldF9yaW5nX2lkIC0gR2V0IHRoZSBSaW5nIElECisgKiBAcmluZzog cG9pbnRlciBvbiByaW5nCisgKgorICogUmV0dXJucyB0aGUgUmluZyBJRAorICovCit1MzIgazNf cmluZ2FjY19nZXRfcmluZ19pZChzdHJ1Y3QgazNfcmluZyAqcmluZyk7CisKKy8qKgorICogazNf cmluZ2FjY19nZXRfcmluZ19pcnFfbnVtIC0gR2V0IHRoZSBpcnEgbnVtYmVyIGZvciB0aGUgcmlu ZworICogQHJpbmc6IHBvaW50ZXIgb24gcmluZworICoKKyAqIFJldHVybnMgdGhlIGludGVycnVw dCBudW1iZXIgd2hpY2ggY2FuIGJlIHVzZWQgdG8gcmVxdWVzdCB0aGUgaW50ZXJydXB0CisgKi8K K2ludCBrM19yaW5nYWNjX2dldF9yaW5nX2lycV9udW0oc3RydWN0IGszX3JpbmcgKnJpbmcpOwor CisvKioKKyAqIGszX3JpbmdhY2NfcmluZ19jZmcgLSByaW5nIGNvbmZpZ3VyZQorICogQHJpbmc6 IHBvaW50ZXIgb24gcmluZworICogQGNmZzogUmluZyBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMg KHNlZSAmc3RydWN0IGszX3JpbmdfY2ZnKQorICoKKyAqIENvbmZpZ3VyZXMgcmluZywgaW5jbHVk aW5nIHJpbmcgbWVtb3J5IGFsbG9jYXRpb24uCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgZXJy bm8gb3RoZXJ3aXNlLgorICovCitpbnQgazNfcmluZ2FjY19yaW5nX2NmZyhzdHJ1Y3QgazNfcmlu ZyAqcmluZywgc3RydWN0IGszX3JpbmdfY2ZnICpjZmcpOworCisvKioKKyAqIGszX3JpbmdhY2Nf cmluZ19nZXRfc2l6ZSAtIGdldCByaW5nIHNpemUKKyAqIEByaW5nOiBwb2ludGVyIG9uIHJpbmcK KyAqCisgKiBSZXR1cm5zIHJpbmcgc2l6ZSBpbiBudW1iZXIgb2YgZWxlbWVudHMuCisgKi8KK3Uz MiBrM19yaW5nYWNjX3JpbmdfZ2V0X3NpemUoc3RydWN0IGszX3JpbmcgKnJpbmcpOworCisvKioK KyAqIGszX3JpbmdhY2NfcmluZ19nZXRfZnJlZSAtIGdldCBmcmVlIGVsZW1lbnRzCisgKiBAcmlu ZzogcG9pbnRlciBvbiByaW5nCisgKgorICogUmV0dXJucyBudW1iZXIgb2YgZnJlZSBlbGVtZW50 cyBpbiB0aGUgcmluZy4KKyAqLwordTMyIGszX3JpbmdhY2NfcmluZ19nZXRfZnJlZShzdHJ1Y3Qg azNfcmluZyAqcmluZyk7CisKKy8qKgorICogazNfcmluZ2FjY19yaW5nX2dldF9vY2MgLSBnZXQg cmluZyBvY2N1cGFuY3kKKyAqIEByaW5nOiBwb2ludGVyIG9uIHJpbmcKKyAqCisgKiBSZXR1cm5z IHRvdGFsIG51bWJlciBvZiB2YWxpZCBlbnRyaWVzIG9uIHRoZSByaW5nCisgKi8KK3UzMiBrM19y aW5nYWNjX3JpbmdfZ2V0X29jYyhzdHJ1Y3QgazNfcmluZyAqcmluZyk7CisKKy8qKgorICogazNf cmluZ2FjY19yaW5nX2lzX2Z1bGwgLSBjaGVja3MgaWYgcmluZyBpcyBmdWxsCisgKiBAcmluZzog cG9pbnRlciBvbiByaW5nCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSByaW5nIGlzIGZ1bGwK KyAqLwordTMyIGszX3JpbmdhY2NfcmluZ19pc19mdWxsKHN0cnVjdCBrM19yaW5nICpyaW5nKTsK KworLyoqCisgKiBrM19yaW5nYWNjX3JpbmdfcHVzaCAtIHB1c2ggZWxlbWVudCB0byB0aGUgcmlu ZyB0YWlsCisgKiBAcmluZzogcG9pbnRlciBvbiByaW5nCisgKiBAZWxlbTogcG9pbnRlciBvbiBy aW5nIGVsZW1lbnQgYnVmZmVyCisgKgorICogUHVzaCBvbmUgcmluZyBlbGVtZW50IHRvIHRoZSBy aW5nIHRhaWwuIFNpemUgb2YgdGhlIHJpbmcgZWxlbWVudCBpcworICogZGV0ZXJtaW5lZCBieSBy aW5nIGNvbmZpZ3VyYXRpb24gJnN0cnVjdCBrM19yaW5nX2NmZyBlbG1fc2l6ZS4KKyAqCisgKiBS ZXR1cm5zIDAgb24gc3VjY2VzcywgZXJybm8gb3RoZXJ3aXNlLgorICovCitpbnQgazNfcmluZ2Fj Y19yaW5nX3B1c2goc3RydWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0pOworCisvKioKKyAq IGszX3JpbmdhY2NfcmluZ19wb3AgLSBwb3AgZWxlbWVudCBmcm9tIHRoZSByaW5nIGhlYWQKKyAq IEByaW5nOiBwb2ludGVyIG9uIHJpbmcKKyAqIEBlbGVtOiBwb2ludGVyIG9uIHJpbmcgZWxlbWVu dCBidWZmZXIKKyAqCisgKiBQdXNoIG9uZSByaW5nIGVsZW1lbnQgZnJvbSB0aGUgcmluZyBoZWFk LiBTaXplIG9mIHRoZSByaW5nIGVsZW1lbnQgaXMKKyAqIGRldGVybWluZWQgYnkgcmluZyBjb25m aWd1cmF0aW9uICZzdHJ1Y3QgazNfcmluZ19jZmcgZWxtX3NpemUuLgorICoKKyAqIFJldHVybnMg MCBvbiBzdWNjZXNzLCBlcnJubyBvdGhlcndpc2UuCisgKi8KK2ludCBrM19yaW5nYWNjX3Jpbmdf cG9wKHN0cnVjdCBrM19yaW5nICpyaW5nLCB2b2lkICplbGVtKTsKKworLyoqCisgKiBrM19yaW5n YWNjX3JpbmdfcHVzaF9oZWFkIC0gcHVzaCBlbGVtZW50IHRvIHRoZSByaW5nIGhlYWQKKyAqIEBy aW5nOiBwb2ludGVyIG9uIHJpbmcKKyAqIEBlbGVtOiBwb2ludGVyIG9uIHJpbmcgZWxlbWVudCBi dWZmZXIKKyAqCisgKiBQdXNoIG9uZSByaW5nIGVsZW1lbnQgdG8gdGhlIHJpbmcgaGVhZC4gU2l6 ZSBvZiB0aGUgcmluZyBlbGVtZW50IGlzCisgKiBkZXRlcm1pbmVkIGJ5IHJpbmcgY29uZmlndXJh dGlvbiAmc3RydWN0IGszX3JpbmdfY2ZnIGVsbV9zaXplLgorICoKKyAqIFJldHVybnMgMCBvbiBz dWNjZXNzLCBlcnJubyBvdGhlcndpc2UuCisgKiBOb3QgU3VwcG9ydGVkIGJ5IHJpbmcgbW9kZXM6 IEszX1JJTkdBQ0NfUklOR19NT0RFX1JJTkcKKyAqLworaW50IGszX3JpbmdhY2NfcmluZ19wdXNo X2hlYWQoc3RydWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0pOworCisvKioKKyAqIGszX3Jp bmdhY2NfcmluZ19wb3BfdGFpbCAtIHBvcCBlbGVtZW50IGZyb20gdGhlIHJpbmcgdGFpbAorICog QHJpbmc6IHBvaW50ZXIgb24gcmluZworICogQGVsZW06IHBvaW50ZXIgb24gcmluZyBlbGVtZW50 IGJ1ZmZlcgorICoKKyAqIFB1c2ggb25lIHJpbmcgZWxlbWVudCBmcm9tIHRoZSByaW5nIHRhaWwu IFNpemUgb2YgdGhlIHJpbmcgZWxlbWVudCBpcworICogZGV0ZXJtaW5lZCBieSByaW5nIGNvbmZp Z3VyYXRpb24gJnN0cnVjdCBrM19yaW5nX2NmZyBlbG1fc2l6ZS4KKyAqCisgKiBSZXR1cm5zIDAg b24gc3VjY2VzcywgZXJybm8gb3RoZXJ3aXNlLgorICogTm90IFN1cHBvcnRlZCBieSByaW5nIG1v ZGVzOiBLM19SSU5HQUNDX1JJTkdfTU9ERV9SSU5HCisgKi8KK2ludCBrM19yaW5nYWNjX3Jpbmdf cG9wX3RhaWwoc3RydWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0pOworCit1MzIgazNfcmlu Z2FjY19nZXRfdGlzY2lfZGV2X2lkKHN0cnVjdCBrM19yaW5nICpyaW5nKTsKKworI2VuZGlmIC8q IF9fU09DX1RJX0szX1JJTkdBQ0NfQVBJX0hfICovCi0tIApQZXRlcgoKVGV4YXMgSW5zdHJ1bWVu dHMgRmlubGFuZCBPeSwgUG9ya2thbGFua2F0dSAyMiwgMDAxODAgSGVsc2lua2kuClktdHVubnVz L0J1c2luZXNzIElEOiAwNjE1NTIxLTQuIEtvdGlwYWlra2EvRG9taWNpbGU6IEhlbHNpbmtpCgoK X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJt LWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3Jn Cmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtl cm5lbAo=