Received: by 2002:a25:e7d8:0:0:0:0:0 with SMTP id e207csp932485ybh; Thu, 12 Mar 2020 13:49:47 -0700 (PDT) X-Google-Smtp-Source: ADFU+vtuRgMIN1TRVyOgrwP0q0j6au+1HkfeC4D5QfthCkdv2lxr6LzVu+7IcWpvR/po/w9Fkzo5 X-Received: by 2002:a9d:719a:: with SMTP id o26mr6375996otj.290.1584046186821; Thu, 12 Mar 2020 13:49:46 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1584046186; cv=pass; d=google.com; s=arc-20160816; b=VVvhsdmnusTr7mXawpq+UKiCEgazIadzlcSYUIxYNOsjDBlA6DYh+4t5BUtQMRt0iF VhojVxUtwq/9N3C4/ucwc/oeH3oZPiD9gNTBV1jBHCtXhoJEXyrtq1crWIdFl9yBBekX Mhp9mUJBe7fqrlqQj4gA3owL7D1+juxaGcyJSOp9hR818RPL3ydVnHLYyTLrGFLI7UkU WeKKZ4cg6aCoLSTqdxwh2/TlOMBjuQVOvtZ9ukcHEcBTncQ6WgK6wZLT1U+n0nlxjJr1 Wg/B86oCqB1RjgNUFvFwwuy0+7IjmOltqIQ87c54AgZ6IDkZc/riquNOMMo6LHXe8ajT jUtg== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:content-transfer-encoding :content-id:user-agent:content-language:accept-language:in-reply-to :references:message-id:date:thread-index:thread-topic:subject:to :from:dkim-signature; bh=/1CWCF9xU1Ya9svImEabDTrImmc0EGgouXg5OeZ3g3w=; b=aAQeetwA7g2HJ0na81GXRFbhUDcLnJXYlV2iebSF+Myoui1blkRUsauW5+aNEyxUWA FT6zSVYXWr2CTqTu6kngaUhxI2g9lIzRu0ZwPPi8ozN44mcMjKx/2HcVe23xiAhHqRtB AYsZVM8jc2tk77MRzqV0LE7awWBzWeXqCciOl/Fokw3zCrEYLkoZzL0EYuz/UMMU7U4N DHjdUi2fAx1YW1laKYjIRLNxrq8Ax9TE5Kph1ulHx0LDGNJr+ydGsUR4iLBJ9mtWkych rA5O0cuSWv98PPCwmDoe0Z8703vJrceJdRuPcT/l0Xdh/VKd2xE5kYkJFCMXCH8wTkys tPmw== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@netapp.onmicrosoft.com header.s=selector1-netapp-onmicrosoft-com header.b="EyP/NVTY"; arc=pass (i=1 spf=pass spfdomain=netapp.com dkim=pass dkdomain=netapp.com dmarc=pass fromdomain=netapp.com); spf=pass (google.com: best guess record for domain of linux-nfs-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-nfs-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id a66si3375976otb.65.2020.03.12.13.49.30; Thu, 12 Mar 2020 13:49:46 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-nfs-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@netapp.onmicrosoft.com header.s=selector1-netapp-onmicrosoft-com header.b="EyP/NVTY"; arc=pass (i=1 spf=pass spfdomain=netapp.com dkim=pass dkdomain=netapp.com dmarc=pass fromdomain=netapp.com); spf=pass (google.com: best guess record for domain of linux-nfs-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-nfs-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726312AbgCLUsY (ORCPT + 99 others); Thu, 12 Mar 2020 16:48:24 -0400 Received: from mail-mw2nam12on2071.outbound.protection.outlook.com ([40.107.244.71]:8019 "EHLO NAM12-MW2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726246AbgCLUsX (ORCPT ); Thu, 12 Mar 2020 16:48:23 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=nj0m2lvRtqbDgNKCrodcv4vLOyAJBUSUJgDGyaoSU0ICQ7QsqpFTOooOuZa8Vz5kwSlYbXtQ2srqt36WVd96YsZFjrwC+KKwf+F+kZnOkYL4qzejjk1gkgFeQUoFOod+F5eZS4NK76J9d38LSYNYlO0fZ4HnP6mh/lFvdcvbX30x7g+NbjqsQLM4IR6grwO6RVHlagY7PaiMBibsCDsD4too1yGuu9jOZqTFRGzSTCi3i2dOx7s3biVRM6YfPnfEE0+g8dqCBALSS8f/1EETSA6BYDYm0Z2g0VRUArLkSCjzKv1zolqlzXLX+TRqoDj8KnNbIMpHdc6kOIDlaLyRtA== 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=/1CWCF9xU1Ya9svImEabDTrImmc0EGgouXg5OeZ3g3w=; b=nSSajg2QsYNTvHBqBTdOb+VH4rIpKxwChAJTc1CjS3+KBMk3cwqSCZyZNZuUFqptE085I4FEGP20J9zzWjvJkTMBL8Y2pOaIAdnLupZPxxvgnC5so2Bc8em375h27xFBxARR6dQbjRujZWPZLXGzTlP+0EaQCiBDvPPOQWX768bDlgM3pp/Was3MiSnv0LQC1qC5eYPQkZNY1vosYWLImePLRVxondsUb/WcEawTPms1n/cnD5w2TfTKx6yTag0fvQfTiMCQLi3b5uuIzeW8R5N7a+nHcjrwPrUfAR/Uj/DFa8o3Dn9YkfpOHZbb1mnGbJ7YosiyoR0BUHK3KN821w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=netapp.com; dmarc=pass action=none header.from=netapp.com; dkim=pass header.d=netapp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=netapp.onmicrosoft.com; s=selector1-netapp-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=/1CWCF9xU1Ya9svImEabDTrImmc0EGgouXg5OeZ3g3w=; b=EyP/NVTYPsQikYwbNqDBptHPHVhR6f1OkPvVeVAGBJn/M6NWtqkmMBHiLm9aHa4VEIrkvicqoUIvorTeeb8mw4zFsfCTjJjBftis01Rh9fuBg0DqYnue+wVqdo7SBWJIzCwdCxH/hpay8MNYtb3EwfZP5nrPtdUR5nhmhrjWW/w= Received: from DM6PR06MB6617.namprd06.prod.outlook.com (2603:10b6:5:25f::14) by DM6PR06MB3977.namprd06.prod.outlook.com (2603:10b6:5:86::31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2814.14; Thu, 12 Mar 2020 20:48:15 +0000 Received: from DM6PR06MB6617.namprd06.prod.outlook.com ([fe80::f1d5:1417:3acd:c3be]) by DM6PR06MB6617.namprd06.prod.outlook.com ([fe80::f1d5:1417:3acd:c3be%6]) with mapi id 15.20.2793.018; Thu, 12 Mar 2020 20:48:15 +0000 From: "Schumaker, Anna" To: "fllinden@amazon.com" , "linux-nfs@vger.kernel.org" , "trond.myklebust@hammerspace.com" Subject: Re: [PATCH 13/13] NFSv4.2: add client side xattr caching. Thread-Topic: [PATCH 13/13] NFSv4.2: add client side xattr caching. Thread-Index: AQHV998o+HLVpHFjiUCUVog27Wj5Q6hFb1oA Date: Thu, 12 Mar 2020 20:48:15 +0000 Message-ID: <025746e3ad800440705f48b4ca81e973f96f9454.camel@netapp.com> References: <20200311195613.26108-1-fllinden@amazon.com> <20200311195613.26108-14-fllinden@amazon.com> In-Reply-To: <20200311195613.26108-14-fllinden@amazon.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Evolution 3.36.0 authentication-results: spf=none (sender IP is ) smtp.mailfrom=Anna.Schumaker@netapp.com; x-originating-ip: [68.42.68.242] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 9dcdce56-0aa3-4764-82c2-08d7c6c6b008 x-ms-traffictypediagnostic: DM6PR06MB3977: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:972; x-forefront-prvs: 0340850FCD x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(4636009)(39860400002)(376002)(346002)(366004)(136003)(396003)(199004)(6506007)(110136005)(6486002)(86362001)(316002)(186003)(6512007)(91956017)(66946007)(66476007)(66446008)(64756008)(66556008)(76116006)(2616005)(478600001)(8936002)(26005)(2906002)(30864003)(81166006)(81156014)(5660300002)(8676002)(36756003)(71200400001)(87944003)(559001)(579004);DIR:OUT;SFP:1101;SCL:1;SRVR:DM6PR06MB3977;H:DM6PR06MB6617.namprd06.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;A:1; received-spf: None (protection.outlook.com: netapp.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: SuF0f6pfLMPXfIjqzOG46Hp9DS5Fh1XEPBx/0q939AvZp8BVf4cvh2Cv7eqt8zQYcAzd/4pZR7hQ97FM4SimkQEOH1Cll5y6BEmIxpkKLRG01wu+ismrBVEwx4jLYESGDV3AdpAICHoSS+pz2BPXcQO7MmyLChaeAVg5DCiN279ao0MIj37L68mV+OPrYJuYQTx/WnUAB8LBaM+Q/FNH0fwXFhU1klfGHz2VVYOF+IpXFT5cL+QHiAFCZxBwzpnsMFMxNiWkVb1faUkl3Ljf24jZOW0ePp9KVjmCfEXxD6uLOtwY+ry8B8bCsiJoPH4nC7yi+0kBpTi0aP8iTntuDjdyyLVQUWDH6JElssjoTfPy9ODEfXtwuf1smI5JJSdwuA546fJ9PSrMVHpvNDvPJsoyK5oS7C3f8LjNuPnT/+XHlfFBgq9nORqJPll/s0dkb8WxtOE5Zfar0O2ROpJGw8wrd018WxBkKsMTQRruRnXEbL1b8AlGWFBegVfeBfWP x-ms-exchange-antispam-messagedata: 8X3jaJkz/I+UfC0v/UFkD9onDZugDULyy4hBbVIz1icDvEbO4A+CU7R4UaP7ookbm+OigyWAGnE5Hyq6apktpRrnRsITzkyjnCIdAXJ4Yp/SHDwNDecUd2O2cZ5r+fTxwtqYSqtER3o2KBkVbgfx7w== x-ms-exchange-transport-forked: True Content-Type: text/plain; charset="utf-8" Content-ID: <17D9EDC06CE02D46B8C2AE8F355F14F4@namprd06.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: netapp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9dcdce56-0aa3-4764-82c2-08d7c6c6b008 X-MS-Exchange-CrossTenant-originalarrivaltime: 12 Mar 2020 20:48:15.3474 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 4b0911a0-929b-4715-944b-c03745165b3a X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 8fWqyFBtcDqCiQHNGoUp8fFhUhfXplE35uya/9ZSsTL3ig6OFF+TGvTRX7YDEXuhvsNGXv0dWxCSGk2FUlmKjA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR06MB3977 Sender: linux-nfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org T24gV2VkLCAyMDIwLTAzLTExIGF0IDE5OjU2ICswMDAwLCBGcmFuayB2YW4gZGVyIExpbmRlbiB3 cm90ZToNCj4gSW1wbGVtZW50IGNsaWVudCBzaWRlIGNhY2hpbmcgZm9yIE5GU3Y0LjIgZXh0ZW5k ZWQgYXR0cmlidXRlcy4gVGhlIGNhY2hlDQo+IGlzIGEgcGVyLWlub2RlIGhhc2h0YWJsZSwgd2l0 aCBuYW1lL3ZhbHVlIGVudHJpZXMuIFRoZXJlIGlzIG9uZSBzcGVjaWFsDQo+IGVudHJ5IGZvciB0 aGUgbGlzdHhhdHRyIGNhY2hlLg0KPiANCj4gTkZTIGlub2RlcyBoYXZlIGEgcG9pbnRlciB0byBh IGNhY2hlIHN0cnVjdHVyZS4gVGhlIGNhY2hlIHN0cnVjdHVyZSBpcw0KPiBhbGxvY2F0ZWQgb24g ZGVtYW5kLCBmcmVlZCB3aGVuIHRoZSBjYWNoZSBpcyBpbnZhbGlkYXRlZC4NCj4gDQo+IE1lbW9y eSBzaHJpbmtlcnMga2VlcCB0aGUgc2l6ZSBpbiBjaGVjay4gTGFyZ2UgZW50cmllcyAoPiBQQUdF X1NJWkUpDQo+IGFyZSBjb2xsZWN0ZWQgYnkgYSBzZXBhcmF0ZSBzaHJpbmtlciwgYW5kIGZyZWVk IG1vcmUgYWdncmVzc2l2ZWx5DQo+IHRoYW4gb3RoZXJzLg0KPiANCj4gU2lnbmVkLW9mZi1ieTog RnJhbmsgdmFuIGRlciBMaW5kZW4gPGZsbGluZGVuQGFtYXpvbi5jb20+DQo+IC0tLQ0KPiAgZnMv bmZzL01ha2VmaWxlICAgICAgICAgICAgIHwgICAgMSArDQo+ICBmcy9uZnMvaW5vZGUuYyAgICAg ICAgICAgICAgfCAgICA5ICstDQo+ICBmcy9uZnMvaW50ZXJuYWwuaCAgICAgICAgICAgfCAgIDIw ICsNCj4gIGZzL25mcy9uZnM0MnByb2MuYyAgICAgICAgICB8ICAgMTIgKw0KPiAgZnMvbmZzL25m czQyeGF0dHIuYyAgICAgICAgIHwgMTA4Mw0KPiArKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrDQo+ICBmcy9uZnMvbmZzNHByb2MuYyAgICAgICAgICAgfCAgIDQyICst DQo+ICBmcy9uZnMvbmZzNHN1cGVyLmMgICAgICAgICAgfCAgIDEwICsNCj4gIGluY2x1ZGUvbGlu dXgvbmZzX2ZzLmggICAgICB8ICAgIDYgKw0KPiAgaW5jbHVkZS91YXBpL2xpbnV4L25mc19mcy5o IHwgICAgMSArDQo+ICA5IGZpbGVzIGNoYW5nZWQsIDExNzcgaW5zZXJ0aW9ucygrKSwgNyBkZWxl dGlvbnMoLSkNCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBmcy9uZnMvbmZzNDJ4YXR0ci5jDQo+IA0K PiBkaWZmIC0tZ2l0IGEvZnMvbmZzL01ha2VmaWxlIGIvZnMvbmZzL01ha2VmaWxlDQo+IGluZGV4 IDI0MzNjM2UwM2NmYS4uMTkxYjNlOWFhMjMyIDEwMDY0NA0KPiAtLS0gYS9mcy9uZnMvTWFrZWZp bGUNCj4gKysrIGIvZnMvbmZzL01ha2VmaWxlDQo+IEBAIC0zMSw2ICszMSw3IEBAIG5mc3Y0LSQo Q09ORklHX05GU19VU0VfTEVHQUNZX0ROUykgKz0gY2FjaGVfbGliLm8NCj4gIG5mc3Y0LSQoQ09O RklHX1NZU0NUTCkJKz0gbmZzNHN5c2N0bC5vDQo+ICBuZnN2NC0kKENPTkZJR19ORlNfVjRfMSkJ Kz0gcG5mcy5vIHBuZnNfZGV2Lm8gcG5mc19uZnMubw0KPiAgbmZzdjQtJChDT05GSUdfTkZTX1Y0 XzIpCSs9IG5mczQycHJvYy5vDQo+ICtuZnN2NC0kKENPTkZJR19ORlNfVjRfMikJKz0gbmZzNDJ4 YXR0ci5vDQoNCk9oLCB5b3Ugc2hvdWxkIGFsc28gYmUgYWJsZSB0byBjb21iaW5lIHRoZSB0d28g Q09ORklHX05GU19WNF8yIGxpbmVzIGhlcmU6DQogbmZzdjQtJChDT05GSUdfTkZTX1Y0XzIpCSs9 IG5mczQycHJvYy5vIG5mczQyeGF0dHIubw0KDQo+ICANCj4gIG9iai0kKENPTkZJR19QTkZTX0ZJ TEVfTEFZT1VUKSArPSBmaWxlbGF5b3V0Lw0KPiAgb2JqLSQoQ09ORklHX1BORlNfQkxPQ0spICs9 IGJsb2NrbGF5b3V0Lw0KPiBkaWZmIC0tZ2l0IGEvZnMvbmZzL2lub2RlLmMgYi9mcy9uZnMvaW5v ZGUuYw0KPiBpbmRleCBkMmJlMTUyNzk2ZWYuLjlkNDk1MmQyMzA2YiAxMDA2NDQNCj4gLS0tIGEv ZnMvbmZzL2lub2RlLmMNCj4gKysrIGIvZnMvbmZzL2lub2RlLmMNCj4gQEAgLTE5NCw2ICsxOTQs NyBAQCBib29sIG5mc19jaGVja19jYWNoZV9pbnZhbGlkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVu c2lnbmVkDQo+IGxvbmcgZmxhZ3MpDQo+ICANCj4gIAlyZXR1cm4gbmZzX2NoZWNrX2NhY2hlX2lu dmFsaWRfbm90X2RlbGVnYXRlZChpbm9kZSwgZmxhZ3MpOw0KPiAgfQ0KPiArRVhQT1JUX1NZTUJP TF9HUEwobmZzX2NoZWNrX2NhY2hlX2ludmFsaWQpOw0KPiAgDQo+ICBzdGF0aWMgdm9pZCBuZnNf c2V0X2NhY2hlX2ludmFsaWQoc3RydWN0IGlub2RlICppbm9kZSwgdW5zaWduZWQgbG9uZyBmbGFn cykNCj4gIHsNCj4gQEAgLTIzNSwxMSArMjM2LDEzIEBAIHN0YXRpYyB2b2lkIG5mc196YXBfY2Fj aGVzX2xvY2tlZChzdHJ1Y3QgaW5vZGUgKmlub2RlKQ0KPiAgCQkJCQl8IE5GU19JTk9fSU5WQUxJ RF9EQVRBDQo+ICAJCQkJCXwgTkZTX0lOT19JTlZBTElEX0FDQ0VTUw0KPiAgCQkJCQl8IE5GU19J Tk9fSU5WQUxJRF9BQ0wNCj4gKwkJCQkJfCBORlNfSU5PX0lOVkFMSURfWEFUVFINCj4gIAkJCQkJ fCBORlNfSU5PX1JFVkFMX1BBR0VDQUNIRSk7DQo+ICAJfSBlbHNlDQo+ICAJCW5mc19zZXRfY2Fj aGVfaW52YWxpZChpbm9kZSwgTkZTX0lOT19JTlZBTElEX0FUVFINCj4gIAkJCQkJfCBORlNfSU5P X0lOVkFMSURfQUNDRVNTDQo+ICAJCQkJCXwgTkZTX0lOT19JTlZBTElEX0FDTA0KPiArCQkJCQl8 IE5GU19JTk9fSU5WQUxJRF9YQVRUUg0KPiAgCQkJCQl8IE5GU19JTk9fUkVWQUxfUEFHRUNBQ0hF KTsNCj4gIAluZnNfemFwX2xhYmVsX2NhY2hlX2xvY2tlZChuZnNpKTsNCj4gIH0NCj4gQEAgLTE4 ODUsNyArMTg4OCw4IEBAIHN0YXRpYyBpbnQgbmZzX3VwZGF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUg Kmlub2RlLCBzdHJ1Y3QNCj4gbmZzX2ZhdHRyICpmYXR0cikNCj4gIAkJCWlmICghKGhhdmVfd3Jp dGVycyB8fCBoYXZlX2RlbGVnYXRpb24pKSB7DQo+ICAJCQkJaW52YWxpZCB8PSBORlNfSU5PX0lO VkFMSURfREFUQQ0KPiAgCQkJCQl8IE5GU19JTk9fSU5WQUxJRF9BQ0NFU1MNCj4gLQkJCQkJfCBO RlNfSU5PX0lOVkFMSURfQUNMOw0KPiArCQkJCQl8IE5GU19JTk9fSU5WQUxJRF9BQ0wNCj4gKwkJ CQkJfCBORlNfSU5PX0lOVkFMSURfWEFUVFI7DQo+ICAJCQkJLyogRm9yY2UgcmV2YWxpZGF0ZSBv ZiBhbGwgYXR0cmlidXRlcyAqLw0KPiAgCQkJCXNhdmVfY2FjaGVfdmFsaWRpdHkgfD0gTkZTX0lO T19JTlZBTElEX0NUSU1FDQo+ICAJCQkJCXwgTkZTX0lOT19JTlZBTElEX01USU1FDQo+IEBAIC0y MDg0LDYgKzIwODgsOSBAQCBzdHJ1Y3QgaW5vZGUgKm5mc19hbGxvY19pbm9kZShzdHJ1Y3Qgc3Vw ZXJfYmxvY2sgKnNiKQ0KPiAgI2lmIElTX0VOQUJMRUQoQ09ORklHX05GU19WNCkNCj4gIAluZnNp LT5uZnM0X2FjbCA9IE5VTEw7DQo+ICAjZW5kaWYgLyogQ09ORklHX05GU19WNCAqLw0KPiArI2lm ZGVmIENPTkZJR19ORlNfVjRfMg0KPiArCW5mc2ktPnhhdHRyX2NhY2hlID0gTlVMTDsNCj4gKyNl bmRpZg0KPiAgCXJldHVybiAmbmZzaS0+dmZzX2lub2RlOw0KPiAgfQ0KPiAgRVhQT1JUX1NZTUJP TF9HUEwobmZzX2FsbG9jX2lub2RlKTsNCj4gZGlmZiAtLWdpdCBhL2ZzL25mcy9pbnRlcm5hbC5o IGIvZnMvbmZzL2ludGVybmFsLmgNCj4gaW5kZXggMWUzYTdlMTE5YzkzLi42N2I4ZTRmN2M1NTQg MTAwNjQ0DQo+IC0tLSBhL2ZzL25mcy9pbnRlcm5hbC5oDQo+ICsrKyBiL2ZzL25mcy9pbnRlcm5h bC5oDQo+IEBAIC01NzUsNiArNTc1LDI2IEBAIGV4dGVybiB2b2lkIG5mczRfdGVzdF9zZXNzaW9u X3RydW5rKHN0cnVjdCBycGNfY2xudA0KPiAqY2xudCwNCj4gIAkJCQlzdHJ1Y3QgcnBjX3hwcnQg KnhwcnQsDQo+ICAJCQkJdm9pZCAqZGF0YSk7DQo+ICANCj4gKyNpZmRlZiBDT05GSUdfTkZTX1Y0 XzINCj4gK2V4dGVybiBpbnQgX19pbml0IG5mczRfeGF0dHJfY2FjaGVfaW5pdCh2b2lkKTsNCj4g K2V4dGVybiB2b2lkIG5mczRfeGF0dHJfY2FjaGVfZXhpdCh2b2lkKTsNCj4gK2V4dGVybiB2b2lk IG5mczRfeGF0dHJfY2FjaGVfYWRkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5h bWUsDQo+ICsJCQkJIGNvbnN0IGNoYXIgKmJ1Ziwgc3RydWN0IHBhZ2UgKipwYWdlcywNCj4gKwkJ CQkgc3NpemVfdCBidWZsZW4pOw0KPiArZXh0ZXJuIHZvaWQgbmZzNF94YXR0cl9jYWNoZV9yZW1v dmUoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSk7DQo+ICtleHRlcm4gc3Np emVfdCBuZnM0X3hhdHRyX2NhY2hlX2dldChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFy ICpuYW1lLA0KPiArCQkJCWNoYXIgKmJ1Ziwgc3NpemVfdCBidWZsZW4pOw0KPiArZXh0ZXJuIHZv aWQgbmZzNF94YXR0cl9jYWNoZV9zZXRfbGlzdChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBj aGFyICpidWYsDQo+ICsJCQkJICAgICAgc3NpemVfdCBidWZsZW4pOw0KPiArZXh0ZXJuIHNzaXpl X3QgbmZzNF94YXR0cl9jYWNoZV9saXN0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNoYXIgKmJ1ZiwN Cj4gKwkJCQkgICAgIHNzaXplX3QgYnVmbGVuKTsNCj4gK2V4dGVybiB2b2lkIG5mczRfeGF0dHJf Y2FjaGVfemFwKHN0cnVjdCBpbm9kZSAqaW5vZGUpOw0KPiArI2Vsc2UNCj4gK3N0YXRpYyBpbmxp bmUgdm9pZCBuZnM0X3hhdHRyX2NhY2hlX3phcChzdHJ1Y3QgaW5vZGUgKmlub2RlKQ0KPiArew0K PiArfQ0KPiArI2VuZGlmDQo+ICsNCj4gIHN0YXRpYyBpbmxpbmUgc3RydWN0IGlub2RlICpuZnNf aWdyYWJfYW5kX2FjdGl2ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQ0KPiAgew0KPiAgCWlub2RlID0g aWdyYWIoaW5vZGUpOw0KPiBkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczQycHJvYy5jIGIvZnMvbmZz L25mczQycHJvYy5jDQo+IGluZGV4IDhjMmU1MmJjOTg2YS4uZTIwMDUyMjQ2OWFmIDEwMDY0NA0K PiAtLS0gYS9mcy9uZnMvbmZzNDJwcm9jLmMNCj4gKysrIGIvZnMvbmZzL25mczQycHJvYy5jDQo+ IEBAIC0xMTgyLDYgKzExODIsMTggQEAgc3RhdGljIHNzaXplX3QgX25mczQyX3Byb2NfZ2V0eGF0 dHIoc3RydWN0IGlub2RlDQo+ICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwNCj4gIAlpZiAocmV0 IDwgMCkNCj4gIAkJcmV0dXJuIHJldDsNCj4gIA0KPiArCS8qDQo+ICsJICogTm9ybWFsbHksIHRo ZSBjYWNoaW5nIGlzIGRvbmUgb25lIGxheWVyIHVwLCBidXQgZm9yIHN1Y2Nlc3NmdWwNCj4gKwkg KiBSUENTLCBhbHdheXMgY2FjaGUgdGhlIHJlc3VsdCBoZXJlLCBldmVuIGlmIHRoZSBjYWxsZXIg d2FzDQo+ICsJICoganVzdCBxdWVyeWluZyB0aGUgbGVuZ3RoLCBvciBpZiB0aGUgcmVwbHkgd2Fz IHRvbyBiaWcgZm9yDQo+ICsJICogdGhlIGNhbGxlci4gVGhpcyBhdm9pZHMgYSBzZWNvbmQgUlBD IGluIHRoZSBjYXNlIG9mIHRoZQ0KPiArCSAqIGNvbW1vbiBxdWVyeS1hbGxvYy1yZXRyaWV2ZSBj eWNsZSBmb3IgeGF0dHJzLg0KPiArCSAqDQo+ICsJICogTm90ZSB0aGF0IHhhdHRyX2xlbiBpcyBh bHdheXMgY2FwcGVkIHRvIFhBVFRSX1NJWkVfTUFYLg0KPiArCSAqLw0KPiArDQo+ICsJbmZzNF94 YXR0cl9jYWNoZV9hZGQoaW5vZGUsIG5hbWUsIE5VTEwsIHBhZ2VzLCByZXMueGF0dHJfbGVuKTsN Cj4gKw0KPiAgCWlmIChidWZsZW4pIHsNCj4gIAkJaWYgKHJlcy54YXR0cl9sZW4gPiBidWZsZW4p DQo+ICAJCQlyZXR1cm4gLUVSQU5HRTsNCj4gZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnM0MnhhdHRy LmMgYi9mcy9uZnMvbmZzNDJ4YXR0ci5jDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4 IDAwMDAwMDAwMDAwMC4uMjNmZGFiOTc3YTJhDQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvZnMv bmZzL25mczQyeGF0dHIuYw0KPiBAQCAtMCwwICsxLDEwODMgQEANCj4gKy8vIFNQRFgtTGljZW5z ZS1JZGVudGlmaWVyOiBHUEwtMi4wDQo+ICsNCj4gKy8qDQo+ICsgKiBDb3B5cmlnaHQgMjAxOSwg MjAyMCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzDQo+IHJl c2VydmVkLg0KPiArICoNCj4gKyAqIFVzZXIgZXh0ZW5kZWQgYXR0cmlidXRlIGNsaWVudCBzaWRl IGNhY2hlIGZ1bmN0aW9ucy4NCj4gKyAqDQo+ICsgKiBBdXRob3I6IEZyYW5rIHZhbiBkZXIgTGlu ZGVuIDxmbGxpbmRlbkBhbWF6b24uY29tPg0KPiArICovDQo+ICsjaW5jbHVkZSA8bGludXgvZXJy bm8uaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9uZnNfZnMuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9o YXNodGFibGUuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9yZWZjb3VudC5oPg0KPiArI2luY2x1ZGUg PHVhcGkvbGludXgveGF0dHIuaD4NCj4gKw0KPiArI2luY2x1ZGUgIm5mczRfZnMuaCINCj4gKyNp bmNsdWRlICJpbnRlcm5hbC5oIg0KPiArDQo+ICsvKg0KPiArICogVXNlciBleHRlbmRlZCBhdHRy aWJ1dGVzIGNsaWVudCBzaWRlIGNhY2hpbmcgaXMgaW1wbGVtZW50ZWQgYnkgaGF2aW5nDQo+ICsg KiBhIGNhY2hlIHN0cnVjdHVyZSBhdHRhY2hlZCB0byBORlMgaW5vZGVzLiBUaGlzIHN0cnVjdHVy ZSBpcyBhbGxvY2F0ZWQNCj4gKyAqIHdoZW4gbmVlZGVkLCBhbmQgZnJlZWQgd2hlbiB0aGUgY2Fj aGUgaXMgemFwcGVkLg0KPiArICoNCj4gKyAqIFRoZSBjYWNoZSBzdHJ1Y3R1cmUgY29udGFpbnMg YXMgaGFzaCB0YWJsZSBvZiBlbnRyaWVzLCBhbmQgYSBwb2ludGVyDQo+ICsgKiB0byBhIHNwZWNp YWwtY2FzZWQgZW50cnkgZm9yIHRoZSBsaXN0eGF0dHIgY2FjaGUuDQo+ICsgKg0KPiArICogQWNj ZXNzaW5nIGFuZCBhbGxvY2F0aW5nIC8gZnJlZWluZyB0aGUgY2FjaGVzIGlzIGRvbmUgdmlhIHJl ZmVyZW5jZQ0KPiArICogY291bnRpbmcuIFRoZSBjYWNoZSBlbnRyaWVzIHVzZSBhIHNpbWlsYXIg cmVmY291bnRpbmcgc2NoZW1lLg0KPiArICoNCj4gKyAqIFRoaXMgbWFrZXMgZnJlZWluZyBhIGNh Y2hlLCBib3RoIGZyb20gdGhlIHNocmlua2VyIGFuZCBmcm9tIHRoZQ0KPiArICogemFwIGNhY2hl IHBhdGgsIGVhc3kuIEl0IGFsc28gbWVhbnMgdGhhdCwgaW4gY3VycmVudCB1c2UgY2FzZXMsDQo+ ICsgKiB0aGUgbGFyZ2UgbWFqb3JpdHkgb2YgaW5vZGVzIHdpbGwgbm90IHdhc3RlIGFueSBtZW1v cnksIGFzIHRoZXkNCj4gKyAqIHdpbGwgbmV2ZXIgaGF2ZSBhbnkgdXNlciBleHRlbmRlZCBhdHRy aWJ1dGVzIGFzc2lnbmVkIHRvIHRoZW0uDQo+ICsgKg0KPiArICogQXR0cmlidXRlIGVudHJpZXMg YXJlIGhhc2hlZCBpbiB0byBhIHNpbXBsZSBoYXNoIHRhYmxlLiBUaGV5IGFyZQ0KPiArICogYWxz byBwYXJ0IG9mIGFuIExSVS4NCj4gKyAqDQo+ICsgKiBUaGVyZSBhcmUgdGhyZWUgc2hyaW5rZXJz Lg0KPiArICoNCj4gKyAqIFR3byBzaHJpbmtlcnMgZGVhbCB3aXRoIHRoZSBjYWNoZSBlbnRyaWVz IHRoZW1zZWx2ZXM6IG9uZSBmb3INCj4gKyAqIGxhcmdlIGVudHJpZXMgKD4gUEFHRV9TSVpFKSwg YW5kIG9uZSBmb3Igc21hbGxlciBlbnRyaWVzLiBUaGUNCj4gKyAqIHNocmlua2VyIGZvciB0aGUg bGFyZ2VyIGVudHJpZXMgd29ya3MgbW9yZSBhZ2dyZXNzaXZlbHkgdGhhbg0KPiArICogdGhvc2Ug Zm9yIHRoZSBzbWFsbGVyIGVudHJpZXMuDQo+ICsgKg0KPiArICogVGhlIG90aGVyIHNocmlua2Vy IGZyZWVzIHRoZSBjYWNoZSBzdHJ1Y3R1cmVzIHRoZW1zZWx2ZXMuDQo+ICsgKi8NCj4gKw0KPiAr LyoNCj4gKyAqIDY0IGJ1Y2tldHMgaXMgYSBnb29kIGRlZmF1bHQuIFRoZXJlIGlzIGxpa2VseSBu byByZWFzb25hYmxlDQo+ICsgKiB3b3JrbG9hZCB0aGF0IHVzZXMgbW9yZSB0aGFuIGV2ZW4gNjQg dXNlciBleHRlbmRlZCBhdHRyaWJ1dGVzLg0KPiArICogWW91IGNhbiBjZXJ0YWlubHkgYWRkIGEg bG90IG1vcmUgLSBidXQgeW91IGdldCB3aGF0IHlvdSBhc2sgZm9yDQo+ICsgKiBpbiB0aG9zZSBj aXJjdW1zdGFuY2VzLg0KPiArICovDQo+ICsjZGVmaW5lIE5GUzRfWEFUVFJfSEFTSF9TSVpFCTY0 DQo+ICsNCj4gKyNkZWZpbmUgTkZTREJHX0ZBQ0lMSVRZCU5GU0RCR19YQVRUUkNBQ0hFDQo+ICsN Cj4gK3N0cnVjdCBuZnM0X3hhdHRyX2NhY2hlOw0KPiArc3RydWN0IG5mczRfeGF0dHJfZW50cnk7 DQo+ICsNCj4gK3N0cnVjdCBuZnM0X3hhdHRyX2J1Y2tldCB7DQo+ICsJc3BpbmxvY2tfdCBsb2Nr Ow0KPiArCXN0cnVjdCBobGlzdF9oZWFkIGhsaXN0Ow0KPiArCXN0cnVjdCBuZnM0X3hhdHRyX2Nh Y2hlICpjYWNoZTsNCj4gKwlib29sIGRyYWluaW5nOw0KPiArfTsNCj4gKw0KPiArc3RydWN0IG5m czRfeGF0dHJfY2FjaGUgew0KPiArCXN0cnVjdCBrcmVmIHJlZjsNCj4gKwlzcGlubG9ja190IGhh c2hfbG9jazsJLyogcHJvdGVjdHMgaGFzaHRhYmxlIGFuZCBscnUgKi8NCj4gKwlzdHJ1Y3QgbmZz NF94YXR0cl9idWNrZXQgYnVja2V0c1tORlM0X1hBVFRSX0hBU0hfU0laRV07DQo+ICsJc3RydWN0 IGxpc3RfaGVhZCBscnU7DQo+ICsJc3RydWN0IGxpc3RfaGVhZCBkaXNwb3NlOw0KPiArCWF0b21p Y19sb25nX3QgbmVudDsNCj4gKwlzcGlubG9ja190IGxpc3R4YXR0cl9sb2NrOw0KPiArCXN0cnVj dCBpbm9kZSAqaW5vZGU7DQo+ICsJc3RydWN0IG5mczRfeGF0dHJfZW50cnkgKmxpc3R4YXR0cjsN Cj4gKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsNCj4gK307DQo+ICsNCj4gK3N0cnVjdCBuZnM0 X3hhdHRyX2VudHJ5IHsNCj4gKwlzdHJ1Y3Qga3JlZiByZWY7DQo+ICsJc3RydWN0IGhsaXN0X25v ZGUgaG5vZGU7DQo+ICsJc3RydWN0IGxpc3RfaGVhZCBscnU7DQo+ICsJc3RydWN0IGxpc3RfaGVh ZCBkaXNwb3NlOw0KPiArCWNoYXIgKnhhdHRyX25hbWU7DQo+ICsJdm9pZCAqeGF0dHJfdmFsdWU7 DQo+ICsJc2l6ZV90IHhhdHRyX3NpemU7DQo+ICsJc3RydWN0IG5mczRfeGF0dHJfYnVja2V0ICpi dWNrZXQ7DQo+ICsJdWludDMyX3QgZmxhZ3M7DQo+ICt9Ow0KPiArDQo+ICsjZGVmaW5lCU5GUzRf WEFUVFJfRU5UUllfRVhUVkFMCTB4MDAwMQ0KPiArDQo+ICsvKg0KPiArICogTFJVIGxpc3Qgb2Yg TkZTIGlub2RlcyB0aGF0IGhhdmUgeGF0dHIgY2FjaGVzLg0KPiArICovDQo+ICtzdGF0aWMgc3Ry dWN0IGxpc3RfbHJ1IG5mczRfeGF0dHJfY2FjaGVfbHJ1Ow0KPiArc3RhdGljIHN0cnVjdCBsaXN0 X2xydSBuZnM0X3hhdHRyX2VudHJ5X2xydTsNCj4gK3N0YXRpYyBzdHJ1Y3QgbGlzdF9scnUgbmZz NF94YXR0cl9sYXJnZV9lbnRyeV9scnU7DQo+ICsNCj4gK3N0YXRpYyBzdHJ1Y3Qga21lbV9jYWNo ZSAqbmZzNF94YXR0cl9jYWNoZV9jYWNoZXA7DQo+ICsNCj4gK3N0YXRpYyBzdHJ1Y3Qgd29ya3F1 ZXVlX3N0cnVjdCAqbmZzNF94YXR0cl9jYWNoZV93cTsNCj4gKw0KPiArLyoNCj4gKyAqIEhhc2hp bmcgaGVscGVyIGZ1bmN0aW9ucy4NCj4gKyAqLw0KPiArc3RhdGljIHZvaWQNCj4gK25mczRfeGF0 dHJfaGFzaF9pbml0KHN0cnVjdCBuZnM0X3hhdHRyX2NhY2hlICpjYWNoZSkNCj4gK3sNCj4gKwl1 bnNpZ25lZCBpbnQgaTsNCj4gKw0KPiArCWZvciAoaSA9IDA7IGkgPCBORlM0X1hBVFRSX0hBU0hf U0laRTsgaSsrKSB7DQo+ICsJCUlOSVRfSExJU1RfSEVBRCgmY2FjaGUtPmJ1Y2tldHNbaV0uaGxp c3QpOw0KPiArCQlzcGluX2xvY2tfaW5pdCgmY2FjaGUtPmJ1Y2tldHNbaV0ubG9jayk7DQo+ICsJ CWNhY2hlLT5idWNrZXRzW2ldLmNhY2hlID0gY2FjaGU7DQo+ICsJCWNhY2hlLT5idWNrZXRzW2ld LmRyYWluaW5nID0gZmFsc2U7DQo+ICsJfQ0KPiArfQ0KPiArDQo+ICsvKg0KPiArICogTG9ja2lu ZyBvcmRlcjoNCj4gKyAqIDEuIGlub2RlIGlfbG9jayBvciBidWNrZXQgbG9jaw0KPiArICogMi4g bGlzdF9scnUgbG9jayAodGFrZW4gYnkgbGlzdF9scnVfKiBmdW5jdGlvbnMpDQo+ICsgKi8NCj4g Kw0KPiArLyoNCj4gKyAqIFdyYXBwZXIgZnVuY3Rpb25zIHRvIGFkZCBhIGNhY2hlIGVudHJ5IHRv IHRoZSByaWdodCBMUlUuDQo+ICsgKi8NCj4gK3N0YXRpYyBib29sDQo+ICtuZnM0X3hhdHRyX2Vu dHJ5X2xydV9hZGQoc3RydWN0IG5mczRfeGF0dHJfZW50cnkgKmVudHJ5KQ0KPiArew0KPiArCXN0 cnVjdCBsaXN0X2xydSAqbHJ1Ow0KPiArDQo+ICsJbHJ1ID0gKGVudHJ5LT5mbGFncyAmIE5GUzRf WEFUVFJfRU5UUllfRVhUVkFMKSA/DQo+ICsJICAgICZuZnM0X3hhdHRyX2xhcmdlX2VudHJ5X2xy dSA6ICZuZnM0X3hhdHRyX2VudHJ5X2xydTsNCj4gKw0KPiArCXJldHVybiBsaXN0X2xydV9hZGQo bHJ1LCAmZW50cnktPmxydSk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBib29sDQo+ICtuZnM0X3hh dHRyX2VudHJ5X2xydV9kZWwoc3RydWN0IG5mczRfeGF0dHJfZW50cnkgKmVudHJ5KQ0KPiArew0K PiArCXN0cnVjdCBsaXN0X2xydSAqbHJ1Ow0KPiArDQo+ICsJbHJ1ID0gKGVudHJ5LT5mbGFncyAm IE5GUzRfWEFUVFJfRU5UUllfRVhUVkFMKSA/DQo+ICsJICAgICZuZnM0X3hhdHRyX2xhcmdlX2Vu dHJ5X2xydSA6ICZuZnM0X3hhdHRyX2VudHJ5X2xydTsNCj4gKw0KPiArCXJldHVybiBsaXN0X2xy dV9kZWwobHJ1LCAmZW50cnktPmxydSk7DQo+ICt9DQo+ICsNCj4gKy8qDQo+ICsgKiBUaGlzIGZ1 bmN0aW9uIGFsbG9jYXRlcyBjYWNoZSBlbnRyaWVzLiBUaGV5IGFyZSB0aGUgbm9ybWFsDQo+ICsg KiBleHRlbmRlZCBhdHRyaWJ1dGUgbmFtZS92YWx1ZSBwYWlycywgYnV0IG1heSBhbHNvIGJlIGEg bGlzdHhhdHRyDQo+ICsgKiBjYWNoZS4gVGhvc2UgYWxsb2NhdGlvbnMgdXNlIHRoZSBzYW1lIGVu dHJ5IHNvIHRoYXQgdGhleSBjYW4gYmUNCj4gKyAqIHRyZWF0ZWQgYXMgb25lIGJ5IHRoZSBtZW1v cnkgc2hyaW5rZXIuDQo+ICsgKg0KPiArICogeGF0dHIgY2FjaGUgZW50cmllcyBhcmUgYWxsb2Nh dGVkIHRvZ2V0aGVyIHdpdGggbmFtZXMuIElmIHRoZQ0KPiArICogdmFsdWUgZml0cyBpbiB0byBv bmUgcGFnZSB3aXRoIHRoZSBlbnRyeSBzdHJ1Y3R1cmUgYW5kIHRoZSBuYW1lLA0KPiArICogaXQg d2lsbCBhbHNvIGJlIHBhcnQgb2YgdGhlIHNhbWUgYWxsb2NhdGlvbiAoa21hbGxvYykuIFRoaXMg aXMNCj4gKyAqIGV4cGVjdGVkIHRvIGJlIHRoZSB2YXN0IG1ham9yaXR5IG9mIGNhc2VzLiBMYXJn ZXIgYWxsb2NhdGlvbnMNCj4gKyAqIGhhdmUgYSB2YWx1ZSBwb2ludGVyIHRoYXQgaXMgYWxsb2Nh dGVkIHNlcGFyYXRlbHkgYnkga3ZtYWxsb2MuDQo+ICsgKg0KPiArICogUGFyYW1ldGVyczoNCj4g KyAqDQo+ICsgKiBAbmFtZTogIE5hbWUgb2YgdGhlIGV4dGVuZGVkIGF0dHJpYnV0ZS4gTlVMTCBm b3IgbGlzdHhhdHRyIGNhY2hlDQo+ICsgKiAgICAgICAgIGVudHJ5Lg0KPiArICogQHZhbHVlOiBW YWx1ZSBvZiBhdHRyaWJ1dGUsIG9yIGxpc3R4YXR0ciBjYWNoZS4gTlVMTCBpZiB0aGUNCj4gKyAq ICAgICAgICAgdmFsdWUgaXMgdG8gYmUgY29waWVkIGZyb20gcGFnZXMgaW5zdGVhZC4NCj4gKyAq IEBwYWdlczogUGFnZXMgdG8gY29weSB0aGUgdmFsdWUgZnJvbSwgaWYgbm90IE5VTEwuIFBhc3Nl ZCBpbiB0bw0KPiArICoJICAgbWFrZSBpdCBlYXNpZXIgdG8gY29weSB0aGUgdmFsdWUgYWZ0ZXIg YW4gUlBDLCBldmVuIGlmDQo+ICsgKgkgICB0aGUgdmFsdWUgd2lsbCBub3QgYmUgcGFzc2VkIHVw IHRvIGFwcGxpY2F0aW9uIChlLmcuDQo+ICsgKgkgICBmb3IgYSAncXVlcnknIGdldHhhdHRyIHdp dGggTlVMTCBidWZmZXIpLg0KPiArICogQGxlbjogICBMZW5ndGggb2YgdGhlIHZhbHVlLiBDYW4g YmUgMCBmb3IgemVyby1sZW5ndGggYXR0cmlidWVzLg0KPiArICogICAgICAgICBAdmFsdWUgYW5k IEBwYWdlcyB3aWxsIGJlIE5VTEwgaWYgQGxlbiBpcyAwLg0KPiArICovDQo+ICtzdGF0aWMgc3Ry dWN0IG5mczRfeGF0dHJfZW50cnkgKg0KPiArbmZzNF94YXR0cl9hbGxvY19lbnRyeShjb25zdCBj aGFyICpuYW1lLCBjb25zdCB2b2lkICp2YWx1ZSwNCj4gKwkJICAgICAgIHN0cnVjdCBwYWdlICoq cGFnZXMsIHNpemVfdCBsZW4pDQo+ICt7DQo+ICsJc3RydWN0IG5mczRfeGF0dHJfZW50cnkgKmVu dHJ5Ow0KPiArCXZvaWQgKnZhbHA7DQo+ICsJY2hhciAqbmFtZXA7DQo+ICsJc2l6ZV90IGFsbG9j bGVuLCBzbGVuOw0KPiArCWNoYXIgKmJ1ZjsNCj4gKwl1aW50MzJfdCBmbGFnczsNCj4gKw0KPiAr CUJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IG5mczRfeGF0dHJfZW50cnkpICsNCj4gKwkgICAg WEFUVFJfTkFNRV9NQVggKyAxID4gUEFHRV9TSVpFKTsNCj4gKw0KPiArCWFsbG9jbGVuID0gc2l6 ZW9mKHN0cnVjdCBuZnM0X3hhdHRyX2VudHJ5KTsNCj4gKwlpZiAobmFtZSAhPSBOVUxMKSB7DQo+ ICsJCXNsZW4gPSBzdHJsZW4obmFtZSkgKyAxOw0KPiArCQlhbGxvY2xlbiArPSBzbGVuOw0KPiAr CX0gZWxzZQ0KPiArCQlzbGVuID0gMDsNCj4gKw0KPiArCWlmIChhbGxvY2xlbiArIGxlbiA8PSBQ QUdFX1NJWkUpIHsNCj4gKwkJYWxsb2NsZW4gKz0gbGVuOw0KPiArCQlmbGFncyA9IDA7DQo+ICsJ fSBlbHNlIHsNCj4gKwkJZmxhZ3MgPSBORlM0X1hBVFRSX0VOVFJZX0VYVFZBTDsNCj4gKwl9DQo+ ICsNCj4gKwlidWYgPSBrbWFsbG9jKGFsbG9jbGVuLCBHRlBfS0VSTkVMX0FDQ09VTlQgfCBHRlBf Tk9GUyk7DQo+ICsJaWYgKGJ1ZiA9PSBOVUxMKQ0KPiArCQlyZXR1cm4gTlVMTDsNCj4gKwllbnRy eSA9IChzdHJ1Y3QgbmZzNF94YXR0cl9lbnRyeSAqKWJ1ZjsNCj4gKw0KPiArCWlmIChuYW1lICE9 IE5VTEwpIHsNCj4gKwkJbmFtZXAgPSBidWYgKyBzaXplb2Yoc3RydWN0IG5mczRfeGF0dHJfZW50 cnkpOw0KPiArCQltZW1jcHkobmFtZXAsIG5hbWUsIHNsZW4pOw0KPiArCX0gZWxzZSB7DQo+ICsJ CW5hbWVwID0gTlVMTDsNCj4gKwl9DQo+ICsNCj4gKw0KPiArCWlmIChmbGFncyAmIE5GUzRfWEFU VFJfRU5UUllfRVhUVkFMKSB7DQo+ICsJCXZhbHAgPSBrdm1hbGxvYyhsZW4sIEdGUF9LRVJORUxf QUNDT1VOVCB8IEdGUF9OT0ZTKTsNCj4gKwkJaWYgKHZhbHAgPT0gTlVMTCkgew0KPiArCQkJa2Zy ZWUoYnVmKTsNCj4gKwkJCXJldHVybiBOVUxMOw0KPiArCQl9DQo+ICsJfSBlbHNlIGlmIChsZW4g IT0gMCkgew0KPiArCQl2YWxwID0gYnVmICsgc2l6ZW9mKHN0cnVjdCBuZnM0X3hhdHRyX2VudHJ5 KSArIHNsZW47DQo+ICsJfSBlbHNlDQo+ICsJCXZhbHAgPSBOVUxMOw0KPiArDQo+ICsJaWYgKHZh bHAgIT0gTlVMTCkgew0KPiArCQlpZiAodmFsdWUgIT0gTlVMTCkNCj4gKwkJCW1lbWNweSh2YWxw LCB2YWx1ZSwgbGVuKTsNCj4gKwkJZWxzZQ0KPiArCQkJX2NvcHlfZnJvbV9wYWdlcyh2YWxwLCBw YWdlcywgMCwgbGVuKTsNCj4gKwl9DQo+ICsNCj4gKwllbnRyeS0+ZmxhZ3MgPSBmbGFnczsNCj4g KwllbnRyeS0+eGF0dHJfdmFsdWUgPSB2YWxwOw0KPiArCWtyZWZfaW5pdCgmZW50cnktPnJlZik7 DQo+ICsJZW50cnktPnhhdHRyX25hbWUgPSBuYW1lcDsNCj4gKwllbnRyeS0+eGF0dHJfc2l6ZSA9 IGxlbjsNCj4gKwllbnRyeS0+YnVja2V0ID0gTlVMTDsNCj4gKwlJTklUX0xJU1RfSEVBRCgmZW50 cnktPmxydSk7DQo+ICsJSU5JVF9MSVNUX0hFQUQoJmVudHJ5LT5kaXNwb3NlKTsNCj4gKwlJTklU X0hMSVNUX05PREUoJmVudHJ5LT5obm9kZSk7DQo+ICsNCj4gKwlyZXR1cm4gZW50cnk7DQo+ICt9 DQo+ICsNCj4gK3N0YXRpYyB2b2lkDQo+ICtuZnM0X3hhdHRyX2ZyZWVfZW50cnkoc3RydWN0IG5m czRfeGF0dHJfZW50cnkgKmVudHJ5KQ0KPiArew0KPiArCWlmIChlbnRyeS0+ZmxhZ3MgJiBORlM0 X1hBVFRSX0VOVFJZX0VYVFZBTCkNCj4gKwkJa3ZmcmVlKGVudHJ5LT54YXR0cl92YWx1ZSk7DQo+ ICsJa2ZyZWUoZW50cnkpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZA0KPiArbmZzNF94YXR0 cl9mcmVlX2VudHJ5X2NiKHN0cnVjdCBrcmVmICprcmVmKQ0KPiArew0KPiArCXN0cnVjdCBuZnM0 X3hhdHRyX2VudHJ5ICplbnRyeTsNCj4gKw0KPiArCWVudHJ5ID0gY29udGFpbmVyX29mKGtyZWYs IHN0cnVjdCBuZnM0X3hhdHRyX2VudHJ5LCByZWYpOw0KPiArDQo+ICsJaWYgKFdBUk5fT04oIWxp c3RfZW1wdHkoJmVudHJ5LT5scnUpKSkNCj4gKwkJcmV0dXJuOw0KPiArDQo+ICsJbmZzNF94YXR0 cl9mcmVlX2VudHJ5KGVudHJ5KTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQNCj4gK25mczRf eGF0dHJfZnJlZV9jYWNoZV9jYihzdHJ1Y3Qga3JlZiAqa3JlZikNCj4gK3sNCj4gKwlzdHJ1Y3Qg bmZzNF94YXR0cl9jYWNoZSAqY2FjaGU7DQo+ICsJaW50IGk7DQo+ICsNCj4gKwljYWNoZSA9IGNv bnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgbmZzNF94YXR0cl9jYWNoZSwgcmVmKTsNCj4gKw0KPiAr CWZvciAoaSA9IDA7IGkgPCBORlM0X1hBVFRSX0hBU0hfU0laRTsgaSsrKSB7DQo+ICsJCWlmIChX QVJOX09OKCFobGlzdF9lbXB0eSgmY2FjaGUtPmJ1Y2tldHNbaV0uaGxpc3QpKSkNCj4gKwkJCXJl dHVybjsNCj4gKwkJY2FjaGUtPmJ1Y2tldHNbaV0uZHJhaW5pbmcgPSBmYWxzZTsNCj4gKwl9DQo+ ICsNCj4gKwljYWNoZS0+bGlzdHhhdHRyID0gTlVMTDsNCj4gKw0KPiArCWttZW1fY2FjaGVfZnJl ZShuZnM0X3hhdHRyX2NhY2hlX2NhY2hlcCwgY2FjaGUpOw0KPiArDQo+ICt9DQo+ICsNCj4gK3N0 YXRpYyBzdHJ1Y3QgbmZzNF94YXR0cl9jYWNoZSAqDQo+ICtuZnM0X3hhdHRyX2FsbG9jX2NhY2hl KHZvaWQpDQo+ICt7DQo+ICsJc3RydWN0IG5mczRfeGF0dHJfY2FjaGUgKmNhY2hlOw0KPiArDQo+ ICsJY2FjaGUgPSBrbWVtX2NhY2hlX2FsbG9jKG5mczRfeGF0dHJfY2FjaGVfY2FjaGVwLA0KPiAr CSAgICBHRlBfS0VSTkVMX0FDQ09VTlQgfCBHRlBfTk9GUyk7DQo+ICsJaWYgKGNhY2hlID09IE5V TEwpDQo+ICsJCXJldHVybiBOVUxMOw0KPiArDQo+ICsJa3JlZl9pbml0KCZjYWNoZS0+cmVmKTsN Cj4gKwlhdG9taWNfbG9uZ19zZXQoJmNhY2hlLT5uZW50LCAwKTsNCj4gKw0KPiArCXJldHVybiBj YWNoZTsNCj4gK30NCj4gKw0KPiArLyoNCj4gKyAqIFNldCB0aGUgbGlzdHhhdHRyIGNhY2hlLCB3 aGljaCBpcyBhIHNwZWNpYWwtY2FzZWQgY2FjaGUgZW50cnkuDQo+ICsgKiBUaGUgc3BlY2lhbCB2 YWx1ZSBFUlJfUFRSKC1FU1RBTEUpIGlzIHVzZWQgdG8gaW5kaWNhdGUgdGhhdA0KPiArICogdGhl IGNhY2hlIGlzIGJlaW5nIGRyYWluZWQgLSB0aGlzIHByZXZlbnRzIGEgbmV3IGxpc3R4YXR0cg0K PiArICogY2FjaGUgZnJvbSBiZWluZyBhZGRlZCB0byB3aGF0IGlzIG5vdyBhIHN0YWxlIGNhY2hl Lg0KPiArICovDQo+ICtzdGF0aWMgaW50DQo+ICtuZnM0X3hhdHRyX3NldF9saXN0Y2FjaGUoc3Ry dWN0IG5mczRfeGF0dHJfY2FjaGUgKmNhY2hlLA0KPiArCQkJIHN0cnVjdCBuZnM0X3hhdHRyX2Vu dHJ5ICpuZXcpDQo+ICt7DQo+ICsJc3RydWN0IG5mczRfeGF0dHJfZW50cnkgKm9sZDsNCj4gKwlp bnQgcmV0ID0gMTsNCj4gKw0KPiArCXNwaW5fbG9jaygmY2FjaGUtPmxpc3R4YXR0cl9sb2NrKTsN Cj4gKw0KPiArCW9sZCA9IGNhY2hlLT5saXN0eGF0dHI7DQo+ICsNCj4gKwlpZiAob2xkID09IEVS Ul9QVFIoLUVTVEFMRSkpIHsNCj4gKwkJcmV0ID0gMDsNCj4gKwkJZ290byBvdXQ7DQo+ICsJfQ0K PiArDQo+ICsJY2FjaGUtPmxpc3R4YXR0ciA9IG5ldzsNCj4gKwlpZiAobmV3ICE9IE5VTEwgJiYg bmV3ICE9IEVSUl9QVFIoLUVTVEFMRSkpDQo+ICsJCW5mczRfeGF0dHJfZW50cnlfbHJ1X2FkZChu ZXcpOw0KPiArDQo+ICsJaWYgKG9sZCAhPSBOVUxMKSB7DQo+ICsJCW5mczRfeGF0dHJfZW50cnlf bHJ1X2RlbChvbGQpOw0KPiArCQlrcmVmX3B1dCgmb2xkLT5yZWYsIG5mczRfeGF0dHJfZnJlZV9l bnRyeV9jYik7DQo+ICsJfQ0KPiArb3V0Og0KPiArCXNwaW5fdW5sb2NrKCZjYWNoZS0+bGlzdHhh dHRyX2xvY2spOw0KPiArDQo+ICsJcmV0dXJuIHJldDsNCj4gK30NCj4gKw0KPiArLyoNCj4gKyAq IFVubGluayBhIGNhY2hlIGZyb20gaXRzIHBhcmVudCBpbm9kZSwgY2xlYXJpbmcgb3V0IGFuIGlu dmFsaWQNCj4gKyAqIGNhY2hlLiBNdXN0IGJlIGNhbGxlZCB3aXRoIGlfbG9jayBoZWxkLg0KPiAr ICovDQo+ICtzdGF0aWMgc3RydWN0IG5mczRfeGF0dHJfY2FjaGUgKg0KPiArbmZzNF94YXR0cl9j YWNoZV91bmxpbmsoc3RydWN0IGlub2RlICppbm9kZSkNCj4gK3sNCj4gKwlzdHJ1Y3QgbmZzX2lu b2RlICpuZnNpOw0KPiArCXN0cnVjdCBuZnM0X3hhdHRyX2NhY2hlICpvbGRjYWNoZTsNCj4gKw0K PiArCW5mc2kgPSBORlNfSShpbm9kZSk7DQo+ICsNCj4gKwlvbGRjYWNoZSA9IG5mc2ktPnhhdHRy X2NhY2hlOw0KPiArCWlmIChvbGRjYWNoZSAhPSBOVUxMKSB7DQo+ICsJCWxpc3RfbHJ1X2RlbCgm bmZzNF94YXR0cl9jYWNoZV9scnUsICZvbGRjYWNoZS0+bHJ1KTsNCj4gKwkJb2xkY2FjaGUtPmlu b2RlID0gTlVMTDsNCj4gKwl9DQo+ICsJbmZzaS0+eGF0dHJfY2FjaGUgPSBOVUxMOw0KPiArCW5m c2ktPmNhY2hlX3ZhbGlkaXR5ICY9IH5ORlNfSU5PX0lOVkFMSURfWEFUVFI7DQo+ICsNCj4gKwly ZXR1cm4gb2xkY2FjaGU7DQo+ICsNCj4gK30NCj4gKw0KPiArLyoNCj4gKyAqIERpc2NhcmQgYSBj YWNoZS4gVXN1YWxseSBjYWxsZWQgYnkgYSB3b3JrZXIsIHNpbmNlIHdhbGtpbmcgYWxsDQo+ICsg KiB0aGUgZW50cmllcyBjYW4gdGFrZSB1cCBzb21lIGN5Y2xlcyB0aGF0IHdlIGRvbid0IHdhbnQg dG8gd2FzdGUNCj4gKyAqIGluIHRoZSBJL08gcGF0aC4gQ2FuIGFsc28gYmUgY2FsbGVkIGZyb20g dGhlIHNocmlua2VyIGNhbGxiYWNrLg0KPiArICoNCj4gKyAqIFRoZSBjYWNoZSBpcyBkZWFkLCBp dCBoYXMgYWxyZWFkeSBiZWVuIHVubGlua2VkIGZyb20gaXRzIGlub2RlLA0KPiArICogYW5kIG5v IGxvbmdlciBhcHBlYXJzIG9uIHRoZSBjYWNoZSBMUlUgbGlzdC4NCj4gKyAqDQo+ICsgKiBNYXJr IGFsbCBidWNrZXRzIGFzIGRyYWluaW5nLCBzbyB0aGF0IG5vIG5ldyBlbnRyaWVzIGFyZSBhZGRl ZC4gVGhpcw0KPiArICogY291bGQgc3RpbGwgaGFwcGVuIGluIHRoZSB1bmxpa2VseSwgYnV0IHBv c3NpYmxlIGNhc2UgdGhhdCBhbm90aGVyDQo+ICsgKiB0aHJlYWQgaGFkIGdyYWJiZWQgYSByZWZl cmVuY2UgYmVmb3JlIGl0IHdhcyB1bmxpbmtlZCBmcm9tIHRoZSBpbm9kZSwNCj4gKyAqIGFuZCBp cyBzdGlsbCBob2xkaW5nIGl0IGZvciBhbiBhZGQgb3BlcmF0aW9uLg0KPiArICoNCj4gKyAqIFJl bW92ZSBhbGwgZW50cmllcyBmcm9tIHRoZSBMUlUgbGlzdHMsIHNvIHRoYXQgdGhlcmUgaXMgbm8g bG9uZ2VyDQo+ICsgKiBhbnkgd2F5IHRvICdmaW5kJyB0aGlzIGNhY2hlLiBUaGVuLCByZW1vdmUg dGhlIGVudHJpZXMgZnJvbSB0aGUgaGFzaA0KPiArICogdGFibGUuDQo+ICsgKg0KPiArICogQXQg dGhhdCBwb2ludCwgdGhlIGNhY2hlIHdpbGwgcmVtYWluIGVtcHR5IGFuZCBjYW4gYmUgZnJlZWQg d2hlbiB0aGUgZmluYWwNCj4gKyAqIHJlZmVyZW5jZSBkcm9wcywgd2hpY2ggaXMgdmVyeSBsaWtl bHkgdGhlIGtyZWZfcHV0IGF0IHRoZSBlbmQgb2YNCj4gKyAqIHRoaXMgZnVuY3Rpb24sIG9yIHRo ZSBvbmUgY2FsbGVkIGltbWVkaWF0ZWx5IGFmdGVyd2FyZHMgaW4gdGhlDQo+ICsgKiBzaHJpbmtl ciBjYWxsYmFjay4NCj4gKyAqLw0KPiArc3RhdGljIHZvaWQNCj4gK25mczRfeGF0dHJfZGlzY2Fy ZF9jYWNoZShzdHJ1Y3QgbmZzNF94YXR0cl9jYWNoZSAqY2FjaGUpDQo+ICt7DQo+ICsJdW5zaWdu ZWQgaW50IGk7DQo+ICsJc3RydWN0IG5mczRfeGF0dHJfZW50cnkgKmVudHJ5Ow0KPiArCXN0cnVj dCBuZnM0X3hhdHRyX2J1Y2tldCAqYnVja2V0Ow0KPiArCXN0cnVjdCBobGlzdF9ub2RlICpuOw0K PiArDQo+ICsJbmZzNF94YXR0cl9zZXRfbGlzdGNhY2hlKGNhY2hlLCBFUlJfUFRSKC1FU1RBTEUp KTsNCj4gKw0KPiArCWZvciAoaSA9IDA7IGkgPCBORlM0X1hBVFRSX0hBU0hfU0laRTsgaSsrKSB7 DQo+ICsJCWJ1Y2tldCA9ICZjYWNoZS0+YnVja2V0c1tpXTsNCj4gKw0KPiArCQlzcGluX2xvY2so JmJ1Y2tldC0+bG9jayk7DQo+ICsJCWJ1Y2tldC0+ZHJhaW5pbmcgPSB0cnVlOw0KPiArCQlobGlz dF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVudHJ5LCBuLCAmYnVja2V0LT5obGlzdCwgaG5vZGUpIHsN Cj4gKwkJCW5mczRfeGF0dHJfZW50cnlfbHJ1X2RlbChlbnRyeSk7DQo+ICsJCQlobGlzdF9kZWxf aW5pdCgmZW50cnktPmhub2RlKTsNCj4gKwkJCWtyZWZfcHV0KCZlbnRyeS0+cmVmLCBuZnM0X3hh dHRyX2ZyZWVfZW50cnlfY2IpOw0KPiArCQl9DQo+ICsJCXNwaW5fdW5sb2NrKCZidWNrZXQtPmxv Y2spOw0KPiArCX0NCj4gKw0KPiArCWF0b21pY19sb25nX3NldCgmY2FjaGUtPm5lbnQsIDApOw0K PiArDQo+ICsJa3JlZl9wdXQoJmNhY2hlLT5yZWYsIG5mczRfeGF0dHJfZnJlZV9jYWNoZV9jYik7 DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkDQo+ICtuZnM0X3hhdHRyX2Rpc2NhcmRfY2FjaGVf d29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykNCj4gK3sNCj4gKwlzdHJ1Y3QgbmZzNF94 YXR0cl9jYWNoZSAqY2FjaGUgPSBjb250YWluZXJfb2Yod29yaywNCj4gKwkgICAgc3RydWN0IG5m czRfeGF0dHJfY2FjaGUsIHdvcmspOw0KPiArDQo+ICsJbmZzNF94YXR0cl9kaXNjYXJkX2NhY2hl KGNhY2hlKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQNCj4gK25mczRfeGF0dHJfcmVhcF9j YWNoZShzdHJ1Y3QgbmZzNF94YXR0cl9jYWNoZSAqY2FjaGUpDQo+ICt7DQo+ICsJcXVldWVfd29y ayhuZnM0X3hhdHRyX2NhY2hlX3dxLCAmY2FjaGUtPndvcmspOw0KPiArfQ0KPiArDQo+ICsvKg0K PiArICogR2V0IGEgcmVmZXJlbmNlZCBjb3B5IG9mIHRoZSBjYWNoZSBzdHJ1Y3R1cmUuIEF2b2lk IGRvaW5nIGFsbG9jcw0KPiArICogd2hpbGUgaG9sZGluZyBpX2xvY2suIFdoaWNoIG1lYW5zIHRo YXQgd2UgZG8gc29tZSBvcHRpbWlzdGljIGFsbG9jYXRpb24sDQo+ICsgKiBhbmQgbWlnaHQgaGF2 ZSB0byBmcmVlIHRoZSByZXN1bHQgaW4gcmFyZSBjYXNlcy4NCj4gKyAqDQo+ICsgKiBUaGlzIGZ1 bmN0aW9uIG9ubHkgY2hlY2tzIHRoZSBORlNfSU5PX0lOVkFMSURfWEFUVFIgY2FjaGUgdmFsaWRp dHkgYml0DQo+ICsgKiBhbmQgYWN0cyBhY2NvcmRpbmdseSwgcmVwbGFjaW5nIHRoZSBjYWNoZSB3 aGVuIG5lZWRlZC4gRm9yIHRoZSByZWFkIGNhc2UNCj4gKyAqICghYWRkKSwgdGhpcyBtZWFucyB0 aGF0IHRoZSBjYWxsZXIgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGUgY2FjaGUNCj4gKyAqIGlzIHZh bGlkIGJlZm9yZSBjYWxpbmcgdGhpcyBmdW5jdGlvbi4gZ2V0eGF0dHIgYW5kIGxpc3R4YXR0ciBj YWxsDQo+ICsgKiByZXZhbGlkYXRlX2lub2RlIHRvIGRvIHRoaXMuIFRoZSBhdHRyaWJ1dGUgY2Fj aGUgdGltZW91dCAoZm9yIHRoZQ0KPiArICogbm9uLWRlbGVnYXRlZCBjYXNlKSBpcyBleHBlY3Rl ZCB0byBiZSBkZWFsdCB3aXRoIGluIHRoZSByZXZhbGlkYXRlDQo+ICsgKiBjYWxsLg0KPiArICov DQo+ICsNCj4gK3N0YXRpYyBzdHJ1Y3QgbmZzNF94YXR0cl9jYWNoZSAqDQo+ICtuZnM0X3hhdHRy X2dldF9jYWNoZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgYWRkKQ0KPiArew0KPiArCXN0cnVj dCBuZnNfaW5vZGUgKm5mc2k7DQo+ICsJc3RydWN0IG5mczRfeGF0dHJfY2FjaGUgKmNhY2hlLCAq b2xkY2FjaGUsICpuZXdjYWNoZTsNCj4gKw0KPiArCW5mc2kgPSBORlNfSShpbm9kZSk7DQo+ICsN Cj4gKwljYWNoZSA9IG9sZGNhY2hlID0gTlVMTDsNCj4gKw0KPiArCXNwaW5fbG9jaygmaW5vZGUt PmlfbG9jayk7DQo+ICsNCj4gKwlpZiAobmZzaS0+Y2FjaGVfdmFsaWRpdHkgJiBORlNfSU5PX0lO VkFMSURfWEFUVFIpDQo+ICsJCW9sZGNhY2hlID0gbmZzNF94YXR0cl9jYWNoZV91bmxpbmsoaW5v ZGUpOw0KPiArCWVsc2UNCj4gKwkJY2FjaGUgPSBuZnNpLT54YXR0cl9jYWNoZTsNCj4gKw0KPiAr CWlmIChjYWNoZSAhPSBOVUxMKQ0KPiArCQlrcmVmX2dldCgmY2FjaGUtPnJlZik7DQo+ICsNCj4g KwlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7DQo+ICsNCj4gKwlpZiAoYWRkICYmIGNhY2hl ID09IE5VTEwpIHsNCj4gKwkJbmV3Y2FjaGUgPSBOVUxMOw0KPiArDQo+ICsJCWNhY2hlID0gbmZz NF94YXR0cl9hbGxvY19jYWNoZSgpOw0KPiArCQlpZiAoY2FjaGUgPT0gTlVMTCkNCj4gKwkJCWdv dG8gb3V0Ow0KPiArDQo+ICsJCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7DQo+ICsJCWlmIChu ZnNpLT5jYWNoZV92YWxpZGl0eSAmIE5GU19JTk9fSU5WQUxJRF9YQVRUUikgew0KPiArCQkJLyoN Cj4gKwkJCSAqIFRoZSBjYWNoZSB3YXMgaW52YWxpZGF0ZWQgYWdhaW4uIEdpdmUgdXAsDQo+ICsJ CQkgKiBzaW5jZSB3aGF0IHdlIHdhbnQgdG8gZW50ZXIgaXMgbm93IGxpa2VseQ0KPiArCQkJICog b3V0ZGF0ZWQgYW55d2F5Lg0KPiArCQkJICovDQo+ICsJCQlzcGluX3VubG9jaygmaW5vZGUtPmlf bG9jayk7DQo+ICsJCQlrcmVmX3B1dCgmY2FjaGUtPnJlZiwgbmZzNF94YXR0cl9mcmVlX2NhY2hl X2NiKTsNCj4gKwkJCWNhY2hlID0gTlVMTDsNCj4gKwkJCWdvdG8gb3V0Ow0KPiArCQl9DQo+ICsN Cj4gKwkJLyoNCj4gKwkJICogQ2hlY2sgaWYgc29tZW9uZSBiZWF0IHVzIHRvIGl0Lg0KPiArCQkg Ki8NCj4gKwkJaWYgKG5mc2ktPnhhdHRyX2NhY2hlICE9IE5VTEwpIHsNCj4gKwkJCW5ld2NhY2hl ID0gbmZzaS0+eGF0dHJfY2FjaGU7DQo+ICsJCQlrcmVmX2dldCgmbmV3Y2FjaGUtPnJlZik7DQo+ ICsJCX0gZWxzZSB7DQo+ICsJCQlrcmVmX2dldCgmY2FjaGUtPnJlZik7DQo+ICsJCQluZnNpLT54 YXR0cl9jYWNoZSA9IGNhY2hlOw0KPiArCQkJY2FjaGUtPmlub2RlID0gaW5vZGU7DQo+ICsJCQls aXN0X2xydV9hZGQoJm5mczRfeGF0dHJfY2FjaGVfbHJ1LCAmY2FjaGUtPmxydSk7DQo+ICsJCX0N Cj4gKw0KPiArCQlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7DQo+ICsNCj4gKwkJLyoNCj4g KwkJICogSWYgdGhlcmUgd2FzIGEgcmFjZSwgdGhyb3cgYXdheSB0aGUgY2FjaGUgd2UganVzdA0K PiArCQkgKiBhbGxvY2F0ZWQsIGFuZCB1c2UgdGhlIG5ldyBvbmUgYWxsb2NhdGVkIGJ5IHNvbWVv bmUNCj4gKwkJICogZWxzZS4NCj4gKwkJICovDQo+ICsJCWlmIChuZXdjYWNoZSAhPSBOVUxMKSB7 DQo+ICsJCQlrcmVmX3B1dCgmY2FjaGUtPnJlZiwgbmZzNF94YXR0cl9mcmVlX2NhY2hlX2NiKTsN Cj4gKwkJCWNhY2hlID0gbmV3Y2FjaGU7DQo+ICsJCX0NCj4gKwl9DQo+ICsNCj4gK291dDoNCj4g KwkvKg0KPiArCSAqIERpc2NhcmRpbmcgYW4gb2xkIGNhY2hlIGlzIGRvbmUgdmlhIGEgd29ya3F1 ZXVlLg0KPiArCSAqLw0KPiArCWlmIChvbGRjYWNoZSAhPSBOVUxMKQ0KPiArCQluZnM0X3hhdHRy X3JlYXBfY2FjaGUob2xkY2FjaGUpOw0KPiArDQo+ICsJcmV0dXJuIGNhY2hlOw0KPiArfQ0KPiAr DQo+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCBuZnM0X3hhdHRyX2J1Y2tldCAqDQo+ICtuZnM0X3hh dHRyX2hhc2hfYnVja2V0KHN0cnVjdCBuZnM0X3hhdHRyX2NhY2hlICpjYWNoZSwgY29uc3QgY2hh ciAqbmFtZSkNCj4gK3sNCj4gKwlyZXR1cm4gJmNhY2hlLT5idWNrZXRzW2poYXNoKG5hbWUsIHN0 cmxlbihuYW1lKSwgMCkgJg0KPiArCSAgICAoQVJSQVlfU0laRShjYWNoZS0+YnVja2V0cykgLSAx KV07DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBzdHJ1Y3QgbmZzNF94YXR0cl9lbnRyeSAqDQo+ICtu ZnM0X3hhdHRyX2dldF9lbnRyeShzdHJ1Y3QgbmZzNF94YXR0cl9idWNrZXQgKmJ1Y2tldCwgY29u c3QgY2hhciAqbmFtZSkNCj4gK3sNCj4gKwlzdHJ1Y3QgbmZzNF94YXR0cl9lbnRyeSAqZW50cnk7 DQo+ICsNCj4gKwllbnRyeSA9IE5VTEw7DQo+ICsNCj4gKwlobGlzdF9mb3JfZWFjaF9lbnRyeShl bnRyeSwgJmJ1Y2tldC0+aGxpc3QsIGhub2RlKSB7DQo+ICsJCWlmICghc3RyY21wKGVudHJ5LT54 YXR0cl9uYW1lLCBuYW1lKSkNCj4gKwkJCWJyZWFrOw0KPiArCX0NCj4gKw0KPiArCXJldHVybiBl bnRyeTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludA0KPiArbmZzNF94YXR0cl9oYXNoX2FkZChz dHJ1Y3QgbmZzNF94YXR0cl9jYWNoZSAqY2FjaGUsDQo+ICsJCSAgICBzdHJ1Y3QgbmZzNF94YXR0 cl9lbnRyeSAqZW50cnkpDQo+ICt7DQo+ICsJc3RydWN0IG5mczRfeGF0dHJfYnVja2V0ICpidWNr ZXQ7DQo+ICsJc3RydWN0IG5mczRfeGF0dHJfZW50cnkgKm9sZGVudHJ5ID0gTlVMTDsNCj4gKwlp bnQgcmV0ID0gMTsNCj4gKw0KPiArCWJ1Y2tldCA9IG5mczRfeGF0dHJfaGFzaF9idWNrZXQoY2Fj aGUsIGVudHJ5LT54YXR0cl9uYW1lKTsNCj4gKwllbnRyeS0+YnVja2V0ID0gYnVja2V0Ow0KPiAr DQo+ICsJc3Bpbl9sb2NrKCZidWNrZXQtPmxvY2spOw0KPiArDQo+ICsJaWYgKGJ1Y2tldC0+ZHJh aW5pbmcpIHsNCj4gKwkJcmV0ID0gMDsNCj4gKwkJZ290byBvdXQ7DQo+ICsJfQ0KPiArDQo+ICsJ b2xkZW50cnkgPSBuZnM0X3hhdHRyX2dldF9lbnRyeShidWNrZXQsIGVudHJ5LT54YXR0cl9uYW1l KTsNCj4gKwlpZiAob2xkZW50cnkgIT0gTlVMTCkgew0KPiArCQlobGlzdF9kZWxfaW5pdCgmb2xk ZW50cnktPmhub2RlKTsNCj4gKwkJbmZzNF94YXR0cl9lbnRyeV9scnVfZGVsKG9sZGVudHJ5KTsN Cj4gKwl9IGVsc2Ugew0KPiArCQlhdG9taWNfbG9uZ19pbmMoJmNhY2hlLT5uZW50KTsNCj4gKwl9 DQo+ICsNCj4gKwlobGlzdF9hZGRfaGVhZCgmZW50cnktPmhub2RlLCAmYnVja2V0LT5obGlzdCk7 DQo+ICsJbmZzNF94YXR0cl9lbnRyeV9scnVfYWRkKGVudHJ5KTsNCj4gKw0KPiArb3V0Og0KPiAr CXNwaW5fdW5sb2NrKCZidWNrZXQtPmxvY2spOw0KPiArDQo+ICsJaWYgKG9sZGVudHJ5ICE9IE5V TEwpDQo+ICsJCWtyZWZfcHV0KCZvbGRlbnRyeS0+cmVmLCBuZnM0X3hhdHRyX2ZyZWVfZW50cnlf Y2IpOw0KPiArDQo+ICsJcmV0dXJuIHJldDsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQNCj4g K25mczRfeGF0dHJfaGFzaF9yZW1vdmUoc3RydWN0IG5mczRfeGF0dHJfY2FjaGUgKmNhY2hlLCBj b25zdCBjaGFyICpuYW1lKQ0KPiArew0KPiArCXN0cnVjdCBuZnM0X3hhdHRyX2J1Y2tldCAqYnVj a2V0Ow0KPiArCXN0cnVjdCBuZnM0X3hhdHRyX2VudHJ5ICplbnRyeTsNCj4gKw0KPiArCWJ1Y2tl dCA9IG5mczRfeGF0dHJfaGFzaF9idWNrZXQoY2FjaGUsIG5hbWUpOw0KPiArDQo+ICsJc3Bpbl9s b2NrKCZidWNrZXQtPmxvY2spOw0KPiArDQo+ICsJZW50cnkgPSBuZnM0X3hhdHRyX2dldF9lbnRy eShidWNrZXQsIG5hbWUpOw0KPiArCWlmIChlbnRyeSAhPSBOVUxMKSB7DQo+ICsJCWhsaXN0X2Rl bF9pbml0KCZlbnRyeS0+aG5vZGUpOw0KPiArCQluZnM0X3hhdHRyX2VudHJ5X2xydV9kZWwoZW50 cnkpOw0KPiArCQlhdG9taWNfbG9uZ19kZWMoJmNhY2hlLT5uZW50KTsNCj4gKwl9DQo+ICsNCj4g KwlzcGluX3VubG9jaygmYnVja2V0LT5sb2NrKTsNCj4gKw0KPiArCWlmIChlbnRyeSAhPSBOVUxM KQ0KPiArCQlrcmVmX3B1dCgmZW50cnktPnJlZiwgbmZzNF94YXR0cl9mcmVlX2VudHJ5X2NiKTsN Cj4gK30NCj4gKw0KPiArc3RhdGljIHN0cnVjdCBuZnM0X3hhdHRyX2VudHJ5ICoNCj4gK25mczRf eGF0dHJfaGFzaF9maW5kKHN0cnVjdCBuZnM0X3hhdHRyX2NhY2hlICpjYWNoZSwgY29uc3QgY2hh ciAqbmFtZSkNCj4gK3sNCj4gKwlzdHJ1Y3QgbmZzNF94YXR0cl9idWNrZXQgKmJ1Y2tldDsNCj4g KwlzdHJ1Y3QgbmZzNF94YXR0cl9lbnRyeSAqZW50cnk7DQo+ICsNCj4gKwlidWNrZXQgPSBuZnM0 X3hhdHRyX2hhc2hfYnVja2V0KGNhY2hlLCBuYW1lKTsNCj4gKw0KPiArCXNwaW5fbG9jaygmYnVj a2V0LT5sb2NrKTsNCj4gKw0KPiArCWVudHJ5ID0gbmZzNF94YXR0cl9nZXRfZW50cnkoYnVja2V0 LCBuYW1lKTsNCj4gKwlpZiAoZW50cnkgIT0gTlVMTCkNCj4gKwkJa3JlZl9nZXQoJmVudHJ5LT5y ZWYpOw0KPiArDQo+ICsJc3Bpbl91bmxvY2soJmJ1Y2tldC0+bG9jayk7DQo+ICsNCj4gKwlyZXR1 cm4gZW50cnk7DQo+ICt9DQo+ICsNCj4gKy8qDQo+ICsgKiBFbnRyeSBwb2ludCB0byByZXRyaWV2 ZSBhbiBlbnRyeSBmcm9tIHRoZSBjYWNoZS4NCj4gKyAqLw0KPiArc3NpemVfdCBuZnM0X3hhdHRy X2NhY2hlX2dldChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLCBjaGFyDQo+ ICpidWYsDQo+ICsJCQkgc3NpemVfdCBidWZsZW4pDQo+ICt7DQo+ICsJc3RydWN0IG5mczRfeGF0 dHJfY2FjaGUgKmNhY2hlOw0KPiArCXN0cnVjdCBuZnM0X3hhdHRyX2VudHJ5ICplbnRyeTsNCj4g Kwlzc2l6ZV90IHJldDsNCj4gKw0KPiArCWNhY2hlID0gbmZzNF94YXR0cl9nZXRfY2FjaGUoaW5v ZGUsIDApOw0KPiArCWlmIChjYWNoZSA9PSBOVUxMKQ0KPiArCQlyZXR1cm4gLUVOT0VOVDsNCj4g Kw0KPiArCXJldCA9IDA7DQo+ICsJZW50cnkgPSBuZnM0X3hhdHRyX2hhc2hfZmluZChjYWNoZSwg bmFtZSk7DQo+ICsNCj4gKwlpZiAoZW50cnkgIT0gTlVMTCkgew0KPiArCQlkcHJpbnRrKCIlczog Y2FjaGUgaGl0ICclcycsIGxlbiAlbHVcbiIsIF9fZnVuY19fLA0KPiArCQkgICAgZW50cnktPnhh dHRyX25hbWUsICh1bnNpZ25lZCBsb25nKWVudHJ5LT54YXR0cl9zaXplKTsNCj4gKwkJaWYgKGJ1 ZmxlbiA9PSAwKSB7DQo+ICsJCQkvKiBMZW5ndGggcHJvYmUgb25seSAqLw0KPiArCQkJcmV0ID0g ZW50cnktPnhhdHRyX3NpemU7DQo+ICsJCX0gZWxzZSBpZiAoYnVmbGVuIDwgZW50cnktPnhhdHRy X3NpemUpDQo+ICsJCQlyZXQgPSAtRVJBTkdFOw0KPiArCQllbHNlIHsNCj4gKwkJCW1lbWNweShi dWYsIGVudHJ5LT54YXR0cl92YWx1ZSwgZW50cnktPnhhdHRyX3NpemUpOw0KPiArCQkJcmV0ID0g ZW50cnktPnhhdHRyX3NpemU7DQo+ICsJCX0NCj4gKwkJa3JlZl9wdXQoJmVudHJ5LT5yZWYsIG5m czRfeGF0dHJfZnJlZV9lbnRyeV9jYik7DQo+ICsJfSBlbHNlIHsNCj4gKwkJZHByaW50aygiJXM6 IGNhY2hlIG1pc3MgJyVzJ1xuIiwgX19mdW5jX18sIG5hbWUpOw0KPiArCQlyZXQgPSAtRU5PRU5U Ow0KPiArCX0NCj4gKw0KPiArCWtyZWZfcHV0KCZjYWNoZS0+cmVmLCBuZnM0X3hhdHRyX2ZyZWVf Y2FjaGVfY2IpOw0KPiArDQo+ICsJcmV0dXJuIHJldDsNCj4gK30NCj4gKw0KPiArLyoNCj4gKyAq IFJldHJpZXZlIGEgY2FjaGVkIGxpc3Qgb2YgeGF0dHJzIGZyb20gdGhlIGNhY2hlLg0KPiArICov DQo+ICtzc2l6ZV90IG5mczRfeGF0dHJfY2FjaGVfbGlzdChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBj aGFyICpidWYsIHNzaXplX3QgYnVmbGVuKQ0KPiArew0KPiArCXN0cnVjdCBuZnM0X3hhdHRyX2Nh Y2hlICpjYWNoZTsNCj4gKwlzdHJ1Y3QgbmZzNF94YXR0cl9lbnRyeSAqZW50cnk7DQo+ICsJc3Np emVfdCByZXQ7DQo+ICsNCj4gKwljYWNoZSA9IG5mczRfeGF0dHJfZ2V0X2NhY2hlKGlub2RlLCAw KTsNCj4gKwlpZiAoY2FjaGUgPT0gTlVMTCkNCj4gKwkJcmV0dXJuIC1FTk9FTlQ7DQo+ICsNCj4g KwlzcGluX2xvY2soJmNhY2hlLT5saXN0eGF0dHJfbG9jayk7DQo+ICsNCj4gKwllbnRyeSA9IGNh Y2hlLT5saXN0eGF0dHI7DQo+ICsNCj4gKwlpZiAoZW50cnkgIT0gTlVMTCAmJiBlbnRyeSAhPSBF UlJfUFRSKC1FU1RBTEUpKSB7DQo+ICsJCWlmIChidWZsZW4gPT0gMCkgew0KPiArCQkJLyogTGVu Z3RoIHByb2JlIG9ubHkgKi8NCj4gKwkJCXJldCA9IGVudHJ5LT54YXR0cl9zaXplOw0KPiArCQl9 IGVsc2UgaWYgKGVudHJ5LT54YXR0cl9zaXplID4gYnVmbGVuKQ0KPiArCQkJcmV0ID0gLUVSQU5H RTsNCj4gKwkJZWxzZSB7DQo+ICsJCQltZW1jcHkoYnVmLCBlbnRyeS0+eGF0dHJfdmFsdWUsIGVu dHJ5LT54YXR0cl9zaXplKTsNCj4gKwkJCXJldCA9IGVudHJ5LT54YXR0cl9zaXplOw0KPiArCQl9 DQo+ICsJfSBlbHNlIHsNCj4gKwkJcmV0ID0gLUVOT0VOVDsNCj4gKwl9DQo+ICsNCj4gKwlzcGlu X3VubG9jaygmY2FjaGUtPmxpc3R4YXR0cl9sb2NrKTsNCj4gKw0KPiArCWtyZWZfcHV0KCZjYWNo ZS0+cmVmLCBuZnM0X3hhdHRyX2ZyZWVfY2FjaGVfY2IpOw0KPiArDQo+ICsJcmV0dXJuIHJldDsN Cj4gK30NCj4gKw0KPiArLyoNCj4gKyAqIEFkZCBhbiB4YXR0ciB0byB0aGUgY2FjaGUuDQo+ICsg Kg0KPiArICogVGhpcyBhbHNvIGludmFsaWRhdGVzIHRoZSB4YXR0ciBsaXN0IGNhY2hlLg0KPiAr ICovDQo+ICt2b2lkIG5mczRfeGF0dHJfY2FjaGVfYWRkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNv bnN0IGNoYXIgKm5hbWUsDQo+ICsJCQkgIGNvbnN0IGNoYXIgKmJ1Ziwgc3RydWN0IHBhZ2UgKipw YWdlcywgc3NpemVfdCBidWZsZW4pDQo+ICt7DQo+ICsJc3RydWN0IG5mczRfeGF0dHJfY2FjaGUg KmNhY2hlOw0KPiArCXN0cnVjdCBuZnM0X3hhdHRyX2VudHJ5ICplbnRyeTsNCj4gKw0KPiArCWRw cmludGsoIiVzOiBhZGQgJyVzJyBsZW4gJWx1XG4iLCBfX2Z1bmNfXywNCj4gKwkgICAgbmFtZSwg KHVuc2lnbmVkIGxvbmcpYnVmbGVuKTsNCj4gKw0KPiArCWNhY2hlID0gbmZzNF94YXR0cl9nZXRf Y2FjaGUoaW5vZGUsIDEpOw0KPiArCWlmIChjYWNoZSA9PSBOVUxMKQ0KPiArCQlyZXR1cm47DQo+ ICsNCj4gKwllbnRyeSA9IG5mczRfeGF0dHJfYWxsb2NfZW50cnkobmFtZSwgYnVmLCBwYWdlcywg YnVmbGVuKTsNCj4gKwlpZiAoZW50cnkgPT0gTlVMTCkNCj4gKwkJZ290byBvdXQ7DQo+ICsNCj4g Kwkodm9pZCluZnM0X3hhdHRyX3NldF9saXN0Y2FjaGUoY2FjaGUsIE5VTEwpOw0KPiArDQo+ICsJ aWYgKCFuZnM0X3hhdHRyX2hhc2hfYWRkKGNhY2hlLCBlbnRyeSkpDQo+ICsJCWtyZWZfcHV0KCZl bnRyeS0+cmVmLCBuZnM0X3hhdHRyX2ZyZWVfZW50cnlfY2IpOw0KPiArDQo+ICtvdXQ6DQo+ICsJ a3JlZl9wdXQoJmNhY2hlLT5yZWYsIG5mczRfeGF0dHJfZnJlZV9jYWNoZV9jYik7DQo+ICt9DQo+ ICsNCj4gKw0KPiArLyoNCj4gKyAqIFJlbW92ZSBhbiB4YXR0ciBmcm9tIHRoZSBjYWNoZS4NCj4g KyAqDQo+ICsgKiBUaGlzIGFsc28gaW52YWxpZGF0ZXMgdGhlIHhhdHRyIGxpc3QgY2FjaGUuDQo+ ICsgKi8NCj4gK3ZvaWQgbmZzNF94YXR0cl9jYWNoZV9yZW1vdmUoc3RydWN0IGlub2RlICppbm9k ZSwgY29uc3QgY2hhciAqbmFtZSkNCj4gK3sNCj4gKwlzdHJ1Y3QgbmZzNF94YXR0cl9jYWNoZSAq Y2FjaGU7DQo+ICsNCj4gKwlkcHJpbnRrKCIlczogcmVtb3ZlICclcydcbiIsIF9fZnVuY19fLCBu YW1lKTsNCj4gKw0KPiArCWNhY2hlID0gbmZzNF94YXR0cl9nZXRfY2FjaGUoaW5vZGUsIDApOw0K PiArCWlmIChjYWNoZSA9PSBOVUxMKQ0KPiArCQlyZXR1cm47DQo+ICsNCj4gKwkodm9pZCluZnM0 X3hhdHRyX3NldF9saXN0Y2FjaGUoY2FjaGUsIE5VTEwpOw0KPiArCW5mczRfeGF0dHJfaGFzaF9y ZW1vdmUoY2FjaGUsIG5hbWUpOw0KPiArDQo+ICsJa3JlZl9wdXQoJmNhY2hlLT5yZWYsIG5mczRf eGF0dHJfZnJlZV9jYWNoZV9jYik7DQo+ICt9DQo+ICsNCj4gKy8qDQo+ICsgKiBDYWNoZSBsaXN0 eGF0dHIgb3V0cHV0LCByZXBsYWNpbmcgYW55IHBvc3NpYmxlIG9sZCBvbmUuDQo+ICsgKi8NCj4g K3ZvaWQgbmZzNF94YXR0cl9jYWNoZV9zZXRfbGlzdChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25z dCBjaGFyICpidWYsDQo+ICsJCQkgICAgICAgc3NpemVfdCBidWZsZW4pDQo+ICt7DQo+ICsJc3Ry dWN0IG5mczRfeGF0dHJfY2FjaGUgKmNhY2hlOw0KPiArCXN0cnVjdCBuZnM0X3hhdHRyX2VudHJ5 ICplbnRyeTsNCj4gKw0KPiArCWNhY2hlID0gbmZzNF94YXR0cl9nZXRfY2FjaGUoaW5vZGUsIDEp Ow0KPiArCWlmIChjYWNoZSA9PSBOVUxMKQ0KPiArCQlyZXR1cm47DQo+ICsNCj4gKwllbnRyeSA9 IG5mczRfeGF0dHJfYWxsb2NfZW50cnkoTlVMTCwgYnVmLCBOVUxMLCBidWZsZW4pOw0KPiArCWlm IChlbnRyeSA9PSBOVUxMKQ0KPiArCQlnb3RvIG91dDsNCj4gKw0KPiArCS8qDQo+ICsJICogVGhp cyBpcyBqdXN0IHRoZXJlIHRvIGJlIGFibGUgdG8gZ2V0IHRvIGJ1Y2tldC0+Y2FjaGUsDQo+ICsJ ICogd2hpY2ggaXMgb2J2aW91c2x5IHRoZSBzYW1lIGZvciBhbGwgYnVja2V0cywgc28ganVzdA0K PiArCSAqIHVzZSBidWNrZXQgMC4NCj4gKwkgKi8NCj4gKwllbnRyeS0+YnVja2V0ID0gJmNhY2hl LT5idWNrZXRzWzBdOw0KPiArDQo+ICsJaWYgKCFuZnM0X3hhdHRyX3NldF9saXN0Y2FjaGUoY2Fj aGUsIGVudHJ5KSkNCj4gKwkJa3JlZl9wdXQoJmVudHJ5LT5yZWYsIG5mczRfeGF0dHJfZnJlZV9l bnRyeV9jYik7DQo+ICsNCj4gK291dDoNCj4gKwlrcmVmX3B1dCgmY2FjaGUtPnJlZiwgbmZzNF94 YXR0cl9mcmVlX2NhY2hlX2NiKTsNCj4gK30NCj4gKw0KPiArLyoNCj4gKyAqIFphcCB0aGUgZW50 aXJlIGNhY2hlLiBDYWxsZWQgd2hlbiBhbiBpbm9kZSBpcyBldmljdGVkLg0KPiArICovDQo+ICt2 b2lkIG5mczRfeGF0dHJfY2FjaGVfemFwKHN0cnVjdCBpbm9kZSAqaW5vZGUpDQo+ICt7DQo+ICsJ c3RydWN0IG5mczRfeGF0dHJfY2FjaGUgKm9sZGNhY2hlOw0KPiArDQo+ICsJc3Bpbl9sb2NrKCZp bm9kZS0+aV9sb2NrKTsNCj4gKwlvbGRjYWNoZSA9IG5mczRfeGF0dHJfY2FjaGVfdW5saW5rKGlu b2RlKTsNCj4gKwlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7DQo+ICsNCj4gKwlpZiAob2xk Y2FjaGUpDQo+ICsJCW5mczRfeGF0dHJfZGlzY2FyZF9jYWNoZShvbGRjYWNoZSk7DQo+ICt9DQo+ ICsNCj4gKy8qDQo+ICsgKiBUaGUgZW50cnkgTFJVIGlzIHNocnVuayBtb3JlIGFnZ3Jlc3NpdmVs eSB0aGFuIHRoZSBjYWNoZSBMUlUsDQo+ICsgKiBieSBzZXR0aW5ncyBAc2Vla3MgdG8gMS4NCj4g KyAqDQo+ICsgKiBDYWNoZSBzdHJ1Y3R1cmVzIGFyZSBmcmVlZCBvbmx5IHdoZW4gdGhleSd2ZSBi ZWNvbWUgZW1wdHksIGFmdGVyDQo+ICsgKiBwcnVuaW5nIGFsbCBidXQgb25lIGVudHJ5Lg0KPiAr ICovDQo+ICsNCj4gK3N0YXRpYyB1bnNpZ25lZCBsb25nIG5mczRfeGF0dHJfY2FjaGVfY291bnQo c3RydWN0IHNocmlua2VyICpzaHJpbmssDQo+ICsJCQkJCSAgICBzdHJ1Y3Qgc2hyaW5rX2NvbnRy b2wgKnNjKTsNCj4gK3N0YXRpYyB1bnNpZ25lZCBsb25nIG5mczRfeGF0dHJfZW50cnlfY291bnQo c3RydWN0IHNocmlua2VyICpzaHJpbmssDQo+ICsJCQkJCSAgICBzdHJ1Y3Qgc2hyaW5rX2NvbnRy b2wgKnNjKTsNCj4gK3N0YXRpYyB1bnNpZ25lZCBsb25nIG5mczRfeGF0dHJfY2FjaGVfc2Nhbihz dHJ1Y3Qgc2hyaW5rZXIgKnNocmluaywNCj4gKwkJCQkJICAgc3RydWN0IHNocmlua19jb250cm9s ICpzYyk7DQo+ICtzdGF0aWMgdW5zaWduZWQgbG9uZyBuZnM0X3hhdHRyX2VudHJ5X3NjYW4oc3Ry dWN0IHNocmlua2VyICpzaHJpbmssDQo+ICsJCQkJCSAgIHN0cnVjdCBzaHJpbmtfY29udHJvbCAq c2MpOw0KPiArDQo+ICtzdGF0aWMgc3RydWN0IHNocmlua2VyIG5mczRfeGF0dHJfY2FjaGVfc2hy aW5rZXIgPSB7DQo+ICsJLmNvdW50X29iamVjdHMJPSBuZnM0X3hhdHRyX2NhY2hlX2NvdW50LA0K PiArCS5zY2FuX29iamVjdHMJPSBuZnM0X3hhdHRyX2NhY2hlX3NjYW4sDQo+ICsJLnNlZWtzCQk9 IERFRkFVTFRfU0VFS1MsDQo+ICsJLmZsYWdzCQk9IFNIUklOS0VSX01FTUNHX0FXQVJFLA0KPiAr fTsNCj4gKw0KPiArc3RhdGljIHN0cnVjdCBzaHJpbmtlciBuZnM0X3hhdHRyX2VudHJ5X3Nocmlu a2VyID0gew0KPiArCS5jb3VudF9vYmplY3RzCT0gbmZzNF94YXR0cl9lbnRyeV9jb3VudCwNCj4g Kwkuc2Nhbl9vYmplY3RzCT0gbmZzNF94YXR0cl9lbnRyeV9zY2FuLA0KPiArCS5zZWVrcwkJPSBE RUZBVUxUX1NFRUtTLA0KPiArCS5iYXRjaAkJPSA1MTIsDQo+ICsJLmZsYWdzCQk9IFNIUklOS0VS X01FTUNHX0FXQVJFLA0KPiArfTsNCj4gKw0KPiArc3RhdGljIHN0cnVjdCBzaHJpbmtlciBuZnM0 X3hhdHRyX2xhcmdlX2VudHJ5X3Nocmlua2VyID0gew0KPiArCS5jb3VudF9vYmplY3RzCT0gbmZz NF94YXR0cl9lbnRyeV9jb3VudCwNCj4gKwkuc2Nhbl9vYmplY3RzCT0gbmZzNF94YXR0cl9lbnRy eV9zY2FuLA0KPiArCS5zZWVrcwkJPSAxLA0KPiArCS5iYXRjaAkJPSA1MTIsDQo+ICsJLmZsYWdz CQk9IFNIUklOS0VSX01FTUNHX0FXQVJFLA0KPiArfTsNCj4gKw0KPiArc3RhdGljIGVudW0gbHJ1 X3N0YXR1cw0KPiArY2FjaGVfbHJ1X2lzb2xhdGUoc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwNCj4g KwlzdHJ1Y3QgbGlzdF9scnVfb25lICpscnUsIHNwaW5sb2NrX3QgKmxydV9sb2NrLCB2b2lkICph cmcpDQo+ICt7DQo+ICsJc3RydWN0IGxpc3RfaGVhZCAqZGlzcG9zZSA9IGFyZzsNCj4gKwlzdHJ1 Y3QgaW5vZGUgKmlub2RlOw0KPiArCXN0cnVjdCBuZnM0X3hhdHRyX2NhY2hlICpjYWNoZSA9IGNv bnRhaW5lcl9vZihpdGVtLA0KPiArCSAgICBzdHJ1Y3QgbmZzNF94YXR0cl9jYWNoZSwgbHJ1KTsN Cj4gKw0KPiArCWlmIChhdG9taWNfbG9uZ19yZWFkKCZjYWNoZS0+bmVudCkgPiAxKQ0KPiArCQly ZXR1cm4gTFJVX1NLSVA7DQo+ICsNCj4gKwkvKg0KPiArCSAqIElmIGEgY2FjaGUgc3RydWN0dXJl IGlzIG9uIHRoZSBMUlUgbGlzdCwgd2Uga25vdyB0aGF0DQo+ICsJICogaXRzIGlub2RlIGlzIHZh bGlkLiBUcnkgdG8gbG9jayBpdCB0byBicmVhayB0aGUgbGluay4NCj4gKwkgKiBTaW5jZSB3ZSdy ZSBpbnZlcnRpbmcgdGhlIGxvY2sgb3JkZXIgaGVyZSwgb25seSB0cnkuDQo+ICsJICovDQo+ICsJ aW5vZGUgPSBjYWNoZS0+aW5vZGU7DQo+ICsNCj4gKwlpZiAoIXNwaW5fdHJ5bG9jaygmaW5vZGUt PmlfbG9jaykpDQo+ICsJCXJldHVybiBMUlVfU0tJUDsNCj4gKw0KPiArCWtyZWZfZ2V0KCZjYWNo ZS0+cmVmKTsNCj4gKw0KPiArCWNhY2hlLT5pbm9kZSA9IE5VTEw7DQo+ICsJTkZTX0koaW5vZGUp LT54YXR0cl9jYWNoZSA9IE5VTEw7DQo+ICsJTkZTX0koaW5vZGUpLT5jYWNoZV92YWxpZGl0eSAm PSB+TkZTX0lOT19JTlZBTElEX1hBVFRSOw0KPiArCWxpc3RfbHJ1X2lzb2xhdGUobHJ1LCAmY2Fj aGUtPmxydSk7DQo+ICsNCj4gKwlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7DQo+ICsNCj4g KwlsaXN0X2FkZF90YWlsKCZjYWNoZS0+ZGlzcG9zZSwgZGlzcG9zZSk7DQo+ICsJcmV0dXJuIExS VV9SRU1PVkVEOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdW5zaWduZWQgbG9uZw0KPiArbmZzNF94 YXR0cl9jYWNoZV9zY2FuKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLCBzdHJ1Y3Qgc2hyaW5rX2Nv bnRyb2wgKnNjKQ0KPiArew0KPiArCUxJU1RfSEVBRChkaXNwb3NlKTsNCj4gKwl1bnNpZ25lZCBs b25nIGZyZWVkOw0KPiArCXN0cnVjdCBuZnM0X3hhdHRyX2NhY2hlICpjYWNoZTsNCj4gKw0KPiAr CWZyZWVkID0gbGlzdF9scnVfc2hyaW5rX3dhbGsoJm5mczRfeGF0dHJfY2FjaGVfbHJ1LCBzYywN Cj4gKwkgICAgY2FjaGVfbHJ1X2lzb2xhdGUsICZkaXNwb3NlKTsNCj4gKwl3aGlsZSAoIWxpc3Rf ZW1wdHkoJmRpc3Bvc2UpKSB7DQo+ICsJCWNhY2hlID0gbGlzdF9maXJzdF9lbnRyeSgmZGlzcG9z ZSwgc3RydWN0IG5mczRfeGF0dHJfY2FjaGUsDQo+ICsJCSAgICBkaXNwb3NlKTsNCj4gKwkJbGlz dF9kZWxfaW5pdCgmY2FjaGUtPmRpc3Bvc2UpOw0KPiArCQluZnM0X3hhdHRyX2Rpc2NhcmRfY2Fj aGUoY2FjaGUpOw0KPiArCQlrcmVmX3B1dCgmY2FjaGUtPnJlZiwgbmZzNF94YXR0cl9mcmVlX2Nh Y2hlX2NiKTsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gZnJlZWQ7DQo+ICt9DQo+ICsNCj4gKw0K PiArc3RhdGljIHVuc2lnbmVkIGxvbmcNCj4gK25mczRfeGF0dHJfY2FjaGVfY291bnQoc3RydWN0 IHNocmlua2VyICpzaHJpbmssIHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpDQo+ICt7DQo+ICsJ dW5zaWduZWQgbG9uZyBjb3VudDsNCj4gKw0KPiArCWNvdW50ID0gbGlzdF9scnVfY291bnQoJm5m czRfeGF0dHJfY2FjaGVfbHJ1KTsNCj4gKwlyZXR1cm4gdmZzX3ByZXNzdXJlX3JhdGlvKGNvdW50 KTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGVudW0gbHJ1X3N0YXR1cw0KPiArZW50cnlfbHJ1X2lz b2xhdGUoc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwNCj4gKwlzdHJ1Y3QgbGlzdF9scnVfb25lICps cnUsIHNwaW5sb2NrX3QgKmxydV9sb2NrLCB2b2lkICphcmcpDQo+ICt7DQo+ICsJc3RydWN0IGxp c3RfaGVhZCAqZGlzcG9zZSA9IGFyZzsNCj4gKwlzdHJ1Y3QgbmZzNF94YXR0cl9idWNrZXQgKmJ1 Y2tldDsNCj4gKwlzdHJ1Y3QgbmZzNF94YXR0cl9jYWNoZSAqY2FjaGU7DQo+ICsJc3RydWN0IG5m czRfeGF0dHJfZW50cnkgKmVudHJ5ID0gY29udGFpbmVyX29mKGl0ZW0sDQo+ICsJICAgIHN0cnVj dCBuZnM0X3hhdHRyX2VudHJ5LCBscnUpOw0KPiArDQo+ICsJYnVja2V0ID0gZW50cnktPmJ1Y2tl dDsNCj4gKwljYWNoZSA9IGJ1Y2tldC0+Y2FjaGU7DQo+ICsNCj4gKwkvKg0KPiArCSAqIFVuaG9v ayB0aGUgZW50cnkgZnJvbSBpdHMgcGFyZW50IChlaXRoZXIgYSBjYWNoZSBidWNrZXQNCj4gKwkg KiBvciBhIGNhY2hlIHN0cnVjdHVyZSBpZiBpdCdzIGEgbGlzdHhhdHRyIGJ1ZiksIHNvIHRoYXQN Cj4gKwkgKiBpdCdzIG5vIGxvbmdlciBmb3VuZC4gVGhlbiBhZGQgaXQgdG8gdGhlIGlzb2xhdGUg bGlzdCwNCj4gKwkgKiB0byBiZSBmcmVlZCBsYXRlci4NCj4gKwkgKg0KPiArCSAqIEluIGJvdGgg Y2FzZXMsIHdlJ3JlIHJldmVydGluZyBsb2NrIG9yZGVyLCBzbyB1c2UNCj4gKwkgKiB0cnlsb2Nr IGFuZCBza2lwIHRoZSBlbnRyeSBpZiB3ZSBjYW4ndCBnZXQgdGhlIGxvY2suDQo+ICsJICovDQo+ ICsJaWYgKGVudHJ5LT54YXR0cl9uYW1lICE9IE5VTEwpIHsNCj4gKwkJLyogUmVndWxhciBjYWNo ZSBlbnRyeSAqLw0KPiArCQlpZiAoIXNwaW5fdHJ5bG9jaygmYnVja2V0LT5sb2NrKSkNCj4gKwkJ CXJldHVybiBMUlVfU0tJUDsNCj4gKw0KPiArCQlrcmVmX2dldCgmZW50cnktPnJlZik7DQo+ICsN Cj4gKwkJaGxpc3RfZGVsX2luaXQoJmVudHJ5LT5obm9kZSk7DQo+ICsJCWF0b21pY19sb25nX2Rl YygmY2FjaGUtPm5lbnQpOw0KPiArCQlsaXN0X2xydV9pc29sYXRlKGxydSwgJmVudHJ5LT5scnUp Ow0KPiArDQo+ICsJCXNwaW5fdW5sb2NrKCZidWNrZXQtPmxvY2spOw0KPiArCX0gZWxzZSB7DQo+ ICsJCS8qIExpc3R4YXR0ciBjYWNoZSBlbnRyeSAqLw0KPiArCQlpZiAoIXNwaW5fdHJ5bG9jaygm Y2FjaGUtPmxpc3R4YXR0cl9sb2NrKSkNCj4gKwkJCXJldHVybiBMUlVfU0tJUDsNCj4gKw0KPiAr CQlrcmVmX2dldCgmZW50cnktPnJlZik7DQo+ICsNCj4gKwkJY2FjaGUtPmxpc3R4YXR0ciA9IE5V TEw7DQo+ICsJCWxpc3RfbHJ1X2lzb2xhdGUobHJ1LCAmZW50cnktPmxydSk7DQo+ICsNCj4gKwkJ c3Bpbl91bmxvY2soJmNhY2hlLT5saXN0eGF0dHJfbG9jayk7DQo+ICsJfQ0KPiArDQo+ICsJbGlz dF9hZGRfdGFpbCgmZW50cnktPmRpc3Bvc2UsIGRpc3Bvc2UpOw0KPiArCXJldHVybiBMUlVfUkVN T1ZFRDsNCj4gK30NCj4gKw0KPiArc3RhdGljIHVuc2lnbmVkIGxvbmcNCj4gK25mczRfeGF0dHJf ZW50cnlfc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluaywgc3RydWN0IHNocmlua19jb250cm9s ICpzYykNCj4gK3sNCj4gKwlMSVNUX0hFQUQoZGlzcG9zZSk7DQo+ICsJdW5zaWduZWQgbG9uZyBm cmVlZDsNCj4gKwlzdHJ1Y3QgbmZzNF94YXR0cl9lbnRyeSAqZW50cnk7DQo+ICsJc3RydWN0IGxp c3RfbHJ1ICpscnU7DQo+ICsNCj4gKwlscnUgPSAoc2hyaW5rID09ICZuZnM0X3hhdHRyX2xhcmdl X2VudHJ5X3Nocmlua2VyKSA/DQo+ICsJICAgICZuZnM0X3hhdHRyX2xhcmdlX2VudHJ5X2xydSA6 ICZuZnM0X3hhdHRyX2VudHJ5X2xydTsNCj4gKw0KPiArCWZyZWVkID0gbGlzdF9scnVfc2hyaW5r X3dhbGsobHJ1LCBzYywgZW50cnlfbHJ1X2lzb2xhdGUsICZkaXNwb3NlKTsNCj4gKw0KPiArCXdo aWxlICghbGlzdF9lbXB0eSgmZGlzcG9zZSkpIHsNCj4gKwkJZW50cnkgPSBsaXN0X2ZpcnN0X2Vu dHJ5KCZkaXNwb3NlLCBzdHJ1Y3QgbmZzNF94YXR0cl9lbnRyeSwNCj4gKwkJICAgIGRpc3Bvc2Up Ow0KPiArCQlsaXN0X2RlbF9pbml0KCZlbnRyeS0+ZGlzcG9zZSk7DQo+ICsNCj4gKwkJLyoNCj4g KwkJICogRHJvcCB0d28gcmVmZXJlbmNlczogdGhlIG9uZSB0aGF0IHdlIGp1c3QgZ3JhYmJlZA0K PiArCQkgKiBpbiBlbnRyeV9scnVfaXNvbGF0ZSwgYW5kIHRoZSBvbmUgdGhhdCB3YXMgc2V0DQo+ ICsJCSAqIHdoZW4gdGhlIGVudHJ5IHdhcyBmaXJzdCBhbGxvY2F0ZWQuDQo+ICsJCSAqLw0KPiAr CQlrcmVmX3B1dCgmZW50cnktPnJlZiwgbmZzNF94YXR0cl9mcmVlX2VudHJ5X2NiKTsNCj4gKwkJ a3JlZl9wdXQoJmVudHJ5LT5yZWYsIG5mczRfeGF0dHJfZnJlZV9lbnRyeV9jYik7DQo+ICsJfQ0K PiArDQo+ICsJcmV0dXJuIGZyZWVkOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdW5zaWduZWQgbG9u Zw0KPiArbmZzNF94YXR0cl9lbnRyeV9jb3VudChzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluaywgc3Ry dWN0IHNocmlua19jb250cm9sICpzYykNCj4gK3sNCj4gKwl1bnNpZ25lZCBsb25nIGNvdW50Ow0K PiArCXN0cnVjdCBsaXN0X2xydSAqbHJ1Ow0KPiArDQo+ICsJbHJ1ID0gKHNocmluayA9PSAmbmZz NF94YXR0cl9sYXJnZV9lbnRyeV9zaHJpbmtlcikgPw0KPiArCSAgICAmbmZzNF94YXR0cl9sYXJn ZV9lbnRyeV9scnUgOiAmbmZzNF94YXR0cl9lbnRyeV9scnU7DQo+ICsNCj4gKwljb3VudCA9IGxp c3RfbHJ1X2NvdW50KGxydSk7DQo+ICsJcmV0dXJuIHZmc19wcmVzc3VyZV9yYXRpbyhjb3VudCk7 DQo+ICt9DQo+ICsNCj4gKw0KPiArc3RhdGljIHZvaWQgbmZzNF94YXR0cl9jYWNoZV9pbml0X29u Y2Uodm9pZCAqcCkNCj4gK3sNCj4gKwlzdHJ1Y3QgbmZzNF94YXR0cl9jYWNoZSAqY2FjaGUgPSAo c3RydWN0IG5mczRfeGF0dHJfY2FjaGUgKilwOw0KPiArDQo+ICsJc3Bpbl9sb2NrX2luaXQoJmNh Y2hlLT5saXN0eGF0dHJfbG9jayk7DQo+ICsJYXRvbWljX2xvbmdfc2V0KCZjYWNoZS0+bmVudCwg MCk7DQo+ICsJbmZzNF94YXR0cl9oYXNoX2luaXQoY2FjaGUpOw0KPiArCWNhY2hlLT5saXN0eGF0 dHIgPSBOVUxMOw0KPiArCUlOSVRfV09SSygmY2FjaGUtPndvcmssIG5mczRfeGF0dHJfZGlzY2Fy ZF9jYWNoZV93b3JrZXIpOw0KPiArCUlOSVRfTElTVF9IRUFEKCZjYWNoZS0+bHJ1KTsNCj4gKwlJ TklUX0xJU1RfSEVBRCgmY2FjaGUtPmRpc3Bvc2UpOw0KPiArfQ0KPiArDQo+ICtpbnQgX19pbml0 IG5mczRfeGF0dHJfY2FjaGVfaW5pdCh2b2lkKQ0KPiArew0KPiArCWludCByZXQgPSAwOw0KPiAr DQo+ICsJbmZzNF94YXR0cl9jYWNoZV9jYWNoZXAgPSBrbWVtX2NhY2hlX2NyZWF0ZSgibmZzNF94 YXR0cl9jYWNoZV9jYWNoZSIsDQo+ICsJICAgIHNpemVvZihzdHJ1Y3QgbmZzNF94YXR0cl9jYWNo ZSksIDAsDQo+ICsJICAgIChTTEFCX1JFQ0xBSU1fQUNDT1VOVHxTTEFCX01FTV9TUFJFQUR8U0xB Ql9BQ0NPVU5UKSwNCj4gKwkgICAgbmZzNF94YXR0cl9jYWNoZV9pbml0X29uY2UpOw0KPiArCWlm IChuZnM0X3hhdHRyX2NhY2hlX2NhY2hlcCA9PSBOVUxMKQ0KPiArCQlyZXR1cm4gLUVOT01FTTsN Cj4gKw0KPiArCXJldCA9IGxpc3RfbHJ1X2luaXRfbWVtY2coJm5mczRfeGF0dHJfbGFyZ2VfZW50 cnlfbHJ1LA0KPiArCSAgICAmbmZzNF94YXR0cl9sYXJnZV9lbnRyeV9zaHJpbmtlcik7DQo+ICsJ aWYgKHJldCkNCj4gKwkJZ290byBvdXQ0Ow0KPiArDQo+ICsJcmV0ID0gbGlzdF9scnVfaW5pdF9t ZW1jZygmbmZzNF94YXR0cl9lbnRyeV9scnUsDQo+ICsJICAgICZuZnM0X3hhdHRyX2VudHJ5X3No cmlua2VyKTsNCj4gKwlpZiAocmV0KQ0KPiArCQlnb3RvIG91dDM7DQo+ICsNCj4gKwlyZXQgPSBs aXN0X2xydV9pbml0X21lbWNnKCZuZnM0X3hhdHRyX2NhY2hlX2xydSwNCj4gKwkgICAgJm5mczRf eGF0dHJfY2FjaGVfc2hyaW5rZXIpOw0KPiArCWlmIChyZXQpDQo+ICsJCWdvdG8gb3V0MjsNCj4g Kw0KPiArCW5mczRfeGF0dHJfY2FjaGVfd3EgPSBhbGxvY193b3JrcXVldWUoIm5mczRfeGF0dHIi LCBXUV9NRU1fUkVDTEFJTSwgMCk7DQo+ICsJaWYgKG5mczRfeGF0dHJfY2FjaGVfd3EgPT0gTlVM TCkNCj4gKwkJZ290byBvdXQxOw0KPiArDQo+ICsJcmV0ID0gcmVnaXN0ZXJfc2hyaW5rZXIoJm5m czRfeGF0dHJfY2FjaGVfc2hyaW5rZXIpOw0KPiArCWlmIChyZXQpDQo+ICsJCWdvdG8gb3V0MDsN Cj4gKw0KPiArCXJldCA9IHJlZ2lzdGVyX3Nocmlua2VyKCZuZnM0X3hhdHRyX2VudHJ5X3Nocmlu a2VyKTsNCj4gKwlpZiAocmV0KQ0KPiArCQlnb3RvIG91dDsNCj4gKw0KPiArCXJldCA9IHJlZ2lz dGVyX3Nocmlua2VyKCZuZnM0X3hhdHRyX2xhcmdlX2VudHJ5X3Nocmlua2VyKTsNCj4gKwlpZiAo IXJldCkNCj4gKwkJcmV0dXJuIDA7DQo+ICsNCj4gKwl1bnJlZ2lzdGVyX3Nocmlua2VyKCZuZnM0 X3hhdHRyX2VudHJ5X3Nocmlua2VyKTsNCj4gK291dDoNCj4gKwl1bnJlZ2lzdGVyX3Nocmlua2Vy KCZuZnM0X3hhdHRyX2NhY2hlX3Nocmlua2VyKTsNCj4gK291dDA6DQo+ICsJZGVzdHJveV93b3Jr cXVldWUobmZzNF94YXR0cl9jYWNoZV93cSk7DQo+ICtvdXQxOg0KPiArCWxpc3RfbHJ1X2Rlc3Ry b3koJm5mczRfeGF0dHJfY2FjaGVfbHJ1KTsNCj4gK291dDI6DQo+ICsJbGlzdF9scnVfZGVzdHJv eSgmbmZzNF94YXR0cl9lbnRyeV9scnUpOw0KPiArb3V0MzoNCj4gKwlsaXN0X2xydV9kZXN0cm95 KCZuZnM0X3hhdHRyX2xhcmdlX2VudHJ5X2xydSk7DQo+ICtvdXQ0Og0KPiArCWttZW1fY2FjaGVf ZGVzdHJveShuZnM0X3hhdHRyX2NhY2hlX2NhY2hlcCk7DQo+ICsNCj4gKwlyZXR1cm4gcmV0Ow0K PiArfQ0KPiArDQo+ICt2b2lkIG5mczRfeGF0dHJfY2FjaGVfZXhpdCh2b2lkKQ0KPiArew0KPiAr CXVucmVnaXN0ZXJfc2hyaW5rZXIoJm5mczRfeGF0dHJfZW50cnlfc2hyaW5rZXIpOw0KPiArCXVu cmVnaXN0ZXJfc2hyaW5rZXIoJm5mczRfeGF0dHJfY2FjaGVfc2hyaW5rZXIpOw0KPiArCWxpc3Rf bHJ1X2Rlc3Ryb3koJm5mczRfeGF0dHJfZW50cnlfbHJ1KTsNCj4gKwlsaXN0X2xydV9kZXN0cm95 KCZuZnM0X3hhdHRyX2NhY2hlX2xydSk7DQo+ICsJa21lbV9jYWNoZV9kZXN0cm95KG5mczRfeGF0 dHJfY2FjaGVfY2FjaGVwKTsNCj4gKwlkZXN0cm95X3dvcmtxdWV1ZShuZnM0X3hhdHRyX2NhY2hl X3dxKTsNCj4gK30NCj4gZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnM0cHJvYy5jIGIvZnMvbmZzL25m czRwcm9jLmMNCj4gaW5kZXggNmRmOTQ4NTdmNWJiLi4wNzljMWFjODRjZWUgMTAwNjQ0DQo+IC0t LSBhL2ZzL25mcy9uZnM0cHJvYy5jDQo+ICsrKyBiL2ZzL25mcy9uZnM0cHJvYy5jDQo+IEBAIC03 NDU5LDYgKzc0NTksNyBAQCBzdGF0aWMgaW50IG5mczRfeGF0dHJfc2V0X25mczRfdXNlcihjb25z dCBzdHJ1Y3QNCj4geGF0dHJfaGFuZGxlciAqaGFuZGxlciwNCj4gIAkJCQkgICAgc2l6ZV90IGJ1 ZmxlbiwgaW50IGZsYWdzKQ0KPiAgew0KPiAgCXN0cnVjdCBuZnNfYWNjZXNzX2VudHJ5IGNhY2hl Ow0KPiArCWludCByZXQ7DQo+ICANCj4gIAlpZiAoIW5mc19zZXJ2ZXJfY2FwYWJsZShpbm9kZSwg TkZTX0NBUF9YQVRUUikpDQo+ICAJCXJldHVybiAtRU9QTk9UU1VQUDsNCj4gQEAgLTc0NzcsMTAg Kzc0NzgsMTcgQEAgc3RhdGljIGludCBuZnM0X3hhdHRyX3NldF9uZnM0X3VzZXIoY29uc3Qgc3Ry dWN0DQo+IHhhdHRyX2hhbmRsZXIgKmhhbmRsZXIsDQo+ICAJCQlyZXR1cm4gLUVBQ0NFUzsNCj4g IAl9DQo+ICANCj4gLQlpZiAoYnVmID09IE5VTEwpDQo+IC0JCXJldHVybiBuZnM0Ml9wcm9jX3Jl bW92ZXhhdHRyKGlub2RlLCBrZXkpOw0KPiAtCWVsc2UNCj4gLQkJcmV0dXJuIG5mczQyX3Byb2Nf c2V0eGF0dHIoaW5vZGUsIGtleSwgYnVmLCBidWZsZW4sIGZsYWdzKTsNCj4gKwlpZiAoYnVmID09 IE5VTEwpIHsNCj4gKwkJcmV0ID0gbmZzNDJfcHJvY19yZW1vdmV4YXR0cihpbm9kZSwga2V5KTsN Cj4gKwkJaWYgKCFyZXQpDQo+ICsJCQluZnM0X3hhdHRyX2NhY2hlX3JlbW92ZShpbm9kZSwga2V5 KTsNCj4gKwl9IGVsc2Ugew0KPiArCQlyZXQgPSBuZnM0Ml9wcm9jX3NldHhhdHRyKGlub2RlLCBr ZXksIGJ1ZiwgYnVmbGVuLCBmbGFncyk7DQo+ICsJCWlmICghcmV0KQ0KPiArCQkJbmZzNF94YXR0 cl9jYWNoZV9hZGQoaW5vZGUsIGtleSwgYnVmLCBOVUxMLCBidWZsZW4pOw0KPiArCX0NCj4gKw0K PiArCXJldHVybiByZXQ7DQo+ICB9DQo+ICANCj4gIHN0YXRpYyBpbnQgbmZzNF94YXR0cl9nZXRf bmZzNF91c2VyKGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICpoYW5kbGVyLA0KPiBAQCAtNzQ4 OCw2ICs3NDk2LDcgQEAgc3RhdGljIGludCBuZnM0X3hhdHRyX2dldF9uZnM0X3VzZXIoY29uc3Qg c3RydWN0DQo+IHhhdHRyX2hhbmRsZXIgKmhhbmRsZXIsDQo+ICAJCQkJICAgIGNvbnN0IGNoYXIg KmtleSwgdm9pZCAqYnVmLCBzaXplX3QgYnVmbGVuKQ0KPiAgew0KPiAgCXN0cnVjdCBuZnNfYWNj ZXNzX2VudHJ5IGNhY2hlOw0KPiArCXNzaXplX3QgcmV0Ow0KPiAgDQo+ICAJaWYgKCFuZnNfc2Vy dmVyX2NhcGFibGUoaW5vZGUsIE5GU19DQVBfWEFUVFIpKQ0KPiAgCQlyZXR1cm4gLUVPUE5PVFNV UFA7DQo+IEBAIC03NDk3LDcgKzc1MDYsMTcgQEAgc3RhdGljIGludCBuZnM0X3hhdHRyX2dldF9u ZnM0X3VzZXIoY29uc3Qgc3RydWN0DQo+IHhhdHRyX2hhbmRsZXIgKmhhbmRsZXIsDQo+ICAJCQly ZXR1cm4gLUVBQ0NFUzsNCj4gIAl9DQo+ICANCj4gLQlyZXR1cm4gbmZzNDJfcHJvY19nZXR4YXR0 cihpbm9kZSwga2V5LCBidWYsIGJ1Zmxlbik7DQo+ICsJcmV0ID0gbmZzX3JldmFsaWRhdGVfaW5v ZGUoTkZTX1NFUlZFUihpbm9kZSksIGlub2RlKTsNCj4gKwlpZiAocmV0KQ0KPiArCQlyZXR1cm4g cmV0Ow0KPiArDQo+ICsJcmV0ID0gbmZzNF94YXR0cl9jYWNoZV9nZXQoaW5vZGUsIGtleSwgYnVm LCBidWZsZW4pOw0KPiArCWlmIChyZXQgPj0gMCB8fCAocmV0IDwgMCAmJiByZXQgIT0gLUVOT0VO VCkpDQo+ICsJCXJldHVybiByZXQ7DQo+ICsNCj4gKwlyZXQgPSBuZnM0Ml9wcm9jX2dldHhhdHRy KGlub2RlLCBrZXksIGJ1ZiwgYnVmbGVuKTsNCj4gKw0KPiArCXJldHVybiByZXQ7DQo+ICB9DQo+ ICANCj4gIHN0YXRpYyBzc2l6ZV90DQo+IEBAIC03NTA1LDcgKzc1MjQsNyBAQCBuZnM0X2xpc3R4 YXR0cl9uZnM0X3VzZXIoc3RydWN0IGlub2RlICppbm9kZSwgY2hhcg0KPiAqbGlzdCwgc2l6ZV90 IGxpc3RfbGVuKQ0KPiAgew0KPiAgCXU2NCBjb29raWU7DQo+ICAJYm9vbCBlb2Y7DQo+IC0JaW50 IHJldCwgc2l6ZTsNCj4gKwlzc2l6ZV90IHJldCwgc2l6ZTsNCj4gIAljaGFyICpidWY7DQo+ICAJ c2l6ZV90IGJ1ZmxlbjsNCj4gIAlzdHJ1Y3QgbmZzX2FjY2Vzc19lbnRyeSBjYWNoZTsNCj4gQEAg LTc1MTgsNiArNzUzNywxNCBAQCBuZnM0X2xpc3R4YXR0cl9uZnM0X3VzZXIoc3RydWN0IGlub2Rl ICppbm9kZSwgY2hhcg0KPiAqbGlzdCwgc2l6ZV90IGxpc3RfbGVuKQ0KPiAgCQkJcmV0dXJuIDA7 DQo+ICAJfQ0KPiAgDQo+ICsJcmV0ID0gbmZzX3JldmFsaWRhdGVfaW5vZGUoTkZTX1NFUlZFUihp bm9kZSksIGlub2RlKTsNCj4gKwlpZiAocmV0KQ0KPiArCQlyZXR1cm4gcmV0Ow0KPiArDQo+ICsJ cmV0ID0gbmZzNF94YXR0cl9jYWNoZV9saXN0KGlub2RlLCBsaXN0LCBsaXN0X2xlbik7DQo+ICsJ aWYgKHJldCA+PSAwIHx8IChyZXQgPCAwICYmIHJldCAhPSAtRU5PRU5UKSkNCj4gKwkJcmV0dXJu IHJldDsNCj4gKw0KPiAgCWNvb2tpZSA9IDA7DQo+ICAJZW9mID0gZmFsc2U7DQo+ICAJYnVmbGVu ID0gbGlzdF9sZW4gPyBsaXN0X2xlbiA6IFhBVFRSX0xJU1RfTUFYOw0KPiBAQCAtNzUzNyw2ICs3 NTY0LDkgQEAgbmZzNF9saXN0eGF0dHJfbmZzNF91c2VyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNo YXINCj4gKmxpc3QsIHNpemVfdCBsaXN0X2xlbikNCj4gIAkJc2l6ZSArPSByZXQ7DQo+ICAJfQ0K PiAgDQo+ICsJaWYgKGxpc3RfbGVuKQ0KPiArCQluZnM0X3hhdHRyX2NhY2hlX3NldF9saXN0KGlu b2RlLCBsaXN0LCBzaXplKTsNCj4gKw0KPiAgCXJldHVybiBzaXplOw0KPiAgfQ0KPiAgDQo+IGRp ZmYgLS1naXQgYS9mcy9uZnMvbmZzNHN1cGVyLmMgYi9mcy9uZnMvbmZzNHN1cGVyLmMNCj4gaW5k ZXggMTQ3NWY5MzJkN2RhLi4wYzFhYjg0NmI4M2QgMTAwNjQ0DQo+IC0tLSBhL2ZzL25mcy9uZnM0 c3VwZXIuYw0KPiArKysgYi9mcy9uZnMvbmZzNHN1cGVyLmMNCj4gQEAgLTY5LDYgKzY5LDcgQEAg c3RhdGljIHZvaWQgbmZzNF9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQ0KPiAgCXBu ZnNfZGVzdHJveV9sYXlvdXQoTkZTX0koaW5vZGUpKTsNCj4gIAkvKiBGaXJzdCBjYWxsIHN0YW5k YXJkIE5GUyBjbGVhcl9pbm9kZSgpIGNvZGUgKi8NCj4gIAluZnNfY2xlYXJfaW5vZGUoaW5vZGUp Ow0KPiArCW5mczRfeGF0dHJfY2FjaGVfemFwKGlub2RlKTsNCj4gIH0NCj4gIA0KPiAgc3RydWN0 IG5mc19yZWZlcnJhbF9jb3VudCB7DQo+IEBAIC0yNjgsNiArMjY5LDEyIEBAIHN0YXRpYyBpbnQg X19pbml0IGluaXRfbmZzX3Y0KHZvaWQpDQo+ICAJaWYgKGVycikNCj4gIAkJZ290byBvdXQxOw0K PiAgDQo+ICsjaWZkZWYgQ09ORklHX05GU19WNF8yDQo+ICsJZXJyID0gbmZzNF94YXR0cl9jYWNo ZV9pbml0KCk7DQo+ICsJaWYgKGVycikNCj4gKwkJZ290byBvdXQyOw0KPiArI2VuZGlmDQo+ICsN Cj4gIAllcnIgPSBuZnM0X3JlZ2lzdGVyX3N5c2N0bCgpOw0KPiAgCWlmIChlcnIpDQo+ICAJCWdv dG8gb3V0MjsNCj4gQEAgLTI4OCw2ICsyOTUsOSBAQCBzdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9u ZnNfdjQodm9pZCkNCj4gIAluZnM0X3BuZnNfdjNfZHNfY29ubmVjdF91bmxvYWQoKTsNCj4gIA0K PiAgCXVucmVnaXN0ZXJfbmZzX3ZlcnNpb24oJm5mc192NCk7DQo+ICsjaWZkZWYgQ09ORklHX05G U19WNF8yDQo+ICsJbmZzNF94YXR0cl9jYWNoZV9leGl0KCk7DQo+ICsjZW5kaWYNCj4gIAluZnM0 X3VucmVnaXN0ZXJfc3lzY3RsKCk7DQo+ICAJbmZzX2lkbWFwX3F1aXQoKTsNCj4gIAluZnNfZG5z X3Jlc29sdmVyX2Rlc3Ryb3koKTsNCj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmZzX2Zz LmggYi9pbmNsdWRlL2xpbnV4L25mc19mcy5oDQo+IGluZGV4IDFmY2ZlZjY3MGE0YS4uYzA4Y2My MmQ5YzMyIDEwMDY0NA0KPiAtLS0gYS9pbmNsdWRlL2xpbnV4L25mc19mcy5oDQo+ICsrKyBiL2lu Y2x1ZGUvbGludXgvbmZzX2ZzLmgNCj4gQEAgLTEwMiw2ICsxMDIsOCBAQCBzdHJ1Y3QgbmZzX2Rl bGVnYXRpb247DQo+ICANCj4gIHN0cnVjdCBwb3NpeF9hY2w7DQo+ICANCj4gK3N0cnVjdCBuZnM0 X3hhdHRyX2NhY2hlOw0KPiArDQo+ICAvKg0KPiAgICogbmZzIGZzIGlub2RlIGRhdGEgaW4gbWVt b3J5DQo+ICAgKi8NCj4gQEAgLTE4OCw2ICsxOTAsMTAgQEAgc3RydWN0IG5mc19pbm9kZSB7DQo+ ICAJc3RydWN0IGZzY2FjaGVfY29va2llCSpmc2NhY2hlOw0KPiAgI2VuZGlmDQo+ICAJc3RydWN0 IGlub2RlCQl2ZnNfaW5vZGU7DQo+ICsNCj4gKyNpZmRlZiBDT05GSUdfTkZTX1Y0XzINCj4gKwlz dHJ1Y3QgbmZzNF94YXR0cl9jYWNoZSAqeGF0dHJfY2FjaGU7DQo+ICsjZW5kaWYNCj4gIH07DQo+ ICANCj4gIHN0cnVjdCBuZnM0X2NvcHlfc3RhdGUgew0KPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS91 YXBpL2xpbnV4L25mc19mcy5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L25mc19mcy5oDQo+IGluZGV4 IDdiY2M4Y2Q2ODMxZC4uM2FmZTM3NjdjNTVkIDEwMDY0NA0KPiAtLS0gYS9pbmNsdWRlL3VhcGkv bGludXgvbmZzX2ZzLmgNCj4gKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L25mc19mcy5oDQo+IEBA IC01Niw2ICs1Niw3IEBADQo+ICAjZGVmaW5lIE5GU0RCR19QTkZTCQkweDEwMDANCj4gICNkZWZp bmUgTkZTREJHX1BORlNfTEQJCTB4MjAwMA0KPiAgI2RlZmluZSBORlNEQkdfU1RBVEUJCTB4NDAw MA0KPiArI2RlZmluZSBORlNEQkdfWEFUVFJDQUNIRQkweDgwMDANCj4gICNkZWZpbmUgTkZTREJH X0FMTAkJMHhGRkZGDQo+ICANCj4gIA0K