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.9 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 83BD3C4321A for ; Tue, 11 Jun 2019 14:15:34 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 2DE04205ED for ; Tue, 11 Jun 2019 14:15:34 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=Mellanox.com header.i=@Mellanox.com header.b="Nue+D8xO" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388492AbfFKOPd (ORCPT ); Tue, 11 Jun 2019 10:15:33 -0400 Received: from mail-eopbgr00065.outbound.protection.outlook.com ([40.107.0.65]:17123 "EHLO EUR02-AM5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S2387486AbfFKOPc (ORCPT ); Tue, 11 Jun 2019 10:15:32 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=qej0Fdt869q44q4nueNjlWieLTCk9RcteQcOn2TD+BI=; b=Nue+D8xOmx16tef4y5/rt22EihttFnRsfzJ3Kkexj6RmhFpOZWQezVRSgVT0DNDSbzO7kTUTuod0gbYoq0X6Hd65Uk8k9SYGYO7eYbLRVcFnPueTepFq1gV/v2MgmGHkmG/RlNWTbLQHuliPgxhr1TzHcPXeGS3rn4EX1lG4Vyc= Received: from AM4PR05MB3411.eurprd05.prod.outlook.com (10.171.190.30) by AM4PR05MB3428.eurprd05.prod.outlook.com (10.171.186.148) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1965.14; Tue, 11 Jun 2019 14:15:22 +0000 Received: from AM4PR05MB3411.eurprd05.prod.outlook.com ([fe80::1180:59ab:b53a:a27f]) by AM4PR05MB3411.eurprd05.prod.outlook.com ([fe80::1180:59ab:b53a:a27f%3]) with mapi id 15.20.1965.017; Tue, 11 Jun 2019 14:15:22 +0000 From: Paul Blakey To: =?utf-8?B?VG9rZSBIw7hpbGFuZC1Kw7hyZ2Vuc2Vu?= , Jiri Pirko , Roi Dayan , Yossi Kuperman , Oz Shlomo , Marcelo Ricardo Leitner , "netdev@vger.kernel.org" , David Miller , Aaron Conole , Zhike Wang CC: Rony Efraim , "nst-kernel@redhat.com" , John Hurley , Simon Horman , Justin Pettit , Kevin Darbyshire-Bryant Subject: Re: [PATCH net-next 1/3] net/sched: Introduce action ct Thread-Topic: [PATCH net-next 1/3] net/sched: Introduce action ct Thread-Index: AQHVIFmsY/4/azwa5kOjF2Jw4P/H36aWexsAgAAEYgA= Date: Tue, 11 Jun 2019 14:15:21 +0000 Message-ID: References: <1560259713-25603-1-git-send-email-paulb@mellanox.com> <1560259713-25603-2-git-send-email-paulb@mellanox.com> <87d0jkgr3r.fsf@toke.dk> In-Reply-To: <87d0jkgr3r.fsf@toke.dk> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: AM6P194CA0108.EURP194.PROD.OUTLOOK.COM (2603:10a6:209:8f::49) To AM4PR05MB3411.eurprd05.prod.outlook.com (2603:10a6:205:b::30) authentication-results: spf=none (sender IP is ) smtp.mailfrom=paulb@mellanox.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [193.47.165.251] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: ff452941-ca2a-41fa-4fe1-08d6ee773d3c x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600148)(711020)(4605104)(1401327)(4618075)(2017052603328)(7193020);SRVR:AM4PR05MB3428; x-ms-traffictypediagnostic: AM4PR05MB3428: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:1227; x-forefront-prvs: 006546F32A x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(376002)(396003)(39860400002)(346002)(136003)(366004)(189003)(43544003)(199004)(52116002)(53946003)(6436002)(68736007)(8676002)(229853002)(6512007)(66066001)(5660300002)(99286004)(14454004)(305945005)(7736002)(81166006)(71200400001)(2501003)(2906002)(36756003)(8936002)(3846002)(71190400001)(6486002)(81156014)(316002)(6116002)(30864003)(446003)(478600001)(2616005)(54906003)(476003)(31686004)(26005)(53936002)(110136005)(86362001)(31696002)(11346002)(186003)(6506007)(25786009)(486006)(73956011)(66946007)(4326008)(66446008)(64756008)(66556008)(66476007)(14444005)(256004)(7416002)(6246003)(102836004)(76176011)(66574012)(53546011)(386003)(921003)(1121003)(559001)(579004)(569006);DIR:OUT;SFP:1101;SCL:1;SRVR:AM4PR05MB3428;H:AM4PR05MB3411.eurprd05.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;MX:1;A:1; received-spf: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: 8eH4DlN7L97++wXMCkKrOETRF2zMbmcXp+9W36y0+CksgW8+Z9amjXmX8EDzj3uPRhBHqgsQH1mGZJ9Yf8YQs+DG8IVLctoYElxD615Z6x0/oc5Xg5CgjMcJZQzASh8DyrGW6KbPjPti8Y6XmTQZ5hjFFAql9g2uPqlxSha2KyVZ0s6sSX9Nfc22PFw+cSquduZQ1lmWhS+IyBL9k7qBZwyFx2jSzDjg0vMPTuX/ltMZMAoMF1z0hUDeMsNTkvkpm7Kzxnor15eC8D912rfMTXtzlZCMQ/gHRKx0sySmHj/TP2nxent8lo30Q377TzpQKFwYDRLbyjDOsj/MpQIHY4dz5mJGghWG9O9Vjpk3rM1rUNPVVhbU8lYBRG+dE7PHQ1iJ+nGoBqIhWCijQYq0DvY1tJyZSYk7RC+SC19aOiA= Content-Type: text/plain; charset="utf-8" Content-ID: <3EE27FAEDF9A4E4EA797A391850E4FC8@eurprd05.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-Network-Message-Id: ff452941-ca2a-41fa-4fe1-08d6ee773d3c X-MS-Exchange-CrossTenant-originalarrivaltime: 11 Jun 2019 14:15:21.9313 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: paulb@mellanox.com X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM4PR05MB3428 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org DQpPbiA2LzExLzIwMTkgNDo1OSBQTSwgVG9rZSBIw7hpbGFuZC1Kw7hyZ2Vuc2VuIHdyb3RlOg0K PiBQYXVsIEJsYWtleSA8cGF1bGJAbWVsbGFub3guY29tPiB3cml0ZXM6DQo+DQo+PiBBbGxvdyBz ZW5kaW5nIGEgcGFja2V0IHRvIGNvbm50cmFjayBhbmQgc2V0IGNvbm50cmFjayB6b25lLCBtYXJr LA0KPj4gbGFiZWxzIGFuZCBuYXQgcGFyYW1ldGVycy4NCj4gSG93IGlzIHRoaXMgZGlmZmVyZW50 IGZyb20gdGhlIG5ld2x5IG1lcmdlZCBjdGluZm8gYWN0aW9uPw0KPg0KPiAtVG9rZQ0KDQpIaSwN Cg0KY3RpbmZvIGRvZXMgb25lIG9mIHR3byB2ZXJ5IHNwZWNpZmljIHRoaW5ncywNCg0KMSkgY29w aWVzIERTQ1AgdmFsdWVzIHRoYXQgaGF2ZSBiZWVuIHBsYWNlZCBpbiB0aGUgZmlyZXdhbGwgY29u bnRyYWNrIA0KbWFyayBiYWNrIGludG8gdGhlIElQdjQvdjYgZGlmZnNlcnYgZmllbGQNCg0KMikg Y29waWVzIHRoZSBmaXJld2FsbCBjb25udHJhY2sgbWFyayB0byB0aGUgc2tiJ3MgbWFyayBmaWVs ZCAobGlrZSANCmFjdF9jb25ubWFyaykNCg0KT3JpZ2luYWxseSBjdGluZm8gYWN0aW9uIHdhcyBu YW1lZCBjb25uZHNjcCAodGhlbiBjb25udHJhY2ssIHdoaWNoIGlzIA0Kd2hhdCBvdXIgY3Qgc2hv cnRoYW5kIHN0YW5kcyBmb3IpLg0KDQpXZSBhbHNvIHRhbGtlZCBhYm91dCBtZXJnaW5nIGJvdGgg YXQgc29tZSBwb2ludCwgYnV0IHRoZXkgc2VlbSBvbmx5IA0KY29pbmNpZGVudGFsbHkgcmVsYXRl ZC4NCg0KZG9uJ3Qga25vdyBob3cgaXQgd2FzIHRoZW4gYmUgYWdyZWVkIHRvIGJlIG5hbWVkIGN0 aW5mbyBzdWdnZXN0aW5nIGl0IA0KZG9lcyBzb21ldGhpbmcgZWxzZSBidXQgdGhlIGFib3ZlLg0K DQpUaGlzIGFjdGlvbiBzZW5kcyBwYWNrZXRzIHRvIGNvbm50cmFjaywgY29uZmlndXJlcyBuYXQs IGFuZCBkb2Vzbid0IGdldCANCiJpbmZvIiBmcm9tIGNvbm50cmFjaywgd2hpbGUgdGhlIGN0aW5m byBhbHJlYWR5IGV4cGVjdHMgcGFja2V0cyB0byBiZSANCnBhc3NlZCBjb25udHJhY2sNCg0KYnkg c29tZSBvdGhlciBrZXJuZWwgbWVjaGFuaXNtLg0KDQoNCg0KPg0KPj4gU2lnbmVkLW9mZi1ieTog UGF1bCBCbGFrZXkgPHBhdWxiQG1lbGxhbm94LmNvbT4NCj4+IFNpZ25lZC1vZmYtYnk6IE1hcmNl bG8gUmljYXJkbyBMZWl0bmVyIDxtYXJjZWxvLmxlaXRuZXJAZ21haWwuY29tPg0KPj4gU2lnbmVk LW9mZi1ieTogWW9zc2kgS3VwZXJtYW4gPHlvc3Npa3VAbWVsbGFub3guY29tPg0KPj4gQWNrZWQt Ynk6IEppcmkgUGlya28gPGppcmlAbWVsbGFub3guY29tPg0KPj4gLS0tDQo+PiAgIGluY2x1ZGUv bmV0L2Zsb3dfb2ZmbG9hZC5oICAgICAgICB8ICAgNSArDQo+PiAgIGluY2x1ZGUvbmV0L3RjX2Fj dC90Y19jdC5oICAgICAgICB8ICA2NCArKysNCj4+ICAgaW5jbHVkZS91YXBpL2xpbnV4L3BrdF9j bHMuaCAgICAgIHwgICAyICsNCj4+ICAgaW5jbHVkZS91YXBpL2xpbnV4L3RjX2FjdC90Y19jdC5o IHwgIDQxICsrDQo+PiAgIG5ldC9zY2hlZC9LY29uZmlnICAgICAgICAgICAgICAgICB8ICAxMSAr DQo+PiAgIG5ldC9zY2hlZC9NYWtlZmlsZSAgICAgICAgICAgICAgICB8ICAgMSArDQo+PiAgIG5l dC9zY2hlZC9hY3RfY3QuYyAgICAgICAgICAgICAgICB8IDkwMSArKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKw0KPj4gICBuZXQvc2NoZWQvY2xzX2FwaS5jICAgICAgICAgICAg ICAgfCAgIDUgKw0KPj4gICA4IGZpbGVzIGNoYW5nZWQsIDEwMzAgaW5zZXJ0aW9ucygrKQ0KPj4g ICBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9uZXQvdGNfYWN0L3RjX2N0LmgNCj4+ICAgY3Jl YXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvdWFwaS9saW51eC90Y19hY3QvdGNfY3QuaA0KPj4gICBj cmVhdGUgbW9kZSAxMDA2NDQgbmV0L3NjaGVkL2FjdF9jdC5jDQo+Pg0KPj4gZGlmZiAtLWdpdCBh L2luY2x1ZGUvbmV0L2Zsb3dfb2ZmbG9hZC5oIGIvaW5jbHVkZS9uZXQvZmxvd19vZmZsb2FkLmgN Cj4+IGluZGV4IDM2ZmRiODUuLjViMmM0ZmEgMTAwNjQ0DQo+PiAtLS0gYS9pbmNsdWRlL25ldC9m bG93X29mZmxvYWQuaA0KPj4gKysrIGIvaW5jbHVkZS9uZXQvZmxvd19vZmZsb2FkLmgNCj4+IEBA IC0xMjMsNiArMTIzLDcgQEAgZW51bSBmbG93X2FjdGlvbl9pZCB7DQo+PiAgIAlGTE9XX0FDVElP Tl9RVUVVRSwNCj4+ICAgCUZMT1dfQUNUSU9OX1NBTVBMRSwNCj4+ICAgCUZMT1dfQUNUSU9OX1BP TElDRSwNCj4+ICsJRkxPV19BQ1RJT05fQ1QsDQo+PiAgIH07DQo+PiAgIA0KPj4gICAvKiBUaGlz IGlzIG1pcnJvcmluZyBlbnVtIHBlZGl0X2hlYWRlcl90eXBlIGRlZmluaXRpb24gZm9yIGVhc3kg bWFwcGluZyBiZXR3ZWVuDQo+PiBAQCAtMTcyLDYgKzE3MywxMCBAQCBzdHJ1Y3QgZmxvd19hY3Rp b25fZW50cnkgew0KPj4gICAJCQlzNjQJCQlidXJzdDsNCj4+ICAgCQkJdTY0CQkJcmF0ZV9ieXRl c19wczsNCj4+ICAgCQl9IHBvbGljZTsNCj4+ICsJCXN0cnVjdCB7CQkJCS8qIEZMT1dfQUNUSU9O X0NUICovDQo+PiArCQkJaW50IGFjdGlvbjsNCj4+ICsJCQl1MTYgem9uZTsNCj4+ICsJCX0gY3Q7 DQo+PiAgIAl9Ow0KPj4gICB9Ow0KPj4gICANCj4+IGRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC90 Y19hY3QvdGNfY3QuaCBiL2luY2x1ZGUvbmV0L3RjX2FjdC90Y19jdC5oDQo+PiBuZXcgZmlsZSBt b2RlIDEwMDY0NA0KPj4gaW5kZXggMDAwMDAwMC4uNTllNGY1ZQ0KPj4gLS0tIC9kZXYvbnVsbA0K Pj4gKysrIGIvaW5jbHVkZS9uZXQvdGNfYWN0L3RjX2N0LmgNCj4+IEBAIC0wLDAgKzEsNjQgQEAN Cj4+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLw0KPj4gKyNpZm5kZWYg X19ORVRfVENfQ1RfSA0KPj4gKyNkZWZpbmUgX19ORVRfVENfQ1RfSA0KPj4gKw0KPj4gKyNpbmNs dWRlIDxuZXQvYWN0X2FwaS5oPg0KPj4gKyNpbmNsdWRlIDx1YXBpL2xpbnV4L3RjX2FjdC90Y19j dC5oPg0KPj4gKw0KPj4gKyNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0spDQo+PiAr I2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfbmF0Lmg+DQo+PiArI2luY2x1ZGUgPG5ldC9uZXRm aWx0ZXIvbmZfY29ubnRyYWNrX2xhYmVscy5oPg0KPj4gKw0KPj4gK3N0cnVjdCB0Y2ZfY3RfcGFy YW1zIHsNCj4+ICsJc3RydWN0IG5mX2Nvbm4gKnRtcGw7DQo+PiArCXUxNiB6b25lOw0KPj4gKw0K Pj4gKwl1MzIgbWFyazsNCj4+ICsJdTMyIG1hcmtfbWFzazsNCj4+ICsNCj4+ICsJdTMyIGxhYmVs c1tORl9DVF9MQUJFTFNfTUFYX1NJWkUgLyBzaXplb2YodTMyKV07DQo+PiArCXUzMiBsYWJlbHNf bWFza1tORl9DVF9MQUJFTFNfTUFYX1NJWkUgLyBzaXplb2YodTMyKV07DQo+PiArDQo+PiArCXN0 cnVjdCBuZl9uYXRfcmFuZ2UyIHJhbmdlOw0KPj4gKwlib29sIGlwdjRfcmFuZ2U7DQo+PiArDQo+ PiArCXUxNiBjdF9hY3Rpb247DQo+PiArDQo+PiArCXN0cnVjdCByY3VfaGVhZCByY3U7DQo+PiAr DQo+PiArfTsNCj4+ICsNCj4+ICtzdHJ1Y3QgdGNmX2N0IHsNCj4+ICsJc3RydWN0IHRjX2FjdGlv biBjb21tb247DQo+PiArCXN0cnVjdCB0Y2ZfY3RfcGFyYW1zIF9fcmN1ICpwYXJhbXM7DQo+PiAr fTsNCj4+ICsNCj4+ICsjZGVmaW5lIHRvX2N0KGEpICgoc3RydWN0IHRjZl9jdCAqKWEpDQo+PiAr I2RlZmluZSB0b19jdF9wYXJhbXMoYSkgKChzdHJ1Y3QgdGNmX2N0X3BhcmFtcyAqKSBcDQo+PiAr CQkJIHJ0bmxfZGVyZWZlcmVuY2UoKHRvX2N0KGEpLT5wYXJhbXMpKSkNCj4+ICsNCj4+ICtzdGF0 aWMgaW5saW5lIHVpbnQxNl90IHRjZl9jdF96b25lKGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmEp DQo+PiArew0KPj4gKwlyZXR1cm4gdG9fY3RfcGFyYW1zKGEpLT56b25lOw0KPj4gK30NCj4+ICsN Cj4+ICtzdGF0aWMgaW5saW5lIGludCB0Y2ZfY3RfYWN0aW9uKGNvbnN0IHN0cnVjdCB0Y19hY3Rp b24gKmEpDQo+PiArew0KPj4gKwlyZXR1cm4gdG9fY3RfcGFyYW1zKGEpLT5jdF9hY3Rpb247DQo+ PiArfQ0KPj4gKw0KPj4gKyNlbHNlDQo+PiArc3RhdGljIGlubGluZSB1aW50MTZfdCB0Y2ZfY3Rf em9uZShjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphKSB7IHJldHVybiAwOyB9DQo+PiArc3RhdGlj IGlubGluZSBpbnQgdGNmX2N0X2FjdGlvbihjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphKSB7IHJl dHVybiAwOyB9DQo+PiArI2VuZGlmIC8qIENPTkZJR19ORl9DT05OVFJBQ0sgKi8NCj4+ICsNCj4+ ICtzdGF0aWMgaW5saW5lIGJvb2wgaXNfdGNmX2N0KGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmEp DQo+PiArew0KPj4gKyNpZiBkZWZpbmVkKENPTkZJR19ORVRfQ0xTX0FDVCkgJiYgSVNfRU5BQkxF RChDT05GSUdfTkZfQ09OTlRSQUNLKQ0KPj4gKwlpZiAoYS0+b3BzICYmIGEtPm9wcy0+aWQgPT0g VENBX0lEX0NUKQ0KPj4gKwkJcmV0dXJuIHRydWU7DQo+PiArI2VuZGlmDQo+PiArCXJldHVybiBm YWxzZTsNCj4+ICt9DQo+PiArDQo+PiArI2VuZGlmIC8qIF9fTkVUX1RDX0NUX0ggKi8NCj4+IGRp ZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvcGt0X2Nscy5oIGIvaW5jbHVkZS91YXBpL2xp bnV4L3BrdF9jbHMuaA0KPj4gaW5kZXggYTkzNjgwZi4uYzUyNjRkNyAxMDA2NDQNCj4+IC0tLSBh L2luY2x1ZGUvdWFwaS9saW51eC9wa3RfY2xzLmgNCj4+ICsrKyBiL2luY2x1ZGUvdWFwaS9saW51 eC9wa3RfY2xzLmgNCj4+IEBAIC04Myw2ICs4Myw3IEBAIGVudW0gew0KPj4gICAjZGVmaW5lIFRD QV9BQ1RfU0lNUCAyMg0KPj4gICAjZGVmaW5lIFRDQV9BQ1RfSUZFIDI1DQo+PiAgICNkZWZpbmUg VENBX0FDVF9TQU1QTEUgMjYNCj4+ICsjZGVmaW5lIFRDQV9BQ1RfQ1QgMjcNCj4+ICAgDQo+PiAg IC8qIEFjdGlvbiB0eXBlIGlkZW50aWZpZXJzKi8NCj4+ICAgZW51bSB0Y2FfaWQgew0KPj4gQEAg LTEwNiw2ICsxMDcsNyBAQCBlbnVtIHRjYV9pZCB7DQo+PiAgIAlUQ0FfSURfU0FNUExFID0gVENB X0FDVF9TQU1QTEUsDQo+PiAgIAkvKiBvdGhlciBhY3Rpb25zIGdvIGhlcmUgKi8NCj4+ICAgCVRD QV9JRF9DVElORk8sDQo+PiArCVRDQV9JRF9DVCwNCj4+ICAgCV9fVENBX0lEX01BWCA9IDI1NQ0K Pj4gICB9Ow0KPj4gICANCj4+IGRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvdGNfYWN0 L3RjX2N0LmggYi9pbmNsdWRlL3VhcGkvbGludXgvdGNfYWN0L3RjX2N0LmgNCj4+IG5ldyBmaWxl IG1vZGUgMTAwNjQ0DQo+PiBpbmRleCAwMDAwMDAwLi41ZmIxZDdhDQo+PiAtLS0gL2Rldi9udWxs DQo+PiArKysgYi9pbmNsdWRlL3VhcGkvbGludXgvdGNfYWN0L3RjX2N0LmgNCj4+IEBAIC0wLDAg KzEsNDEgQEANCj4+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBXSVRIIExp bnV4LXN5c2NhbGwtbm90ZSAqLw0KPj4gKyNpZm5kZWYgX19VQVBJX1RDX0NUX0gNCj4+ICsjZGVm aW5lIF9fVUFQSV9UQ19DVF9IDQo+PiArDQo+PiArI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+DQo+ PiArI2luY2x1ZGUgPGxpbnV4L3BrdF9jbHMuaD4NCj4+ICsNCj4+ICtlbnVtIHsNCj4+ICsJVENB X0NUX1VOU1BFQywNCj4+ICsJVENBX0NUX1BBUk1TLA0KPj4gKwlUQ0FfQ1RfVE0sDQo+PiArCVRD QV9DVF9BQ1RJT04sCQkvKiB1MTYgKi8NCj4+ICsJVENBX0NUX1pPTkUsCQkvKiB1MTYgKi8NCj4+ ICsJVENBX0NUX01BUkssCQkvKiB1MzIgKi8NCj4+ICsJVENBX0NUX01BUktfTUFTSywJLyogdTMy ICovDQo+PiArCVRDQV9DVF9MQUJFTFMsCQkvKiB1MTI4ICovDQo+PiArCVRDQV9DVF9MQUJFTFNf TUFTSywJLyogdTEyOCAqLw0KPj4gKwlUQ0FfQ1RfTkFUX0lQVjRfTUlOLAkvKiBiZTMyICovDQo+ PiArCVRDQV9DVF9OQVRfSVBWNF9NQVgsCS8qIGJlMzIgKi8NCj4+ICsJVENBX0NUX05BVF9JUFY2 X01JTiwJLyogc3RydWN0IGluNl9hZGRyICovDQo+PiArCVRDQV9DVF9OQVRfSVBWNl9NQVgsCS8q IHN0cnVjdCBpbjZfYWRkciAqLw0KPj4gKwlUQ0FfQ1RfTkFUX1BPUlRfTUlOLAkvKiBiZTE2ICov DQo+PiArCVRDQV9DVF9OQVRfUE9SVF9NQVgsCS8qIGJlMTYgKi8NCj4+ICsJVENBX0NUX1BBRCwN Cj4+ICsJX19UQ0FfQ1RfTUFYDQo+PiArfTsNCj4+ICsNCj4+ICsjZGVmaW5lIFRDQV9DVF9NQVgg KF9fVENBX0NUX01BWCAtIDEpDQo+PiArDQo+PiArI2RlZmluZSBUQ0FfQ1RfQUNUX0NPTU1JVAko MSA8PCAwKQ0KPj4gKyNkZWZpbmUgVENBX0NUX0FDVF9GT1JDRQkoMSA8PCAxKQ0KPj4gKyNkZWZp bmUgVENBX0NUX0FDVF9DTEVBUgkoMSA8PCAyKQ0KPj4gKyNkZWZpbmUgVENBX0NUX0FDVF9OQVQJ CSgxIDw8IDMpDQo+PiArI2RlZmluZSBUQ0FfQ1RfQUNUX05BVF9TUkMJKDEgPDwgNCkNCj4+ICsj ZGVmaW5lIFRDQV9DVF9BQ1RfTkFUX0RTVAkoMSA8PCA1KQ0KPj4gKw0KPj4gK3N0cnVjdCB0Y19j dCB7DQo+PiArCXRjX2dlbjsNCj4+ICt9Ow0KPj4gKw0KPj4gKyNlbmRpZiAvKiBfX1VBUElfVENf Q1RfSCAqLw0KPj4gZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9LY29uZmlnIGIvbmV0L3NjaGVkL0tj b25maWcNCj4+IGluZGV4IGQxMDRmN2UuLjA0ODFhMmEgMTAwNjQ0DQo+PiAtLS0gYS9uZXQvc2No ZWQvS2NvbmZpZw0KPj4gKysrIGIvbmV0L3NjaGVkL0tjb25maWcNCj4+IEBAIC05MjksNiArOTI5 LDE3IEBAIGNvbmZpZyBORVRfQUNUX1RVTk5FTF9LRVkNCj4+ICAgCSAgVG8gY29tcGlsZSB0aGlz IGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQ0KPj4gICAJICBtb2R1bGUgd2ls bCBiZSBjYWxsZWQgYWN0X3R1bm5lbF9rZXkuDQo+PiAgIA0KPj4gK2NvbmZpZyBORVRfQUNUX0NU DQo+PiArICAgICAgICB0cmlzdGF0ZSAiY29ubmVjdGlvbiB0cmFja2luZyB0YyBhY3Rpb24iDQo+ PiArICAgICAgICBkZXBlbmRzIG9uIE5FVF9DTFNfQUNUICYmIE5GX0NPTk5UUkFDSw0KPj4gKyAg ICAgICAgaGVscA0KPj4gKwkgIFNheSBZIGhlcmUgdG8gYWxsb3cgc2VuZGluZyB0aGUgcGFja2V0 cyB0byBjb25udHJhY2sgbW9kdWxlLg0KPj4gKw0KPj4gKwkgIElmIHVuc3VyZSwgc2F5IE4uDQo+ PiArDQo+PiArCSAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhl cmU6IHRoZQ0KPj4gKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhY3RfY3QuDQo+PiArDQo+PiAg IGNvbmZpZyBORVRfSUZFX1NLQk1BUksNCj4+ICAgICAgICAgICB0cmlzdGF0ZSAiU3VwcG9ydCB0 byBlbmNvZGluZyBkZWNvZGluZyBza2IgbWFyayBvbiBJRkUgYWN0aW9uIg0KPj4gICAgICAgICAg IGRlcGVuZHMgb24gTkVUX0FDVF9JRkUNCj4+IGRpZmYgLS1naXQgYS9uZXQvc2NoZWQvTWFrZWZp bGUgYi9uZXQvc2NoZWQvTWFrZWZpbGUNCj4+IGluZGV4IGQ1NGJmY2IuLjIzZDIyMDIgMTAwNjQ0 DQo+PiAtLS0gYS9uZXQvc2NoZWQvTWFrZWZpbGUNCj4+ICsrKyBiL25ldC9zY2hlZC9NYWtlZmls ZQ0KPj4gQEAgLTI4LDYgKzI4LDcgQEAgb2JqLSQoQ09ORklHX05FVF9JRkVfU0tCTUFSSykJKz0g YWN0X21ldGFfbWFyay5vDQo+PiAgIG9iai0kKENPTkZJR19ORVRfSUZFX1NLQlBSSU8pCSs9IGFj dF9tZXRhX3NrYnByaW8ubw0KPj4gICBvYmotJChDT05GSUdfTkVUX0lGRV9TS0JUQ0lOREVYKQkr PSBhY3RfbWV0YV9za2J0Y2luZGV4Lm8NCj4+ICAgb2JqLSQoQ09ORklHX05FVF9BQ1RfVFVOTkVM X0tFWSkrPSBhY3RfdHVubmVsX2tleS5vDQo+PiArb2JqLSQoQ09ORklHX05FVF9BQ1RfQ1QpCSs9 IGFjdF9jdC5vDQo+PiAgIG9iai0kKENPTkZJR19ORVRfU0NIX0ZJRk8pCSs9IHNjaF9maWZvLm8N Cj4+ICAgb2JqLSQoQ09ORklHX05FVF9TQ0hfQ0JRKQkrPSBzY2hfY2JxLm8NCj4+ICAgb2JqLSQo Q09ORklHX05FVF9TQ0hfSFRCKQkrPSBzY2hfaHRiLm8NCj4+IGRpZmYgLS1naXQgYS9uZXQvc2No ZWQvYWN0X2N0LmMgYi9uZXQvc2NoZWQvYWN0X2N0LmMNCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0 DQo+PiBpbmRleCAwMDAwMDAwLi40ZWIwZGQ3DQo+PiAtLS0gL2Rldi9udWxsDQo+PiArKysgYi9u ZXQvc2NoZWQvYWN0X2N0LmMNCj4+IEBAIC0wLDAgKzEsOTAxIEBADQo+PiArLy8gU1BEWC1MaWNl bnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgTGludXgtT3BlbklCDQo+PiArLyogLQ0KPj4gKyAq IG5ldC9zY2hlZC9hY3RfY3QuYyAgQ29ubmVjdGlvbiBUcmFja2luZyBhY3Rpb24NCj4+ICsgKg0K Pj4gKyAqIEF1dGhvcnM6ICAgUGF1bCBCbGFrZXkgPHBhdWxiQG1lbGxhbm94LmNvbT4NCj4+ICsg KiAgICAgICAgICAgIFlvc3NpIEt1cGVybWFuIDx5b3NzaWt1QG1lbGxhbm94LmNvbT4NCj4+ICsg KiAgICAgICAgICAgIE1hcmNlbG8gUmljYXJkbyBMZWl0bmVyIDxtYXJjZWxvLmxlaXRuZXJAZ21h aWwuY29tPg0KPj4gKyAqLw0KPj4gKw0KPj4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4NCj4+ ICsjaW5jbHVkZSA8bGludXgvaW5pdC5oPg0KPj4gKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4N Cj4+ICsjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+DQo+PiArI2luY2x1ZGUgPGxpbnV4L3J0bmV0 bGluay5oPg0KPj4gKyNpbmNsdWRlIDxsaW51eC9wa3RfY2xzLmg+DQo+PiArI2luY2x1ZGUgPGxp bnV4L2lwLmg+DQo+PiArI2luY2x1ZGUgPGxpbnV4L2lwdjYuaD4NCj4+ICsjaW5jbHVkZSA8bmV0 L25ldGxpbmsuaD4NCj4+ICsjaW5jbHVkZSA8bmV0L3BrdF9zY2hlZC5oPg0KPj4gKyNpbmNsdWRl IDxuZXQvYWN0X2FwaS5oPg0KPj4gKyNpbmNsdWRlIDx1YXBpL2xpbnV4L3RjX2FjdC90Y19jdC5o Pg0KPj4gKyNpbmNsdWRlIDxuZXQvdGNfYWN0L3RjX2N0Lmg+DQo+PiArDQo+PiArI2luY2x1ZGUg PGxpbnV4L25ldGZpbHRlci9uZl9uYXQuaD4NCj4+ICsjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9u Zl9jb25udHJhY2suaD4NCj4+ICsjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tf Y29yZS5oPg0KPj4gKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja196b25lcy5o Pg0KPj4gKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuaD4NCj4+ ICsjaW5jbHVkZSA8bmV0L3BrdF9jbHMuaD4NCj4+ICsNCj4+ICtzdGF0aWMgc3RydWN0IHRjX2Fj dGlvbl9vcHMgYWN0X2N0X29wczsNCj4+ICtzdGF0aWMgdW5zaWduZWQgaW50IGN0X25ldF9pZDsN Cj4+ICsNCj4+ICtzdHJ1Y3QgdGNfY3RfYWN0aW9uX25ldCB7DQo+PiArCXN0cnVjdCB0Y19hY3Rp b25fbmV0IHRuOyAvKiBNdXN0IGJlIGZpcnN0ICovDQo+PiArCWJvb2wgbGFiZWxzOw0KPj4gK307 DQo+PiArDQo+PiArLyogRGV0ZXJtaW5lIHdoZXRoZXIgc2tiLT5fbmZjdCBpcyBlcXVhbCB0byB0 aGUgcmVzdWx0IG9mIGNvbm50cmFjayBsb29rdXAuICovDQo+PiArc3RhdGljIGJvb2wgdGNmX2N0 X3NrYl9uZmN0X2NhY2hlZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsDQo+ PiArCQkJCSAgIHUxNiB6b25lX2lkLCBib29sIGZvcmNlKQ0KPj4gK3sNCj4+ICsJZW51bSBpcF9j b25udHJhY2tfaW5mbyBjdGluZm87DQo+PiArCXN0cnVjdCBuZl9jb25uICpjdDsNCj4+ICsNCj4+ ICsJY3QgPSBuZl9jdF9nZXQoc2tiLCAmY3RpbmZvKTsNCj4+ICsJaWYgKCFjdCkNCj4+ICsJCXJl dHVybiBmYWxzZTsNCj4+ICsJaWYgKCFuZXRfZXEobmV0LCByZWFkX3BuZXQoJmN0LT5jdF9uZXQp KSkNCj4+ICsJCXJldHVybiBmYWxzZTsNCj4+ICsJaWYgKG5mX2N0X3pvbmUoY3QpLT5pZCAhPSB6 b25lX2lkKQ0KPj4gKwkJcmV0dXJuIGZhbHNlOw0KPj4gKw0KPj4gKwkvKiBGb3JjZSBjb25udHJh Y2sgZW50cnkgZGlyZWN0aW9uLiAqLw0KPj4gKwlpZiAoZm9yY2UgJiYgQ1RJTkZPMkRJUihjdGlu Zm8pICE9IElQX0NUX0RJUl9PUklHSU5BTCkgew0KPj4gKwkJbmZfY29ubnRyYWNrX3B1dCgmY3Qt PmN0X2dlbmVyYWwpOw0KPj4gKwkJbmZfY3Rfc2V0KHNrYiwgTlVMTCwgSVBfQ1RfVU5UUkFDS0VE KTsNCj4+ICsNCj4+ICsJCWlmIChuZl9jdF9pc19jb25maXJtZWQoY3QpKQ0KPj4gKwkJCW5mX2N0 X2tpbGwoY3QpOw0KPj4gKw0KPj4gKwkJcmV0dXJuIGZhbHNlOw0KPj4gKwl9DQo+PiArDQo+PiAr CXJldHVybiB0cnVlOw0KPj4gK30NCj4+ICsNCj4+ICsvKiBUcmltIHRoZSBza2IgdG8gdGhlIGxl bmd0aCBzcGVjaWZpZWQgYnkgdGhlIElQL0lQdjYgaGVhZGVyLA0KPj4gKyAqIHJlbW92aW5nIGFu eSB0cmFpbGluZyBsb3dlci1sYXllciBwYWRkaW5nLiBUaGlzIHByZXBhcmVzIHRoZSBza2INCj4+ ICsgKiBmb3IgaGlnaGVyLWxheWVyIHByb2Nlc3NpbmcgdGhhdCBhc3N1bWVzIHNrYi0+bGVuIGV4 Y2x1ZGVzIHBhZGRpbmcNCj4+ICsgKiAoc3VjaCBhcyBuZl9pcF9jaGVja3N1bSkuIFRoZSBjYWxs ZXIgbmVlZHMgdG8gcHVsbCB0aGUgc2tiIHRvIHRoZQ0KPj4gKyAqIG5ldHdvcmsgaGVhZGVyLCBh bmQgZW5zdXJlIGlwX2hkci9pcHY2X2hkciBwb2ludHMgdG8gdmFsaWQgZGF0YS4NCj4+ICsgKi8N Cj4+ICtzdGF0aWMgaW50IHRjZl9jdF9za2JfbmV0d29ya190cmltKHN0cnVjdCBza19idWZmICpz a2IpDQo+PiArew0KPj4gKwl1bnNpZ25lZCBpbnQgbGVuOw0KPj4gKwlpbnQgZXJyOw0KPj4gKw0K Pj4gKwlzd2l0Y2ggKHNrYi0+cHJvdG9jb2wpIHsNCj4+ICsJY2FzZSBodG9ucyhFVEhfUF9JUCk6 DQo+PiArCQlsZW4gPSBudG9ocyhpcF9oZHIoc2tiKS0+dG90X2xlbik7DQo+PiArCQlicmVhazsN Cj4+ICsJY2FzZSBodG9ucyhFVEhfUF9JUFY2KToNCj4+ICsJCWxlbiA9IHNpemVvZihzdHJ1Y3Qg aXB2NmhkcikNCj4+ICsJCQkrIG50b2hzKGlwdjZfaGRyKHNrYiktPnBheWxvYWRfbGVuKTsNCj4+ ICsJCWJyZWFrOw0KPj4gKwlkZWZhdWx0Og0KPj4gKwkJbGVuID0gc2tiLT5sZW47DQo+PiArCX0N Cj4+ICsNCj4+ICsJZXJyID0gcHNrYl90cmltX3Jjc3VtKHNrYiwgbGVuKTsNCj4+ICsNCj4+ICsJ cmV0dXJuIGVycjsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIHU4IHRjZl9jdF9za2JfbmZfZmFt aWx5KHN0cnVjdCBza19idWZmICpza2IpDQo+PiArew0KPj4gKwl1OCBmYW1pbHkgPSBORlBST1RP X1VOU1BFQzsNCj4+ICsNCj4+ICsJc3dpdGNoIChza2ItPnByb3RvY29sKSB7DQo+PiArCWNhc2Ug aHRvbnMoRVRIX1BfSVApOg0KPj4gKwkJZmFtaWx5ID0gTkZQUk9UT19JUFY0Ow0KPj4gKwkJYnJl YWs7DQo+PiArCWNhc2UgaHRvbnMoRVRIX1BfSVBWNik6DQo+PiArCQlmYW1pbHkgPSBORlBST1RP X0lQVjY7DQo+PiArCQlicmVhazsNCj4+ICsJZGVmYXVsdDoNCj4+ICsJYnJlYWs7DQo+PiArCX0N Cj4+ICsNCj4+ICsJcmV0dXJuIGZhbWlseTsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIHZvaWQg dGNmX2N0X3BhcmFtc19mcmVlKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkNCj4+ICt7DQo+PiArCXN0 cnVjdCB0Y2ZfY3RfcGFyYW1zICpwYXJhbXMgPSBjb250YWluZXJfb2YoaGVhZCwNCj4+ICsJCQkJ CQkgICAgc3RydWN0IHRjZl9jdF9wYXJhbXMsIHJjdSk7DQo+PiArDQo+PiArCWlmIChwYXJhbXMt PnRtcGwpDQo+PiArCQluZl9jb25udHJhY2tfcHV0KCZwYXJhbXMtPnRtcGwtPmN0X2dlbmVyYWwp Ow0KPj4gKwlrZnJlZShwYXJhbXMpOw0KPj4gK30NCj4+ICsNCj4+ICsjaWYgSVNfRU5BQkxFRChD T05GSUdfTkZfTkFUKQ0KPj4gKy8qIE1vZGVsbGVkIGFmdGVyIG5mX25hdF9pcHZbNDZdX2ZuKCku DQo+PiArICogcmFuZ2UgaXMgb25seSB1c2VkIGZvciBuZXcsIHVuaW5pdGlhbGl6ZWQgTkFUIHN0 YXRlLg0KPj4gKyAqIFJldHVybnMgZWl0aGVyIE5GX0FDQ0VQVCBvciBORl9EUk9QLg0KPj4gKyAq Lw0KPj4gK3N0YXRpYyBpbnQgY3RfbmF0X2V4ZWN1dGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3Ry dWN0IG5mX2Nvbm4gKmN0LA0KPj4gKwkJCSAgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8s DQo+PiArCQkJICBjb25zdCBzdHJ1Y3QgbmZfbmF0X3JhbmdlMiAqcmFuZ2UsDQo+PiArCQkJICBl bnVtIG5mX25hdF9tYW5pcF90eXBlIG1hbmlwdHlwZSkNCj4+ICt7DQo+PiArCWludCBob29rbnVt LCBuaF9vZmYsIGVyciA9IE5GX0FDQ0VQVDsNCj4+ICsNCj4+ICsJbmhfb2ZmID0gc2tiX25ldHdv cmtfb2Zmc2V0KHNrYik7DQo+PiArCXNrYl9wdWxsX3Jjc3VtKHNrYiwgbmhfb2ZmKTsNCj4+ICsN Cj4+ICsJLyogU2VlIEhPT0syTUFOSVAoKS4gKi8NCj4+ICsJaWYgKG1hbmlwdHlwZSA9PSBORl9O QVRfTUFOSVBfU1JDKQ0KPj4gKwkJaG9va251bSA9IE5GX0lORVRfTE9DQUxfSU47IC8qIFNvdXJj ZSBOQVQgKi8NCj4+ICsJZWxzZQ0KPj4gKwkJaG9va251bSA9IE5GX0lORVRfTE9DQUxfT1VUOyAv KiBEZXN0aW5hdGlvbiBOQVQgKi8NCj4+ICsNCj4+ICsJc3dpdGNoIChjdGluZm8pIHsNCj4+ICsJ Y2FzZSBJUF9DVF9SRUxBVEVEOg0KPj4gKwljYXNlIElQX0NUX1JFTEFURURfUkVQTFk6DQo+PiAr CQlpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkgJiYNCj4+ICsJCSAgICBpcF9o ZHIoc2tiKS0+cHJvdG9jb2wgPT0gSVBQUk9UT19JQ01QKSB7DQo+PiArCQkJaWYgKCFuZl9uYXRf aWNtcF9yZXBseV90cmFuc2xhdGlvbihza2IsIGN0LCBjdGluZm8sDQo+PiArCQkJCQkJCSAgIGhv b2tudW0pKQ0KPj4gKwkJCQllcnIgPSBORl9EUk9QOw0KPj4gKwkJCWdvdG8gcHVzaDsNCj4+ICsJ CX0gZWxzZSBpZiAoSVNfRU5BQkxFRChDT05GSUdfSVBWNikgJiYNCj4+ICsJCQkgICBza2ItPnBy b3RvY29sID09IGh0b25zKEVUSF9QX0lQVjYpKSB7DQo+PiArCQkJX19iZTE2IGZyYWdfb2ZmOw0K Pj4gKwkJCXU4IG5leHRoZHIgPSBpcHY2X2hkcihza2IpLT5uZXh0aGRyOw0KPj4gKwkJCWludCBo ZHJsZW4gPSBpcHY2X3NraXBfZXh0aGRyKHNrYiwNCj4+ICsJCQkJCQkgICAgICBzaXplb2Yoc3Ry dWN0IGlwdjZoZHIpLA0KPj4gKwkJCQkJCSAgICAgICZuZXh0aGRyLCAmZnJhZ19vZmYpOw0KPj4g Kw0KPj4gKwkJCWlmIChoZHJsZW4gPj0gMCAmJiBuZXh0aGRyID09IElQUFJPVE9fSUNNUFY2KSB7 DQo+PiArCQkJCWlmICghbmZfbmF0X2ljbXB2Nl9yZXBseV90cmFuc2xhdGlvbihza2IsIGN0LA0K Pj4gKwkJCQkJCQkJICAgICBjdGluZm8sDQo+PiArCQkJCQkJCQkgICAgIGhvb2tudW0sDQo+PiAr CQkJCQkJCQkgICAgIGhkcmxlbikpDQo+PiArCQkJCQllcnIgPSBORl9EUk9QOw0KPj4gKwkJCQln b3RvIHB1c2g7DQo+PiArCQkJfQ0KPj4gKwkJfQ0KPj4gKwkJLyogTm9uLUlDTVAsIGZhbGwgdGhy dSB0byBpbml0aWFsaXplIGlmIG5lZWRlZC4gKi8NCj4+ICsJCS8qIGZhbGwgdGhyb3VnaCAqLw0K Pj4gKwljYXNlIElQX0NUX05FVzoNCj4+ICsJCS8qIFNlZW4gaXQgYmVmb3JlPyAgVGhpcyBjYW4g aGFwcGVuIGZvciBsb29wYmFjaywgcmV0cmFucywNCj4+ICsJCSAqIG9yIGxvY2FsIHBhY2tldHMu DQo+PiArCQkgKi8NCj4+ICsJCWlmICghbmZfbmF0X2luaXRpYWxpemVkKGN0LCBtYW5pcHR5cGUp KSB7DQo+PiArCQkJLyogSW5pdGlhbGl6ZSBhY2NvcmRpbmcgdG8gdGhlIE5BVCBhY3Rpb24uICov DQo+PiArCQkJZXJyID0gKHJhbmdlICYmIHJhbmdlLT5mbGFncyAmIE5GX05BVF9SQU5HRV9NQVBf SVBTKQ0KPj4gKwkJCQkvKiBBY3Rpb24gaXMgc2V0IHVwIHRvIGVzdGFibGlzaCBhIG5ldw0KPj4g KwkJCQkgKiBtYXBwaW5nLg0KPj4gKwkJCQkgKi8NCj4+ICsJCQkJPyBuZl9uYXRfc2V0dXBfaW5m byhjdCwgcmFuZ2UsIG1hbmlwdHlwZSkNCj4+ICsJCQkJOiBuZl9uYXRfYWxsb2NfbnVsbF9iaW5k aW5nKGN0LCBob29rbnVtKTsNCj4+ICsJCQlpZiAoZXJyICE9IE5GX0FDQ0VQVCkNCj4+ICsJCQkJ Z290byBwdXNoOw0KPj4gKwkJfQ0KPj4gKwkJYnJlYWs7DQo+PiArDQo+PiArCWNhc2UgSVBfQ1Rf RVNUQUJMSVNIRUQ6DQo+PiArCWNhc2UgSVBfQ1RfRVNUQUJMSVNIRURfUkVQTFk6DQo+PiArCQli cmVhazsNCj4+ICsNCj4+ICsJZGVmYXVsdDoNCj4+ICsJCWVyciA9IE5GX0RST1A7DQo+PiArCQln b3RvIHB1c2g7DQo+PiArCX0NCj4+ICsNCj4+ICsJZXJyID0gbmZfbmF0X3BhY2tldChjdCwgY3Rp bmZvLCBob29rbnVtLCBza2IpOw0KPj4gK3B1c2g6DQo+PiArCXNrYl9wdXNoKHNrYiwgbmhfb2Zm KTsNCj4+ICsJc2tiX3Bvc3RwdXNoX3Jjc3VtKHNrYiwgc2tiLT5kYXRhLCBuaF9vZmYpOw0KPj4g Kw0KPj4gKwlyZXR1cm4gZXJyOw0KPj4gK30NCj4+ICsjZW5kaWYgLyogQ09ORklHX05GX05BVCAq Lw0KPj4gKw0KPj4gK3N0YXRpYyB2b2lkIHRjZl9jdF9hY3Rfc2V0X21hcmsoc3RydWN0IG5mX2Nv bm4gKmN0LCB1MzIgbWFyaywgdTMyIG1hc2spDQo+PiArew0KPj4gKyNpZiBJU19FTkFCTEVEKENP TkZJR19ORl9DT05OVFJBQ0tfTUFSSykNCj4+ICsJdTMyIG5ld19tYXJrOw0KPj4gKw0KPj4gKwlp ZiAoIW1hc2spDQo+PiArCQlyZXR1cm47DQo+PiArDQo+PiArCW5ld19tYXJrID0gbWFyayB8IChj dC0+bWFyayAmIH4obWFzaykpOw0KPj4gKwlpZiAoY3QtPm1hcmsgIT0gbmV3X21hcmspIHsNCj4+ ICsJCWN0LT5tYXJrID0gbmV3X21hcms7DQo+PiArCQlpZiAobmZfY3RfaXNfY29uZmlybWVkKGN0 KSkNCj4+ICsJCQluZl9jb25udHJhY2tfZXZlbnRfY2FjaGUoSVBDVF9NQVJLLCBjdCk7DQo+PiAr CX0NCj4+ICsjZW5kaWYNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIHZvaWQgdGNmX2N0X2FjdF9z ZXRfbGFiZWxzKHN0cnVjdCBuZl9jb25uICpjdCwNCj4+ICsJCQkJICB1MzIgKmxhYmVscywNCj4+ ICsJCQkJICB1MzIgKmxhYmVsc19tKQ0KPj4gK3sNCj4+ICsjaWYgSVNfRU5BQkxFRChDT05GSUdf TkZfQ09OTlRSQUNLX0xBQkVMUykNCj4+ICsJc2l6ZV90IGxhYmVsc19zeiA9IEZJRUxEX1NJWkVP RihzdHJ1Y3QgdGNmX2N0X3BhcmFtcywgbGFiZWxzKTsNCj4+ICsNCj4+ICsJaWYgKCFtZW1jaHJf aW52KGxhYmVsc19tLCAwLCBsYWJlbHNfc3opKQ0KPj4gKwkJcmV0dXJuOw0KPj4gKw0KPj4gKwlu Zl9jb25ubGFiZWxzX3JlcGxhY2UoY3QsIGxhYmVscywgbGFiZWxzX20sIDQpOw0KPj4gKyNlbmRp Zg0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgaW50IHRjZl9jdF9hY3RfbmF0KHN0cnVjdCBza19i dWZmICpza2IsDQo+PiArCQkJICBzdHJ1Y3QgbmZfY29ubiAqY3QsDQo+PiArCQkJICBlbnVtIGlw X2Nvbm50cmFja19pbmZvIGN0aW5mbywNCj4+ICsJCQkgIGludCBjdF9hY3Rpb24sDQo+PiArCQkJ ICBzdHJ1Y3QgbmZfbmF0X3JhbmdlMiAqcmFuZ2UsDQo+PiArCQkJICBib29sIGNvbW1pdCkNCj4+ ICt7DQo+PiArI2lmIElTX0VOQUJMRUQoQ09ORklHX05GX05BVCkNCj4+ICsJZW51bSBuZl9uYXRf bWFuaXBfdHlwZSBtYW5pcHR5cGU7DQo+PiArDQo+PiArCWlmICghKGN0X2FjdGlvbiAmIFRDQV9D VF9BQ1RfTkFUKSkNCj4+ICsJCXJldHVybiBORl9BQ0NFUFQ7DQo+PiArDQo+PiArCS8qIEFkZCBO QVQgZXh0ZW5zaW9uIGlmIG5vdCBjb25maXJtZWQgeWV0LiAqLw0KPj4gKwlpZiAoIW5mX2N0X2lz X2NvbmZpcm1lZChjdCkgJiYgIW5mX2N0X25hdF9leHRfYWRkKGN0KSkNCj4+ICsJCXJldHVybiBO Rl9EUk9QOyAgIC8qIENhbid0IE5BVC4gKi8NCj4+ICsNCj4+ICsJaWYgKGN0aW5mbyAhPSBJUF9D VF9ORVcgJiYgKGN0LT5zdGF0dXMgJiBJUFNfTkFUX01BU0spICYmDQo+PiArCSAgICAoY3RpbmZv ICE9IElQX0NUX1JFTEFURUQgfHwgY29tbWl0KSkgew0KPj4gKwkJLyogTkFUIGFuIGVzdGFibGlz aGVkIG9yIHJlbGF0ZWQgY29ubmVjdGlvbiBsaWtlIGJlZm9yZS4gKi8NCj4+ICsJCWlmIChDVElO Rk8yRElSKGN0aW5mbykgPT0gSVBfQ1RfRElSX1JFUExZKQ0KPj4gKwkJCS8qIFRoaXMgaXMgdGhl IFJFUExZIGRpcmVjdGlvbiBmb3IgYSBjb25uZWN0aW9uDQo+PiArCQkJICogZm9yIHdoaWNoIE5B VCB3YXMgYXBwbGllZCBpbiB0aGUgZm9yd2FyZA0KPj4gKwkJCSAqIGRpcmVjdGlvbi4gIERvIHRo ZSByZXZlcnNlIE5BVC4NCj4+ICsJCQkgKi8NCj4+ICsJCQltYW5pcHR5cGUgPSBjdC0+c3RhdHVz ICYgSVBTX1NSQ19OQVQNCj4+ICsJCQkJPyBORl9OQVRfTUFOSVBfRFNUIDogTkZfTkFUX01BTklQ X1NSQzsNCj4+ICsJCWVsc2UNCj4+ICsJCQltYW5pcHR5cGUgPSBjdC0+c3RhdHVzICYgSVBTX1NS Q19OQVQNCj4+ICsJCQkJPyBORl9OQVRfTUFOSVBfU1JDIDogTkZfTkFUX01BTklQX0RTVDsNCj4+ ICsJfSBlbHNlIGlmIChjdF9hY3Rpb24gJiBUQ0FfQ1RfQUNUX05BVF9TUkMpIHsNCj4+ICsJCW1h bmlwdHlwZSA9IE5GX05BVF9NQU5JUF9TUkM7DQo+PiArCX0gZWxzZSBpZiAoY3RfYWN0aW9uICYg VENBX0NUX0FDVF9OQVRfRFNUKSB7DQo+PiArCQltYW5pcHR5cGUgPSBORl9OQVRfTUFOSVBfRFNU Ow0KPj4gKwl9IGVsc2Ugew0KPj4gKwkJcmV0dXJuIE5GX0FDQ0VQVDsNCj4+ICsJfQ0KPj4gKw0K Pj4gKwlyZXR1cm4gY3RfbmF0X2V4ZWN1dGUoc2tiLCBjdCwgY3RpbmZvLCByYW5nZSwgbWFuaXB0 eXBlKTsNCj4+ICsjZWxzZQ0KPj4gKwlyZXR1cm4gTkZfQUNDRVBUOw0KPj4gKyNlbmRpZg0KPj4g K30NCj4+ICsNCj4+ICtzdGF0aWMgaW50IHRjZl9jdF9hY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwg Y29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYSwNCj4+ICsJCSAgICAgIHN0cnVjdCB0Y2ZfcmVzdWx0 ICpyZXMpDQo+PiArew0KPj4gKwlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHNrYi0+ZGV2KTsN Cj4+ICsJYm9vbCBjYWNoZWQsIGNvbW1pdCwgY2xlYXIsIGZvcmNlOw0KPj4gKwllbnVtIGlwX2Nv bm50cmFja19pbmZvIGN0aW5mbzsNCj4+ICsJc3RydWN0IHRjZl9jdCAqYyA9IHRvX2N0KGEpOw0K Pj4gKwlzdHJ1Y3QgbmZfY29ubiAqdG1wbCA9IE5VTEw7DQo+PiArCXN0cnVjdCBuZl9ob29rX3N0 YXRlIHN0YXRlOw0KPj4gKwlzdHJ1Y3QgdGNmX2N0X3BhcmFtcyAqcDsNCj4+ICsJc3RydWN0IG5m X2Nvbm4gKmN0Ow0KPj4gKwlpbnQgbmhfb2ZzLCBlcnI7DQo+PiArCXU4IGZhbWlseTsNCj4+ICsN Cj4+ICsJcCA9IHJjdV9kZXJlZmVyZW5jZV9iaChjLT5wYXJhbXMpOw0KPj4gKw0KPj4gKwljb21t aXQgPSBwLT5jdF9hY3Rpb24gJiBUQ0FfQ1RfQUNUX0NPTU1JVDsNCj4+ICsJY2xlYXIgPSBwLT5j dF9hY3Rpb24gJiBUQ0FfQ1RfQUNUX0NMRUFSOw0KPj4gKwlmb3JjZSA9IHAtPmN0X2FjdGlvbiAm IFRDQV9DVF9BQ1RfRk9SQ0U7DQo+PiArCXRtcGwgPSBwLT50bXBsOw0KPj4gKw0KPj4gKwlpZiAo Y2xlYXIpIHsNCj4+ICsJCWN0ID0gbmZfY3RfZ2V0KHNrYiwgJmN0aW5mbyk7DQo+PiArCQlpZiAo Y3QpIHsNCj4+ICsJCQluZl9jb25udHJhY2tfcHV0KCZjdC0+Y3RfZ2VuZXJhbCk7DQo+PiArCQkJ bmZfY3Rfc2V0KHNrYiwgTlVMTCwgSVBfQ1RfVU5UUkFDS0VEKTsNCj4+ICsJCX0NCj4+ICsNCj4+ ICsJCWdvdG8gb3V0Ow0KPj4gKwl9DQo+PiArDQo+PiArCS8qIFRoZSBjb25udHJhY2sgbW9kdWxl IGV4cGVjdHMgdG8gYmUgd29ya2luZyBhdCBMMy4gKi8NCj4+ICsJbmhfb2ZzID0gc2tiX25ldHdv cmtfb2Zmc2V0KHNrYik7DQo+PiArCXNrYl9wdWxsX3Jjc3VtKHNrYiwgbmhfb2ZzKTsNCj4+ICsN Cj4+ICsJZXJyID0gdGNmX2N0X3NrYl9uZXR3b3JrX3RyaW0oc2tiKTsNCj4+ICsJaWYgKGVycikN Cj4+ICsJCWdvdG8gZHJvcDsNCj4+ICsNCj4+ICsJZmFtaWx5ID0gdGNmX2N0X3NrYl9uZl9mYW1p bHkoc2tiKTsNCj4+ICsJaWYgKGZhbWlseSA9PSBORlBST1RPX1VOU1BFQykNCj4+ICsJCWdvdG8g ZHJvcDsNCj4+ICsNCj4+ICsJc3RhdGUuaG9vayA9IE5GX0lORVRfUFJFX1JPVVRJTkc7DQo+PiAr CXN0YXRlLm5ldCA9IG5ldDsNCj4+ICsJc3RhdGUucGYgPSBmYW1pbHk7DQo+PiArDQo+PiArCS8q IElmIHdlIGFyZSByZWNpcmN1bGF0aW5nIHBhY2tldHMgdG8gbWF0Y2ggb24gY3QgZmllbGRzIGFu ZA0KPj4gKwkgKiBjb21taXR0aW5nIHdpdGggYSBzZXBhcmF0ZSBjdCBhY3Rpb24sIHRoZW4gd2Ug ZG9uJ3QgbmVlZCB0bw0KPj4gKwkgKiBhY3R1YWxseSBydW4gdGhlIHBhY2tldCB0aHJvdWdoIGNv bm50cmFjayB0d2ljZSB1bmxlc3MgaXQncyBmb3IgYQ0KPj4gKwkgKiBkaWZmZXJlbnQgem9uZS4N Cj4+ICsJICovDQo+PiArCWNhY2hlZCA9IHRjZl9jdF9za2JfbmZjdF9jYWNoZWQobmV0LCBza2Is IHAtPnpvbmUsIGZvcmNlKTsNCj4+ICsJaWYgKCFjYWNoZWQpIHsNCj4+ICsJCS8qIEFzc29jaWF0 ZSBza2Igd2l0aCBzcGVjaWZpZWQgem9uZS4gKi8NCj4+ICsJCWlmICh0bXBsKSB7DQo+PiArCQkJ aWYgKHNrYl9uZmN0KHNrYikpDQo+PiArCQkJCW5mX2Nvbm50cmFja19wdXQoc2tiX25mY3Qoc2ti KSk7DQo+PiArCQkJbmZfY29ubnRyYWNrX2dldCgmdG1wbC0+Y3RfZ2VuZXJhbCk7DQo+PiArCQkJ bmZfY3Rfc2V0KHNrYiwgdG1wbCwgSVBfQ1RfTkVXKTsNCj4+ICsJCX0NCj4+ICsNCj4+ICsJCWVy ciA9IG5mX2Nvbm50cmFja19pbihza2IsICZzdGF0ZSk7DQo+PiArCQlpZiAoZXJyICE9IE5GX0FD Q0VQVCkNCj4+ICsJCQlnb3RvIG91dF9wdXNoOw0KPj4gKwl9DQo+PiArDQo+PiArCWN0ID0gbmZf Y3RfZ2V0KHNrYiwgJmN0aW5mbyk7DQo+PiArCWlmICghY3QpDQo+PiArCQlnb3RvIG91dF9wdXNo Ow0KPj4gKwluZl9jdF9kZWxpdmVyX2NhY2hlZF9ldmVudHMoY3QpOw0KPj4gKw0KPj4gKwllcnIg PSB0Y2ZfY3RfYWN0X25hdChza2IsIGN0LCBjdGluZm8sIHAtPmN0X2FjdGlvbiwgJnAtPnJhbmdl LCBjb21taXQpOw0KPj4gKwlpZiAoZXJyICE9IE5GX0FDQ0VQVCkNCj4+ICsJCWdvdG8gZHJvcDsN Cj4+ICsNCj4+ICsJaWYgKGNvbW1pdCkgew0KPj4gKwkJdGNmX2N0X2FjdF9zZXRfbWFyayhjdCwg cC0+bWFyaywgcC0+bWFya19tYXNrKTsNCj4+ICsJCXRjZl9jdF9hY3Rfc2V0X2xhYmVscyhjdCwg cC0+bGFiZWxzLCBwLT5sYWJlbHNfbWFzayk7DQo+PiArDQo+PiArCQkvKiBUaGlzIHdpbGwgdGFr ZSBjYXJlIG9mIHNlbmRpbmcgcXVldWVkIGV2ZW50cw0KPj4gKwkJICogZXZlbiBpZiB0aGUgY29u bmVjdGlvbiBpcyBhbHJlYWR5IGNvbmZpcm1lZC4NCj4+ICsJCSAqLw0KPj4gKwkJbmZfY29ubnRy YWNrX2NvbmZpcm0oc2tiKTsNCj4+ICsJfQ0KPj4gKw0KPj4gK291dF9wdXNoOg0KPj4gKwlza2Jf cHVzaChza2IsIG5oX29mcyk7DQo+PiArCXNrYl9wb3N0cHVzaF9yY3N1bShza2IsIHNrYi0+ZGF0 YSwgbmhfb2ZzKTsNCj4+ICsNCj4+ICtvdXQ6DQo+PiArCWJzdGF0c19jcHVfdXBkYXRlKHRoaXNf Y3B1X3B0cihhLT5jcHVfYnN0YXRzKSwgc2tiKTsNCj4+ICsNCj4+ICsJcmV0dXJuIGMtPnRjZl9h Y3Rpb247DQo+PiArDQo+PiArZHJvcDoNCj4+ICsJcXN0YXRzX2Ryb3BfaW5jKHRoaXNfY3B1X3B0 cihhLT5jcHVfcXN0YXRzKSk7DQo+PiArCXJldHVybiBUQ19BQ1RfU0hPVDsNCj4+ICt9DQo+PiAr DQo+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGN0X3BvbGljeVtUQ0FfQ1RfTUFY ICsgMV0gPSB7DQo+PiArCVtUQ0FfQ1RfQUNUSU9OXSA9IHsgLnR5cGUgPSBOTEFfVTE2IH0sDQo+ PiArCVtUQ0FfQ1RfUEFSTVNdID0geyAudHlwZSA9IE5MQV9FWEFDVF9MRU4sIC5sZW4gPSBzaXpl b2Yoc3RydWN0IHRjX2N0KSB9LA0KPj4gKwlbVENBX0NUX1pPTkVdID0geyAudHlwZSA9IE5MQV9V MTYgfSwNCj4+ICsJW1RDQV9DVF9NQVJLXSA9IHsgLnR5cGUgPSBOTEFfVTMyIH0sDQo+PiArCVtU Q0FfQ1RfTUFSS19NQVNLXSA9IHsgLnR5cGUgPSBOTEFfVTMyIH0sDQo+PiArCVtUQ0FfQ1RfTEFC RUxTXSA9IHsgLnR5cGUgPSBOTEFfQklOQVJZLA0KPj4gKwkJCSAgICAubGVuID0gMTI4IC8gQklU U19QRVJfQllURSB9LA0KPj4gKwlbVENBX0NUX0xBQkVMU19NQVNLXSA9IHsgLnR5cGUgPSBOTEFf QklOQVJZLA0KPj4gKwkJCQkgLmxlbiA9IDEyOCAvIEJJVFNfUEVSX0JZVEUgfSwNCj4+ICsJW1RD QV9DVF9OQVRfSVBWNF9NSU5dID0geyAudHlwZSA9IE5MQV9VMzIgfSwNCj4+ICsJW1RDQV9DVF9O QVRfSVBWNF9NQVhdID0geyAudHlwZSA9IE5MQV9VMzIgfSwNCj4+ICsJW1RDQV9DVF9OQVRfSVBW Nl9NSU5dID0geyAudHlwZSA9IE5MQV9FWEFDVF9MRU4sDQo+PiArCQkJCSAgLmxlbiA9IHNpemVv ZihzdHJ1Y3QgaW42X2FkZHIpIH0sDQo+PiArCVtUQ0FfQ1RfTkFUX0lQVjZfTUFYXSA9IHsgLnR5 cGUgPSBOTEFfRVhBQ1RfTEVOLA0KPj4gKwkJCQkgICAubGVuID0gc2l6ZW9mKHN0cnVjdCBpbjZf YWRkcikgfSwNCj4+ICsJW1RDQV9DVF9OQVRfUE9SVF9NSU5dID0geyAudHlwZSA9IE5MQV9VMTYg fSwNCj4+ICsJW1RDQV9DVF9OQVRfUE9SVF9NQVhdID0geyAudHlwZSA9IE5MQV9VMTYgfSwNCj4+ ICt9Ow0KPj4gKw0KPj4gK3N0YXRpYyBpbnQgdGNmX2N0X2ZpbGxfcGFyYW1zX25hdChzdHJ1Y3Qg dGNmX2N0X3BhcmFtcyAqcCwNCj4+ICsJCQkJICBzdHJ1Y3QgdGNfY3QgKnBhcm0sDQo+PiArCQkJ CSAgc3RydWN0IG5sYXR0ciAqKnRiLA0KPj4gKwkJCQkgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sg KmV4dGFjaykNCj4+ICt7DQo+PiArCXN0cnVjdCBuZl9uYXRfcmFuZ2UyICpyYW5nZTsNCj4+ICsN Cj4+ICsJaWYgKCEocC0+Y3RfYWN0aW9uICYgVENBX0NUX0FDVF9OQVQpKQ0KPj4gKwkJcmV0dXJu IDA7DQo+PiArDQo+PiArCWlmICghSVNfRU5BQkxFRChDT05GSUdfTkZfTkFUKSkgew0KPj4gKwkJ TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgIk5ldGZpbHRlciBuYXQgaXNuJ3QgZW5hYmxlZCBp biBrZXJuZWwiKTsNCj4+ICsJCXJldHVybiAtRU9QTk9UU1VQUDsNCj4+ICsJfQ0KPj4gKw0KPj4g KwlpZiAoIShwLT5jdF9hY3Rpb24gJiAoVENBX0NUX0FDVF9OQVRfU1JDIHwgVENBX0NUX0FDVF9O QVRfRFNUKSkpDQo+PiArCQlyZXR1cm4gMDsNCj4+ICsNCj4+ICsJaWYgKChwLT5jdF9hY3Rpb24g JiBUQ0FfQ1RfQUNUX05BVF9TUkMpICYmDQo+PiArCSAgICAocC0+Y3RfYWN0aW9uICYgVENBX0NU X0FDVF9OQVRfRFNUKSkgew0KPj4gKwkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgImRuYXQg YW5kIHNuYXQgY2FuJ3QgYmUgZW5hYmxlZCBhdCB0aGUgc2FtZSB0aW1lIik7DQo+PiArCQlyZXR1 cm4gLUVPUE5PVFNVUFA7DQo+PiArCX0NCj4+ICsNCj4+ICsJcmFuZ2UgPSAmcC0+cmFuZ2U7DQo+ PiArCWlmICh0YltUQ0FfQ1RfTkFUX0lQVjRfTUlOXSkgew0KPj4gKwkJcmFuZ2UtPm1pbl9hZGRy LmlwID0NCj4+ICsJCQlubGFfZ2V0X2luX2FkZHIodGJbVENBX0NUX05BVF9JUFY0X01JTl0pOw0K Pj4gKwkJcmFuZ2UtPmZsYWdzIHw9IE5GX05BVF9SQU5HRV9NQVBfSVBTOw0KPj4gKwkJcC0+aXB2 NF9yYW5nZSA9IHRydWU7DQo+PiArCX0NCj4+ICsJaWYgKHRiW1RDQV9DVF9OQVRfSVBWNF9NQVhd KSB7DQo+PiArCQlyYW5nZS0+bWF4X2FkZHIuaXAgPQ0KPj4gKwkJCW5sYV9nZXRfaW5fYWRkcih0 YltUQ0FfQ1RfTkFUX0lQVjRfTUFYXSk7DQo+PiArCQlyYW5nZS0+ZmxhZ3MgfD0gTkZfTkFUX1JB TkdFX01BUF9JUFM7DQo+PiArCQlwLT5pcHY0X3JhbmdlID0gdHJ1ZTsNCj4+ICsJfSBlbHNlIGlm IChyYW5nZS0+bWluX2FkZHIuaXApIHsNCj4+ICsJCXJhbmdlLT5tYXhfYWRkci5pcCA9IHJhbmdl LT5taW5fYWRkci5pcDsNCj4+ICsJfQ0KPj4gKw0KPj4gKwlpZiAodGJbVENBX0NUX05BVF9JUFY2 X01JTl0pIHsNCj4+ICsJCXJhbmdlLT5taW5fYWRkci5pbjYgPQ0KPj4gKwkJCW5sYV9nZXRfaW42 X2FkZHIodGJbVENBX0NUX05BVF9JUFY2X01JTl0pOw0KPj4gKwkJcmFuZ2UtPmZsYWdzIHw9IE5G X05BVF9SQU5HRV9NQVBfSVBTOw0KPj4gKwkJcC0+aXB2NF9yYW5nZSA9IGZhbHNlOw0KPj4gKwl9 DQo+PiArCWlmICh0YltUQ0FfQ1RfTkFUX0lQVjZfTUFYXSkgew0KPj4gKwkJcmFuZ2UtPm1heF9h ZGRyLmluNiA9DQo+PiArCQkJbmxhX2dldF9pbjZfYWRkcih0YltUQ0FfQ1RfTkFUX0lQVjZfTUFY XSk7DQo+PiArCQlyYW5nZS0+ZmxhZ3MgfD0gTkZfTkFUX1JBTkdFX01BUF9JUFM7DQo+PiArCQlw LT5pcHY0X3JhbmdlID0gZmFsc2U7DQo+PiArCX0gZWxzZSBpZiAobWVtY2hyX2ludigmcmFuZ2Ut Pm1pbl9hZGRyLmluNiwgMCwNCj4+ICsJCSAgIHNpemVvZihyYW5nZS0+bWluX2FkZHIuaW42KSkp IHsNCj4+ICsJCXJhbmdlLT5tYXhfYWRkci5pbjYgPSByYW5nZS0+bWluX2FkZHIuaW42Ow0KPj4g Kwl9DQo+PiArDQo+PiArCWlmICh0YltUQ0FfQ1RfTkFUX1BPUlRfTUlOXSkgew0KPj4gKwkJcmFu Z2UtPm1pbl9wcm90by5hbGwgPQ0KPj4gKwkJCWh0b25zKG5sYV9nZXRfdTE2KHRiW1RDQV9DVF9O QVRfUE9SVF9NSU5dKSk7DQo+PiArCQlyYW5nZS0+ZmxhZ3MgfD0gTkZfTkFUX1JBTkdFX1BST1RP X1NQRUNJRklFRDsNCj4+ICsJfQ0KPj4gKwlpZiAodGJbVENBX0NUX05BVF9QT1JUX01BWF0pIHsN Cj4+ICsJCXJhbmdlLT5tYXhfcHJvdG8uYWxsID0NCj4+ICsJCQlodG9ucyhubGFfZ2V0X3UxNih0 YltUQ0FfQ1RfTkFUX1BPUlRfTUFYXSkpOw0KPj4gKwkJcmFuZ2UtPmZsYWdzIHw9IE5GX05BVF9S QU5HRV9QUk9UT19TUEVDSUZJRUQ7DQo+PiArCX0gZWxzZSBpZiAocmFuZ2UtPm1pbl9wcm90by5h bGwpIHsNCj4+ICsJCXJhbmdlLT5tYXhfcHJvdG8uYWxsID0gcmFuZ2UtPm1pbl9wcm90by5hbGw7 DQo+PiArCX0NCj4+ICsNCj4+ICsJcmV0dXJuIDA7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyB2 b2lkIHRjZl9jdF9zZXRfa2V5X3ZhbChzdHJ1Y3QgbmxhdHRyICoqdGIsDQo+PiArCQkJICAgICAg IHZvaWQgKnZhbCwgaW50IHZhbF90eXBlLA0KPj4gKwkJCSAgICAgICB2b2lkICptYXNrLCBpbnQg bWFza190eXBlLA0KPj4gKwkJCSAgICAgICBpbnQgbGVuKQ0KPj4gK3sNCj4+ICsJaWYgKCF0Ylt2 YWxfdHlwZV0pDQo+PiArCQlyZXR1cm47DQo+PiArCW5sYV9tZW1jcHkodmFsLCB0Ylt2YWxfdHlw ZV0sIGxlbik7DQo+PiArDQo+PiArCWlmICghbWFzaykNCj4+ICsJCXJldHVybjsNCj4+ICsNCj4+ ICsJaWYgKG1hc2tfdHlwZSA9PSBUQ0FfQ1RfVU5TUEVDIHx8ICF0YlttYXNrX3R5cGVdKQ0KPj4g KwkJbWVtc2V0KG1hc2ssIDB4ZmYsIGxlbik7DQo+PiArCWVsc2UNCj4+ICsJCW5sYV9tZW1jcHko bWFzaywgdGJbbWFza190eXBlXSwgbGVuKTsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGludCB0 Y2ZfY3RfZmlsbF9wYXJhbXMoc3RydWN0IG5ldCAqbmV0LA0KPj4gKwkJCSAgICAgIHN0cnVjdCB0 Y2ZfY3RfcGFyYW1zICpwLA0KPj4gKwkJCSAgICAgIHN0cnVjdCB0Y19jdCAqcGFybSwNCj4+ICsJ CQkgICAgICBzdHJ1Y3QgbmxhdHRyICoqdGIsDQo+PiArCQkJICAgICAgc3RydWN0IG5ldGxpbmtf ZXh0X2FjayAqZXh0YWNrKQ0KPj4gK3sNCj4+ICsJc3RydWN0IHRjX2N0X2FjdGlvbl9uZXQgKnRu ID0gbmV0X2dlbmVyaWMobmV0LCBjdF9uZXRfaWQpOw0KPj4gKwlzdHJ1Y3QgbmZfY29ubnRyYWNr X3pvbmUgem9uZTsNCj4+ICsJc3RydWN0IG5mX2Nvbm4gKnRtcGw7DQo+PiArCWludCBlcnI7DQo+ PiArDQo+PiArCXAtPnpvbmUgPSBORl9DVF9ERUZBVUxUX1pPTkVfSUQ7DQo+PiArDQo+PiArCXRj Zl9jdF9zZXRfa2V5X3ZhbCh0YiwNCj4+ICsJCQkgICAmcC0+Y3RfYWN0aW9uLCBUQ0FfQ1RfQUNU SU9OLA0KPj4gKwkJCSAgIE5VTEwsIFRDQV9DVF9VTlNQRUMsDQo+PiArCQkJICAgc2l6ZW9mKHAt PmN0X2FjdGlvbikpOw0KPj4gKw0KPj4gKwlpZiAocC0+Y3RfYWN0aW9uICYgVENBX0NUX0FDVF9D TEVBUikNCj4+ICsJCXJldHVybiAwOw0KPj4gKw0KPj4gKwllcnIgPSB0Y2ZfY3RfZmlsbF9wYXJh bXNfbmF0KHAsIHBhcm0sIHRiLCBleHRhY2spOw0KPj4gKwlpZiAoZXJyKQ0KPj4gKwkJcmV0dXJu IGVycjsNCj4+ICsNCj4+ICsJaWYgKHRiW1RDQV9DVF9NQVJLXSkgew0KPj4gKwkJaWYgKCFJU19F TkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0tfTUFSSykpIHsNCj4+ICsJCQlOTF9TRVRfRVJSX01T R19NT0QoZXh0YWNrLCAiQ29ubnRyYWNrIG1hcmsgaXNuJ3QgZW5hYmxlZC4iKTsNCj4+ICsJCQly ZXR1cm4gLUVPUE5PVFNVUFA7DQo+PiArCQl9DQo+PiArCQl0Y2ZfY3Rfc2V0X2tleV92YWwodGIs DQo+PiArCQkJCSAgICZwLT5tYXJrLCBUQ0FfQ1RfTUFSSywNCj4+ICsJCQkJICAgJnAtPm1hcmtf bWFzaywgVENBX0NUX01BUktfTUFTSywNCj4+ICsJCQkJICAgc2l6ZW9mKHAtPm1hcmspKTsNCj4+ ICsJfQ0KPj4gKw0KPj4gKwlpZiAodGJbVENBX0NUX0xBQkVMU10pIHsNCj4+ICsJCWlmICghSVNf RU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLX0xBQkVMUykpIHsNCj4+ICsJCQlOTF9TRVRfRVJS X01TR19NT0QoZXh0YWNrLCAiQ29ubnRyYWNrIGxhYmVscyBpc24ndCBlbmFibGVkLiIpOw0KPj4g KwkJCXJldHVybiAtRU9QTk9UU1VQUDsNCj4+ICsJCX0NCj4+ICsNCj4+ICsJCWlmICghdG4tPmxh YmVscykgew0KPj4gKwkJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssICJGYWlsZWQgdG8gc2V0 IGNvbm5sYWJlbCBsZW5ndGgiKTsNCj4+ICsJCQlyZXR1cm4gLUVPUE5PVFNVUFA7DQo+PiArCQl9 DQo+PiArCQl0Y2ZfY3Rfc2V0X2tleV92YWwodGIsDQo+PiArCQkJCSAgIHAtPmxhYmVscywgVENB X0NUX0xBQkVMUywNCj4+ICsJCQkJICAgcC0+bGFiZWxzX21hc2ssIFRDQV9DVF9MQUJFTFNfTUFT SywNCj4+ICsJCQkJICAgc2l6ZW9mKHAtPmxhYmVscykpOw0KPj4gKwl9DQo+PiArDQo+PiArCWlm ICh0YltUQ0FfQ1RfWk9ORV0pIHsNCj4+ICsJCWlmICghSVNfRU5BQkxFRChDT05GSUdfTkZfQ09O TlRSQUNLX1pPTkVTKSkgew0KPj4gKwkJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssICJDb25u dHJhY2sgem9uZXMgaXNuJ3QgZW5hYmxlZC4iKTsNCj4+ICsJCQlyZXR1cm4gLUVPUE5PVFNVUFA7 DQo+PiArCQl9DQo+PiArDQo+PiArCQl0Y2ZfY3Rfc2V0X2tleV92YWwodGIsDQo+PiArCQkJCSAg ICZwLT56b25lLCBUQ0FfQ1RfWk9ORSwNCj4+ICsJCQkJICAgTlVMTCwgVENBX0NUX1VOU1BFQywN Cj4+ICsJCQkJICAgc2l6ZW9mKHAtPnpvbmUpKTsNCj4+ICsJfQ0KPj4gKw0KPj4gKwlpZiAocC0+ em9uZSA9PSBORl9DVF9ERUZBVUxUX1pPTkVfSUQpDQo+PiArCQlyZXR1cm4gMDsNCj4+ICsNCj4+ ICsJbmZfY3Rfem9uZV9pbml0KCZ6b25lLCBwLT56b25lLCBORl9DVF9ERUZBVUxUX1pPTkVfRElS LCAwKTsNCj4+ICsJdG1wbCA9IG5mX2N0X3RtcGxfYWxsb2MobmV0LCAmem9uZSwgR0ZQX0tFUk5F TCk7DQo+PiArCWlmICghdG1wbCkgew0KPj4gKwkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywg IkZhaWxlZCB0byBhbGxvY2F0ZSBjb25udHJhY2sgdGVtcGxhdGUiKTsNCj4+ICsJCXJldHVybiAt RU5PTUVNOw0KPj4gKwl9DQo+PiArCV9fc2V0X2JpdChJUFNfQ09ORklSTUVEX0JJVCwgJnRtcGwt PnN0YXR1cyk7DQo+PiArCW5mX2Nvbm50cmFja19nZXQoJnRtcGwtPmN0X2dlbmVyYWwpOw0KPj4g KwlwLT50bXBsID0gdG1wbDsNCj4+ICsNCj4+ICsJcmV0dXJuIDA7DQo+PiArfQ0KPj4gKw0KPj4g K3N0YXRpYyBpbnQgdGNmX2N0X2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICpu bGEsDQo+PiArCQkgICAgICAgc3RydWN0IG5sYXR0ciAqZXN0LCBzdHJ1Y3QgdGNfYWN0aW9uICoq YSwNCj4+ICsJCSAgICAgICBpbnQgcmVwbGFjZSwgaW50IGJpbmQsIGJvb2wgcnRubF9oZWxkLA0K Pj4gKwkJICAgICAgIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLA0KPj4gKwkJICAgICAgIHN0cnVjdCBu ZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykNCj4+ICt7DQo+PiArCXN0cnVjdCB0Y19hY3Rpb25fbmV0 ICp0biA9IG5ldF9nZW5lcmljKG5ldCwgY3RfbmV0X2lkKTsNCj4+ICsJc3RydWN0IHRjZl9jdF9w YXJhbXMgKnBhcmFtcyA9IE5VTEw7DQo+PiArCXN0cnVjdCBubGF0dHIgKnRiW1RDQV9DVF9NQVgg KyAxXTsNCj4+ICsJc3RydWN0IHRjZl9jaGFpbiAqZ290b19jaCA9IE5VTEw7DQo+PiArCXN0cnVj dCB0Y19jdCAqcGFybTsNCj4+ICsJc3RydWN0IHRjZl9jdCAqYzsNCj4+ICsJaW50IGVyciwgcmVz ID0gMDsNCj4+ICsNCj4+ICsJaWYgKCFubGEpIHsNCj4+ICsJCU5MX1NFVF9FUlJfTVNHX01PRChl eHRhY2ssICJDdCByZXF1aXJlcyBhdHRyaWJ1dGVzIHRvIGJlIHBhc3NlZCIpOw0KPj4gKwkJcmV0 dXJuIC1FSU5WQUw7DQo+PiArCX0NCj4+ICsNCj4+ICsJZXJyID0gbmxhX3BhcnNlX25lc3RlZCh0 YiwgVENBX0NUX01BWCwgbmxhLCBjdF9wb2xpY3ksIGV4dGFjayk7DQo+PiArCWlmIChlcnIgPCAw KQ0KPj4gKwkJcmV0dXJuIGVycjsNCj4+ICsNCj4+ICsJaWYgKCF0YltUQ0FfQ1RfUEFSTVNdKSB7 DQo+PiArCQlOTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCAiTWlzc2luZyByZXF1aXJlZCBjdCBw YXJhbWV0ZXJzIik7DQo+PiArCQlyZXR1cm4gLUVJTlZBTDsNCj4+ICsJfQ0KPj4gKwlwYXJtID0g bmxhX2RhdGEodGJbVENBX0NUX1BBUk1TXSk7DQo+PiArDQo+PiArCWVyciA9IHRjZl9pZHJfY2hl Y2tfYWxsb2ModG4sICZwYXJtLT5pbmRleCwgYSwgYmluZCk7DQo+PiArCWlmIChlcnIgPCAwKQ0K Pj4gKwkJcmV0dXJuIGVycjsNCj4+ICsNCj4+ICsJaWYgKCFlcnIpIHsNCj4+ICsJCWVyciA9IHRj Zl9pZHJfY3JlYXRlKHRuLCBwYXJtLT5pbmRleCwgZXN0LCBhLA0KPj4gKwkJCQkgICAgICZhY3Rf Y3Rfb3BzLCBiaW5kLCB0cnVlKTsNCj4+ICsJCWlmIChlcnIpIHsNCj4+ICsJCQl0Y2ZfaWRyX2Ns ZWFudXAodG4sIHBhcm0tPmluZGV4KTsNCj4+ICsJCQlyZXR1cm4gZXJyOw0KPj4gKwkJfQ0KPj4g KwkJcmVzID0gQUNUX1BfQ1JFQVRFRDsNCj4+ICsJfSBlbHNlIHsNCj4+ICsJCWlmIChiaW5kKQ0K Pj4gKwkJCXJldHVybiAwOw0KPj4gKw0KPj4gKwkJaWYgKCFyZXBsYWNlKSB7DQo+PiArCQkJdGNm X2lkcl9yZWxlYXNlKCphLCBiaW5kKTsNCj4+ICsJCQlyZXR1cm4gLUVFWElTVDsNCj4+ICsJCX0N Cj4+ICsJfQ0KPj4gKwllcnIgPSB0Y2ZfYWN0aW9uX2NoZWNrX2N0cmxhY3QocGFybS0+YWN0aW9u LCB0cCwgJmdvdG9fY2gsIGV4dGFjayk7DQo+PiArCWlmIChlcnIgPCAwKQ0KPj4gKwkJZ290byBj bGVhbnVwOw0KPj4gKw0KPj4gKwljID0gdG9fY3QoKmEpOw0KPj4gKw0KPj4gKwlwYXJhbXMgPSBr emFsbG9jKHNpemVvZigqcGFyYW1zKSwgR0ZQX0tFUk5FTCk7DQo+PiArCWlmICh1bmxpa2VseSgh cGFyYW1zKSkgew0KPj4gKwkJZXJyID0gLUVOT01FTTsNCj4+ICsJCWdvdG8gY2xlYW51cDsNCj4+ ICsJfQ0KPj4gKw0KPj4gKwllcnIgPSB0Y2ZfY3RfZmlsbF9wYXJhbXMobmV0LCBwYXJhbXMsIHBh cm0sIHRiLCBleHRhY2spOw0KPj4gKwlpZiAoZXJyKQ0KPj4gKwkJZ290byBjbGVhbnVwOw0KPj4g Kw0KPj4gKwlzcGluX2xvY2tfYmgoJmMtPnRjZl9sb2NrKTsNCj4+ICsJZ290b19jaCA9IHRjZl9h Y3Rpb25fc2V0X2N0cmxhY3QoKmEsIHBhcm0tPmFjdGlvbiwgZ290b19jaCk7DQo+PiArCXJjdV9z d2FwX3Byb3RlY3RlZChjLT5wYXJhbXMsIHBhcmFtcywgbG9ja2RlcF9pc19oZWxkKCZjLT50Y2Zf bG9jaykpOw0KPj4gKwlzcGluX3VubG9ja19iaCgmYy0+dGNmX2xvY2spOw0KPj4gKw0KPj4gKwlp ZiAoZ290b19jaCkNCj4+ICsJCXRjZl9jaGFpbl9wdXRfYnlfYWN0KGdvdG9fY2gpOw0KPj4gKwlp ZiAocGFyYW1zKQ0KPj4gKwkJa2ZyZWVfcmN1KHBhcmFtcywgcmN1KTsNCj4+ICsJaWYgKHJlcyA9 PSBBQ1RfUF9DUkVBVEVEKQ0KPj4gKwkJdGNmX2lkcl9pbnNlcnQodG4sICphKTsNCj4+ICsNCj4+ ICsJcmV0dXJuIHJlczsNCj4+ICsNCj4+ICtjbGVhbnVwOg0KPj4gKwlpZiAoZ290b19jaCkNCj4+ ICsJCXRjZl9jaGFpbl9wdXRfYnlfYWN0KGdvdG9fY2gpOw0KPj4gKwlrZnJlZShwYXJhbXMpOw0K Pj4gKwl0Y2ZfaWRyX3JlbGVhc2UoKmEsIGJpbmQpOw0KPj4gKwlyZXR1cm4gZXJyOw0KPj4gK30N Cj4+ICsNCj4+ICtzdGF0aWMgdm9pZCB0Y2ZfY3RfY2xlYW51cChzdHJ1Y3QgdGNfYWN0aW9uICph KQ0KPj4gK3sNCj4+ICsJc3RydWN0IHRjZl9jdF9wYXJhbXMgKnBhcmFtczsNCj4+ICsJc3RydWN0 IHRjZl9jdCAqYyA9IHRvX2N0KGEpOw0KPj4gKw0KPj4gKwlwYXJhbXMgPSByY3VfZGVyZWZlcmVu Y2VfcHJvdGVjdGVkKGMtPnBhcmFtcywgMSk7DQo+PiArCWlmIChwYXJhbXMpDQo+PiArCQljYWxs X3JjdSgmcGFyYW1zLT5yY3UsIHRjZl9jdF9wYXJhbXNfZnJlZSk7DQo+PiArfQ0KPj4gKw0KPj4g K3N0YXRpYyBpbnQgdGNmX2N0X2R1bXBfa2V5X3ZhbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLA0KPj4g KwkJCSAgICAgICB2b2lkICp2YWwsIGludCB2YWxfdHlwZSwNCj4+ICsJCQkgICAgICAgdm9pZCAq bWFzaywgaW50IG1hc2tfdHlwZSwNCj4+ICsJCQkgICAgICAgaW50IGxlbikNCj4+ICt7DQo+PiAr CWludCBlcnI7DQo+PiArDQo+PiArCWlmIChtYXNrICYmICFtZW1jaHJfaW52KG1hc2ssIDAsIGxl bikpDQo+PiArCQlyZXR1cm4gMDsNCj4+ICsNCj4+ICsJZXJyID0gbmxhX3B1dChza2IsIHZhbF90 eXBlLCBsZW4sIHZhbCk7DQo+PiArCWlmIChlcnIpDQo+PiArCQlyZXR1cm4gZXJyOw0KPj4gKw0K Pj4gKwlpZiAobWFza190eXBlICE9IFRDQV9DVF9VTlNQRUMpIHsNCj4+ICsJCWVyciA9IG5sYV9w dXQoc2tiLCBtYXNrX3R5cGUsIGxlbiwgbWFzayk7DQo+PiArCQlpZiAoZXJyKQ0KPj4gKwkJCXJl dHVybiBlcnI7DQo+PiArCX0NCj4+ICsNCj4+ICsJcmV0dXJuIDA7DQo+PiArfQ0KPj4gKw0KPj4g K3N0YXRpYyBpbnQgdGNmX2N0X2R1bXBfbmF0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0 Y2ZfY3RfcGFyYW1zICpwKQ0KPj4gK3sNCj4+ICsJc3RydWN0IG5mX25hdF9yYW5nZTIgKnJhbmdl ID0gJnAtPnJhbmdlOw0KPj4gKw0KPj4gKwlpZiAoIShwLT5jdF9hY3Rpb24gJiBUQ0FfQ1RfQUNU X05BVCkpDQo+PiArCQlyZXR1cm4gMDsNCj4+ICsNCj4+ICsJaWYgKCEocC0+Y3RfYWN0aW9uICYg KFRDQV9DVF9BQ1RfTkFUX1NSQyB8IFRDQV9DVF9BQ1RfTkFUX0RTVCkpKQ0KPj4gKwkJcmV0dXJu IDA7DQo+PiArDQo+PiArCWlmIChyYW5nZS0+ZmxhZ3MgJiBORl9OQVRfUkFOR0VfTUFQX0lQUykg ew0KPj4gKwkJaWYgKHAtPmlwdjRfcmFuZ2UpIHsNCj4+ICsJCQlpZiAobmxhX3B1dF9pbl9hZGRy KHNrYiwgVENBX0NUX05BVF9JUFY0X01JTiwNCj4+ICsJCQkJCSAgICByYW5nZS0+bWluX2FkZHIu aXApKQ0KPj4gKwkJCQlyZXR1cm4gLTE7DQo+PiArCQkJaWYgKG5sYV9wdXRfaW5fYWRkcihza2Is IFRDQV9DVF9OQVRfSVBWNF9NQVgsDQo+PiArCQkJCQkgICAgcmFuZ2UtPm1heF9hZGRyLmlwKSkN Cj4+ICsJCQkJcmV0dXJuIC0xOw0KPj4gKwkJfSBlbHNlIHsNCj4+ICsJCQlpZiAobmxhX3B1dF9p bjZfYWRkcihza2IsIFRDQV9DVF9OQVRfSVBWNl9NSU4sDQo+PiArCQkJCQkgICAgICZyYW5nZS0+ bWluX2FkZHIuaW42KSkNCj4+ICsJCQkJcmV0dXJuIC0xOw0KPj4gKwkJCWlmIChubGFfcHV0X2lu Nl9hZGRyKHNrYiwgVENBX0NUX05BVF9JUFY2X01BWCwNCj4+ICsJCQkJCSAgICAgJnJhbmdlLT5t YXhfYWRkci5pbjYpKQ0KPj4gKwkJCQlyZXR1cm4gLTE7DQo+PiArCQl9DQo+PiArCX0NCj4+ICsN Cj4+ICsJaWYgKHJhbmdlLT5mbGFncyAmIE5GX05BVF9SQU5HRV9QUk9UT19TUEVDSUZJRUQpIHsN Cj4+ICsJCWlmIChubGFfcHV0X3UxNihza2IsIFRDQV9DVF9OQVRfUE9SVF9NSU4sDQo+PiArCQkJ CW50b2hzKHJhbmdlLT5taW5fcHJvdG8uYWxsKSkpDQo+PiArCQkJcmV0dXJuIC0xOw0KPj4gKwkJ aWYgKG5sYV9wdXRfdTE2KHNrYiwgVENBX0NUX05BVF9QT1JUX01BWCwNCj4+ICsJCQkJbnRvaHMo cmFuZ2UtPm1heF9wcm90by5hbGwpKSkNCj4+ICsJCQlyZXR1cm4gLTE7DQo+PiArCX0NCj4+ICsN Cj4+ICsJcmV0dXJuIDA7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBpbmxpbmUgaW50IHRjZl9j dF9kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0Y19hY3Rpb24gKmEsDQo+PiArCQkJ ICAgICAgaW50IGJpbmQsIGludCByZWYpDQo+PiArew0KPj4gKwl1bnNpZ25lZCBjaGFyICpiID0g c2tiX3RhaWxfcG9pbnRlcihza2IpOw0KPj4gKwlzdHJ1Y3QgdGNmX2N0ICpjID0gdG9fY3QoYSk7 DQo+PiArCXN0cnVjdCB0Y2ZfY3RfcGFyYW1zICpwOw0KPj4gKw0KPj4gKwlzdHJ1Y3QgdGNfY3Qg b3B0ID0gew0KPj4gKwkJLmluZGV4ICAgPSBjLT50Y2ZfaW5kZXgsDQo+PiArCQkucmVmY250ICA9 IHJlZmNvdW50X3JlYWQoJmMtPnRjZl9yZWZjbnQpIC0gcmVmLA0KPj4gKwkJLmJpbmRjbnQgPSBh dG9taWNfcmVhZCgmYy0+dGNmX2JpbmRjbnQpIC0gYmluZCwNCj4+ICsJfTsNCj4+ICsJc3RydWN0 IHRjZl90IHQ7DQo+PiArDQo+PiArCXNwaW5fbG9ja19iaCgmYy0+dGNmX2xvY2spOw0KPj4gKwlw ID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChjLT5wYXJhbXMsDQo+PiArCQkJCSAgICAgIGxv Y2tkZXBfaXNfaGVsZCgmYy0+dGNmX2xvY2spKTsNCj4+ICsJb3B0LmFjdGlvbiA9IGMtPnRjZl9h Y3Rpb247DQo+PiArDQo+PiArCWlmICh0Y2ZfY3RfZHVtcF9rZXlfdmFsKHNrYiwNCj4+ICsJCQkJ JnAtPmN0X2FjdGlvbiwgVENBX0NUX0FDVElPTiwNCj4+ICsJCQkJTlVMTCwgVENBX0NUX1VOU1BF QywNCj4+ICsJCQkJc2l6ZW9mKHAtPmN0X2FjdGlvbikpKQ0KPj4gKwkJZ290byBubGFfcHV0X2Zh aWx1cmU7DQo+PiArDQo+PiArCWlmIChwLT5jdF9hY3Rpb24gJiBUQ0FfQ1RfQUNUX0NMRUFSKQ0K Pj4gKwkJZ290byBza2lwX2R1bXA7DQo+PiArDQo+PiArCWlmIChJU19FTkFCTEVEKENPTkZJR19O Rl9DT05OVFJBQ0tfTUFSSykgJiYNCj4+ICsJICAgIHRjZl9jdF9kdW1wX2tleV92YWwoc2tiLA0K Pj4gKwkJCQkmcC0+bWFyaywgVENBX0NUX01BUkssDQo+PiArCQkJCSZwLT5tYXJrX21hc2ssIFRD QV9DVF9NQVJLX01BU0ssDQo+PiArCQkJCXNpemVvZihwLT5tYXJrKSkpDQo+PiArCQlnb3RvIG5s YV9wdXRfZmFpbHVyZTsNCj4+ICsNCj4+ICsJaWYgKElTX0VOQUJMRUQoQ09ORklHX05GX0NPTk5U UkFDS19MQUJFTFMpICYmDQo+PiArCSAgICB0Y2ZfY3RfZHVtcF9rZXlfdmFsKHNrYiwNCj4+ICsJ CQkJcC0+bGFiZWxzLCBUQ0FfQ1RfTEFCRUxTLA0KPj4gKwkJCQlwLT5sYWJlbHNfbWFzaywgVENB X0NUX0xBQkVMU19NQVNLLA0KPj4gKwkJCQlzaXplb2YocC0+bGFiZWxzKSkpDQo+PiArCQlnb3Rv IG5sYV9wdXRfZmFpbHVyZTsNCj4+ICsNCj4+ICsJaWYgKElTX0VOQUJMRUQoQ09ORklHX05GX0NP Tk5UUkFDS19aT05FUykgJiYNCj4+ICsJICAgIHRjZl9jdF9kdW1wX2tleV92YWwoc2tiLA0KPj4g KwkJCQkmcC0+em9uZSwgVENBX0NUX1pPTkUsDQo+PiArCQkJCU5VTEwsIFRDQV9DVF9VTlNQRUMs DQo+PiArCQkJCXNpemVvZihwLT56b25lKSkpDQo+PiArCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsN Cj4+ICsNCj4+ICsJaWYgKHRjZl9jdF9kdW1wX25hdChza2IsIHApKQ0KPj4gKwkJZ290byBubGFf cHV0X2ZhaWx1cmU7DQo+PiArDQo+PiArc2tpcF9kdW1wOg0KPj4gKwlpZiAobmxhX3B1dChza2Is IFRDQV9DVF9QQVJNUywgc2l6ZW9mKG9wdCksICZvcHQpKQ0KPj4gKwkJZ290byBubGFfcHV0X2Zh aWx1cmU7DQo+PiArDQo+PiArCXRjZl90bV9kdW1wKCZ0LCAmYy0+dGNmX3RtKTsNCj4+ICsJaWYg KG5sYV9wdXRfNjRiaXQoc2tiLCBUQ0FfQ1RfVE0sIHNpemVvZih0KSwgJnQsIFRDQV9DVF9QQUQp KQ0KPj4gKwkJZ290byBubGFfcHV0X2ZhaWx1cmU7DQo+PiArCXNwaW5fdW5sb2NrX2JoKCZjLT50 Y2ZfbG9jayk7DQo+PiArDQo+PiArCXJldHVybiBza2ItPmxlbjsNCj4+ICtubGFfcHV0X2ZhaWx1 cmU6DQo+PiArCXNwaW5fdW5sb2NrX2JoKCZjLT50Y2ZfbG9jayk7DQo+PiArCW5sbXNnX3RyaW0o c2tiLCBiKTsNCj4+ICsJcmV0dXJuIC0xOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgaW50IHRj Zl9jdF93YWxrZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLA0KPj4gKwkJ CSBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsIGludCB0eXBlLA0KPj4gKwkJCSBjb25zdCBz dHJ1Y3QgdGNfYWN0aW9uX29wcyAqb3BzLA0KPj4gKwkJCSBzdHJ1Y3QgbmV0bGlua19leHRfYWNr ICpleHRhY2spDQo+PiArew0KPj4gKwlzdHJ1Y3QgdGNfYWN0aW9uX25ldCAqdG4gPSBuZXRfZ2Vu ZXJpYyhuZXQsIGN0X25ldF9pZCk7DQo+PiArDQo+PiArCXJldHVybiB0Y2ZfZ2VuZXJpY193YWxr ZXIodG4sIHNrYiwgY2IsIHR5cGUsIG9wcywgZXh0YWNrKTsNCj4+ICt9DQo+PiArDQo+PiArc3Rh dGljIGludCB0Y2ZfY3Rfc2VhcmNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjX2FjdGlvbiAq KmEsIHUzMiBpbmRleCkNCj4+ICt7DQo+PiArCXN0cnVjdCB0Y19hY3Rpb25fbmV0ICp0biA9IG5l dF9nZW5lcmljKG5ldCwgY3RfbmV0X2lkKTsNCj4+ICsNCj4+ICsJcmV0dXJuIHRjZl9pZHJfc2Vh cmNoKHRuLCBhLCBpbmRleCk7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyB2b2lkIHRjZl9zdGF0 c191cGRhdGUoc3RydWN0IHRjX2FjdGlvbiAqYSwgdTY0IGJ5dGVzLCB1MzIgcGFja2V0cywNCj4+ ICsJCQkgICAgIHU2NCBsYXN0dXNlLCBib29sIGh3KQ0KPj4gK3sNCj4+ICsJc3RydWN0IHRjZl9j dCAqYyA9IHRvX2N0KGEpOw0KPj4gKw0KPj4gKwlfYnN0YXRzX2NwdV91cGRhdGUodGhpc19jcHVf cHRyKGEtPmNwdV9ic3RhdHMpLCBieXRlcywgcGFja2V0cyk7DQo+PiArDQo+PiArCWlmIChodykN Cj4+ICsJCV9ic3RhdHNfY3B1X3VwZGF0ZSh0aGlzX2NwdV9wdHIoYS0+Y3B1X2JzdGF0c19odyks DQo+PiArCQkJCSAgIGJ5dGVzLCBwYWNrZXRzKTsNCj4+ICsJYy0+dGNmX3RtLmxhc3R1c2UgPSBt YXhfdCh1NjQsIGMtPnRjZl90bS5sYXN0dXNlLCBsYXN0dXNlKTsNCj4+ICt9DQo+PiArDQo+PiAr c3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9jdF9vcHMgPSB7DQo+PiArCS5raW5kCQk9 CSJjdCIsDQo+PiArCS5pZAkJPQlUQ0FfSURfQ1QsDQo+PiArCS5vd25lcgkJPQlUSElTX01PRFVM RSwNCj4+ICsJLmFjdAkJPQl0Y2ZfY3RfYWN0LA0KPj4gKwkuZHVtcAkJPQl0Y2ZfY3RfZHVtcCwN Cj4+ICsJLmluaXQJCT0JdGNmX2N0X2luaXQsDQo+PiArCS5jbGVhbnVwCT0JdGNmX2N0X2NsZWFu dXAsDQo+PiArCS53YWxrCQk9CXRjZl9jdF93YWxrZXIsDQo+PiArCS5sb29rdXAJCT0JdGNmX2N0 X3NlYXJjaCwNCj4+ICsJLnN0YXRzX3VwZGF0ZQk9CXRjZl9zdGF0c191cGRhdGUsDQo+PiArCS5z aXplCQk9CXNpemVvZihzdHJ1Y3QgdGNmX2N0KSwNCj4+ICt9Ow0KPj4gKw0KPj4gK3N0YXRpYyBf X25ldF9pbml0IGludCBjdF9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpDQo+PiArew0KPj4gKwlz dHJ1Y3QgdGNfY3RfYWN0aW9uX25ldCAqdG4gPSBuZXRfZ2VuZXJpYyhuZXQsIGN0X25ldF9pZCk7 DQo+PiArCXVuc2lnbmVkIGludCBuX2JpdHMgPSBGSUVMRF9TSVpFT0Yoc3RydWN0IHRjZl9jdF9w YXJhbXMsIGxhYmVscykgKiA4Ow0KPj4gKw0KPj4gKwlpZiAobmZfY29ubmxhYmVsc19nZXQobmV0 LCBuX2JpdHMgLSAxKSkgew0KPj4gKwkJdG4tPmxhYmVscyA9IGZhbHNlOw0KPj4gKwkJcHJfZXJy KCJhY3RfY3Q6IEZhaWxlZCB0byBzZXQgY29ubmxhYmVscyBsZW5ndGgiKTsNCj4+ICsJfSBlbHNl IHsNCj4+ICsJCXRuLT5sYWJlbHMgPSB0cnVlOw0KPj4gKwl9DQo+PiArDQo+PiArCXJldHVybiB0 Y19hY3Rpb25fbmV0X2luaXQoJnRuLT50biwgJmFjdF9jdF9vcHMpOw0KPj4gK30NCj4+ICsNCj4+ ICtzdGF0aWMgdm9pZCBfX25ldF9leGl0IGN0X2V4aXRfbmV0KHN0cnVjdCBsaXN0X2hlYWQgKm5l dF9saXN0KQ0KPj4gK3sNCj4+ICsJc3RydWN0IG5ldCAqbmV0Ow0KPj4gKw0KPj4gKwlydG5sX2xv Y2soKTsNCj4+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeShuZXQsIG5ldF9saXN0LCBleGl0X2xpc3Qp IHsNCj4+ICsJCXN0cnVjdCB0Y19jdF9hY3Rpb25fbmV0ICp0biA9IG5ldF9nZW5lcmljKG5ldCwg Y3RfbmV0X2lkKTsNCj4+ICsNCj4+ICsJCWlmICh0bi0+bGFiZWxzKQ0KPj4gKwkJCW5mX2Nvbm5s YWJlbHNfcHV0KG5ldCk7DQo+PiArCX0NCj4+ICsJcnRubF91bmxvY2soKTsNCj4+ICsNCj4+ICsJ dGNfYWN0aW9uX25ldF9leGl0KG5ldF9saXN0LCBjdF9uZXRfaWQpOw0KPj4gK30NCj4+ICsNCj4+ ICtzdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIGN0X25ldF9vcHMgPSB7DQo+PiArCS5p bml0ID0gY3RfaW5pdF9uZXQsDQo+PiArCS5leGl0X2JhdGNoID0gY3RfZXhpdF9uZXQsDQo+PiAr CS5pZCAgID0gJmN0X25ldF9pZCwNCj4+ICsJLnNpemUgPSBzaXplb2Yoc3RydWN0IHRjX2N0X2Fj dGlvbl9uZXQpLA0KPj4gK307DQo+PiArDQo+PiArc3RhdGljIGludCBfX2luaXQgY3RfaW5pdF9t b2R1bGUodm9pZCkNCj4+ICt7DQo+PiArCXJldHVybiB0Y2ZfcmVnaXN0ZXJfYWN0aW9uKCZhY3Rf Y3Rfb3BzLCAmY3RfbmV0X29wcyk7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyB2b2lkIF9fZXhp dCBjdF9jbGVhbnVwX21vZHVsZSh2b2lkKQ0KPj4gK3sNCj4+ICsJdGNmX3VucmVnaXN0ZXJfYWN0 aW9uKCZhY3RfY3Rfb3BzLCAmY3RfbmV0X29wcyk7DQo+PiArfQ0KPj4gKw0KPj4gK21vZHVsZV9p bml0KGN0X2luaXRfbW9kdWxlKTsNCj4+ICttb2R1bGVfZXhpdChjdF9jbGVhbnVwX21vZHVsZSk7 DQo+PiArTU9EVUxFX0FVVEhPUigiUGF1bCBCbGFrZXkgPHBhdWxiQG1lbGxhbm94LmNvbT4iKTsN Cj4+ICtNT0RVTEVfQVVUSE9SKCJZb3NzaSBLdXBlcm1hbiA8eW9zc2lrdUBtZWxsYW5veC5jb20+ Iik7DQo+PiArTU9EVUxFX0FVVEhPUigiTWFyY2VsbyBSaWNhcmRvIExlaXRuZXIgPG1hcmNlbG8u bGVpdG5lckBnbWFpbC5jb20+Iik7DQo+PiArTU9EVUxFX0RFU0NSSVBUSU9OKCJDb25uZWN0aW9u IHRyYWNraW5nIGFjdGlvbiIpOw0KPj4gK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsNCj4+ICsN Cj4+IGRpZmYgLS1naXQgYS9uZXQvc2NoZWQvY2xzX2FwaS5jIGIvbmV0L3NjaGVkL2Nsc19hcGku Yw0KPj4gaW5kZXggYWQzNmJiYy4uNGE3MzMxYyAxMDA2NDQNCj4+IC0tLSBhL25ldC9zY2hlZC9j bHNfYXBpLmMNCj4+ICsrKyBiL25ldC9zY2hlZC9jbHNfYXBpLmMNCj4+IEBAIC0zNSw2ICszNSw3 IEBADQo+PiAgICNpbmNsdWRlIDxuZXQvdGNfYWN0L3RjX3BvbGljZS5oPg0KPj4gICAjaW5jbHVk ZSA8bmV0L3RjX2FjdC90Y19zYW1wbGUuaD4NCj4+ICAgI2luY2x1ZGUgPG5ldC90Y19hY3QvdGNf c2tiZWRpdC5oPg0KPj4gKyNpbmNsdWRlIDxuZXQvdGNfYWN0L3RjX2N0Lmg+DQo+PiAgIA0KPj4g ICBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgcnRtX3RjYV9wb2xpY3lbVENBX01BWCAr IDFdOw0KPj4gICANCj4+IEBAIC0zMjY2LDYgKzMyNjcsMTAgQEAgaW50IHRjX3NldHVwX2Zsb3df YWN0aW9uKHN0cnVjdCBmbG93X2FjdGlvbiAqZmxvd19hY3Rpb24sDQo+PiAgIAkJCWVudHJ5LT5w b2xpY2UuYnVyc3QgPSB0Y2ZfcG9saWNlX3RjZnBfYnVyc3QoYWN0KTsNCj4+ICAgCQkJZW50cnkt PnBvbGljZS5yYXRlX2J5dGVzX3BzID0NCj4+ICAgCQkJCXRjZl9wb2xpY2VfcmF0ZV9ieXRlc19w cyhhY3QpOw0KPj4gKwkJfSBlbHNlIGlmIChpc190Y2ZfY3QoYWN0KSkgew0KPj4gKwkJCWVudHJ5 LT5pZCA9IEZMT1dfQUNUSU9OX0NUOw0KPj4gKwkJCWVudHJ5LT5jdC5hY3Rpb24gPSB0Y2ZfY3Rf YWN0aW9uKGFjdCk7DQo+PiArCQkJZW50cnktPmN0LnpvbmUgPSB0Y2ZfY3Rfem9uZShhY3QpOw0K Pj4gICAJCX0gZWxzZSB7DQo+PiAgIAkJCWdvdG8gZXJyX291dDsNCj4+ICAgCQl9DQo+PiAtLSAN Cj4+IDEuOC4zLjENCg==