Received: by 2002:a25:f815:0:0:0:0:0 with SMTP id u21csp3417757ybd; Tue, 25 Jun 2019 02:09:45 -0700 (PDT) X-Google-Smtp-Source: APXvYqzAc4I0H8fMmawriUtwHnLqdwVHi0vwNTVcL5Bma9RlTJVe9dTJnT77SP2RnJ4/oUPbV4DC X-Received: by 2002:a17:902:7448:: with SMTP id e8mr144788938plt.222.1561453785411; Tue, 25 Jun 2019 02:09:45 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1561453785; cv=none; d=google.com; s=arc-20160816; b=dAVX1Hp9+pWb23lI4q7b/8Qmo2f6MpjxZtsDYntXdooA9Jp4Zilmt1Lz4pPa5c2C97 sznpy1O3OaA43VVYhrCSae/IwF/TGIF5kE6PDofDQYzuoY5QDjgJPZOnswuMkeIWcfxp q0R7d8rq51sCCalSRHxUFSVMzAdxvRFFP/xgw550XEM97DD8PpOKzgegQBf+f//1vEKa EXNGzSZfxduoDHaCLmN4FfulgiYtZtrCkF3RKCcBMhfT7T7FB+xry0pUA/D0uq2X5xGF INLnoSO1y1IfgHdPXofboY+yGjQ8ks2WhP450mRllDlgHWOvppMU+o/Vx2fA5HRaCFa/ ElrQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:content-transfer-encoding :content-language:accept-language:in-reply-to:references:message-id :date:thread-index:thread-topic:subject:cc:to:from:dkim-signature; bh=XMvr0/wgsxbnGr6Rv7aXRAGdQojS76Zbvv6sni6WmlQ=; b=IJgZ6VQynSuef91/jx+nrFQUjEQWXKSMr3/PXRkgeDeG7tpADcif6SU6oh7mvVQvvK 9AXq002hjX3Br81puJ+oWNa1dTS5qUsSXYcg363is+LxHfj3teGdYQEYluIHB2i0s8US 3G5nZs3uRMxvk4+tq92KukBxM8OYOU9IOMr8ZZqCFYp0+90y/vRoymLRN9yUSmAy+z46 v+aOwnAxm6eclP9MvzyVCJqLf5pVfJpFvKyw1DFPVfredniQs52mkC9ilmg1CPi/Q5FG z6IlHopRFoS18kw5f3O02amdRYf8e/ktTq3X3+TDh1twrJErNw67CIaXXr7/Khf6MEtQ d+nA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@nxp.com header.s=selector2 header.b=dqqQE5NO; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=nxp.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 21si13704306pfo.138.2019.06.25.02.09.29; Tue, 25 Jun 2019 02:09:45 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@nxp.com header.s=selector2 header.b=dqqQE5NO; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=nxp.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731229AbfFYJJS (ORCPT + 99 others); Tue, 25 Jun 2019 05:09:18 -0400 Received: from mail-eopbgr30079.outbound.protection.outlook.com ([40.107.3.79]:20822 "EHLO EUR03-AM5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1728365AbfFYJJS (ORCPT ); Tue, 25 Jun 2019 05:09:18 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=XMvr0/wgsxbnGr6Rv7aXRAGdQojS76Zbvv6sni6WmlQ=; b=dqqQE5NOKP2xgPkGPLuQDXsvK9DAsaCnED11iee+xowXnj2TrhcmXKH7If14YS93PMdT3X1HywBqTtYQRlnP2tqNI4LI7hsGLpd2tEzqO8K2cftCs8VoUHbR3wp2XxrCARZczNIwMbpd1syDCKrHSOfcQEoFKXJsU360/S6WSQQ= Received: from DB8PR04MB6747.eurprd04.prod.outlook.com (20.179.250.159) by DB8PR04MB6746.eurprd04.prod.outlook.com (20.179.251.86) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2008.16; Tue, 25 Jun 2019 09:09:07 +0000 Received: from DB8PR04MB6747.eurprd04.prod.outlook.com ([fe80::93a:4344:1120:4ca0]) by DB8PR04MB6747.eurprd04.prod.outlook.com ([fe80::93a:4344:1120:4ca0%6]) with mapi id 15.20.2008.017; Tue, 25 Jun 2019 09:09:07 +0000 From: "Z.q. Hou" To: "linux-pci@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" , "devicetree@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "bhelgaas@google.com" , "robh+dt@kernel.org" , "arnd@arndb.de" , "mark.rutland@arm.com" , "l.subrahmanya@mobiveil.co.in" , "shawnguo@kernel.org" , "m.karthikeyan@mobiveil.co.in" , Leo Li , "lorenzo.pieralisi@arm.com" , "catalin.marinas@arm.com" , "will.deacon@arm.com" CC: Mingkai Hu , "M.h. Lian" , Xiaowei Bao , "Z.q. Hou" Subject: [PATCHv7 1/7] PCI: mobiveil: Refactor Mobiveil PCIe Host Bridge IP driver Thread-Topic: [PATCHv7 1/7] PCI: mobiveil: Refactor Mobiveil PCIe Host Bridge IP driver Thread-Index: AQHVKzWk7+k6hF6xd0Or4h1MqYRsow== Date: Tue, 25 Jun 2019 09:09:07 +0000 Message-ID: <20190625091039.18933-2-Zhiqiang.Hou@nxp.com> References: <20190625091039.18933-1-Zhiqiang.Hou@nxp.com> In-Reply-To: <20190625091039.18933-1-Zhiqiang.Hou@nxp.com> Accept-Language: zh-CN, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: HK0PR03CA0116.apcprd03.prod.outlook.com (2603:1096:203:b0::32) To DB8PR04MB6747.eurprd04.prod.outlook.com (2603:10a6:10:10b::31) authentication-results: spf=none (sender IP is ) smtp.mailfrom=zhiqiang.hou@nxp.com; x-ms-exchange-messagesentrepresentingtype: 1 x-mailer: git-send-email 2.17.1 x-originating-ip: [119.31.174.73] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 635145c2-aede-4582-9e40-08d6f94cc6fb x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600148)(711020)(4605104)(1401327)(4618075)(2017052603328)(7193020);SRVR:DB8PR04MB6746; x-ms-traffictypediagnostic: DB8PR04MB6746: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:6108; x-forefront-prvs: 0079056367 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(376002)(136003)(39860400002)(396003)(366004)(346002)(189003)(199004)(4326008)(386003)(446003)(26005)(102836004)(3846002)(478600001)(71190400001)(186003)(11346002)(71200400001)(7416002)(6116002)(25786009)(66946007)(50226002)(110136005)(8936002)(54906003)(81166006)(8676002)(305945005)(81156014)(316002)(2201001)(5660300002)(66556008)(7736002)(66476007)(66446008)(64756008)(1076003)(30864003)(66066001)(486006)(2616005)(2501003)(73956011)(68736007)(14444005)(6436002)(6486002)(256004)(6512007)(86362001)(6506007)(53936002)(36756003)(14454004)(99286004)(2906002)(53946003)(52116002)(5024004)(476003)(76176011)(921003)(1121003)(569006);DIR:OUT;SFP:1101;SCL:1;SRVR:DB8PR04MB6746;H:DB8PR04MB6747.eurprd04.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;MX:1;A:1; received-spf: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: Rqnl/fffjFqmoo+toelw0sWZSs5W1L7LVIvRQvioF3MyoZSP7aJ+jQDYdFMUdl/Uje/kdnICL9NLBUZ+vnEP0qdhasgSuE3DcZnwinnUrEKJ0bX6rhpMP65OvweDGDRb8kDoc94bW1npQn9Fgb20AIOm/z89JBlu2Ol0SKpTwHzKWMqvR+HE0Q9jtALn0RKtombR40jGSa2LVNNgRQjXdi21xl2PmqEkTHc7Tym9u5MxOLnT76tPnPSEVm1u/mrz1oPOh8UL76CWNPlmojNkYb8lOEUVOpStkF6EA48f+HVltTo7jaGwZHhAQpkpFnrjocna8FBbzVGaA9rLKi0bhPTW5b2umstxsa+NS3AmS3bRIZQigKscsUvP1VqzqKLdiedarDOeQLaXQ+zu+UzNggbmSrp2XnHhxbXhBI6DwME= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 635145c2-aede-4582-9e40-08d6f94cc6fb X-MS-Exchange-CrossTenant-originalarrivaltime: 25 Jun 2019 09:09:07.7419 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: zhiqiang.hou@nxp.com X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB8PR04MB6746 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org RnJvbTogSG91IFpoaXFpYW5nIDxaaGlxaWFuZy5Ib3VAbnhwLmNvbT4NCg0KUmVmYWN0b3IgdGhl IE1vYml2ZWlsIFBDSWUgSG9zdCBCcmlkZ2UgSVAgZHJpdmVyIHRvIG1ha2UNCml0IGVhc2llciB0 byBhZGQgc3VwcG9ydCBmb3IgYm90aCBSQyBhbmQgRVAgbW9kZSBkcml2ZXIuDQpUaGlzIHBhdGNo IG1vdmVkIHRoZSBNb2JpdmVpbCBkcml2ZXIgdG8gYW4gbmV3IGRpcmVjdG9yeQ0KJ2RyaXZlcnMv cGNpL2NvbnRyb2xsZXIvbW9iaXZlaWwnIGFuZCByZWZhY3RvciBpdCBhY2NvcmRpbmcNCnRvIHRo ZSBSQyBhbmQgRVAgYWJzdHJhY3Rpb24uDQoNClNpZ25lZC1vZmYtYnk6IEhvdSBaaGlxaWFuZyA8 WmhpcWlhbmcuSG91QG54cC5jb20+DQpSZXZpZXdlZC1ieTogTWluZ2h1YW4gTGlhbiA8TWluZ2h1 YW4uTGlhbkBueHAuY29tPg0KUmV2aWV3ZWQtYnk6IFN1YnJhaG1hbnlhIExpbmdhcHBhIDxsLnN1 YnJhaG1hbnlhQG1vYml2ZWlsLmNvLmluPg0KLS0tDQpWNzoNCiAtIEFzIHRoZSBwYXRjaCBhZGRp bmcgOC1iaXQgYW5kIDE2LWJpdCBDU1IgcmVnaXN0ZXIgYWNjZXNzb3JzDQogICBpcyBtb3ZlZCBi YWNrLCByZW1vdmVkIHRoZSBsaW5lcyBvZiA4LWJpdCBhbmQgMTYtYml0IENTUg0KICAgYWNjZXNz b3JzLg0KDQogTUFJTlRBSU5FUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg ICAyICstDQogZHJpdmVycy9wY2kvY29udHJvbGxlci9LY29uZmlnICAgICAgICAgICAgICAgIHwg IDExICstDQogZHJpdmVycy9wY2kvY29udHJvbGxlci9NYWtlZmlsZSAgICAgICAgICAgICAgIHwg ICAyICstDQogZHJpdmVycy9wY2kvY29udHJvbGxlci9tb2JpdmVpbC9LY29uZmlnICAgICAgIHwg IDI0ICsNCiBkcml2ZXJzL3BjaS9jb250cm9sbGVyL21vYml2ZWlsL01ha2VmaWxlICAgICAgfCAg IDQgKw0KIC4uLi9wY2llLW1vYml2ZWlsLWhvc3QuY30gICAgICAgICAgICAgICAgICAgICB8IDU0 OSArKystLS0tLS0tLS0tLS0tLS0NCiAuLi4vY29udHJvbGxlci9tb2JpdmVpbC9wY2llLW1vYml2 ZWlsLXBsYXQuYyAgfCAgNTkgKysNCiAuLi4vcGNpL2NvbnRyb2xsZXIvbW9iaXZlaWwvcGNpZS1t b2JpdmVpbC5jICAgfCAyNDggKysrKysrKysNCiAuLi4vcGNpL2NvbnRyb2xsZXIvbW9iaXZlaWwv cGNpZS1tb2JpdmVpbC5oICAgfCAxOTIgKysrKysrDQogOSBmaWxlcyBjaGFuZ2VkLCA2MTcgaW5z ZXJ0aW9ucygrKSwgNDc0IGRlbGV0aW9ucygtKQ0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L3BjaS9jb250cm9sbGVyL21vYml2ZWlsL0tjb25maWcNCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy9wY2kvY29udHJvbGxlci9tb2JpdmVpbC9NYWtlZmlsZQ0KIHJlbmFtZSBkcml2ZXJzL3Bj aS9jb250cm9sbGVyL3twY2llLW1vYml2ZWlsLmMgPT4gbW9iaXZlaWwvcGNpZS1tb2JpdmVpbC1o b3N0LmN9ICg1NCUpDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvcGNpL2NvbnRyb2xsZXIv bW9iaXZlaWwvcGNpZS1tb2JpdmVpbC1wbGF0LmMNCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9wY2kvY29udHJvbGxlci9tb2JpdmVpbC9wY2llLW1vYml2ZWlsLmMNCiBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9wY2kvY29udHJvbGxlci9tb2JpdmVpbC9wY2llLW1vYml2ZWlsLmgNCg0K ZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMNCmluZGV4IDUyYWU5MmZlMzA1 Yi4uMmMxY2M2NmQ2MWE5IDEwMDY0NA0KLS0tIGEvTUFJTlRBSU5FUlMNCisrKyBiL01BSU5UQUlO RVJTDQpAQCAtMTIxNDEsNyArMTIxNDEsNyBAQCBNOglIb3UgWmhpcWlhbmcgPFpoaXFpYW5nLkhv dUBueHAuY29tPg0KIEw6CWxpbnV4LXBjaUB2Z2VyLmtlcm5lbC5vcmcNCiBTOglTdXBwb3J0ZWQN CiBGOglEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGNpL21vYml2ZWlsLXBjaWUu dHh0DQotRjoJZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2llLW1vYml2ZWlsLmMNCitGOglkcml2 ZXJzL3BjaS9jb250cm9sbGVyL21vYml2ZWlsL3BjaWUtbW9iaXZlaWwqDQogDQogUENJIERSSVZF UiBGT1IgTVZFQlUgKE1hcnZlbGwgQXJtYWRhIDM3MCBhbmQgQXJtYWRhIFhQIFNPQyBzdXBwb3J0 KQ0KIE06CVRob21hcyBQZXRhenpvbmkgPHRob21hcy5wZXRhenpvbmlAYm9vdGxpbi5jb20+DQpk aWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvY29udHJvbGxlci9LY29uZmlnIGIvZHJpdmVycy9wY2kv Y29udHJvbGxlci9LY29uZmlnDQppbmRleCBmZTlmOWYxM2NlMTEuLmRlYzhlMDM4Y2IxNyAxMDA2 NDQNCi0tLSBhL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvS2NvbmZpZw0KKysrIGIvZHJpdmVycy9w Y2kvY29udHJvbGxlci9LY29uZmlnDQpAQCAtMjQxLDE2ICsyNDEsNiBAQCBjb25maWcgUENJRV9N RURJQVRFSw0KIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gZW5hYmxlIFBDSWUgY29udHJv bGxlciBzdXBwb3J0IG9uDQogCSAgTWVkaWFUZWsgU29Dcy4NCiANCi1jb25maWcgUENJRV9NT0JJ VkVJTA0KLQlib29sICJNb2JpdmVpbCBBWEkgUENJZSBjb250cm9sbGVyIg0KLQlkZXBlbmRzIG9u IEFSQ0hfWllOUU1QIHx8IENPTVBJTEVfVEVTVA0KLQlkZXBlbmRzIG9uIE9GDQotCWRlcGVuZHMg b24gUENJX01TSV9JUlFfRE9NQUlODQotCWhlbHANCi0JICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50 IHRvIGVuYWJsZSBzdXBwb3J0IGZvciB0aGUgTW9iaXZlaWwgQVhJIFBDSWUNCi0JICBTb2Z0IElQ LiBJdCBoYXMgdXAgdG8gOCBvdXRib3VuZCBhbmQgaW5ib3VuZCB3aW5kb3dzDQotCSAgZm9yIGFk ZHJlc3MgdHJhbnNsYXRpb24gYW5kIGl0IGlzIGEgUENJZSBHZW40IElQLg0KLQ0KIGNvbmZpZyBQ Q0lFX1RBTkdPX1NNUDg3NTkNCiAJYm9vbCAiVGFuZ28gU01QODc1OSBQQ0llIGNvbnRyb2xsZXIg KERBTkdFUk9VUykiDQogCWRlcGVuZHMgb24gQVJDSF9UQU5HTyAmJiBQQ0lfTVNJICYmIE9GDQpA QCAtMjgyLDQgKzI3Miw1IEBAIGNvbmZpZyBWTUQNCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQg dm1kLg0KIA0KIHNvdXJjZSAiZHJpdmVycy9wY2kvY29udHJvbGxlci9kd2MvS2NvbmZpZyINCitz b3VyY2UgImRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvbW9iaXZlaWwvS2NvbmZpZyINCiBlbmRtZW51 DQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvY29udHJvbGxlci9NYWtlZmlsZSBiL2RyaXZlcnMv cGNpL2NvbnRyb2xsZXIvTWFrZWZpbGUNCmluZGV4IGQ1NmE1MDc0OTVjNS4uYjc5YTYxNTA0MWEw IDEwMDY0NA0KLS0tIGEvZHJpdmVycy9wY2kvY29udHJvbGxlci9NYWtlZmlsZQ0KKysrIGIvZHJp dmVycy9wY2kvY29udHJvbGxlci9NYWtlZmlsZQ0KQEAgLTI2LDExICsyNiwxMSBAQCBvYmotJChD T05GSUdfUENJRV9ST0NLQ0hJUCkgKz0gcGNpZS1yb2NrY2hpcC5vDQogb2JqLSQoQ09ORklHX1BD SUVfUk9DS0NISVBfRVApICs9IHBjaWUtcm9ja2NoaXAtZXAubw0KIG9iai0kKENPTkZJR19QQ0lF X1JPQ0tDSElQX0hPU1QpICs9IHBjaWUtcm9ja2NoaXAtaG9zdC5vDQogb2JqLSQoQ09ORklHX1BD SUVfTUVESUFURUspICs9IHBjaWUtbWVkaWF0ZWsubw0KLW9iai0kKENPTkZJR19QQ0lFX01PQklW RUlMKSArPSBwY2llLW1vYml2ZWlsLm8NCiBvYmotJChDT05GSUdfUENJRV9UQU5HT19TTVA4NzU5 KSArPSBwY2llLXRhbmdvLm8NCiBvYmotJChDT05GSUdfVk1EKSArPSB2bWQubw0KICMgcGNpZS1o aXNpLm8gcXVpcmtzIGFyZSBuZWVkZWQgZXZlbiB3aXRob3V0IENPTkZJR19QQ0lFX0RXDQogb2Jq LXkJCQkJKz0gZHdjLw0KK29iai15CQkJCSs9IG1vYml2ZWlsLw0KIA0KIA0KICMgVGhlIGZvbGxv d2luZyBkcml2ZXJzIGFyZSBmb3IgZGV2aWNlcyB0aGF0IHVzZSB0aGUgZ2VuZXJpYyBBQ1BJDQpk aWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvY29udHJvbGxlci9tb2JpdmVpbC9LY29uZmlnIGIvZHJp dmVycy9wY2kvY29udHJvbGxlci9tb2JpdmVpbC9LY29uZmlnDQpuZXcgZmlsZSBtb2RlIDEwMDY0 NA0KaW5kZXggMDAwMDAwMDAwMDAwLi42NDM0M2MwN2JmZWQNCi0tLSAvZGV2L251bGwNCisrKyBi L2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvbW9iaXZlaWwvS2NvbmZpZw0KQEAgLTAsMCArMSwyNCBA QA0KKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjANCisNCittZW51ICJNb2JpdmVp bCBQQ0llIENvcmUgU3VwcG9ydCINCisJZGVwZW5kcyBvbiBQQ0kNCisNCitjb25maWcgUENJRV9N T0JJVkVJTA0KKwlib29sDQorDQorY29uZmlnIFBDSUVfTU9CSVZFSUxfSE9TVA0KKyAgICAgICAg Ym9vbA0KKwlkZXBlbmRzIG9uIFBDSV9NU0lfSVJRX0RPTUFJTg0KKyAgICAgICAgc2VsZWN0IFBD SUVfTU9CSVZFSUwNCisNCitjb25maWcgUENJRV9NT0JJVkVJTF9QTEFUDQorCWJvb2wgIk1vYml2 ZWlsIEFYSSBQQ0llIGNvbnRyb2xsZXIiDQorCWRlcGVuZHMgb24gQVJDSF9aWU5RTVAgfHwgQ09N UElMRV9URVNUDQorCWRlcGVuZHMgb24gT0YNCisJc2VsZWN0IFBDSUVfTU9CSVZFSUxfSE9TVA0K KwloZWxwDQorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBlbmFibGUgc3VwcG9ydCBmb3Ig dGhlIE1vYml2ZWlsIEFYSSBQQ0llDQorCSAgU29mdCBJUC4gSXQgaGFzIHVwIHRvIDggb3V0Ym91 bmQgYW5kIGluYm91bmQgd2luZG93cw0KKwkgIGZvciBhZGRyZXNzIHRyYW5zbGF0aW9uIGFuZCBp dCBpcyBhIFBDSWUgR2VuNCBJUC4NCisNCitlbmRtZW51DQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9w Y2kvY29udHJvbGxlci9tb2JpdmVpbC9NYWtlZmlsZSBiL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIv bW9iaXZlaWwvTWFrZWZpbGUNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAw MDAuLjlmYjZkMWM2NTA0ZA0KLS0tIC9kZXYvbnVsbA0KKysrIGIvZHJpdmVycy9wY2kvY29udHJv bGxlci9tb2JpdmVpbC9NYWtlZmlsZQ0KQEAgLTAsMCArMSw0IEBADQorIyBTUERYLUxpY2Vuc2Ut SWRlbnRpZmllcjogR1BMLTIuMA0KK29iai0kKENPTkZJR19QQ0lFX01PQklWRUlMKSArPSBwY2ll LW1vYml2ZWlsLm8NCitvYmotJChDT05GSUdfUENJRV9NT0JJVkVJTF9IT1NUKSArPSBwY2llLW1v Yml2ZWlsLWhvc3Qubw0KK29iai0kKENPTkZJR19QQ0lFX01PQklWRUlMX1BMQVQpICs9IHBjaWUt bW9iaXZlaWwtcGxhdC5vDQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2ll LW1vYml2ZWlsLmMgYi9kcml2ZXJzL3BjaS9jb250cm9sbGVyL21vYml2ZWlsL3BjaWUtbW9iaXZl aWwtaG9zdC5jDQpzaW1pbGFyaXR5IGluZGV4IDU0JQ0KcmVuYW1lIGZyb20gZHJpdmVycy9wY2kv Y29udHJvbGxlci9wY2llLW1vYml2ZWlsLmMNCnJlbmFtZSB0byBkcml2ZXJzL3BjaS9jb250cm9s bGVyL21vYml2ZWlsL3BjaWUtbW9iaXZlaWwtaG9zdC5jDQppbmRleCA0MTFlOTc3OWRhMTIuLmM0 Yjk4YTMxZDQyNiAxMDA2NDQNCi0tLSBhL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpZS1tb2Jp dmVpbC5jDQorKysgYi9kcml2ZXJzL3BjaS9jb250cm9sbGVyL21vYml2ZWlsL3BjaWUtbW9iaXZl aWwtaG9zdC5jDQpAQCAtMywxMCArMywxMiBAQA0KICAqIFBDSWUgaG9zdCBjb250cm9sbGVyIGRy aXZlciBmb3IgTW9iaXZlaWwgUENJZSBIb3N0IGNvbnRyb2xsZXINCiAgKg0KICAqIENvcHlyaWdo dCAoYykgMjAxOCBNb2JpdmVpbCBJbmMuDQorICogQ29weXJpZ2h0IDIwMTkgTlhQDQorICoNCiAg KiBBdXRob3I6IFN1YnJhaG1hbnlhIExpbmdhcHBhIDxsLnN1YnJhaG1hbnlhQG1vYml2ZWlsLmNv LmluPg0KKyAqIFJlZmFjdG9yOiBaaGlxaWFuZyBIb3UgPFpoaXFpYW5nLkhvdUBueHAuY29tPg0K ICAqLw0KIA0KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPg0KICNpbmNsdWRlIDxsaW51eC9pbml0 Lmg+DQogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPg0KICNpbmNsdWRlIDxsaW51eC9pcnEu aD4NCkBAIC0yMywyNzkgKzI1LDI1IEBADQogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2Rldmlj ZS5oPg0KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+DQogDQotI2luY2x1ZGUgIi4uL3BjaS5oIg0K LQ0KLS8qIHJlZ2lzdGVyIG9mZnNldHMgYW5kIGJpdCBwb3NpdGlvbnMgKi8NCi0NCi0vKg0KLSAq IHRyYW5zbGF0aW9uIHRhYmxlcyBhcmUgZ3JvdXBlZCBpbnRvIHdpbmRvd3MsIGVhY2ggd2luZG93 IHJlZ2lzdGVycyBhcmUNCi0gKiBncm91cGVkIGludG8gYmxvY2tzIG9mIDQgb3IgMTYgcmVnaXN0 ZXJzIGVhY2gNCi0gKi8NCi0jZGVmaW5lIFBBQl9SRUdfQkxPQ0tfU0laRQkJMTYNCi0jZGVmaW5l IFBBQl9FWFRfUkVHX0JMT0NLX1NJWkUJCTQNCi0NCi0jZGVmaW5lIFBBQl9SRUdfQUREUihvZmZz ZXQsIHdpbikJXA0KLQkob2Zmc2V0ICsgKHdpbiAqIFBBQl9SRUdfQkxPQ0tfU0laRSkpDQotI2Rl ZmluZSBQQUJfRVhUX1JFR19BRERSKG9mZnNldCwgd2luKQlcDQotCShvZmZzZXQgKyAod2luICog UEFCX0VYVF9SRUdfQkxPQ0tfU0laRSkpDQotDQotI2RlZmluZSBMVFNTTV9TVEFUVVMJCQkweDA0 MDQNCi0jZGVmaW5lICBMVFNTTV9TVEFUVVNfTDBfTUFTSwkJMHgzZg0KLSNkZWZpbmUgIExUU1NN X1NUQVRVU19MMAkJMHgyZA0KLQ0KLSNkZWZpbmUgUEFCX0NUUkwJCQkweDA4MDgNCi0jZGVmaW5l ICBBTUJBX1BJT19FTkFCTEVfU0hJRlQJCTANCi0jZGVmaW5lICBQRVhfUElPX0VOQUJMRV9TSElG VAkJMQ0KLSNkZWZpbmUgIFBBR0VfU0VMX1NISUZUCQkJMTMNCi0jZGVmaW5lICBQQUdFX1NFTF9N QVNLCQkJMHgzZg0KLSNkZWZpbmUgIFBBR0VfTE9fTUFTSwkJCTB4M2ZmDQotI2RlZmluZSAgUEFH RV9TRUxfT0ZGU0VUX1NISUZUCQkxMA0KLQ0KLSNkZWZpbmUgUEFCX0FYSV9QSU9fQ1RSTAkJMHgw ODQwDQotI2RlZmluZSAgQVBJT19FTl9NQVNLCQkJMHhmDQotDQotI2RlZmluZSBQQUJfUEVYX1BJ T19DVFJMCQkweDA4YzANCi0jZGVmaW5lICBQSU9fRU5BQkxFX1NISUZUCQkwDQotDQotI2RlZmlu ZSBQQUJfSU5UUF9BTUJBX01JU0NfRU5CCQkweDBiMGMNCi0jZGVmaW5lIFBBQl9JTlRQX0FNQkFf TUlTQ19TVEFUCQkweDBiMWMNCi0jZGVmaW5lICBQQUJfSU5UUF9JTlRYX01BU0sJCTB4MDFlMA0K LSNkZWZpbmUgIFBBQl9JTlRQX01TSV9NQVNLCQkweDgNCi0NCi0jZGVmaW5lIFBBQl9BWElfQU1B UF9DVFJMKHdpbikJCVBBQl9SRUdfQUREUigweDBiYTAsIHdpbikNCi0jZGVmaW5lICBXSU5fRU5B QkxFX1NISUZUCQkwDQotI2RlZmluZSAgV0lOX1RZUEVfU0hJRlQJCQkxDQotI2RlZmluZSAgV0lO X1RZUEVfTUFTSwkJCTB4Mw0KLSNkZWZpbmUgIFdJTl9TSVpFX1NISUZUCQkJMTANCi0jZGVmaW5l ICBXSU5fU0laRV9NQVNLCQkJMHgzZmZmZmYNCi0NCi0jZGVmaW5lIFBBQl9FWFRfQVhJX0FNQVBf U0laRSh3aW4pCVBBQl9FWFRfUkVHX0FERFIoMHhiYWYwLCB3aW4pDQotDQotI2RlZmluZSBQQUJf RVhUX0FYSV9BTUFQX0FYSV9XSU4od2luKQlQQUJfRVhUX1JFR19BRERSKDB4ODBhMCwgd2luKQ0K LSNkZWZpbmUgUEFCX0FYSV9BTUFQX0FYSV9XSU4od2luKQlQQUJfUkVHX0FERFIoMHgwYmE0LCB3 aW4pDQotI2RlZmluZSAgQVhJX1dJTkRPV19BTElHTl9NQVNLCQkzDQotDQotI2RlZmluZSBQQUJf QVhJX0FNQVBfUEVYX1dJTl9MKHdpbikJUEFCX1JFR19BRERSKDB4MGJhOCwgd2luKQ0KLSNkZWZp bmUgIFBBQl9CVVNfU0hJRlQJCQkyNA0KLSNkZWZpbmUgIFBBQl9ERVZJQ0VfU0hJRlQJCTE5DQot I2RlZmluZSAgUEFCX0ZVTkNUSU9OX1NISUZUCQkxNg0KLQ0KLSNkZWZpbmUgUEFCX0FYSV9BTUFQ X1BFWF9XSU5fSCh3aW4pCVBBQl9SRUdfQUREUigweDBiYWMsIHdpbikNCi0jZGVmaW5lIFBBQl9J TlRQX0FYSV9QSU9fQ0xBU1MJCTB4NDc0DQotDQotI2RlZmluZSBQQUJfUEVYX0FNQVBfQ1RSTCh3 aW4pCQlQQUJfUkVHX0FERFIoMHg0YmEwLCB3aW4pDQotI2RlZmluZSAgQU1BUF9DVFJMX0VOX1NI SUZUCQkwDQotI2RlZmluZSAgQU1BUF9DVFJMX1RZUEVfU0hJRlQJCTENCi0jZGVmaW5lICBBTUFQ X0NUUkxfVFlQRV9NQVNLCQkzDQotDQotI2RlZmluZSBQQUJfRVhUX1BFWF9BTUFQX1NJWkVOKHdp bikJUEFCX0VYVF9SRUdfQUREUigweGJlZjAsIHdpbikNCi0jZGVmaW5lIFBBQl9FWFRfUEVYX0FN QVBfQVhJX1dJTih3aW4pCVBBQl9FWFRfUkVHX0FERFIoMHhiNGEwLCB3aW4pDQotI2RlZmluZSBQ QUJfUEVYX0FNQVBfQVhJX1dJTih3aW4pCVBBQl9SRUdfQUREUigweDRiYTQsIHdpbikNCi0jZGVm aW5lIFBBQl9QRVhfQU1BUF9QRVhfV0lOX0wod2luKQlQQUJfUkVHX0FERFIoMHg0YmE4LCB3aW4p DQotI2RlZmluZSBQQUJfUEVYX0FNQVBfUEVYX1dJTl9IKHdpbikJUEFCX1JFR19BRERSKDB4NGJh Yywgd2luKQ0KLQ0KLS8qIHN0YXJ0aW5nIG9mZnNldCBvZiBJTlRYIGJpdHMgaW4gc3RhdHVzIHJl Z2lzdGVyICovDQotI2RlZmluZSBQQUJfSU5UWF9TVEFSVAkJCTUNCi0NCi0vKiBzdXBwb3J0ZWQg bnVtYmVyIG9mIE1TSSBpbnRlcnJ1cHRzICovDQotI2RlZmluZSBQQ0lfTlVNX01TSQkJCTE2DQot DQotLyogTVNJIHJlZ2lzdGVycyAqLw0KLSNkZWZpbmUgTVNJX0JBU0VfTE9fT0ZGU0VUCQkweDA0 DQotI2RlZmluZSBNU0lfQkFTRV9ISV9PRkZTRVQJCTB4MDgNCi0jZGVmaW5lIE1TSV9TSVpFX09G RlNFVAkJCTB4MGMNCi0jZGVmaW5lIE1TSV9FTkFCTEVfT0ZGU0VUCQkweDE0DQotI2RlZmluZSBN U0lfU1RBVFVTX09GRlNFVAkJMHgxOA0KLSNkZWZpbmUgTVNJX0RBVEFfT0ZGU0VUCQkJMHgyMA0K LSNkZWZpbmUgTVNJX0FERFJfTF9PRkZTRVQJCTB4MjQNCi0jZGVmaW5lIE1TSV9BRERSX0hfT0ZG U0VUCQkweDI4DQotDQotLyogb3V0Ym91bmQgYW5kIGluYm91bmQgd2luZG93IGRlZmluaXRpb25z ICovDQotI2RlZmluZSBXSU5fTlVNXzAJCQkwDQotI2RlZmluZSBXSU5fTlVNXzEJCQkxDQotI2Rl ZmluZSBDRkdfV0lORE9XX1RZUEUJCQkwDQotI2RlZmluZSBJT19XSU5ET1dfVFlQRQkJCTENCi0j ZGVmaW5lIE1FTV9XSU5ET1dfVFlQRQkJCTINCi0jZGVmaW5lIElCX1dJTl9TSVpFCQkJKCh1NjQp MjU2ICogMTAyNCAqIDEwMjQgKiAxMDI0KQ0KLSNkZWZpbmUgTUFYX1BJT19XSU5ET1dTCQkJOA0K LQ0KLS8qIFBhcmFtZXRlcnMgZm9yIHRoZSB3YWl0aW5nIGZvciBsaW5rIHVwIHJvdXRpbmUgKi8N Ci0jZGVmaW5lIExJTktfV0FJVF9NQVhfUkVUUklFUwkJMTANCi0jZGVmaW5lIExJTktfV0FJVF9N SU4JCQk5MDAwMA0KLSNkZWZpbmUgTElOS19XQUlUX01BWAkJCTEwMDAwMA0KLQ0KLSNkZWZpbmUg UEFHRURfQUREUl9CTkRSWQkJMHhjMDANCi0jZGVmaW5lIE9GRlNFVF9UT19QQUdFX0FERFIob2Zm KQlcDQotCSgob2ZmICYgUEFHRV9MT19NQVNLKSB8IFBBR0VEX0FERFJfQk5EUlkpDQotI2RlZmlu ZSBPRkZTRVRfVE9fUEFHRV9JRFgob2ZmKQkJXA0KLQkoKG9mZiA+PiBQQUdFX1NFTF9PRkZTRVRf U0hJRlQpICYgUEFHRV9TRUxfTUFTSykNCi0NCi1zdHJ1Y3QgbW9iaXZlaWxfbXNpIHsJCQkvKiBN U0kgaW5mb3JtYXRpb24gKi8NCi0Jc3RydWN0IG11dGV4IGxvY2s7CQkvKiBwcm90ZWN0IGJpdG1h cCB2YXJpYWJsZSAqLw0KLQlzdHJ1Y3QgaXJxX2RvbWFpbiAqbXNpX2RvbWFpbjsNCi0Jc3RydWN0 IGlycV9kb21haW4gKmRldl9kb21haW47DQotCXBoeXNfYWRkcl90IG1zaV9wYWdlc19waHlzOw0K LQlpbnQgbnVtX29mX3ZlY3RvcnM7DQotCURFQ0xBUkVfQklUTUFQKG1zaV9pcnFfaW5fdXNlLCBQ Q0lfTlVNX01TSSk7DQotfTsNCi0NCi1zdHJ1Y3QgbW9iaXZlaWxfcGNpZSB7DQotCXN0cnVjdCBw bGF0Zm9ybV9kZXZpY2UgKnBkZXY7DQotCXN0cnVjdCBsaXN0X2hlYWQgcmVzb3VyY2VzOw0KLQl2 b2lkIF9faW9tZW0gKmNvbmZpZ19heGlfc2xhdmVfYmFzZTsJLyogZW5kcG9pbnQgY29uZmlnIGJh c2UgKi8NCi0Jdm9pZCBfX2lvbWVtICpjc3JfYXhpX3NsYXZlX2Jhc2U7CS8qIHJvb3QgcG9ydCBj b25maWcgYmFzZSAqLw0KLQl2b2lkIF9faW9tZW0gKmFwYl9jc3JfYmFzZTsJLyogTVNJIHJlZ2lz dGVyIGJhc2UgKi8NCi0JcGh5c19hZGRyX3QgcGNpZV9yZWdfYmFzZTsJLyogUGh5c2ljYWwgUENJ ZSBDb250cm9sbGVyIEJhc2UgKi8NCi0Jc3RydWN0IGlycV9kb21haW4gKmludHhfZG9tYWluOw0K LQlyYXdfc3BpbmxvY2tfdCBpbnR4X21hc2tfbG9jazsNCi0JaW50IGlycTsNCi0JaW50IGFwaW9f d2luczsNCi0JaW50IHBwaW9fd2luczsNCi0JaW50IG9iX3dpbnNfY29uZmlndXJlZDsJCS8qIGNv bmZpZ3VyZWQgb3V0Ym91bmQgd2luZG93cyAqLw0KLQlpbnQgaWJfd2luc19jb25maWd1cmVkOwkJ LyogY29uZmlndXJlZCBpbmJvdW5kIHdpbmRvd3MgKi8NCi0Jc3RydWN0IHJlc291cmNlICpvYl9p b19yZXM7DQotCWNoYXIgcm9vdF9idXNfbnI7DQotCXN0cnVjdCBtb2JpdmVpbF9tc2kgbXNpOw0K LX07DQotDQotLyoNCi0gKiBtb2JpdmVpbF9wY2llX3NlbF9wYWdlIC0gcm91dGluZSB0byBhY2Nl c3MgcGFnZWQgcmVnaXN0ZXINCi0gKg0KLSAqIFJlZ2lzdGVycyB3aG9zZSBhZGRyZXNzIGdyZWF0 ZXIgdGhhbiBQQUdFRF9BRERSX0JORFJZICgweGMwMCkgYXJlIHBhZ2VkLA0KLSAqIGZvciB0aGlz IHNjaGVtZSB0byB3b3JrIGV4dHJhY3RlZCBoaWdoZXIgNiBiaXRzIG9mIHRoZSBvZmZzZXQgd2ls bCBiZQ0KLSAqIHdyaXR0ZW4gdG8gcGdfc2VsIGZpZWxkIG9mIFBBQl9DVFJMIHJlZ2lzdGVyIGFu ZCByZXN0IG9mIHRoZSBsb3dlciAxMA0KLSAqIGJpdHMgZW5hYmxlZCB3aXRoIFBBR0VEX0FERFJf Qk5EUlkgYXJlIHVzZWQgYXMgb2Zmc2V0IG9mIHRoZSByZWdpc3Rlci4NCi0gKi8NCi1zdGF0aWMg dm9pZCBtb2JpdmVpbF9wY2llX3NlbF9wYWdlKHN0cnVjdCBtb2JpdmVpbF9wY2llICpwY2llLCB1 OCBwZ19pZHgpDQotew0KLQl1MzIgdmFsOw0KLQ0KLQl2YWwgPSByZWFkbChwY2llLT5jc3JfYXhp X3NsYXZlX2Jhc2UgKyBQQUJfQ1RSTCk7DQotCXZhbCAmPSB+KFBBR0VfU0VMX01BU0sgPDwgUEFH RV9TRUxfU0hJRlQpOw0KLQl2YWwgfD0gKHBnX2lkeCAmIFBBR0VfU0VMX01BU0spIDw8IFBBR0Vf U0VMX1NISUZUOw0KLQ0KLQl3cml0ZWwodmFsLCBwY2llLT5jc3JfYXhpX3NsYXZlX2Jhc2UgKyBQ QUJfQ1RSTCk7DQotfQ0KLQ0KLXN0YXRpYyB2b2lkICptb2JpdmVpbF9wY2llX2NvbXBfYWRkcihz dHJ1Y3QgbW9iaXZlaWxfcGNpZSAqcGNpZSwgdTMyIG9mZikNCi17DQotCWlmIChvZmYgPCBQQUdF RF9BRERSX0JORFJZKSB7DQotCQkvKiBGb3IgZGlyZWN0bHkgYWNjZXNzZWQgcmVnaXN0ZXJzLCBj bGVhciB0aGUgcGdfc2VsIGZpZWxkICovDQotCQltb2JpdmVpbF9wY2llX3NlbF9wYWdlKHBjaWUs IDApOw0KLQkJcmV0dXJuIHBjaWUtPmNzcl9heGlfc2xhdmVfYmFzZSArIG9mZjsNCi0JfQ0KLQ0K LQltb2JpdmVpbF9wY2llX3NlbF9wYWdlKHBjaWUsIE9GRlNFVF9UT19QQUdFX0lEWChvZmYpKTsN Ci0JcmV0dXJuIHBjaWUtPmNzcl9heGlfc2xhdmVfYmFzZSArIE9GRlNFVF9UT19QQUdFX0FERFIo b2ZmKTsNCi19DQotDQotc3RhdGljIGludCBtb2JpdmVpbF9wY2llX3JlYWQodm9pZCBfX2lvbWVt ICphZGRyLCBpbnQgc2l6ZSwgdTMyICp2YWwpDQotew0KLQlpZiAoKHVpbnRwdHJfdClhZGRyICYg KHNpemUgLSAxKSkgew0KLQkJKnZhbCA9IDA7DQotCQlyZXR1cm4gUENJQklPU19CQURfUkVHSVNU RVJfTlVNQkVSOw0KLQl9DQotDQotCXN3aXRjaCAoc2l6ZSkgew0KLQljYXNlIDQ6DQotCQkqdmFs ID0gcmVhZGwoYWRkcik7DQotCQlicmVhazsNCi0JY2FzZSAyOg0KLQkJKnZhbCA9IHJlYWR3KGFk ZHIpOw0KLQkJYnJlYWs7DQotCWNhc2UgMToNCi0JCSp2YWwgPSByZWFkYihhZGRyKTsNCi0JCWJy ZWFrOw0KLQlkZWZhdWx0Og0KLQkJKnZhbCA9IDA7DQotCQlyZXR1cm4gUENJQklPU19CQURfUkVH SVNURVJfTlVNQkVSOw0KLQl9DQotDQotCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7DQotfQ0K LQ0KLXN0YXRpYyBpbnQgbW9iaXZlaWxfcGNpZV93cml0ZSh2b2lkIF9faW9tZW0gKmFkZHIsIGlu dCBzaXplLCB1MzIgdmFsKQ0KLXsNCi0JaWYgKCh1aW50cHRyX3QpYWRkciAmIChzaXplIC0gMSkp DQotCQlyZXR1cm4gUENJQklPU19CQURfUkVHSVNURVJfTlVNQkVSOw0KLQ0KLQlzd2l0Y2ggKHNp emUpIHsNCi0JY2FzZSA0Og0KLQkJd3JpdGVsKHZhbCwgYWRkcik7DQotCQlicmVhazsNCi0JY2Fz ZSAyOg0KLQkJd3JpdGV3KHZhbCwgYWRkcik7DQotCQlicmVhazsNCi0JY2FzZSAxOg0KLQkJd3Jp dGViKHZhbCwgYWRkcik7DQotCQlicmVhazsNCi0JZGVmYXVsdDoNCi0JCXJldHVybiBQQ0lCSU9T X0JBRF9SRUdJU1RFUl9OVU1CRVI7DQotCX0NCi0NCi0JcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZV TDsNCi19DQotDQotc3RhdGljIHUzMiBjc3JfcmVhZChzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAqcGNp ZSwgdTMyIG9mZiwgc2l6ZV90IHNpemUpDQotew0KLQl2b2lkICphZGRyOw0KLQl1MzIgdmFsOw0K LQlpbnQgcmV0Ow0KLQ0KLQlhZGRyID0gbW9iaXZlaWxfcGNpZV9jb21wX2FkZHIocGNpZSwgb2Zm KTsNCi0NCi0JcmV0ID0gbW9iaXZlaWxfcGNpZV9yZWFkKGFkZHIsIHNpemUsICZ2YWwpOw0KLQlp ZiAocmV0KQ0KLQkJZGV2X2VycigmcGNpZS0+cGRldi0+ZGV2LCAicmVhZCBDU1IgYWRkcmVzcyBm YWlsZWRcbiIpOw0KLQ0KLQlyZXR1cm4gdmFsOw0KLX0NCi0NCi1zdGF0aWMgdm9pZCBjc3Jfd3Jp dGUoc3RydWN0IG1vYml2ZWlsX3BjaWUgKnBjaWUsIHUzMiB2YWwsIHUzMiBvZmYsIHNpemVfdCBz aXplKQ0KLXsNCi0Jdm9pZCAqYWRkcjsNCi0JaW50IHJldDsNCi0NCi0JYWRkciA9IG1vYml2ZWls X3BjaWVfY29tcF9hZGRyKHBjaWUsIG9mZik7DQotDQotCXJldCA9IG1vYml2ZWlsX3BjaWVfd3Jp dGUoYWRkciwgc2l6ZSwgdmFsKTsNCi0JaWYgKHJldCkNCi0JCWRldl9lcnIoJnBjaWUtPnBkZXYt PmRldiwgIndyaXRlIENTUiBhZGRyZXNzIGZhaWxlZFxuIik7DQotfQ0KLQ0KLXN0YXRpYyB1MzIg Y3NyX3JlYWRsKHN0cnVjdCBtb2JpdmVpbF9wY2llICpwY2llLCB1MzIgb2ZmKQ0KLXsNCi0JcmV0 dXJuIGNzcl9yZWFkKHBjaWUsIG9mZiwgMHg0KTsNCi19DQotDQotc3RhdGljIHZvaWQgY3NyX3dy aXRlbChzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAqcGNpZSwgdTMyIHZhbCwgdTMyIG9mZikNCi17DQot CWNzcl93cml0ZShwY2llLCB2YWwsIG9mZiwgMHg0KTsNCi19DQotDQotc3RhdGljIGJvb2wgbW9i aXZlaWxfcGNpZV9saW5rX3VwKHN0cnVjdCBtb2JpdmVpbF9wY2llICpwY2llKQ0KLXsNCi0JcmV0 dXJuIChjc3JfcmVhZGwocGNpZSwgTFRTU01fU1RBVFVTKSAmDQotCQlMVFNTTV9TVEFUVVNfTDBf TUFTSykgPT0gTFRTU01fU1RBVFVTX0wwOw0KLX0NCisjaW5jbHVkZSAicGNpZS1tb2JpdmVpbC5o Ig0KIA0KIHN0YXRpYyBib29sIG1vYml2ZWlsX3BjaWVfdmFsaWRfZGV2aWNlKHN0cnVjdCBwY2lf YnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbikNCiB7DQogCXN0cnVjdCBtb2JpdmVpbF9wY2ll ICpwY2llID0gYnVzLT5zeXNkYXRhOw0KIA0KIAkvKiBJZiB0aGVyZSBpcyBubyBsaW5rLCB0aGVu IHRoZXJlIGlzIG5vIGRldmljZSAqLw0KLQlpZiAoYnVzLT5udW1iZXIgPiBwY2llLT5yb290X2J1 c19uciAmJiAhbW9iaXZlaWxfcGNpZV9saW5rX3VwKHBjaWUpKQ0KKwlpZiAoYnVzLT5udW1iZXIg PiBwY2llLT5ycC5yb290X2J1c19uciAmJiAhbW9iaXZlaWxfcGNpZV9saW5rX3VwKHBjaWUpKQ0K IAkJcmV0dXJuIGZhbHNlOw0KIA0KIAkvKiBPbmx5IG9uZSBkZXZpY2UgZG93biBvbiBlYWNoIHJv b3QgcG9ydCAqLw0KLQlpZiAoKGJ1cy0+bnVtYmVyID09IHBjaWUtPnJvb3RfYnVzX25yKSAmJiAo ZGV2Zm4gPiAwKSkNCisJaWYgKChidXMtPm51bWJlciA9PSBwY2llLT5ycC5yb290X2J1c19ucikg JiYgKGRldmZuID4gMCkpDQogCQlyZXR1cm4gZmFsc2U7DQogDQogCS8qDQogCSAqIERvIG5vdCBy ZWFkIG1vcmUgdGhhbiBvbmUgZGV2aWNlIG9uIHRoZSBidXMgZGlyZWN0bHkNCiAJICogYXR0YWNo ZWQgdG8gUkMNCiAJICovDQotCWlmICgoYnVzLT5wcmltYXJ5ID09IHBjaWUtPnJvb3RfYnVzX25y KSAmJiAoUENJX1NMT1QoZGV2Zm4pID4gMCkpDQorCWlmICgoYnVzLT5wcmltYXJ5ID09IHBjaWUt PnJwLnJvb3RfYnVzX25yKSAmJiAoUENJX1NMT1QoZGV2Zm4pID4gMCkpDQogCQlyZXR1cm4gZmFs c2U7DQogDQogCXJldHVybiB0cnVlOw0KQEAgLTMxNSw3ICs2Myw3IEBAIHN0YXRpYyB2b2lkIF9f aW9tZW0gKm1vYml2ZWlsX3BjaWVfbWFwX2J1cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLA0KIAkJcmV0 dXJuIE5VTEw7DQogDQogCS8qIFJDIGNvbmZpZyBhY2Nlc3MgKi8NCi0JaWYgKGJ1cy0+bnVtYmVy ID09IHBjaWUtPnJvb3RfYnVzX25yKQ0KKwlpZiAoYnVzLT5udW1iZXIgPT0gcGNpZS0+cnAucm9v dF9idXNfbnIpDQogCQlyZXR1cm4gcGNpZS0+Y3NyX2F4aV9zbGF2ZV9iYXNlICsgd2hlcmU7DQog DQogCS8qDQpAQCAtMzMwLDcgKzc4LDcgQEAgc3RhdGljIHZvaWQgX19pb21lbSAqbW9iaXZlaWxf cGNpZV9tYXBfYnVzKHN0cnVjdCBwY2lfYnVzICpidXMsDQogDQogCWNzcl93cml0ZWwocGNpZSwg dmFsdWUsIFBBQl9BWElfQU1BUF9QRVhfV0lOX0woV0lOX05VTV8wKSk7DQogDQotCXJldHVybiBw Y2llLT5jb25maWdfYXhpX3NsYXZlX2Jhc2UgKyB3aGVyZTsNCisJcmV0dXJuIHBjaWUtPnJwLmNv bmZpZ19heGlfc2xhdmVfYmFzZSArIHdoZXJlOw0KIH0NCiANCiBzdGF0aWMgc3RydWN0IHBjaV9v cHMgbW9iaXZlaWxfcGNpZV9vcHMgPSB7DQpAQCAtMzQ0LDcgKzkyLDcgQEAgc3RhdGljIHZvaWQg bW9iaXZlaWxfcGNpZV9pc3Ioc3RydWN0IGlycV9kZXNjICpkZXNjKQ0KIAlzdHJ1Y3QgaXJxX2No aXAgKmNoaXAgPSBpcnFfZGVzY19nZXRfY2hpcChkZXNjKTsNCiAJc3RydWN0IG1vYml2ZWlsX3Bj aWUgKnBjaWUgPSBpcnFfZGVzY19nZXRfaGFuZGxlcl9kYXRhKGRlc2MpOw0KIAlzdHJ1Y3QgZGV2 aWNlICpkZXYgPSAmcGNpZS0+cGRldi0+ZGV2Ow0KLQlzdHJ1Y3QgbW9iaXZlaWxfbXNpICptc2kg PSAmcGNpZS0+bXNpOw0KKwlzdHJ1Y3QgbW9iaXZlaWxfbXNpICptc2kgPSAmcGNpZS0+cnAubXNp Ow0KIAl1MzIgbXNpX2RhdGEsIG1zaV9hZGRyX2xvLCBtc2lfYWRkcl9oaTsNCiAJdTMyIGludHJf c3RhdHVzLCBtc2lfc3RhdHVzOw0KIAl1bnNpZ25lZCBsb25nIHNoaWZ0ZWRfc3RhdHVzOw0KQEAg LTM2OSw3ICsxMTcsNyBAQCBzdGF0aWMgdm9pZCBtb2JpdmVpbF9wY2llX2lzcihzdHJ1Y3QgaXJx X2Rlc2MgKmRlc2MpDQogCQlzaGlmdGVkX3N0YXR1cyA+Pj0gUEFCX0lOVFhfU1RBUlQ7DQogCQlk byB7DQogCQkJZm9yX2VhY2hfc2V0X2JpdChiaXQsICZzaGlmdGVkX3N0YXR1cywgUENJX05VTV9J TlRYKSB7DQotCQkJCXZpcnEgPSBpcnFfZmluZF9tYXBwaW5nKHBjaWUtPmludHhfZG9tYWluLA0K KwkJCQl2aXJxID0gaXJxX2ZpbmRfbWFwcGluZyhwY2llLT5ycC5pbnR4X2RvbWFpbiwNCiAJCQkJ CQkJYml0ICsgMSk7DQogCQkJCWlmICh2aXJxKQ0KIAkJCQkJZ2VuZXJpY19oYW5kbGVfaXJxKHZp cnEpOw0KQEAgLTQzMiwxMCArMTgwLDEwIEBAIHN0YXRpYyBpbnQgbW9iaXZlaWxfcGNpZV9wYXJz ZV9kdChzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAqcGNpZSkNCiAJLyogbWFwIGNvbmZpZyByZXNvdXJj ZSAqLw0KIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VS Q0VfTUVNLA0KIAkJCQkJICAgImNvbmZpZ19heGlfc2xhdmUiKTsNCi0JcGNpZS0+Y29uZmlnX2F4 aV9zbGF2ZV9iYXNlID0gZGV2bV9wY2lfcmVtYXBfY2ZnX3Jlc291cmNlKGRldiwgcmVzKTsNCi0J aWYgKElTX0VSUihwY2llLT5jb25maWdfYXhpX3NsYXZlX2Jhc2UpKQ0KLQkJcmV0dXJuIFBUUl9F UlIocGNpZS0+Y29uZmlnX2F4aV9zbGF2ZV9iYXNlKTsNCi0JcGNpZS0+b2JfaW9fcmVzID0gcmVz Ow0KKwlwY2llLT5ycC5jb25maWdfYXhpX3NsYXZlX2Jhc2UgPSBkZXZtX3BjaV9yZW1hcF9jZmdf cmVzb3VyY2UoZGV2LCByZXMpOw0KKwlpZiAoSVNfRVJSKHBjaWUtPnJwLmNvbmZpZ19heGlfc2xh dmVfYmFzZSkpDQorCQlyZXR1cm4gUFRSX0VSUihwY2llLT5ycC5jb25maWdfYXhpX3NsYXZlX2Jh c2UpOw0KKwlwY2llLT5ycC5vYl9pb19yZXMgPSByZXM7DQogDQogCS8qIG1hcCBjc3IgcmVzb3Vy Y2UgKi8NCiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09V UkNFX01FTSwNCkBAIC00NDUsMTIgKzE5Myw2IEBAIHN0YXRpYyBpbnQgbW9iaXZlaWxfcGNpZV9w YXJzZV9kdChzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAqcGNpZSkNCiAJCXJldHVybiBQVFJfRVJSKHBj aWUtPmNzcl9heGlfc2xhdmVfYmFzZSk7DQogCXBjaWUtPnBjaWVfcmVnX2Jhc2UgPSByZXMtPnN0 YXJ0Ow0KIA0KLQkvKiBtYXAgTVNJIGNvbmZpZyByZXNvdXJjZSAqLw0KLQlyZXMgPSBwbGF0Zm9y bV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAiYXBiX2NzciIpOw0K LQlwY2llLT5hcGJfY3NyX2Jhc2UgPSBkZXZtX3BjaV9yZW1hcF9jZmdfcmVzb3VyY2UoZGV2LCBy ZXMpOw0KLQlpZiAoSVNfRVJSKHBjaWUtPmFwYl9jc3JfYmFzZSkpDQotCQlyZXR1cm4gUFRSX0VS UihwY2llLT5hcGJfY3NyX2Jhc2UpOw0KLQ0KIAkvKiByZWFkIHRoZSBudW1iZXIgb2Ygd2luZG93 cyByZXF1ZXN0ZWQgKi8NCiAJaWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5vZGUsICJhcGlvLXdp bnMiLCAmcGNpZS0+YXBpb193aW5zKSkNCiAJCXBjaWUtPmFwaW9fd2lucyA9IE1BWF9QSU9fV0lO RE9XUzsNCkBAIC00NTgsMTM3ICsyMDAsMTUgQEAgc3RhdGljIGludCBtb2JpdmVpbF9wY2llX3Bh cnNlX2R0KHN0cnVjdCBtb2JpdmVpbF9wY2llICpwY2llKQ0KIAlpZiAob2ZfcHJvcGVydHlfcmVh ZF91MzIobm9kZSwgInBwaW8td2lucyIsICZwY2llLT5wcGlvX3dpbnMpKQ0KIAkJcGNpZS0+cHBp b193aW5zID0gTUFYX1BJT19XSU5ET1dTOw0KIA0KLQlwY2llLT5pcnEgPSBwbGF0Zm9ybV9nZXRf aXJxKHBkZXYsIDApOw0KLQlpZiAocGNpZS0+aXJxIDw9IDApIHsNCi0JCWRldl9lcnIoZGV2LCAi ZmFpbGVkIHRvIG1hcCBJUlE6ICVkXG4iLCBwY2llLT5pcnEpOw0KLQkJcmV0dXJuIC1FTk9ERVY7 DQotCX0NCi0NCiAJcmV0dXJuIDA7DQogfQ0KIA0KLXN0YXRpYyB2b2lkIHByb2dyYW1faWJfd2lu ZG93cyhzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAqcGNpZSwgaW50IHdpbl9udW0sDQotCQkJICAgICAg IHU2NCBjcHVfYWRkciwgdTY0IHBjaV9hZGRyLCB1MzIgdHlwZSwgdTY0IHNpemUpDQotew0KLQl1 MzIgdmFsdWU7DQotCXU2NCBzaXplNjQgPSB+KHNpemUgLSAxKTsNCi0NCi0JaWYgKHdpbl9udW0g Pj0gcGNpZS0+cHBpb193aW5zKSB7DQotCQlkZXZfZXJyKCZwY2llLT5wZGV2LT5kZXYsDQotCQkJ IkVSUk9SOiBtYXggaW5ib3VuZCB3aW5kb3dzIHJlYWNoZWQgIVxuIik7DQotCQlyZXR1cm47DQot CX0NCi0NCi0JdmFsdWUgPSBjc3JfcmVhZGwocGNpZSwgUEFCX1BFWF9BTUFQX0NUUkwod2luX251 bSkpOw0KLQl2YWx1ZSAmPSB+KEFNQVBfQ1RSTF9UWVBFX01BU0sgPDwgQU1BUF9DVFJMX1RZUEVf U0hJRlQgfA0KLQkJIFdJTl9TSVpFX01BU0sgPDwgV0lOX1NJWkVfU0hJRlQpOw0KLQl2YWx1ZSB8 PSAodHlwZSA8PCBBTUFQX0NUUkxfVFlQRV9TSElGVCkgfCAoMSA8PCBBTUFQX0NUUkxfRU5fU0hJ RlQpIHwNCi0JCSAobG93ZXJfMzJfYml0cyhzaXplNjQpICYgV0lOX1NJWkVfTUFTSyA8PCBXSU5f U0laRV9TSElGVCk7DQotCWNzcl93cml0ZWwocGNpZSwgdmFsdWUsIFBBQl9QRVhfQU1BUF9DVFJM KHdpbl9udW0pKTsNCi0NCi0JY3NyX3dyaXRlbChwY2llLCB1cHBlcl8zMl9iaXRzKHNpemU2NCks DQotCQkgICBQQUJfRVhUX1BFWF9BTUFQX1NJWkVOKHdpbl9udW0pKTsNCi0NCi0JY3NyX3dyaXRl bChwY2llLCBsb3dlcl8zMl9iaXRzKGNwdV9hZGRyKSwNCi0JCSAgIFBBQl9QRVhfQU1BUF9BWElf V0lOKHdpbl9udW0pKTsNCi0JY3NyX3dyaXRlbChwY2llLCB1cHBlcl8zMl9iaXRzKGNwdV9hZGRy KSwNCi0JCSAgIFBBQl9FWFRfUEVYX0FNQVBfQVhJX1dJTih3aW5fbnVtKSk7DQotDQotCWNzcl93 cml0ZWwocGNpZSwgbG93ZXJfMzJfYml0cyhwY2lfYWRkciksDQotCQkgICBQQUJfUEVYX0FNQVBf UEVYX1dJTl9MKHdpbl9udW0pKTsNCi0JY3NyX3dyaXRlbChwY2llLCB1cHBlcl8zMl9iaXRzKHBj aV9hZGRyKSwNCi0JCSAgIFBBQl9QRVhfQU1BUF9QRVhfV0lOX0god2luX251bSkpOw0KLQ0KLQlw Y2llLT5pYl93aW5zX2NvbmZpZ3VyZWQrKzsNCi19DQotDQotLyoNCi0gKiByb3V0aW5lIHRvIHBy b2dyYW0gdGhlIG91dGJvdW5kIHdpbmRvd3MNCi0gKi8NCi1zdGF0aWMgdm9pZCBwcm9ncmFtX29i X3dpbmRvd3Moc3RydWN0IG1vYml2ZWlsX3BjaWUgKnBjaWUsIGludCB3aW5fbnVtLA0KLQkJCSAg ICAgICB1NjQgY3B1X2FkZHIsIHU2NCBwY2lfYWRkciwgdTMyIHR5cGUsIHU2NCBzaXplKQ0KLXsN Ci0NCi0JdTMyIHZhbHVlOw0KLQl1NjQgc2l6ZTY0ID0gfihzaXplIC0gMSk7DQotDQotCWlmICh3 aW5fbnVtID49IHBjaWUtPmFwaW9fd2lucykgew0KLQkJZGV2X2VycigmcGNpZS0+cGRldi0+ZGV2 LA0KLQkJCSJFUlJPUjogbWF4IG91dGJvdW5kIHdpbmRvd3MgcmVhY2hlZCAhXG4iKTsNCi0JCXJl dHVybjsNCi0JfQ0KLQ0KLQkvKg0KLQkgKiBwcm9ncmFtIEVuYWJsZSBCaXQgdG8gMSwgVHlwZSBC aXQgdG8gKDAwKSBiYXNlIDIsIEFYSSBXaW5kb3cgU2l6ZSBCaXQNCi0JICogdG8gNCBLQiBpbiBQ QUJfQVhJX0FNQVBfQ1RSTCByZWdpc3Rlcg0KLQkgKi8NCi0JdmFsdWUgPSBjc3JfcmVhZGwocGNp ZSwgUEFCX0FYSV9BTUFQX0NUUkwod2luX251bSkpOw0KLQl2YWx1ZSAmPSB+KFdJTl9UWVBFX01B U0sgPDwgV0lOX1RZUEVfU0hJRlQgfA0KLQkJIFdJTl9TSVpFX01BU0sgPDwgV0lOX1NJWkVfU0hJ RlQpOw0KLQl2YWx1ZSB8PSAxIDw8IFdJTl9FTkFCTEVfU0hJRlQgfCB0eXBlIDw8IFdJTl9UWVBF X1NISUZUIHwNCi0JCSAobG93ZXJfMzJfYml0cyhzaXplNjQpICYgV0lOX1NJWkVfTUFTSyA8PCBX SU5fU0laRV9TSElGVCk7DQotCWNzcl93cml0ZWwocGNpZSwgdmFsdWUsIFBBQl9BWElfQU1BUF9D VFJMKHdpbl9udW0pKTsNCi0NCi0JY3NyX3dyaXRlbChwY2llLCB1cHBlcl8zMl9iaXRzKHNpemU2 NCksIFBBQl9FWFRfQVhJX0FNQVBfU0laRSh3aW5fbnVtKSk7DQotDQotCS8qDQotCSAqIHByb2dy YW0gQVhJIHdpbmRvdyBiYXNlIHdpdGggYXBwcm9wcmlhdGUgdmFsdWUgaW4NCi0JICogUEFCX0FY SV9BTUFQX0FYSV9XSU4wIHJlZ2lzdGVyDQotCSAqLw0KLQljc3Jfd3JpdGVsKHBjaWUsIGxvd2Vy XzMyX2JpdHMoY3B1X2FkZHIpICYgKH5BWElfV0lORE9XX0FMSUdOX01BU0spLA0KLQkJICAgUEFC X0FYSV9BTUFQX0FYSV9XSU4od2luX251bSkpOw0KLQljc3Jfd3JpdGVsKHBjaWUsIHVwcGVyXzMy X2JpdHMoY3B1X2FkZHIpLA0KLQkJICAgUEFCX0VYVF9BWElfQU1BUF9BWElfV0lOKHdpbl9udW0p KTsNCi0NCi0JY3NyX3dyaXRlbChwY2llLCBsb3dlcl8zMl9iaXRzKHBjaV9hZGRyKSwNCi0JCSAg IFBBQl9BWElfQU1BUF9QRVhfV0lOX0wod2luX251bSkpOw0KLQljc3Jfd3JpdGVsKHBjaWUsIHVw cGVyXzMyX2JpdHMocGNpX2FkZHIpLA0KLQkJICAgUEFCX0FYSV9BTUFQX1BFWF9XSU5fSCh3aW5f bnVtKSk7DQotDQotCXBjaWUtPm9iX3dpbnNfY29uZmlndXJlZCsrOw0KLX0NCi0NCi1zdGF0aWMg aW50IG1vYml2ZWlsX2JyaW5ndXBfbGluayhzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAqcGNpZSkNCi17 DQotCWludCByZXRyaWVzOw0KLQ0KLQkvKiBjaGVjayBpZiB0aGUgbGluayBpcyB1cCBvciBub3Qg Ki8NCi0JZm9yIChyZXRyaWVzID0gMDsgcmV0cmllcyA8IExJTktfV0FJVF9NQVhfUkVUUklFUzsg cmV0cmllcysrKSB7DQotCQlpZiAobW9iaXZlaWxfcGNpZV9saW5rX3VwKHBjaWUpKQ0KLQkJCXJl dHVybiAwOw0KLQ0KLQkJdXNsZWVwX3JhbmdlKExJTktfV0FJVF9NSU4sIExJTktfV0FJVF9NQVgp Ow0KLQl9DQotDQotCWRldl9pbmZvKCZwY2llLT5wZGV2LT5kZXYsICJsaW5rIG5ldmVyIGNhbWUg dXBcbiIpOw0KLQ0KLQlyZXR1cm4gLUVUSU1FRE9VVDsNCi19DQotDQotc3RhdGljIHZvaWQgbW9i aXZlaWxfcGNpZV9kaXNhYmxlX2liX3dpbihzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAqcGNpZSwgaW50 IGlkeCkNCi17DQotCXUzMiB2YWw7DQotDQotCXZhbCA9IGNzcl9yZWFkbChwY2llLCBQQUJfUEVY X0FNQVBfQ1RSTChpZHgpKTsNCi0JdmFsICY9IH4oMSA8PCBBTUFQX0NUUkxfRU5fU0hJRlQpOw0K LQljc3Jfd3JpdGVsKHBjaWUsIHZhbCwgUEFCX1BFWF9BTUFQX0NUUkwoaWR4KSk7DQotfQ0KLQ0K LXN0YXRpYyB2b2lkIG1vYml2ZWlsX3BjaWVfZGlzYWJsZV9vYl93aW4oc3RydWN0IG1vYml2ZWls X3BjaWUgKnBjaWUsIGludCBpZHgpDQotew0KLQl1MzIgdmFsOw0KLQ0KLQl2YWwgPSBjc3JfcmVh ZGwocGNpZSwgUEFCX0FYSV9BTUFQX0NUUkwoaWR4KSk7DQotCXZhbCAmPSB+KDEgPDwgV0lOX0VO QUJMRV9TSElGVCk7DQotCWNzcl93cml0ZWwocGNpZSwgdmFsLCBQQUJfQVhJX0FNQVBfQ1RSTChp ZHgpKTsNCi19DQotDQogc3RhdGljIHZvaWQgbW9iaXZlaWxfcGNpZV9lbmFibGVfbXNpKHN0cnVj dCBtb2JpdmVpbF9wY2llICpwY2llKQ0KIHsNCiAJcGh5c19hZGRyX3QgbXNnX2FkZHIgPSBwY2ll LT5wY2llX3JlZ19iYXNlOw0KLQlzdHJ1Y3QgbW9iaXZlaWxfbXNpICptc2kgPSAmcGNpZS0+bXNp Ow0KKwlzdHJ1Y3QgbW9iaXZlaWxfbXNpICptc2kgPSAmcGNpZS0+cnAubXNpOw0KIA0KLQlwY2ll LT5tc2kubnVtX29mX3ZlY3RvcnMgPSBQQ0lfTlVNX01TSTsNCisJbXNpLT5udW1fb2ZfdmVjdG9y cyA9IFBDSV9OVU1fTVNJOw0KIAltc2ktPm1zaV9wYWdlc19waHlzID0gKHBoeXNfYWRkcl90KW1z Z19hZGRyOw0KIA0KIAl3cml0ZWxfcmVsYXhlZChsb3dlcl8zMl9iaXRzKG1zZ19hZGRyKSwNCkBA IC02MzMsOSArMjUzLDYgQEAgc3RhdGljIGludCBtb2JpdmVpbF9ob3N0X2luaXQoc3RydWN0IG1v Yml2ZWlsX3BjaWUgKnBjaWUpDQogCXBhYl9jdHJsIHw9ICgxIDw8IEFNQkFfUElPX0VOQUJMRV9T SElGVCkgfCAoMSA8PCBQRVhfUElPX0VOQUJMRV9TSElGVCk7DQogCWNzcl93cml0ZWwocGNpZSwg cGFiX2N0cmwsIFBBQl9DVFJMKTsNCiANCi0JY3NyX3dyaXRlbChwY2llLCAoUEFCX0lOVFBfSU5U WF9NQVNLIHwgUEFCX0lOVFBfTVNJX01BU0spLA0KLQkJICAgUEFCX0lOVFBfQU1CQV9NSVNDX0VO Qik7DQotDQogCS8qDQogCSAqIHByb2dyYW0gUElPIEVuYWJsZSBCaXQgdG8gMSBhbmQgQ29uZmln IFdpbmRvdyBFbmFibGUgQml0IHRvIDEgaW4NCiAJICogUEFCX0FYSV9QSU9fQ1RSTCBSZWdpc3Rl cg0KQEAgLTY1NywyMCArMjc0LDI0IEBAIHN0YXRpYyBpbnQgbW9iaXZlaWxfaG9zdF9pbml0KHN0 cnVjdCBtb2JpdmVpbF9wY2llICpwY2llKQ0KIAkgKi8NCiANCiAJLyogY29uZmlnIG91dGJvdW5k IHRyYW5zbGF0aW9uIHdpbmRvdyAqLw0KLQlwcm9ncmFtX29iX3dpbmRvd3MocGNpZSwgV0lOX05V TV8wLCBwY2llLT5vYl9pb19yZXMtPnN0YXJ0LCAwLA0KLQkJCSAgIENGR19XSU5ET1dfVFlQRSwg cmVzb3VyY2Vfc2l6ZShwY2llLT5vYl9pb19yZXMpKTsNCisJcHJvZ3JhbV9vYl93aW5kb3dzKHBj aWUsIFdJTl9OVU1fMCwgcGNpZS0+cnAub2JfaW9fcmVzLT5zdGFydCwgMCwNCisJCQkgICBDRkdf V0lORE9XX1RZUEUsIHJlc291cmNlX3NpemUocGNpZS0+cnAub2JfaW9fcmVzKSk7DQogDQogCS8q IG1lbW9yeSBpbmJvdW5kIHRyYW5zbGF0aW9uIHdpbmRvdyAqLw0KIAlwcm9ncmFtX2liX3dpbmRv d3MocGNpZSwgV0lOX05VTV8wLCAwLCAwLCBNRU1fV0lORE9XX1RZUEUsIElCX1dJTl9TSVpFKTsN CiANCiAJLyogR2V0IHRoZSBJL08gYW5kIG1lbW9yeSByYW5nZXMgZnJvbSBEVCAqLw0KIAlyZXNv dXJjZV9saXN0X2Zvcl9lYWNoX2VudHJ5KHdpbiwgJnBjaWUtPnJlc291cmNlcykgew0KLQkJaWYg KHJlc291cmNlX3R5cGUod2luLT5yZXMpID09IElPUkVTT1VSQ0VfTUVNKQ0KKwkJaWYgKHJlc291 cmNlX3R5cGUod2luLT5yZXMpID09IElPUkVTT1VSQ0VfTUVNKSB7DQogCQkJdHlwZSA9IE1FTV9X SU5ET1dfVFlQRTsNCi0JCWVsc2UgaWYgKHJlc291cmNlX3R5cGUod2luLT5yZXMpID09IElPUkVT T1VSQ0VfSU8pDQorCQl9IGVsc2UgaWYgKHJlc291cmNlX3R5cGUod2luLT5yZXMpID09IElPUkVT T1VSQ0VfSU8pIHsNCiAJCQl0eXBlID0gSU9fV0lORE9XX1RZUEU7DQotCQllbHNlDQorCQl9IGVs c2UgaWYgKHJlc291cmNlX3R5cGUod2luLT5yZXMpID09IElPUkVTT1VSQ0VfQlVTKSB7DQorCQkJ cGNpZS0+cnAucm9vdF9idXNfbnIgPSB3aW4tPnJlcy0+c3RhcnQ7DQorCQkJY29udGludWU7DQor CQl9IGVsc2Ugew0KIAkJCWNvbnRpbnVlOw0KKwkJfQ0KIA0KIAkJLyogY29uZmlndXJlIG91dGJv dW5kIHRyYW5zbGF0aW9uIHdpbmRvdyAqLw0KIAkJcHJvZ3JhbV9vYl93aW5kb3dzKHBjaWUsIHBj aWUtPm9iX3dpbnNfY29uZmlndXJlZCwNCkBAIC02ODUsOSArMzA2LDYgQEAgc3RhdGljIGludCBt b2JpdmVpbF9ob3N0X2luaXQoc3RydWN0IG1vYml2ZWlsX3BjaWUgKnBjaWUpDQogCXZhbHVlIHw9 IChQQ0lfQ0xBU1NfQlJJREdFX1BDSSA8PCAxNik7DQogCWNzcl93cml0ZWwocGNpZSwgdmFsdWUs IFBBQl9JTlRQX0FYSV9QSU9fQ0xBU1MpOw0KIA0KLQkvKiBzZXR1cCBNU0kgaGFyZHdhcmUgcmVn aXN0ZXJzICovDQotCW1vYml2ZWlsX3BjaWVfZW5hYmxlX21zaShwY2llKTsNCi0NCiAJcmV0dXJu IDA7DQogfQ0KIA0KQEAgLTcwMCwxMSArMzE4LDExIEBAIHN0YXRpYyB2b2lkIG1vYml2ZWlsX21h c2tfaW50eF9pcnEoc3RydWN0IGlycV9kYXRhICpkYXRhKQ0KIA0KIAlwY2llID0gaXJxX2Rlc2Nf Z2V0X2NoaXBfZGF0YShkZXNjKTsNCiAJbWFzayA9IDEgPDwgKChkYXRhLT5od2lycSArIFBBQl9J TlRYX1NUQVJUKSAtIDEpOw0KLQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnBjaWUtPmludHhfbWFz a19sb2NrLCBmbGFncyk7DQorCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcGNpZS0+cnAuaW50eF9t YXNrX2xvY2ssIGZsYWdzKTsNCiAJc2hpZnRlZF92YWwgPSBjc3JfcmVhZGwocGNpZSwgUEFCX0lO VFBfQU1CQV9NSVNDX0VOQik7DQogCXNoaWZ0ZWRfdmFsICY9IH5tYXNrOw0KIAljc3Jfd3JpdGVs KHBjaWUsIHNoaWZ0ZWRfdmFsLCBQQUJfSU5UUF9BTUJBX01JU0NfRU5CKTsNCi0JcmF3X3NwaW5f dW5sb2NrX2lycXJlc3RvcmUoJnBjaWUtPmludHhfbWFza19sb2NrLCBmbGFncyk7DQorCXJhd19z cGluX3VubG9ja19pcnFyZXN0b3JlKCZwY2llLT5ycC5pbnR4X21hc2tfbG9jaywgZmxhZ3MpOw0K IH0NCiANCiBzdGF0aWMgdm9pZCBtb2JpdmVpbF91bm1hc2tfaW50eF9pcnEoc3RydWN0IGlycV9k YXRhICpkYXRhKQ0KQEAgLTcxNiwxMSArMzM0LDExIEBAIHN0YXRpYyB2b2lkIG1vYml2ZWlsX3Vu bWFza19pbnR4X2lycShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpDQogDQogCXBjaWUgPSBpcnFfZGVz Y19nZXRfY2hpcF9kYXRhKGRlc2MpOw0KIAltYXNrID0gMSA8PCAoKGRhdGEtPmh3aXJxICsgUEFC X0lOVFhfU1RBUlQpIC0gMSk7DQotCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcGNpZS0+aW50eF9t YXNrX2xvY2ssIGZsYWdzKTsNCisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZwY2llLT5ycC5pbnR4 X21hc2tfbG9jaywgZmxhZ3MpOw0KIAlzaGlmdGVkX3ZhbCA9IGNzcl9yZWFkbChwY2llLCBQQUJf SU5UUF9BTUJBX01JU0NfRU5CKTsNCiAJc2hpZnRlZF92YWwgfD0gbWFzazsNCiAJY3NyX3dyaXRl bChwY2llLCBzaGlmdGVkX3ZhbCwgUEFCX0lOVFBfQU1CQV9NSVNDX0VOQik7DQotCXJhd19zcGlu X3VubG9ja19pcnFyZXN0b3JlKCZwY2llLT5pbnR4X21hc2tfbG9jaywgZmxhZ3MpOw0KKwlyYXdf c3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGNpZS0+cnAuaW50eF9tYXNrX2xvY2ssIGZsYWdzKTsN CiB9DQogDQogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBpbnR4X2lycV9jaGlwID0gew0KQEAgLTc4 OCw3ICs0MDYsNyBAQCBzdGF0aWMgaW50IG1vYml2ZWlsX2lycV9tc2lfZG9tYWluX2FsbG9jKHN0 cnVjdCBpcnFfZG9tYWluICpkb21haW4sDQogCQkJCQkgdW5zaWduZWQgaW50IG5yX2lycXMsIHZv aWQgKmFyZ3MpDQogew0KIAlzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAqcGNpZSA9IGRvbWFpbi0+aG9z dF9kYXRhOw0KLQlzdHJ1Y3QgbW9iaXZlaWxfbXNpICptc2kgPSAmcGNpZS0+bXNpOw0KKwlzdHJ1 Y3QgbW9iaXZlaWxfbXNpICptc2kgPSAmcGNpZS0+cnAubXNpOw0KIAl1bnNpZ25lZCBsb25nIGJp dDsNCiANCiAJV0FSTl9PTihucl9pcnFzICE9IDEpOw0KQEAgLTgxNSw3ICs0MzMsNyBAQCBzdGF0 aWMgdm9pZCBtb2JpdmVpbF9pcnFfbXNpX2RvbWFpbl9mcmVlKHN0cnVjdCBpcnFfZG9tYWluICpk b21haW4sDQogew0KIAlzdHJ1Y3QgaXJxX2RhdGEgKmQgPSBpcnFfZG9tYWluX2dldF9pcnFfZGF0 YShkb21haW4sIHZpcnEpOw0KIAlzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAqcGNpZSA9IGlycV9kYXRh X2dldF9pcnFfY2hpcF9kYXRhKGQpOw0KLQlzdHJ1Y3QgbW9iaXZlaWxfbXNpICptc2kgPSAmcGNp ZS0+bXNpOw0KKwlzdHJ1Y3QgbW9iaXZlaWxfbXNpICptc2kgPSAmcGNpZS0+cnAubXNpOw0KIA0K IAltdXRleF9sb2NrKCZtc2ktPmxvY2spOw0KIA0KQEAgLTgzNiw5ICs0NTQsOSBAQCBzdGF0aWMg aW50IG1vYml2ZWlsX2FsbG9jYXRlX21zaV9kb21haW5zKHN0cnVjdCBtb2JpdmVpbF9wY2llICpw Y2llKQ0KIHsNCiAJc3RydWN0IGRldmljZSAqZGV2ID0gJnBjaWUtPnBkZXYtPmRldjsNCiAJc3Ry dWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSA9IG9mX25vZGVfdG9fZndub2RlKGRldi0+b2Zfbm9k ZSk7DQotCXN0cnVjdCBtb2JpdmVpbF9tc2kgKm1zaSA9ICZwY2llLT5tc2k7DQorCXN0cnVjdCBt b2JpdmVpbF9tc2kgKm1zaSA9ICZwY2llLT5ycC5tc2k7DQogDQotCW11dGV4X2luaXQoJnBjaWUt Pm1zaS5sb2NrKTsNCisJbXV0ZXhfaW5pdCgmbXNpLT5sb2NrKTsNCiAJbXNpLT5kZXZfZG9tYWlu ID0gaXJxX2RvbWFpbl9hZGRfbGluZWFyKE5VTEwsIG1zaS0+bnVtX29mX3ZlY3RvcnMsDQogCQkJ CQkJJm1zaV9kb21haW5fb3BzLCBwY2llKTsNCiAJaWYgKCFtc2ktPmRldl9kb21haW4pIHsNCkBA IC04NjUsMTUgKzQ4MywxNSBAQCBzdGF0aWMgaW50IG1vYml2ZWlsX3BjaWVfaW5pdF9pcnFfZG9t YWluKHN0cnVjdCBtb2JpdmVpbF9wY2llICpwY2llKQ0KIAlpbnQgcmV0Ow0KIA0KIAkvKiBzZXR1 cCBJTlR4ICovDQotCXBjaWUtPmludHhfZG9tYWluID0gaXJxX2RvbWFpbl9hZGRfbGluZWFyKG5v ZGUsIFBDSV9OVU1fSU5UWCwNCi0JCQkJCQkgICZpbnR4X2RvbWFpbl9vcHMsIHBjaWUpOw0KKwlw Y2llLT5ycC5pbnR4X2RvbWFpbiA9IGlycV9kb21haW5fYWRkX2xpbmVhcihub2RlLCBQQ0lfTlVN X0lOVFgsDQorCQkJCQkJICAgICAmaW50eF9kb21haW5fb3BzLCBwY2llKTsNCiANCi0JaWYgKCFw Y2llLT5pbnR4X2RvbWFpbikgew0KKwlpZiAoIXBjaWUtPnJwLmludHhfZG9tYWluKSB7DQogCQlk ZXZfZXJyKGRldiwgIkZhaWxlZCB0byBnZXQgYSBJTlR4IElSUSBkb21haW5cbiIpOw0KIAkJcmV0 dXJuIC1FTk9NRU07DQogCX0NCiANCi0JcmF3X3NwaW5fbG9ja19pbml0KCZwY2llLT5pbnR4X21h c2tfbG9jayk7DQorCXJhd19zcGluX2xvY2tfaW5pdCgmcGNpZS0+cnAuaW50eF9tYXNrX2xvY2sp Ow0KIA0KIAkvKiBzZXR1cCBNU0kgKi8NCiAJcmV0ID0gbW9iaXZlaWxfYWxsb2NhdGVfbXNpX2Rv bWFpbnMocGNpZSk7DQpAQCAtODgzLDI0ICs1MDEsNTggQEAgc3RhdGljIGludCBtb2JpdmVpbF9w Y2llX2luaXRfaXJxX2RvbWFpbihzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAqcGNpZSkNCiAJcmV0dXJu IDA7DQogfQ0KIA0KLXN0YXRpYyBpbnQgbW9iaXZlaWxfcGNpZV9wcm9iZShzdHJ1Y3QgcGxhdGZv cm1fZGV2aWNlICpwZGV2KQ0KK3N0YXRpYyBpbnQgbW9iaXZlaWxfcGNpZV9pbnRlcnJ1cHRfaW5p dChzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAqcGNpZSkNCit7DQorCXN0cnVjdCBkZXZpY2UgKmRldiA9 ICZwY2llLT5wZGV2LT5kZXY7DQorCXN0cnVjdCByZXNvdXJjZSAqcmVzOw0KKwlpbnQgcmV0Ow0K Kw0KKwlpZiAocGNpZS0+cnAub3BzLT5pbnRlcnJ1cHRfaW5pdCkNCisJCXJldHVybiBwY2llLT5y cC5vcHMtPmludGVycnVwdF9pbml0KHBjaWUpOw0KKw0KKwkvKiBtYXAgTVNJIGNvbmZpZyByZXNv dXJjZSAqLw0KKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBjaWUtPnBkZXYs IElPUkVTT1VSQ0VfTUVNLA0KKwkJCQkJICAgImFwYl9jc3IiKTsNCisJcGNpZS0+YXBiX2Nzcl9i YXNlID0gZGV2bV9wY2lfcmVtYXBfY2ZnX3Jlc291cmNlKGRldiwgcmVzKTsNCisJaWYgKElTX0VS UihwY2llLT5hcGJfY3NyX2Jhc2UpKQ0KKwkJcmV0dXJuIFBUUl9FUlIocGNpZS0+YXBiX2Nzcl9i YXNlKTsNCisNCisJLyogc2V0dXAgTVNJIGhhcmR3YXJlIHJlZ2lzdGVycyAqLw0KKwltb2JpdmVp bF9wY2llX2VuYWJsZV9tc2kocGNpZSk7DQorDQorCXBjaWUtPnJwLmlycSA9IHBsYXRmb3JtX2dl dF9pcnEocGNpZS0+cGRldiwgMCk7DQorCWlmIChwY2llLT5ycC5pcnEgPD0gMCkgew0KKwkJZGV2 X2VycihkZXYsICJmYWlsZWQgdG8gbWFwIElSUTogJWRcbiIsIHBjaWUtPnJwLmlycSk7DQorCQly ZXR1cm4gLUVOT0RFVjsNCisJfQ0KKw0KKwkvKiBpbml0aWFsaXplIHRoZSBJUlEgZG9tYWlucyAq Lw0KKwlyZXQgPSBtb2JpdmVpbF9wY2llX2luaXRfaXJxX2RvbWFpbihwY2llKTsNCisJaWYgKHJl dCkgew0KKwkJZGV2X2VycihkZXYsICJGYWlsZWQgY3JlYXRpbmcgSVJRIERvbWFpblxuIik7DQor CQlyZXR1cm4gcmV0Ow0KKwl9DQorDQorCWlycV9zZXRfY2hhaW5lZF9oYW5kbGVyX2FuZF9kYXRh KHBjaWUtPnJwLmlycSwNCisJCQkJCSBtb2JpdmVpbF9wY2llX2lzciwgcGNpZSk7DQorDQorCS8q IEVuYWJsZSBpbnRlcnJ1cHRzICovDQorCWNzcl93cml0ZWwocGNpZSwgKFBBQl9JTlRQX0lOVFhf TUFTSyB8IFBBQl9JTlRQX01TSV9NQVNLKSwNCisJCSAgIFBBQl9JTlRQX0FNQkFfTUlTQ19FTkIp Ow0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQoraW50IG1vYml2ZWlsX3BjaWVfaG9zdF9wcm9iZShz dHJ1Y3QgbW9iaXZlaWxfcGNpZSAqcGNpZSkNCiB7DQotCXN0cnVjdCBtb2JpdmVpbF9wY2llICpw Y2llOw0KIAlzdHJ1Y3QgcGNpX2J1cyAqYnVzOw0KIAlzdHJ1Y3QgcGNpX2J1cyAqY2hpbGQ7DQot CXN0cnVjdCBwY2lfaG9zdF9icmlkZ2UgKmJyaWRnZTsNCi0Jc3RydWN0IGRldmljZSAqZGV2ID0g JnBkZXYtPmRldjsNCisJc3RydWN0IHBjaV9ob3N0X2JyaWRnZSAqYnJpZGdlID0gcGNpZS0+YnJp ZGdlOw0KKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGNpZS0+cGRldi0+ZGV2Ow0KIAlyZXNvdXJj ZV9zaXplX3QgaW9iYXNlOw0KIAlpbnQgcmV0Ow0KIA0KLQkvKiBhbGxvY2F0ZSB0aGUgUENJZSBw b3J0ICovDQotCWJyaWRnZSA9IGRldm1fcGNpX2FsbG9jX2hvc3RfYnJpZGdlKGRldiwgc2l6ZW9m KCpwY2llKSk7DQotCWlmICghYnJpZGdlKQ0KLQkJcmV0dXJuIC1FTk9NRU07DQotDQotCXBjaWUg PSBwY2lfaG9zdF9icmlkZ2VfcHJpdihicmlkZ2UpOw0KLQ0KLQlwY2llLT5wZGV2ID0gcGRldjsN CisJSU5JVF9MSVNUX0hFQUQoJnBjaWUtPnJlc291cmNlcyk7DQogDQogCXJldCA9IG1vYml2ZWls X3BjaWVfcGFyc2VfZHQocGNpZSk7DQogCWlmIChyZXQpIHsNCkBAIC05MDgsOCArNTYwLDYgQEAg c3RhdGljIGludCBtb2JpdmVpbF9wY2llX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBk ZXYpDQogCQlyZXR1cm4gcmV0Ow0KIAl9DQogDQotCUlOSVRfTElTVF9IRUFEKCZwY2llLT5yZXNv dXJjZXMpOw0KLQ0KIAkvKiBwYXJzZSB0aGUgaG9zdCBicmlkZ2UgYmFzZSBhZGRyZXNzZXMgZnJv bSB0aGUgZGV2aWNlIHRyZWUgZmlsZSAqLw0KIAlyZXQgPSBkZXZtX29mX3BjaV9nZXRfaG9zdF9i cmlkZ2VfcmVzb3VyY2VzKGRldiwgMCwgMHhmZiwNCiAJCQkJCQkgICAgJnBjaWUtPnJlc291cmNl cywgJmlvYmFzZSk7DQpAQCAtOTI4LDE1ICs1NzgsMTIgQEAgc3RhdGljIGludCBtb2JpdmVpbF9w Y2llX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpDQogCQlnb3RvIGVycm9yOw0K IAl9DQogDQotCS8qIGluaXRpYWxpemUgdGhlIElSUSBkb21haW5zICovDQotCXJldCA9IG1vYml2 ZWlsX3BjaWVfaW5pdF9pcnFfZG9tYWluKHBjaWUpOw0KKwlyZXQgPSBtb2JpdmVpbF9wY2llX2lu dGVycnVwdF9pbml0KHBjaWUpOw0KIAlpZiAocmV0KSB7DQotCQlkZXZfZXJyKGRldiwgIkZhaWxl ZCBjcmVhdGluZyBJUlEgRG9tYWluXG4iKTsNCisJCWRldl9lcnIoZGV2LCAiSW50ZXJydXB0IGlu aXQgZmFpbGVkXG4iKTsNCiAJCWdvdG8gZXJyb3I7DQogCX0NCiANCi0JaXJxX3NldF9jaGFpbmVk X2hhbmRsZXJfYW5kX2RhdGEocGNpZS0+aXJxLCBtb2JpdmVpbF9wY2llX2lzciwgcGNpZSk7DQot DQogCXJldCA9IGRldm1fcmVxdWVzdF9wY2lfYnVzX3Jlc291cmNlcyhkZXYsICZwY2llLT5yZXNv dXJjZXMpOw0KIAlpZiAocmV0KQ0KIAkJZ290byBlcnJvcjsNCkBAIC05NDUsNyArNTkyLDcgQEAg c3RhdGljIGludCBtb2JpdmVpbF9wY2llX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBk ZXYpDQogCWxpc3Rfc3BsaWNlX2luaXQoJnBjaWUtPnJlc291cmNlcywgJmJyaWRnZS0+d2luZG93 cyk7DQogCWJyaWRnZS0+ZGV2LnBhcmVudCA9IGRldjsNCiAJYnJpZGdlLT5zeXNkYXRhID0gcGNp ZTsNCi0JYnJpZGdlLT5idXNuciA9IHBjaWUtPnJvb3RfYnVzX25yOw0KKwlicmlkZ2UtPmJ1c25y ID0gcGNpZS0+cnAucm9vdF9idXNfbnI7DQogCWJyaWRnZS0+b3BzID0gJm1vYml2ZWlsX3BjaWVf b3BzOw0KIAlicmlkZ2UtPm1hcF9pcnEgPSBvZl9pcnFfcGFyc2VfYW5kX21hcF9wY2k7DQogCWJy aWRnZS0+c3dpenpsZV9pcnEgPSBwY2lfY29tbW9uX3N3aXp6bGU7DQpAQCAtOTcxLDI1ICs2MTgs MyBAQCBzdGF0aWMgaW50IG1vYml2ZWlsX3BjaWVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2Rldmlj ZSAqcGRldikNCiAJcGNpX2ZyZWVfcmVzb3VyY2VfbGlzdCgmcGNpZS0+cmVzb3VyY2VzKTsNCiAJ cmV0dXJuIHJldDsNCiB9DQotDQotc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbW9i aXZlaWxfcGNpZV9vZl9tYXRjaFtdID0gew0KLQl7LmNvbXBhdGlibGUgPSAibWJ2bCxncGV4NDAt cGNpZSIsfSwNCi0Je30sDQotfTsNCi0NCi1NT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBtb2JpdmVp bF9wY2llX29mX21hdGNoKTsNCi0NCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtb2Jp dmVpbF9wY2llX2RyaXZlciA9IHsNCi0JLnByb2JlID0gbW9iaXZlaWxfcGNpZV9wcm9iZSwNCi0J LmRyaXZlciA9IHsNCi0JCS5uYW1lID0gIm1vYml2ZWlsLXBjaWUiLA0KLQkJLm9mX21hdGNoX3Rh YmxlID0gbW9iaXZlaWxfcGNpZV9vZl9tYXRjaCwNCi0JCS5zdXBwcmVzc19iaW5kX2F0dHJzID0g dHJ1ZSwNCi0JfSwNCi19Ow0KLQ0KLWJ1aWx0aW5fcGxhdGZvcm1fZHJpdmVyKG1vYml2ZWlsX3Bj aWVfZHJpdmVyKTsNCi0NCi1NT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7DQotTU9EVUxFX0RFU0NS SVBUSU9OKCJNb2JpdmVpbCBQQ0llIGhvc3QgY29udHJvbGxlciBkcml2ZXIiKTsNCi1NT0RVTEVf QVVUSE9SKCJTdWJyYWhtYW55YSBMaW5nYXBwYSA8bC5zdWJyYWhtYW55YUBtb2JpdmVpbC5jby5p bj4iKTsNCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9jb250cm9sbGVyL21vYml2ZWlsL3BjaWUt bW9iaXZlaWwtcGxhdC5jIGIvZHJpdmVycy9wY2kvY29udHJvbGxlci9tb2JpdmVpbC9wY2llLW1v Yml2ZWlsLXBsYXQuYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAwMC4u OWM2MmZjNTg1MzBjDQotLS0gL2Rldi9udWxsDQorKysgYi9kcml2ZXJzL3BjaS9jb250cm9sbGVy L21vYml2ZWlsL3BjaWUtbW9iaXZlaWwtcGxhdC5jDQpAQCAtMCwwICsxLDU5IEBADQorLy8gU1BE WC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjANCisvKg0KKyAqIFBDSWUgaG9zdCBjb250cm9s bGVyIGRyaXZlciBmb3IgTW9iaXZlaWwgUENJZSBIb3N0IGNvbnRyb2xsZXINCisgKg0KKyAqIENv cHlyaWdodCAoYykgMjAxOCBNb2JpdmVpbCBJbmMuDQorICogQ29weXJpZ2h0IDIwMTkgTlhQDQor ICoNCisgKiBBdXRob3I6IFN1YnJhaG1hbnlhIExpbmdhcHBhIDxsLnN1YnJhaG1hbnlhQG1vYml2 ZWlsLmNvLmluPg0KKyAqIFJlZmFjdG9yOiBaaGlxaWFuZyBIb3UgPFpoaXFpYW5nLkhvdUBueHAu Y29tPg0KKyAqLw0KKw0KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+DQorI2luY2x1ZGUgPGxpbnV4 L2tlcm5lbC5oPg0KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4NCisjaW5jbHVkZSA8bGludXgv b2ZfcGNpLmg+DQorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPg0KKyNpbmNsdWRlIDxsaW51eC9wbGF0 Zm9ybV9kZXZpY2UuaD4NCisjaW5jbHVkZSA8bGludXgvc2xhYi5oPg0KKw0KKyNpbmNsdWRlICJw Y2llLW1vYml2ZWlsLmgiDQorDQorc3RhdGljIGludCBtb2JpdmVpbF9wY2llX3Byb2JlKHN0cnVj dCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpDQorew0KKwlzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAqcGNp ZTsNCisJc3RydWN0IHBjaV9ob3N0X2JyaWRnZSAqYnJpZGdlOw0KKwlzdHJ1Y3QgZGV2aWNlICpk ZXYgPSAmcGRldi0+ZGV2Ow0KKw0KKwlicmlkZ2UgPSBkZXZtX3BjaV9hbGxvY19ob3N0X2JyaWRn ZShkZXYsIHNpemVvZigqcGNpZSkpOw0KKwlpZiAoIWJyaWRnZSkNCisJCXJldHVybiAtRU5PTUVN Ow0KKw0KKwlwY2llID0gcGNpX2hvc3RfYnJpZGdlX3ByaXYoYnJpZGdlKTsNCisNCisJcGNpZS0+ cGRldiA9IHBkZXY7DQorDQorCXJldHVybiBtb2JpdmVpbF9wY2llX2hvc3RfcHJvYmUocGNpZSk7 DQorfQ0KKw0KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG1vYml2ZWlsX3BjaWVf b2ZfbWF0Y2hbXSA9IHsNCisJey5jb21wYXRpYmxlID0gIm1idmwsZ3BleDQwLXBjaWUiLH0sDQor CXt9LA0KK307DQorDQorTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbW9iaXZlaWxfcGNpZV9vZl9t YXRjaCk7DQorDQorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbW9iaXZlaWxfcGNpZV9k cml2ZXIgPSB7DQorCS5wcm9iZSA9IG1vYml2ZWlsX3BjaWVfcHJvYmUsDQorCS5kcml2ZXIgPSB7 DQorCQkubmFtZSA9ICJtb2JpdmVpbC1wY2llIiwNCisJCS5vZl9tYXRjaF90YWJsZSA9IG1vYml2 ZWlsX3BjaWVfb2ZfbWF0Y2gsDQorCQkuc3VwcHJlc3NfYmluZF9hdHRycyA9IHRydWUsDQorCX0s DQorfTsNCisNCitidWlsdGluX3BsYXRmb3JtX2RyaXZlcihtb2JpdmVpbF9wY2llX2RyaXZlcik7 DQorDQorTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOw0KK01PRFVMRV9ERVNDUklQVElPTigiTW9i aXZlaWwgUENJZSBob3N0IGNvbnRyb2xsZXIgZHJpdmVyIik7DQorTU9EVUxFX0FVVEhPUigiU3Vi cmFobWFueWEgTGluZ2FwcGEgPGwuc3VicmFobWFueWFAbW9iaXZlaWwuY28uaW4+Iik7DQpkaWZm IC0tZ2l0IGEvZHJpdmVycy9wY2kvY29udHJvbGxlci9tb2JpdmVpbC9wY2llLW1vYml2ZWlsLmMg Yi9kcml2ZXJzL3BjaS9jb250cm9sbGVyL21vYml2ZWlsL3BjaWUtbW9iaXZlaWwuYw0KbmV3IGZp bGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAwMC4uMTVkNWQ4ODhlYjkzDQotLS0gL2Rl di9udWxsDQorKysgYi9kcml2ZXJzL3BjaS9jb250cm9sbGVyL21vYml2ZWlsL3BjaWUtbW9iaXZl aWwuYw0KQEAgLTAsMCArMSwyNDggQEANCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BM LTIuMA0KKy8qDQorICogUENJZSBob3N0IGNvbnRyb2xsZXIgZHJpdmVyIGZvciBNb2JpdmVpbCBQ Q0llIEhvc3QgY29udHJvbGxlcg0KKyAqDQorICogQ29weXJpZ2h0IChjKSAyMDE4IE1vYml2ZWls IEluYy4NCisgKiBDb3B5cmlnaHQgMjAxOSBOWFANCisgKg0KKyAqIEF1dGhvcjogU3VicmFobWFu eWEgTGluZ2FwcGEgPGwuc3VicmFobWFueWFAbW9iaXZlaWwuY28uaW4+DQorICogUmVmYWN0b3I6 IFpoaXFpYW5nIEhvdSA8WmhpcWlhbmcuSG91QG54cC5jb20+DQorICovDQorDQorI2luY2x1ZGUg PGxpbnV4L2RlbGF5Lmg+DQorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4NCisjaW5jbHVkZSA8bGlu dXgva2VybmVsLmg+DQorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPg0KKyNpbmNsdWRlIDxsaW51eC9w bGF0Zm9ybV9kZXZpY2UuaD4NCisNCisjaW5jbHVkZSAicGNpZS1tb2JpdmVpbC5oIg0KKw0KKy8q DQorICogbW9iaXZlaWxfcGNpZV9zZWxfcGFnZSAtIHJvdXRpbmUgdG8gYWNjZXNzIHBhZ2VkIHJl Z2lzdGVyDQorICoNCisgKiBSZWdpc3RlcnMgd2hvc2UgYWRkcmVzcyBncmVhdGVyIHRoYW4gUEFH RURfQUREUl9CTkRSWSAoMHhjMDApIGFyZSBwYWdlZCwNCisgKiBmb3IgdGhpcyBzY2hlbWUgdG8g d29yayBleHRyYWN0ZWQgaGlnaGVyIDYgYml0cyBvZiB0aGUgb2Zmc2V0IHdpbGwgYmUNCisgKiB3 cml0dGVuIHRvIHBnX3NlbCBmaWVsZCBvZiBQQUJfQ1RSTCByZWdpc3RlciBhbmQgcmVzdCBvZiB0 aGUgbG93ZXIgMTANCisgKiBiaXRzIGVuYWJsZWQgd2l0aCBQQUdFRF9BRERSX0JORFJZIGFyZSB1 c2VkIGFzIG9mZnNldCBvZiB0aGUgcmVnaXN0ZXIuDQorICovDQorc3RhdGljIHZvaWQgbW9iaXZl aWxfcGNpZV9zZWxfcGFnZShzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAqcGNpZSwgdTggcGdfaWR4KQ0K K3sNCisJdTMyIHZhbDsNCisNCisJdmFsID0gcmVhZGwocGNpZS0+Y3NyX2F4aV9zbGF2ZV9iYXNl ICsgUEFCX0NUUkwpOw0KKwl2YWwgJj0gfihQQUdFX1NFTF9NQVNLIDw8IFBBR0VfU0VMX1NISUZU KTsNCisJdmFsIHw9IChwZ19pZHggJiBQQUdFX1NFTF9NQVNLKSA8PCBQQUdFX1NFTF9TSElGVDsN CisNCisJd3JpdGVsKHZhbCwgcGNpZS0+Y3NyX2F4aV9zbGF2ZV9iYXNlICsgUEFCX0NUUkwpOw0K K30NCisNCitzdGF0aWMgdm9pZCAqbW9iaXZlaWxfcGNpZV9jb21wX2FkZHIoc3RydWN0IG1vYml2 ZWlsX3BjaWUgKnBjaWUsIHUzMiBvZmYpDQorew0KKwlpZiAob2ZmIDwgUEFHRURfQUREUl9CTkRS WSkgew0KKwkJLyogRm9yIGRpcmVjdGx5IGFjY2Vzc2VkIHJlZ2lzdGVycywgY2xlYXIgdGhlIHBn X3NlbCBmaWVsZCAqLw0KKwkJbW9iaXZlaWxfcGNpZV9zZWxfcGFnZShwY2llLCAwKTsNCisJCXJl dHVybiBwY2llLT5jc3JfYXhpX3NsYXZlX2Jhc2UgKyBvZmY7DQorCX0NCisNCisJbW9iaXZlaWxf cGNpZV9zZWxfcGFnZShwY2llLCBPRkZTRVRfVE9fUEFHRV9JRFgob2ZmKSk7DQorCXJldHVybiBw Y2llLT5jc3JfYXhpX3NsYXZlX2Jhc2UgKyBPRkZTRVRfVE9fUEFHRV9BRERSKG9mZik7DQorfQ0K Kw0KK3N0YXRpYyBpbnQgbW9iaXZlaWxfcGNpZV9yZWFkKHZvaWQgX19pb21lbSAqYWRkciwgaW50 IHNpemUsIHUzMiAqdmFsKQ0KK3sNCisJaWYgKCh1aW50cHRyX3QpYWRkciAmIChzaXplIC0gMSkp IHsNCisJCSp2YWwgPSAwOw0KKwkJcmV0dXJuIFBDSUJJT1NfQkFEX1JFR0lTVEVSX05VTUJFUjsN CisJfQ0KKw0KKwlzd2l0Y2ggKHNpemUpIHsNCisJY2FzZSA0Og0KKwkJKnZhbCA9IHJlYWRsKGFk ZHIpOw0KKwkJYnJlYWs7DQorCWNhc2UgMjoNCisJCSp2YWwgPSByZWFkdyhhZGRyKTsNCisJCWJy ZWFrOw0KKwljYXNlIDE6DQorCQkqdmFsID0gcmVhZGIoYWRkcik7DQorCQlicmVhazsNCisJZGVm YXVsdDoNCisJCSp2YWwgPSAwOw0KKwkJcmV0dXJuIFBDSUJJT1NfQkFEX1JFR0lTVEVSX05VTUJF UjsNCisJfQ0KKw0KKwlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOw0KK30NCisNCitzdGF0aWMg aW50IG1vYml2ZWlsX3BjaWVfd3JpdGUodm9pZCBfX2lvbWVtICphZGRyLCBpbnQgc2l6ZSwgdTMy IHZhbCkNCit7DQorCWlmICgodWludHB0cl90KWFkZHIgJiAoc2l6ZSAtIDEpKQ0KKwkJcmV0dXJu IFBDSUJJT1NfQkFEX1JFR0lTVEVSX05VTUJFUjsNCisNCisJc3dpdGNoIChzaXplKSB7DQorCWNh c2UgNDoNCisJCXdyaXRlbCh2YWwsIGFkZHIpOw0KKwkJYnJlYWs7DQorCWNhc2UgMjoNCisJCXdy aXRldyh2YWwsIGFkZHIpOw0KKwkJYnJlYWs7DQorCWNhc2UgMToNCisJCXdyaXRlYih2YWwsIGFk ZHIpOw0KKwkJYnJlYWs7DQorCWRlZmF1bHQ6DQorCQlyZXR1cm4gUENJQklPU19CQURfUkVHSVNU RVJfTlVNQkVSOw0KKwl9DQorDQorCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7DQorfQ0KKw0K K3UzMiBjc3JfcmVhZChzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAqcGNpZSwgdTMyIG9mZiwgc2l6ZV90 IHNpemUpDQorew0KKwl2b2lkICphZGRyOw0KKwl1MzIgdmFsOw0KKwlpbnQgcmV0Ow0KKw0KKwlh ZGRyID0gbW9iaXZlaWxfcGNpZV9jb21wX2FkZHIocGNpZSwgb2ZmKTsNCisNCisJcmV0ID0gbW9i aXZlaWxfcGNpZV9yZWFkKGFkZHIsIHNpemUsICZ2YWwpOw0KKwlpZiAocmV0KQ0KKwkJZGV2X2Vy cigmcGNpZS0+cGRldi0+ZGV2LCAicmVhZCBDU1IgYWRkcmVzcyBmYWlsZWRcbiIpOw0KKw0KKwly ZXR1cm4gdmFsOw0KK30NCisNCit2b2lkIGNzcl93cml0ZShzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAq cGNpZSwgdTMyIHZhbCwgdTMyIG9mZiwgc2l6ZV90IHNpemUpDQorew0KKwl2b2lkICphZGRyOw0K KwlpbnQgcmV0Ow0KKw0KKwlhZGRyID0gbW9iaXZlaWxfcGNpZV9jb21wX2FkZHIocGNpZSwgb2Zm KTsNCisNCisJcmV0ID0gbW9iaXZlaWxfcGNpZV93cml0ZShhZGRyLCBzaXplLCB2YWwpOw0KKwlp ZiAocmV0KQ0KKwkJZGV2X2VycigmcGNpZS0+cGRldi0+ZGV2LCAid3JpdGUgQ1NSIGFkZHJlc3Mg ZmFpbGVkXG4iKTsNCit9DQorDQorYm9vbCBtb2JpdmVpbF9wY2llX2xpbmtfdXAoc3RydWN0IG1v Yml2ZWlsX3BjaWUgKnBjaWUpDQorew0KKwlpZiAocGNpZS0+b3BzLT5saW5rX3VwKQ0KKwkJcmV0 dXJuIHBjaWUtPm9wcy0+bGlua191cChwY2llKTsNCisNCisJcmV0dXJuIChjc3JfcmVhZGwocGNp ZSwgTFRTU01fU1RBVFVTKSAmDQorCQlMVFNTTV9TVEFUVVNfTDBfTUFTSykgPT0gTFRTU01fU1RB VFVTX0wwOw0KK30NCisNCit2b2lkIHByb2dyYW1faWJfd2luZG93cyhzdHJ1Y3QgbW9iaXZlaWxf cGNpZSAqcGNpZSwgaW50IHdpbl9udW0sIHU2NCBjcHVfYWRkciwNCisJCQl1NjQgcGNpX2FkZHIs IHUzMiB0eXBlLCB1NjQgc2l6ZSkNCit7DQorCXUzMiB2YWx1ZTsNCisJdTY0IHNpemU2NCA9IH4o c2l6ZSAtIDEpOw0KKw0KKwlpZiAod2luX251bSA+PSBwY2llLT5wcGlvX3dpbnMpIHsNCisJCWRl dl9lcnIoJnBjaWUtPnBkZXYtPmRldiwNCisJCQkiRVJST1I6IG1heCBpbmJvdW5kIHdpbmRvd3Mg cmVhY2hlZCAhXG4iKTsNCisJCXJldHVybjsNCisJfQ0KKw0KKwl2YWx1ZSA9IGNzcl9yZWFkbChw Y2llLCBQQUJfUEVYX0FNQVBfQ1RSTCh3aW5fbnVtKSk7DQorCXZhbHVlICY9IH4oQU1BUF9DVFJM X1RZUEVfTUFTSyA8PCBBTUFQX0NUUkxfVFlQRV9TSElGVCB8DQorCQkgV0lOX1NJWkVfTUFTSyA8 PCBXSU5fU0laRV9TSElGVCk7DQorCXZhbHVlIHw9ICh0eXBlIDw8IEFNQVBfQ1RSTF9UWVBFX1NI SUZUKSB8ICgxIDw8IEFNQVBfQ1RSTF9FTl9TSElGVCkgfA0KKwkJIChsb3dlcl8zMl9iaXRzKHNp emU2NCkgJiBXSU5fU0laRV9NQVNLIDw8IFdJTl9TSVpFX1NISUZUKTsNCisJY3NyX3dyaXRlbChw Y2llLCB2YWx1ZSwgUEFCX1BFWF9BTUFQX0NUUkwod2luX251bSkpOw0KKw0KKwljc3Jfd3JpdGVs KHBjaWUsIHVwcGVyXzMyX2JpdHMoc2l6ZTY0KSwNCisJCSAgIFBBQl9FWFRfUEVYX0FNQVBfU0la RU4od2luX251bSkpOw0KKw0KKwljc3Jfd3JpdGVsKHBjaWUsIGxvd2VyXzMyX2JpdHMoY3B1X2Fk ZHIpLA0KKwkJICAgUEFCX1BFWF9BTUFQX0FYSV9XSU4od2luX251bSkpOw0KKwljc3Jfd3JpdGVs KHBjaWUsIHVwcGVyXzMyX2JpdHMoY3B1X2FkZHIpLA0KKwkJICAgUEFCX0VYVF9QRVhfQU1BUF9B WElfV0lOKHdpbl9udW0pKTsNCisNCisJY3NyX3dyaXRlbChwY2llLCBsb3dlcl8zMl9iaXRzKHBj aV9hZGRyKSwNCisJCSAgIFBBQl9QRVhfQU1BUF9QRVhfV0lOX0wod2luX251bSkpOw0KKwljc3Jf d3JpdGVsKHBjaWUsIHVwcGVyXzMyX2JpdHMocGNpX2FkZHIpLA0KKwkJICAgUEFCX1BFWF9BTUFQ X1BFWF9XSU5fSCh3aW5fbnVtKSk7DQorDQorCXBjaWUtPmliX3dpbnNfY29uZmlndXJlZCsrOw0K K30NCisNCisvKg0KKyAqIHJvdXRpbmUgdG8gcHJvZ3JhbSB0aGUgb3V0Ym91bmQgd2luZG93cw0K KyAqLw0KK3ZvaWQgcHJvZ3JhbV9vYl93aW5kb3dzKHN0cnVjdCBtb2JpdmVpbF9wY2llICpwY2ll LCBpbnQgd2luX251bSwgdTY0IGNwdV9hZGRyLA0KKwkJCXU2NCBwY2lfYWRkciwgdTMyIHR5cGUs IHU2NCBzaXplKQ0KK3sNCisNCisJdTMyIHZhbHVlOw0KKwl1NjQgc2l6ZTY0ID0gfihzaXplIC0g MSk7DQorDQorCWlmICh3aW5fbnVtID49IHBjaWUtPmFwaW9fd2lucykgew0KKwkJZGV2X2Vycigm cGNpZS0+cGRldi0+ZGV2LA0KKwkJCSJFUlJPUjogbWF4IG91dGJvdW5kIHdpbmRvd3MgcmVhY2hl ZCAhXG4iKTsNCisJCXJldHVybjsNCisJfQ0KKw0KKwkvKg0KKwkgKiBwcm9ncmFtIEVuYWJsZSBC aXQgdG8gMSwgVHlwZSBCaXQgdG8gKDAwKSBiYXNlIDIsIEFYSSBXaW5kb3cgU2l6ZSBCaXQNCisJ ICogdG8gNCBLQiBpbiBQQUJfQVhJX0FNQVBfQ1RSTCByZWdpc3Rlcg0KKwkgKi8NCisJdmFsdWUg PSBjc3JfcmVhZGwocGNpZSwgUEFCX0FYSV9BTUFQX0NUUkwod2luX251bSkpOw0KKwl2YWx1ZSAm PSB+KFdJTl9UWVBFX01BU0sgPDwgV0lOX1RZUEVfU0hJRlQgfA0KKwkJIFdJTl9TSVpFX01BU0sg PDwgV0lOX1NJWkVfU0hJRlQpOw0KKwl2YWx1ZSB8PSAxIDw8IFdJTl9FTkFCTEVfU0hJRlQgfCB0 eXBlIDw8IFdJTl9UWVBFX1NISUZUIHwNCisJCSAobG93ZXJfMzJfYml0cyhzaXplNjQpICYgV0lO X1NJWkVfTUFTSyA8PCBXSU5fU0laRV9TSElGVCk7DQorCWNzcl93cml0ZWwocGNpZSwgdmFsdWUs IFBBQl9BWElfQU1BUF9DVFJMKHdpbl9udW0pKTsNCisNCisJY3NyX3dyaXRlbChwY2llLCB1cHBl cl8zMl9iaXRzKHNpemU2NCksIFBBQl9FWFRfQVhJX0FNQVBfU0laRSh3aW5fbnVtKSk7DQorDQor CS8qDQorCSAqIHByb2dyYW0gQVhJIHdpbmRvdyBiYXNlIHdpdGggYXBwcm9wcmlhdGUgdmFsdWUg aW4NCisJICogUEFCX0FYSV9BTUFQX0FYSV9XSU4wIHJlZ2lzdGVyDQorCSAqLw0KKwljc3Jfd3Jp dGVsKHBjaWUsIGxvd2VyXzMyX2JpdHMoY3B1X2FkZHIpICYgKH5BWElfV0lORE9XX0FMSUdOX01B U0spLA0KKwkJICAgUEFCX0FYSV9BTUFQX0FYSV9XSU4od2luX251bSkpOw0KKwljc3Jfd3JpdGVs KHBjaWUsIHVwcGVyXzMyX2JpdHMoY3B1X2FkZHIpLA0KKwkJICAgUEFCX0VYVF9BWElfQU1BUF9B WElfV0lOKHdpbl9udW0pKTsNCisNCisJY3NyX3dyaXRlbChwY2llLCBsb3dlcl8zMl9iaXRzKHBj aV9hZGRyKSwNCisJCSAgIFBBQl9BWElfQU1BUF9QRVhfV0lOX0wod2luX251bSkpOw0KKwljc3Jf d3JpdGVsKHBjaWUsIHVwcGVyXzMyX2JpdHMocGNpX2FkZHIpLA0KKwkJICAgUEFCX0FYSV9BTUFQ X1BFWF9XSU5fSCh3aW5fbnVtKSk7DQorDQorCXBjaWUtPm9iX3dpbnNfY29uZmlndXJlZCsrOw0K K30NCisNCitpbnQgbW9iaXZlaWxfYnJpbmd1cF9saW5rKHN0cnVjdCBtb2JpdmVpbF9wY2llICpw Y2llKQ0KK3sNCisJaW50IHJldHJpZXM7DQorDQorCS8qIGNoZWNrIGlmIHRoZSBsaW5rIGlzIHVw IG9yIG5vdCAqLw0KKwlmb3IgKHJldHJpZXMgPSAwOyByZXRyaWVzIDwgTElOS19XQUlUX01BWF9S RVRSSUVTOyByZXRyaWVzKyspIHsNCisJCWlmIChtb2JpdmVpbF9wY2llX2xpbmtfdXAocGNpZSkp DQorCQkJcmV0dXJuIDA7DQorDQorCQl1c2xlZXBfcmFuZ2UoTElOS19XQUlUX01JTiwgTElOS19X QUlUX01BWCk7DQorCX0NCisNCisJZGV2X2luZm8oJnBjaWUtPnBkZXYtPmRldiwgImxpbmsgbmV2 ZXIgY2FtZSB1cFxuIik7DQorDQorCXJldHVybiAtRVRJTUVET1VUOw0KK30NCisNCit2b2lkIG1v Yml2ZWlsX3BjaWVfZGlzYWJsZV9pYl93aW4oc3RydWN0IG1vYml2ZWlsX3BjaWUgKnBjaWUsIGlu dCBpZHgpDQorew0KKwl1MzIgdmFsOw0KKw0KKwl2YWwgPSBjc3JfcmVhZGwocGNpZSwgUEFCX1BF WF9BTUFQX0NUUkwoaWR4KSk7DQorCXZhbCAmPSB+KDEgPDwgQU1BUF9DVFJMX0VOX1NISUZUKTsN CisJY3NyX3dyaXRlbChwY2llLCB2YWwsIFBBQl9QRVhfQU1BUF9DVFJMKGlkeCkpOw0KK30NCisN Cit2b2lkIG1vYml2ZWlsX3BjaWVfZGlzYWJsZV9vYl93aW4oc3RydWN0IG1vYml2ZWlsX3BjaWUg KnBjaWUsIGludCBpZHgpDQorew0KKwl1MzIgdmFsOw0KKw0KKwl2YWwgPSBjc3JfcmVhZGwocGNp ZSwgUEFCX0FYSV9BTUFQX0NUUkwoaWR4KSk7DQorCXZhbCAmPSB+KDEgPDwgV0lOX0VOQUJMRV9T SElGVCk7DQorCWNzcl93cml0ZWwocGNpZSwgdmFsLCBQQUJfQVhJX0FNQVBfQ1RSTChpZHgpKTsN Cit9DQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvY29udHJvbGxlci9tb2JpdmVpbC9wY2llLW1v Yml2ZWlsLmggYi9kcml2ZXJzL3BjaS9jb250cm9sbGVyL21vYml2ZWlsL3BjaWUtbW9iaXZlaWwu aA0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAwMC4uZGRhNDBiMzFhM2I2 DQotLS0gL2Rldi9udWxsDQorKysgYi9kcml2ZXJzL3BjaS9jb250cm9sbGVyL21vYml2ZWlsL3Bj aWUtbW9iaXZlaWwuaA0KQEAgLTAsMCArMSwxOTIgQEANCisvKiBTUERYLUxpY2Vuc2UtSWRlbnRp ZmllcjogR1BMLTIuMCAqLw0KKy8qDQorICogUENJZSBob3N0IGNvbnRyb2xsZXIgZHJpdmVyIGZv ciBNb2JpdmVpbCBQQ0llIEhvc3QgY29udHJvbGxlcg0KKyAqDQorICogQ29weXJpZ2h0IChjKSAy MDE4IE1vYml2ZWlsIEluYy4NCisgKiBDb3B5cmlnaHQgMjAxOSBOWFANCisgKg0KKyAqIEF1dGhv cjogU3VicmFobWFueWEgTGluZ2FwcGEgPGwuc3VicmFobWFueWFAbW9iaXZlaWwuY28uaW4+DQor ICogUmVmYWN0b3I6IFpoaXFpYW5nIEhvdSA8WmhpcWlhbmcuSG91QG54cC5jb20+DQorICovDQor DQorI2lmbmRlZiBfUENJRV9NT0JJVkVJTF9IDQorI2RlZmluZSBfUENJRV9NT0JJVkVJTF9IDQor DQorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPg0KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4NCisjaW5j bHVkZSA8bGludXgvbXNpLmg+DQorI2luY2x1ZGUgIi4uLy4uL3BjaS5oIg0KKw0KKy8qIHJlZ2lz dGVyIG9mZnNldHMgYW5kIGJpdCBwb3NpdGlvbnMgKi8NCisNCisvKg0KKyAqIHRyYW5zbGF0aW9u IHRhYmxlcyBhcmUgZ3JvdXBlZCBpbnRvIHdpbmRvd3MsIGVhY2ggd2luZG93IHJlZ2lzdGVycyBh cmUNCisgKiBncm91cGVkIGludG8gYmxvY2tzIG9mIDQgb3IgMTYgcmVnaXN0ZXJzIGVhY2gNCisg Ki8NCisjZGVmaW5lIFBBQl9SRUdfQkxPQ0tfU0laRQkJMTYNCisjZGVmaW5lIFBBQl9FWFRfUkVH X0JMT0NLX1NJWkUJCTQNCisNCisjZGVmaW5lIFBBQl9SRUdfQUREUihvZmZzZXQsIHdpbikJXA0K Kwkob2Zmc2V0ICsgKHdpbiAqIFBBQl9SRUdfQkxPQ0tfU0laRSkpDQorI2RlZmluZSBQQUJfRVhU X1JFR19BRERSKG9mZnNldCwgd2luKQlcDQorCShvZmZzZXQgKyAod2luICogUEFCX0VYVF9SRUdf QkxPQ0tfU0laRSkpDQorDQorI2RlZmluZSBMVFNTTV9TVEFUVVMJCQkweDA0MDQNCisjZGVmaW5l ICBMVFNTTV9TVEFUVVNfTDBfTUFTSwkJMHgzZg0KKyNkZWZpbmUgIExUU1NNX1NUQVRVU19MMAkJ MHgyZA0KKw0KKyNkZWZpbmUgUEFCX0NUUkwJCQkweDA4MDgNCisjZGVmaW5lICBBTUJBX1BJT19F TkFCTEVfU0hJRlQJCTANCisjZGVmaW5lICBQRVhfUElPX0VOQUJMRV9TSElGVAkJMQ0KKyNkZWZp bmUgIFBBR0VfU0VMX1NISUZUCQkJMTMNCisjZGVmaW5lICBQQUdFX1NFTF9NQVNLCQkJMHgzZg0K KyNkZWZpbmUgIFBBR0VfTE9fTUFTSwkJCTB4M2ZmDQorI2RlZmluZSAgUEFHRV9TRUxfT0ZGU0VU X1NISUZUCQkxMA0KKw0KKyNkZWZpbmUgUEFCX0FYSV9QSU9fQ1RSTAkJMHgwODQwDQorI2RlZmlu ZSAgQVBJT19FTl9NQVNLCQkJMHhmDQorDQorI2RlZmluZSBQQUJfUEVYX1BJT19DVFJMCQkweDA4 YzANCisjZGVmaW5lICBQSU9fRU5BQkxFX1NISUZUCQkwDQorDQorI2RlZmluZSBQQUJfSU5UUF9B TUJBX01JU0NfRU5CCQkweDBiMGMNCisjZGVmaW5lIFBBQl9JTlRQX0FNQkFfTUlTQ19TVEFUCQkw eDBiMWMNCisjZGVmaW5lICBQQUJfSU5UUF9JTlRYX01BU0sJCTB4MDFlMA0KKyNkZWZpbmUgIFBB Ql9JTlRQX01TSV9NQVNLCQkweDgNCisNCisjZGVmaW5lIFBBQl9BWElfQU1BUF9DVFJMKHdpbikJ CVBBQl9SRUdfQUREUigweDBiYTAsIHdpbikNCisjZGVmaW5lICBXSU5fRU5BQkxFX1NISUZUCQkw DQorI2RlZmluZSAgV0lOX1RZUEVfU0hJRlQJCQkxDQorI2RlZmluZSAgV0lOX1RZUEVfTUFTSwkJ CTB4Mw0KKyNkZWZpbmUgIFdJTl9TSVpFX1NISUZUCQkJMTANCisjZGVmaW5lICBXSU5fU0laRV9N QVNLCQkJMHgzZmZmZmYNCisNCisjZGVmaW5lIFBBQl9FWFRfQVhJX0FNQVBfU0laRSh3aW4pCVBB Ql9FWFRfUkVHX0FERFIoMHhiYWYwLCB3aW4pDQorDQorI2RlZmluZSBQQUJfRVhUX0FYSV9BTUFQ X0FYSV9XSU4od2luKQlQQUJfRVhUX1JFR19BRERSKDB4ODBhMCwgd2luKQ0KKyNkZWZpbmUgUEFC X0FYSV9BTUFQX0FYSV9XSU4od2luKQlQQUJfUkVHX0FERFIoMHgwYmE0LCB3aW4pDQorI2RlZmlu ZSAgQVhJX1dJTkRPV19BTElHTl9NQVNLCQkzDQorDQorI2RlZmluZSBQQUJfQVhJX0FNQVBfUEVY X1dJTl9MKHdpbikJUEFCX1JFR19BRERSKDB4MGJhOCwgd2luKQ0KKyNkZWZpbmUgIFBBQl9CVVNf U0hJRlQJCQkyNA0KKyNkZWZpbmUgIFBBQl9ERVZJQ0VfU0hJRlQJCTE5DQorI2RlZmluZSAgUEFC X0ZVTkNUSU9OX1NISUZUCQkxNg0KKw0KKyNkZWZpbmUgUEFCX0FYSV9BTUFQX1BFWF9XSU5fSCh3 aW4pCVBBQl9SRUdfQUREUigweDBiYWMsIHdpbikNCisjZGVmaW5lIFBBQl9JTlRQX0FYSV9QSU9f Q0xBU1MJCTB4NDc0DQorDQorI2RlZmluZSBQQUJfUEVYX0FNQVBfQ1RSTCh3aW4pCQlQQUJfUkVH X0FERFIoMHg0YmEwLCB3aW4pDQorI2RlZmluZSAgQU1BUF9DVFJMX0VOX1NISUZUCQkwDQorI2Rl ZmluZSAgQU1BUF9DVFJMX1RZUEVfU0hJRlQJCTENCisjZGVmaW5lICBBTUFQX0NUUkxfVFlQRV9N QVNLCQkzDQorDQorI2RlZmluZSBQQUJfRVhUX1BFWF9BTUFQX1NJWkVOKHdpbikJUEFCX0VYVF9S RUdfQUREUigweGJlZjAsIHdpbikNCisjZGVmaW5lIFBBQl9FWFRfUEVYX0FNQVBfQVhJX1dJTih3 aW4pCVBBQl9FWFRfUkVHX0FERFIoMHhiNGEwLCB3aW4pDQorI2RlZmluZSBQQUJfUEVYX0FNQVBf QVhJX1dJTih3aW4pCVBBQl9SRUdfQUREUigweDRiYTQsIHdpbikNCisjZGVmaW5lIFBBQl9QRVhf QU1BUF9QRVhfV0lOX0wod2luKQlQQUJfUkVHX0FERFIoMHg0YmE4LCB3aW4pDQorI2RlZmluZSBQ QUJfUEVYX0FNQVBfUEVYX1dJTl9IKHdpbikJUEFCX1JFR19BRERSKDB4NGJhYywgd2luKQ0KKw0K Ky8qIHN0YXJ0aW5nIG9mZnNldCBvZiBJTlRYIGJpdHMgaW4gc3RhdHVzIHJlZ2lzdGVyICovDQor I2RlZmluZSBQQUJfSU5UWF9TVEFSVAkJCTUNCisNCisvKiBzdXBwb3J0ZWQgbnVtYmVyIG9mIE1T SSBpbnRlcnJ1cHRzICovDQorI2RlZmluZSBQQ0lfTlVNX01TSQkJCTE2DQorDQorLyogTVNJIHJl Z2lzdGVycyAqLw0KKyNkZWZpbmUgTVNJX0JBU0VfTE9fT0ZGU0VUCQkweDA0DQorI2RlZmluZSBN U0lfQkFTRV9ISV9PRkZTRVQJCTB4MDgNCisjZGVmaW5lIE1TSV9TSVpFX09GRlNFVAkJCTB4MGMN CisjZGVmaW5lIE1TSV9FTkFCTEVfT0ZGU0VUCQkweDE0DQorI2RlZmluZSBNU0lfU1RBVFVTX09G RlNFVAkJMHgxOA0KKyNkZWZpbmUgTVNJX0RBVEFfT0ZGU0VUCQkJMHgyMA0KKyNkZWZpbmUgTVNJ X0FERFJfTF9PRkZTRVQJCTB4MjQNCisjZGVmaW5lIE1TSV9BRERSX0hfT0ZGU0VUCQkweDI4DQor DQorLyogb3V0Ym91bmQgYW5kIGluYm91bmQgd2luZG93IGRlZmluaXRpb25zICovDQorI2RlZmlu ZSBXSU5fTlVNXzAJCQkwDQorI2RlZmluZSBXSU5fTlVNXzEJCQkxDQorI2RlZmluZSBDRkdfV0lO RE9XX1RZUEUJCQkwDQorI2RlZmluZSBJT19XSU5ET1dfVFlQRQkJCTENCisjZGVmaW5lIE1FTV9X SU5ET1dfVFlQRQkJCTINCisjZGVmaW5lIElCX1dJTl9TSVpFCQkJKCh1NjQpMjU2ICogMTAyNCAq IDEwMjQgKiAxMDI0KQ0KKyNkZWZpbmUgTUFYX1BJT19XSU5ET1dTCQkJOA0KKw0KKy8qIFBhcmFt ZXRlcnMgZm9yIHRoZSB3YWl0aW5nIGZvciBsaW5rIHVwIHJvdXRpbmUgKi8NCisjZGVmaW5lIExJ TktfV0FJVF9NQVhfUkVUUklFUwkJMTANCisjZGVmaW5lIExJTktfV0FJVF9NSU4JCQk5MDAwMA0K KyNkZWZpbmUgTElOS19XQUlUX01BWAkJCTEwMDAwMA0KKw0KKyNkZWZpbmUgUEFHRURfQUREUl9C TkRSWQkJMHhjMDANCisjZGVmaW5lIE9GRlNFVF9UT19QQUdFX0FERFIob2ZmKQlcDQorCSgob2Zm ICYgUEFHRV9MT19NQVNLKSB8IFBBR0VEX0FERFJfQk5EUlkpDQorI2RlZmluZSBPRkZTRVRfVE9f UEFHRV9JRFgob2ZmKQkJXA0KKwkoKG9mZiA+PiBQQUdFX1NFTF9PRkZTRVRfU0hJRlQpICYgUEFH RV9TRUxfTUFTSykNCisNCitzdHJ1Y3QgbW9iaXZlaWxfcGNpZTsNCisNCitzdHJ1Y3QgbW9iaXZl aWxfbXNpIHsJCQkvKiBNU0kgaW5mb3JtYXRpb24gKi8NCisJc3RydWN0IG11dGV4IGxvY2s7CQkv KiBwcm90ZWN0IGJpdG1hcCB2YXJpYWJsZSAqLw0KKwlzdHJ1Y3QgaXJxX2RvbWFpbiAqbXNpX2Rv bWFpbjsNCisJc3RydWN0IGlycV9kb21haW4gKmRldl9kb21haW47DQorCXBoeXNfYWRkcl90IG1z aV9wYWdlc19waHlzOw0KKwlpbnQgbnVtX29mX3ZlY3RvcnM7DQorCURFQ0xBUkVfQklUTUFQKG1z aV9pcnFfaW5fdXNlLCBQQ0lfTlVNX01TSSk7DQorfTsNCisNCitzdHJ1Y3QgbW9iaXZlaWxfcnBf b3BzIHsNCisJaW50ICgqaW50ZXJydXB0X2luaXQpKHN0cnVjdCBtb2JpdmVpbF9wY2llICpwY2ll KTsNCit9Ow0KKw0KK3N0cnVjdCByb290X3BvcnQgew0KKwl1OCByb290X2J1c19ucjsNCisJdm9p ZCBfX2lvbWVtICpjb25maWdfYXhpX3NsYXZlX2Jhc2U7CS8qIGVuZHBvaW50IGNvbmZpZyBiYXNl ICovDQorCXN0cnVjdCByZXNvdXJjZSAqb2JfaW9fcmVzOw0KKwlzdHJ1Y3QgbW9iaXZlaWxfcnBf b3BzICpvcHM7DQorCWludCBpcnE7DQorCXJhd19zcGlubG9ja190IGludHhfbWFza19sb2NrOw0K KwlzdHJ1Y3QgaXJxX2RvbWFpbiAqaW50eF9kb21haW47DQorCXN0cnVjdCBtb2JpdmVpbF9tc2kg bXNpOw0KK307DQorDQorc3RydWN0IG1vYml2ZWlsX3BhYl9vcHMgew0KKwlpbnQgKCpsaW5rX3Vw KShzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAqcGNpZSk7DQorfTsNCisNCitzdHJ1Y3QgbW9iaXZlaWxf cGNpZSB7DQorCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7DQorCXN0cnVjdCBsaXN0X2hl YWQgcmVzb3VyY2VzOw0KKwl2b2lkIF9faW9tZW0gKmNzcl9heGlfc2xhdmVfYmFzZTsJLyogUEFC IHJlZ2lzdGVycyBiYXNlICovDQorCXBoeXNfYWRkcl90IHBjaWVfcmVnX2Jhc2U7CS8qIFBoeXNp Y2FsIFBDSWUgQ29udHJvbGxlciBCYXNlICovDQorCXZvaWQgX19pb21lbSAqYXBiX2Nzcl9iYXNl OwkvKiBNU0kgcmVnaXN0ZXIgYmFzZSAqLw0KKwl1MzIgYXBpb193aW5zOw0KKwl1MzIgcHBpb193 aW5zOw0KKwl1MzIgb2Jfd2luc19jb25maWd1cmVkOwkJLyogY29uZmlndXJlZCBvdXRib3VuZCB3 aW5kb3dzICovDQorCXUzMiBpYl93aW5zX2NvbmZpZ3VyZWQ7CQkvKiBjb25maWd1cmVkIGluYm91 bmQgd2luZG93cyAqLw0KKwljb25zdCBzdHJ1Y3QgbW9iaXZlaWxfcGFiX29wcyAqb3BzOw0KKwlz dHJ1Y3Qgcm9vdF9wb3J0IHJwOw0KKwlzdHJ1Y3QgcGNpX2hvc3RfYnJpZGdlICpicmlkZ2U7DQor fTsNCisNCitpbnQgbW9iaXZlaWxfcGNpZV9ob3N0X3Byb2JlKHN0cnVjdCBtb2JpdmVpbF9wY2ll ICpwY2llKTsNCitib29sIG1vYml2ZWlsX3BjaWVfbGlua191cChzdHJ1Y3QgbW9iaXZlaWxfcGNp ZSAqcGNpZSk7DQoraW50IG1vYml2ZWlsX2JyaW5ndXBfbGluayhzdHJ1Y3QgbW9iaXZlaWxfcGNp ZSAqcGNpZSk7DQordm9pZCBwcm9ncmFtX29iX3dpbmRvd3Moc3RydWN0IG1vYml2ZWlsX3BjaWUg KnBjaWUsIGludCB3aW5fbnVtLCB1NjQgY3B1X2FkZHIsDQorCQkJdTY0IHBjaV9hZGRyLCB1MzIg dHlwZSwgdTY0IHNpemUpOw0KK3ZvaWQgcHJvZ3JhbV9pYl93aW5kb3dzKHN0cnVjdCBtb2JpdmVp bF9wY2llICpwY2llLCBpbnQgd2luX251bSwgdTY0IGNwdV9hZGRyLA0KKwkJCXU2NCBwY2lfYWRk ciwgdTMyIHR5cGUsIHU2NCBzaXplKTsNCit2b2lkIG1vYml2ZWlsX3BjaWVfZGlzYWJsZV9vYl93 aW4oc3RydWN0IG1vYml2ZWlsX3BjaWUgKnBjaWUsIGludCBpZHgpOw0KK3ZvaWQgbW9iaXZlaWxf cGNpZV9kaXNhYmxlX2liX3dpbihzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAqcGNpZSwgaW50IGlkeCk7 DQordTMyIGNzcl9yZWFkKHN0cnVjdCBtb2JpdmVpbF9wY2llICpwY2llLCB1MzIgb2ZmLCBzaXpl X3Qgc2l6ZSk7DQordm9pZCBjc3Jfd3JpdGUoc3RydWN0IG1vYml2ZWlsX3BjaWUgKnBjaWUsIHUz MiB2YWwsIHUzMiBvZmYsIHNpemVfdCBzaXplKTsNCisNCitzdGF0aWMgaW5saW5lIHUzMiBjc3Jf cmVhZGwoc3RydWN0IG1vYml2ZWlsX3BjaWUgKnBjaWUsIHUzMiBvZmYpDQorew0KKwlyZXR1cm4g Y3NyX3JlYWQocGNpZSwgb2ZmLCAweDQpOw0KK30NCisNCitzdGF0aWMgaW5saW5lIHZvaWQgY3Ny X3dyaXRlbChzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAqcGNpZSwgdTMyIHZhbCwgdTMyIG9mZikNCit7 DQorCWNzcl93cml0ZShwY2llLCB2YWwsIG9mZiwgMHg0KTsNCit9DQorDQorI2VuZGlmIC8qIF9Q Q0lFX01PQklWRUlMX0ggKi8NCi0tIA0KMi4xNy4xDQoNCg==