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 B0033C4CEC4 for ; Thu, 19 Sep 2019 10:54:27 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 5BE25217D6 for ; Thu, 19 Sep 2019 10:54:27 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=silabs.onmicrosoft.com header.i=@silabs.onmicrosoft.com header.b="p+xHyGn9" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389730AbfISKyX (ORCPT ); Thu, 19 Sep 2019 06:54:23 -0400 Received: from mail-eopbgr700049.outbound.protection.outlook.com ([40.107.70.49]:8577 "EHLO NAM04-SN1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S2389518AbfISKwz (ORCPT ); Thu, 19 Sep 2019 06:52:55 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=STp88yZfaSt/3sSrjkr72wOP/8h5CwEKrjQCfF+3KNJdUnyQj4XVOmEH6vbrxU+U1bvWrcVBR7G6Ihil/wOdsuKbTYWYeHOG25dMyxSxGtPfm+3/b80Xmepcs+GSND9+Rmn4+9Fqi+UdxOBv2U1yT1hAD9sEgGagwXB1+6VUhjlVp6btaPxrstOMs/NEB22qIhoC1PwO7S/XcysH0JGFXOt74YOaYwtCdb1j0BLM0MiJK1+lJaTD2i1gUpTz7yMfTOgZYRhzKsfB5Gx2ZxKQKZ91Kf+DyPKKYREd5mamAmF1Hx6xSo/Y6HxmRdtcoxE0Vv5ISsYsYkPsPuvBhTLUEQ== 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=UXtm+PL/ruBchth+jqURHASp9Wc7XDjMS8K7uJ2Als8=; b=Kx5OfyHkZJz7wlbylkuWPduWi4kdhWvhsA3CYcq4YX79qWfU8uKqJytTdmLz5MQobysFKy4YXkJS8WHXoNsH8YOOpSbKkL6oQlbwcWcUD80WlbG2LeJviOB2ytkXtQsarRL3WuEJxTm/6vhlTi/utSnNq2Jmb5zdXI9eyGhlB9wBR2TPhRZcyG1kS7pvTB7cc/+FKlb62UIUPz+6wNUZ2b6oiCDUnIowU85xodYx8J3aHJ1qCsV/tju5L5unpXkIyoYw8S8dYL0LmGsByoE/z1nEJUH7SukRCw8TBhSkh32nBAaVkuhUFYuBCwE2cO4fBbiNLneIEes3/q1TUXww8w== 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=UXtm+PL/ruBchth+jqURHASp9Wc7XDjMS8K7uJ2Als8=; b=p+xHyGn9hVPALdNRKQHOO+bvzsH4PwcRvH5EFPcg2O9nNNcA8Gl3UCh/w3DGAwPPCTOkTQd9nsvNbzDtkh1+Bt3GtAP5d6OIQmmcihTAHkYxWzyNF9q/y0V3/Fhjvky75R+IRYHw3V6hIgG/xqn/SboPohPYHhh7q/i+SHLPYCc= Received: from MN2PR11MB4063.namprd11.prod.outlook.com (20.179.149.217) by MN2PR11MB3775.namprd11.prod.outlook.com (20.178.253.202) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.17; Thu, 19 Sep 2019 10:52:42 +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 10:52:42 +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 12/20] staging: wfx: add HIF commands helpers Thread-Topic: [PATCH 12/20] staging: wfx: add HIF commands helpers Thread-Index: AQHVbthbWN2utnxkSEed46CUrldewQ== Date: Thu, 19 Sep 2019 10:52:40 +0000 Message-ID: <20190919105153.15285-13-Jerome.Pouiller@silabs.com> References: <20190919105153.15285-1-Jerome.Pouiller@silabs.com> In-Reply-To: <20190919105153.15285-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: a060fd02-dc93-4888-ce34-08d73cef7ef8 x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(5600167)(711020)(4605104)(1401327)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7193020);SRVR:MN2PR11MB3775; x-ms-traffictypediagnostic: MN2PR11MB3775: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:17; x-forefront-prvs: 016572D96D x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(1496009)(366004)(376002)(346002)(39850400004)(136003)(396003)(199004)(189003)(86362001)(256004)(14444005)(8936002)(4326008)(66066001)(36756003)(14454004)(305945005)(64756008)(5660300002)(66476007)(66556008)(66446008)(316002)(476003)(446003)(11346002)(110136005)(2616005)(66946007)(478600001)(91956017)(25786009)(76116006)(7736002)(71190400001)(81166006)(1076003)(30864003)(2501003)(6506007)(186003)(6436002)(486006)(81156014)(3846002)(6116002)(8676002)(102836004)(107886003)(54906003)(76176011)(2906002)(26005)(66574012)(99286004)(6486002)(71200400001)(6512007)(579004);DIR:OUT;SFP:1101;SCL:1;SRVR:MN2PR11MB3775;H:MN2PR11MB4063.namprd11.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;A:1;MX: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: gNcFv9MZ/lgoDcHIvz9tGng5N9XbXzLqASQbb0P502/wrIbdFdQ8vM9B3fr8CSYNQgnuIanvs1nAiZ+JGFx9CmQSS8vhHSx6sbjWxDVMFFgbLkVSu3ehtroPy3XPlYWiKCwykBy/L5JfwR7EGNsILH3vr2lzA4Df0VN4kIXNQfPRyqqjV8MuiPWWULokun0VTW3PQ6UmNHkOLxpvEMpoHS5aX3HqnoBl9E1O+5Stt6AezYO0/0t+0j7FVqDLK5UpZJhwzSOzxgEcNv474osEc7mBPGLa6TapDda2fP1/KD8Uk2F6UfYxFxnSYV+NCf6v0JeyKKR7RnEUipy58GzOtKtwanUbrE7bOhBO98z7WFtpVMQG0l/oUev9sJoN6oergtWDpdMickU+uBEr+YSzYdQlF5MHcz+3d+jYDJQ1O/4= Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: a060fd02-dc93-4888-ce34-08d73cef7ef8 X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Sep 2019 10:52:40.5598 (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: TVOHQhj1XWg1JskYYFtiS6lr2x2ZGhWhfsY5A3CciuGCdd2QXgC4sKI7uT7gtY9ndLVarCWe98EeKBLxS7hW8w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR11MB3775 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org RnJvbTogSsOpcsO0bWUgUG91aWxsZXIgPGplcm9tZS5wb3VpbGxlckBzaWxhYnMuY29tPg0KDQpQ cm92aWRlIGFuIGFic3RyYWN0aW9uIGZvciBISUYgY29tbWFuZHMuDQoNClNpZ25lZC1vZmYtYnk6 IErDqXLDtG1lIFBvdWlsbGVyIDxqZXJvbWUucG91aWxsZXJAc2lsYWJzLmNvbT4NCi0tLQ0KIGRy aXZlcnMvc3RhZ2luZy93ZngvaGlmX3R4LmMgICAgIHwgMzc1ICsrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysNCiBkcml2ZXJzL3N0YWdpbmcvd2Z4L2hpZl90eC5oICAgICB8ICAzMyArKysN CiBkcml2ZXJzL3N0YWdpbmcvd2Z4L2hpZl90eF9taWIuaCB8IDI4MSArKysrKysrKysrKysrKysr KysrKysrKw0KIGRyaXZlcnMvc3RhZ2luZy93Zngvd2Z4LmggICAgICAgIHwgICA2ICsNCiA0IGZp bGVzIGNoYW5nZWQsIDY5NSBpbnNlcnRpb25zKCspDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvc3RhZ2luZy93ZngvaGlmX3R4X21pYi5oDQoNCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdp bmcvd2Z4L2hpZl90eC5jIGIvZHJpdmVycy9zdGFnaW5nL3dmeC9oaWZfdHguYw0KaW5kZXggZjgx YTE5MDg5ZGI0Li43ODFhNmUyOGRiYWQgMTAwNjQ0DQotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2Z4 L2hpZl90eC5jDQorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2Z4L2hpZl90eC5jDQpAQCAtMTIsNiAr MTIsNyBAQA0KICNpbmNsdWRlICJoaWZfdHguaCINCiAjaW5jbHVkZSAid2Z4LmgiDQogI2luY2x1 ZGUgImJoLmgiDQorI2luY2x1ZGUgImh3aW8uaCINCiAjaW5jbHVkZSAiZGVidWcuaCINCiANCiB2 b2lkIHdmeF9pbml0X2hpZl9jbWQoc3RydWN0IHdmeF9oaWZfY21kICpoaWZfY21kKQ0KQEAgLTIx LDYgKzIyLDI5IEBAIHZvaWQgd2Z4X2luaXRfaGlmX2NtZChzdHJ1Y3Qgd2Z4X2hpZl9jbWQgKmhp Zl9jbWQpDQogCW11dGV4X2luaXQoJmhpZl9jbWQtPmxvY2spOw0KIH0NCiANCitzdGF0aWMgdm9p ZCB3ZnhfZmlsbF9oZWFkZXIoc3RydWN0IGhpZl9tc2cgKmhpZiwgaW50IGlmX2lkLCB1bnNpZ25l ZCBpbnQgY21kLCBzaXplX3Qgc2l6ZSkNCit7DQorCWlmIChpZl9pZCA9PSAtMSkNCisJCWlmX2lk ID0gMjsNCisNCisJV0FSTihjbWQgPiAweDNmLCAiaW52YWxpZCBXU00gY29tbWFuZCAlIy4yeCIs IGNtZCk7DQorCVdBUk4oc2l6ZSA+IDB4RkZGLCAicmVxdWVzdGVkIGJ1ZmZlciBpcyB0b28gbGFy Z2U6ICV6dSBieXRlcyIsIHNpemUpOw0KKwlXQVJOKGlmX2lkID4gMHgzLCAiaW52YWxpZCBpbnRl cmZhY2UgSUQgJWQiLCBpZl9pZCk7DQorDQorCWhpZi0+bGVuID0gY3B1X3RvX2xlMTYoc2l6ZSAr IDQpOw0KKwloaWYtPmlkID0gY21kOw0KKwloaWYtPmludGVyZmFjZSA9IGlmX2lkOw0KK30NCisN CitzdGF0aWMgdm9pZCAqd2Z4X2FsbG9jX2hpZihzaXplX3QgYm9keV9sZW4sIHN0cnVjdCBoaWZf bXNnICoqaGlmKQ0KK3sNCisJKmhpZiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBoaWZfbXNnKSAr IGJvZHlfbGVuLCBHRlBfS0VSTkVMKTsNCisJaWYgKCpoaWYpDQorCQlyZXR1cm4gKCpoaWYpLT5i b2R5Ow0KKwllbHNlDQorCQlyZXR1cm4gTlVMTDsNCit9DQorDQogaW50IHdmeF9jbWRfc2VuZChz dHJ1Y3Qgd2Z4X2RldiAqd2Rldiwgc3RydWN0IGhpZl9tc2cgKnJlcXVlc3QsIHZvaWQgKnJlcGx5 LCBzaXplX3QgcmVwbHlfbGVuLCBib29sIGFzeW5jKQ0KIHsNCiAJY29uc3QgY2hhciAqbWliX25h bWUgPSAiIjsNCkBAIC04NSwzICsxMDksMzU0IEBAIGludCB3ZnhfY21kX3NlbmQoc3RydWN0IHdm eF9kZXYgKndkZXYsIHN0cnVjdCBoaWZfbXNnICpyZXF1ZXN0LCB2b2lkICpyZXBseSwgc2l6DQog DQogCXJldHVybiByZXQ7DQogfQ0KKw0KKy8vIFRoaXMgZnVuY3Rpb24gaXMgc3BlY2lhbC4gQWZ0 ZXIgSElGX1JFUV9JRF9TSFVUX0RPV04sIGNoaXAgd29uJ3QgcmVwbHkgdG8gYW55DQorLy8gcmVx dWVzdCBhbnltb3JlLiBXZSBuZWVkIHRvIHNsaWdodGx5IGhhY2sgc3RydWN0IHdmeF9oaWZfY21k IGZvciB0aGF0IGpvYi4gQmUNCisvLyBjYXJlZnVsbCB0byBvbmx5IGNhbGwgdGhpcyBmdW5jaW9u IGR1cmluZyBkZXZpY2UgdW5yZWdpc3Rlci4NCitpbnQgaGlmX3NodXRkb3duKHN0cnVjdCB3Znhf ZGV2ICp3ZGV2KQ0KK3sNCisJaW50IHJldDsNCisJc3RydWN0IGhpZl9tc2cgKmhpZjsNCisNCisJ d2Z4X2FsbG9jX2hpZigwLCAmaGlmKTsNCisJd2Z4X2ZpbGxfaGVhZGVyKGhpZiwgLTEsIEhJRl9S RVFfSURfU0hVVF9ET1dOLCAwKTsNCisJcmV0ID0gd2Z4X2NtZF9zZW5kKHdkZXYsIGhpZiwgTlVM TCwgMCwgdHJ1ZSk7DQorCS8vIEFmdGVyIHRoaXMgY29tbWFuZCwgY2hpcCB3b24ndCByZXBseS4g QmUgc3VyZSB0byBnaXZlIGVub3VnaCB0aW1lIHRvDQorCS8vIGJoIHRvIHNlbmQgYnVmZmVyOg0K Kwltc2xlZXAoMTAwKTsNCisJd2Rldi0+aGlmX2NtZC5idWZfc2VuZCA9IE5VTEw7DQorCWlmICh3 ZGV2LT5wZGF0YS5ncGlvX3dha2V1cCkNCisJCWdwaW9kX3NldF92YWx1ZSh3ZGV2LT5wZGF0YS5n cGlvX3dha2V1cCwgMCk7DQorCWVsc2UNCisJCWNvbnRyb2xfcmVnX3dyaXRlKHdkZXYsIDApOw0K KwltdXRleF91bmxvY2soJndkZXYtPmhpZl9jbWQubG9jayk7DQorCWtmcmVlKGhpZik7DQorCXJl dHVybiByZXQ7DQorfQ0KKw0KK2ludCBoaWZfY29uZmlndXJhdGlvbihzdHJ1Y3Qgd2Z4X2RldiAq d2RldiwgY29uc3QgdTggKmNvbmYsIHNpemVfdCBsZW4pDQorew0KKwlpbnQgcmV0Ow0KKwlzaXpl X3QgYnVmX2xlbiA9IHNpemVvZihzdHJ1Y3QgaGlmX3JlcV9jb25maWd1cmF0aW9uKSArIGxlbjsN CisJc3RydWN0IGhpZl9tc2cgKmhpZjsNCisJc3RydWN0IGhpZl9yZXFfY29uZmlndXJhdGlvbiAq Ym9keSA9IHdmeF9hbGxvY19oaWYoYnVmX2xlbiwgJmhpZik7DQorDQorCWJvZHktPmxlbmd0aCA9 IGNwdV90b19sZTE2KGxlbik7DQorCW1lbWNweShib2R5LT5wZHNfZGF0YSwgY29uZiwgbGVuKTsN CisJd2Z4X2ZpbGxfaGVhZGVyKGhpZiwgLTEsIEhJRl9SRVFfSURfQ09ORklHVVJBVElPTiwgYnVm X2xlbik7DQorCXJldCA9IHdmeF9jbWRfc2VuZCh3ZGV2LCBoaWYsIE5VTEwsIDAsIGZhbHNlKTsN CisJa2ZyZWUoaGlmKTsNCisJcmV0dXJuIHJldDsNCit9DQorDQoraW50IGhpZl9yZXNldChzdHJ1 Y3Qgd2Z4X3ZpZiAqd3ZpZiwgYm9vbCByZXNldF9zdGF0KQ0KK3sNCisJaW50IHJldDsNCisJc3Ry dWN0IGhpZl9tc2cgKmhpZjsNCisJc3RydWN0IGhpZl9yZXFfcmVzZXQgKmJvZHkgPSB3ZnhfYWxs b2NfaGlmKHNpemVvZigqYm9keSksICZoaWYpOw0KKw0KKwlib2R5LT5yZXNldF9mbGFncy5yZXNl dF9zdGF0ID0gcmVzZXRfc3RhdDsNCisJd2Z4X2ZpbGxfaGVhZGVyKGhpZiwgd3ZpZi0+aWQsIEhJ Rl9SRVFfSURfUkVTRVQsIHNpemVvZigqYm9keSkpOw0KKwlyZXQgPSB3ZnhfY21kX3NlbmQod3Zp Zi0+d2RldiwgaGlmLCBOVUxMLCAwLCBmYWxzZSk7DQorCWtmcmVlKGhpZik7DQorCXJldHVybiBy ZXQ7DQorfQ0KKw0KK2ludCBoaWZfcmVhZF9taWIoc3RydWN0IHdmeF9kZXYgKndkZXYsIGludCB2 aWZfaWQsIHUxNiBtaWJfaWQsIHZvaWQgKnZhbCwgc2l6ZV90IHZhbF9sZW4pDQorew0KKwlpbnQg cmV0Ow0KKwlzdHJ1Y3QgaGlmX21zZyAqaGlmOw0KKwlpbnQgYnVmX2xlbiA9IHNpemVvZihzdHJ1 Y3QgaGlmX2NuZl9yZWFkX21pYikgKyB2YWxfbGVuOw0KKwlzdHJ1Y3QgaGlmX3JlcV9yZWFkX21p YiAqYm9keSA9IHdmeF9hbGxvY19oaWYoc2l6ZW9mKCpib2R5KSwgJmhpZik7DQorCXN0cnVjdCBo aWZfY25mX3JlYWRfbWliICpyZXBseSA9IGttYWxsb2MoYnVmX2xlbiwgR0ZQX0tFUk5FTCk7DQor DQorCWJvZHktPm1pYl9pZCA9IGNwdV90b19sZTE2KG1pYl9pZCk7DQorCXdmeF9maWxsX2hlYWRl cihoaWYsIHZpZl9pZCwgSElGX1JFUV9JRF9SRUFEX01JQiwgc2l6ZW9mKCpib2R5KSk7DQorCXJl dCA9IHdmeF9jbWRfc2VuZCh3ZGV2LCBoaWYsIHJlcGx5LCBidWZfbGVuLCBmYWxzZSk7DQorDQor CWlmICghcmV0ICYmIG1pYl9pZCAhPSByZXBseS0+bWliX2lkKSB7DQorCQlkZXZfd2Fybih3ZGV2 LT5kZXYsICIlczogY29uZmlybWF0aW9uIG1pc21hdGNoIHJlcXVlc3RcbiIsIF9fZnVuY19fKTsN CisJCXJldCA9IC1FSU87DQorCX0NCisJaWYgKHJldCA9PSAtRU5PTUVNKQ0KKwkJZGV2X2Vycih3 ZGV2LT5kZXYsICJidWZmZXIgaXMgdG9vIHNtYWxsIHRvIHJlY2VpdmUgJXMgKCV6dSA8ICVkKVxu IiwNCisJCQlnZXRfbWliX25hbWUobWliX2lkKSwgdmFsX2xlbiwgcmVwbHktPmxlbmd0aCk7DQor CWlmICghcmV0KQ0KKwkJbWVtY3B5KHZhbCwgJnJlcGx5LT5taWJfZGF0YSwgcmVwbHktPmxlbmd0 aCk7DQorCWVsc2UNCisJCW1lbXNldCh2YWwsIDB4RkYsIHZhbF9sZW4pOw0KKwlrZnJlZShoaWYp Ow0KKwlrZnJlZShyZXBseSk7DQorCXJldHVybiByZXQ7DQorfQ0KKw0KK2ludCBoaWZfd3JpdGVf bWliKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBpbnQgdmlmX2lkLCB1MTYgbWliX2lkLCB2b2lkICp2 YWwsIHNpemVfdCB2YWxfbGVuKQ0KK3sNCisJaW50IHJldDsNCisJc3RydWN0IGhpZl9tc2cgKmhp ZjsNCisJaW50IGJ1Zl9sZW4gPSBzaXplb2Yoc3RydWN0IGhpZl9yZXFfd3JpdGVfbWliKSArIHZh bF9sZW47DQorCXN0cnVjdCBoaWZfcmVxX3dyaXRlX21pYiAqYm9keSA9IHdmeF9hbGxvY19oaWYo YnVmX2xlbiwgJmhpZik7DQorDQorCWJvZHktPm1pYl9pZCA9IGNwdV90b19sZTE2KG1pYl9pZCk7 DQorCWJvZHktPmxlbmd0aCA9IGNwdV90b19sZTE2KHZhbF9sZW4pOw0KKwltZW1jcHkoJmJvZHkt Pm1pYl9kYXRhLCB2YWwsIHZhbF9sZW4pOw0KKwl3ZnhfZmlsbF9oZWFkZXIoaGlmLCB2aWZfaWQs IEhJRl9SRVFfSURfV1JJVEVfTUlCLCBidWZfbGVuKTsNCisJcmV0ID0gd2Z4X2NtZF9zZW5kKHdk ZXYsIGhpZiwgTlVMTCwgMCwgZmFsc2UpOw0KKwlrZnJlZShoaWYpOw0KKwlyZXR1cm4gcmV0Ow0K K30NCisNCitpbnQgaGlmX3NjYW4oc3RydWN0IHdmeF92aWYgKnd2aWYsIGNvbnN0IHN0cnVjdCB3 Znhfc2Nhbl9wYXJhbXMgKmFyZykNCit7DQorCWludCByZXQsIGk7DQorCXN0cnVjdCBoaWZfbXNn ICpoaWY7DQorCXN0cnVjdCBoaWZfc3NpZF9kZWYgKnNzaWRzOw0KKwlzaXplX3QgYnVmX2xlbiA9 IHNpemVvZihzdHJ1Y3QgaGlmX3JlcV9zdGFydF9zY2FuKSArDQorCQlhcmctPnNjYW5fcmVxLm51 bV9vZl9jaGFubmVscyAqIHNpemVvZih1OCkgKw0KKwkJYXJnLT5zY2FuX3JlcS5udW1fb2Zfc3Np X2RzICogc2l6ZW9mKHN0cnVjdCBoaWZfc3NpZF9kZWYpOw0KKwlzdHJ1Y3QgaGlmX3JlcV9zdGFy dF9zY2FuICpib2R5ID0gd2Z4X2FsbG9jX2hpZihidWZfbGVuLCAmaGlmKTsNCisJdTggKnB0ciA9 ICh1OCAqKSBib2R5ICsgc2l6ZW9mKCpib2R5KTsNCisNCisJV0FSTihhcmctPnNjYW5fcmVxLm51 bV9vZl9jaGFubmVscyA+IEhJRl9BUElfTUFYX05CX0NIQU5ORUxTLCAiaW52YWxpZCBwYXJhbXMi KTsNCisJV0FSTihhcmctPnNjYW5fcmVxLm51bV9vZl9zc2lfZHMgPiAyLCAiaW52YWxpZCBwYXJh bXMiKTsNCisJV0FSTihhcmctPnNjYW5fcmVxLmJhbmQgPiAxLCAiaW52YWxpZCBwYXJhbXMiKTsN CisNCisJLy8gRklYTUU6IFRoaXMgQVBJIGlzIHVubmVjZXNzYXJ5IGNvbXBsZXgsIGZpeGluZyBO dW1PZkNoYW5uZWxzIGFuZA0KKwkvLyBhZGRpbmcgYSBtZW1iZXIgU3NpZERlZiBhdCBlbmQgb2Yg c3RydWN0IGhpZl9yZXFfc3RhcnRfc2NhbiB3b3VsZA0KKwkvLyBzaW1wbGlmeSB0aGF0IGEgbG90 Lg0KKwltZW1jcHkoYm9keSwgJmFyZy0+c2Nhbl9yZXEsIHNpemVvZigqYm9keSkpOw0KKwljcHVf dG9fbGUzMnMoJmJvZHktPm1pbl9jaGFubmVsX3RpbWUpOw0KKwljcHVfdG9fbGUzMnMoJmJvZHkt Pm1heF9jaGFubmVsX3RpbWUpOw0KKwljcHVfdG9fbGUzMnMoJmJvZHktPnR4X3Bvd2VyX2xldmVs KTsNCisJbWVtY3B5KHB0ciwgYXJnLT5zc2lkcywgYXJnLT5zY2FuX3JlcS5udW1fb2Zfc3NpX2Rz ICogc2l6ZW9mKHN0cnVjdCBoaWZfc3NpZF9kZWYpKTsNCisJc3NpZHMgPSAoc3RydWN0IGhpZl9z c2lkX2RlZiAqKSBwdHI7DQorCWZvciAoaSA9IDA7IGkgPCBib2R5LT5udW1fb2Zfc3NpX2RzOyAr K2kpDQorCQljcHVfdG9fbGUzMnMoJnNzaWRzW2ldLnNzaWRfbGVuZ3RoKTsNCisJcHRyICs9IGFy Zy0+c2Nhbl9yZXEubnVtX29mX3NzaV9kcyAqIHNpemVvZihzdHJ1Y3QgaGlmX3NzaWRfZGVmKTsN CisJbWVtY3B5KHB0ciwgYXJnLT5jaCwgYXJnLT5zY2FuX3JlcS5udW1fb2ZfY2hhbm5lbHMgKiBz aXplb2YodTgpKTsNCisJcHRyICs9IGFyZy0+c2Nhbl9yZXEubnVtX29mX2NoYW5uZWxzICogc2l6 ZW9mKHU4KTsNCisJV0FSTihidWZfbGVuICE9IHB0ciAtICh1OCAqKSBib2R5LCAiYWxsb2NhdGlv biBzaXplIG1pc21hdGNoIik7DQorCXdmeF9maWxsX2hlYWRlcihoaWYsIHd2aWYtPmlkLCBISUZf UkVRX0lEX1NUQVJUX1NDQU4sIGJ1Zl9sZW4pOw0KKwlyZXQgPSB3ZnhfY21kX3NlbmQod3ZpZi0+ d2RldiwgaGlmLCBOVUxMLCAwLCBmYWxzZSk7DQorCWtmcmVlKGhpZik7DQorCXJldHVybiByZXQ7 DQorfQ0KKw0KK2ludCBoaWZfc3RvcF9zY2FuKHN0cnVjdCB3ZnhfdmlmICp3dmlmKQ0KK3sNCisJ aW50IHJldDsNCisJc3RydWN0IGhpZl9tc2cgKmhpZjsNCisJLy8gYm9keSBhc3NvY2lhdGVkIHRv IEhJRl9SRVFfSURfU1RPUF9TQ0FOIGlzIGVtcHR5DQorCXdmeF9hbGxvY19oaWYoMCwgJmhpZik7 DQorDQorCXdmeF9maWxsX2hlYWRlcihoaWYsIHd2aWYtPmlkLCBISUZfUkVRX0lEX1NUT1BfU0NB TiwgMCk7DQorCXJldCA9IHdmeF9jbWRfc2VuZCh3dmlmLT53ZGV2LCBoaWYsIE5VTEwsIDAsIGZh bHNlKTsNCisJa2ZyZWUoaGlmKTsNCisJcmV0dXJuIHJldDsNCit9DQorDQoraW50IGhpZl9qb2lu KHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBjb25zdCBzdHJ1Y3QgaGlmX3JlcV9qb2luICphcmcpDQor ew0KKwlpbnQgcmV0Ow0KKwlzdHJ1Y3QgaGlmX21zZyAqaGlmOw0KKwlzdHJ1Y3QgaGlmX3JlcV9q b2luICpib2R5ID0gd2Z4X2FsbG9jX2hpZihzaXplb2YoKmJvZHkpLCAmaGlmKTsNCisNCisJbWVt Y3B5KGJvZHksIGFyZywgc2l6ZW9mKHN0cnVjdCBoaWZfcmVxX2pvaW4pKTsNCisJY3B1X3RvX2xl MTZzKCZib2R5LT5jaGFubmVsX251bWJlcik7DQorCWNwdV90b19sZTE2cygmYm9keS0+YXRpbV93 aW5kb3cpOw0KKwljcHVfdG9fbGUzMnMoJmJvZHktPnNzaWRfbGVuZ3RoKTsNCisJY3B1X3RvX2xl MzJzKCZib2R5LT5iZWFjb25faW50ZXJ2YWwpOw0KKwljcHVfdG9fbGUzMnMoJmJvZHktPmJhc2lj X3JhdGVfc2V0KTsNCisJd2Z4X2ZpbGxfaGVhZGVyKGhpZiwgd3ZpZi0+aWQsIEhJRl9SRVFfSURf Sk9JTiwgc2l6ZW9mKCpib2R5KSk7DQorCXJldCA9IHdmeF9jbWRfc2VuZCh3dmlmLT53ZGV2LCBo aWYsIE5VTEwsIDAsIGZhbHNlKTsNCisJa2ZyZWUoaGlmKTsNCisJcmV0dXJuIHJldDsNCit9DQor DQoraW50IGhpZl9zZXRfYnNzX3BhcmFtcyhzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgY29uc3Qgc3Ry dWN0IGhpZl9yZXFfc2V0X2Jzc19wYXJhbXMgKmFyZykNCit7DQorCWludCByZXQ7DQorCXN0cnVj dCBoaWZfbXNnICpoaWY7DQorCXN0cnVjdCBoaWZfcmVxX3NldF9ic3NfcGFyYW1zICpib2R5ID0g d2Z4X2FsbG9jX2hpZihzaXplb2YoKmJvZHkpLCAmaGlmKTsNCisNCisJbWVtY3B5KGJvZHksIGFy Zywgc2l6ZW9mKCpib2R5KSk7DQorCWNwdV90b19sZTE2cygmYm9keS0+YWlkKTsNCisJY3B1X3Rv X2xlMzJzKCZib2R5LT5vcGVyYXRpb25hbF9yYXRlX3NldCk7DQorCXdmeF9maWxsX2hlYWRlciho aWYsIHd2aWYtPmlkLCBISUZfUkVRX0lEX1NFVF9CU1NfUEFSQU1TLCBzaXplb2YoKmJvZHkpKTsN CisJcmV0ID0gd2Z4X2NtZF9zZW5kKHd2aWYtPndkZXYsIGhpZiwgTlVMTCwgMCwgZmFsc2UpOw0K KwlrZnJlZShoaWYpOw0KKwlyZXR1cm4gcmV0Ow0KK30NCisNCitpbnQgaGlmX2FkZF9rZXkoc3Ry dWN0IHdmeF9kZXYgKndkZXYsIGNvbnN0IHN0cnVjdCBoaWZfcmVxX2FkZF9rZXkgKmFyZykNCit7 DQorCWludCByZXQ7DQorCXN0cnVjdCBoaWZfbXNnICpoaWY7DQorCS8vIEZJWE1FOiBvbmx5IHNl bmQgbmVjZXNzYXJ5IGJpdHMNCisJc3RydWN0IGhpZl9yZXFfYWRkX2tleSAqYm9keSA9IHdmeF9h bGxvY19oaWYoc2l6ZW9mKCpib2R5KSwgJmhpZik7DQorDQorCS8vIEZJWE1FOiBzd2FwIGJ5dGVz IGFzIG5lY2Vzc2FyeSBpbiBib2R5DQorCW1lbWNweShib2R5LCBhcmcsIHNpemVvZigqYm9keSkp Ow0KKwlpZiAod2Z4X2FwaV9vbGRlcl90aGFuKHdkZXYsIDEsIDUpKQ0KKwkJLy8gTGVnYWN5IGZp cm13YXJlcyBleHBlY3QgdGhhdCBhZGRfa2V5IHRvIGJlIHNlbnQgb24gcmlnaHQNCisJCS8vIGlu dGVyZmFjZS4NCisJCXdmeF9maWxsX2hlYWRlcihoaWYsIGFyZy0+aW50X2lkLCBISUZfUkVRX0lE X0FERF9LRVksIHNpemVvZigqYm9keSkpOw0KKwllbHNlDQorCQl3ZnhfZmlsbF9oZWFkZXIoaGlm LCAtMSwgSElGX1JFUV9JRF9BRERfS0VZLCBzaXplb2YoKmJvZHkpKTsNCisJcmV0ID0gd2Z4X2Nt ZF9zZW5kKHdkZXYsIGhpZiwgTlVMTCwgMCwgZmFsc2UpOw0KKwlrZnJlZShoaWYpOw0KKwlyZXR1 cm4gcmV0Ow0KK30NCisNCitpbnQgaGlmX3JlbW92ZV9rZXkoc3RydWN0IHdmeF9kZXYgKndkZXYs IGludCBpZHgpDQorew0KKwlpbnQgcmV0Ow0KKwlzdHJ1Y3QgaGlmX21zZyAqaGlmOw0KKwlzdHJ1 Y3QgaGlmX3JlcV9yZW1vdmVfa2V5ICpib2R5ID0gd2Z4X2FsbG9jX2hpZihzaXplb2YoKmJvZHkp LCAmaGlmKTsNCisNCisJYm9keS0+ZW50cnlfaW5kZXggPSBpZHg7DQorCXdmeF9maWxsX2hlYWRl cihoaWYsIC0xLCBISUZfUkVRX0lEX1JFTU9WRV9LRVksIHNpemVvZigqYm9keSkpOw0KKwlyZXQg PSB3ZnhfY21kX3NlbmQod2RldiwgaGlmLCBOVUxMLCAwLCBmYWxzZSk7DQorCWtmcmVlKGhpZik7 DQorCXJldHVybiByZXQ7DQorfQ0KKw0KK2ludCBoaWZfc2V0X2VkY2FfcXVldWVfcGFyYW1zKHN0 cnVjdCB3ZnhfdmlmICp3dmlmLCBjb25zdCBzdHJ1Y3QgaGlmX3JlcV9lZGNhX3F1ZXVlX3BhcmFt cyAqYXJnKQ0KK3sNCisJaW50IHJldDsNCisJc3RydWN0IGhpZl9tc2cgKmhpZjsNCisJc3RydWN0 IGhpZl9yZXFfZWRjYV9xdWV1ZV9wYXJhbXMgKmJvZHkgPSB3ZnhfYWxsb2NfaGlmKHNpemVvZigq Ym9keSksICZoaWYpOw0KKw0KKwkvLyBOT1RFOiBxdWV1ZXMgbnVtZXJvdGF0aW9uIGFyZSBub3Qg dGhlIHNhbWUgYmV0d2VlbiBXRnggYW5kIExpbnV4DQorCW1lbWNweShib2R5LCBhcmcsIHNpemVv ZigqYm9keSkpOw0KKwljcHVfdG9fbGUxNnMoJmJvZHktPmN3X21pbik7DQorCWNwdV90b19sZTE2 cygmYm9keS0+Y3dfbWF4KTsNCisJY3B1X3RvX2xlMTZzKCZib2R5LT50eF9vcF9saW1pdCk7DQor CXdmeF9maWxsX2hlYWRlcihoaWYsIHd2aWYtPmlkLCBISUZfUkVRX0lEX0VEQ0FfUVVFVUVfUEFS QU1TLCBzaXplb2YoKmJvZHkpKTsNCisJcmV0ID0gd2Z4X2NtZF9zZW5kKHd2aWYtPndkZXYsIGhp ZiwgTlVMTCwgMCwgZmFsc2UpOw0KKwlrZnJlZShoaWYpOw0KKwlyZXR1cm4gcmV0Ow0KK30NCisN CitpbnQgaGlmX3NldF9wbShzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgY29uc3Qgc3RydWN0IGhpZl9y ZXFfc2V0X3BtX21vZGUgKmFyZykNCit7DQorCWludCByZXQ7DQorCXN0cnVjdCBoaWZfbXNnICpo aWY7DQorCXN0cnVjdCBoaWZfcmVxX3NldF9wbV9tb2RlICpib2R5ID0gd2Z4X2FsbG9jX2hpZihz aXplb2YoKmJvZHkpLCAmaGlmKTsNCisNCisJbWVtY3B5KGJvZHksIGFyZywgc2l6ZW9mKCpib2R5 KSk7DQorCXdmeF9maWxsX2hlYWRlcihoaWYsIHd2aWYtPmlkLCBISUZfUkVRX0lEX1NFVF9QTV9N T0RFLCBzaXplb2YoKmJvZHkpKTsNCisJcmV0ID0gd2Z4X2NtZF9zZW5kKHd2aWYtPndkZXYsIGhp ZiwgTlVMTCwgMCwgZmFsc2UpOw0KKwlrZnJlZShoaWYpOw0KKwlyZXR1cm4gcmV0Ow0KK30NCisN CitpbnQgaGlmX3N0YXJ0KHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBjb25zdCBzdHJ1Y3QgaGlmX3Jl cV9zdGFydCAqYXJnKQ0KK3sNCisJaW50IHJldDsNCisJc3RydWN0IGhpZl9tc2cgKmhpZjsNCisJ c3RydWN0IGhpZl9yZXFfc3RhcnQgKmJvZHkgPSB3ZnhfYWxsb2NfaGlmKHNpemVvZigqYm9keSks ICZoaWYpOw0KKw0KKwltZW1jcHkoYm9keSwgYXJnLCBzaXplb2YoKmJvZHkpKTsNCisJY3B1X3Rv X2xlMTZzKCZib2R5LT5jaGFubmVsX251bWJlcik7DQorCWNwdV90b19sZTMycygmYm9keS0+YmVh Y29uX2ludGVydmFsKTsNCisJY3B1X3RvX2xlMzJzKCZib2R5LT5iYXNpY19yYXRlX3NldCk7DQor CXdmeF9maWxsX2hlYWRlcihoaWYsIHd2aWYtPmlkLCBISUZfUkVRX0lEX1NUQVJULCBzaXplb2Yo KmJvZHkpKTsNCisJcmV0ID0gd2Z4X2NtZF9zZW5kKHd2aWYtPndkZXYsIGhpZiwgTlVMTCwgMCwg ZmFsc2UpOw0KKwlrZnJlZShoaWYpOw0KKwlyZXR1cm4gcmV0Ow0KK30NCisNCitpbnQgaGlmX2Jl YWNvbl90cmFuc21pdChzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgYm9vbCBlbmFibGVfYmVhY29uaW5n KQ0KK3sNCisJaW50IHJldDsNCisJc3RydWN0IGhpZl9tc2cgKmhpZjsNCisJc3RydWN0IGhpZl9y ZXFfYmVhY29uX3RyYW5zbWl0ICpib2R5ID0gd2Z4X2FsbG9jX2hpZihzaXplb2YoKmJvZHkpLCAm aGlmKTsNCisNCisJYm9keS0+ZW5hYmxlX2JlYWNvbmluZyA9IGVuYWJsZV9iZWFjb25pbmcgPyAx IDogMDsNCisJd2Z4X2ZpbGxfaGVhZGVyKGhpZiwgd3ZpZi0+aWQsIEhJRl9SRVFfSURfQkVBQ09O X1RSQU5TTUlULCBzaXplb2YoKmJvZHkpKTsNCisJcmV0ID0gd2Z4X2NtZF9zZW5kKHd2aWYtPndk ZXYsIGhpZiwgTlVMTCwgMCwgZmFsc2UpOw0KKwlrZnJlZShoaWYpOw0KKwlyZXR1cm4gcmV0Ow0K K30NCisNCitpbnQgaGlmX21hcF9saW5rKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCB1OCAqbWFjX2Fk ZHIsIGludCBmbGFncywgaW50IHN0YV9pZCkNCit7DQorCWludCByZXQ7DQorCXN0cnVjdCBoaWZf bXNnICpoaWY7DQorCXN0cnVjdCBoaWZfcmVxX21hcF9saW5rICpib2R5ID0gd2Z4X2FsbG9jX2hp ZihzaXplb2YoKmJvZHkpLCAmaGlmKTsNCisNCisJaWYgKG1hY19hZGRyKQ0KKwkJZXRoZXJfYWRk cl9jb3B5KGJvZHktPm1hY19hZGRyLCBtYWNfYWRkcik7DQorCWJvZHktPm1hcF9saW5rX2ZsYWdz ID0gKihzdHJ1Y3QgaGlmX21hcF9saW5rX2ZsYWdzICopICZmbGFnczsNCisJYm9keS0+cGVlcl9z dGFfaWQgPSBzdGFfaWQ7DQorCXdmeF9maWxsX2hlYWRlcihoaWYsIHd2aWYtPmlkLCBISUZfUkVR X0lEX01BUF9MSU5LLCBzaXplb2YoKmJvZHkpKTsNCisJcmV0ID0gd2Z4X2NtZF9zZW5kKHd2aWYt PndkZXYsIGhpZiwgTlVMTCwgMCwgZmFsc2UpOw0KKwlrZnJlZShoaWYpOw0KKwlyZXR1cm4gcmV0 Ow0KK30NCisNCitpbnQgaGlmX3VwZGF0ZV9pZShzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgY29uc3Qg c3RydWN0IGhpZl9pZV9mbGFncyAqdGFyZ2V0X2ZyYW1lLA0KKwkJICBjb25zdCB1OCAqaWVzLCBz aXplX3QgaWVzX2xlbikNCit7DQorCWludCByZXQ7DQorCXN0cnVjdCBoaWZfbXNnICpoaWY7DQor CWludCBidWZfbGVuID0gc2l6ZW9mKHN0cnVjdCBoaWZfcmVxX3VwZGF0ZV9pZSkgKyBpZXNfbGVu Ow0KKwlzdHJ1Y3QgaGlmX3JlcV91cGRhdGVfaWUgKmJvZHkgPSB3ZnhfYWxsb2NfaGlmKGJ1Zl9s ZW4sICZoaWYpOw0KKw0KKwltZW1jcHkoJmJvZHktPmllX2ZsYWdzLCB0YXJnZXRfZnJhbWUsIHNp emVvZihzdHJ1Y3QgaGlmX2llX2ZsYWdzKSk7DQorCWJvZHktPm51bV9pX2VzID0gY3B1X3RvX2xl MTYoMSk7DQorCW1lbWNweShib2R5LT5pZSwgaWVzLCBpZXNfbGVuKTsNCisJd2Z4X2ZpbGxfaGVh ZGVyKGhpZiwgd3ZpZi0+aWQsIEhJRl9SRVFfSURfVVBEQVRFX0lFLCBidWZfbGVuKTsNCisJcmV0 ID0gd2Z4X2NtZF9zZW5kKHd2aWYtPndkZXYsIGhpZiwgTlVMTCwgMCwgZmFsc2UpOw0KKwlrZnJl ZShoaWYpOw0KKwlyZXR1cm4gcmV0Ow0KK30NCisNCitpbnQgaGlmX3NsX3NlbmRfcHViX2tleXMo c3RydWN0IHdmeF9kZXYgKndkZXYsIGNvbnN0IHVpbnQ4X3QgKnB1YmtleSwgY29uc3QgdWludDhf dCAqcHVia2V5X2htYWMpDQorew0KKwlpbnQgcmV0Ow0KKwlzdHJ1Y3QgaGlmX21zZyAqaGlmOw0K KwlzdHJ1Y3QgaGlmX3JlcV9zbF9leGNoYW5nZV9wdWJfa2V5cyAqYm9keSA9IHdmeF9hbGxvY19o aWYoc2l6ZW9mKCpib2R5KSwgJmhpZik7DQorDQorCWJvZHktPmFsZ29yaXRobSA9IEhJRl9TTF9D VVJWRTI1NTE5Ow0KKwltZW1jcHkoYm9keS0+aG9zdF9wdWJfa2V5LCBwdWJrZXksIHNpemVvZihi b2R5LT5ob3N0X3B1Yl9rZXkpKTsNCisJbWVtY3B5KGJvZHktPmhvc3RfcHViX2tleV9tYWMsIHB1 YmtleV9obWFjLCBzaXplb2YoYm9keS0+aG9zdF9wdWJfa2V5X21hYykpOw0KKwl3ZnhfZmlsbF9o ZWFkZXIoaGlmLCAtMSwgSElGX1JFUV9JRF9TTF9FWENIQU5HRV9QVUJfS0VZUywgc2l6ZW9mKCpi b2R5KSk7DQorCXJldCA9IHdmeF9jbWRfc2VuZCh3ZGV2LCBoaWYsIE5VTEwsIDAsIGZhbHNlKTsN CisJa2ZyZWUoaGlmKTsNCisJLy8gQ29tcGF0aWJpbGl0eSB3aXRoIGxlZ2FjeSBzZWN1cmUgbGlu aw0KKwlpZiAocmV0ID09IFNMX1BVQl9LRVlfRVhDSEFOR0VfU1RBVFVTX1NVQ0NFU1MpDQorCQly ZXQgPSAwOw0KKwlyZXR1cm4gcmV0Ow0KK30NCisNCitpbnQgaGlmX3NsX2NvbmZpZyhzdHJ1Y3Qg d2Z4X2RldiAqd2RldiwgY29uc3QgdW5zaWduZWQgbG9uZyAqYml0bWFwKQ0KK3sNCisJaW50IHJl dDsNCisJc3RydWN0IGhpZl9tc2cgKmhpZjsNCisJc3RydWN0IGhpZl9yZXFfc2xfY29uZmlndXJl ICpib2R5ID0gd2Z4X2FsbG9jX2hpZihzaXplb2YoKmJvZHkpLCAmaGlmKTsNCisNCisJbWVtY3B5 KGJvZHktPmVuY3JfYm1wLCBiaXRtYXAsIHNpemVvZihib2R5LT5lbmNyX2JtcCkpOw0KKwl3Znhf ZmlsbF9oZWFkZXIoaGlmLCAtMSwgSElGX1JFUV9JRF9TTF9DT05GSUdVUkUsIHNpemVvZigqYm9k eSkpOw0KKwlyZXQgPSB3ZnhfY21kX3NlbmQod2RldiwgaGlmLCBOVUxMLCAwLCBmYWxzZSk7DQor CWtmcmVlKGhpZik7DQorCXJldHVybiByZXQ7DQorfQ0KKw0KK2ludCBoaWZfc2xfc2V0X21hY19r ZXkoc3RydWN0IHdmeF9kZXYgKndkZXYsIGNvbnN0IHVpbnQ4X3QgKnNsa19rZXksIGludCBkZXN0 aW5hdGlvbikNCit7DQorCWludCByZXQ7DQorCXN0cnVjdCBoaWZfbXNnICpoaWY7DQorCXN0cnVj dCBoaWZfcmVxX3NldF9zbF9tYWNfa2V5ICpib2R5ID0gd2Z4X2FsbG9jX2hpZihzaXplb2YoKmJv ZHkpLCAmaGlmKTsNCisNCisJbWVtY3B5KGJvZHktPmtleV92YWx1ZSwgc2xrX2tleSwgc2l6ZW9m KGJvZHktPmtleV92YWx1ZSkpOw0KKwlib2R5LT5vdHBfb3JfcmFtID0gZGVzdGluYXRpb247DQor CXdmeF9maWxsX2hlYWRlcihoaWYsIC0xLCBISUZfUkVRX0lEX1NFVF9TTF9NQUNfS0VZLCBzaXpl b2YoKmJvZHkpKTsNCisJcmV0ID0gd2Z4X2NtZF9zZW5kKHdkZXYsIGhpZiwgTlVMTCwgMCwgZmFs c2UpOw0KKwlrZnJlZShoaWYpOw0KKwkvLyBDb21wYXRpYmlsaXR5IHdpdGggbGVnYWN5IHNlY3Vy ZSBsaW5rDQorCWlmIChyZXQgPT0gU0xfTUFDX0tFWV9TVEFUVVNfU1VDQ0VTUykNCisJCXJldCA9 IDA7DQorCXJldHVybiByZXQ7DQorfQ0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93Zngv aGlmX3R4LmggYi9kcml2ZXJzL3N0YWdpbmcvd2Z4L2hpZl90eC5oDQppbmRleCBjY2YyYjdlNWU4 NTEuLjMxZjJhMDJjODQ2NiAxMDA2NDQNCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy93ZngvaGlmX3R4 LmgNCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93ZngvaGlmX3R4LmgNCkBAIC0xNSw2ICsxNSwxMiBA QA0KIHN0cnVjdCB3ZnhfZGV2Ow0KIHN0cnVjdCB3ZnhfdmlmOw0KIA0KK3N0cnVjdCB3Znhfc2Nh bl9wYXJhbXMgew0KKwlzdHJ1Y3QgaGlmX3JlcV9zdGFydF9zY2FuIHNjYW5fcmVxOw0KKwlzdHJ1 Y3QgaGlmX3NzaWRfZGVmICpzc2lkczsNCisJdWludDhfdCAqY2g7DQorfTsNCisNCiBzdHJ1Y3Qg d2Z4X2hpZl9jbWQgew0KIAlzdHJ1Y3QgbXV0ZXggICAgICBsb2NrOw0KIAlzdHJ1Y3QgY29tcGxl dGlvbiByZWFkeTsNCkBAIC0zMCw0ICszNiwzMSBAQCB2b2lkIHdmeF9pbml0X2hpZl9jbWQoc3Ry dWN0IHdmeF9oaWZfY21kICp3ZnhfaGlmX2NtZCk7DQogaW50IHdmeF9jbWRfc2VuZChzdHJ1Y3Qg d2Z4X2RldiAqd2Rldiwgc3RydWN0IGhpZl9tc2cgKnJlcXVlc3QsDQogCQkgdm9pZCAqcmVwbHks IHNpemVfdCByZXBseV9sZW4sIGJvb2wgYXN5bmMpOw0KIA0KK2ludCBoaWZfc2h1dGRvd24oc3Ry dWN0IHdmeF9kZXYgKndkZXYpOw0KK2ludCBoaWZfY29uZmlndXJhdGlvbihzdHJ1Y3Qgd2Z4X2Rl diAqd2RldiwgY29uc3QgdTggKmNvbmYsIHNpemVfdCBsZW4pOw0KK2ludCBoaWZfcmVzZXQoc3Ry dWN0IHdmeF92aWYgKnd2aWYsIGJvb2wgcmVzZXRfc3RhdCk7DQoraW50IGhpZl9yZWFkX21pYihz dHJ1Y3Qgd2Z4X2RldiAqd2RldiwgaW50IHZpZl9pZCwgdTE2IG1pYl9pZCwNCisJCSB2b2lkICpi dWYsIHNpemVfdCBidWZfc2l6ZSk7DQoraW50IGhpZl93cml0ZV9taWIoc3RydWN0IHdmeF9kZXYg KndkZXYsIGludCB2aWZfaWQsIHUxNiBtaWJfaWQsDQorCQkgIHZvaWQgKmJ1Ziwgc2l6ZV90IGJ1 Zl9zaXplKTsNCitpbnQgaGlmX3NjYW4oc3RydWN0IHdmeF92aWYgKnd2aWYsIGNvbnN0IHN0cnVj dCB3Znhfc2Nhbl9wYXJhbXMgKmFyZyk7DQoraW50IGhpZl9zdG9wX3NjYW4oc3RydWN0IHdmeF92 aWYgKnd2aWYpOw0KK2ludCBoaWZfam9pbihzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgY29uc3Qgc3Ry dWN0IGhpZl9yZXFfam9pbiAqYXJnKTsNCitpbnQgaGlmX3NldF9wbShzdHJ1Y3Qgd2Z4X3ZpZiAq d3ZpZiwgY29uc3Qgc3RydWN0IGhpZl9yZXFfc2V0X3BtX21vZGUgKmFyZyk7DQoraW50IGhpZl9z ZXRfYnNzX3BhcmFtcyhzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwNCisJCSAgICAgICBjb25zdCBzdHJ1 Y3QgaGlmX3JlcV9zZXRfYnNzX3BhcmFtcyAqYXJnKTsNCitpbnQgaGlmX2FkZF9rZXkoc3RydWN0 IHdmeF9kZXYgKndkZXYsIGNvbnN0IHN0cnVjdCBoaWZfcmVxX2FkZF9rZXkgKmFyZyk7DQoraW50 IGhpZl9yZW1vdmVfa2V5KHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBpbnQgaWR4KTsNCitpbnQgaGlm X3NldF9lZGNhX3F1ZXVlX3BhcmFtcyhzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwNCisJCQkgICAgICBj b25zdCBzdHJ1Y3QgaGlmX3JlcV9lZGNhX3F1ZXVlX3BhcmFtcyAqYXJnKTsNCitpbnQgaGlmX3N0 YXJ0KHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBjb25zdCBzdHJ1Y3QgaGlmX3JlcV9zdGFydCAqYXJn KTsNCitpbnQgaGlmX2JlYWNvbl90cmFuc21pdChzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgYm9vbCBl bmFibGUpOw0KK2ludCBoaWZfbWFwX2xpbmsoc3RydWN0IHdmeF92aWYgKnd2aWYsIHU4ICptYWNf YWRkciwgaW50IGZsYWdzLCBpbnQgc3RhX2lkKTsNCitpbnQgaGlmX3VwZGF0ZV9pZShzdHJ1Y3Qg d2Z4X3ZpZiAqd3ZpZiwgY29uc3Qgc3RydWN0IGhpZl9pZV9mbGFncyAqdGFyZ2V0X2ZyYW1lLA0K KwkJICBjb25zdCB1OCAqaWVzLCBzaXplX3QgaWVzX2xlbik7DQoraW50IGhpZl9zbF9zZXRfbWFj X2tleShzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgY29uc3QgdWludDhfdCAqc2xrX2tleSwgaW50IGRl c3RpbmF0aW9uKTsNCitpbnQgaGlmX3NsX2NvbmZpZyhzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgY29u c3QgdW5zaWduZWQgbG9uZyAqYml0bWFwKTsNCitpbnQgaGlmX3NsX3NlbmRfcHViX2tleXMoc3Ry dWN0IHdmeF9kZXYgKndkZXYsDQorCQkJIGNvbnN0IHVpbnQ4X3QgKnB1YmtleSwgY29uc3QgdWlu dDhfdCAqcHVia2V5X2htYWMpOw0KKw0KICNlbmRpZg0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3Rh Z2luZy93ZngvaGlmX3R4X21pYi5oIGIvZHJpdmVycy9zdGFnaW5nL3dmeC9oaWZfdHhfbWliLmgN Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwMDAuLmY2NjI0YTQwMzAxNg0K LS0tIC9kZXYvbnVsbA0KKysrIGIvZHJpdmVycy9zdGFnaW5nL3dmeC9oaWZfdHhfbWliLmgNCkBA IC0wLDAgKzEsMjgxIEBADQorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25s eSAqLw0KKy8qDQorICogSW1wbGVtZW50YXRpb24gb2YgaG9zdC10by1jaGlwIE1JQnMgb2YgV0Z4 eHggU3BsaXQgTWFjIChXU00pIEFQSS4NCisgKg0KKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDE5 LCBTaWxpY29uIExhYm9yYXRvcmllcywgSW5jLg0KKyAqIENvcHlyaWdodCAoYykgMjAxMCwgU1Qt RXJpY3Nzb24NCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIFNULUVyaWNzc29uIFNBDQorICovDQor I2lmbmRlZiBXRlhfSElGX1RYX01JQl9IDQorI2RlZmluZSBXRlhfSElGX1RYX01JQl9IDQorDQor I2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+DQorDQorI2luY2x1ZGUgIndmeC5oIg0KKyNp bmNsdWRlICJoaWZfdHguaCINCisjaW5jbHVkZSAiaGlmX2FwaV9taWIuaCINCisNCitzdGF0aWMg aW5saW5lIGludCBoaWZfc2V0X291dHB1dF9wb3dlcihzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgaW50 IHBvd2VyX2xldmVsKQ0KK3sNCisJX19sZTMyIHZhbCA9IGNwdV90b19sZTMyKHBvd2VyX2xldmVs KTsNCisNCisJcmV0dXJuIGhpZl93cml0ZV9taWIod3ZpZi0+d2Rldiwgd3ZpZi0+aWQsDQorCQkJ ICAgICBISUZfTUlCX0lEX0NVUlJFTlRfVFhfUE9XRVJfTEVWRUwsDQorCQkJICAgICAmdmFsLCBz aXplb2YodmFsKSk7DQorfQ0KKw0KK3N0YXRpYyBpbmxpbmUgaW50IGhpZl9zZXRfYmVhY29uX3dh a2V1cF9wZXJpb2Qoc3RydWN0IHdmeF92aWYgKnd2aWYsDQorCQkJCQkgICAgICAgdW5zaWduZWQg aW50IGR0aW1faW50ZXJ2YWwsDQorCQkJCQkgICAgICAgdW5zaWduZWQgaW50IGxpc3Rlbl9pbnRl cnZhbCkNCit7DQorCXN0cnVjdCBoaWZfbWliX2JlYWNvbl93YWtlX3VwX3BlcmlvZCB2YWwgPSB7 DQorCQkud2FrZXVwX3BlcmlvZF9taW4gPSBkdGltX2ludGVydmFsLA0KKwkJLnJlY2VpdmVfZHRp bSA9IDAsDQorCQkud2FrZXVwX3BlcmlvZF9tYXggPSBjcHVfdG9fbGUxNihsaXN0ZW5faW50ZXJ2 YWwpLA0KKwl9Ow0KKw0KKwlpZiAoZHRpbV9pbnRlcnZhbCA+IDB4RkYgfHwgbGlzdGVuX2ludGVy dmFsID4gMHhGRkZGKQ0KKwkJcmV0dXJuIC1FSU5WQUw7DQorCXJldHVybiBoaWZfd3JpdGVfbWli KHd2aWYtPndkZXYsIHd2aWYtPmlkLA0KKwkJCSAgICAgSElGX01JQl9JRF9CRUFDT05fV0FLRVVQ X1BFUklPRCwNCisJCQkgICAgICZ2YWwsIHNpemVvZih2YWwpKTsNCit9DQorDQorc3RhdGljIGlu bGluZSBpbnQgaGlmX3NldF9yY3BpX3Jzc2lfdGhyZXNob2xkKHN0cnVjdCB3ZnhfdmlmICp3dmlm LA0KKwkJCQkJICAgICAgc3RydWN0IGhpZl9taWJfcmNwaV9yc3NpX3RocmVzaG9sZCAqYXJnKQ0K K3sNCisJcmV0dXJuIGhpZl93cml0ZV9taWIod3ZpZi0+d2Rldiwgd3ZpZi0+aWQsDQorCQkJICAg ICBISUZfTUlCX0lEX1JDUElfUlNTSV9USFJFU0hPTEQsIGFyZywgc2l6ZW9mKCphcmcpKTsNCit9 DQorDQorc3RhdGljIGlubGluZSBpbnQgaGlmX2dldF9jb3VudGVyc190YWJsZShzdHJ1Y3Qgd2Z4 X2RldiAqd2RldiwNCisJCQkJCSBzdHJ1Y3QgaGlmX21pYl9leHRlbmRlZF9jb3VudF90YWJsZSAq YXJnKQ0KK3sNCisJaWYgKHdmeF9hcGlfb2xkZXJfdGhhbih3ZGV2LCAxLCAzKSkgew0KKwkJLy8g ZXh0ZW5kZWRfY291bnRfdGFibGUgaXMgd2lkZXIgdGhhbiBjb3VudF90YWJsZQ0KKwkJbWVtc2V0 KGFyZywgMHhGRiwgc2l6ZW9mKCphcmcpKTsNCisJCXJldHVybiBoaWZfcmVhZF9taWIod2Rldiwg MCwgSElGX01JQl9JRF9DT1VOVEVSU19UQUJMRSwNCisJCQkJICAgIGFyZywgc2l6ZW9mKHN0cnVj dCBoaWZfbWliX2NvdW50X3RhYmxlKSk7DQorCX0gZWxzZSB7DQorCQlyZXR1cm4gaGlmX3JlYWRf bWliKHdkZXYsIDAsIEhJRl9NSUJfSURfRVhURU5ERURfQ09VTlRFUlNfVEFCTEUsDQorCQkJCSAg ICBhcmcsIHNpemVvZihzdHJ1Y3QgaGlmX21pYl9leHRlbmRlZF9jb3VudF90YWJsZSkpOw0KKwl9 DQorfQ0KKw0KK3N0YXRpYyBpbmxpbmUgaW50IGhpZl9zZXRfbWFjYWRkcihzdHJ1Y3Qgd2Z4X3Zp ZiAqd3ZpZiwgdTggKm1hYykNCit7DQorCXN0cnVjdCBoaWZfbWliX21hY19hZGRyZXNzIG1zZyA9 IHsgfTsNCisNCisJaWYgKG1hYykNCisJCWV0aGVyX2FkZHJfY29weShtc2cubWFjX2FkZHIsIG1h Yyk7DQorCXJldHVybiBoaWZfd3JpdGVfbWliKHd2aWYtPndkZXYsIHd2aWYtPmlkLCBISUZfTUlC X0lEX0RPVDExX01BQ19BRERSRVNTLA0KKwkJCSAgICAgJm1zZywgc2l6ZW9mKG1zZykpOw0KK30N CisNCitzdGF0aWMgaW5saW5lIGludCBoaWZfc2V0X3J4X2ZpbHRlcihzdHJ1Y3Qgd2Z4X3ZpZiAq d3ZpZiwgYm9vbCBmaWx0ZXJfYnNzaWQsDQorCQkJCSAgICBib29sIGZ3ZF9wcm9iZV9yZXEpDQor ew0KKwlzdHJ1Y3QgaGlmX21pYl9yeF9maWx0ZXIgdmFsID0geyB9Ow0KKw0KKwlpZiAoZmlsdGVy X2Jzc2lkKQ0KKwkJdmFsLmJzc2lkX2ZpbHRlciA9IDE7DQorCWlmIChmd2RfcHJvYmVfcmVxKQ0K KwkJdmFsLmZ3ZF9wcm9iZV9yZXEgPSAxOw0KKwlyZXR1cm4gaGlmX3dyaXRlX21pYih3dmlmLT53 ZGV2LCB3dmlmLT5pZCwgSElGX01JQl9JRF9SWF9GSUxURVIsDQorCQkJICAgICAmdmFsLCBzaXpl b2YodmFsKSk7DQorfQ0KKw0KK3N0YXRpYyBpbmxpbmUgaW50IGhpZl9zZXRfYmVhY29uX2ZpbHRl cl90YWJsZShzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwNCisJCQkJCSAgICAgIHN0cnVjdCBoaWZfbWli X2Jjbl9maWx0ZXJfdGFibGUgKmZ0KQ0KK3sNCisJc2l6ZV90IGJ1Zl9sZW4gPSBzdHJ1Y3Rfc2l6 ZShmdCwgaWVfdGFibGUsIGZ0LT5udW1fb2ZfaW5mb19lbG10cyk7DQorDQorCWNwdV90b19sZTMy cygmZnQtPm51bV9vZl9pbmZvX2VsbXRzKTsNCisJcmV0dXJuIGhpZl93cml0ZV9taWIod3ZpZi0+ d2Rldiwgd3ZpZi0+aWQsDQorCQkJICAgICBISUZfTUlCX0lEX0JFQUNPTl9GSUxURVJfVEFCTEUs IGZ0LCBidWZfbGVuKTsNCit9DQorDQorc3RhdGljIGlubGluZSBpbnQgaGlmX2JlYWNvbl9maWx0 ZXJfY29udHJvbChzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwNCisJCQkJCSAgICBpbnQgZW5hYmxlLCBp bnQgYmVhY29uX2NvdW50KQ0KK3sNCisJc3RydWN0IGhpZl9taWJfYmNuX2ZpbHRlcl9lbmFibGUg YXJnID0gew0KKwkJLmVuYWJsZSA9IGNwdV90b19sZTMyKGVuYWJsZSksDQorCQkuYmNuX2NvdW50 ID0gY3B1X3RvX2xlMzIoYmVhY29uX2NvdW50KSwNCisJfTsNCisJcmV0dXJuIGhpZl93cml0ZV9t aWIod3ZpZi0+d2Rldiwgd3ZpZi0+aWQsDQorCQkJICAgICBISUZfTUlCX0lEX0JFQUNPTl9GSUxU RVJfRU5BQkxFLCAmYXJnLCBzaXplb2YoYXJnKSk7DQorfQ0KKw0KK3N0YXRpYyBpbmxpbmUgaW50 IGhpZl9zZXRfb3BlcmF0aW9uYWxfbW9kZShzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwNCisJCQkJCSAg IGVudW0gaGlmX29wX3Bvd2VyX21vZGUgbW9kZSkNCit7DQorCXN0cnVjdCBoaWZfbWliX2dsX29w ZXJhdGlvbmFsX3Bvd2VyX21vZGUgdmFsID0gew0KKwkJLnBvd2VyX21vZGUgPSBtb2RlLA0KKwkJ Lnd1cF9pbmRfYWN0aXZhdGlvbiA9IDEsDQorCX07DQorDQorCXJldHVybiBoaWZfd3JpdGVfbWli KHdkZXYsIC0xLCBISUZfTUlCX0lEX0dMX09QRVJBVElPTkFMX1BPV0VSX01PREUsDQorCQkJICAg ICAmdmFsLCBzaXplb2YodmFsKSk7DQorfQ0KKw0KK3N0YXRpYyBpbmxpbmUgaW50IGhpZl9zZXRf dGVtcGxhdGVfZnJhbWUoc3RydWN0IHdmeF92aWYgKnd2aWYsDQorCQkJCQkgc3RydWN0IGhpZl9t aWJfdGVtcGxhdGVfZnJhbWUgKmFyZykNCit7DQorCXJldHVybiBoaWZfd3JpdGVfbWliKHd2aWYt PndkZXYsIHd2aWYtPmlkLCBISUZfTUlCX0lEX1RFTVBMQVRFX0ZSQU1FLA0KKwkJCSAgICAgYXJn LCBzaXplb2YoKmFyZykpOw0KK30NCisNCitzdGF0aWMgaW5saW5lIGludCBoaWZfc2V0X21mcChz dHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgYm9vbCBjYXBhYmxlLCBib29sIHJlcXVpcmVkKQ0KK3sNCisJ c3RydWN0IGhpZl9taWJfcHJvdGVjdGVkX21nbXRfcG9saWN5IHZhbCA9IHsgfTsNCisNCisJV0FS Tl9PTihyZXF1aXJlZCAmJiAhY2FwYWJsZSk7DQorCWlmIChjYXBhYmxlKSB7DQorCQl2YWwucG1m X2VuYWJsZSA9IDE7DQorCQl2YWwuaG9zdF9lbmNfYXV0aF9mcmFtZXMgPSAxOw0KKwl9DQorCWlm ICghcmVxdWlyZWQpDQorCQl2YWwudW5wbWZfYWxsb3dlZCA9IDE7DQorCWNwdV90b19sZTMycygm dmFsKTsNCisJcmV0dXJuIGhpZl93cml0ZV9taWIod3ZpZi0+d2Rldiwgd3ZpZi0+aWQsDQorCQkJ ICAgICBISUZfTUlCX0lEX1BST1RFQ1RFRF9NR01UX1BPTElDWSwNCisJCQkgICAgICZ2YWwsIHNp emVvZih2YWwpKTsNCit9DQorDQorc3RhdGljIGlubGluZSBpbnQgaGlmX3NldF9ibG9ja19hY2tf cG9saWN5KHN0cnVjdCB3ZnhfdmlmICp3dmlmLA0KKwkJCQkJICAgdTggdHhfdGlkX3BvbGljeSwg dTggcnhfdGlkX3BvbGljeSkNCit7DQorCXN0cnVjdCBoaWZfbWliX2Jsb2NrX2Fja19wb2xpY3kg dmFsID0gew0KKwkJLmJsb2NrX2Fja190eF90aWRfcG9saWN5ID0gdHhfdGlkX3BvbGljeSwNCisJ CS5ibG9ja19hY2tfcnhfdGlkX3BvbGljeSA9IHJ4X3RpZF9wb2xpY3ksDQorCX07DQorDQorCXJl dHVybiBoaWZfd3JpdGVfbWliKHd2aWYtPndkZXYsIHd2aWYtPmlkLCBISUZfTUlCX0lEX0JMT0NL X0FDS19QT0xJQ1ksDQorCQkJICAgICAmdmFsLCBzaXplb2YodmFsKSk7DQorfQ0KKw0KK3N0YXRp YyBpbmxpbmUgaW50IGhpZl9zZXRfYXNzb2NpYXRpb25fbW9kZShzdHJ1Y3Qgd2Z4X3ZpZiAqd3Zp ZiwNCisJCQkJCSAgIHN0cnVjdCBoaWZfbWliX3NldF9hc3NvY2lhdGlvbl9tb2RlICphcmcpDQor ew0KKwlyZXR1cm4gaGlmX3dyaXRlX21pYih3dmlmLT53ZGV2LCB3dmlmLT5pZCwNCisJCQkgICAg IEhJRl9NSUJfSURfU0VUX0FTU09DSUFUSU9OX01PREUsIGFyZywgc2l6ZW9mKCphcmcpKTsNCit9 DQorDQorc3RhdGljIGlubGluZSBpbnQgaGlmX3NldF90eF9yYXRlX3JldHJ5X3BvbGljeShzdHJ1 Y3Qgd2Z4X3ZpZiAqd3ZpZiwNCisJCQkJCSAgICAgICBzdHJ1Y3QgaGlmX21pYl9zZXRfdHhfcmF0 ZV9yZXRyeV9wb2xpY3kgKmFyZykNCit7DQorCXNpemVfdCBzaXplID0gc3RydWN0X3NpemUoYXJn LCB0eF9yYXRlX3JldHJ5X3BvbGljeSwgYXJnLT5udW1fdHhfcmF0ZV9wb2xpY2llcyk7DQorDQor CXJldHVybiBoaWZfd3JpdGVfbWliKHd2aWYtPndkZXYsIHd2aWYtPmlkLA0KKwkJCSAgICAgSElG X01JQl9JRF9TRVRfVFhfUkFURV9SRVRSWV9QT0xJQ1ksIGFyZywgc2l6ZSk7DQorfQ0KKw0KK3N0 YXRpYyBpbmxpbmUgaW50IGhpZl9zZXRfbWFjX2FkZHJfY29uZGl0aW9uKHN0cnVjdCB3Znhfdmlm ICp3dmlmLA0KKwkJCQkJICAgICBzdHJ1Y3QgaGlmX21pYl9tYWNfYWRkcl9kYXRhX2ZyYW1lX2Nv bmRpdGlvbiAqYXJnKQ0KK3sNCisJcmV0dXJuIGhpZl93cml0ZV9taWIod3ZpZi0+d2Rldiwgd3Zp Zi0+aWQsDQorCQkJICAgICBISUZfTUlCX0lEX01BQ19BRERSX0RBVEFGUkFNRV9DT05ESVRJT04s DQorCQkJICAgICBhcmcsIHNpemVvZigqYXJnKSk7DQorfQ0KKw0KK3N0YXRpYyBpbmxpbmUgaW50 IGhpZl9zZXRfdWNfbWNfYmNfY29uZGl0aW9uKHN0cnVjdCB3ZnhfdmlmICp3dmlmLA0KKwkJCQkJ ICAgICBzdHJ1Y3QgaGlmX21pYl91Y19tY19iY19kYXRhX2ZyYW1lX2NvbmRpdGlvbiAqYXJnKQ0K K3sNCisJcmV0dXJuIGhpZl93cml0ZV9taWIod3ZpZi0+d2Rldiwgd3ZpZi0+aWQsDQorCQkJICAg ICBISUZfTUlCX0lEX1VDX01DX0JDX0RBVEFGUkFNRV9DT05ESVRJT04sDQorCQkJICAgICBhcmcs IHNpemVvZigqYXJnKSk7DQorfQ0KKw0KK3N0YXRpYyBpbmxpbmUgaW50IGhpZl9zZXRfY29uZmln X2RhdGFfZmlsdGVyKHN0cnVjdCB3ZnhfdmlmICp3dmlmLA0KKwkJCQkJICAgICBzdHJ1Y3QgaGlm X21pYl9jb25maWdfZGF0YV9maWx0ZXIgKmFyZykNCit7DQorCXJldHVybiBoaWZfd3JpdGVfbWli KHd2aWYtPndkZXYsIHd2aWYtPmlkLA0KKwkJCSAgICAgSElGX01JQl9JRF9DT05GSUdfREFUQV9G SUxURVIsIGFyZywgc2l6ZW9mKCphcmcpKTsNCit9DQorDQorc3RhdGljIGlubGluZSBpbnQgaGlm X3NldF9kYXRhX2ZpbHRlcmluZyhzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwNCisJCQkJCSBzdHJ1Y3Qg aGlmX21pYl9zZXRfZGF0YV9maWx0ZXJpbmcgKmFyZykNCit7DQorCXJldHVybiBoaWZfd3JpdGVf bWliKHd2aWYtPndkZXYsIHd2aWYtPmlkLA0KKwkJCSAgICAgSElGX01JQl9JRF9TRVRfREFUQV9G SUxURVJJTkcsIGFyZywgc2l6ZW9mKCphcmcpKTsNCit9DQorDQorc3RhdGljIGlubGluZSBpbnQg aGlmX2tlZXBfYWxpdmVfcGVyaW9kKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBpbnQgcGVyaW9kKQ0K K3sNCisJc3RydWN0IGhpZl9taWJfa2VlcF9hbGl2ZV9wZXJpb2QgYXJnID0gew0KKwkJLmtlZXBf YWxpdmVfcGVyaW9kID0gY3B1X3RvX2xlMTYocGVyaW9kKSwNCisJfTsNCisNCisJcmV0dXJuIGhp Zl93cml0ZV9taWIod3ZpZi0+d2Rldiwgd3ZpZi0+aWQsIEhJRl9NSUJfSURfS0VFUF9BTElWRV9Q RVJJT0QsDQorCQkJICAgICAmYXJnLCBzaXplb2YoYXJnKSk7DQorfTsNCisNCitzdGF0aWMgaW5s aW5lIGludCBoaWZfc2V0X2FycF9pcHY0X2ZpbHRlcihzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwNCisJ CQkJCSAgc3RydWN0IGhpZl9taWJfYXJwX2lwX2FkZHJfdGFibGUgKmZwKQ0KK3sNCisJcmV0dXJu IGhpZl93cml0ZV9taWIod3ZpZi0+d2Rldiwgd3ZpZi0+aWQsDQorCQkJICAgICBISUZfTUlCX0lE X0FSUF9JUF9BRERSRVNTRVNfVEFCTEUsDQorCQkJICAgICBmcCwgc2l6ZW9mKCpmcCkpOw0KK30N CisNCitzdGF0aWMgaW5saW5lIGludCBoaWZfdXNlX211bHRpX3R4X2NvbmYoc3RydWN0IHdmeF9k ZXYgKndkZXYsDQorCQkJCQlib29sIGVuYWJsZWQpDQorew0KKwlfX2xlMzIgYXJnID0gZW5hYmxl ZCA/IGNwdV90b19sZTMyKDEpIDogMDsNCisNCisJcmV0dXJuIGhpZl93cml0ZV9taWIod2Rldiwg LTEsIEhJRl9NSUJfSURfR0xfU0VUX01VTFRJX01TRywNCisJCQkgICAgICZhcmcsIHNpemVvZihh cmcpKTsNCit9DQorDQorc3RhdGljIGlubGluZSBpbnQgaGlmX3NldF91YXBzZF9pbmZvKHN0cnVj dCB3ZnhfdmlmICp3dmlmLA0KKwkJCQkgICAgIHN0cnVjdCBoaWZfbWliX3NldF91YXBzZF9pbmZv cm1hdGlvbiAqYXJnKQ0KK3sNCisJcmV0dXJuIGhpZl93cml0ZV9taWIod3ZpZi0+d2Rldiwgd3Zp Zi0+aWQsDQorCQkJICAgICBISUZfTUlCX0lEX1NFVF9VQVBTRF9JTkZPUk1BVElPTiwNCisJCQkg ICAgIGFyZywgc2l6ZW9mKCphcmcpKTsNCit9DQorDQorc3RhdGljIGlubGluZSBpbnQgaGlmX2Vy cF91c2VfcHJvdGVjdGlvbihzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgYm9vbCBlbmFibGUpDQorew0K KwlfX2xlMzIgYXJnID0gZW5hYmxlID8gY3B1X3RvX2xlMzIoMSkgOiAwOw0KKw0KKwlyZXR1cm4g aGlmX3dyaXRlX21pYih3dmlmLT53ZGV2LCB3dmlmLT5pZCwNCisJCQkgICAgIEhJRl9NSUJfSURf Tk9OX0VSUF9QUk9URUNUSU9OLCAmYXJnLCBzaXplb2YoYXJnKSk7DQorfQ0KKw0KK3N0YXRpYyBp bmxpbmUgaW50IGhpZl9zbG90X3RpbWUoc3RydWN0IHdmeF92aWYgKnd2aWYsIGludCB2YWwpDQor ew0KKwlfX2xlMzIgYXJnID0gY3B1X3RvX2xlMzIodmFsKTsNCisNCisJcmV0dXJuIGhpZl93cml0 ZV9taWIod3ZpZi0+d2Rldiwgd3ZpZi0+aWQsIEhJRl9NSUJfSURfU0xPVF9USU1FLA0KKwkJCSAg ICAgJmFyZywgc2l6ZW9mKGFyZykpOw0KK30NCisNCitzdGF0aWMgaW5saW5lIGludCBoaWZfZHVh bF9jdHNfcHJvdGVjdGlvbihzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgYm9vbCB2YWwpDQorew0KKwlz dHJ1Y3QgaGlmX21pYl9zZXRfaHRfcHJvdGVjdGlvbiBhcmcgPSB7DQorCQkuZHVhbF9jdHNfcHJv dCA9IHZhbCwNCisJfTsNCisNCisJcmV0dXJuIGhpZl93cml0ZV9taWIod3ZpZi0+d2Rldiwgd3Zp Zi0+aWQsIEhJRl9NSUJfSURfU0VUX0hUX1BST1RFQ1RJT04sDQorCQkJICAgICAmYXJnLCBzaXpl b2YoYXJnKSk7DQorfQ0KKw0KK3N0YXRpYyBpbmxpbmUgaW50IGhpZl93ZXBfZGVmYXVsdF9rZXlf aWQoc3RydWN0IHdmeF92aWYgKnd2aWYsIGludCB2YWwpDQorew0KKwlfX2xlMzIgYXJnID0gY3B1 X3RvX2xlMzIodmFsKTsNCisNCisJcmV0dXJuIGhpZl93cml0ZV9taWIod3ZpZi0+d2Rldiwgd3Zp Zi0+aWQsDQorCQkJICAgICBISUZfTUlCX0lEX0RPVDExX1dFUF9ERUZBVUxUX0tFWV9JRCwNCisJ CQkgICAgICZhcmcsIHNpemVvZihhcmcpKTsNCit9DQorDQorc3RhdGljIGlubGluZSBpbnQgaGlm X3J0c190aHJlc2hvbGQoc3RydWN0IHdmeF92aWYgKnd2aWYsIGludCB2YWwpDQorew0KKwlfX2xl MzIgYXJnID0gY3B1X3RvX2xlMzIodmFsID4gMCA/IHZhbCA6IDB4RkZGRik7DQorDQorCXJldHVy biBoaWZfd3JpdGVfbWliKHd2aWYtPndkZXYsIHd2aWYtPmlkLA0KKwkJCSAgICAgSElGX01JQl9J RF9ET1QxMV9SVFNfVEhSRVNIT0xELCAmYXJnLCBzaXplb2YoYXJnKSk7DQorfQ0KKw0KKyNlbmRp Zg0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93Zngvd2Z4LmggYi9kcml2ZXJzL3N0YWdp bmcvd2Z4L3dmeC5oDQppbmRleCBiZjlkZTExZjg4OTYuLmUyM2U4NmQ0ZDdmMCAxMDA2NDQNCi0t LSBhL2RyaXZlcnMvc3RhZ2luZy93Zngvd2Z4LmgNCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93Zngv d2Z4LmgNCkBAIC0xMCw2ICsxMCw3IEBADQogI2lmbmRlZiBXRlhfSA0KICNkZWZpbmUgV0ZYX0gN CiANCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPg0KICNpbmNsdWRlIDxsaW51eC9jb21wbGV0 aW9uLmg+DQogI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPg0KIA0KQEAgLTE4LDYgKzE5LDExIEBA DQogI2luY2x1ZGUgImhpZl90eC5oIg0KICNpbmNsdWRlICJoaWZfYXBpX2dlbmVyYWwuaCINCiAN CisjaWYgKEtFUk5FTF9WRVJTSU9OKDQsIDE3LCAwKSA+IExJTlVYX1ZFUlNJT05fQ09ERSkNCisj ZGVmaW5lIHN0cnVjdF9zaXplKHAsIG1lbWJlciwgbikgXA0KKwkobiAqIHNpemVvZigqKHApLT5t ZW1iZXIpICsgX19tdXN0X2JlX2FycmF5KChwKS0+bWVtYmVyKSArIHNpemVvZigqKHApKSkNCisj ZW5kaWYNCisNCiBzdHJ1Y3QgaHdidXNfb3BzOw0KIA0KIHN0cnVjdCB3ZnhfZGV2IHsNCi0tIA0K Mi4yMC4xDQo=