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=-6.8 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=unavailable 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 E4F40C3A5A6 for ; Thu, 19 Sep 2019 13:53:05 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 912B221D7C for ; Thu, 19 Sep 2019 13:53:05 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=silabs.onmicrosoft.com header.i=@silabs.onmicrosoft.com header.b="N7bxVIus" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2403884AbfISNw5 (ORCPT ); Thu, 19 Sep 2019 09:52:57 -0400 Received: from mail-eopbgr700060.outbound.protection.outlook.com ([40.107.70.60]:34912 "EHLO NAM04-SN1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S2403830AbfISNwy (ORCPT ); Thu, 19 Sep 2019 09:52:54 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=kZ0FBmLkZMiB0SsrWRwvsIkrWAsnNTK2SN1ZcTx0t4YpmPQ5YUan2wMnYBAzbVDx1ktWiE6sgGrxyQfr/W7I8DVARym/oR+HqdMrPBH1RG4C4cPV9Vh/nS3lUKnfGcGAni5rgEF0tdwybs78bDc/E/CB/hz9jTbnHVgHT6mHgkFir3XFoHL2MAo4WGqbeWm/uDg3qcf8P4kW+NcWTMnYzIVUnoJSyHITEvhf2/iQfSl+CZ2ZHVV5kHcJRtQ0Gw61WeFBsvI+bzB4ATXViZnsw3YA+ePVUpmgKoK/Tb8DQqM2tld+ug2GSeRgVFd+/M/YhMkefXfyaZIkCsAF3gg4kw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=CzoZ5k7N/+LisgVTr7Lm0Z3fJy9EYjq5nT3dwY3nDnc=; b=c8tdhlN7My8Bftc1oMmu3gaUBMhhZsYMx3nqim1H1MSFbi0AxCM6AZAcLFe7/T9SA1L7RwaYdocT0KgpSGpi91tGdtWA++G9HK1Bad7/iUpqagzfL6ZYYLh7sF2NQh0tpfMSbYerMW3gChJIdKeWg4xZZtfo2UKk6OF693ashxCd3H6MheqrcrDMWdDwynsqJ5ioBCLkb5xa3uaosoP81tSE1jviK8ZKdI/hCN6bN21uZ9wfAO/wM4lq0D6/naHeNso6zMA0KIWFkn0Yu8GWqA7TFr7vESQAr3zZd/+TX2wCOkXuVJBi0anezeeHiF5Vcqaik4utEXF2IvA6VSPLVA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=silabs.com; dmarc=pass action=none header.from=silabs.com; dkim=pass header.d=silabs.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=silabs.onmicrosoft.com; s=selector2-silabs-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=CzoZ5k7N/+LisgVTr7Lm0Z3fJy9EYjq5nT3dwY3nDnc=; b=N7bxVIusHRSMamqBK12GUsLIlvMVAYbPIrQ66GyazrkkXAnlhgYQMX6MbRA7MdNMKKQ9EGlcHHG6h0DGqaN85O98V3QYV6/jhvnCDG2tdG48B+UsgddUlgbWpi/2tpJtWLQ4a5ixLt4r1z0pH/8BYnKtiaaarYAN2QONDHEhvXE= Received: from MN2PR11MB4063.namprd11.prod.outlook.com (20.179.149.217) by MN2PR11MB4400.namprd11.prod.outlook.com (52.135.37.204) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.20; Thu, 19 Sep 2019 13:52:40 +0000 Received: from MN2PR11MB4063.namprd11.prod.outlook.com ([fe80::45dc:e073:4446:4bf8]) by MN2PR11MB4063.namprd11.prod.outlook.com ([fe80::45dc:e073:4446:4bf8%3]) with mapi id 15.20.2263.023; Thu, 19 Sep 2019 13:52:40 +0000 From: Jerome Pouiller To: "devel@driverdev.osuosl.org" , "linux-wireless@vger.kernel.org" CC: "netdev@vger.kernel.org" , "linux-kernel@vger.kernel.org" , Greg Kroah-Hartman , Kalle Valo , "David S . Miller" , David Le Goff , Jerome Pouiller Subject: [PATCH v2 16/20] staging: wfx: allow to send 802.11 frames Thread-Topic: [PATCH v2 16/20] staging: wfx: allow to send 802.11 frames Thread-Index: AQHVbvGAkN/tZL2Dy069YlDyTqsdJQ== Date: Thu, 19 Sep 2019 13:52:39 +0000 Message-ID: <20190919135220.30663-17-Jerome.Pouiller@silabs.com> References: <20190919135220.30663-1-Jerome.Pouiller@silabs.com> In-Reply-To: <20190919135220.30663-1-Jerome.Pouiller@silabs.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=Jerome.Pouiller@silabs.com; x-originating-ip: [37.71.187.125] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: c4e09908-3cb3-4d4b-0ae0-08d73d08a34b x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(5600167)(711020)(4605104)(1401327)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7193020);SRVR:MN2PR11MB4400; x-ms-traffictypediagnostic: MN2PR11MB4400: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:5236; x-forefront-prvs: 016572D96D x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(1496009)(376002)(39850400004)(136003)(366004)(396003)(346002)(189003)(199004)(3846002)(76176011)(8676002)(76116006)(476003)(25786009)(2616005)(6116002)(54906003)(71190400001)(6436002)(102836004)(6486002)(36756003)(186003)(71200400001)(26005)(305945005)(6512007)(99286004)(6506007)(91956017)(7736002)(446003)(8936002)(256004)(81156014)(14444005)(2906002)(66066001)(30864003)(107886003)(4326008)(86362001)(14454004)(478600001)(64756008)(81166006)(2501003)(486006)(66574012)(316002)(66946007)(66446008)(66556008)(5660300002)(11346002)(66476007)(1076003)(110136005)(579004)(569006);DIR:OUT;SFP:1101;SCL:1;SRVR:MN2PR11MB4400;H:MN2PR11MB4063.namprd11.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;MX:1;A:1; received-spf: None (protection.outlook.com: silabs.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: 4mRGPtdHEy1tOqynAEKobllDw3Rq2xIch8VSwI+EdxHe4va/o9nTaEE/7zt4mE2jfWqk1diCZ4HdbGC/l0Kgt2TR1VHU1oV1WQJHD/Ncf51z9N9OpXG/JG/WChEEk1J0mF3LI99rGT7sL4MiiEBDJ9wjqmbXN8C9qQUTj6MGQVPLvr5mTQP+4RYMhVM4FaFjXwCyM3+ojWqPuSHFE1H/uOmcl27E5T/kDQvSgPlgTxpcsEKP+7sThtgFbTxF4+q7OOuBIDb19Jw+JxgCqsEKXSihNvw01sMlJ6INVLc/jFNH+BgmbJ1g5T/DJsPip+8t9lUioIINClGpTHe6caNdblGwzWNImfudQQhFvFLnmRPwzcVQJ4cebubgeQSJ3yVRQHHQMneGXssJf4VCb5vX+9a5Frn0mtpAQNY3Ykw5WaY= Content-Type: text/plain; charset="utf-8" Content-ID: <0E312BE34DBC50469C4C37E72E5DD916@namprd11.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: c4e09908-3cb3-4d4b-0ae0-08d73d08a34b X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Sep 2019 13:52:39.4857 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 54dbd822-5231-4b20-944d-6f4abcd541fb X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: Ve1qgif1Q3lJ1bpkdcHsGCOGHH36FLWqlzVVnT9J+SbBnvoqdPNJ1CZ08ZFH6Q5hEe0UCQdYCR4FRGlojjrPUw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR11MB4400 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org RnJvbTogSsOpcsO0bWUgUG91aWxsZXIgPGplcm9tZS5wb3VpbGxlckBzaWxhYnMuY29tPg0KDQpU aHJlZSB0aGluZ3MgbWFrZSB0aGlzIHRhc2sgbW9yZSBjb21wbGV4IHRoYW4gaXQgc2hvdWxkOg0K ICAtIENoaXAgbmVjZXNzaXRhdGUgdG8gYXNzb2NpYXRlIGEgbGluay1pZCB0byBlYWNoIHN0YXRp b24uIEl0IGlzIHNhbWUNCiAgICB0aGluZyB0aGFuIGFzc29jaWF0aW9uIElEIGJ1dCwgdXNpbmcg OCBiaXRzIG9ubHkuDQogIC0gUmF0ZSBwb2xpY3kgaXMgc2VudCBzZXBhcmF0ZWx5IGZyb20gVHgg ZnJhbWVzDQogIC0gRHJpdmVyIHRyeSB0byBoYW5kbGUgaXRzZWxmIHBvd2VyIHNhdmluZyBvZiBz dGF0aW9ucyBhbmQgbXVsdGljYXN0DQogICAgZGF0YQ0KDQpTaWduZWQtb2ZmLWJ5OiBKw6lyw7Rt ZSBQb3VpbGxlciA8amVyb21lLnBvdWlsbGVyQHNpbGFicy5jb20+DQotLS0NCiBkcml2ZXJzL3N0 YWdpbmcvd2Z4L01ha2VmaWxlICB8ICAgMyArDQogZHJpdmVycy9zdGFnaW5nL3dmeC9iaC5jICAg ICAgfCAgIDIgKw0KIGRyaXZlcnMvc3RhZ2luZy93ZngvZGF0YV90eC5jIHwgNzgzICsrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysNCiBkcml2ZXJzL3N0YWdpbmcvd2Z4L2RhdGFfdHgu aCB8ICA5MyArKysrDQogZHJpdmVycy9zdGFnaW5nL3dmeC9oaWZfcnguYyAgfCAgMzcgKysNCiBk cml2ZXJzL3N0YWdpbmcvd2Z4L2hpZl90eC5jICB8ICAgMSArDQogZHJpdmVycy9zdGFnaW5nL3dm eC9tYWluLmMgICAgfCAgIDQgKw0KIGRyaXZlcnMvc3RhZ2luZy93ZngvcXVldWUuYyAgIHwgNTI2 ICsrKysrKysrKysrKysrKysrKysrKysrDQogZHJpdmVycy9zdGFnaW5nL3dmeC9xdWV1ZS5oICAg fCAgNTkgKysrDQogZHJpdmVycy9zdGFnaW5nL3dmeC9zdGEuYyAgICAgfCAxMzUgKysrKysrDQog ZHJpdmVycy9zdGFnaW5nL3dmeC9zdGEuaCAgICAgfCAgIDggKw0KIGRyaXZlcnMvc3RhZ2luZy93 ZngvdHJhY2VzLmggIHwgIDc0ICsrKysNCiBkcml2ZXJzL3N0YWdpbmcvd2Z4L3dmeC5oICAgICB8 ICA1OCArKysNCiAxMyBmaWxlcyBjaGFuZ2VkLCAxNzgzIGluc2VydGlvbnMoKykNCiBjcmVhdGUg bW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL3dmeC9kYXRhX3R4LmMNCiBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9zdGFnaW5nL3dmeC9kYXRhX3R4LmgNCiBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9zdGFnaW5nL3dmeC9xdWV1ZS5jDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv c3RhZ2luZy93ZngvcXVldWUuaA0KDQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dmeC9N YWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy93ZngvTWFrZWZpbGUNCmluZGV4IGUxNTg1ODk0Njhh My4uZDVhYzlmYWZkMWYxIDEwMDY0NA0KLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dmeC9NYWtlZmls ZQ0KKysrIGIvZHJpdmVycy9zdGFnaW5nL3dmeC9NYWtlZmlsZQ0KQEAgLTksNiArOSw5IEBAIHdm eC15IDo9IFwNCiAJZndpby5vIFwNCiAJaGlmX3R4Lm8gXA0KIAloaWZfcngubyBcDQorCXF1ZXVl Lm8gXA0KKwlkYXRhX3R4Lm8gXA0KKwlzdGEubyBcDQogCW1haW4ubyBcDQogCXN0YS5vIFwNCiAJ ZGVidWcubw0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93ZngvYmguYyBiL2RyaXZlcnMv c3RhZ2luZy93ZngvYmguYw0KaW5kZXggZDMyMWZkMzEyZDU1Li5lZDgxYzM5MjRkOTggMTAwNjQ0 DQotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2Z4L2JoLmMNCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93 ZngvYmguYw0KQEAgLTIyMCw2ICsyMjAsOCBAQCBzdGF0aWMgaW50IGJoX3dvcmtfdHgoc3RydWN0 IHdmeF9kZXYgKndkZXYsIGludCBtYXhfbXNnKQ0KIAkJCWlmICh0cnlfd2FpdF9mb3JfY29tcGxl dGlvbigmd2Rldi0+aGlmX2NtZC5yZWFkeSkpIHsNCiAJCQkJV0FSTighbXV0ZXhfaXNfbG9ja2Vk KCZ3ZGV2LT5oaWZfY21kLmxvY2spLCAiZGF0YSBsb2NraW5nIGVycm9yIik7DQogCQkJCWhpZiA9 IHdkZXYtPmhpZl9jbWQuYnVmX3NlbmQ7DQorCQkJfSBlbHNlIHsNCisJCQkJaGlmID0gd2Z4X3R4 X3F1ZXVlc19nZXQod2Rldik7DQogCQkJfQ0KIAkJfQ0KIAkJaWYgKCFoaWYpDQpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9zdGFnaW5nL3dmeC9kYXRhX3R4LmMgYi9kcml2ZXJzL3N0YWdpbmcvd2Z4L2Rh dGFfdHguYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAwMC4uMjE3ZDNj MjcwNzA2DQotLS0gL2Rldi9udWxsDQorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2Z4L2RhdGFfdHgu Yw0KQEAgLTAsMCArMSw3ODMgQEANCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIu MC1vbmx5DQorLyoNCisgKiBEYXRhcGF0aCBpbXBsZW1lbnRhdGlvbi4NCisgKg0KKyAqIENvcHly aWdodCAoYykgMjAxNy0yMDE5LCBTaWxpY29uIExhYm9yYXRvcmllcywgSW5jLg0KKyAqIENvcHly aWdodCAoYykgMjAxMCwgU1QtRXJpY3Nzb24NCisgKi8NCisjaW5jbHVkZSA8bmV0L21hYzgwMjEx Lmg+DQorDQorI2luY2x1ZGUgImRhdGFfdHguaCINCisjaW5jbHVkZSAid2Z4LmgiDQorI2luY2x1 ZGUgImJoLmgiDQorI2luY2x1ZGUgInF1ZXVlLmgiDQorI2luY2x1ZGUgImRlYnVnLmgiDQorI2lu Y2x1ZGUgInRyYWNlcy5oIg0KKyNpbmNsdWRlICJoaWZfdHhfbWliLmgiDQorDQorI2RlZmluZSBX RlhfSU5WQUxJRF9SQVRFX0lEICgweEZGKQ0KKyNkZWZpbmUgV0ZYX0xJTktfSURfR0NfVElNRU9V VCAoKHVuc2lnbmVkIGxvbmcpKDEwICogSFopKQ0KKw0KK3N0YXRpYyBpbnQgd2Z4X2dldF9od19y YXRlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R4X3JhdGUg KnJhdGUpDQorew0KKwlpZiAocmF0ZS0+aWR4IDwgMCkNCisJCXJldHVybiAtMTsNCisJaWYgKHJh dGUtPmZsYWdzICYgSUVFRTgwMjExX1RYX1JDX01DUykgew0KKwkJaWYgKHJhdGUtPmlkeCA+IDcp IHsNCisJCQlXQVJOKDEsICJ3cm9uZyByYXRlLT5pZHggdmFsdWU6ICVkIiwgcmF0ZS0+aWR4KTsN CisJCQlyZXR1cm4gLTE7DQorCQl9DQorCQlyZXR1cm4gcmF0ZS0+aWR4ICsgMTQ7DQorCX0NCisJ Ly8gV0Z4IG9ubHkgc3VwcG9ydCAyR0h6LCBlbHNlIGJhbmQgaW5mb3JtYXRpb24gc2hvdWxkIGJl IHJldHJlaXZlZA0KKwkvLyBmcm9tIGllZWU4MDIxMV90eF9pbmZvDQorCXJldHVybiB3ZGV2LT5o dy0+d2lwaHktPmJhbmRzW05MODAyMTFfQkFORF8yR0haXS0+Yml0cmF0ZXNbcmF0ZS0+aWR4XS5o d192YWx1ZTsNCit9DQorDQorLyogVFggcG9saWN5IGNhY2hlIGltcGxlbWVudGF0aW9uICovDQor DQorc3RhdGljIHZvaWQgdHhfcG9saWN5X2J1aWxkKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBzdHJ1 Y3QgdHhfcG9saWN5ICpwb2xpY3ksDQorCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZSAq cmF0ZXMpDQorew0KKwlpbnQgaTsNCisJc2l6ZV90IGNvdW50Ow0KKwlzdHJ1Y3Qgd2Z4X2RldiAq d2RldiA9IHd2aWYtPndkZXY7DQorDQorCUJVR19PTihyYXRlc1swXS5pZHggPCAwKTsNCisJbWVt c2V0KHBvbGljeSwgMCwgc2l6ZW9mKCpwb2xpY3kpKTsNCisJZm9yIChpID0gMTsgaSA8IElFRUU4 MDIxMV9UWF9NQVhfUkFURVM7IGkrKykNCisJCWlmIChyYXRlc1tpXS5pZHggPCAwKQ0KKwkJCWJy ZWFrOw0KKwljb3VudCA9IGk7DQorDQorCS8qIEhBQ0shISEgRGV2aWNlIGhhcyBwcm9ibGVtcyAo YXQgbGVhc3QpIHN3aXRjaGluZyBmcm9tDQorCSAqIDU0TWJwcyBDVFMgdG8gMU1icHMuIFRoaXMg c3dpdGNoIHRha2VzIGVub3Jtb3VzIGFtb3VudA0KKwkgKiBvZiB0aW1lICgxMDAtMjAwIG1zKSwg bGVhZGluZyB0byB2YWx1YWJsZSB0aHJvdWdocHV0IGRyb3AuDQorCSAqIEFzIGEgd29ya2Fyb3Vu ZCwgYWRkaXRpb25hbCBnLXJhdGVzIGFyZSBpbmplY3RlZCB0byB0aGUNCisJICogcG9saWN5Lg0K KwkgKi8NCisJaWYgKGNvdW50ID09IDIgJiYgIShyYXRlc1swXS5mbGFncyAmIElFRUU4MDIxMV9U WF9SQ19NQ1MpICYmDQorCSAgICByYXRlc1swXS5pZHggPiA0ICYmIHJhdGVzWzBdLmNvdW50ID4g MiAmJg0KKwkgICAgcmF0ZXNbMV0uaWR4IDwgMikgew0KKwkJaW50IG1pZF9yYXRlID0gKHJhdGVz WzBdLmlkeCArIDQpID4+IDE7DQorDQorCQkvKiBEZWNyZWFzZSBudW1iZXIgb2YgcmV0cmllcyBm b3IgdGhlIGluaXRpYWwgcmF0ZSAqLw0KKwkJcmF0ZXNbMF0uY291bnQgLT0gMjsNCisNCisJCWlm IChtaWRfcmF0ZSAhPSA0KSB7DQorCQkJLyogS2VlcCBmYWxsYmFjayByYXRlIGF0IDFNYnBzLiAq Lw0KKwkJCXJhdGVzWzNdID0gcmF0ZXNbMV07DQorDQorCQkJLyogSW5qZWN0IDEgdHJhbnNtaXNz aW9uIG9uIGxvd2VzdCBnLXJhdGUgKi8NCisJCQlyYXRlc1syXS5pZHggPSA0Ow0KKwkJCXJhdGVz WzJdLmNvdW50ID0gMTsNCisJCQlyYXRlc1syXS5mbGFncyA9IHJhdGVzWzFdLmZsYWdzOw0KKw0K KwkJCS8qIEluamVjdCAxIHRyYW5zbWlzc2lvbiBvbiBtaWQtcmF0ZSAqLw0KKwkJCXJhdGVzWzFd LmlkeCA9IG1pZF9yYXRlOw0KKwkJCXJhdGVzWzFdLmNvdW50ID0gMTsNCisNCisJCQkvKiBGYWxs YmFjayB0byAxIE1icHMgaXMgYSByZWFsbHkgYmFkIHRoaW5nLA0KKwkJCSAqIHNvIGxldCdzIHRy eSB0byBpbmNyZWFzZSBwcm9iYWJpbGl0eSBvZg0KKwkJCSAqIHN1Y2Nlc3NmdWwgdHJhbnNtaXNz aW9uIG9uIHRoZSBsb3dlc3QgZyByYXRlDQorCQkJICogZXZlbiBtb3JlDQorCQkJICovDQorCQkJ aWYgKHJhdGVzWzBdLmNvdW50ID49IDMpIHsNCisJCQkJLS1yYXRlc1swXS5jb3VudDsNCisJCQkJ KytyYXRlc1syXS5jb3VudDsNCisJCQl9DQorDQorCQkJLyogQWRqdXN0IGFtb3VudCBvZiByYXRl cyBkZWZpbmVkICovDQorCQkJY291bnQgKz0gMjsNCisJCX0gZWxzZSB7DQorCQkJLyogS2VlcCBm YWxsYmFjayByYXRlIGF0IDFNYnBzLiAqLw0KKwkJCXJhdGVzWzJdID0gcmF0ZXNbMV07DQorDQor CQkJLyogSW5qZWN0IDIgdHJhbnNtaXNzaW9ucyBvbiBsb3dlc3QgZy1yYXRlICovDQorCQkJcmF0 ZXNbMV0uaWR4ID0gNDsNCisJCQlyYXRlc1sxXS5jb3VudCA9IDI7DQorDQorCQkJLyogQWRqdXN0 IGFtb3VudCBvZiByYXRlcyBkZWZpbmVkICovDQorCQkJY291bnQgKz0gMTsNCisJCX0NCisJfQ0K Kw0KKwlmb3IgKGkgPSAwOyBpIDwgSUVFRTgwMjExX1RYX01BWF9SQVRFUzsgKytpKSB7DQorCQlp bnQgcmF0ZWlkOw0KKwkJdWludDhfdCBjb3VudDsNCisNCisJCWlmIChyYXRlc1tpXS5pZHggPCAw KQ0KKwkJCWJyZWFrOw0KKwkJV0FSTl9PTihyYXRlc1tpXS5jb3VudCA+IDE1KTsNCisJCXJhdGVp ZCA9IHdmeF9nZXRfaHdfcmF0ZSh3ZGV2LCAmcmF0ZXNbaV0pOw0KKwkJLy8gUGFjayB0d28gdmFs dWVzIGluIGVhY2ggYnl0ZSBvZiBwb2xpY3ktPnJhdGVzDQorCQljb3VudCA9IHJhdGVzW2ldLmNv dW50Ow0KKwkJaWYgKHJhdGVpZCAlIDIpDQorCQkJY291bnQgPDw9IDQ7DQorCQlwb2xpY3ktPnJh dGVzW3JhdGVpZCAvIDJdIHw9IGNvdW50Ow0KKwl9DQorfQ0KKw0KK3N0YXRpYyBib29sIHR4X3Bv bGljeV9pc19lcXVhbChjb25zdCBzdHJ1Y3QgdHhfcG9saWN5ICphLCBjb25zdCBzdHJ1Y3QgdHhf cG9saWN5ICpiKQ0KK3sNCisJcmV0dXJuICFtZW1jbXAoYS0+cmF0ZXMsIGItPnJhdGVzLCBzaXpl b2YoYS0+cmF0ZXMpKTsNCit9DQorDQorc3RhdGljIGludCB0eF9wb2xpY3lfZmluZChzdHJ1Y3Qg dHhfcG9saWN5X2NhY2hlICpjYWNoZSwgc3RydWN0IHR4X3BvbGljeSAqd2FudGVkKQ0KK3sNCisJ c3RydWN0IHR4X3BvbGljeSAqaXQ7DQorDQorCWxpc3RfZm9yX2VhY2hfZW50cnkoaXQsICZjYWNo ZS0+dXNlZCwgbGluaykNCisJCWlmICh0eF9wb2xpY3lfaXNfZXF1YWwod2FudGVkLCBpdCkpDQor CQkJcmV0dXJuIGl0IC0gY2FjaGUtPmNhY2hlOw0KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGl0LCAm Y2FjaGUtPmZyZWUsIGxpbmspDQorCQlpZiAodHhfcG9saWN5X2lzX2VxdWFsKHdhbnRlZCwgaXQp KQ0KKwkJCXJldHVybiBpdCAtIGNhY2hlLT5jYWNoZTsNCisJcmV0dXJuIC0xOw0KK30NCisNCitz dGF0aWMgdm9pZCB0eF9wb2xpY3lfdXNlKHN0cnVjdCB0eF9wb2xpY3lfY2FjaGUgKmNhY2hlLCBz dHJ1Y3QgdHhfcG9saWN5ICplbnRyeSkNCit7DQorCSsrZW50cnktPnVzYWdlX2NvdW50Ow0KKwls aXN0X21vdmUoJmVudHJ5LT5saW5rLCAmY2FjaGUtPnVzZWQpOw0KK30NCisNCitzdGF0aWMgaW50 IHR4X3BvbGljeV9yZWxlYXNlKHN0cnVjdCB0eF9wb2xpY3lfY2FjaGUgKmNhY2hlLCBzdHJ1Y3Qg dHhfcG9saWN5ICplbnRyeSkNCit7DQorCWludCByZXQgPSAtLWVudHJ5LT51c2FnZV9jb3VudDsN CisNCisJaWYgKCFyZXQpDQorCQlsaXN0X21vdmUoJmVudHJ5LT5saW5rLCAmY2FjaGUtPmZyZWUp Ow0KKwlyZXR1cm4gcmV0Ow0KK30NCisNCitzdGF0aWMgaW50IHR4X3BvbGljeV9nZXQoc3RydWN0 IHdmeF92aWYgKnd2aWYsIHN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZSAqcmF0ZXMsDQorCQkJIGJv b2wgKnJlbmV3KQ0KK3sNCisJaW50IGlkeDsNCisJc3RydWN0IHR4X3BvbGljeV9jYWNoZSAqY2Fj aGUgPSAmd3ZpZi0+dHhfcG9saWN5X2NhY2hlOw0KKwlzdHJ1Y3QgdHhfcG9saWN5IHdhbnRlZDsN CisNCisJdHhfcG9saWN5X2J1aWxkKHd2aWYsICZ3YW50ZWQsIHJhdGVzKTsNCisNCisJc3Bpbl9s b2NrX2JoKCZjYWNoZS0+bG9jayk7DQorCWlmIChXQVJOX09OX09OQ0UobGlzdF9lbXB0eSgmY2Fj aGUtPmZyZWUpKSkgew0KKwkJc3Bpbl91bmxvY2tfYmgoJmNhY2hlLT5sb2NrKTsNCisJCXJldHVy biBXRlhfSU5WQUxJRF9SQVRFX0lEOw0KKwl9DQorCWlkeCA9IHR4X3BvbGljeV9maW5kKGNhY2hl LCAmd2FudGVkKTsNCisJaWYgKGlkeCA+PSAwKSB7DQorCQkqcmVuZXcgPSBmYWxzZTsNCisJfSBl bHNlIHsNCisJCXN0cnVjdCB0eF9wb2xpY3kgKmVudHJ5Ow0KKwkJKnJlbmV3ID0gdHJ1ZTsNCisJ CS8qIElmIHBvbGljeSBpcyBub3QgZm91bmQgY3JlYXRlIGEgbmV3IG9uZQ0KKwkJICogdXNpbmcg dGhlIG9sZGVzdCBlbnRyeSBpbiAiZnJlZSIgbGlzdA0KKwkJICovDQorCQllbnRyeSA9IGxpc3Rf ZW50cnkoY2FjaGUtPmZyZWUucHJldiwgc3RydWN0IHR4X3BvbGljeSwgbGluayk7DQorCQltZW1j cHkoZW50cnktPnJhdGVzLCB3YW50ZWQucmF0ZXMsIHNpemVvZihlbnRyeS0+cmF0ZXMpKTsNCisJ CWVudHJ5LT51cGxvYWRlZCA9IDA7DQorCQllbnRyeS0+dXNhZ2VfY291bnQgPSAwOw0KKwkJaWR4 ID0gZW50cnkgLSBjYWNoZS0+Y2FjaGU7DQorCX0NCisJdHhfcG9saWN5X3VzZShjYWNoZSwgJmNh Y2hlLT5jYWNoZVtpZHhdKTsNCisJaWYgKGxpc3RfZW1wdHkoJmNhY2hlLT5mcmVlKSkgew0KKwkJ LyogTG9jayBUWCBxdWV1ZXMuICovDQorCQl3ZnhfdHhfcXVldWVzX2xvY2sod3ZpZi0+d2Rldik7 DQorCX0NCisJc3Bpbl91bmxvY2tfYmgoJmNhY2hlLT5sb2NrKTsNCisJcmV0dXJuIGlkeDsNCit9 DQorDQorc3RhdGljIHZvaWQgdHhfcG9saWN5X3B1dChzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgaW50 IGlkeCkNCit7DQorCWludCB1c2FnZSwgbG9ja2VkOw0KKwlzdHJ1Y3QgdHhfcG9saWN5X2NhY2hl ICpjYWNoZSA9ICZ3dmlmLT50eF9wb2xpY3lfY2FjaGU7DQorDQorCXNwaW5fbG9ja19iaCgmY2Fj aGUtPmxvY2spOw0KKwlsb2NrZWQgPSBsaXN0X2VtcHR5KCZjYWNoZS0+ZnJlZSk7DQorCXVzYWdl ID0gdHhfcG9saWN5X3JlbGVhc2UoY2FjaGUsICZjYWNoZS0+Y2FjaGVbaWR4XSk7DQorCWlmIChs b2NrZWQgJiYgIXVzYWdlKSB7DQorCQkvKiBVbmxvY2sgVFggcXVldWVzLiAqLw0KKwkJd2Z4X3R4 X3F1ZXVlc191bmxvY2sod3ZpZi0+d2Rldik7DQorCX0NCisJc3Bpbl91bmxvY2tfYmgoJmNhY2hl LT5sb2NrKTsNCit9DQorDQorc3RhdGljIGludCB0eF9wb2xpY3lfdXBsb2FkKHN0cnVjdCB3Znhf dmlmICp3dmlmKQ0KK3sNCisJaW50IGk7DQorCXN0cnVjdCB0eF9wb2xpY3lfY2FjaGUgKmNhY2hl ID0gJnd2aWYtPnR4X3BvbGljeV9jYWNoZTsNCisJc3RydWN0IGhpZl9taWJfc2V0X3R4X3JhdGVf cmV0cnlfcG9saWN5ICphcmcgPQ0KKwkJa3phbGxvYyhzdHJ1Y3Rfc2l6ZShhcmcsIHR4X3JhdGVf cmV0cnlfcG9saWN5LCBISUZfTUlCX05VTV9UWF9SQVRFX1JFVFJZX1BPTElDSUVTKSwgR0ZQX0tF Uk5FTCk7DQorCXN0cnVjdCBoaWZfbWliX3R4X3JhdGVfcmV0cnlfcG9saWN5ICpkc3Q7DQorDQor CXNwaW5fbG9ja19iaCgmY2FjaGUtPmxvY2spOw0KKwkvKiBVcGxvYWQgb25seSBtb2RpZmllZCBl bnRyaWVzLiAqLw0KKwlmb3IgKGkgPSAwOyBpIDwgSElGX01JQl9OVU1fVFhfUkFURV9SRVRSWV9Q T0xJQ0lFUzsgKytpKSB7DQorCQlzdHJ1Y3QgdHhfcG9saWN5ICpzcmMgPSAmY2FjaGUtPmNhY2hl W2ldOw0KKw0KKwkJaWYgKCFzcmMtPnVwbG9hZGVkICYmIG1lbXpjbXAoc3JjLT5yYXRlcywgc2l6 ZW9mKHNyYy0+cmF0ZXMpKSkgew0KKwkJCWRzdCA9IGFyZy0+dHhfcmF0ZV9yZXRyeV9wb2xpY3kg KyBhcmctPm51bV90eF9yYXRlX3BvbGljaWVzOw0KKw0KKwkJCWRzdC0+cG9saWN5X2luZGV4ID0g aTsNCisJCQlkc3QtPnNob3J0X3JldHJ5X2NvdW50ID0gMjU1Ow0KKwkJCWRzdC0+bG9uZ19yZXRy eV9jb3VudCA9IDI1NTsNCisJCQlkc3QtPmZpcnN0X3JhdGVfc2VsID0gMTsNCisJCQlkc3QtPnRl cm1pbmF0ZSA9IDE7DQorCQkJZHN0LT5jb3VudF9pbml0ID0gMTsNCisJCQltZW1jcHkoJmRzdC0+ cmF0ZXMsIHNyYy0+cmF0ZXMsIHNpemVvZihzcmMtPnJhdGVzKSk7DQorCQkJc3JjLT51cGxvYWRl ZCA9IDE7DQorCQkJYXJnLT5udW1fdHhfcmF0ZV9wb2xpY2llcysrOw0KKwkJfQ0KKwl9DQorCXNw aW5fdW5sb2NrX2JoKCZjYWNoZS0+bG9jayk7DQorCWhpZl9zZXRfdHhfcmF0ZV9yZXRyeV9wb2xp Y3kod3ZpZiwgYXJnKTsNCisJa2ZyZWUoYXJnKTsNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRp YyB2b2lkIHR4X3BvbGljeV91cGxvYWRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspDQor ew0KKwlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiA9DQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0 IHdmeF92aWYsIHR4X3BvbGljeV91cGxvYWRfd29yayk7DQorDQorCXR4X3BvbGljeV91cGxvYWQo d3ZpZik7DQorDQorCXdmeF90eF91bmxvY2sod3ZpZi0+d2Rldik7DQorCXdmeF90eF9xdWV1ZXNf dW5sb2NrKHd2aWYtPndkZXYpOw0KK30NCisNCit2b2lkIHR4X3BvbGljeV9pbml0KHN0cnVjdCB3 ZnhfdmlmICp3dmlmKQ0KK3sNCisJc3RydWN0IHR4X3BvbGljeV9jYWNoZSAqY2FjaGUgPSAmd3Zp Zi0+dHhfcG9saWN5X2NhY2hlOw0KKwlpbnQgaTsNCisNCisJbWVtc2V0KGNhY2hlLCAwLCBzaXpl b2YoKmNhY2hlKSk7DQorDQorCXNwaW5fbG9ja19pbml0KCZjYWNoZS0+bG9jayk7DQorCUlOSVRf TElTVF9IRUFEKCZjYWNoZS0+dXNlZCk7DQorCUlOSVRfTElTVF9IRUFEKCZjYWNoZS0+ZnJlZSk7 DQorCUlOSVRfV09SSygmd3ZpZi0+dHhfcG9saWN5X3VwbG9hZF93b3JrLCB0eF9wb2xpY3lfdXBs b2FkX3dvcmspOw0KKw0KKwlmb3IgKGkgPSAwOyBpIDwgSElGX01JQl9OVU1fVFhfUkFURV9SRVRS WV9QT0xJQ0lFUzsgKytpKQ0KKwkJbGlzdF9hZGQoJmNhY2hlLT5jYWNoZVtpXS5saW5rLCAmY2Fj aGUtPmZyZWUpOw0KK30NCisNCisvKiBMaW5rIElEIHJlbGF0ZWQgZnVuY3Rpb25zICovDQorDQor c3RhdGljIGludCB3ZnhfYWxsb2NfbGlua19pZChzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgY29uc3Qg dTggKm1hYykNCit7DQorCWludCBpLCByZXQgPSAwOw0KKwl1bnNpZ25lZCBsb25nIG1heF9pbmFj dGl2aXR5ID0gMDsNCisJdW5zaWduZWQgbG9uZyBub3cgPSBqaWZmaWVzOw0KKw0KKwlzcGluX2xv Y2tfYmgoJnd2aWYtPnBzX3N0YXRlX2xvY2spOw0KKwlmb3IgKGkgPSAwOyBpIDwgV0ZYX01BWF9T VEFfSU5fQVBfTU9ERTsgKytpKSB7DQorCQlpZiAoIXd2aWYtPmxpbmtfaWRfZGJbaV0uc3RhdHVz KSB7DQorCQkJcmV0ID0gaSArIDE7DQorCQkJYnJlYWs7DQorCQl9IGVsc2UgaWYgKHd2aWYtPmxp bmtfaWRfZGJbaV0uc3RhdHVzICE9IFdGWF9MSU5LX0hBUkQgJiYNCisJCQkgICAhd3ZpZi0+d2Rl di0+dHhfcXVldWVfc3RhdHMubGlua19tYXBfY2FjaGVbaSArIDFdKSB7DQorCQkJdW5zaWduZWQg bG9uZyBpbmFjdGl2aXR5ID0NCisJCQkJbm93IC0gd3ZpZi0+bGlua19pZF9kYltpXS50aW1lc3Rh bXA7DQorDQorCQkJaWYgKGluYWN0aXZpdHkgPCBtYXhfaW5hY3Rpdml0eSkNCisJCQkJY29udGlu dWU7DQorCQkJbWF4X2luYWN0aXZpdHkgPSBpbmFjdGl2aXR5Ow0KKwkJCXJldCA9IGkgKyAxOw0K KwkJfQ0KKwl9DQorDQorCWlmIChyZXQpIHsNCisJCXN0cnVjdCB3ZnhfbGlua19lbnRyeSAqZW50 cnkgPSAmd3ZpZi0+bGlua19pZF9kYltyZXQgLSAxXTsNCisNCisJCWVudHJ5LT5zdGF0dXMgPSBX RlhfTElOS19SRVNFUlZFOw0KKwkJZXRoZXJfYWRkcl9jb3B5KGVudHJ5LT5tYWMsIG1hYyk7DQor CQltZW1zZXQoJmVudHJ5LT5idWZmZXJlZCwgMCwgV0ZYX01BWF9USUQpOw0KKwkJc2tiX3F1ZXVl X2hlYWRfaW5pdCgmZW50cnktPnJ4X3F1ZXVlKTsNCisJCXdmeF90eF9sb2NrKHd2aWYtPndkZXYp Ow0KKw0KKwkJaWYgKCFzY2hlZHVsZV93b3JrKCZ3dmlmLT5saW5rX2lkX3dvcmspKQ0KKwkJCXdm eF90eF91bmxvY2sod3ZpZi0+d2Rldik7DQorCX0gZWxzZSB7DQorCQlkZXZfaW5mbyh3dmlmLT53 ZGV2LT5kZXYsICJubyBtb3JlIGxpbmstaWQgYXZhaWxhYmxlXG4iKTsNCisJfQ0KKwlzcGluX3Vu bG9ja19iaCgmd3ZpZi0+cHNfc3RhdGVfbG9jayk7DQorCXJldHVybiByZXQ7DQorfQ0KKw0KK2lu dCB3ZnhfZmluZF9saW5rX2lkKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBjb25zdCB1OCAqbWFjKQ0K K3sNCisJaW50IGksIHJldCA9IDA7DQorDQorCXNwaW5fbG9ja19iaCgmd3ZpZi0+cHNfc3RhdGVf bG9jayk7DQorCWZvciAoaSA9IDA7IGkgPCBXRlhfTUFYX1NUQV9JTl9BUF9NT0RFOyArK2kpIHsN CisJCWlmIChldGhlcl9hZGRyX2VxdWFsKG1hYywgd3ZpZi0+bGlua19pZF9kYltpXS5tYWMpICYm DQorCQkgICAgd3ZpZi0+bGlua19pZF9kYltpXS5zdGF0dXMpIHsNCisJCQl3dmlmLT5saW5rX2lk X2RiW2ldLnRpbWVzdGFtcCA9IGppZmZpZXM7DQorCQkJcmV0ID0gaSArIDE7DQorCQkJYnJlYWs7 DQorCQl9DQorCX0NCisJc3Bpbl91bmxvY2tfYmgoJnd2aWYtPnBzX3N0YXRlX2xvY2spOw0KKwly ZXR1cm4gcmV0Ow0KK30NCisNCitzdGF0aWMgaW50IHdmeF9tYXBfbGluayhzdHJ1Y3Qgd2Z4X3Zp ZiAqd3ZpZiwgc3RydWN0IHdmeF9saW5rX2VudHJ5ICpsaW5rX2VudHJ5LCBpbnQgc3RhX2lkKQ0K K3sNCisJaW50IHJldDsNCisNCisJcmV0ID0gaGlmX21hcF9saW5rKHd2aWYsIGxpbmtfZW50cnkt Pm1hYywgMCwgc3RhX2lkKTsNCisNCisJaWYgKHJldCA9PSAwKQ0KKwkJLyogU2F2ZSB0aGUgTUFD IGFkZHJlc3MgY3VycmVudGx5IGFzc29jaWF0ZWQgd2l0aCB0aGUgcGVlcg0KKwkJICogZm9yIGZ1 dHVyZSB1bm1hcCByZXF1ZXN0DQorCQkgKi8NCisJCWV0aGVyX2FkZHJfY29weShsaW5rX2VudHJ5 LT5vbGRfbWFjLCBsaW5rX2VudHJ5LT5tYWMpOw0KKw0KKwlyZXR1cm4gcmV0Ow0KK30NCisNCitp bnQgd2Z4X3VubWFwX2xpbmsoc3RydWN0IHdmeF92aWYgKnd2aWYsIGludCBzdGFfaWQpDQorew0K Kwl1OCAqbWFjX2FkZHIgPSBOVUxMOw0KKw0KKwlpZiAoc3RhX2lkKQ0KKwkJbWFjX2FkZHIgPSB3 dmlmLT5saW5rX2lkX2RiW3N0YV9pZCAtIDFdLm9sZF9tYWM7DQorDQorCXJldHVybiBoaWZfbWFw X2xpbmsod3ZpZiwgbWFjX2FkZHIsIDEsIHN0YV9pZCk7DQorfQ0KKw0KK3ZvaWQgd2Z4X2xpbmtf aWRfZ2Nfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspDQorew0KKwlzdHJ1Y3Qgd2Z4X3Zp ZiAqd3ZpZiA9DQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IHdmeF92aWYsIGxpbmtfaWRf Z2Nfd29yay53b3JrKTsNCisJdW5zaWduZWQgbG9uZyBub3cgPSBqaWZmaWVzOw0KKwl1bnNpZ25l ZCBsb25nIG5leHRfZ2MgPSAtMTsNCisJbG9uZyB0dGw7DQorCXUzMiBtYXNrOw0KKwlpbnQgaTsN CisNCisJd2Z4X3R4X2xvY2tfZmx1c2god3ZpZi0+d2Rldik7DQorCXNwaW5fbG9ja19iaCgmd3Zp Zi0+cHNfc3RhdGVfbG9jayk7DQorCWZvciAoaSA9IDA7IGkgPCBXRlhfTUFYX1NUQV9JTl9BUF9N T0RFOyArK2kpIHsNCisJCWJvb2wgbmVlZF9yZXNldCA9IGZhbHNlOw0KKw0KKwkJbWFzayA9IEJJ VChpICsgMSk7DQorCQlpZiAod3ZpZi0+bGlua19pZF9kYltpXS5zdGF0dXMgPT0gV0ZYX0xJTktf UkVTRVJWRSB8fA0KKwkJICAgICh3dmlmLT5saW5rX2lkX2RiW2ldLnN0YXR1cyA9PSBXRlhfTElO S19IQVJEICYmDQorCQkgICAgICEod3ZpZi0+bGlua19pZF9tYXAgJiBtYXNrKSkpIHsNCisJCQlp ZiAod3ZpZi0+bGlua19pZF9tYXAgJiBtYXNrKSB7DQorCQkJCXd2aWYtPnN0YV9hc2xlZXBfbWFz ayAmPSB+bWFzazsNCisJCQkJd3ZpZi0+cHNwb2xsX21hc2sgJj0gfm1hc2s7DQorCQkJCW5lZWRf cmVzZXQgPSB0cnVlOw0KKwkJCX0NCisJCQl3dmlmLT5saW5rX2lkX21hcCB8PSBtYXNrOw0KKwkJ CWlmICh3dmlmLT5saW5rX2lkX2RiW2ldLnN0YXR1cyAhPSBXRlhfTElOS19IQVJEKQ0KKwkJCQl3 dmlmLT5saW5rX2lkX2RiW2ldLnN0YXR1cyA9IFdGWF9MSU5LX1NPRlQ7DQorDQorCQkJc3Bpbl91 bmxvY2tfYmgoJnd2aWYtPnBzX3N0YXRlX2xvY2spOw0KKwkJCWlmIChuZWVkX3Jlc2V0KQ0KKwkJ CQl3ZnhfdW5tYXBfbGluayh3dmlmLCBpICsgMSk7DQorCQkJd2Z4X21hcF9saW5rKHd2aWYsICZ3 dmlmLT5saW5rX2lkX2RiW2ldLCBpICsgMSk7DQorCQkJbmV4dF9nYyA9IG1pbihuZXh0X2djLCBX RlhfTElOS19JRF9HQ19USU1FT1VUKTsNCisJCQlzcGluX2xvY2tfYmgoJnd2aWYtPnBzX3N0YXRl X2xvY2spOw0KKwkJfSBlbHNlIGlmICh3dmlmLT5saW5rX2lkX2RiW2ldLnN0YXR1cyA9PSBXRlhf TElOS19TT0ZUKSB7DQorCQkJdHRsID0gd3ZpZi0+bGlua19pZF9kYltpXS50aW1lc3RhbXAgLSBu b3cgKw0KKwkJCQkJV0ZYX0xJTktfSURfR0NfVElNRU9VVDsNCisJCQlpZiAodHRsIDw9IDApIHsN CisJCQkJbmVlZF9yZXNldCA9IHRydWU7DQorCQkJCXd2aWYtPmxpbmtfaWRfZGJbaV0uc3RhdHVz ID0gV0ZYX0xJTktfT0ZGOw0KKwkJCQl3dmlmLT5saW5rX2lkX21hcCAmPSB+bWFzazsNCisJCQkJ d3ZpZi0+c3RhX2FzbGVlcF9tYXNrICY9IH5tYXNrOw0KKwkJCQl3dmlmLT5wc3BvbGxfbWFzayAm PSB+bWFzazsNCisJCQkJc3Bpbl91bmxvY2tfYmgoJnd2aWYtPnBzX3N0YXRlX2xvY2spOw0KKwkJ CQl3ZnhfdW5tYXBfbGluayh3dmlmLCBpICsgMSk7DQorCQkJCXNwaW5fbG9ja19iaCgmd3ZpZi0+ cHNfc3RhdGVfbG9jayk7DQorCQkJfSBlbHNlIHsNCisJCQkJbmV4dF9nYyA9IG1pbl90KHVuc2ln bmVkIGxvbmcsIG5leHRfZ2MsIHR0bCk7DQorCQkJfQ0KKwkJfQ0KKwkJaWYgKG5lZWRfcmVzZXQp DQorCQkJc2tiX3F1ZXVlX3B1cmdlKCZ3dmlmLT5saW5rX2lkX2RiW2ldLnJ4X3F1ZXVlKTsNCisJ fQ0KKwlzcGluX3VubG9ja19iaCgmd3ZpZi0+cHNfc3RhdGVfbG9jayk7DQorCWlmIChuZXh0X2dj ICE9IC0xKQ0KKwkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZ3dmlmLT5saW5rX2lkX2djX3dvcmss IG5leHRfZ2MpOw0KKwl3ZnhfdHhfdW5sb2NrKHd2aWYtPndkZXYpOw0KK30NCisNCit2b2lkIHdm eF9saW5rX2lkX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQ0KK3sNCisJc3RydWN0IHdm eF92aWYgKnd2aWYgPQ0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB3ZnhfdmlmLCBsaW5r X2lkX3dvcmspOw0KKw0KKwl3ZnhfdHhfZmx1c2god3ZpZi0+d2Rldik7DQorCXdmeF9saW5rX2lk X2djX3dvcmsoJnd2aWYtPmxpbmtfaWRfZ2Nfd29yay53b3JrKTsNCisJd2Z4X3R4X3VubG9jayh3 dmlmLT53ZGV2KTsNCit9DQorDQorLyogVHggaW1wbGVtZW50YXRpb24gKi8NCisNCitzdGF0aWMg Ym9vbCBpZWVlODAyMTFfaXNfYWN0aW9uX2JhY2soc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcikN Cit7DQorCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21n bXQgKikgaGRyOw0KKw0KKwlpZiAoIWllZWU4MDIxMV9pc19hY3Rpb24obWdtdC0+ZnJhbWVfY29u dHJvbCkpDQorCQlyZXR1cm4gZmFsc2U7DQorCWlmIChtZ210LT51LmFjdGlvbi5jYXRlZ29yeSAh PSBXTEFOX0NBVEVHT1JZX0JBQ0spDQorCQlyZXR1cm4gZmFsc2U7DQorCXJldHVybiB0cnVlOw0K K30NCisNCitzdGF0aWMgdm9pZCB3ZnhfdHhfbWFuYWdlX3BtKHN0cnVjdCB3ZnhfdmlmICp3dmlm LCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLA0KKwkJCSAgICAgc3RydWN0IHdmeF90eF9wcml2 ICp0eF9wcml2LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKQ0KK3sNCisJdTMyIG1hc2sgPSB+ QklUKHR4X3ByaXYtPnJhd19saW5rX2lkKTsNCisNCisJc3Bpbl9sb2NrX2JoKCZ3dmlmLT5wc19z dGF0ZV9sb2NrKTsNCisJaWYgKGllZWU4MDIxMV9pc19hdXRoKGhkci0+ZnJhbWVfY29udHJvbCkp IHsNCisJCXd2aWYtPnN0YV9hc2xlZXBfbWFzayAmPSBtYXNrOw0KKwkJd3ZpZi0+cHNwb2xsX21h c2sgJj0gbWFzazsNCisJfQ0KKw0KKwlpZiAodHhfcHJpdi0+bGlua19pZCA9PSBXRlhfTElOS19J RF9BRlRFUl9EVElNICYmICF3dmlmLT5tY2FzdF9idWZmZXJlZCkgew0KKwkJd3ZpZi0+bWNhc3Rf YnVmZmVyZWQgPSB0cnVlOw0KKwkJaWYgKHd2aWYtPnN0YV9hc2xlZXBfbWFzaykNCisJCQlzY2hl ZHVsZV93b3JrKCZ3dmlmLT5tY2FzdF9zdGFydF93b3JrKTsNCisJfQ0KKw0KKwlpZiAodHhfcHJp di0+cmF3X2xpbmtfaWQpIHsNCisJCXd2aWYtPmxpbmtfaWRfZGJbdHhfcHJpdi0+cmF3X2xpbmtf aWQgLSAxXS50aW1lc3RhbXAgPSBqaWZmaWVzOw0KKwkJaWYgKHR4X3ByaXYtPnRpZCA8IFdGWF9N QVhfVElEKQ0KKwkJCXd2aWYtPmxpbmtfaWRfZGJbdHhfcHJpdi0+cmF3X2xpbmtfaWQgLSAxXS5i dWZmZXJlZFt0eF9wcml2LT50aWRdKys7DQorCX0NCisJc3Bpbl91bmxvY2tfYmgoJnd2aWYtPnBz X3N0YXRlX2xvY2spOw0KKw0KKwlpZiAoc3RhKQ0KKwkJaWVlZTgwMjExX3N0YV9zZXRfYnVmZmVy ZWQoc3RhLCB0eF9wcml2LT50aWQsIHRydWUpOw0KK30NCisNCitzdGF0aWMgdWludDhfdCB3Znhf dHhfZ2V0X3Jhd19saW5rX2lkKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBzdHJ1Y3QgaWVlZTgwMjEx X3N0YSAqc3RhLCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyKQ0KK3sNCisJc3RydWN0IHdmeF9z dGFfcHJpdiAqc3RhX3ByaXYgPSBzdGEgPyAoc3RydWN0IHdmeF9zdGFfcHJpdiAqKSAmc3RhLT5k cnZfcHJpdiA6IE5VTEw7DQorCWNvbnN0IHU4ICpkYSA9IGllZWU4MDIxMV9nZXRfREEoaGRyKTsN CisJaW50IHJldDsNCisNCisJaWYgKHN0YV9wcml2ICYmIHN0YV9wcml2LT5saW5rX2lkKQ0KKwkJ cmV0dXJuIHN0YV9wcml2LT5saW5rX2lkOw0KKwlpZiAod3ZpZi0+dmlmLT50eXBlICE9IE5MODAy MTFfSUZUWVBFX0FQKQ0KKwkJcmV0dXJuIDA7DQorCWlmIChpc19tdWx0aWNhc3RfZXRoZXJfYWRk cihkYSkpDQorCQlyZXR1cm4gMDsNCisJcmV0ID0gd2Z4X2ZpbmRfbGlua19pZCh3dmlmLCBkYSk7 DQorCWlmICghcmV0KQ0KKwkJcmV0ID0gd2Z4X2FsbG9jX2xpbmtfaWQod3ZpZiwgZGEpOw0KKwlp ZiAoIXJldCkgew0KKwkJZGV2X2Vycih3dmlmLT53ZGV2LT5kZXYsICJubyBtb3JlIGxpbmstaWQg YXZhaWxhYmxlXG4iKTsNCisJCXJldHVybiAtRU5PRU5UOw0KKwl9DQorCXJldHVybiByZXQ7DQor fQ0KKw0KK3N0YXRpYyB2b2lkIHdmeF90eF9maXh1cF9yYXRlcyhzdHJ1Y3QgaWVlZTgwMjExX3R4 X3JhdGUgKnJhdGVzKQ0KK3sNCisJaW50IGk7DQorCWJvb2wgZmluaXNoZWQ7DQorDQorCS8vIEZp cm13YXJlIGlzIG5vdCBhYmxlIHRvIG1peCByYXRlcyB3aXRoIGRpZmZlcmVudHMgZmxhZ3MNCisJ Zm9yIChpID0gMDsgaSA8IElFRUU4MDIxMV9UWF9NQVhfUkFURVM7IGkrKykgew0KKwkJaWYgKHJh dGVzWzBdLmZsYWdzICYgSUVFRTgwMjExX1RYX1JDX1NIT1JUX0dJKQ0KKwkJCXJhdGVzW2ldLmZs YWdzIHw9IElFRUU4MDIxMV9UWF9SQ19TSE9SVF9HSTsNCisJCWlmICghKHJhdGVzWzBdLmZsYWdz ICYgSUVFRTgwMjExX1RYX1JDX1NIT1JUX0dJKSkNCisJCQlyYXRlc1tpXS5mbGFncyAmPSB+SUVF RTgwMjExX1RYX1JDX1NIT1JUX0dJOw0KKwkJaWYgKCEocmF0ZXNbMF0uZmxhZ3MgJiBJRUVFODAy MTFfVFhfUkNfVVNFX1JUU19DVFMpKQ0KKwkJCXJhdGVzW2ldLmZsYWdzICY9IH5JRUVFODAyMTFf VFhfUkNfVVNFX1JUU19DVFM7DQorCX0NCisNCisJLy8gU29ydCByYXRlcyBhbmQgcmVtb3ZlIGR1 cGxpY2F0ZXMNCisJZG8gew0KKwkJZmluaXNoZWQgPSB0cnVlOw0KKwkJZm9yIChpID0gMDsgaSA8 IElFRUU4MDIxMV9UWF9NQVhfUkFURVMgLSAxOyBpKyspIHsNCisJCQlpZiAocmF0ZXNbaSArIDFd LmlkeCA9PSByYXRlc1tpXS5pZHggJiYgcmF0ZXNbaV0uaWR4ICE9IC0xKSB7DQorCQkJCXJhdGVz W2ldLmNvdW50ID0gIG1heF90KGludCwgcmF0ZXNbaV0uY291bnQsIHJhdGVzW2kgKyAxXS5jb3Vu dCk7DQorCQkJCXJhdGVzW2kgKyAxXS5pZHggPSAtMTsNCisJCQkJcmF0ZXNbaSArIDFdLmNvdW50 ID0gMDsNCisNCisJCQkJZmluaXNoZWQgPSBmYWxzZTsNCisJCQl9DQorCQkJaWYgKHJhdGVzW2kg KyAxXS5pZHggPiByYXRlc1tpXS5pZHgpIHsNCisJCQkJc3dhcChyYXRlc1tpICsgMV0sIHJhdGVz W2ldKTsNCisJCQkJZmluaXNoZWQgPSBmYWxzZTsNCisJCQl9DQorCQl9DQorCX0gd2hpbGUgKCFm aW5pc2hlZCk7DQorCS8vIEFsbCByZXRyaWVzIHVzZSBsb25nIEdJDQorCWZvciAoaSA9IDE7IGkg PCBJRUVFODAyMTFfVFhfTUFYX1JBVEVTOyBpKyspDQorCQlyYXRlc1tpXS5mbGFncyAmPSB+SUVF RTgwMjExX1RYX1JDX1NIT1JUX0dJOw0KK30NCisNCitzdGF0aWMgdWludDhfdCB3ZnhfdHhfZ2V0 X3JhdGVfaWQoc3RydWN0IHdmeF92aWYgKnd2aWYsIHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAq dHhfaW5mbykNCit7DQorCWJvb2wgdHhfcG9saWN5X3JlbmV3ID0gZmFsc2U7DQorCXVpbnQ4X3Qg cmF0ZV9pZDsNCisNCisJcmF0ZV9pZCA9IHR4X3BvbGljeV9nZXQod3ZpZiwgdHhfaW5mby0+ZHJp dmVyX3JhdGVzLCAmdHhfcG9saWN5X3JlbmV3KTsNCisJV0FSTihyYXRlX2lkID09IFdGWF9JTlZB TElEX1JBVEVfSUQsICJ1bmFibGUgdG8gZ2V0IGEgdmFsaWQgVHggcG9saWN5Iik7DQorDQorCWlm ICh0eF9wb2xpY3lfcmVuZXcpIHsNCisJCS8qIEZJWE1FOiBJdCdzIG5vdCBzbyBvcHRpbWFsIHRv IHN0b3AgVFggcXVldWVzIGV2ZXJ5IG5vdyBhbmQNCisJCSAqIHRoZW4uICBCZXR0ZXIgdG8gcmVp bXBsZW1lbnQgdGFzayBzY2hlZHVsaW5nIHdpdGggYSBjb3VudGVyLg0KKwkJICovDQorCQl3Znhf dHhfbG9jayh3dmlmLT53ZGV2KTsNCisJCXdmeF90eF9xdWV1ZXNfbG9jayh3dmlmLT53ZGV2KTsN CisJCWlmICghc2NoZWR1bGVfd29yaygmd3ZpZi0+dHhfcG9saWN5X3VwbG9hZF93b3JrKSkgew0K KwkJCXdmeF90eF9xdWV1ZXNfdW5sb2NrKHd2aWYtPndkZXYpOw0KKwkJCXdmeF90eF91bmxvY2so d3ZpZi0+d2Rldik7DQorCQl9DQorCX0NCisJcmV0dXJuIHJhdGVfaWQ7DQorfQ0KKw0KK3N0YXRp YyBzdHJ1Y3QgaGlmX2h0X3R4X3BhcmFtZXRlcnMgd2Z4X3R4X2dldF90eF9wYXJtcyhzdHJ1Y3Qg d2Z4X2RldiAqd2Rldiwgc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvKQ0KK3sNCisJ c3RydWN0IGllZWU4MDIxMV90eF9yYXRlICpyYXRlID0gJnR4X2luZm8tPmRyaXZlcl9yYXRlc1sw XTsNCisJc3RydWN0IGhpZl9odF90eF9wYXJhbWV0ZXJzIHJldCA9IHsgfTsNCisNCisJaWYgKCEo cmF0ZS0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfTUNTKSkNCisJCXJldC5mcmFtZV9mb3JtYXQg PSBISUZfRlJBTUVfRk9STUFUX05PTl9IVDsNCisJZWxzZSBpZiAoIShyYXRlLT5mbGFncyAmIElF RUU4MDIxMV9UWF9SQ19HUkVFTl9GSUVMRCkpDQorCQlyZXQuZnJhbWVfZm9ybWF0ID0gSElGX0ZS QU1FX0ZPUk1BVF9NSVhFRF9GT1JNQVRfSFQ7DQorCWVsc2UNCisJCXJldC5mcmFtZV9mb3JtYXQg PSBISUZfRlJBTUVfRk9STUFUX0dGX0hUXzExTjsNCisJaWYgKHJhdGUtPmZsYWdzICYgSUVFRTgw MjExX1RYX1JDX1NIT1JUX0dJKQ0KKwkJcmV0LnNob3J0X2dpID0gMTsNCisJaWYgKHR4X2luZm8t PmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9TVEJDKQ0KKwkJcmV0LnN0YmMgPSAwOyAvLyBGSVhN RTogTm90IHlldCBzdXBwb3J0ZWQgYnkgZmlybXdhcmU/DQorCXJldHVybiByZXQ7DQorfQ0KKw0K K3N0YXRpYyB1aW50OF90IHdmeF90eF9nZXRfdGlkKHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIp DQorew0KKwkvLyBGSVhNRTogaWVlZTgwMjExX2dldF90aWQoaGRyKSBzaG91bGQgYmUgc3VmZmlj aWVudCBmb3IgYWxsIGNhc2VzLg0KKwlpZiAoIWllZWU4MDIxMV9pc19kYXRhKGhkci0+ZnJhbWVf Y29udHJvbCkpDQorCQlyZXR1cm4gV0ZYX01BWF9USUQ7DQorCWlmIChpZWVlODAyMTFfaXNfZGF0 YV9xb3MoaGRyLT5mcmFtZV9jb250cm9sKSkNCisJCXJldHVybiBpZWVlODAyMTFfZ2V0X3RpZCho ZHIpOw0KKwllbHNlDQorCQlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludCB3ZnhfdHhfZ2V0 X2ljdl9sZW4oc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqaHdfa2V5KQ0KK3sNCisJaW50IG1p Y19zcGFjZTsNCisNCisJaWYgKCFod19rZXkpDQorCQlyZXR1cm4gMDsNCisJbWljX3NwYWNlID0g KGh3X2tleS0+Y2lwaGVyID09IFdMQU5fQ0lQSEVSX1NVSVRFX1RLSVApID8gOCA6IDA7DQorCXJl dHVybiBod19rZXktPmljdl9sZW4gKyBtaWNfc3BhY2U7DQorfQ0KKw0KK3N0YXRpYyBpbnQgd2Z4 X3R4X2lubmVyKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3Rh LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQ0KK3sNCisJc3RydWN0IGhpZl9tc2cgKmhpZl9tc2c7DQor CXN0cnVjdCBoaWZfcmVxX3R4ICpyZXE7DQorCXN0cnVjdCB3ZnhfdHhfcHJpdiAqdHhfcHJpdjsN CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihz a2IpOw0KKwlzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICpod19rZXkgPSB0eF9pbmZvLT5jb250 cm9sLmh3X2tleTsNCisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgw MjExX2hkciAqKSBza2ItPmRhdGE7DQorCWludCBxdWV1ZV9pZCA9IHR4X2luZm8tPmh3X3F1ZXVl Ow0KKwlzaXplX3Qgb2Zmc2V0ID0gKHNpemVfdCkgc2tiLT5kYXRhICYgMzsNCisJaW50IHdtc2df bGVuID0gc2l6ZW9mKHN0cnVjdCBoaWZfbXNnKSArIHNpemVvZihzdHJ1Y3QgaGlmX3JlcV90eCkg KyBvZmZzZXQ7DQorDQorCVdBUk4ocXVldWVfaWQgPj0gSUVFRTgwMjExX05VTV9BQ1MsICJ1bnN1 cHBvcnRlZCBxdWV1ZV9pZCIpOw0KKwl3ZnhfdHhfZml4dXBfcmF0ZXModHhfaW5mby0+ZHJpdmVy X3JhdGVzKTsNCisNCisJLy8gRnJvbSBub3cgdHhfaW5mby0+Y29udHJvbCBpcyB1bnVzYWJsZQ0K KwltZW1zZXQodHhfaW5mby0+cmF0ZV9kcml2ZXJfZGF0YSwgMCwgc2l6ZW9mKHN0cnVjdCB3Znhf dHhfcHJpdikpOw0KKwkvLyBGaWxsIHR4X3ByaXYNCisJdHhfcHJpdiA9IChzdHJ1Y3Qgd2Z4X3R4 X3ByaXYgKikgdHhfaW5mby0+cmF0ZV9kcml2ZXJfZGF0YTsNCisJdHhfcHJpdi0+dGlkID0gd2Z4 X3R4X2dldF90aWQoaGRyKTsNCisJdHhfcHJpdi0+cmF3X2xpbmtfaWQgPSB3ZnhfdHhfZ2V0X3Jh d19saW5rX2lkKHd2aWYsIHN0YSwgaGRyKTsNCisJdHhfcHJpdi0+bGlua19pZCA9IHR4X3ByaXYt PnJhd19saW5rX2lkOw0KKwlpZiAoaWVlZTgwMjExX2hhc19wcm90ZWN0ZWQoaGRyLT5mcmFtZV9j b250cm9sKSkNCisJCXR4X3ByaXYtPmh3X2tleSA9IGh3X2tleTsNCisJaWYgKHR4X2luZm8tPmZs YWdzICYgSUVFRTgwMjExX1RYX0NUTF9TRU5EX0FGVEVSX0RUSU0pDQorCQl0eF9wcml2LT5saW5r X2lkID0gV0ZYX0xJTktfSURfQUZURVJfRFRJTTsNCisJaWYgKHN0YSAmJiAoc3RhLT51YXBzZF9x dWV1ZXMgJiBCSVQocXVldWVfaWQpKSkNCisJCXR4X3ByaXYtPmxpbmtfaWQgPSBXRlhfTElOS19J RF9VQVBTRDsNCisNCisJLy8gRmlsbCBoaWZfbXNnDQorCVdBUk4oc2tiX2hlYWRyb29tKHNrYikg PCB3bXNnX2xlbiwgIm5vdCBlbm91Z2ggc3BhY2UgaW4gc2tiIik7DQorCVdBUk4ob2Zmc2V0ICYg MSwgImF0dGVtcHQgdG8gdHJhbnNtaXQgYW4gdW5hbGlnbmVkIGZyYW1lIik7DQorCXNrYl9wdXQo c2tiLCB3ZnhfdHhfZ2V0X2ljdl9sZW4odHhfcHJpdi0+aHdfa2V5KSk7DQorCXNrYl9wdXNoKHNr Yiwgd21zZ19sZW4pOw0KKwltZW1zZXQoc2tiLT5kYXRhLCAwLCB3bXNnX2xlbik7DQorCWhpZl9t c2cgPSAoc3RydWN0IGhpZl9tc2cgKikgc2tiLT5kYXRhOw0KKwloaWZfbXNnLT5sZW4gPSBjcHVf dG9fbGUxNihza2ItPmxlbik7DQorCWhpZl9tc2ctPmlkID0gY3B1X3RvX2xlMTYoSElGX1JFUV9J RF9UWCk7DQorCWhpZl9tc2ctPmludGVyZmFjZSA9IHd2aWYtPmlkOw0KKwlpZiAoc2tiLT5sZW4g PiB3dmlmLT53ZGV2LT5od19jYXBzLnNpemVfaW5wX2NoX2J1Zikgew0KKwkJZGV2X3dhcm4od3Zp Zi0+d2Rldi0+ZGV2LCAicmVxdWVzdGVkIGZyYW1lIHNpemUgKCVkKSBpcyBsYXJnZXIgdGhhbiBt YXhpbXVtIHN1cHBvcnRlZCAoJWQpXG4iLA0KKwkJCSBza2ItPmxlbiwgd3ZpZi0+d2Rldi0+aHdf Y2Fwcy5zaXplX2lucF9jaF9idWYpOw0KKwkJc2tiX3B1bGwoc2tiLCB3bXNnX2xlbik7DQorCQly ZXR1cm4gLUVJTzsNCisJfQ0KKw0KKwkvLyBGaWxsIHR4IHJlcXVlc3QNCisJcmVxID0gKHN0cnVj dCBoaWZfcmVxX3R4ICopIGhpZl9tc2ctPmJvZHk7DQorCXJlcS0+cGFja2V0X2lkID0gcXVldWVf aWQgPDwgMTYgfCBJRUVFODAyMTFfU0VRX1RPX1NOKGxlMTZfdG9fY3B1KGhkci0+c2VxX2N0cmwp KTsNCisJcmVxLT5kYXRhX2ZsYWdzLmZjX29mZnNldCA9IG9mZnNldDsNCisJcmVxLT5xdWV1ZV9p ZC5wZWVyX3N0YV9pZCA9IHR4X3ByaXYtPnJhd19saW5rX2lkOw0KKwkvLyBRdWV1ZSBpbmRleCBh cmUgaW52ZXJ0ZWQgYmV0d2VlbiBmaXJtd2FyZSBhbmQgTGludXgNCisJcmVxLT5xdWV1ZV9pZC5x dWV1ZV9pZCA9IDMgLSBxdWV1ZV9pZDsNCisJcmVxLT5odF90eF9wYXJhbWV0ZXJzID0gd2Z4X3R4 X2dldF90eF9wYXJtcyh3dmlmLT53ZGV2LCB0eF9pbmZvKTsNCisJcmVxLT50eF9mbGFncy5yZXRy eV9wb2xpY3lfaW5kZXggPSB3ZnhfdHhfZ2V0X3JhdGVfaWQod3ZpZiwgdHhfaW5mbyk7DQorDQor CS8vIEF1eGlsbGlhcnkgb3BlcmF0aW9ucw0KKwl3ZnhfdHhfbWFuYWdlX3BtKHd2aWYsIGhkciwg dHhfcHJpdiwgc3RhKTsNCisJd2Z4X3R4X3F1ZXVlX3B1dCh3dmlmLT53ZGV2LCAmd3ZpZi0+d2Rl di0+dHhfcXVldWVbcXVldWVfaWRdLCBza2IpOw0KKwl3ZnhfYmhfcmVxdWVzdF90eCh3dmlmLT53 ZGV2KTsNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3ZvaWQgd2Z4X3R4KHN0cnVjdCBpZWVlODAyMTFf aHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgKmNvbnRyb2wsDQorCSAgICBzdHJ1 Y3Qgc2tfYnVmZiAqc2tiKQ0KK3sNCisJc3RydWN0IHdmeF9kZXYgKndkZXYgPSBody0+cHJpdjsN CisJc3RydWN0IHdmeF92aWYgKnd2aWY7DQorCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEgPSBj b250cm9sID8gY29udHJvbC0+c3RhIDogTlVMTDsNCisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZv ICp0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOw0KKwlzdHJ1Y3QgaWVlZTgwMjExX2hk ciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsNCisJc2l6ZV90IGRy aXZlcl9kYXRhX3Jvb20gPSBGSUVMRF9TSVpFT0Yoc3RydWN0IGllZWU4MDIxMV90eF9pbmZvLCBy YXRlX2RyaXZlcl9kYXRhKTsNCisNCisJY29tcGlsZXRpbWVfYXNzZXJ0KHNpemVvZihzdHJ1Y3Qg d2Z4X3R4X3ByaXYpIDw9IGRyaXZlcl9kYXRhX3Jvb20sDQorCQkJICAgInN0cnVjdCB0eF9wcml2 IGlzIHRvbyBsYXJnZSIpOw0KKwlXQVJOKHNrYi0+bmV4dCB8fCBza2ItPnByZXYsICJza2IgaXMg YWxyZWFkeSBtZW1iZXIgb2YgYSBsaXN0Iik7DQorCS8vIGNvbnRyb2wudmlmIGNhbiBiZSBOVUxM IGZvciBpbmplY3RlZCBmcmFtZXMNCisJaWYgKHR4X2luZm8tPmNvbnRyb2wudmlmKQ0KKwkJd3Zp ZiA9IChzdHJ1Y3Qgd2Z4X3ZpZiAqKSB0eF9pbmZvLT5jb250cm9sLnZpZi0+ZHJ2X3ByaXY7DQor CWVsc2UNCisJCXd2aWYgPSB3dmlmX2l0ZXJhdGUod2RldiwgTlVMTCk7DQorCWlmIChXQVJOX09O KCF3dmlmKSkNCisJCWdvdG8gZHJvcDsNCisJLy8gRklYTUU6IHdoeT8NCisJaWYgKGllZWU4MDIx MV9pc19hY3Rpb25fYmFjayhoZHIpKSB7DQorCQlkZXZfaW5mbyh3ZGV2LT5kZXYsICJkcm9wIEJB IGFjdGlvblxuIik7DQorCQlnb3RvIGRyb3A7DQorCX0NCisJaWYgKHdmeF90eF9pbm5lcih3dmlm LCBzdGEsIHNrYikpDQorCQlnb3RvIGRyb3A7DQorDQorCXJldHVybjsNCisNCitkcm9wOg0KKwlp ZWVlODAyMTFfdHhfc3RhdHVzX2lycXNhZmUod2Rldi0+aHcsIHNrYik7DQorfQ0KKw0KK3ZvaWQg d2Z4X3R4X2NvbmZpcm1fY2Ioc3RydWN0IHdmeF92aWYgKnd2aWYsIHN0cnVjdCBoaWZfY25mX3R4 ICphcmcpDQorew0KKwlpbnQgaTsNCisJaW50IHR4X2NvdW50Ow0KKwlzdHJ1Y3Qgc2tfYnVmZiAq c2tiOw0KKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X3JhdGUgKnJhdGU7DQorCXN0cnVjdCBpZWVlODAy MTFfdHhfaW5mbyAqdHhfaW5mbzsNCisJY29uc3Qgc3RydWN0IHdmeF90eF9wcml2ICp0eF9wcml2 Ow0KKw0KKwlza2IgPSB3ZnhfcGVuZGluZ19nZXQod3ZpZi0+d2RldiwgYXJnLT5wYWNrZXRfaWQp Ow0KKwlpZiAoIXNrYikgew0KKwkJZGV2X3dhcm4od3ZpZi0+d2Rldi0+ZGV2LCAicmVjZWl2ZWQg dW5rbm93biBwYWNrZXRfaWQgKCUjLjh4KSBmcm9tIGNoaXBcbiIsIGFyZy0+cGFja2V0X2lkKTsN CisJCXJldHVybjsNCisJfQ0KKwl0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOw0KKwl0 eF9wcml2ID0gd2Z4X3NrYl90eF9wcml2KHNrYik7DQorCV90cmFjZV90eF9zdGF0cyhhcmcsIHNr Yiwgd2Z4X3BlbmRpbmdfZ2V0X3BrdF91c19kZWxheSh3dmlmLT53ZGV2LCBza2IpKTsNCisNCisJ Ly8gWW91IGNhbiB0b3VjaCB0byB0eF9wcml2LCBidXQgZG9uJ3QgdG91Y2ggdG8gdHhfaW5mby0+ c3RhdHVzLg0KKwl0eF9jb3VudCA9IGFyZy0+YWNrX2ZhaWx1cmVzOw0KKwlpZiAoIWFyZy0+c3Rh dHVzIHx8IGFyZy0+YWNrX2ZhaWx1cmVzKQ0KKwkJdHhfY291bnQgKz0gMTsgLy8gQWxzbyByZXBv cnQgc3VjY2Vzcw0KKwlmb3IgKGkgPSAwOyBpIDwgSUVFRTgwMjExX1RYX01BWF9SQVRFUzsgaSsr KSB7DQorCQlyYXRlID0gJnR4X2luZm8tPnN0YXR1cy5yYXRlc1tpXTsNCisJCWlmIChyYXRlLT5p ZHggPCAwKQ0KKwkJCWJyZWFrOw0KKwkJaWYgKHR4X2NvdW50IDwgcmF0ZS0+Y291bnQgJiYgYXJn LT5zdGF0dXMgJiYgYXJnLT5hY2tfZmFpbHVyZXMpDQorCQkJZGV2X2RiZyh3dmlmLT53ZGV2LT5k ZXYsICJhbGwgcmV0cmllcyB3ZXJlIG5vdCBjb25zdW1lZDogJWQgIT0gJWRcbiIsDQorCQkJCXJh dGUtPmNvdW50LCB0eF9jb3VudCk7DQorCQlpZiAodHhfY291bnQgPD0gcmF0ZS0+Y291bnQgJiYg dHhfY291bnQgJiYgYXJnLT50eGVkX3JhdGUgIT0gd2Z4X2dldF9od19yYXRlKHd2aWYtPndkZXYs IHJhdGUpKQ0KKwkJCWRldl9kYmcod3ZpZi0+d2Rldi0+ZGV2LCAiaW5jb25zaXN0ZW50IHR4X2lu Zm8gcmF0ZXM6ICVkICE9ICVkXG4iLA0KKwkJCQlhcmctPnR4ZWRfcmF0ZSwgd2Z4X2dldF9od19y YXRlKHd2aWYtPndkZXYsIHJhdGUpKTsNCisJCWlmICh0eF9jb3VudCA+IHJhdGUtPmNvdW50KSB7 DQorCQkJdHhfY291bnQgLT0gcmF0ZS0+Y291bnQ7DQorCQl9IGVsc2UgaWYgKCF0eF9jb3VudCkg ew0KKwkJCXJhdGUtPmNvdW50ID0gMDsNCisJCQlyYXRlLT5pZHggPSAtMTsNCisJCX0gZWxzZSB7 DQorCQkJcmF0ZS0+Y291bnQgPSB0eF9jb3VudDsNCisJCQl0eF9jb3VudCA9IDA7DQorCQl9DQor CX0NCisJaWYgKHR4X2NvdW50KQ0KKwkJZGV2X2RiZyh3dmlmLT53ZGV2LT5kZXYsICIlZCBtb3Jl IHJldHJpZXMgdGhhbiBleHBlY3RlZFxuIiwgdHhfY291bnQpOw0KKwlza2JfdHJpbShza2IsIHNr Yi0+bGVuIC0gd2Z4X3R4X2dldF9pY3ZfbGVuKHR4X3ByaXYtPmh3X2tleSkpOw0KKw0KKwkvLyBG cm9tIG5vdywgeW91IGNhbiB0b3VjaCB0byB0eF9pbmZvLT5zdGF0dXMsIGJ1dCBkbyBub3QgdG91 Y2ggdG8NCisJLy8gdHhfcHJpdiBhbnltb3JlDQorCS8vIEZJWE1FOiB1c2UgaWVlZTgwMjExX3R4 X2luZm9fY2xlYXJfc3RhdHVzKCkNCisJbWVtc2V0KHR4X2luZm8tPnJhdGVfZHJpdmVyX2RhdGEs IDAsIHNpemVvZih0eF9pbmZvLT5yYXRlX2RyaXZlcl9kYXRhKSk7DQorCW1lbXNldCh0eF9pbmZv LT5wYWQsIDAsIHNpemVvZih0eF9pbmZvLT5wYWQpKTsNCisNCisJaWYgKCFhcmctPnN0YXR1cykg ew0KKwkJdHhfaW5mby0+c3RhdHVzLnR4X3RpbWUgPSBhcmctPm1lZGlhX2RlbGF5IC0gYXJnLT50 eF9xdWV1ZV9kZWxheTsNCisJCWlmICh0eF9pbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExf Tk9fQUNLKQ0KKwkJCXR4X2luZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFUX05PQUNLX1RS QU5TTUlUVEVEOw0KKwkJZWxzZQ0KKwkJCXR4X2luZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9T VEFUX0FDSzsNCisJfSBlbHNlIGlmIChhcmctPnN0YXR1cyA9PSBISUZfUkVRVUVVRSkgew0KKwkJ V0FSTighYXJnLT50eF9yZXN1bHRfZmxhZ3MucmVxdWV1ZSwgImluY29oZXJlbnQgc3RhdHVzIGFu ZCByZXN1bHRfZmxhZ3MiKTsNCisJCXR4X2luZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFU X1RYX0ZJTFRFUkVEOw0KKwl9DQorCXdmeF9wZW5kaW5nX3JlbW92ZSh3dmlmLT53ZGV2LCBza2Ip Ow0KK30NCisNCitzdGF0aWMgdm9pZCB3Znhfbm90aWZ5X2J1ZmZlcmVkX3R4KHN0cnVjdCB3Znhf dmlmICp3dmlmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLA0KKwkJCQkgICBzdHJ1Y3QgaGlmX3JlcV90 eCAqcmVxKQ0KK3sNCisJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YTsNCisJc3RydWN0IGllZWU4 MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7DQorCWlu dCB0aWQgPSB3ZnhfdHhfZ2V0X3RpZChoZHIpOw0KKwlpbnQgcmF3X2xpbmtfaWQgPSByZXEtPnF1 ZXVlX2lkLnBlZXJfc3RhX2lkOw0KKwl1OCAqYnVmZmVyZWQ7DQorDQorCWlmIChyYXdfbGlua19p ZCAmJiB0aWQgPCBXRlhfTUFYX1RJRCkgew0KKwkJYnVmZmVyZWQgPSB3dmlmLT5saW5rX2lkX2Ri W3Jhd19saW5rX2lkIC0gMV0uYnVmZmVyZWQ7DQorDQorCQlzcGluX2xvY2tfYmgoJnd2aWYtPnBz X3N0YXRlX2xvY2spOw0KKwkJV0FSTighYnVmZmVyZWRbdGlkXSwgImluY29uc2lzdGVudCBub3Rp ZmljYXRpb24iKTsNCisJCWJ1ZmZlcmVkW3RpZF0tLTsNCisJCXNwaW5fdW5sb2NrX2JoKCZ3dmlm LT5wc19zdGF0ZV9sb2NrKTsNCisNCisJCWlmICghYnVmZmVyZWRbdGlkXSkgew0KKwkJCXJjdV9y ZWFkX2xvY2soKTsNCisJCQlzdGEgPSBpZWVlODAyMTFfZmluZF9zdGEod3ZpZi0+dmlmLCBoZHIt PmFkZHIxKTsNCisJCQlpZiAoc3RhKQ0KKwkJCQlpZWVlODAyMTFfc3RhX3NldF9idWZmZXJlZChz dGEsIHRpZCwgZmFsc2UpOw0KKwkJCXJjdV9yZWFkX3VubG9jaygpOw0KKwkJfQ0KKwl9DQorfQ0K Kw0KK3ZvaWQgd2Z4X3NrYl9kdG9yKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBzdHJ1Y3Qgc2tfYnVm ZiAqc2tiKQ0KK3sNCisJc3RydWN0IGhpZl9tc2cgKmhpZiA9IChzdHJ1Y3QgaGlmX21zZyAqKSBz a2ItPmRhdGE7DQorCXN0cnVjdCBoaWZfcmVxX3R4ICpyZXEgPSAoc3RydWN0IGhpZl9yZXFfdHgg KikgaGlmLT5ib2R5Ow0KKwlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiA9IHdkZXZfdG9fd3ZpZih3ZGV2 LCBoaWYtPmludGVyZmFjZSk7DQorCXVuc2lnbmVkIGludCBvZmZzZXQgPSBzaXplb2Yoc3RydWN0 IGhpZl9yZXFfdHgpICsgc2l6ZW9mKHN0cnVjdCBoaWZfbXNnKSArIHJlcS0+ZGF0YV9mbGFncy5m Y19vZmZzZXQ7DQorDQorCVdBUk5fT04oIXd2aWYpOw0KKwlza2JfcHVsbChza2IsIG9mZnNldCk7 DQorCXdmeF9ub3RpZnlfYnVmZmVyZWRfdHgod3ZpZiwgc2tiLCByZXEpOw0KKwl0eF9wb2xpY3lf cHV0KHd2aWYsIHJlcS0+dHhfZmxhZ3MucmV0cnlfcG9saWN5X2luZGV4KTsNCisJaWVlZTgwMjEx X3R4X3N0YXR1c19pcnFzYWZlKHdkZXYtPmh3LCBza2IpOw0KK30NCmRpZmYgLS1naXQgYS9kcml2 ZXJzL3N0YWdpbmcvd2Z4L2RhdGFfdHguaCBiL2RyaXZlcnMvc3RhZ2luZy93ZngvZGF0YV90eC5o DQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwMDAwLi5mNTlhMjU5YmI3NDQN Ci0tLSAvZGV2L251bGwNCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93ZngvZGF0YV90eC5oDQpAQCAt MCwwICsxLDkzIEBADQorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAq Lw0KKy8qDQorICogRGF0YXBhdGggaW1wbGVtZW50YXRpb24uDQorICoNCisgKiBDb3B5cmlnaHQg KGMpIDIwMTctMjAxOSwgU2lsaWNvbiBMYWJvcmF0b3JpZXMsIEluYy4NCisgKiBDb3B5cmlnaHQg KGMpIDIwMTAsIFNULUVyaWNzc29uDQorICovDQorI2lmbmRlZiBXRlhfREFUQV9UWF9IDQorI2Rl ZmluZSBXRlhfREFUQV9UWF9IDQorDQorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4NCisjaW5jbHVk ZSA8bmV0L21hYzgwMjExLmg+DQorDQorI2luY2x1ZGUgImhpZl9hcGlfY21kLmgiDQorI2luY2x1 ZGUgImhpZl9hcGlfbWliLmgiDQorDQorLy8gRklYTUU6IHVzZSBJRUVFODAyMTFfTlVNX1RJRFMN CisjZGVmaW5lIFdGWF9NQVhfVElEICAgICAgICAgICAgICAgOA0KKw0KK3N0cnVjdCB3ZnhfdHhf cHJpdjsNCitzdHJ1Y3Qgd2Z4X2RldjsNCitzdHJ1Y3Qgd2Z4X3ZpZjsNCisNCitlbnVtIHdmeF9s aW5rX3N0YXR1cyB7DQorCVdGWF9MSU5LX09GRiwNCisJV0ZYX0xJTktfUkVTRVJWRSwNCisJV0ZY X0xJTktfU09GVCwNCisJV0ZYX0xJTktfSEFSRCwNCit9Ow0KKw0KK3N0cnVjdCB3ZnhfbGlua19l bnRyeSB7DQorCXVuc2lnbmVkIGxvbmcJCXRpbWVzdGFtcDsNCisJZW51bSB3ZnhfbGlua19zdGF0 dXMJc3RhdHVzOw0KKwl1aW50OF90CQkJbWFjW0VUSF9BTEVOXTsNCisJdWludDhfdAkJCW9sZF9t YWNbRVRIX0FMRU5dOw0KKwl1aW50OF90CQkJYnVmZmVyZWRbV0ZYX01BWF9USURdOw0KKwlzdHJ1 Y3Qgc2tfYnVmZl9oZWFkCXJ4X3F1ZXVlOw0KK307DQorDQorc3RydWN0IHR4X3BvbGljeSB7DQor CXN0cnVjdCBsaXN0X2hlYWQgbGluazsNCisJdWludDhfdCByYXRlc1sxMl07DQorCXVpbnQ4X3Qg dXNhZ2VfY291bnQ7DQorCXVpbnQ4X3QgdXBsb2FkZWQ7DQorfTsNCisNCitzdHJ1Y3QgdHhfcG9s aWN5X2NhY2hlIHsNCisJc3RydWN0IHR4X3BvbGljeSBjYWNoZVtISUZfTUlCX05VTV9UWF9SQVRF X1JFVFJZX1BPTElDSUVTXTsNCisJLy8gRklYTUU6IHVzZSBhIHRyZWVzIGFuZCBkcm9wIGhhc2gg ZnJvbSB0eF9wb2xpY3kNCisJc3RydWN0IGxpc3RfaGVhZCB1c2VkOw0KKwlzdHJ1Y3QgbGlzdF9o ZWFkIGZyZWU7DQorCXNwaW5sb2NrX3QgbG9jazsNCit9Ow0KKw0KK3N0cnVjdCB3ZnhfdHhfcHJp diB7DQorCWt0aW1lX3QgeG1pdF90aW1lc3RhbXA7DQorCXN0cnVjdCBpZWVlODAyMTFfa2V5X2Nv bmYgKmh3X2tleTsNCisJdWludDhfdCBsaW5rX2lkOw0KKwl1aW50OF90IHJhd19saW5rX2lkOw0K Kwl1aW50OF90IHRpZDsNCit9IF9fcGFja2VkOw0KKw0KK3ZvaWQgdHhfcG9saWN5X2luaXQoc3Ry dWN0IHdmeF92aWYgKnd2aWYpOw0KKw0KK3ZvaWQgd2Z4X3R4KHN0cnVjdCBpZWVlODAyMTFfaHcg Kmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3R4X2NvbnRyb2wgKmNvbnRyb2wsDQorCSAgICBzdHJ1Y3Qg c2tfYnVmZiAqc2tiKTsNCit2b2lkIHdmeF90eF9jb25maXJtX2NiKHN0cnVjdCB3ZnhfdmlmICp3 dmlmLCBzdHJ1Y3QgaGlmX2NuZl90eCAqYXJnKTsNCit2b2lkIHdmeF9za2JfZHRvcihzdHJ1Y3Qg d2Z4X2RldiAqd2Rldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7DQorDQoraW50IHdmeF91bm1hcF9s aW5rKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBpbnQgbGlua19pZCk7DQordm9pZCB3ZnhfbGlua19p ZF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7DQordm9pZCB3ZnhfbGlua19pZF9nY193 b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7DQoraW50IHdmeF9maW5kX2xpbmtfaWQoc3Ry dWN0IHdmeF92aWYgKnd2aWYsIGNvbnN0IHU4ICptYWMpOw0KKw0KK3N0YXRpYyBpbmxpbmUgc3Ry dWN0IHdmeF90eF9wcml2ICp3Znhfc2tiX3R4X3ByaXYoc3RydWN0IHNrX2J1ZmYgKnNrYikNCit7 DQorCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbzsNCisNCisJaWYgKCFza2IpDQor CQlyZXR1cm4gTlVMTDsNCisJdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsNCisJcmV0 dXJuIChzdHJ1Y3Qgd2Z4X3R4X3ByaXYgKikgdHhfaW5mby0+cmF0ZV9kcml2ZXJfZGF0YTsNCit9 DQorDQorc3RhdGljIGlubGluZSBzdHJ1Y3QgaGlmX3JlcV90eCAqd2Z4X3NrYl90eHJlcShzdHJ1 Y3Qgc2tfYnVmZiAqc2tiKQ0KK3sNCisJc3RydWN0IGhpZl9tc2cgKmhpZiA9IChzdHJ1Y3QgaGlm X21zZyAqKSBza2ItPmRhdGE7DQorCXN0cnVjdCBoaWZfcmVxX3R4ICpyZXEgPSAoc3RydWN0IGhp Zl9yZXFfdHggKikgaGlmLT5ib2R5Ow0KKw0KKwlyZXR1cm4gcmVxOw0KK30NCisNCisjZW5kaWYg LyogV0ZYX0RBVEFfVFhfSCAqLw0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93ZngvaGlm X3J4LmMgYi9kcml2ZXJzL3N0YWdpbmcvd2Z4L2hpZl9yeC5jDQppbmRleCBjOTNiYWUxYjZhY2Yu Ljk3YzRjMmYwODJmYiAxMDA2NDQNCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy93ZngvaGlmX3J4LmMN CisrKyBiL2RyaXZlcnMvc3RhZ2luZy93ZngvaGlmX3J4LmMNCkBAIC01Myw2ICs1MywzOSBAQCBz dGF0aWMgaW50IGhpZl9nZW5lcmljX2NvbmZpcm0oc3RydWN0IHdmeF9kZXYgKndkZXYsIHN0cnVj dCBoaWZfbXNnICpoaWYsIHZvaWQgKg0KIAlyZXR1cm4gc3RhdHVzOw0KIH0NCiANCitzdGF0aWMg aW50IGhpZl90eF9jb25maXJtKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBzdHJ1Y3QgaGlmX21zZyAq aGlmLCB2b2lkICpidWYpDQorew0KKwlzdHJ1Y3QgaGlmX2NuZl90eCAqYm9keSA9IGJ1ZjsNCisJ c3RydWN0IHdmeF92aWYgKnd2aWYgPSB3ZGV2X3RvX3d2aWYod2RldiwgaGlmLT5pbnRlcmZhY2Up Ow0KKw0KKwlXQVJOX09OKCF3dmlmKTsNCisJaWYgKCF3dmlmKQ0KKwkJcmV0dXJuIC1FRkFVTFQ7 DQorDQorCXdmeF90eF9jb25maXJtX2NiKHd2aWYsIGJvZHkpOw0KKwlyZXR1cm4gMDsNCit9DQor DQorc3RhdGljIGludCBoaWZfbXVsdGlfdHhfY29uZmlybShzdHJ1Y3Qgd2Z4X2RldiAqd2Rldiwg c3RydWN0IGhpZl9tc2cgKmhpZiwgdm9pZCAqYnVmKQ0KK3sNCisJc3RydWN0IGhpZl9jbmZfbXVs dGlfdHJhbnNtaXQgKmJvZHkgPSBidWY7DQorCXN0cnVjdCBoaWZfY25mX3R4ICpidWZfbG9jID0g KHN0cnVjdCBoaWZfY25mX3R4ICopICZib2R5LT50eF9jb25mX3BheWxvYWQ7DQorCXN0cnVjdCB3 ZnhfdmlmICp3dmlmID0gd2Rldl90b193dmlmKHdkZXYsIGhpZi0+aW50ZXJmYWNlKTsNCisJaW50 IGNvdW50ID0gYm9keS0+bnVtX3R4X2NvbmZzOw0KKwlpbnQgaTsNCisNCisJV0FSTihjb3VudCA8 PSAwLCAiY29ycnVwdGVkIG1lc3NhZ2UiKTsNCisJV0FSTl9PTighd3ZpZik7DQorCWlmICghd3Zp ZikNCisJCXJldHVybiAtRUZBVUxUOw0KKw0KKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7ICsraSkg ew0KKwkJd2Z4X3R4X2NvbmZpcm1fY2Iod3ZpZiwgYnVmX2xvYyk7DQorCQlidWZfbG9jKys7DQor CX0NCisJcmV0dXJuIDA7DQorfQ0KKw0KIHN0YXRpYyBpbnQgaGlmX3N0YXJ0dXBfaW5kaWNhdGlv bihzdHJ1Y3Qgd2Z4X2RldiAqd2Rldiwgc3RydWN0IGhpZl9tc2cgKmhpZiwgdm9pZCAqYnVmKQ0K IHsNCiAJc3RydWN0IGhpZl9pbmRfc3RhcnR1cCAqYm9keSA9IGJ1ZjsNCkBAIC0xNzQsNiArMjA3 LDEwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgew0KIAlpbnQgbXNnX2lkOw0KIAlpbnQgKCpoYW5k bGVyKShzdHJ1Y3Qgd2Z4X2RldiAqd2Rldiwgc3RydWN0IGhpZl9tc2cgKmhpZiwgdm9pZCAqYnVm KTsNCiB9IGhpZl9oYW5kbGVyc1tdID0gew0KKwkvKiBDb25maXJtYXRpb25zICovDQorCXsgSElG X0NORl9JRF9UWCwgICAgICAgICAgICAgICAgICAgaGlmX3R4X2NvbmZpcm0gfSwNCisJeyBISUZf Q05GX0lEX01VTFRJX1RSQU5TTUlULCAgICAgICBoaWZfbXVsdGlfdHhfY29uZmlybSB9LA0KKwkv KiBJbmRpY2F0aW9ucyAqLw0KIAl7IEhJRl9JTkRfSURfU1RBUlRVUCwgICAgICAgICAgICAgIGhp Zl9zdGFydHVwX2luZGljYXRpb24gfSwNCiAJeyBISUZfSU5EX0lEX1dBS0VVUCwgICAgICAgICAg ICAgICBoaWZfd2FrZXVwX2luZGljYXRpb24gfSwNCiAJeyBISUZfSU5EX0lEX0pPSU5fQ09NUExF VEUsICAgICAgICBoaWZfam9pbl9jb21wbGV0ZV9pbmRpY2F0aW9uIH0sDQpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9zdGFnaW5nL3dmeC9oaWZfdHguYyBiL2RyaXZlcnMvc3RhZ2luZy93ZngvaGlmX3R4 LmMNCmluZGV4IGY4YWI4NzFhYTE4OC4uMTU3YWIxNzdiNzNmIDEwMDY0NA0KLS0tIGEvZHJpdmVy cy9zdGFnaW5nL3dmeC9oaWZfdHguYw0KKysrIGIvZHJpdmVycy9zdGFnaW5nL3dmeC9oaWZfdHgu Yw0KQEAgLTg4LDYgKzg4LDcgQEAgaW50IHdmeF9jbWRfc2VuZChzdHJ1Y3Qgd2Z4X2RldiAqd2Rl diwgc3RydWN0IGhpZl9tc2cgKnJlcXVlc3QsIHZvaWQgKnJlcGx5LCBzaXoNCiAJfQ0KIAlpZiAo IXJldCkgew0KIAkJZGV2X2Vycih3ZGV2LT5kZXYsICJjaGlwIGRpZCBub3QgYW5zd2VyXG4iKTsN CisJCXdmeF9wZW5kaW5nX2R1bXBfb2xkX2ZyYW1lcyh3ZGV2LCAzMDAwKTsNCiAJCXdkZXYtPmNo aXBfZnJvemVuID0gMTsNCiAJCXJlaW5pdF9jb21wbGV0aW9uKCZ3ZGV2LT5oaWZfY21kLmRvbmUp Ow0KIAkJcmV0ID0gLUVUSU1FRE9VVDsNCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2Z4 L21haW4uYyBiL2RyaXZlcnMvc3RhZ2luZy93ZngvbWFpbi5jDQppbmRleCAyZTcxZjQ0NmQ0ZDQu LmNjZTRlMzBkZDk0YSAxMDA2NDQNCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy93ZngvbWFpbi5jDQor KysgYi9kcml2ZXJzL3N0YWdpbmcvd2Z4L21haW4uYw0KQEAgLTI4LDYgKzI4LDcgQEANCiAjaW5j bHVkZSAiYmguaCINCiAjaW5jbHVkZSAic3RhLmgiDQogI2luY2x1ZGUgImRlYnVnLmgiDQorI2lu Y2x1ZGUgImRhdGFfdHguaCINCiAjaW5jbHVkZSAic2VjdXJlX2xpbmsuaCINCiAjaW5jbHVkZSAi aGlmX3R4X21pYi5oIg0KICNpbmNsdWRlICJoaWZfYXBpX2NtZC5oIg0KQEAgLTUzLDYgKzU0LDcg QEAgc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzIHdmeF9vcHMgPSB7DQogCS5zdG9w CQkJPSB3Znhfc3RvcCwNCiAJLmFkZF9pbnRlcmZhY2UJCT0gd2Z4X2FkZF9pbnRlcmZhY2UsDQog CS5yZW1vdmVfaW50ZXJmYWNlCT0gd2Z4X3JlbW92ZV9pbnRlcmZhY2UsDQorCS50eAkJCT0gd2Z4 X3R4LA0KIH07DQogDQogYm9vbCB3ZnhfYXBpX29sZGVyX3RoYW4oc3RydWN0IHdmeF9kZXYgKndk ZXYsIGludCBtYWpvciwgaW50IG1pbm9yKQ0KQEAgLTIxNSw2ICsyMTcsNyBAQCBzdHJ1Y3Qgd2Z4 X2RldiAqd2Z4X2luaXRfY29tbW9uKHN0cnVjdCBkZXZpY2UgKmRldiwNCiAJbXV0ZXhfaW5pdCgm d2Rldi0+cnhfc3RhdHNfbG9jayk7DQogCWluaXRfY29tcGxldGlvbigmd2Rldi0+ZmlybXdhcmVf cmVhZHkpOw0KIAl3ZnhfaW5pdF9oaWZfY21kKCZ3ZGV2LT5oaWZfY21kKTsNCisJd2Z4X3R4X3F1 ZXVlc19pbml0KHdkZXYpOw0KIA0KIAlyZXR1cm4gd2RldjsNCiB9DQpAQCAtMjIyLDYgKzIyNSw3 IEBAIHN0cnVjdCB3ZnhfZGV2ICp3ZnhfaW5pdF9jb21tb24oc3RydWN0IGRldmljZSAqZGV2LA0K IHZvaWQgd2Z4X2ZyZWVfY29tbW9uKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KQ0KIHsNCiAJbXV0ZXhf ZGVzdHJveSgmd2Rldi0+cnhfc3RhdHNfbG9jayk7DQorCXdmeF90eF9xdWV1ZXNfZGVpbml0KHdk ZXYpOw0KIAlpZWVlODAyMTFfZnJlZV9odyh3ZGV2LT5odyk7DQogfQ0KIA0KZGlmZiAtLWdpdCBh L2RyaXZlcnMvc3RhZ2luZy93ZngvcXVldWUuYyBiL2RyaXZlcnMvc3RhZ2luZy93ZngvcXVldWUu Yw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAwMC4uYWE0MzhiZTIxZDM3 DQotLS0gL2Rldi9udWxsDQorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2Z4L3F1ZXVlLmMNCkBAIC0w LDAgKzEsNTI2IEBADQorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQ0K Ky8qDQorICogTygxKSBUWCBxdWV1ZSB3aXRoIGJ1aWx0LWluIGFsbG9jYXRvci4NCisgKg0KKyAq IENvcHlyaWdodCAoYykgMjAxNy0yMDE5LCBTaWxpY29uIExhYm9yYXRvcmllcywgSW5jLg0KKyAq IENvcHlyaWdodCAoYykgMjAxMCwgU1QtRXJpY3Nzb24NCisgKi8NCisjaW5jbHVkZSA8bGludXgv c2NoZWQuaD4NCisjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+DQorDQorI2luY2x1ZGUgInF1ZXVl LmgiDQorI2luY2x1ZGUgIndmeC5oIg0KKyNpbmNsdWRlICJzdGEuaCINCisjaW5jbHVkZSAiZGF0 YV90eC5oIg0KKw0KK3ZvaWQgd2Z4X3R4X2xvY2soc3RydWN0IHdmeF9kZXYgKndkZXYpDQorew0K KwlhdG9taWNfaW5jKCZ3ZGV2LT50eF9sb2NrKTsNCit9DQorDQordm9pZCB3ZnhfdHhfdW5sb2Nr KHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KQ0KK3sNCisJaW50IHR4X2xvY2sgPSBhdG9taWNfZGVjX3Jl dHVybigmd2Rldi0+dHhfbG9jayk7DQorDQorCVdBUk4odHhfbG9jayA8IDAsICJpbmNvbnNpc3Rl bnQgdHhfbG9jayB2YWx1ZSIpOw0KKwlpZiAoIXR4X2xvY2spDQorCQl3ZnhfYmhfcmVxdWVzdF90 eCh3ZGV2KTsNCit9DQorDQordm9pZCB3ZnhfdHhfZmx1c2goc3RydWN0IHdmeF9kZXYgKndkZXYp DQorew0KKwlpbnQgcmV0Ow0KKw0KKwlXQVJOKCFhdG9taWNfcmVhZCgmd2Rldi0+dHhfbG9jayks ICJ0eF9sb2NrIGlzIG5vdCBsb2NrZWQiKTsNCisNCisJLy8gRG8gbm90IHdhaXQgZm9yIGFueSBy ZXBseSBpZiBjaGlwIGlzIGZyb3plbg0KKwlpZiAod2Rldi0+Y2hpcF9mcm96ZW4pDQorCQlyZXR1 cm47DQorDQorCW11dGV4X2xvY2soJndkZXYtPmhpZl9jbWQubG9jayk7DQorCXJldCA9IHdhaXRf ZXZlbnRfdGltZW91dCh3ZGV2LT5oaWYudHhfYnVmZmVyc19lbXB0eSwNCisJCQkJICF3ZGV2LT5o aWYudHhfYnVmZmVyc191c2VkLA0KKwkJCQkgbXNlY3NfdG9famlmZmllcygzMDAwKSk7DQorCWlm ICghcmV0KSB7DQorCQlkZXZfd2Fybih3ZGV2LT5kZXYsICJjYW5ub3QgZmx1c2ggdHggYnVmZmVy cyAoJWQgc3RpbGwgYnVzeSlcbiIsIHdkZXYtPmhpZi50eF9idWZmZXJzX3VzZWQpOw0KKwkJd2Z4 X3BlbmRpbmdfZHVtcF9vbGRfZnJhbWVzKHdkZXYsIDMwMDApOw0KKwkJLy8gRklYTUU6IGRyb3Ag cGVuZGluZyBmcmFtZXMgaGVyZQ0KKwkJd2Rldi0+Y2hpcF9mcm96ZW4gPSAxOw0KKwl9DQorCW11 dGV4X3VubG9jaygmd2Rldi0+aGlmX2NtZC5sb2NrKTsNCit9DQorDQordm9pZCB3ZnhfdHhfbG9j a19mbHVzaChzdHJ1Y3Qgd2Z4X2RldiAqd2RldikNCit7DQorCXdmeF90eF9sb2NrKHdkZXYpOw0K Kwl3ZnhfdHhfZmx1c2god2Rldik7DQorfQ0KKw0KK3ZvaWQgd2Z4X3R4X3F1ZXVlc19sb2NrKHN0 cnVjdCB3ZnhfZGV2ICp3ZGV2KQ0KK3sNCisJaW50IGk7DQorCXN0cnVjdCB3ZnhfcXVldWUgKnF1 ZXVlOw0KKw0KKwlmb3IgKGkgPSAwOyBpIDwgSUVFRTgwMjExX05VTV9BQ1M7ICsraSkgew0KKwkJ cXVldWUgPSAmd2Rldi0+dHhfcXVldWVbaV07DQorCQlzcGluX2xvY2tfYmgoJnF1ZXVlLT5xdWV1 ZS5sb2NrKTsNCisJCWlmIChxdWV1ZS0+dHhfbG9ja2VkX2NudCsrID09IDApDQorCQkJaWVlZTgw MjExX3N0b3BfcXVldWUod2Rldi0+aHcsIHF1ZXVlLT5xdWV1ZV9pZCk7DQorCQlzcGluX3VubG9j a19iaCgmcXVldWUtPnF1ZXVlLmxvY2spOw0KKwl9DQorfQ0KKw0KK3ZvaWQgd2Z4X3R4X3F1ZXVl c191bmxvY2soc3RydWN0IHdmeF9kZXYgKndkZXYpDQorew0KKwlpbnQgaTsNCisJc3RydWN0IHdm eF9xdWV1ZSAqcXVldWU7DQorDQorCWZvciAoaSA9IDA7IGkgPCBJRUVFODAyMTFfTlVNX0FDUzsg KytpKSB7DQorCQlxdWV1ZSA9ICZ3ZGV2LT50eF9xdWV1ZVtpXTsNCisJCXNwaW5fbG9ja19iaCgm cXVldWUtPnF1ZXVlLmxvY2spOw0KKwkJQlVHX09OKCFxdWV1ZS0+dHhfbG9ja2VkX2NudCk7DQor CQlpZiAoLS1xdWV1ZS0+dHhfbG9ja2VkX2NudCA9PSAwKQ0KKwkJCWllZWU4MDIxMV93YWtlX3F1 ZXVlKHdkZXYtPmh3LCBxdWV1ZS0+cXVldWVfaWQpOw0KKwkJc3Bpbl91bmxvY2tfYmgoJnF1ZXVl LT5xdWV1ZS5sb2NrKTsNCisJfQ0KK30NCisNCisvKiBJZiBzdWNjZXNzZnVsLCBMT0NLUyB0aGUg VFggcXVldWUhICovDQordm9pZCB3ZnhfdHhfcXVldWVzX3dhaXRfZW1wdHlfdmlmKHN0cnVjdCB3 ZnhfdmlmICp3dmlmKQ0KK3sNCisJaW50IGk7DQorCWJvb2wgZG9uZTsNCisJc3RydWN0IHdmeF9x dWV1ZSAqcXVldWU7DQorCXN0cnVjdCBza19idWZmICppdGVtOw0KKwlzdHJ1Y3Qgd2Z4X2RldiAq d2RldiA9IHd2aWYtPndkZXY7DQorCXN0cnVjdCBoaWZfbXNnICpoaWY7DQorDQorCWlmICh3dmlm LT53ZGV2LT5jaGlwX2Zyb3plbikgew0KKwkJd2Z4X3R4X2xvY2tfZmx1c2god2Rldik7DQorCQl3 ZnhfdHhfcXVldWVzX2NsZWFyKHdkZXYpOw0KKwkJcmV0dXJuOw0KKwl9DQorDQorCWRvIHsNCisJ CWRvbmUgPSB0cnVlOw0KKwkJd2Z4X3R4X2xvY2tfZmx1c2god2Rldik7DQorCQlmb3IgKGkgPSAw OyBpIDwgSUVFRTgwMjExX05VTV9BQ1MgJiYgZG9uZTsgKytpKSB7DQorCQkJcXVldWUgPSAmd2Rl di0+dHhfcXVldWVbaV07DQorCQkJc3Bpbl9sb2NrX2JoKCZxdWV1ZS0+cXVldWUubG9jayk7DQor CQkJc2tiX3F1ZXVlX3dhbGsoJnF1ZXVlLT5xdWV1ZSwgaXRlbSkgew0KKwkJCQloaWYgPSAoc3Ry dWN0IGhpZl9tc2cgKikgaXRlbS0+ZGF0YTsNCisJCQkJaWYgKGhpZi0+aW50ZXJmYWNlID09IHd2 aWYtPmlkKQ0KKwkJCQkJZG9uZSA9IGZhbHNlOw0KKwkJCX0NCisJCQlzcGluX3VubG9ja19iaCgm cXVldWUtPnF1ZXVlLmxvY2spOw0KKwkJfQ0KKwkJaWYgKCFkb25lKSB7DQorCQkJd2Z4X3R4X3Vu bG9jayh3ZGV2KTsNCisJCQltc2xlZXAoMjApOw0KKwkJfQ0KKwl9IHdoaWxlICghZG9uZSk7DQor fQ0KKw0KK3N0YXRpYyB2b2lkIHdmeF90eF9xdWV1ZV9jbGVhcihzdHJ1Y3Qgd2Z4X2RldiAqd2Rl diwgc3RydWN0IHdmeF9xdWV1ZSAqcXVldWUsIHN0cnVjdCBza19idWZmX2hlYWQgKmdjX2xpc3Qp DQorew0KKwlpbnQgaTsNCisJc3RydWN0IHNrX2J1ZmYgKml0ZW07DQorCXN0cnVjdCB3ZnhfcXVl dWVfc3RhdHMgKnN0YXRzID0gJndkZXYtPnR4X3F1ZXVlX3N0YXRzOw0KKw0KKwlzcGluX2xvY2tf YmgoJnF1ZXVlLT5xdWV1ZS5sb2NrKTsNCisJd2hpbGUgKChpdGVtID0gX19za2JfZGVxdWV1ZSgm cXVldWUtPnF1ZXVlKSkgIT0gTlVMTCkNCisJCXNrYl9xdWV1ZV9oZWFkKGdjX2xpc3QsIGl0ZW0p Ow0KKwlzcGluX2xvY2tfYmgoJnN0YXRzLT5wZW5kaW5nLmxvY2spOw0KKwlmb3IgKGkgPSAwOyBp IDwgQVJSQVlfU0laRShzdGF0cy0+bGlua19tYXBfY2FjaGUpOyArK2kpIHsNCisJCXN0YXRzLT5s aW5rX21hcF9jYWNoZVtpXSAtPSBxdWV1ZS0+bGlua19tYXBfY2FjaGVbaV07DQorCQlxdWV1ZS0+ bGlua19tYXBfY2FjaGVbaV0gPSAwOw0KKwl9DQorCXNwaW5fdW5sb2NrX2JoKCZzdGF0cy0+cGVu ZGluZy5sb2NrKTsNCisJc3Bpbl91bmxvY2tfYmgoJnF1ZXVlLT5xdWV1ZS5sb2NrKTsNCit9DQor DQordm9pZCB3ZnhfdHhfcXVldWVzX2NsZWFyKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KQ0KK3sNCisJ aW50IGk7DQorCXN0cnVjdCBza19idWZmICppdGVtOw0KKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIGdj X2xpc3Q7DQorCXN0cnVjdCB3ZnhfcXVldWVfc3RhdHMgKnN0YXRzID0gJndkZXYtPnR4X3F1ZXVl X3N0YXRzOw0KKw0KKwlza2JfcXVldWVfaGVhZF9pbml0KCZnY19saXN0KTsNCisJZm9yIChpID0g MDsgaSA8IElFRUU4MDIxMV9OVU1fQUNTOyArK2kpDQorCQl3ZnhfdHhfcXVldWVfY2xlYXIod2Rl diwgJndkZXYtPnR4X3F1ZXVlW2ldLCAmZ2NfbGlzdCk7DQorCXdha2VfdXAoJnN0YXRzLT53YWl0 X2xpbmtfaWRfZW1wdHkpOw0KKwl3aGlsZSAoKGl0ZW0gPSBza2JfZGVxdWV1ZSgmZ2NfbGlzdCkp ICE9IE5VTEwpDQorCQl3Znhfc2tiX2R0b3Iod2RldiwgaXRlbSk7DQorfQ0KKw0KK3ZvaWQgd2Z4 X3R4X3F1ZXVlc19pbml0KHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KQ0KK3sNCisJaW50IGk7DQorDQor CW1lbXNldCgmd2Rldi0+dHhfcXVldWVfc3RhdHMsIDAsIHNpemVvZih3ZGV2LT50eF9xdWV1ZV9z dGF0cykpOw0KKwltZW1zZXQod2Rldi0+dHhfcXVldWUsIDAsIHNpemVvZih3ZGV2LT50eF9xdWV1 ZSkpOw0KKwlza2JfcXVldWVfaGVhZF9pbml0KCZ3ZGV2LT50eF9xdWV1ZV9zdGF0cy5wZW5kaW5n KTsNCisJaW5pdF93YWl0cXVldWVfaGVhZCgmd2Rldi0+dHhfcXVldWVfc3RhdHMud2FpdF9saW5r X2lkX2VtcHR5KTsNCisNCisJZm9yIChpID0gMDsgaSA8IElFRUU4MDIxMV9OVU1fQUNTOyArK2kp IHsNCisJCXdkZXYtPnR4X3F1ZXVlW2ldLnF1ZXVlX2lkID0gaTsNCisJCXNrYl9xdWV1ZV9oZWFk X2luaXQoJndkZXYtPnR4X3F1ZXVlW2ldLnF1ZXVlKTsNCisJfQ0KK30NCisNCit2b2lkIHdmeF90 eF9xdWV1ZXNfZGVpbml0KHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KQ0KK3sNCisJV0FSTl9PTighc2ti X3F1ZXVlX2VtcHR5KCZ3ZGV2LT50eF9xdWV1ZV9zdGF0cy5wZW5kaW5nKSk7DQorCXdmeF90eF9x dWV1ZXNfY2xlYXIod2Rldik7DQorfQ0KKw0KK3NpemVfdCB3ZnhfdHhfcXVldWVfZ2V0X251bV9x dWV1ZWQoc3RydWN0IHdmeF9xdWV1ZSAqcXVldWUsDQorCQkJCSAgIHUzMiBsaW5rX2lkX21hcCkN Cit7DQorCXNpemVfdCByZXQ7DQorCWludCBpLCBiaXQ7DQorDQorCWlmICghbGlua19pZF9tYXAp DQorCQlyZXR1cm4gMDsNCisNCisJc3Bpbl9sb2NrX2JoKCZxdWV1ZS0+cXVldWUubG9jayk7DQor CWlmIChsaW5rX2lkX21hcCA9PSAodTMyKS0xKSB7DQorCQlyZXQgPSBza2JfcXVldWVfbGVuKCZx dWV1ZS0+cXVldWUpOw0KKwl9IGVsc2Ugew0KKwkJcmV0ID0gMDsNCisJCWZvciAoaSA9IDAsIGJp dCA9IDE7IGkgPCBBUlJBWV9TSVpFKHF1ZXVlLT5saW5rX21hcF9jYWNoZSk7ICsraSwgYml0IDw8 PSAxKSB7DQorCQkJaWYgKGxpbmtfaWRfbWFwICYgYml0KQ0KKwkJCQlyZXQgKz0gcXVldWUtPmxp bmtfbWFwX2NhY2hlW2ldOw0KKwkJfQ0KKwl9DQorCXNwaW5fdW5sb2NrX2JoKCZxdWV1ZS0+cXVl dWUubG9jayk7DQorCXJldHVybiByZXQ7DQorfQ0KKw0KK3ZvaWQgd2Z4X3R4X3F1ZXVlX3B1dChz dHJ1Y3Qgd2Z4X2RldiAqd2Rldiwgc3RydWN0IHdmeF9xdWV1ZSAqcXVldWUsIHN0cnVjdCBza19i dWZmICpza2IpDQorew0KKwlzdHJ1Y3Qgd2Z4X3F1ZXVlX3N0YXRzICpzdGF0cyA9ICZ3ZGV2LT50 eF9xdWV1ZV9zdGF0czsNCisJc3RydWN0IHdmeF90eF9wcml2ICp0eF9wcml2ID0gd2Z4X3NrYl90 eF9wcml2KHNrYik7DQorDQorCVdBUk4odHhfcHJpdi0+bGlua19pZCA+PSBBUlJBWV9TSVpFKHN0 YXRzLT5saW5rX21hcF9jYWNoZSksICJpbnZhbGlkIGxpbmstaWQgdmFsdWUiKTsNCisJc3Bpbl9s b2NrX2JoKCZxdWV1ZS0+cXVldWUubG9jayk7DQorCV9fc2tiX3F1ZXVlX3RhaWwoJnF1ZXVlLT5x dWV1ZSwgc2tiKTsNCisNCisJKytxdWV1ZS0+bGlua19tYXBfY2FjaGVbdHhfcHJpdi0+bGlua19p ZF07DQorDQorCXNwaW5fbG9ja19iaCgmc3RhdHMtPnBlbmRpbmcubG9jayk7DQorCSsrc3RhdHMt PmxpbmtfbWFwX2NhY2hlW3R4X3ByaXYtPmxpbmtfaWRdOw0KKwlzcGluX3VubG9ja19iaCgmc3Rh dHMtPnBlbmRpbmcubG9jayk7DQorCXNwaW5fdW5sb2NrX2JoKCZxdWV1ZS0+cXVldWUubG9jayk7 DQorfQ0KKw0KK3N0cnVjdCBza19idWZmICp3ZnhfdHhfcXVldWVfZ2V0KHN0cnVjdCB3ZnhfZGV2 ICp3ZGV2LCBzdHJ1Y3Qgd2Z4X3F1ZXVlICpxdWV1ZSwgdTMyIGxpbmtfaWRfbWFwKQ0KK3sNCisJ c3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7DQorCXN0cnVjdCBza19idWZmICppdGVtOw0KKwlz dHJ1Y3Qgd2Z4X3F1ZXVlX3N0YXRzICpzdGF0cyA9ICZ3ZGV2LT50eF9xdWV1ZV9zdGF0czsNCisJ c3RydWN0IHdmeF90eF9wcml2ICp0eF9wcml2Ow0KKwlib29sIHdha2V1cF9zdGF0cyA9IGZhbHNl Ow0KKw0KKwlzcGluX2xvY2tfYmgoJnF1ZXVlLT5xdWV1ZS5sb2NrKTsNCisJc2tiX3F1ZXVlX3dh bGsoJnF1ZXVlLT5xdWV1ZSwgaXRlbSkgew0KKwkJdHhfcHJpdiA9IHdmeF9za2JfdHhfcHJpdihp dGVtKTsNCisJCWlmIChsaW5rX2lkX21hcCAmIEJJVCh0eF9wcml2LT5saW5rX2lkKSkgew0KKwkJ CXNrYiA9IGl0ZW07DQorCQkJYnJlYWs7DQorCQl9DQorCX0NCisJV0FSTl9PTighc2tiKTsNCisJ aWYgKHNrYikgew0KKwkJdHhfcHJpdiA9IHdmeF9za2JfdHhfcHJpdihza2IpOw0KKwkJdHhfcHJp di0+eG1pdF90aW1lc3RhbXAgPSBrdGltZV9nZXQoKTsNCisJCV9fc2tiX3VubGluayhza2IsICZx dWV1ZS0+cXVldWUpOw0KKwkJLS1xdWV1ZS0+bGlua19tYXBfY2FjaGVbdHhfcHJpdi0+bGlua19p ZF07DQorDQorCQlzcGluX2xvY2tfYmgoJnN0YXRzLT5wZW5kaW5nLmxvY2spOw0KKwkJX19za2Jf cXVldWVfdGFpbCgmc3RhdHMtPnBlbmRpbmcsIHNrYik7DQorCQlpZiAoIS0tc3RhdHMtPmxpbmtf bWFwX2NhY2hlW3R4X3ByaXYtPmxpbmtfaWRdKQ0KKwkJCXdha2V1cF9zdGF0cyA9IHRydWU7DQor CQlzcGluX3VubG9ja19iaCgmc3RhdHMtPnBlbmRpbmcubG9jayk7DQorCX0NCisJc3Bpbl91bmxv Y2tfYmgoJnF1ZXVlLT5xdWV1ZS5sb2NrKTsNCisJaWYgKHdha2V1cF9zdGF0cykNCisJCXdha2Vf dXAoJnN0YXRzLT53YWl0X2xpbmtfaWRfZW1wdHkpOw0KKwlyZXR1cm4gc2tiOw0KK30NCisNCitp bnQgd2Z4X3BlbmRpbmdfcmVxdWV1ZShzdHJ1Y3Qgd2Z4X2RldiAqd2Rldiwgc3RydWN0IHNrX2J1 ZmYgKnNrYikNCit7DQorCXN0cnVjdCB3ZnhfcXVldWVfc3RhdHMgKnN0YXRzID0gJndkZXYtPnR4 X3F1ZXVlX3N0YXRzOw0KKwlzdHJ1Y3Qgd2Z4X3R4X3ByaXYgKnR4X3ByaXYgPSB3Znhfc2tiX3R4 X3ByaXYoc2tiKTsNCisJc3RydWN0IHdmeF9xdWV1ZSAqcXVldWUgPSAmd2Rldi0+dHhfcXVldWVb c2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYildOw0KKw0KKwlXQVJOX09OKHNrYl9nZXRfcXVldWVf bWFwcGluZyhza2IpID4gMyk7DQorCXNwaW5fbG9ja19iaCgmcXVldWUtPnF1ZXVlLmxvY2spOw0K KwkrK3F1ZXVlLT5saW5rX21hcF9jYWNoZVt0eF9wcml2LT5saW5rX2lkXTsNCisNCisJc3Bpbl9s b2NrX2JoKCZzdGF0cy0+cGVuZGluZy5sb2NrKTsNCisJKytzdGF0cy0+bGlua19tYXBfY2FjaGVb dHhfcHJpdi0+bGlua19pZF07DQorCV9fc2tiX3VubGluayhza2IsICZzdGF0cy0+cGVuZGluZyk7 DQorCXNwaW5fdW5sb2NrX2JoKCZzdGF0cy0+cGVuZGluZy5sb2NrKTsNCisJX19za2JfcXVldWVf dGFpbCgmcXVldWUtPnF1ZXVlLCBza2IpOw0KKwlzcGluX3VubG9ja19iaCgmcXVldWUtPnF1ZXVl LmxvY2spOw0KKwlyZXR1cm4gMDsNCit9DQorDQoraW50IHdmeF9wZW5kaW5nX3JlbW92ZShzdHJ1 Y3Qgd2Z4X2RldiAqd2Rldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikNCit7DQorCXN0cnVjdCB3Znhf cXVldWVfc3RhdHMgKnN0YXRzID0gJndkZXYtPnR4X3F1ZXVlX3N0YXRzOw0KKw0KKwlzcGluX2xv Y2tfYmgoJnN0YXRzLT5wZW5kaW5nLmxvY2spOw0KKwlfX3NrYl91bmxpbmsoc2tiLCAmc3RhdHMt PnBlbmRpbmcpOw0KKwlzcGluX3VubG9ja19iaCgmc3RhdHMtPnBlbmRpbmcubG9jayk7DQorCXdm eF9za2JfZHRvcih3ZGV2LCBza2IpOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RydWN0IHNr X2J1ZmYgKndmeF9wZW5kaW5nX2dldChzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgdTMyIHBhY2tldF9p ZCkNCit7DQorCXN0cnVjdCBza19idWZmICpza2I7DQorCXN0cnVjdCBoaWZfcmVxX3R4ICpyZXE7 DQorCXN0cnVjdCB3ZnhfcXVldWVfc3RhdHMgKnN0YXRzID0gJndkZXYtPnR4X3F1ZXVlX3N0YXRz Ow0KKw0KKwlzcGluX2xvY2tfYmgoJnN0YXRzLT5wZW5kaW5nLmxvY2spOw0KKwlza2JfcXVldWVf d2Fsaygmc3RhdHMtPnBlbmRpbmcsIHNrYikgew0KKwkJcmVxID0gd2Z4X3NrYl90eHJlcShza2Ip Ow0KKwkJaWYgKHJlcS0+cGFja2V0X2lkID09IHBhY2tldF9pZCkgew0KKwkJCXNwaW5fdW5sb2Nr X2JoKCZzdGF0cy0+cGVuZGluZy5sb2NrKTsNCisJCQlyZXR1cm4gc2tiOw0KKwkJfQ0KKwl9DQor CVdBUk5fT04oMSk7DQorCXNwaW5fdW5sb2NrX2JoKCZzdGF0cy0+cGVuZGluZy5sb2NrKTsNCisJ cmV0dXJuIE5VTEw7DQorfQ0KKw0KK3ZvaWQgd2Z4X3BlbmRpbmdfZHVtcF9vbGRfZnJhbWVzKHN0 cnVjdCB3ZnhfZGV2ICp3ZGV2LCB1bnNpZ25lZCBpbnQgbGltaXRfbXMpDQorew0KKwlzdHJ1Y3Qg d2Z4X3F1ZXVlX3N0YXRzICpzdGF0cyA9ICZ3ZGV2LT50eF9xdWV1ZV9zdGF0czsNCisJa3RpbWVf dCBub3cgPSBrdGltZV9nZXQoKTsNCisJc3RydWN0IHdmeF90eF9wcml2ICp0eF9wcml2Ow0KKwlz dHJ1Y3QgaGlmX3JlcV90eCAqcmVxOw0KKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOw0KKwlib29sIGZp cnN0ID0gdHJ1ZTsNCisNCisJc3Bpbl9sb2NrX2JoKCZzdGF0cy0+cGVuZGluZy5sb2NrKTsNCisJ c2tiX3F1ZXVlX3dhbGsoJnN0YXRzLT5wZW5kaW5nLCBza2IpIHsNCisJCXR4X3ByaXYgPSB3Znhf c2tiX3R4X3ByaXYoc2tiKTsNCisJCXJlcSA9IHdmeF9za2JfdHhyZXEoc2tiKTsNCisJCWlmIChr dGltZV9hZnRlcihub3csIGt0aW1lX2FkZF9tcyh0eF9wcml2LT54bWl0X3RpbWVzdGFtcCwgbGlt aXRfbXMpKSkgew0KKwkJCWlmIChmaXJzdCkgew0KKwkJCQlkZXZfaW5mbyh3ZGV2LT5kZXYsICJm cmFtZXMgc3R1Y2sgaW4gZmlybXdhcmUgc2luY2UgJWRtcyBvciBtb3JlOlxuIiwNCisJCQkJCSBs aW1pdF9tcyk7DQorCQkJCWZpcnN0ID0gZmFsc2U7DQorCQkJfQ0KKwkJCWRldl9pbmZvKHdkZXYt PmRldiwgIiAgIGlkICUwOHggc2VudCAlbGxkbXMgYWdvXG4iLA0KKwkJCQkgcmVxLT5wYWNrZXRf aWQsDQorCQkJCSBrdGltZV9tc19kZWx0YShub3csIHR4X3ByaXYtPnhtaXRfdGltZXN0YW1wKSk7 DQorCQl9DQorCX0NCisJc3Bpbl91bmxvY2tfYmgoJnN0YXRzLT5wZW5kaW5nLmxvY2spOw0KK30N CisNCit1bnNpZ25lZCBpbnQgd2Z4X3BlbmRpbmdfZ2V0X3BrdF91c19kZWxheShzdHJ1Y3Qgd2Z4 X2RldiAqd2Rldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikNCit7DQorCWt0aW1lX3Qgbm93ID0ga3Rp bWVfZ2V0KCk7DQorCXN0cnVjdCB3ZnhfdHhfcHJpdiAqdHhfcHJpdiA9IHdmeF9za2JfdHhfcHJp dihza2IpOw0KKw0KKwlyZXR1cm4ga3RpbWVfdXNfZGVsdGEobm93LCB0eF9wcml2LT54bWl0X3Rp bWVzdGFtcCk7DQorfQ0KKw0KK2Jvb2wgd2Z4X3R4X3F1ZXVlc19pc19lbXB0eShzdHJ1Y3Qgd2Z4 X2RldiAqd2RldikNCit7DQorCWludCBpOw0KKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpxdWV1ZTsN CisJYm9vbCByZXQgPSB0cnVlOw0KKw0KKwlmb3IgKGkgPSAwOyBpIDwgSUVFRTgwMjExX05VTV9B Q1M7IGkrKykgew0KKwkJcXVldWUgPSAmd2Rldi0+dHhfcXVldWVbaV0ucXVldWU7DQorCQlzcGlu X2xvY2tfYmgoJnF1ZXVlLT5sb2NrKTsNCisJCWlmICghc2tiX3F1ZXVlX2VtcHR5KHF1ZXVlKSkN CisJCQlyZXQgPSBmYWxzZTsNCisJCXNwaW5fdW5sb2NrX2JoKCZxdWV1ZS0+bG9jayk7DQorCX0N CisJcmV0dXJuIHJldDsNCit9DQorDQorc3RhdGljIGludCB3ZnhfZ2V0X3ByaW9fcXVldWUoc3Ry dWN0IHdmeF92aWYgKnd2aWYsDQorCQkJCSB1MzIgdHhfYWxsb3dlZF9tYXNrLCBpbnQgKnRvdGFs KQ0KK3sNCisJc3RhdGljIGNvbnN0IGludCB1cmdlbnQgPSBCSVQoV0ZYX0xJTktfSURfQUZURVJf RFRJTSkgfA0KKwkJQklUKFdGWF9MSU5LX0lEX1VBUFNEKTsNCisJc3RydWN0IGhpZl9yZXFfZWRj YV9xdWV1ZV9wYXJhbXMgKmVkY2E7DQorCXVuc2lnbmVkIGludCBzY29yZSwgYmVzdCA9IC0xOw0K KwlpbnQgd2lubmVyID0gLTE7DQorCWludCBpOw0KKw0KKwkvKiBzZWFyY2ggZm9yIGEgd2lubmVy IHVzaW5nIGVkY2EgcGFyYW1zICovDQorCWZvciAoaSA9IDA7IGkgPCBJRUVFODAyMTFfTlVNX0FD UzsgKytpKSB7DQorCQlpbnQgcXVldWVkOw0KKw0KKwkJZWRjYSA9ICZ3dmlmLT5lZGNhLnBhcmFt c1tpXTsNCisJCXF1ZXVlZCA9IHdmeF90eF9xdWV1ZV9nZXRfbnVtX3F1ZXVlZCgmd3ZpZi0+d2Rl di0+dHhfcXVldWVbaV0sDQorCQkJCXR4X2FsbG93ZWRfbWFzayk7DQorCQlpZiAoIXF1ZXVlZCkN CisJCQljb250aW51ZTsNCisJCSp0b3RhbCArPSBxdWV1ZWQ7DQorCQlzY29yZSA9ICgoZWRjYS0+ YWlmc24gKyBlZGNhLT5jd19taW4pIDw8IDE2KSArDQorCQkJKChlZGNhLT5jd19tYXggLSBlZGNh LT5jd19taW4pICoNCisJCQkgKGdldF9yYW5kb21faW50KCkgJiAweEZGRkYpKTsNCisJCWlmIChz Y29yZSA8IGJlc3QgJiYgKHdpbm5lciA8IDAgfHwgaSAhPSAzKSkgew0KKwkJCWJlc3QgPSBzY29y ZTsNCisJCQl3aW5uZXIgPSBpOw0KKwkJfQ0KKwl9DQorDQorCS8qIG92ZXJyaWRlIHdpbm5lciBp ZiBidXJzdGluZyAqLw0KKwlpZiAod2lubmVyID49IDAgJiYgd3ZpZi0+d2Rldi0+dHhfYnVyc3Rf aWR4ID49IDAgJiYNCisJICAgIHdpbm5lciAhPSB3dmlmLT53ZGV2LT50eF9idXJzdF9pZHggJiYN CisJICAgICF3ZnhfdHhfcXVldWVfZ2V0X251bV9xdWV1ZWQoJnd2aWYtPndkZXYtPnR4X3F1ZXVl W3dpbm5lcl0sIHR4X2FsbG93ZWRfbWFzayAmIHVyZ2VudCkgJiYNCisJICAgIHdmeF90eF9xdWV1 ZV9nZXRfbnVtX3F1ZXVlZCgmd3ZpZi0+d2Rldi0+dHhfcXVldWVbd3ZpZi0+d2Rldi0+dHhfYnVy c3RfaWR4XSwgdHhfYWxsb3dlZF9tYXNrKSkNCisJCXdpbm5lciA9IHd2aWYtPndkZXYtPnR4X2J1 cnN0X2lkeDsNCisNCisJcmV0dXJuIHdpbm5lcjsNCit9DQorDQorc3RhdGljIGludCB3ZnhfdHhf cXVldWVfbWFza19nZXQoc3RydWN0IHdmeF92aWYgKnd2aWYsDQorCQkJCSAgICAgc3RydWN0IHdm eF9xdWV1ZSAqKnF1ZXVlX3AsDQorCQkJCSAgICAgdTMyICp0eF9hbGxvd2VkX21hc2tfcCwNCisJ CQkJICAgICBib29sICptb3JlKQ0KK3sNCisJaW50IGlkeDsNCisJdTMyIHR4X2FsbG93ZWRfbWFz azsNCisJaW50IHRvdGFsID0gMDsNCisNCisJLyogU2VhcmNoIGZvciBhIHF1ZXVlIHdpdGggbXVs dGljYXN0IGZyYW1lcyBidWZmZXJlZCAqLw0KKwlpZiAod3ZpZi0+bWNhc3RfdHgpIHsNCisJCXR4 X2FsbG93ZWRfbWFzayA9IEJJVChXRlhfTElOS19JRF9BRlRFUl9EVElNKTsNCisJCWlkeCA9IHdm eF9nZXRfcHJpb19xdWV1ZSh3dmlmLCB0eF9hbGxvd2VkX21hc2ssICZ0b3RhbCk7DQorCQlpZiAo aWR4ID49IDApIHsNCisJCQkqbW9yZSA9IHRvdGFsID4gMTsNCisJCQlnb3RvIGZvdW5kOw0KKwkJ fQ0KKwl9DQorDQorCS8qIFNlYXJjaCBmb3IgdW5pY2FzdCB0cmFmZmljICovDQorCXR4X2FsbG93 ZWRfbWFzayA9IH53dmlmLT5zdGFfYXNsZWVwX21hc2s7DQorCXR4X2FsbG93ZWRfbWFzayB8PSBC SVQoV0ZYX0xJTktfSURfVUFQU0QpOw0KKwlpZiAod3ZpZi0+c3RhX2FzbGVlcF9tYXNrKSB7DQor CQl0eF9hbGxvd2VkX21hc2sgfD0gd3ZpZi0+cHNwb2xsX21hc2s7DQorCQl0eF9hbGxvd2VkX21h c2sgJj0gfkJJVChXRlhfTElOS19JRF9BRlRFUl9EVElNKTsNCisJfSBlbHNlIHsNCisJCXR4X2Fs bG93ZWRfbWFzayB8PSBCSVQoV0ZYX0xJTktfSURfQUZURVJfRFRJTSk7DQorCX0NCisJaWR4ID0g d2Z4X2dldF9wcmlvX3F1ZXVlKHd2aWYsIHR4X2FsbG93ZWRfbWFzaywgJnRvdGFsKTsNCisJaWYg KGlkeCA8IDApDQorCQlyZXR1cm4gLUVOT0VOVDsNCisNCitmb3VuZDoNCisJKnF1ZXVlX3AgPSAm d3ZpZi0+d2Rldi0+dHhfcXVldWVbaWR4XTsNCisJKnR4X2FsbG93ZWRfbWFza19wID0gdHhfYWxs b3dlZF9tYXNrOw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RydWN0IGhpZl9tc2cgKndmeF90eF9x dWV1ZXNfZ2V0KHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KQ0KK3sNCisJc3RydWN0IHNrX2J1ZmYgKnNr YjsNCisJc3RydWN0IGhpZl9tc2cgKmhpZiA9IE5VTEw7DQorCXN0cnVjdCBoaWZfcmVxX3R4ICpy ZXEgPSBOVUxMOw0KKwlzdHJ1Y3Qgd2Z4X3F1ZXVlICpxdWV1ZSA9IE5VTEw7DQorCXN0cnVjdCB3 ZnhfcXVldWUgKnZpZl9xdWV1ZSA9IE5VTEw7DQorCXUzMiB0eF9hbGxvd2VkX21hc2sgPSAwOw0K Kwl1MzIgdmlmX3R4X2FsbG93ZWRfbWFzayA9IDA7DQorCWNvbnN0IHN0cnVjdCB3ZnhfdHhfcHJp diAqdHhfcHJpdiA9IE5VTEw7DQorCXN0cnVjdCB3ZnhfdmlmICp3dmlmOw0KKwkvKiBNb3JlIGlz IHVzZWQgb25seSBmb3IgYnJvYWRjYXN0cy4gKi8NCisJYm9vbCBtb3JlID0gZmFsc2U7DQorCWJv b2wgdmlmX21vcmUgPSBmYWxzZTsNCisJaW50IG5vdF9mb3VuZDsNCisJaW50IGJ1cnN0Ow0KKw0K Kwlmb3IgKDs7KSB7DQorCQlpbnQgcmV0ID0gLUVOT0VOVDsNCisJCWludCBxdWV1ZV9udW07DQor CQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOw0KKw0KKwkJaWYgKGF0b21pY19yZWFkKCZ3ZGV2 LT50eF9sb2NrKSkNCisJCQlyZXR1cm4gTlVMTDsNCisNCisJCXd2aWYgPSBOVUxMOw0KKwkJd2hp bGUgKCh3dmlmID0gd3ZpZl9pdGVyYXRlKHdkZXYsIHd2aWYpKSAhPSBOVUxMKSB7DQorCQkJc3Bp bl9sb2NrX2JoKCZ3dmlmLT5wc19zdGF0ZV9sb2NrKTsNCisNCisJCQlub3RfZm91bmQgPSB3Znhf dHhfcXVldWVfbWFza19nZXQod3ZpZiwgJnZpZl9xdWV1ZSwgJnZpZl90eF9hbGxvd2VkX21hc2ss ICZ2aWZfbW9yZSk7DQorDQorCQkJaWYgKHd2aWYtPm1jYXN0X2J1ZmZlcmVkICYmIChub3RfZm91 bmQgfHwgIXZpZl9tb3JlKSAmJg0KKwkJCQkJKHd2aWYtPm1jYXN0X3R4IHx8ICF3dmlmLT5zdGFf YXNsZWVwX21hc2spKSB7DQorCQkJCXd2aWYtPm1jYXN0X2J1ZmZlcmVkID0gZmFsc2U7DQorCQkJ CWlmICh3dmlmLT5tY2FzdF90eCkgew0KKwkJCQkJd3ZpZi0+bWNhc3RfdHggPSBmYWxzZTsNCisJ CQkJCXNjaGVkdWxlX3dvcmsoJnd2aWYtPm1jYXN0X3N0b3Bfd29yayk7DQorCQkJCX0NCisJCQl9 DQorDQorCQkJc3Bpbl91bmxvY2tfYmgoJnd2aWYtPnBzX3N0YXRlX2xvY2spOw0KKw0KKwkJCWlm ICh2aWZfbW9yZSkgew0KKwkJCQltb3JlID0gMTsNCisJCQkJdHhfYWxsb3dlZF9tYXNrID0gdmlm X3R4X2FsbG93ZWRfbWFzazsNCisJCQkJcXVldWUgPSB2aWZfcXVldWU7DQorCQkJCXJldCA9IDA7 DQorCQkJCWJyZWFrOw0KKwkJCX0gZWxzZSBpZiAoIW5vdF9mb3VuZCkgew0KKwkJCQlpZiAocXVl dWUgJiYgcXVldWUgIT0gdmlmX3F1ZXVlKQ0KKwkJCQkJZGV2X2luZm8od2Rldi0+ZGV2LCAidmlm cyBkaXNhZ3JlZSBhYm91dCBxdWV1ZSBwcmlvcml0eVxuIik7DQorCQkJCXR4X2FsbG93ZWRfbWFz ayB8PSB2aWZfdHhfYWxsb3dlZF9tYXNrOw0KKwkJCQlxdWV1ZSA9IHZpZl9xdWV1ZTsNCisJCQkJ cmV0ID0gMDsNCisJCQl9DQorCQl9DQorDQorCQlpZiAocmV0KQ0KKwkJCXJldHVybiAwOw0KKw0K KwkJcXVldWVfbnVtID0gcXVldWUgLSB3ZGV2LT50eF9xdWV1ZTsNCisNCisJCXNrYiA9IHdmeF90 eF9xdWV1ZV9nZXQod2RldiwgcXVldWUsIHR4X2FsbG93ZWRfbWFzayk7DQorCQlpZiAoIXNrYikN CisJCQljb250aW51ZTsNCisJCXR4X3ByaXYgPSB3Znhfc2tiX3R4X3ByaXYoc2tiKTsNCisJCWhp ZiA9IChzdHJ1Y3QgaGlmX21zZyAqKSBza2ItPmRhdGE7DQorCQl3dmlmID0gd2Rldl90b193dmlm KHdkZXYsIGhpZi0+aW50ZXJmYWNlKTsNCisJCVdBUk5fT04oIXd2aWYpOw0KKw0KKwkJd3ZpZi0+ cHNwb2xsX21hc2sgJj0gfkJJVCh0eF9wcml2LT5yYXdfbGlua19pZCk7DQorDQorCQkvKiBhbGxv dyBidXJzdGluZyBpZiB0eG9wIGlzIHNldCAqLw0KKwkJaWYgKHd2aWYtPmVkY2EucGFyYW1zW3F1 ZXVlX251bV0udHhfb3BfbGltaXQpDQorCQkJYnVyc3QgPSAoaW50KXdmeF90eF9xdWV1ZV9nZXRf bnVtX3F1ZXVlZChxdWV1ZSwgdHhfYWxsb3dlZF9tYXNrKSArIDE7DQorCQllbHNlDQorCQkJYnVy c3QgPSAxOw0KKw0KKwkJLyogc3RvcmUgaW5kZXggb2YgYnVyc3RpbmcgcXVldWUgKi8NCisJCWlm IChidXJzdCA+IDEpDQorCQkJd2Rldi0+dHhfYnVyc3RfaWR4ID0gcXVldWVfbnVtOw0KKwkJZWxz ZQ0KKwkJCXdkZXYtPnR4X2J1cnN0X2lkeCA9IC0xOw0KKw0KKwkJLyogbW9yZSBidWZmZXJlZCBt dWx0aWNhc3QvYnJvYWRjYXN0IGZyYW1lcw0KKwkJICogID09PiBzZXQgTW9yZURhdGEgZmxhZyBp biBJRUVFIDgwMi4xMSBoZWFkZXINCisJCSAqICB0byBpbmZvcm0gUFMgU1RBcw0KKwkJICovDQor CQlpZiAobW9yZSkgew0KKwkJCXJlcSA9IChzdHJ1Y3QgaGlmX3JlcV90eCAqKSBoaWYtPmJvZHk7 DQorCQkJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIChyZXEtPmZyYW1lICsgcmVxLT5k YXRhX2ZsYWdzLmZjX29mZnNldCk7DQorCQkJaGRyLT5mcmFtZV9jb250cm9sIHw9IGNwdV90b19s ZTE2KElFRUU4MDIxMV9GQ1RMX01PUkVEQVRBKTsNCisJCX0NCisJCXJldHVybiBoaWY7DQorCX0N Cit9DQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dmeC9xdWV1ZS5oIGIvZHJpdmVycy9z dGFnaW5nL3dmeC9xdWV1ZS5oDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAw MDAwLi45MzhkYmYzNDY5ZTcNCi0tLSAvZGV2L251bGwNCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93 ZngvcXVldWUuaA0KQEAgLTAsMCArMSw1OSBAQA0KKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy OiBHUEwtMi4wLW9ubHkgKi8NCisvKg0KKyAqIE8oMSkgVFggcXVldWUgd2l0aCBidWlsdC1pbiBh bGxvY2F0b3IuDQorICoNCisgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAxOCwgU2lsaWNvbiBMYWJv cmF0b3JpZXMsIEluYy4NCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIFNULUVyaWNzc29uDQorICov DQorI2lmbmRlZiBXRlhfUVVFVUVfSA0KKyNkZWZpbmUgV0ZYX1FVRVVFX0gNCisNCisjaW5jbHVk ZSA8bGludXgvc2tidWZmLmg+DQorDQorI2luY2x1ZGUgImhpZl9hcGlfY21kLmgiDQorDQorI2Rl ZmluZSBXRlhfTUFYX1NUQV9JTl9BUF9NT0RFICAgIDE0DQorI2RlZmluZSBXRlhfTElOS19JRF9B RlRFUl9EVElNICAgIChXRlhfTUFYX1NUQV9JTl9BUF9NT0RFICsgMSkNCisjZGVmaW5lIFdGWF9M SU5LX0lEX1VBUFNEICAgICAgICAgKFdGWF9NQVhfU1RBX0lOX0FQX01PREUgKyAyKQ0KKyNkZWZp bmUgV0ZYX0xJTktfSURfTUFYICAgICAgICAgICAoV0ZYX01BWF9TVEFfSU5fQVBfTU9ERSArIDMp DQorDQorc3RydWN0IHdmeF9kZXY7DQorc3RydWN0IHdmeF92aWY7DQorDQorc3RydWN0IHdmeF9x dWV1ZSB7DQorCXN0cnVjdCBza19idWZmX2hlYWQJcXVldWU7DQorCWludAkJCXR4X2xvY2tlZF9j bnQ7DQorCWludAkJCWxpbmtfbWFwX2NhY2hlW1dGWF9MSU5LX0lEX01BWF07DQorCXU4CQkJcXVl dWVfaWQ7DQorfTsNCisNCitzdHJ1Y3Qgd2Z4X3F1ZXVlX3N0YXRzIHsNCisJaW50CQkJbGlua19t YXBfY2FjaGVbV0ZYX0xJTktfSURfTUFYXTsNCisJc3RydWN0IHNrX2J1ZmZfaGVhZAlwZW5kaW5n Ow0KKwl3YWl0X3F1ZXVlX2hlYWRfdAl3YWl0X2xpbmtfaWRfZW1wdHk7DQorfTsNCisNCit2b2lk IHdmeF90eF9sb2NrKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KTsNCit2b2lkIHdmeF90eF91bmxvY2so c3RydWN0IHdmeF9kZXYgKndkZXYpOw0KK3ZvaWQgd2Z4X3R4X2ZsdXNoKHN0cnVjdCB3ZnhfZGV2 ICp3ZGV2KTsNCit2b2lkIHdmeF90eF9sb2NrX2ZsdXNoKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KTsN CisNCit2b2lkIHdmeF90eF9xdWV1ZXNfaW5pdChzdHJ1Y3Qgd2Z4X2RldiAqd2Rldik7DQordm9p ZCB3ZnhfdHhfcXVldWVzX2RlaW5pdChzdHJ1Y3Qgd2Z4X2RldiAqd2Rldik7DQordm9pZCB3Znhf dHhfcXVldWVzX2xvY2soc3RydWN0IHdmeF9kZXYgKndkZXYpOw0KK3ZvaWQgd2Z4X3R4X3F1ZXVl c191bmxvY2soc3RydWN0IHdmeF9kZXYgKndkZXYpOw0KK3ZvaWQgd2Z4X3R4X3F1ZXVlc19jbGVh cihzdHJ1Y3Qgd2Z4X2RldiAqd2Rldik7DQorYm9vbCB3ZnhfdHhfcXVldWVzX2lzX2VtcHR5KHN0 cnVjdCB3ZnhfZGV2ICp3ZGV2KTsNCit2b2lkIHdmeF90eF9xdWV1ZXNfd2FpdF9lbXB0eV92aWYo c3RydWN0IHdmeF92aWYgKnd2aWYpOw0KK3N0cnVjdCBoaWZfbXNnICp3ZnhfdHhfcXVldWVzX2dl dChzdHJ1Y3Qgd2Z4X2RldiAqd2Rldik7DQorDQordm9pZCB3ZnhfdHhfcXVldWVfcHV0KHN0cnVj dCB3ZnhfZGV2ICp3ZGV2LCBzdHJ1Y3Qgd2Z4X3F1ZXVlICpxdWV1ZSwgc3RydWN0IHNrX2J1ZmYg KnNrYik7DQorc2l6ZV90IHdmeF90eF9xdWV1ZV9nZXRfbnVtX3F1ZXVlZChzdHJ1Y3Qgd2Z4X3F1 ZXVlICpxdWV1ZSwgdTMyIGxpbmtfaWRfbWFwKTsNCisNCitzdHJ1Y3Qgc2tfYnVmZiAqd2Z4X3Bl bmRpbmdfZ2V0KHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCB1MzIgcGFja2V0X2lkKTsNCitpbnQgd2Z4 X3BlbmRpbmdfcmVtb3ZlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2ti KTsNCitpbnQgd2Z4X3BlbmRpbmdfcmVxdWV1ZShzdHJ1Y3Qgd2Z4X2RldiAqd2Rldiwgc3RydWN0 IHNrX2J1ZmYgKnNrYik7DQordW5zaWduZWQgaW50IHdmeF9wZW5kaW5nX2dldF9wa3RfdXNfZGVs YXkoc3RydWN0IHdmeF9kZXYgKndkZXYsIHN0cnVjdCBza19idWZmICpza2IpOw0KK3ZvaWQgd2Z4 X3BlbmRpbmdfZHVtcF9vbGRfZnJhbWVzKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCB1bnNpZ25lZCBp bnQgbGltaXRfbXMpOw0KKw0KKyNlbmRpZiAvKiBXRlhfUVVFVUVfSCAqLw0KZGlmZiAtLWdpdCBh L2RyaXZlcnMvc3RhZ2luZy93Zngvc3RhLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2Z4L3N0YS5jDQpp bmRleCBmZTNmZjY1MzZhODcuLjU3MTRhYmExNDMyYyAxMDA2NDQNCi0tLSBhL2RyaXZlcnMvc3Rh Z2luZy93Zngvc3RhLmMNCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93Zngvc3RhLmMNCkBAIC0xMCwx MSArMTAsMTIzIEBADQogI2luY2x1ZGUgInN0YS5oIg0KICNpbmNsdWRlICJ3ZnguaCINCiANCisj ZGVmaW5lIFRYT1BfVU5JVCAzMg0KKw0KK3N0YXRpYyBpbnQgd2Z4X3NldF90aW1faW1wbChzdHJ1 Y3Qgd2Z4X3ZpZiAqd3ZpZiwgYm9vbCBhaWQwX2JpdF9zZXQpDQorew0KKwlzdHJ1Y3Qgc2tfYnVm ZiAqc2tiOw0KKwlzdHJ1Y3QgaGlmX2llX2ZsYWdzIHRhcmdldF9mcmFtZSA9IHsNCisJCS5iZWFj b24gPSAxLA0KKwl9Ow0KKwl1MTYgdGltX29mZnNldCwgdGltX2xlbmd0aDsNCisJdTggKnRpbV9w dHI7DQorDQorCXNrYiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0X3RpbSh3dmlmLT53ZGV2LT5odywg d3ZpZi0+dmlmLA0KKwkJCQkgICAgICAgJnRpbV9vZmZzZXQsICZ0aW1fbGVuZ3RoKTsNCisJaWYg KCFza2IpDQorCQlyZXR1cm4gLUVOT0VOVDsNCisJdGltX3B0ciA9IHNrYi0+ZGF0YSArIHRpbV9v ZmZzZXQ7DQorDQorCWlmICh0aW1fb2Zmc2V0ICYmIHRpbV9sZW5ndGggPj0gNikgew0KKwkJLyog SWdub3JlIERUSU0gY291bnQgZnJvbSBtYWM4MDIxMToNCisJCSAqIGZpcm13YXJlIGhhbmRsZXMg RFRJTSBpbnRlcm5hbGx5Lg0KKwkJICovDQorCQl0aW1fcHRyWzJdID0gMDsNCisNCisJCS8qIFNl dC9yZXNldCBhaWQwIGJpdCAqLw0KKwkJaWYgKGFpZDBfYml0X3NldCkNCisJCQl0aW1fcHRyWzRd IHw9IDE7DQorCQllbHNlDQorCQkJdGltX3B0cls0XSAmPSB+MTsNCisJfQ0KKw0KKwloaWZfdXBk YXRlX2llKHd2aWYsICZ0YXJnZXRfZnJhbWUsIHRpbV9wdHIsIHRpbV9sZW5ndGgpOw0KKwlkZXZf a2ZyZWVfc2tiKHNrYik7DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgdm9pZCB3Znhf bWNhc3Rfc3RhcnRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspDQorew0KKwlzdHJ1Y3Qg d2Z4X3ZpZiAqd3ZpZiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgd2Z4X3ZpZiwgbWNhc3Rf c3RhcnRfd29yayk7DQorDQorCWNhbmNlbF93b3JrX3N5bmMoJnd2aWYtPm1jYXN0X3N0b3Bfd29y ayk7DQorCWlmICghd3ZpZi0+YWlkMF9iaXRfc2V0KSB7DQorCQl3ZnhfdHhfbG9ja19mbHVzaCh3 dmlmLT53ZGV2KTsNCisJCXdmeF9zZXRfdGltX2ltcGwod3ZpZiwgdHJ1ZSk7DQorCQl3dmlmLT5h aWQwX2JpdF9zZXQgPSB0cnVlOw0KKwkJbW9kX3RpbWVyKCZ3dmlmLT5tY2FzdF90aW1lb3V0LCBU VV9UT19KSUZGSUVTKDEwMDApKTsNCisJCXdmeF90eF91bmxvY2sod3ZpZi0+d2Rldik7DQorCX0N Cit9DQorDQorc3RhdGljIHZvaWQgd2Z4X21jYXN0X3N0b3Bfd29yayhzdHJ1Y3Qgd29ya19zdHJ1 Y3QgKndvcmspDQorew0KKwlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiA9IGNvbnRhaW5lcl9vZih3b3Jr LCBzdHJ1Y3Qgd2Z4X3ZpZiwgbWNhc3Rfc3RvcF93b3JrKTsNCisNCisJaWYgKHd2aWYtPmFpZDBf Yml0X3NldCkgew0KKwkJZGVsX3RpbWVyX3N5bmMoJnd2aWYtPm1jYXN0X3RpbWVvdXQpOw0KKwkJ d2Z4X3R4X2xvY2tfZmx1c2god3ZpZi0+d2Rldik7DQorCQl3dmlmLT5haWQwX2JpdF9zZXQgPSBm YWxzZTsNCisJCXdmeF9zZXRfdGltX2ltcGwod3ZpZiwgZmFsc2UpOw0KKwkJd2Z4X3R4X3VubG9j ayh3dmlmLT53ZGV2KTsNCisJfQ0KK30NCisNCitzdGF0aWMgdm9pZCB3ZnhfbWNhc3RfdGltZW91 dChzdHJ1Y3QgdGltZXJfbGlzdCAqdCkNCit7DQorCXN0cnVjdCB3ZnhfdmlmICp3dmlmID0gZnJv bV90aW1lcih3dmlmLCB0LCBtY2FzdF90aW1lb3V0KTsNCisNCisJZGV2X3dhcm4od3ZpZi0+d2Rl di0+ZGV2LCAibXVsdGljYXN0IGRlbGl2ZXJ5IHRpbWVvdXRcbiIpOw0KKwlzcGluX2xvY2tfYmgo Jnd2aWYtPnBzX3N0YXRlX2xvY2spOw0KKwl3dmlmLT5tY2FzdF90eCA9IHd2aWYtPmFpZDBfYml0 X3NldCAmJiB3dmlmLT5tY2FzdF9idWZmZXJlZDsNCisJaWYgKHd2aWYtPm1jYXN0X3R4KQ0KKwkJ d2Z4X2JoX3JlcXVlc3RfdHgod3ZpZi0+d2Rldik7DQorCXNwaW5fdW5sb2NrX2JoKCZ3dmlmLT5w c19zdGF0ZV9sb2NrKTsNCit9DQorDQogaW50IHdmeF9hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVl ODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQ0KIHsNCiAJaW50IGk7DQog CXN0cnVjdCB3ZnhfZGV2ICp3ZGV2ID0gaHctPnByaXY7DQogCXN0cnVjdCB3ZnhfdmlmICp3dmlm ID0gKHN0cnVjdCB3ZnhfdmlmICopIHZpZi0+ZHJ2X3ByaXY7DQorCS8vIEZJWE1FOiBwYXJhbWV0 ZXJzIGFyZSBzZXQgYnkga2VybmVsIGp1c3RlIGFmdGVyIGludGVyZmFjZV9hZGQuDQorCS8vIEtl ZXAgc3RydWN0IGhpZl9yZXFfZWRjYV9xdWV1ZV9wYXJhbXMgYmxhbms/DQorCXN0cnVjdCBoaWZf cmVxX2VkY2FfcXVldWVfcGFyYW1zIGRlZmF1bHRfZWRjYV9wYXJhbXNbXSA9IHsNCisJCVtJRUVF ODAyMTFfQUNfVk9dID0gew0KKwkJCS5xdWV1ZV9pZCA9IEhJRl9RVUVVRV9JRF9WT0lDRSwNCisJ CQkuYWlmc24gPSAyLA0KKwkJCS5jd19taW4gPSAzLA0KKwkJCS5jd19tYXggPSA3LA0KKwkJCS50 eF9vcF9saW1pdCA9IFRYT1BfVU5JVCAqIDQ3LA0KKwkJfSwNCisJCVtJRUVFODAyMTFfQUNfVkld ID0gew0KKwkJCS5xdWV1ZV9pZCA9IEhJRl9RVUVVRV9JRF9WSURFTywNCisJCQkuYWlmc24gPSAy LA0KKwkJCS5jd19taW4gPSA3LA0KKwkJCS5jd19tYXggPSAxNSwNCisJCQkudHhfb3BfbGltaXQg PSBUWE9QX1VOSVQgKiA5NCwNCisJCX0sDQorCQlbSUVFRTgwMjExX0FDX0JFXSA9IHsNCisJCQku cXVldWVfaWQgPSBISUZfUVVFVUVfSURfQkVTVEVGRk9SVCwNCisJCQkuYWlmc24gPSAzLA0KKwkJ CS5jd19taW4gPSAxNSwNCisJCQkuY3dfbWF4ID0gMTAyMywNCisJCQkudHhfb3BfbGltaXQgPSBU WE9QX1VOSVQgKiAwLA0KKwkJfSwNCisJCVtJRUVFODAyMTFfQUNfQktdID0gew0KKwkJCS5xdWV1 ZV9pZCA9IEhJRl9RVUVVRV9JRF9CQUNLR1JPVU5ELA0KKwkJCS5haWZzbiA9IDcsDQorCQkJLmN3 X21pbiA9IDE1LA0KKwkJCS5jd19tYXggPSAxMDIzLA0KKwkJCS50eF9vcF9saW1pdCA9IFRYT1Bf VU5JVCAqIDAsDQorCQl9LA0KKwl9Ow0KKw0KKwlpZiAod2Z4X2FwaV9vbGRlcl90aGFuKHdkZXYs IDIsIDApKSB7DQorCQlkZWZhdWx0X2VkY2FfcGFyYW1zW0lFRUU4MDIxMV9BQ19CRV0ucXVldWVf aWQgPSBISUZfUVVFVUVfSURfQkFDS0dST1VORDsNCisJCWRlZmF1bHRfZWRjYV9wYXJhbXNbSUVF RTgwMjExX0FDX0JLXS5xdWV1ZV9pZCA9IEhJRl9RVUVVRV9JRF9CRVNURUZGT1JUOw0KKwl9DQog DQogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdkZXYtPnZpZik7IGkrKykgew0KIAkJaWYg KCF3ZGV2LT52aWZbaV0pIHsNCkBAIC0yOCwxMiArMTQwLDI5IEBAIGludCB3ZnhfYWRkX2ludGVy ZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikN CiAJd3ZpZi0+dmlmID0gdmlmOw0KIAl3dmlmLT53ZGV2ID0gd2RldjsNCiANCisJSU5JVF9XT1JL KCZ3dmlmLT5saW5rX2lkX3dvcmssIHdmeF9saW5rX2lkX3dvcmspOw0KKwlJTklUX0RFTEFZRURf V09SSygmd3ZpZi0+bGlua19pZF9nY193b3JrLCB3ZnhfbGlua19pZF9nY193b3JrKTsNCisNCisJ c3Bpbl9sb2NrX2luaXQoJnd2aWYtPnBzX3N0YXRlX2xvY2spOw0KKw0KKwlJTklUX1dPUksoJnd2 aWYtPm1jYXN0X3N0YXJ0X3dvcmssIHdmeF9tY2FzdF9zdGFydF93b3JrKTsNCisJSU5JVF9XT1JL KCZ3dmlmLT5tY2FzdF9zdG9wX3dvcmssIHdmeF9tY2FzdF9zdG9wX3dvcmspOw0KKwl0aW1lcl9z ZXR1cCgmd3ZpZi0+bWNhc3RfdGltZW91dCwgd2Z4X21jYXN0X3RpbWVvdXQsIDApOw0KKwlCVUdf T04oQVJSQVlfU0laRShkZWZhdWx0X2VkY2FfcGFyYW1zKSAhPSBBUlJBWV9TSVpFKHd2aWYtPmVk Y2EucGFyYW1zKSk7DQorCWZvciAoaSA9IDA7IGkgPCBJRUVFODAyMTFfTlVNX0FDUzsgaSsrKQ0K KwkJbWVtY3B5KCZ3dmlmLT5lZGNhLnBhcmFtc1tpXSwgJmRlZmF1bHRfZWRjYV9wYXJhbXNbaV0s IHNpemVvZihkZWZhdWx0X2VkY2FfcGFyYW1zW2ldKSk7DQorCXR4X3BvbGljeV9pbml0KHd2aWYp Ow0KIAlyZXR1cm4gMDsNCiB9DQogDQogdm9pZCB3ZnhfcmVtb3ZlX2ludGVyZmFjZShzdHJ1Y3Qg aWVlZTgwMjExX2h3ICpodywNCiAJCQkgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpDQogew0K KwlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiA9IChzdHJ1Y3Qgd2Z4X3ZpZiAqKSB2aWYtPmRydl9wcml2 Ow0KKw0KKwl3ZnhfdHhfcXVldWVzX3dhaXRfZW1wdHlfdmlmKHd2aWYpOw0KKwljYW5jZWxfZGVs YXllZF93b3JrX3N5bmMoJnd2aWYtPmxpbmtfaWRfZ2Nfd29yayk7DQorCWRlbF90aW1lcl9zeW5j KCZ3dmlmLT5tY2FzdF90aW1lb3V0KTsNCiB9DQogDQogaW50IHdmeF9zdGFydChzdHJ1Y3QgaWVl ZTgwMjExX2h3ICpodykNCkBAIC00Myw0ICsxNzIsMTAgQEAgaW50IHdmeF9zdGFydChzdHJ1Y3Qg aWVlZTgwMjExX2h3ICpodykNCiANCiB2b2lkIHdmeF9zdG9wKHN0cnVjdCBpZWVlODAyMTFfaHcg Kmh3KQ0KIHsNCisJc3RydWN0IHdmeF9kZXYgKndkZXYgPSBody0+cHJpdjsNCisNCisJd2Z4X3R4 X2xvY2tfZmx1c2god2Rldik7DQorCXdmeF90eF9xdWV1ZXNfY2xlYXIod2Rldik7DQorCXdmeF90 eF91bmxvY2sod2Rldik7DQorCVdBUk4oYXRvbWljX3JlYWQoJndkZXYtPnR4X2xvY2spLCAidHhf bG9jayBpcyBsb2NrZWQiKTsNCiB9DQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dmeC9z dGEuaCBiL2RyaXZlcnMvc3RhZ2luZy93Zngvc3RhLmgNCmluZGV4IGYxN2I0ZDE1MTFkNy4uZjM2 ZDk0ZjkwN2M3IDEwMDY0NA0KLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dmeC9zdGEuaA0KKysrIGIv ZHJpdmVycy9zdGFnaW5nL3dmeC9zdGEuaA0KQEAgLTEwLDYgKzEwLDE0IEBADQogDQogI2luY2x1 ZGUgPG5ldC9tYWM4MDIxMS5oPg0KIA0KKyNpbmNsdWRlICJoaWZfYXBpX2NtZC5oIg0KKw0KK3N0 cnVjdCB3ZnhfZWRjYV9wYXJhbXMgew0KKwkvKiBOT1RFOiBpbmRleCBpcyBhIGxpbnV4IHF1ZXVl IGlkLiAqLw0KKwlzdHJ1Y3QgaGlmX3JlcV9lZGNhX3F1ZXVlX3BhcmFtcyBwYXJhbXNbSUVFRTgw MjExX05VTV9BQ1NdOw0KKwlib29sIHVhcHNkX2VuYWJsZVtJRUVFODAyMTFfTlVNX0FDU107DQor fTsNCisNCiBzdHJ1Y3Qgd2Z4X3N0YV9wcml2IHsNCiAJaW50IGxpbmtfaWQ7DQogCWludCB2aWZf aWQ7DQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dmeC90cmFjZXMuaCBiL2RyaXZlcnMv c3RhZ2luZy93ZngvdHJhY2VzLmgNCmluZGV4IGU3YjAzYjk0MDUzNS4uNjc0NTdjZGExMzNiIDEw MDY0NA0KLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dmeC90cmFjZXMuaA0KKysrIGIvZHJpdmVycy9z dGFnaW5nL3dmeC90cmFjZXMuaA0KQEAgLTEyLDYgKzEyLDcgQEANCiAjZGVmaW5lIF9XRlhfVFJB Q0VfSA0KIA0KICNpbmNsdWRlIDxsaW51eC90cmFjZXBvaW50Lmg+DQorI2luY2x1ZGUgPG5ldC9t YWM4MDIxMS5oPg0KIA0KICNpbmNsdWRlICJidXMuaCINCiAjaW5jbHVkZSAiaGlmX2FwaV9jbWQu aCINCkBAIC0zNDksNiArMzUwLDc5IEBAIFRSQUNFX0VWRU5UKGJoX3N0YXRzLA0KICk7DQogI2Rl ZmluZSBfdHJhY2VfYmhfc3RhdHMoaW5kLCByZXEsIGNuZiwgYnVzeSwgcmVsZWFzZSkgdHJhY2Vf Ymhfc3RhdHMoaW5kLCByZXEsIGNuZiwgYnVzeSwgcmVsZWFzZSkNCiANCitUUkFDRV9FVkVOVCh0 eF9zdGF0cywNCisJVFBfUFJPVE8oc3RydWN0IGhpZl9jbmZfdHggKnR4X2NuZiwgc3RydWN0IHNr X2J1ZmYgKnNrYiwgaW50IGRlbGF5KSwNCisJVFBfQVJHUyh0eF9jbmYsIHNrYiwgZGVsYXkpLA0K KwlUUF9TVFJVQ1RfX2VudHJ5KA0KKwkJX19maWVsZChpbnQsIHBrdF9pZCkNCisJCV9fZmllbGQo aW50LCBkZWxheV9tZWRpYSkNCisJCV9fZmllbGQoaW50LCBkZWxheV9xdWV1ZSkNCisJCV9fZmll bGQoaW50LCBkZWxheV9mdykNCisJCV9fZmllbGQoaW50LCBhY2tfZmFpbHVyZXMpDQorCQlfX2Zp ZWxkKGludCwgZmxhZ3MpDQorCQlfX2FycmF5KGludCwgcmF0ZSwgNCkNCisJCV9fYXJyYXkoaW50 LCB0eF9jb3VudCwgNCkNCisJKSwNCisJVFBfZmFzdF9hc3NpZ24oDQorCQkvLyBLZWVwIHN5bmMg d2l0aCB3ZnhfcmF0ZXMgZGVmaW5pdGlvbiBpbiBtYWluLmMNCisJCXN0YXRpYyBjb25zdCBpbnQg aHdfcmF0ZVtdID0geyAwLCAxLCAyLCAzLCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMyB9Ow0K KwkJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihz a2IpOw0KKwkJc3RydWN0IGllZWU4MDIxMV90eF9yYXRlICpyYXRlcyA9IHR4X2luZm8tPmRyaXZl cl9yYXRlczsNCisJCWludCBpOw0KKw0KKwkJX19lbnRyeS0+cGt0X2lkID0gdHhfY25mLT5wYWNr ZXRfaWQ7DQorCQlfX2VudHJ5LT5kZWxheV9tZWRpYSA9IHR4X2NuZi0+bWVkaWFfZGVsYXk7DQor CQlfX2VudHJ5LT5kZWxheV9xdWV1ZSA9IHR4X2NuZi0+dHhfcXVldWVfZGVsYXk7DQorCQlfX2Vu dHJ5LT5kZWxheV9mdyA9IGRlbGF5Ow0KKwkJX19lbnRyeS0+YWNrX2ZhaWx1cmVzID0gdHhfY25m LT5hY2tfZmFpbHVyZXM7DQorCQlpZiAoIXR4X2NuZi0+c3RhdHVzIHx8IF9fZW50cnktPmFja19m YWlsdXJlcykNCisJCQlfX2VudHJ5LT5hY2tfZmFpbHVyZXMgKz0gMTsNCisNCisJCWZvciAoaSA9 IDA7IGkgPCBJRUVFODAyMTFfTlVNX0FDUzsgaSsrKSB7DQorCQkJaWYgKHJhdGVzWzBdLmZsYWdz ICYgSUVFRTgwMjExX1RYX1JDX01DUykNCisJCQkJX19lbnRyeS0+cmF0ZVtpXSA9IHJhdGVzW2ld LmlkeDsNCisJCQllbHNlDQorCQkJCV9fZW50cnktPnJhdGVbaV0gPSBod19yYXRlW3JhdGVzW2ld LmlkeF07DQorCQkJX19lbnRyeS0+dHhfY291bnRbaV0gPSByYXRlc1tpXS5jb3VudDsNCisJCX0N CisJCV9fZW50cnktPmZsYWdzID0gMDsNCisJCWlmIChyYXRlc1swXS5mbGFncyAmIElFRUU4MDIx MV9UWF9SQ19NQ1MpDQorCQkJX19lbnRyeS0+ZmxhZ3MgfD0gMHgwMTsNCisJCWlmIChyYXRlc1sw XS5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19TSE9SVF9HSSkNCisJCQlfX2VudHJ5LT5mbGFncyB8 PSAweDAyOw0KKwkJaWYgKHJhdGVzWzBdLmZsYWdzICYgSUVFRTgwMjExX1RYX1JDX0dSRUVOX0ZJ RUxEKQ0KKwkJCV9fZW50cnktPmZsYWdzIHw9IDB4MDQ7DQorCQlpZiAocmF0ZXNbMF0uZmxhZ3Mg JiBJRUVFODAyMTFfVFhfUkNfVVNFX1JUU19DVFMpDQorCQkJX19lbnRyeS0+ZmxhZ3MgfD0gMHgw ODsNCisJCWlmICh0eF9pbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfU0VORF9BRlRFUl9E VElNKQ0KKwkJCV9fZW50cnktPmZsYWdzIHw9IDB4MTA7DQorCQlpZiAodHhfY25mLT5zdGF0dXMp DQorCQkJX19lbnRyeS0+ZmxhZ3MgfD0gMHgyMDsNCisJCWlmICh0eF9jbmYtPnN0YXR1cyA9PSBI SUZfUkVRVUVVRSkNCisJCQlfX2VudHJ5LT5mbGFncyB8PSAweDQwOw0KKwkpLA0KKwlUUF9wcmlu dGsoInBhY2tldCBJRDogJTA4eCwgcmF0ZSBwb2xpY3k6ICVzICVkfCVkICVkfCVkICVkfCVkICVk fCVkIC0+ICVkIGF0dGVtcHQsIERlbGF5cyBtZWRpYS9xdWV1ZS90b3RhbDogJTRkdXMvJTRkdXMv JTRkdXMiLA0KKwkJX19lbnRyeS0+cGt0X2lkLA0KKwkJX19wcmludF9mbGFncyhfX2VudHJ5LT5m bGFncywgTlVMTCwNCisJCQl7IDB4MDEsICJNIiB9LCB7IDB4MDIsICJTIiB9LCB7IDB4MDQsICJH IiB9LA0KKwkJCXsgMHgwOCwgIlIiIH0sIHsgMHgxMCwgIkQiIH0sIHsgMHgyMCwgIkYiIH0sDQor CQkJeyAweDQwLCAiUSIgfSksDQorCQlfX2VudHJ5LT5yYXRlWzBdLA0KKwkJX19lbnRyeS0+dHhf Y291bnRbMF0sDQorCQlfX2VudHJ5LT5yYXRlWzFdLA0KKwkJX19lbnRyeS0+dHhfY291bnRbMV0s DQorCQlfX2VudHJ5LT5yYXRlWzJdLA0KKwkJX19lbnRyeS0+dHhfY291bnRbMl0sDQorCQlfX2Vu dHJ5LT5yYXRlWzNdLA0KKwkJX19lbnRyeS0+dHhfY291bnRbM10sDQorCQlfX2VudHJ5LT5hY2tf ZmFpbHVyZXMsDQorCQlfX2VudHJ5LT5kZWxheV9tZWRpYSwNCisJCV9fZW50cnktPmRlbGF5X3F1 ZXVlLA0KKwkJX19lbnRyeS0+ZGVsYXlfZncNCisJKQ0KKyk7DQorI2RlZmluZSBfdHJhY2VfdHhf c3RhdHModHhfY25mLCBza2IsIGRlbGF5KSB0cmFjZV90eF9zdGF0cyh0eF9jbmYsIHNrYiwgZGVs YXkpDQorDQogI2VuZGlmDQogDQogLyogVGhpcyBwYXJ0IG11c3QgYmUgb3V0c2lkZSBwcm90ZWN0 aW9uICovDQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dmeC93ZnguaCBiL2RyaXZlcnMv c3RhZ2luZy93Zngvd2Z4LmgNCmluZGV4IDQ5Yjc3NmEwNzUxNS4uMTE3NzViMWUwNmVmIDEwMDY0 NA0KLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dmeC93ZnguaA0KKysrIGIvZHJpdmVycy9zdGFnaW5n L3dmeC93ZnguaA0KQEAgLTE0LDggKzE0LDExIEBADQogI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5o Pg0KIA0KICNpbmNsdWRlICJiaC5oIg0KKyNpbmNsdWRlICJkYXRhX3R4LmgiDQogI2luY2x1ZGUg Im1haW4uaCINCisjaW5jbHVkZSAicXVldWUuaCINCiAjaW5jbHVkZSAic2VjdXJlX2xpbmsuaCIN CisjaW5jbHVkZSAic3RhLmgiDQogI2luY2x1ZGUgImhpZl90eC5oIg0KICNpbmNsdWRlICJoaWZf YXBpX2dlbmVyYWwuaCINCiANCkBAIC0zOCw2ICs0MSwxMCBAQCBzdHJ1Y3Qgd2Z4X2RldiB7DQog CWludAkJCWNoaXBfZnJvemVuOw0KIA0KIAlzdHJ1Y3Qgd2Z4X2hpZl9jbWQJaGlmX2NtZDsNCisJ c3RydWN0IHdmeF9xdWV1ZQl0eF9xdWV1ZVs0XTsNCisJc3RydWN0IHdmeF9xdWV1ZV9zdGF0cwl0 eF9xdWV1ZV9zdGF0czsNCisJaW50CQkJdHhfYnVyc3RfaWR4Ow0KKwlhdG9taWNfdAkJdHhfbG9j azsNCiANCiAJc3RydWN0IGhpZl9yeF9zdGF0cwlyeF9zdGF0czsNCiAJc3RydWN0IG11dGV4CQly eF9zdGF0c19sb2NrOw0KQEAgLTQ3LDYgKzU0LDI4IEBAIHN0cnVjdCB3ZnhfdmlmIHsNCiAJc3Ry dWN0IHdmeF9kZXYJCSp3ZGV2Ow0KIAlzdHJ1Y3QgaWVlZTgwMjExX3ZpZgkqdmlmOw0KIAlpbnQJ CQlpZDsNCisNCisNCisJdTMyCQkJbGlua19pZF9tYXA7DQorCXN0cnVjdCB3ZnhfbGlua19lbnRy eQlsaW5rX2lkX2RiW1dGWF9NQVhfU1RBX0lOX0FQX01PREVdOw0KKwlzdHJ1Y3QgZGVsYXllZF93 b3JrCWxpbmtfaWRfZ2Nfd29yazsNCisJc3RydWN0IHdvcmtfc3RydWN0CWxpbmtfaWRfd29yazsN CisNCisJYm9vbAkJCWFpZDBfYml0X3NldDsNCisJYm9vbAkJCW1jYXN0X3R4Ow0KKwlib29sCQkJ bWNhc3RfYnVmZmVyZWQ7DQorCXN0cnVjdCB0aW1lcl9saXN0CW1jYXN0X3RpbWVvdXQ7DQorCXN0 cnVjdCB3b3JrX3N0cnVjdAltY2FzdF9zdGFydF93b3JrOw0KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJ bWNhc3Rfc3RvcF93b3JrOw0KKw0KKw0KKwlzdHJ1Y3QgdHhfcG9saWN5X2NhY2hlCXR4X3BvbGlj eV9jYWNoZTsNCisJc3RydWN0IHdvcmtfc3RydWN0CXR4X3BvbGljeV91cGxvYWRfd29yazsNCisJ dTMyCQkJc3RhX2FzbGVlcF9tYXNrOw0KKwl1MzIJCQlwc3BvbGxfbWFzazsNCisJc3BpbmxvY2tf dAkJcHNfc3RhdGVfbG9jazsNCisNCisJc3RydWN0IHdmeF9lZGNhX3BhcmFtcwllZGNhOw0KIH07 DQogDQogc3RhdGljIGlubGluZSBzdHJ1Y3Qgd2Z4X3ZpZiAqd2Rldl90b193dmlmKHN0cnVjdCB3 ZnhfZGV2ICp3ZGV2LCBpbnQgdmlmX2lkKQ0KQEAgLTYyLDQgKzkxLDMzIEBAIHN0YXRpYyBpbmxp bmUgc3RydWN0IHdmeF92aWYgKndkZXZfdG9fd3ZpZihzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgaW50 IHZpZl9pZCkNCiAJcmV0dXJuIChzdHJ1Y3Qgd2Z4X3ZpZiAqKSB3ZGV2LT52aWZbdmlmX2lkXS0+ ZHJ2X3ByaXY7DQogfQ0KIA0KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHdmeF92aWYgKnd2aWZfaXRl cmF0ZShzdHJ1Y3Qgd2Z4X2RldiAqd2Rldiwgc3RydWN0IHdmeF92aWYgKmN1cikNCit7DQorCWlu dCBpOw0KKwlpbnQgbWFyayA9IDA7DQorCXN0cnVjdCB3ZnhfdmlmICp0bXA7DQorDQorCWlmICgh Y3VyKQ0KKwkJbWFyayA9IDE7DQorCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdkZXYtPnZp Zik7IGkrKykgew0KKwkJdG1wID0gd2Rldl90b193dmlmKHdkZXYsIGkpOw0KKwkJaWYgKG1hcmsg JiYgdG1wKQ0KKwkJCXJldHVybiB0bXA7DQorCQlpZiAodG1wID09IGN1cikNCisJCQltYXJrID0g MTsNCisJfQ0KKwlyZXR1cm4gTlVMTDsNCit9DQorDQorc3RhdGljIGlubGluZSBpbnQgbWVtemNt cCh2b2lkICpzcmMsIHVuc2lnbmVkIGludCBzaXplKQ0KK3sNCisJdWludDhfdCAqYnVmID0gc3Jj Ow0KKw0KKwlpZiAoIXNpemUpDQorCQlyZXR1cm4gMDsNCisJaWYgKCpidWYpDQorCQlyZXR1cm4g MTsNCisJcmV0dXJuIG1lbWNtcChidWYsIGJ1ZiArIDEsIHNpemUgLSAxKTsNCit9DQorDQogI2Vu ZGlmIC8qIFdGWF9IICovDQotLSANCjIuMjAuMQ0K