From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from SA9PR02CU001.outbound.protection.outlook.com (mail-southcentralusazon11013008.outbound.protection.outlook.com [40.93.196.8]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0F2121D7E41 for ; Tue, 17 Mar 2026 16:31:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.196.8 ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773765111; cv=fail; b=C0DCh6no9kBZW9ddigSRNSCW/nXeaAhkkoeCla367y2jja6jwFqnh0CLK5NBexktuvNhVuOUGU8/V6Xjrpzhdbv2tFsjc6YVnb+eTh1QLQyHXliLaPWQs62bjV1u9f8YTikJLc91kK6mot1rnRX8QmA/llBL4fuNminfcatQDOQ= ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773765111; c=relaxed/simple; bh=KM44vxo39Tl39yfzHKnzeDclnlssl9AgtDyWFM9VzA4=; h=From:To:CC:Subject:Date:Message-ID:References:In-Reply-To: Content-Type:MIME-Version; b=NdwYcA4D2Dz3pGaW0g1b0+oFMOgIUWJEbJwKTAIhcRXg/XP3dCfwvhqRIdox4glVJlJHFSTw3G7b1xKs2/aSBOYeaHpaGzx46Ca+HAdAORxNf0tSm4JjuFssHoRenl8Z8RuqS3FG1jpGm7CGbA5beaxWVCQkGygSGLXUG3uewOo= ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=hugY9vxs; arc=fail smtp.client-ip=40.93.196.8 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="hugY9vxs" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=HNm/Wo1896wcyuIXA+FadprRUffAvxfT1zUXppBxTfGIP8gigqSjJXRemKM8RxSzjOWqy6Pnx7RKFksjmL6D8a9hylp2OcBt5xcFOyC65o7M+b0XPOOITPAqNtPj5HPtFVFtff9VWAHvuhhPGMD9C8y9/p/hmvnlPhKSHpO0WoIwC5CYmGdIQ55932Z4OKMJejLPmbEBXodsMnNHN5TK+5W3ccBD1wH2vEwFMuLU0L/LcdpC3S2ATW2U3jo6BB7OBoIh9dCVWMUXvc0VbdM9DJ++D99or+P3gfBY8Gy98S4h2vMwOH09HIN2BPZw7iot+JqSEZcBgTCNI4HyovLo5g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=KM44vxo39Tl39yfzHKnzeDclnlssl9AgtDyWFM9VzA4=; b=aNW0Ff9nCbhdnDjlEKdemdOzwNBEsIOjhoZN1JdvFRGKnio7r3HlHAJtEBpKRi0njBru86YzqtKebeVZNbnmKb9DLRVAtehXm5kpW3HpO+zayJKBVxW6UGo8eUK3PLKXIRUeEvc4q2MTimxbk2BwESYIhvJPtitAzS7bo94ZAFr0J0besj2w3AYpEJnKbzyVLtKVDb7Cepwozi5O0LJFSJbbFw5E/jTmxrTx4ToVX0mzLR8jO7DA16zQtX/4YltOM7WPZyiHL4mw/mjXlvkuqroN7dcb/EllVkpYIoKZNZFHKc5/30WVTD6xvPNDIM7WzAwZ7XbXfbHZtty1TYOwLg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=KM44vxo39Tl39yfzHKnzeDclnlssl9AgtDyWFM9VzA4=; b=hugY9vxs6H5ZhpO/g9wfb5VejyOaSXyQOXDCCtakkeP/1tnn2QFvB+NUNtrK2+QkHI/O+K6vq5YJDUnBHRWYCAPP/NXQh2l1oWuaNjN5zAUSCIYgNUruXi1+lMSvDFy3iyNK7aqtx6+g7jwPZUwWxS7UwFpswnf9pjr5KK7Zn9hQUksjNlpPosxo1xT8OwLaylC12GmzuJztUGsUleOGQqSzpunvxgQaW6CzonO681LYcNLBjuOe9CQQDx3HviAew3Ytm6KjB7UYp/BwD0Kf8BNrSas3IDsqRO2zMIlgBbStZc2eSi7OG874jRncE1efSXHD9ti34zUYugTL61/CqA== Received: from BL0PR12MB2820.namprd12.prod.outlook.com (2603:10b6:208:80::11) by IA1PR12MB9468.namprd12.prod.outlook.com (2603:10b6:208:596::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9723.19; Tue, 17 Mar 2026 16:30:01 +0000 Received: from BL0PR12MB2820.namprd12.prod.outlook.com ([fe80::8a84:517b:9ec:7c7c]) by BL0PR12MB2820.namprd12.prod.outlook.com ([fe80::8a84:517b:9ec:7c7c%6]) with mapi id 15.20.9678.017; Tue, 17 Mar 2026 16:30:01 +0000 From: Shashank Sharma To: Matthew Brost , "intel-xe@lists.freedesktop.org" CC: "dri-devel@lists.freedesktop.org" , Boris Brezillon , Tvrtko Ursulin , Rodrigo Vivi , =?utf-8?B?VGhvbWFzIEhlbGxzdHLDtm0=?= , =?utf-8?B?Q2hyaXN0aWFuIEvDtm5pZw==?= , Danilo Krummrich , David Airlie , Maarten Lankhorst , Maxime Ripard , Philipp Stanner , Simona Vetter , Sumit Semwal , Thomas Zimmermann , "linux-kernel@vger.kernel.org" Subject: Re: [RFC PATCH 02/12] drm/dep: Add DRM dependency queue layer Thread-Topic: [RFC PATCH 02/12] drm/dep: Add DRM dependency queue layer Thread-Index: AQHctP4IewsAJdSwc0+B/pLIZkhaQbWy7JoA Date: Tue, 17 Mar 2026 16:30:00 +0000 Message-ID: <7c9275e9-16f5-4473-93bd-dc478279ed1f@nvidia.com> References: <20260316043255.226352-1-matthew.brost@intel.com> <20260316043255.226352-3-matthew.brost@intel.com> In-Reply-To: <20260316043255.226352-3-matthew.brost@intel.com> Accept-Language: en-DE, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: BL0PR12MB2820:EE_|IA1PR12MB9468:EE_ x-ms-office365-filtering-correlation-id: d484dba0-64a0-47d2-5535-08de84426f40 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|376014|7416014|1800799024|366016|38070700021|56012099003|18002099003|22082099003; x-microsoft-antispam-message-info: ZBNeIjmfgPw/Of85EABmTBfb2yL2ayWhdUm/VVRAqeTRc5ThF5zlsoo++sDKLAPgKjvrVfbJCQhIjdAFC1MXatagpeL2jJx+Xwve58CmkJKI9Jx5k+S+HXuNjY/xdywfq/u29pkKoEgfeiZIogxmlie30l9XWuHTaWkdm00kdRfUJPI1mN//ciaDFr6KT9DjFU2eWeUHNL1Z7eW6PBk6IIETt6p+sUqepTT9KdggNxZTlCcPglFoHS9ZeVad8DFZnBlPBY+xj2AvT0Ic0x12laMrQBDrBOKNlUhWuQMz0ypf3sIixpST9HMkEqGlQEBEz91OTGYT8VtTCBfLKVQe0OL+2aVcPp2oq8nT4RR6C79zgFeX3x2WxZOdnFFhskd8pzBkq0OASLVdJp+WB51995VXhMVG3GjqzX5kV8cb0wUYS176yOBGNI1WzMvHu2gJE0X7NZI9b1Zm/ifN07ordi+lQGMt8009EPlmjEAJZ4Sd6b6S0UKMFGT6tZqHJDQUbRAqcSQBbrmaC6LQ5jKax718HvCtjGCsB68K89YZxhA57out76yXCCmd3UA4aSi56Ml3fvUbYd4CoA8lan22fFxh8h/PN2A7sDCj2MvgOj6OTU+QpVpRShXbabmnNkZw4ZPl4PfBggTTbyB4QVZAnCsmwAYl7V+kEhzMUK2zW6XG9lnSS2G2QVnE60wLspPCufLjBQphg0LkdSO6W4j7/1ftnWkLDxFBDv5HmjA/OBAdjp7pZvYNr/7HEmjp4/vjzUw6aReJU3EQdAFPzoWtfujjUGriSDQkJxmhYwJaFiY= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BL0PR12MB2820.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(1800799024)(366016)(38070700021)(56012099003)(18002099003)(22082099003);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?dS90NEpaRExtRGZmVEZCM2N3V0RXYWEyTFluOTlqSEkyek92VWcvYW9FVU16?= =?utf-8?B?S2J3MHl0cGx5OStkbnhPUWdOUzZGc0MxWUR5RGFkVlIrSFo3MFdnRTZRejZo?= =?utf-8?B?NERFZ29rUTI1TmhEazRxM1M2d2FJbzB3WVp2NnIrTXhlcWpZZVkxOERqQ0FS?= =?utf-8?B?YjRzckhCRk5pR3U3Vk9VWTBNQmRsMUtmVEswNXlnWXdOZ2hmWVlsVHpQOHVo?= =?utf-8?B?Tlg2WDVleXd4cjY3eHpWZ1RmRXlWU3RMNEdyUmkva083cXFIMjRBOFVXS0l0?= =?utf-8?B?aDhFRHhzQUkvWUdkSlhKZWRSTVpzWVBmdnRQSXBVTGVWTGsvd2hXOGlQMHdq?= =?utf-8?B?MHNoY2p6bEcrMmhDeThYNU83Qm9lWjdNZXB1UWkxbXBpSnQ3cmx4OWVxM3Er?= =?utf-8?B?Wlpoa3pBcGhLR1JXVlR4c0hWTjRBZnI4N0VqeFplcmllLzVUbVBYTUNaZVQ3?= =?utf-8?B?K3FDd0ZNUll2cDR4T3dUeE1XNkp4ZHdtQ2o2N2NFYVloeUhKS012cHd6dStN?= =?utf-8?B?a2pQbDNETlZjd1RtdExhRkR1b25oQzlxUFo2emRBaEdXTHlpbWw0dUVWbHh3?= =?utf-8?B?STI3MU5KN01WZjFTL0ZWNTZXa3FtcFY1cVNCWUx6VE1BdXhVUU1MN3ozUVc4?= =?utf-8?B?bFI4R05zMTMzSkw0MjEyVUc4L0JQTGRnUlprUkJaY2FpbVUycHlPNnRZWmpj?= =?utf-8?B?WkpqaFV0ZHV3V0cvVU9rNnFUSy9VMFk0cmtZeDFtQU1RaU1oS1FDQWFSOHRw?= =?utf-8?B?MnRlVlBQUy9yMWtVOGxCQ3B2OU5TSXVzTmpZeTliMjllWExFK2pPUzhtbWhl?= =?utf-8?B?N0YxS3BoTC84MWhTT2JxVUZVOHlZVWQ2a2ZHeUUvSnRrVTczYngwdHcvbVpw?= =?utf-8?B?anJpNGV4Vlg4VjlYSW5Zck1DYmY3K09xR1lBYWVxQjhZbWRCOWN6L0haVFRn?= =?utf-8?B?bFdGeGVUcTBFQXo0WHQvcEtKaXJrVlIzWnY2WmhGUUp3eVQ4TU9FZnRpSkw3?= =?utf-8?B?dEJvbTEyTkYrMHYrcmRUa1Joa1J5OWRseE9qU3ZkN1dSMjI4R3Y5V2ZsNHlv?= =?utf-8?B?K3JWdnlZRTZiYVREV0Raa3ZQaVpDTUt2SDRSd1dpTEduY0pJbUNNYW1WeGlo?= =?utf-8?B?RndLTGhqTXp3aVpiRTdwOUkzeUhWMHFEM0ZkL0xtS2FkMGptYUdaT25xUUZ0?= =?utf-8?B?aHpsQlRWRTF4UUVCb1FwaHcrci82VmxSa3R5MDhPWVpmN3Rwdmh2OHNZSFht?= =?utf-8?B?dUtMV2p3MnJGYVJZQXZPOVJiMk1ZZ09sWFVIZjJHdHNMc2xuU0VPQTNQN1VC?= =?utf-8?B?US9Nb0M4cWoxODJTSGNidWMxOVc3MFNWZVhwWjhzOHdUd0xPOXJ0YTg2VDNn?= =?utf-8?B?dTdveTJub29BZG1TWlczVnZsNXRKN3RZNk1VVDN0WFJrSmk4bFF5UlpSV0Vk?= =?utf-8?B?d0N2N2dkS3ZwUzVtMTdwcnlNMTh5Zi8rUXhXNlhBNWtFSUdVbEloZ0pTdjJL?= =?utf-8?B?S1J5dmplR2RodU1RMmUxUGM5WTljdGRScFdrdEVsaXBtSnloTVBnVUo2a3dm?= =?utf-8?B?aVN4bWd6TWxtaE5JekU1QW9qN2NQOHd2L2VOR2o2QllUWS8rS1ZRUytueFNo?= =?utf-8?B?ODBkVmp6N0hCK1kzMmtEUnRkS1FXODRLaFA0YXRkWGdxdjkvR1IyaGlWLzNP?= =?utf-8?B?cEdpaWYrT0lhd3ZTNXdYTkNRek9iRGM1UTRaSm5Lc3hoaDVGbTRzTjhrOHZi?= =?utf-8?B?SkNqUTBoRkJKRlZHNjZXSzAxTFgyZGVFT00rODlOZlZJQUNHZTVVTWcwYk5a?= =?utf-8?B?dGVQOVJQalZyOW9MMzVlREVBRzJLbmN2Zkd3YlNjRjloWE1aTFU4a3B6aUkw?= =?utf-8?B?NUp0Smx6VldPbG94S2gxMzdaOE1uR25NNWhFaFY0Rk01cDRBckpJbzZyRk11?= =?utf-8?B?WXh1elYxV25kL0NUOFRWQjVYc21WRUpheWxwaVBRMnp6bUg0d3IvczRKOVlM?= =?utf-8?B?SE9kSTgzdUZKYTlrNUl4ZmZWVmxzV0w3SURYcVBRN2Z4VFIvcHdQR2g4ZThM?= =?utf-8?B?VEFFRlJXWitDOXZ0djNjdjcwL0VpZTlWZEx4V1FQRUdWMzZ1cVJVOW1FMFBB?= =?utf-8?B?R2hPQTlMaHg5RFNjMXptSk9hbUh5K3p0clNYSnZERFI2NGwvdzR4bFJTdUJQ?= =?utf-8?B?R1lFMTJkdjBNQ1J0Mm1TbnVESHZ1TEJDY0dhYjM2SmtTM0dPR3BZRWZsMWlB?= =?utf-8?B?Q3ZuMXphbytRejhmWUFpUGFjY1BOVmwxcitiWm5VQ3hGenJTSjVxMTE3aDRi?= =?utf-8?B?bFlHMGYreVptK29rZGg1ZVR0cUZON1VmUmtMQ1o5clpjVktJTDJLdz09?= Content-Type: text/plain; charset="utf-8" Content-ID: <8E2ED3391F2C554BA30788A72806BA4B@namprd12.prod.outlook.com> Content-Transfer-Encoding: base64 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: BL0PR12MB2820.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: d484dba0-64a0-47d2-5535-08de84426f40 X-MS-Exchange-CrossTenant-originalarrivaltime: 17 Mar 2026 16:30:00.2082 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: Ksr8Xqg9pTlc/nGz1Fc+fHfrDx7eFOAV72RCY9fvcK912lrUQao+l7Ud8nUSRn7NJeZO/FEILe+eZRspE/C30A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA1PR12MB9468 T24gMTYuMDMuMjYgMDU6MzIsIE1hdHRoZXcgQnJvc3Qgd3JvdGU6DQo+IEV4dGVybmFsIGVtYWls OiBVc2UgY2F1dGlvbiBvcGVuaW5nIGxpbmtzIG9yIGF0dGFjaG1lbnRzDQo+DQo+DQo+IERpdmVy Z2luZyByZXF1aXJlbWVudHMgYmV0d2VlbiBHUFUgZHJpdmVycyB1c2luZyBmaXJtd2FyZSBzY2hl ZHVsaW5nDQo+IGFuZCB0aG9zZSB1c2luZyBoYXJkd2FyZSBzY2hlZHVsaW5nIGhhdmUgc2hvd24g dGhhdCBkcm1fZ3B1X3NjaGVkdWxlciBpcw0KPiBubyBsb25nZXIgc3VmZmljaWVudCBmb3IgZmly bXdhcmUtc2NoZWR1bGVkIEdQVSBkcml2ZXJzLiBUaGUgdGVjaG5pY2FsDQo+IGRlYnQsIGxhY2sg b2YgbWVtb3J5LXNhZmV0eSBndWFyYW50ZWVzLCBhYnNlbmNlIG9mIGNsZWFyIG9iamVjdC1saWZl dGltZQ0KPiBydWxlcywgYW5kIG51bWVyb3VzIGRyaXZlci1zcGVjaWZpYyBoYWNrcyBoYXZlIHJl bmRlcmVkDQo+IGRybV9ncHVfc2NoZWR1bGVyIHVubWFpbnRhaW5hYmxlLiBJdCBpcyB0aW1lIGZv ciBhIGZyZXNoIGRlc2lnbiBmb3INCj4gZmlybXdhcmUtc2NoZWR1bGVkIEdQVSBkcml2ZXJz4oCU b25lIHRoYXQgYWRkcmVzc2VzIGFsbCBvZiB0aGUNCj4gYWZvcmVtZW50aW9uZWQgc2hvcnRjb21p bmdzLg0KPg0KPiBBZGQgZHJtX2RlcCwgYSBsaWdodHdlaWdodCBHUFUgc3VibWlzc2lvbiBxdWV1 ZSBpbnRlbmRlZCBhcyBhDQo+IHJlcGxhY2VtZW50IGZvciBkcm1fZ3B1X3NjaGVkdWxlciBmb3Ig ZmlybXdhcmUtbWFuYWdlZCBHUFUgc2NoZWR1bGVycw0KPiAoZS5nLiBYZSwgUGFudGhvciwgQU1E WEROQSwgUFZSLCBOb3V2ZWF1LCBOb3ZhKS4gVW5saWtlDQo+IGRybV9ncHVfc2NoZWR1bGVyLCB3 aGljaCBzZXBhcmF0ZXMgdGhlIHNjaGVkdWxlciAoZHJtX2dwdV9zY2hlZHVsZXIpDQo+IGZyb20g dGhlIHF1ZXVlIChkcm1fc2NoZWRfZW50aXR5KSBpbnRvIHR3byBvYmplY3RzIHJlcXVpcmluZyBl eHRlcm5hbA0KPiBjb29yZGluYXRpb24sIGRybV9kZXAgbWVyZ2VzIGJvdGggcm9sZXMgaW50byBh IHNpbmdsZSBzdHJ1Y3QNCj4gZHJtX2RlcF9xdWV1ZS4gVGhpcyBlbGltaW5hdGVzIHRoZSBOOjEg ZW50aXR5LXRvLXNjaGVkdWxlciBtYXBwaW5nDQo+IHRoYXQgaXMgdW5uZWNlc3NhcnkgZm9yIGZp cm13YXJlIHNjaGVkdWxlcnMgd2hpY2ggbWFuYWdlIHRoZWlyIG93bg0KPiBydW4tbGlzdHMgaW50 ZXJuYWxseS4NCj4NCj4gVW5saWtlIGRybV9ncHVfc2NoZWR1bGVyLCB3aGljaCByZWxpZXMgb24g ZXh0ZXJuYWwgbG9ja2luZyBhbmQgbGlmZXRpbWUNCj4gbWFuYWdlbWVudCBieSB0aGUgZHJpdmVy LCBkcm1fZGVwIHVzZXMgcmVmZXJlbmNlIGNvdW50aW5nIChrcmVmKSBvbiBib3RoDQo+IHF1ZXVl cyBhbmQgam9icyB0byBndWFyYW50ZWUgb2JqZWN0IGxpZmV0aW1lIHNhZmV0eS4gQSBqb2IgaG9s ZHMgYSBxdWV1ZQ0KPiByZWZlcmVuY2UgZnJvbSBpbml0IHVudGlsIGl0cyBsYXN0IHB1dCwgYW5k IHRoZSBxdWV1ZSBob2xkcyBhIGpvYiByZWZlcmVuY2UNCj4gZnJvbSBkaXNwYXRjaCB1bnRpbCB0 aGUgcHV0X2pvYiB3b3JrZXIgcnVucy4gVGhpcyBtYWtlcyB1c2UtYWZ0ZXItZnJlZQ0KPiBpbXBv c3NpYmxlIGV2ZW4gd2hlbiBjb21wbGV0aW9uIGFycml2ZXMgZnJvbSBJUlEgY29udGV4dCBvciBj b25jdXJyZW50DQo+IHRlYXJkb3duIGlzIGluIGZsaWdodC4NCj4NCj4gVGhlIGNvcmUgb2JqZWN0 cyBhcmU6DQo+DQo+ICAgIHN0cnVjdCBkcm1fZGVwX3F1ZXVlIC0gYSBwZXItY29udGV4dCBzdWJt aXNzaW9uIHF1ZXVlIG93bmluZyBhbg0KPiAgICAgIG9yZGVyZWQgc3VibWl0IHdvcmtxdWV1ZSwg YSBURFIgdGltZW91dCB3b3JrcXVldWUsIGFuIFNQU0Mgam9iDQo+ICAgICAgcXVldWUsIGFuZCBh IHBlbmRpbmctam9iIGxpc3QuIFJlZmVyZW5jZSBjb3VudGVkOyBkcml2ZXJzIGNhbiBlbWJlZA0K PiAgICAgIGl0IGFuZCBwcm92aWRlIGEgLnJlbGVhc2UgdmZ1bmMgZm9yIFJDVS1zYWZlIHRlYXJk b3duLg0KPg0KPiAgICBzdHJ1Y3QgZHJtX2RlcF9qb2IgLSBhIHNpbmdsZSB1bml0IG9mIEdQVSB3 b3JrLiBEcml2ZXJzIGVtYmVkIHRoaXMNCj4gICAgICBhbmQgcHJvdmlkZSBhIC5yZWxlYXNlIHZm dW5jLiBKb2JzIGNhcnJ5IGFuIHhhcnJheSBvZiBpbnB1dA0KPiAgICAgIGRtYV9mZW5jZSBkZXBl bmRlbmNpZXMgYW5kIHByb2R1Y2UgYSBkcm1fZGVwX2ZlbmNlIGFzIHRoZWlyDQo+ICAgICAgZmlu aXNoZWQgZmVuY2UuDQo+DQo+ICAgIHN0cnVjdCBkcm1fZGVwX2ZlbmNlIC0gYSBkbWFfZmVuY2Ug c3ViY2xhc3Mgd3JhcHBpbmcgYW4gb3B0aW9uYWwNCj4gICAgICBwYXJlbnQgaGFyZHdhcmUgZmVu Y2UuIFRoZSBmaW5pc2hlZCBmZW5jZSBpcyBhcm1lZCAoc2VxdWVuY2UNCj4gICAgICBudW1iZXIg YXNzaWduZWQpIGJlZm9yZSBzdWJtaXNzaW9uIGFuZCBzaWduYWxzIHdoZW4gdGhlIGhhcmR3YXJl DQo+ICAgICAgZmVuY2Ugc2lnbmFscyAob3IgaW1tZWRpYXRlbHkgb24gc3luY2hyb25vdXMgY29t cGxldGlvbikuDQo+DQo+IEpvYiBsaWZlY3ljbGU6DQo+ICAgIDEuIGRybV9kZXBfam9iX2luaXQo KSAtIGFsbG9jYXRlIGFuZCBpbml0aWFsaXNlOyBqb2IgYWNxdWlyZXMgYQ0KPiAgICAgICBxdWV1 ZSByZWZlcmVuY2UuDQo+ICAgIDIuIGRybV9kZXBfam9iX2FkZF9kZXBlbmRlbmN5KCkgYW5kIGZy aWVuZHMgLSByZWdpc3RlciBpbnB1dCBmZW5jZXM7DQo+ICAgICAgIGR1cGxpY2F0ZXMgZnJvbSB0 aGUgc2FtZSBjb250ZXh0IGFyZSBkZWR1cGxpY2F0ZWQuDQo+ICAgIDMuIGRybV9kZXBfam9iX2Fy bSgpIC0gYXNzaWduIHNlcXVlbmNlIG51bWJlciwgb2J0YWluIGZpbmlzaGVkIGZlbmNlLg0KPiAg ICA0LiBkcm1fZGVwX2pvYl9wdXNoKCkgLSBzdWJtaXQgdG8gcXVldWUuDQo+DQo+IFN1Ym1pc3Np b24gcGF0aHMgdW5kZXIgcXVldWUgbG9jazoNCj4gICAgLSBCeXBhc3MgcGF0aDogaWYgRFJNX0RF UF9RVUVVRV9GTEFHU19CWVBBU1NfU1VQUE9SVEVEIGlzIHNldCwgdGhlDQo+ICAgICAgU1BTQyBx dWV1ZSBpcyBlbXB0eSwgbm8gZGVwZW5kZW5jaWVzIGFyZSBwZW5kaW5nLCBhbmQgY3JlZGl0cyBh cmUNCj4gICAgICBhdmFpbGFibGUsIHRoZSBqb2IgaXMgZGlzcGF0Y2hlZCBpbmxpbmUgb24gdGhl IGNhbGxpbmcgdGhyZWFkLg0KPiAgICAtIFF1ZXVlZCBwYXRoOiBqb2IgaXMgcHVzaGVkIG9udG8g dGhlIFNQU0MgcXVldWUgYW5kIHRoZSBydW5fam9iDQo+ICAgICAgd29ya2VyIGlzIGtpY2tlZC4g VGhlIHdvcmtlciByZXNvbHZlcyByZW1haW5pbmcgZGVwZW5kZW5jaWVzDQo+ICAgICAgKGluc3Rh bGxpbmcgd2FrZXVwIGNhbGxiYWNrcyBmb3IgdW5yZXNvbHZlZCBmZW5jZXMpIGJlZm9yZSBjYWxs aW5nDQo+ICAgICAgb3BzLT5ydW5fam9iKCkuDQo+DQo+IENyZWRpdC1iYXNlZCB0aHJvdHRsaW5n IHByZXZlbnRzIGhhcmR3YXJlIG92ZXJmbG93OiBlYWNoIGpvYiBkZWNsYXJlcw0KPiBhIGNyZWRp dCBjb3N0IGF0IGluaXQgdGltZTsgZGlzcGF0Y2ggaXMgZGVmZXJyZWQgdW50aWwgc3VmZmljaWVu dA0KPiBjcmVkaXRzIGFyZSBhdmFpbGFibGUuDQo+DQo+IFRpbWVvdXQgRGV0ZWN0aW9uIGFuZCBS ZWNvdmVyeSAoVERSKTogYSBwZXItcXVldWUgZGVsYXllZCB3b3JrIGl0ZW0NCj4gZmlyZXMgd2hl biB0aGUgaGVhZCBwZW5kaW5nIGpvYiBleGNlZWRzIHEtPmpvYi50aW1lb3V0IGppZmZpZXMsIGNh bGxpbmcNCj4gb3BzLT50aW1lZG91dF9qb2IoKS4gZHJtX2RlcF9xdWV1ZV90cmlnZ2VyX3RpbWVv dXQoKSBmb3JjZXMgaW1tZWRpYXRlDQo+IGV4cGlyeSBmb3IgZGV2aWNlIHRlYXJkb3duLg0KPg0K PiBJUlEtc2FmZSBjb21wbGV0aW9uOiBxdWV1ZXMgZmxhZ2dlZCBEUk1fREVQX1FVRVVFX0ZMQUdT X0pPQl9QVVRfSVJRX1NBRkUNCj4gYWxsb3cgZHJtX2RlcF9qb2JfZG9uZSgpIHRvIGJlIGNhbGxl ZCBmcm9tIGhhcmRpcnEgY29udGV4dCAoZS5nLiBhDQo+IGRtYV9mZW5jZSBjYWxsYmFjaykuIERl cGVuZGVuY3kgY2xlYW51cCBpcyBkZWZlcnJlZCB0byBwcm9jZXNzIGNvbnRleHQNCj4gYWZ0ZXIg b3BzLT5ydW5fam9iKCkgcmV0dXJucyB0byBhdm9pZCBjYWxsaW5nIHhhX2Rlc3Ryb3koKSBmcm9t IElSUS4NCj4NCj4gWm9tYmllLXN0YXRlIGd1YXJkOiB3b3JrZXJzIHVzZSBrcmVmX2dldF91bmxl c3NfemVybygpIG9uIGVudHJ5IGFuZA0KPiBiYWlsIGltbWVkaWF0ZWx5IGlmIHRoZSBxdWV1ZSBy ZWZjb3VudCBoYXMgYWxyZWFkeSByZWFjaGVkIHplcm8gYW5kDQo+IGFzeW5jIHRlYXJkb3duIGlz IGluIGZsaWdodCwgcHJldmVudGluZyB1c2UtYWZ0ZXItZnJlZS4NCj4NCj4gVGVhcmRvd24gaXMg YWx3YXlzIGRlZmVycmVkIHRvIGEgbW9kdWxlLXByaXZhdGUgd29ya3F1ZXVlIChkZXBfZnJlZV93 cSkNCj4gc28gdGhhdCBkZXN0cm95X3dvcmtxdWV1ZSgpIGlzIG5ldmVyIGNhbGxlZCBmcm9tIHdp dGhpbiBvbmUgb2YgdGhlDQo+IHF1ZXVlJ3Mgb3duIHdvcmtlcnMuIEVhY2ggcXVldWUgaG9sZHMg YSBkcm1fZGV2X2dldCgpIHJlZmVyZW5jZSBvbiBpdHMNCj4gb3duaW5nIHN0cnVjdCBkcm1fZGV2 aWNlLCByZWxlYXNlZCBhcyB0aGUgZmluYWwgc3RlcCBvZiB0ZWFyZG93biB2aWENCj4gZHJtX2Rl dl9wdXQoKS4gVGhpcyBwcmV2ZW50cyB0aGUgZHJpdmVyIG1vZHVsZSBmcm9tIGJlaW5nIHVubG9h ZGVkDQo+IHdoaWxlIGFueSBxdWV1ZSBpcyBzdGlsbCBhbGl2ZSB3aXRob3V0IHJlcXVpcmluZyBh IHNlcGFyYXRlIGRyYWluIEFQSS4NCg0KQ29uc2lkZXJpbmcgd29ya2xvYWQgc2NoZWR1bGluZyBm b3IgRlctYmFzZWQgZHJpdmVycyB3YXMgc3VwcG9zZWQgdG8gYmUgDQpzaW1wbGVyIHRoYW4gbGVn YWN5IGhhcmR3YXJlIHNjaGVkdWxpbmcsIHJlcGxhY2luZyB0aGUgTjoxIA0KZW50aXR5LXRvLXNj aGVkdWxlciBtYXBwaW5nIHdpdGggdGhpcyB1bmlmaWVkLCByZWZjb3VudGVkIGRybV9kZXBfcXVl dWUgDQptYWtlcyBhIGxvdCBvZiBzZW5zZS4NCg0KT25lIGFyY2hpdGVjdHVyYWwgcXVlc3Rpb24g cmVnYXJkaW5nIFRUTS1iYXNlZCBkcml2ZXJzOiBkb2VzIGRybV9kZXAgDQppbnRlbmQgdG8gaGFu ZGxlIGJ1ZmZlciBldmljdGlvbnMgYW5kIHBhZ2UtdGFibGUgKFBUKSB1cGRhdGUgcmVsYXRlZCAN CmV2ZW50cyA/IElmIHllcywgd2UgbWlnaHQgYWxzbyBuZWVkIHNvbWV0aGluZyBsaWtlICdldmlj dGlvbiBmZW5jZXMnIHRvIA0KaGFsdCBleGVjdXRpb24sIGV2aWN0IEJPcywgdXBkYXRlIHRoZSBQ VCwgYW5kIHJlc3VtZS4gU2luY2UgdGhlIGZpcm13YXJlIA0KbWFuYWdlcyB0aGUgYWN0dWFsIGhh cmR3YXJlIHF1ZXVlLCBkbyB5b3UgZW52aXNpb24gZHJtX2RlcF9xdWV1ZSANCnByb3ZpZGluZyBn ZW5lcmljIGhvb2tzL2ZsYWdzIHRvIHRlbXBvcmFyaWx5IHBhdXNlIGpvYiBkaXNwYXRjaGluZyAo b3IgDQppbmplY3QgaGlnaC1wcmlvcml0eSBQVCB1cGRhdGUgam9icykgd2hlbiBhIG1lbW9yeSBt YW5hZ2VyIG5lZWRzIHRvIA0KcGVyZm9ybSBhbiBldmljdGlvbj8gSXQgd291bGQgYmUgZ29vZCB0 byBlbnN1cmUgYSBwcm92aXNpb24gZm9yIHRoaXMgDQp0eXBlIG9mIHBpcGVsaW5lIHN0YWxsLCBh cyBhbnkgVFRNLWJhc2VkIG9yIGR5bmFtaWMtVk0gZHJpdmVyIHdpbGwgDQppbmV2aXRhYmx5IG5l ZWQgaXQuDQoNCi0gU2hhc2hhbmsNCg0KPg0KPiBDYzogQm9yaXMgQnJlemlsbG9uIDxib3Jpcy5i cmV6aWxsb25AY29sbGFib3JhLmNvbT4NCj4gQ2M6IFR2cnRrbyBVcnN1bGluIDx0dnJ0a28udXJz dWxpbkBpZ2FsaWEuY29tPg0KPiBDYzogUm9kcmlnbyBWaXZpIDxyb2RyaWdvLnZpdmlAaW50ZWwu Y29tPg0KPiBDYzogVGhvbWFzIEhlbGxzdHLDtm0gPHRob21hcy5oZWxsc3Ryb21AbGludXguaW50 ZWwuY29tPg0KPiBDYzogQ2hyaXN0aWFuIEvDtm5pZyA8Y2hyaXN0aWFuLmtvZW5pZ0BhbWQuY29t Pg0KPiBDYzogRGFuaWxvIEtydW1tcmljaCA8ZGFrckBrZXJuZWwub3JnPg0KPiBDYzogRGF2aWQg QWlybGllIDxhaXJsaWVkQGdtYWlsLmNvbT4NCj4gQ2M6IGRyaS1kZXZlbEBsaXN0cy5mcmVlZGVz a3RvcC5vcmcNCj4gQ2M6IE1hYXJ0ZW4gTGFua2hvcnN0IDxtYWFydGVuLmxhbmtob3JzdEBsaW51 eC5pbnRlbC5jb20+DQo+IENjOiBNYXhpbWUgUmlwYXJkIDxtcmlwYXJkQGtlcm5lbC5vcmc+DQo+ IENjOiBQaGlsaXBwIFN0YW5uZXIgPHBoYXN0YUBrZXJuZWwub3JnPg0KPiBDYzogU2ltb25hIFZl dHRlciA8c2ltb25hQGZmd2xsLmNoPg0KPiBDYzogU3VtaXQgU2Vtd2FsIDxzdW1pdC5zZW13YWxA bGluYXJvLm9yZz4NCj4gQ2M6IFRob21hcyBaaW1tZXJtYW5uIDx0emltbWVybWFubkBzdXNlLmRl Pg0KPiBDYzogbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZw0KPiBTaWduZWQtb2ZmLWJ5OiBN YXR0aGV3IEJyb3N0IDxtYXR0aGV3LmJyb3N0QGludGVsLmNvbT4NCj4gQXNzaXN0ZWQtYnk6IEdp dEh1YiBDb3BpbG90OmNsYXVkZS1zb25uZXQtNC42DQo+IC0tLQ0KPiAgIGRyaXZlcnMvZ3B1L2Ry bS9LY29uZmlnICAgICAgICAgICAgIHwgICAgNCArDQo+ICAgZHJpdmVycy9ncHUvZHJtL01ha2Vm aWxlICAgICAgICAgICAgfCAgICAxICsNCj4gICBkcml2ZXJzL2dwdS9kcm0vZGVwL01ha2VmaWxl ICAgICAgICB8ICAgIDUgKw0KPiAgIGRyaXZlcnMvZ3B1L2RybS9kZXAvZHJtX2RlcF9mZW5jZS5j IHwgIDQwNiArKysrKysrDQo+ICAgZHJpdmVycy9ncHUvZHJtL2RlcC9kcm1fZGVwX2ZlbmNlLmgg fCAgIDI1ICsNCj4gICBkcml2ZXJzL2dwdS9kcm0vZGVwL2RybV9kZXBfam9iLmMgICB8ICA2NzUg KysrKysrKysrKysNCj4gICBkcml2ZXJzL2dwdS9kcm0vZGVwL2RybV9kZXBfam9iLmggICB8ICAg MTMgKw0KPiAgIGRyaXZlcnMvZ3B1L2RybS9kZXAvZHJtX2RlcF9xdWV1ZS5jIHwgMTY0NyArKysr KysrKysrKysrKysrKysrKysrKysrKysNCj4gICBkcml2ZXJzL2dwdS9kcm0vZGVwL2RybV9kZXBf cXVldWUuaCB8ICAgMzEgKw0KPiAgIGluY2x1ZGUvZHJtL2RybV9kZXAuaCAgICAgICAgICAgICAg IHwgIDU5NyArKysrKysrKysrDQo+ICAgMTAgZmlsZXMgY2hhbmdlZCwgMzQwNCBpbnNlcnRpb25z KCspDQo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9kZXAvTWFrZWZpbGUN Cj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2RlcC9kcm1fZGVwX2ZlbmNl LmMNCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2RlcC9kcm1fZGVwX2Zl bmNlLmgNCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2RlcC9kcm1fZGVw X2pvYi5jDQo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9kZXAvZHJtX2Rl cF9qb2IuaA0KPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vZGVwL2RybV9k ZXBfcXVldWUuYw0KPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vZGVwL2Ry bV9kZXBfcXVldWUuaA0KPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL2RybS9kcm1fZGVw LmgNCj4NCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnIGIvZHJpdmVycy9n cHUvZHJtL0tjb25maWcNCj4gaW5kZXggNTM4NjI0OGU3NWI2Li44MzRmNmUyMTA1NTEgMTAwNjQ0 DQo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnDQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9LY29uZmlnDQo+IEBAIC0yNzYsNiArMjc2LDEwIEBAIGNvbmZpZyBEUk1fU0NIRUQNCj4gICAg ICAgICAgdHJpc3RhdGUNCj4gICAgICAgICAgZGVwZW5kcyBvbiBEUk0NCj4NCj4gK2NvbmZpZyBE Uk1fREVQDQo+ICsgICAgICAgdHJpc3RhdGUNCj4gKyAgICAgICBkZXBlbmRzIG9uIERSTQ0KPiAr DQo+ICAgIyBTZXBhcmF0ZSBvcHRpb24gYXMgbm90IGFsbCBEUk0gZHJpdmVycyB1c2UgaXQNCj4g ICBjb25maWcgRFJNX1BBTkVMX0JBQ0tMSUdIVF9RVUlSS1MNCj4gICAgICAgICAgdHJpc3RhdGUN Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2Ry bS9NYWtlZmlsZQ0KPiBpbmRleCBlOTdmYWFiY2Q3ODMuLjFhZDg3Y2MwZTU0NSAxMDA2NDQNCj4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlDQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9N YWtlZmlsZQ0KPiBAQCAtMTczLDYgKzE3Myw3IEBAIG9iai15ICAgICAgICAgICAgICAgICAgICAg ICArPSBjbGllbnRzLw0KPiAgIG9iai15ICAgICAgICAgICAgICAgICAgKz0gZGlzcGxheS8NCj4g ICBvYmotJChDT05GSUdfRFJNX1RUTSkgICs9IHR0bS8NCj4gICBvYmotJChDT05GSUdfRFJNX1ND SEVEKSAgICAgICAgKz0gc2NoZWR1bGVyLw0KPiArb2JqLSQoQ09ORklHX0RSTV9ERVApICArPSBk ZXAvDQo+ICAgb2JqLSQoQ09ORklHX0RSTV9SQURFT04pKz0gcmFkZW9uLw0KPiAgIG9iai0kKENP TkZJR19EUk1fQU1ER1BVKSs9IGFtZC9hbWRncHUvDQo+ICAgb2JqLSQoQ09ORklHX0RSTV9BTURH UFUpKz0gYW1kL2FtZHhjcC8NCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kZXAvTWFr ZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vZGVwL01ha2VmaWxlDQo+IG5ldyBmaWxlIG1vZGUgMTAw NjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAwMC4uMzM1ZjFhZjQ2YTdiDQo+IC0tLSAvZGV2L251bGwN Cj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2RlcC9NYWtlZmlsZQ0KPiBAQCAtMCwwICsxLDUgQEAN Cj4gKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjANCj4gKw0KPiArZHJtX2RlcC15 IDo9IGRybV9kZXBfcXVldWUubyBkcm1fZGVwX2pvYi5vIGRybV9kZXBfZmVuY2Uubw0KPiArDQo+ ICtvYmotJChDT05GSUdfRFJNX0RFUCkgKz0gZHJtX2RlcC5vDQo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vZGVwL2RybV9kZXBfZmVuY2UuYyBiL2RyaXZlcnMvZ3B1L2RybS9kZXAvZHJt X2RlcF9mZW5jZS5jDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAw MC4uYWUwNWI5MDc3NzcyDQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvZHJpdmVycy9ncHUvZHJt L2RlcC9kcm1fZGVwX2ZlbmNlLmMNCj4gQEAgLTAsMCArMSw0MDYgQEANCj4gKy8vIFNQRFgtTGlj ZW5zZS1JZGVudGlmaWVyOiBNSVQNCj4gKy8qDQo+ICsgKiBDb3B5cmlnaHQgwqkgMjAyNiBJbnRl bCBDb3Jwb3JhdGlvbg0KPiArICovDQo+ICsNCj4gKy8qKg0KPiArICogRE9DOiBEUk0gZGVwZW5k ZW5jeSBmZW5jZQ0KPiArICoNCj4gKyAqIEVhY2ggc3RydWN0IGRybV9kZXBfam9iIGhhcyBhbiBh c3NvY2lhdGVkIHN0cnVjdCBkcm1fZGVwX2ZlbmNlIHRoYXQNCj4gKyAqIHByb3ZpZGVzIGEgc2lu Z2xlIGRtYV9mZW5jZSAoQGZpbmlzaGVkKSBzaWduYWxsZWQgd2hlbiB0aGUgaGFyZHdhcmUNCj4g KyAqIGNvbXBsZXRlcyB0aGUgam9iLg0KPiArICoNCj4gKyAqIFRoZSBoYXJkd2FyZSBmZW5jZSBy ZXR1cm5lZCBieSAmZHJtX2RlcF9xdWV1ZV9vcHMucnVuX2pvYiBpcyBzdG9yZWQgYXMNCj4gKyAq IEBwYXJlbnQuIEBmaW5pc2hlZCBpcyBjaGFpbmVkIHRvIEBwYXJlbnQgdmlhIGRybV9kZXBfam9i X2RvbmVfY2IoKSBhbmQNCj4gKyAqIGlzIHNpZ25hbGxlZCBvbmNlIEBwYXJlbnQgc2lnbmFscyAo b3IgaW1tZWRpYXRlbHkgaWYgcnVuX2pvYigpIHJldHVybnMNCj4gKyAqIE5VTEwgb3IgYW4gZXJy b3IpLg0KPiArICoNCj4gKyAqIERyaXZlcnMgc2hvdWxkIGV4cG9zZSBAZmluaXNoZWQgYXMgdGhl IG91dC1mZW5jZSBmb3IgR1BVIHdvcmsgc2luY2UgaXQgaXMNCj4gKyAqIHZhbGlkIGZyb20gdGhl IG1vbWVudCBkcm1fZGVwX2pvYl9hcm0oKSByZXR1cm5zLCB3aGVyZWFzIHRoZSBoYXJkd2FyZSBm ZW5jZQ0KPiArICogY291bGQgYmUgYSBjb21wb3VuZCBmZW5jZSwgd2hpY2ggaXMgZGlzYWxsb3dl ZCB3aGVuIGluc3RhbGxlZCBpbnRvDQo+ICsgKiBkcm1fc3luY29ianMgb3IgZG1hLXJlc3YuDQo+ ICsgKg0KPiArICogVGhlIGZlbmNlIHVzZXMgdGhlIGtlcm5lbCdzIGlubGluZSBzcGlubG9jayAo TlVMTCBwYXNzZWQgdG8gZG1hX2ZlbmNlX2luaXQoKSkNCj4gKyAqIHNvIG5vIHNlcGFyYXRlIGxv Y2sgYWxsb2NhdGlvbiBpcyByZXF1aXJlZC4NCj4gKyAqDQo+ICsgKiBEZWFkbGluZSBwcm9wYWdh dGlvbiBpcyBzdXBwb3J0ZWQ6IGlmIGEgY29uc3VtZXIgc2V0cyBhIGRlYWRsaW5lIHZpYQ0KPiAr ICogZG1hX2ZlbmNlX3NldF9kZWFkbGluZSgpLCBpdCBpcyBmb3J3YXJkZWQgdG8gQHBhcmVudCB3 aGVuIEBwYXJlbnQgaXMgc2V0Lg0KPiArICogSWYgQHBhcmVudCBoYXMgbm90IGJlZW4gc2V0IHll dCB0aGUgZGVhZGxpbmUgaXMgc3RvcmVkIGluIEBkZWFkbGluZSBhbmQNCj4gKyAqIGZvcndhcmRl ZCBhdCB0aGF0IHBvaW50Lg0KPiArICoNCj4gKyAqIE1lbW9yeSBtYW5hZ2VtZW50OiBkcm1fZGVw X2ZlbmNlIG9iamVjdHMgYXJlIGFsbG9jYXRlZCB3aXRoIGt6YWxsb2MoKSBhbmQNCj4gKyAqIGZy ZWVkIHZpYSBrZnJlZV9yY3UoKSBvbmNlIHRoZSBmZW5jZSBpcyByZWxlYXNlZCwgZW5zdXJpbmcg c2FmZXR5IHdpdGgNCj4gKyAqIFJDVS1wcm90ZWN0ZWQgZmVuY2UgYWNjZXNzZXMuDQo+ICsgKi8N Cj4gKw0KPiArI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4NCj4gKyNpbmNsdWRlIDxkcm0vZHJtX2Rl cC5oPg0KPiArI2luY2x1ZGUgImRybV9kZXBfZmVuY2UuaCINCj4gKw0KPiArLyoqDQo+ICsgKiBE Uk1fREVQX0ZFTkNFX0ZMQUdfSEFTX0RFQURMSU5FX0JJVCAtIGEgZmVuY2UgZGVhZGxpbmUgaGlu dCBoYXMgYmVlbiBzZXQNCj4gKyAqDQo+ICsgKiBTZXQgYnkgdGhlIGRlYWRsaW5lIGNhbGxiYWNr IG9uIHRoZSBmaW5pc2hlZCBmZW5jZSB0byBpbmRpY2F0ZSBhIGRlYWRsaW5lDQo+ICsgKiBoYXMg YmVlbiBzZXQgd2hpY2ggbWF5IG5lZWQgdG8gYmUgcHJvcGFnYXRlZCB0byB0aGUgcGFyZW50IGhh cmR3YXJlIGZlbmNlLg0KPiArICovDQo+ICsjZGVmaW5lIERSTV9ERVBfRkVOQ0VfRkxBR19IQVNf REVBRExJTkVfQklUICAgIChETUFfRkVOQ0VfRkxBR19VU0VSX0JJVFMgKyAxKQ0KPiArDQo+ICsv KioNCj4gKyAqIHN0cnVjdCBkcm1fZGVwX2ZlbmNlIC0gZmVuY2UgdHJhY2tpbmcgdGhlIGNvbXBs ZXRpb24gb2YgYSBkZXAgam9iDQo+ICsgKg0KPiArICogQ29udGFpbnMgYSBzaW5nbGUgZG1hX2Zl bmNlIChAZmluaXNoZWQpIHRoYXQgaXMgc2lnbmFsbGVkIHdoZW4gdGhlDQo+ICsgKiBoYXJkd2Fy ZSBjb21wbGV0ZXMgdGhlIGpvYi4gVGhlIGZlbmNlIHVzZXMgdGhlIGtlcm5lbCdzIGlubGluZV9s b2NrDQo+ICsgKiAobm8gZXh0ZXJuYWwgc3BpbmxvY2sgcmVxdWlyZWQpLg0KPiArICoNCj4gKyAq IFRoaXMgc3RydWN0IGlzIHByaXZhdGUgdG8gdGhlIGRybV9kZXAgbW9kdWxlOyBleHRlcm5hbCBj b2RlIGludGVyYWN0cw0KPiArICogdGhyb3VnaCB0aGUgYWNjZXNzb3IgZnVuY3Rpb25zIGRlY2xh cmVkIGluIGRybV9kZXBfZmVuY2UuaC4NCj4gKyAqLw0KPiArc3RydWN0IGRybV9kZXBfZmVuY2Ug ew0KPiArICAgICAgIC8qKg0KPiArICAgICAgICAqIEBmaW5pc2hlZDogc2lnbmFsbGVkIHdoZW4g dGhlIGpvYiBjb21wbGV0ZXMgb24gaGFyZHdhcmUuDQo+ICsgICAgICAgICoNCj4gKyAgICAgICAg KiBEcml2ZXJzIHNob3VsZCB1c2UgdGhpcyBmZW5jZSBhcyB0aGUgb3V0LWZlbmNlIGZvciBhIGpv YiBzaW5jZSBpdA0KPiArICAgICAgICAqIGlzIGF2YWlsYWJsZSBpbW1lZGlhdGVseSB1cG9uIGRy bV9kZXBfam9iX2FybSgpLg0KPiArICAgICAgICAqLw0KPiArICAgICAgIHN0cnVjdCBkbWFfZmVu Y2UgZmluaXNoZWQ7DQo+ICsNCj4gKyAgICAgICAvKioNCj4gKyAgICAgICAgKiBAZGVhZGxpbmU6 IGRlYWRsaW5lIHNldCBvbiBAZmluaXNoZWQgd2hpY2ggcG90ZW50aWFsbHkgbmVlZHMgdG8gYmUN Cj4gKyAgICAgICAgKiBwcm9wYWdhdGVkIHRvIEBwYXJlbnQuDQo+ICsgICAgICAgICovDQo+ICsg ICAgICAga3RpbWVfdCBkZWFkbGluZTsNCj4gKw0KPiArICAgICAgIC8qKg0KPiArICAgICAgICAq IEBwYXJlbnQ6IFRoZSBoYXJkd2FyZSBmZW5jZSByZXR1cm5lZCBieSAmZHJtX2RlcF9xdWV1ZV9v cHMucnVuX2pvYi4NCj4gKyAgICAgICAgKg0KPiArICAgICAgICAqIEBmaW5pc2hlZCBpcyBzaWdu YWxlZCBvbmNlIEBwYXJlbnQgaXMgc2lnbmFsZWQuIFRoZSBpbml0aWFsIHN0b3JlIGlzDQo+ICsg ICAgICAgICogcGVyZm9ybWVkIHZpYSBzbXBfc3RvcmVfcmVsZWFzZSB0byBzeW5jaHJvbml6ZSB3 aXRoIGRlYWRsaW5lIGhhbmRsaW5nLg0KPiArICAgICAgICAqDQo+ICsgICAgICAgICogQWxsIHJl YWRlcnMgbXVzdCBhY2Nlc3MgdGhpcyB1bmRlciB0aGUgZmVuY2UgbG9jayBhbmQgdGFrZSBhIHJl ZmVyZW5jZSB0bw0KPiArICAgICAgICAqIGl0LCBhcyBAcGFyZW50IGlzIHNldCB0byBOVUxMIHVu ZGVyIHRoZSBmZW5jZSBsb2NrIHdoZW4gdGhlIGRybV9kZXBfZmVuY2UNCj4gKyAgICAgICAgKiBz aWduYWxzLCBhbmQgdGhpcyBkcm9wIGFsc28gcmVsZWFzZXMgaXRzIGludGVybmFsIHJlZmVyZW5j ZS4NCj4gKyAgICAgICAgKi8NCj4gKyAgICAgICBzdHJ1Y3QgZG1hX2ZlbmNlICpwYXJlbnQ7DQo+ ICsNCj4gKyAgICAgICAvKioNCj4gKyAgICAgICAgKiBAcTogdGhlIHF1ZXVlIHRoaXMgZmVuY2Ug YmVsb25ncyB0by4NCj4gKyAgICAgICAgKi8NCj4gKyAgICAgICBzdHJ1Y3QgZHJtX2RlcF9xdWV1 ZSAqcTsNCj4gK307DQo+ICsNCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZG1hX2ZlbmNlX29wcyBk cm1fZGVwX2ZlbmNlX29wczsNCj4gKw0KPiArLyoqDQo+ICsgKiB0b19kcm1fZGVwX2ZlbmNlKCkg LSBjYXN0IGEgZG1hX2ZlbmNlIHRvIGl0cyBlbmNsb3NpbmcgZHJtX2RlcF9mZW5jZQ0KPiArICog QGY6IGRtYV9mZW5jZSB0byBjYXN0DQo+ICsgKg0KPiArICogQ29udGV4dDogTm8gY29udGV4dCBy ZXF1aXJlbWVudHMgKGlubGluZSBoZWxwZXIpLg0KPiArICogUmV0dXJuOiBwb2ludGVyIHRvIHRo ZSBlbmNsb3NpbmcgJmRybV9kZXBfZmVuY2UuDQo+ICsgKi8NCj4gK3N0YXRpYyBzdHJ1Y3QgZHJt X2RlcF9mZW5jZSAqdG9fZHJtX2RlcF9mZW5jZShzdHJ1Y3QgZG1hX2ZlbmNlICpmKQ0KPiArew0K PiArICAgICAgIHJldHVybiBjb250YWluZXJfb2YoZiwgc3RydWN0IGRybV9kZXBfZmVuY2UsIGZp bmlzaGVkKTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBkcm1fZGVwX2ZlbmNlX3NldF9wYXJl bnQoKSAtIHN0b3JlIHRoZSBoYXJkd2FyZSBmZW5jZSBhbmQgcHJvcGFnYXRlDQo+ICsgKiAgIGFu eSBkZWFkbGluZQ0KPiArICogQGRmZW5jZTogZGVwIGZlbmNlDQo+ICsgKiBAcGFyZW50OiBoYXJk d2FyZSBmZW5jZSByZXR1cm5lZCBieSAmZHJtX2RlcF9xdWV1ZV9vcHMucnVuX2pvYiwgb3IgTlVM TC9lcnJvcg0KPiArICoNCj4gKyAqIFN0b3JlcyBAcGFyZW50IG9uIEBkZmVuY2UgdW5kZXIgc21w X3N0b3JlX3JlbGVhc2UoKSBzbyB0aGF0IGEgY29uY3VycmVudA0KPiArICogZHJtX2RlcF9mZW5j ZV9zZXRfZGVhZGxpbmUoKSBjYWxsIHNlZXMgdGhlIHBhcmVudCBiZWZvcmUgY2hlY2tpbmcgdGhl DQo+ICsgKiBkZWFkbGluZSBiaXQuIElmIGEgZGVhZGxpbmUgaGFzIGFscmVhZHkgYmVlbiBzZXQg b24gQGRmZW5jZS0+ZmluaXNoZWQgaXQgaXMNCj4gKyAqIGZvcndhcmRlZCB0byBAcGFyZW50IGlt bWVkaWF0ZWx5LiBEb2VzIG5vdGhpbmcgaWYgQHBhcmVudCBpcyBOVUxMIG9yIGFuDQo+ICsgKiBl cnJvciBwb2ludGVyLg0KPiArICoNCj4gKyAqIENvbnRleHQ6IEFueSBjb250ZXh0Lg0KPiArICov DQo+ICt2b2lkIGRybV9kZXBfZmVuY2Vfc2V0X3BhcmVudChzdHJ1Y3QgZHJtX2RlcF9mZW5jZSAq ZGZlbmNlLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZG1hX2ZlbmNl ICpwYXJlbnQpDQo+ICt7DQo+ICsgICAgICAgaWYgKElTX0VSUl9PUl9OVUxMKHBhcmVudCkpDQo+ ICsgICAgICAgICAgICAgICByZXR1cm47DQo+ICsNCj4gKyAgICAgICAvKg0KPiArICAgICAgICAq IHNtcF9zdG9yZV9yZWxlYXNlKCkgdG8gZW5zdXJlIGEgdGhyZWFkIHJhY2luZyB1cyBpbg0KPiAr ICAgICAgICAqIGRybV9kZXBfZmVuY2Vfc2V0X2RlYWRsaW5lKCkgc2VlcyB0aGUgcGFyZW50IHNl dCBiZWZvcmUNCj4gKyAgICAgICAgKiBpdCBjYWxscyB0ZXN0X2JpdChIQVNfREVBRExJTkVfQklU KS4NCj4gKyAgICAgICAgKi8NCj4gKyAgICAgICBzbXBfc3RvcmVfcmVsZWFzZSgmZGZlbmNlLT5w YXJlbnQsIGRtYV9mZW5jZV9nZXQocGFyZW50KSk7DQo+ICsgICAgICAgaWYgKHRlc3RfYml0KERS TV9ERVBfRkVOQ0VfRkxBR19IQVNfREVBRExJTkVfQklULA0KPiArICAgICAgICAgICAgICAgICAg ICAmZGZlbmNlLT5maW5pc2hlZC5mbGFncykpDQo+ICsgICAgICAgICAgICAgICBkbWFfZmVuY2Vf c2V0X2RlYWRsaW5lKHBhcmVudCwgZGZlbmNlLT5kZWFkbGluZSk7DQo+ICt9DQo+ICsNCj4gKy8q Kg0KPiArICogZHJtX2RlcF9mZW5jZV9maW5pc2hlZCgpIC0gc2lnbmFsIHRoZSBmaW5pc2hlZCBm ZW5jZSB3aXRoIGEgcmVzdWx0DQo+ICsgKiBAZGZlbmNlOiBkZXAgZmVuY2UgdG8gc2lnbmFsDQo+ ICsgKiBAcmVzdWx0OiBlcnJvciBjb2RlIHRvIHNldCwgb3IgMCBmb3Igc3VjY2Vzcw0KPiArICoN Cj4gKyAqIFNldHMgdGhlIGZlbmNlIGVycm9yIHRvIEByZXN1bHQgaWYgbm9uLXplcm8sIHRoZW4g c2lnbmFscw0KPiArICogQGRmZW5jZS0+ZmluaXNoZWQuIEFsc28gcmVtb3ZlcyBwYXJlbnQgdmlz aWJpbGl0eSB1bmRlciB0aGUgZmVuY2UgbG9jaw0KPiArICogYW5kIGRyb3BzIHRoZSBwYXJlbnQg cmVmZXJlbmNlLiBEcm9wcGluZyB0aGUgcGFyZW50IGhlcmUgYWxsb3dzIHRoZQ0KPiArICogRFJN IGRlcCBmZW5jZSB0byBiZSBjb21wbGV0ZWx5IGRlY291cGxlZCBmcm9tIHRoZSBEUk0gZGVwIG1v ZHVsZS4NCj4gKyAqDQo+ICsgKiBDb250ZXh0OiBBbnkgY29udGV4dC4NCj4gKyAqLw0KPiArc3Rh dGljIHZvaWQgZHJtX2RlcF9mZW5jZV9maW5pc2hlZChzdHJ1Y3QgZHJtX2RlcF9mZW5jZSAqZGZl bmNlLCBpbnQgcmVzdWx0KQ0KPiArew0KPiArICAgICAgIHN0cnVjdCBkbWFfZmVuY2UgKnBhcmVu dDsNCj4gKyAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOw0KPiArDQo+ICsgICAgICAgZG1hX2Zl bmNlX2xvY2tfaXJxc2F2ZSgmZGZlbmNlLT5maW5pc2hlZCwgZmxhZ3MpOw0KPiArICAgICAgIGlm IChyZXN1bHQpDQo+ICsgICAgICAgICAgICAgICBkbWFfZmVuY2Vfc2V0X2Vycm9yKCZkZmVuY2Ut PmZpbmlzaGVkLCByZXN1bHQpOw0KPiArICAgICAgIGRtYV9mZW5jZV9zaWduYWxfbG9ja2VkKCZk ZmVuY2UtPmZpbmlzaGVkKTsNCj4gKyAgICAgICBwYXJlbnQgPSBkZmVuY2UtPnBhcmVudDsNCj4g KyAgICAgICBkZmVuY2UtPnBhcmVudCA9IE5VTEw7DQo+ICsgICAgICAgZG1hX2ZlbmNlX3VubG9j a19pcnFyZXN0b3JlKCZkZmVuY2UtPmZpbmlzaGVkLCBmbGFncyk7DQo+ICsNCj4gKyAgICAgICBk bWFfZmVuY2VfcHV0KHBhcmVudCk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBjb25zdCBjaGFyICpk cm1fZGVwX2ZlbmNlX2dldF9kcml2ZXJfbmFtZShzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSkNCj4g K3sNCj4gKyAgICAgICByZXR1cm4gImRybV9kZXAiOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgY29u c3QgY2hhciAqZHJtX2RlcF9mZW5jZV9nZXRfdGltZWxpbmVfbmFtZShzdHJ1Y3QgZG1hX2ZlbmNl ICpmKQ0KPiArew0KPiArICAgICAgIHN0cnVjdCBkcm1fZGVwX2ZlbmNlICpkZmVuY2UgPSB0b19k cm1fZGVwX2ZlbmNlKGYpOw0KPiArDQo+ICsgICAgICAgcmV0dXJuIGRmZW5jZS0+cS0+bmFtZTsN Cj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBkcm1fZGVwX2ZlbmNlX2dldF9wYXJlbnQoKSAtIGdl dCBhIHJlZmVyZW5jZSB0byB0aGUgcGFyZW50IGhhcmR3YXJlIGZlbmNlDQo+ICsgKiBAZGZlbmNl OiBkZXAgZmVuY2UgdG8gcXVlcnkNCj4gKyAqDQo+ICsgKiBSZXR1cm5zIGEgbmV3IHJlZmVyZW5j ZSB0byBAZGZlbmNlLT5wYXJlbnQsIG9yIE5VTEwgaWYgdGhlIHBhcmVudCBoYXMNCj4gKyAqIGFs cmVhZHkgYmVlbiBjbGVhcmVkIChpLmUuIEBkZmVuY2UtPmZpbmlzaGVkIGhhcyBzaWduYWxsZWQg YW5kIHRoZSBwYXJlbnQNCj4gKyAqIHJlZmVyZW5jZSB3YXMgZHJvcHBlZCB1bmRlciB0aGUgZmVu Y2UgbG9jaykuDQo+ICsgKg0KPiArICogVXNlcyBzbXBfbG9hZF9hY3F1aXJlKCkgdG8gcGFpciB3 aXRoIHRoZSBzbXBfc3RvcmVfcmVsZWFzZSgpIGluDQo+ICsgKiBkcm1fZGVwX2ZlbmNlX3NldF9w YXJlbnQoKSwgZW5zdXJpbmcgdGhhdCBpZiB3ZSByYWNlIGEgY29uY3VycmVudA0KPiArICogZHJt X2RlcF9mZW5jZV9zZXRfcGFyZW50KCkgY2FsbCB3ZSBvYnNlcnZlIHRoZSBwYXJlbnQgcG9pbnRl ciBvbmx5IGFmdGVyDQo+ICsgKiB0aGUgc3RvcmUgaXMgZnVsbHkgdmlzaWJsZSDigJQgYmVmb3Jl IHNldF9wYXJlbnQoKSB0ZXN0cw0KPiArICogJURSTV9ERVBfRkVOQ0VfRkxBR19IQVNfREVBRExJ TkVfQklULg0KPiArICoNCj4gKyAqIENhbGxlciBtdXN0IGhvbGQgdGhlIGZlbmNlIGxvY2sgb24g QGRmZW5jZS0+ZmluaXNoZWQuDQo+ICsgKg0KPiArICogQ29udGV4dDogQW55IGNvbnRleHQsIGZl bmNlIGxvY2sgb24gQGRmZW5jZS0+ZmluaXNoZWQgbXVzdCBiZSBoZWxkLg0KPiArICogUmV0dXJu OiBhIG5ldyByZWZlcmVuY2UgdG8gdGhlIHBhcmVudCBmZW5jZSwgb3IgTlVMTC4NCj4gKyAqLw0K PiArc3RhdGljIHN0cnVjdCBkbWFfZmVuY2UgKmRybV9kZXBfZmVuY2VfZ2V0X3BhcmVudChzdHJ1 Y3QgZHJtX2RlcF9mZW5jZSAqZGZlbmNlKQ0KPiArew0KPiArICAgICAgIGRtYV9mZW5jZV9hc3Nl cnRfaGVsZCgmZGZlbmNlLT5maW5pc2hlZCk7DQo+ICsNCj4gKyAgICAgICByZXR1cm4gZG1hX2Zl bmNlX2dldChzbXBfbG9hZF9hY3F1aXJlKCZkZmVuY2UtPnBhcmVudCkpOw0KPiArfQ0KPiArDQo+ ICsvKioNCj4gKyAqIGRybV9kZXBfZmVuY2Vfc2V0X2RlYWRsaW5lKCkgLSBkbWFfZmVuY2Vfb3Bz IGRlYWRsaW5lIGNhbGxiYWNrDQo+ICsgKiBAZjogZmVuY2Ugb24gd2hpY2ggdGhlIGRlYWRsaW5l IGlzIGJlaW5nIHNldA0KPiArICogQGRlYWRsaW5lOiB0aGUgZGVhZGxpbmUgaGludCB0byBhcHBs eQ0KPiArICoNCj4gKyAqIFN0b3JlcyB0aGUgZWFybGllc3QgZGVhZGxpbmUgdW5kZXIgdGhlIGZl bmNlIGxvY2ssIHRoZW4gcHJvcGFnYXRlcw0KPiArICogaXQgdG8gdGhlIHBhcmVudCBoYXJkd2Fy ZSBmZW5jZSB2aWEgc21wX2xvYWRfYWNxdWlyZSgpIHRvIHJhY2UNCj4gKyAqIHNhZmVseSB3aXRo IGRybV9kZXBfZmVuY2Vfc2V0X3BhcmVudCgpLg0KPiArICoNCj4gKyAqIENvbnRleHQ6IEFueSBj b250ZXh0Lg0KPiArICovDQo+ICtzdGF0aWMgdm9pZCBkcm1fZGVwX2ZlbmNlX3NldF9kZWFkbGlu ZShzdHJ1Y3QgZG1hX2ZlbmNlICpmLCBrdGltZV90IGRlYWRsaW5lKQ0KPiArew0KPiArICAgICAg IHN0cnVjdCBkcm1fZGVwX2ZlbmNlICpkZmVuY2UgPSB0b19kcm1fZGVwX2ZlbmNlKGYpOw0KPiAr ICAgICAgIHN0cnVjdCBkbWFfZmVuY2UgKnBhcmVudDsNCj4gKyAgICAgICB1bnNpZ25lZCBsb25n IGZsYWdzOw0KPiArDQo+ICsgICAgICAgZG1hX2ZlbmNlX2xvY2tfaXJxc2F2ZShmLCBmbGFncyk7 DQo+ICsNCj4gKyAgICAgICAvKiBJZiB3ZSBhbHJlYWR5IGhhdmUgYW4gZWFybGllciBkZWFkbGlu ZSwga2VlcCBpdDogKi8NCj4gKyAgICAgICBpZiAodGVzdF9iaXQoRFJNX0RFUF9GRU5DRV9GTEFH X0hBU19ERUFETElORV9CSVQsICZmLT5mbGFncykgJiYNCj4gKyAgICAgICAgICAga3RpbWVfYmVm b3JlKGRmZW5jZS0+ZGVhZGxpbmUsIGRlYWRsaW5lKSkgew0KPiArICAgICAgICAgICAgICAgZG1h X2ZlbmNlX3VubG9ja19pcnFyZXN0b3JlKGYsIGZsYWdzKTsNCj4gKyAgICAgICAgICAgICAgIHJl dHVybjsNCj4gKyAgICAgICB9DQo+ICsNCj4gKyAgICAgICBkZmVuY2UtPmRlYWRsaW5lID0gZGVh ZGxpbmU7DQo+ICsgICAgICAgc2V0X2JpdChEUk1fREVQX0ZFTkNFX0ZMQUdfSEFTX0RFQURMSU5F X0JJVCwgJmYtPmZsYWdzKTsNCj4gKw0KPiArICAgICAgIHBhcmVudCA9IGRybV9kZXBfZmVuY2Vf Z2V0X3BhcmVudChkZmVuY2UpOw0KPiArICAgICAgIGRtYV9mZW5jZV91bmxvY2tfaXJxcmVzdG9y ZShmLCBmbGFncyk7DQo+ICsNCj4gKyAgICAgICBpZiAocGFyZW50KQ0KPiArICAgICAgICAgICAg ICAgZG1hX2ZlbmNlX3NldF9kZWFkbGluZShwYXJlbnQsIGRlYWRsaW5lKTsNCj4gKw0KPiArICAg ICAgIGRtYV9mZW5jZV9wdXQocGFyZW50KTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGNvbnN0IHN0 cnVjdCBkbWFfZmVuY2Vfb3BzIGRybV9kZXBfZmVuY2Vfb3BzID0gew0KPiArICAgICAgIC5nZXRf ZHJpdmVyX25hbWUgPSBkcm1fZGVwX2ZlbmNlX2dldF9kcml2ZXJfbmFtZSwNCj4gKyAgICAgICAu Z2V0X3RpbWVsaW5lX25hbWUgPSBkcm1fZGVwX2ZlbmNlX2dldF90aW1lbGluZV9uYW1lLA0KPiAr ICAgICAgIC5zZXRfZGVhZGxpbmUgPSBkcm1fZGVwX2ZlbmNlX3NldF9kZWFkbGluZSwNCj4gK307 DQo+ICsNCj4gKy8qKg0KPiArICogZHJtX2RlcF9mZW5jZV9hbGxvYygpIC0gYWxsb2NhdGUgYSBk ZXAgZmVuY2UNCj4gKyAqDQo+ICsgKiBBbGxvY2F0ZXMgYSAmZHJtX2RlcF9mZW5jZSB3aXRoIGt6 YWxsb2MoKSB3aXRob3V0IGluaXRpYWxpc2luZyB0aGUNCj4gKyAqIGRtYV9mZW5jZS4gQ2FsbCBk cm1fZGVwX2ZlbmNlX2luaXQoKSB0byBmdWxseSBpbml0aWFsaXNlIGl0Lg0KPiArICoNCj4gKyAq IENvbnRleHQ6IFByb2Nlc3MgY29udGV4dC4NCj4gKyAqIFJldHVybjogbmV3ICZkcm1fZGVwX2Zl bmNlIG9uIHN1Y2Nlc3MsIE5VTEwgb24gYWxsb2NhdGlvbiBmYWlsdXJlLg0KPiArICovDQo+ICtz dHJ1Y3QgZHJtX2RlcF9mZW5jZSAqZHJtX2RlcF9mZW5jZV9hbGxvYyh2b2lkKQ0KPiArew0KPiAr ICAgICAgIHJldHVybiBremFsbG9jX29iaihzdHJ1Y3QgZHJtX2RlcF9mZW5jZSk7DQo+ICt9DQo+ ICsNCj4gKy8qKg0KPiArICogZHJtX2RlcF9mZW5jZV9pbml0KCkgLSBpbml0aWFsaXNlIHRoZSBk bWFfZmVuY2UgaW5zaWRlIGEgZGVwIGZlbmNlDQo+ICsgKiBAZGZlbmNlOiBkZXAgZmVuY2UgdG8g aW5pdGlhbGlzZQ0KPiArICogQHE6IHF1ZXVlIHRoZSBvd25pbmcgam9iIGJlbG9uZ3MgdG8NCj4g KyAqDQo+ICsgKiBJbml0aWFsaXNlcyBAZGZlbmNlLT5maW5pc2hlZCB1c2luZyB0aGUgY29udGV4 dCBhbmQgc2VxdWVuY2UgbnVtYmVyIGZyb20gQHEuDQo+ICsgKiBQYXNzZXMgTlVMTCBhcyB0aGUg bG9jayBzbyB0aGUgZmVuY2UgdXNlcyBpdHMgaW5saW5lIHNwaW5sb2NrLg0KPiArICoNCj4gKyAq IENvbnRleHQ6IEFueSBjb250ZXh0Lg0KPiArICovDQo+ICt2b2lkIGRybV9kZXBfZmVuY2VfaW5p dChzdHJ1Y3QgZHJtX2RlcF9mZW5jZSAqZGZlbmNlLCBzdHJ1Y3QgZHJtX2RlcF9xdWV1ZSAqcSkN Cj4gK3sNCj4gKyAgICAgICB1MzIgc2VxID0gKytxLT5mZW5jZS5zZXFubzsNCj4gKw0KPiArICAg ICAgIC8qDQo+ICsgICAgICAgICogWFhYOiBJbmxpbmUgZmVuY2UgaGF6YXJkOiBjdXJyZW50bHkg YWxsIGV4cGVjdGVkIHVzZXJzIG9mIERSTSBkZXANCj4gKyAgICAgICAgKiBoYXJkd2FyZSBmZW5j ZXMgaGF2ZSBhIHVuaXF1ZSBsb2NrZGVwIGNsYXNzLiBJZiB0aGF0IGV2ZXIgY2hhbmdlcywNCj4g KyAgICAgICAgKiB3ZSB3aWxsIG5lZWQgdG8gYXNzaWduIGEgdW5pcXVlIGxvY2tkZXAgY2xhc3Mg aGVyZSBzbyBsb2NrZGVwIGtub3dzDQo+ICsgICAgICAgICogdGhpcyBmZW5jZSBpcyBhbGxvd2Vk IHRvIG5lc3Qgd2l0aCBkcml2ZXIgaGFyZHdhcmUgZmVuY2VzLg0KPiArICAgICAgICAqLw0KPiAr DQo+ICsgICAgICAgZGZlbmNlLT5xID0gcTsNCj4gKyAgICAgICBkbWFfZmVuY2VfaW5pdCgmZGZl bmNlLT5maW5pc2hlZCwgJmRybV9kZXBfZmVuY2Vfb3BzLA0KPiArICAgICAgICAgICAgICAgICAg ICAgIE5VTEwsIHEtPmZlbmNlLmNvbnRleHQsIHNlcSk7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiAr ICogZHJtX2RlcF9mZW5jZV9jbGVhbnVwKCkgLSByZWxlYXNlIGEgZGVwIGZlbmNlIGF0IGpvYiB0 ZWFyZG93bg0KPiArICogQGRmZW5jZTogZGVwIGZlbmNlIHRvIGNsZWFuIHVwDQo+ICsgKg0KPiAr ICogQ2FsbGVkIGZyb20gZHJtX2RlcF9qb2JfZmluaSgpLiBJZiB0aGUgZGVwIGZlbmNlIHdhcyBh cm1lZCAocmVmY291bnQgPiAwKQ0KPiArICogaXQgaXMgcmVsZWFzZWQgdmlhIGRtYV9mZW5jZV9w dXQoKSBhbmQgd2lsbCBiZSBmcmVlZCBieSB0aGUgUkNVIHJlbGVhc2UNCj4gKyAqIGNhbGxiYWNr IG9uY2UgYWxsIHdhaXRlcnMgaGF2ZSBkcm9wcGVkIHRoZWlyIHJlZmVyZW5jZXMuIElmIGl0IHdh cyBuZXZlcg0KPiArICogYXJtZWQgaXQgaXMgZnJlZWQgZGlyZWN0bHkgd2l0aCBrZnJlZSgpLg0K PiArICoNCj4gKyAqIENvbnRleHQ6IEFueSBjb250ZXh0Lg0KPiArICovDQo+ICt2b2lkIGRybV9k ZXBfZmVuY2VfY2xlYW51cChzdHJ1Y3QgZHJtX2RlcF9mZW5jZSAqZGZlbmNlKQ0KPiArew0KPiAr ICAgICAgIGlmIChkcm1fZGVwX2ZlbmNlX2lzX2FybWVkKGRmZW5jZSkpDQo+ICsgICAgICAgICAg ICAgICBkbWFfZmVuY2VfcHV0KCZkZmVuY2UtPmZpbmlzaGVkKTsNCj4gKyAgICAgICBlbHNlDQo+ ICsgICAgICAgICAgICAgICBrZnJlZShkZmVuY2UpOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAq IGRybV9kZXBfZmVuY2VfaXNfYXJtZWQoKSAtIGNoZWNrIHdoZXRoZXIgdGhlIGZlbmNlIGhhcyBi ZWVuIGFybWVkDQo+ICsgKiBAZGZlbmNlOiBkZXAgZmVuY2UgdG8gY2hlY2sNCj4gKyAqDQo+ICsg KiBSZXR1cm5zIHRydWUgaWYgZHJtX2RlcF9qb2JfYXJtKCkgaGFzIGJlZW4gY2FsbGVkLCBpLmUu IEBkZmVuY2UtPmZpbmlzaGVkDQo+ICsgKiBoYXMgYmVlbiBpbml0aWFsaXNlZCBhbmQgaXRzIHJl ZmVyZW5jZSBjb3VudCBpcyBub24temVyby4gIFVzZWQgYnkNCj4gKyAqIGFzc2VydGlvbnMgdG8g ZW5mb3JjZSBjb3JyZWN0IGpvYiBsaWZlY3ljbGUgb3JkZXJpbmcgKGFybSBiZWZvcmUgcHVzaCwN Cj4gKyAqIGFkZF9kZXBlbmRlbmN5IGJlZm9yZSBhcm0pLg0KPiArICoNCj4gKyAqIENvbnRleHQ6 IEFueSBjb250ZXh0Lg0KPiArICogUmV0dXJuOiB0cnVlIGlmIHRoZSBmZW5jZSBpcyBhcm1lZCwg ZmFsc2Ugb3RoZXJ3aXNlLg0KPiArICovDQo+ICtib29sIGRybV9kZXBfZmVuY2VfaXNfYXJtZWQo c3RydWN0IGRybV9kZXBfZmVuY2UgKmRmZW5jZSkNCj4gK3sNCj4gKyAgICAgICByZXR1cm4gISFr cmVmX3JlYWQoJmRmZW5jZS0+ZmluaXNoZWQucmVmY291bnQpOw0KPiArfQ0KPiArDQo+ICsvKioN Cj4gKyAqIGRybV9kZXBfZmVuY2VfaXNfZmluaXNoZWQoKSAtIHRlc3Qgd2hldGhlciB0aGUgZmlu aXNoZWQgZmVuY2UgaGFzIHNpZ25hbGxlZA0KPiArICogQGRmZW5jZTogZGVwIGZlbmNlIHRvIGNo ZWNrDQo+ICsgKg0KPiArICogVXNlcyBkbWFfZmVuY2VfdGVzdF9zaWduYWxlZF9mbGFnKCkgdG8g cmVhZCAlRE1BX0ZFTkNFX0ZMQUdfU0lHTkFMRURfQklUDQo+ICsgKiBkaXJlY3RseSB3aXRob3V0 IGludm9raW5nIHRoZSBmZW5jZSdzIC0+c2lnbmFsZWQoKSBjYWxsYmFjayBvciB0cmlnZ2VyaW5n DQo+ICsgKiBhbnkgc2lnbmFsbGluZyBzaWRlLWVmZmVjdHMuDQo+ICsgKg0KPiArICogQ29udGV4 dDogQW55IGNvbnRleHQuDQo+ICsgKiBSZXR1cm46IHRydWUgaWYgQGRmZW5jZS0+ZmluaXNoZWQg aGFzIGJlZW4gc2lnbmFsbGVkLCBmYWxzZSBvdGhlcndpc2UuDQo+ICsgKi8NCj4gK2Jvb2wgZHJt X2RlcF9mZW5jZV9pc19maW5pc2hlZChzdHJ1Y3QgZHJtX2RlcF9mZW5jZSAqZGZlbmNlKQ0KPiAr ew0KPiArICAgICAgIHJldHVybiBkbWFfZmVuY2VfdGVzdF9zaWduYWxlZF9mbGFnKCZkZmVuY2Ut PmZpbmlzaGVkKTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBkcm1fZGVwX2ZlbmNlX2lzX2Nv bXBsZXRlKCkgLSB0ZXN0IHdoZXRoZXIgdGhlIGpvYiBoYXMgY29tcGxldGVkDQo+ICsgKiBAZGZl bmNlOiBkZXAgZmVuY2UgdG8gY2hlY2sNCj4gKyAqDQo+ICsgKiBUYWtlcyB0aGUgZmVuY2UgbG9j ayBvbiBAZGZlbmNlLT5maW5pc2hlZCBhbmQgY2FsbHMNCj4gKyAqIGRybV9kZXBfZmVuY2VfZ2V0 X3BhcmVudCgpIHRvIHNhZmVseSBvYnRhaW4gYSByZWZlcmVuY2UgdG8gdGhlIHBhcmVudA0KPiAr ICogaGFyZHdhcmUgZmVuY2Ug4oCUIG9yIE5VTEwgaWYgdGhlIHBhcmVudCBoYXMgYWxyZWFkeSBi ZWVuIGNsZWFyZWQgYWZ0ZXINCj4gKyAqIHNpZ25hbGxpbmcuICBDYWxscyBkbWFfZmVuY2VfaXNf c2lnbmFsZWQoKSBvbiBAcGFyZW50IG91dHNpZGUgdGhlIGxvY2ssDQo+ICsgKiB3aGljaCBtYXkg aW52b2tlIHRoZSBmZW5jZSdzIC0+c2lnbmFsZWQoKSBjYWxsYmFjayBhbmQgdHJpZ2dlciBzaWdu YWxsaW5nDQo+ICsgKiBzaWRlLWVmZmVjdHMgaWYgdGhlIGZlbmNlIGhhcyBjb21wbGV0ZWQgYnV0 IHRoZSBzaWduYWxsZWQgZmxhZyBoYXMgbm90IHlldA0KPiArICogYmVlbiBzZXQuICBUaGUgZmlu aXNoZWQgZmVuY2UgaXMgdGVzdGVkIHZpYSBkbWFfZmVuY2VfdGVzdF9zaWduYWxlZF9mbGFnKCks DQo+ICsgKiB3aXRob3V0IHNpZGUtZWZmZWN0cy4NCj4gKyAqDQo+ICsgKiBNYXkgb25seSBiZSBj YWxsZWQgb24gYSBzdG9wcGVkIHF1ZXVlIChzZWUgZHJtX2RlcF9xdWV1ZV9pc19zdG9wcGVkKCkp Lg0KPiArICoNCj4gKyAqIENvbnRleHQ6IFByb2Nlc3MgY29udGV4dC4gVGhlIHF1ZXVlIG11c3Qg YmUgc3RvcHBlZCBiZWZvcmUgY2FsbGluZyB0aGlzLg0KPiArICogUmV0dXJuOiB0cnVlIGlmIHRo ZSBqb2IgaXMgY29tcGxldGUsIGZhbHNlIG90aGVyd2lzZS4NCj4gKyAqLw0KPiArYm9vbCBkcm1f ZGVwX2ZlbmNlX2lzX2NvbXBsZXRlKHN0cnVjdCBkcm1fZGVwX2ZlbmNlICpkZmVuY2UpDQo+ICt7 DQo+ICsgICAgICAgc3RydWN0IGRtYV9mZW5jZSAqcGFyZW50Ow0KPiArICAgICAgIHVuc2lnbmVk IGxvbmcgZmxhZ3M7DQo+ICsgICAgICAgYm9vbCBjb21wbGV0ZTsNCj4gKw0KPiArICAgICAgIGRt YV9mZW5jZV9sb2NrX2lycXNhdmUoJmRmZW5jZS0+ZmluaXNoZWQsIGZsYWdzKTsNCj4gKyAgICAg ICBwYXJlbnQgPSBkcm1fZGVwX2ZlbmNlX2dldF9wYXJlbnQoZGZlbmNlKTsNCj4gKyAgICAgICBk bWFfZmVuY2VfdW5sb2NrX2lycXJlc3RvcmUoJmRmZW5jZS0+ZmluaXNoZWQsIGZsYWdzKTsNCj4g Kw0KPiArICAgICAgIGNvbXBsZXRlID0gKHBhcmVudCAmJiBkbWFfZmVuY2VfaXNfc2lnbmFsZWQo cGFyZW50KSkgfHwNCj4gKyAgICAgICAgICAgICAgIGRtYV9mZW5jZV90ZXN0X3NpZ25hbGVkX2Zs YWcoJmRmZW5jZS0+ZmluaXNoZWQpOw0KPiArDQo+ICsgICAgICAgZG1hX2ZlbmNlX3B1dChwYXJl bnQpOw0KPiArDQo+ICsgICAgICAgcmV0dXJuIGNvbXBsZXRlOw0KPiArfQ0KPiArDQo+ICsvKioN Cj4gKyAqIGRybV9kZXBfZmVuY2VfdG9fZG1hKCkgLSByZXR1cm4gdGhlIGZpbmlzaGVkIGRtYV9m ZW5jZSBmb3IgYSBkZXAgZmVuY2UNCj4gKyAqIEBkZmVuY2U6IGRlcCBmZW5jZSB0byBxdWVyeQ0K PiArICoNCj4gKyAqIE5vIHJlZmVyZW5jZSBpcyB0YWtlbjsgdGhlIGNhbGxlciBtdXN0IGhvbGQg aXRzIG93biByZWZlcmVuY2UgdG8gdGhlIG93bmluZw0KPiArICogJmRybV9kZXBfam9iIGZvciB0 aGUgZHVyYXRpb24gb2YgdGhlIGFjY2Vzcy4NCj4gKyAqDQo+ICsgKiBDb250ZXh0OiBBbnkgY29u dGV4dC4NCj4gKyAqIFJldHVybjogdGhlIGZpbmlzaGVkICZkbWFfZmVuY2UuDQo+ICsgKi8NCj4g K3N0cnVjdCBkbWFfZmVuY2UgKmRybV9kZXBfZmVuY2VfdG9fZG1hKHN0cnVjdCBkcm1fZGVwX2Zl bmNlICpkZmVuY2UpDQo+ICt7DQo+ICsgICAgICAgcmV0dXJuICZkZmVuY2UtPmZpbmlzaGVkOw0K PiArfQ0KPiArDQo+ICsvKioNCj4gKyAqIGRybV9kZXBfZmVuY2VfZG9uZSgpIC0gc2lnbmFsIHRo ZSBmaW5pc2hlZCBmZW5jZSBvbiBqb2IgY29tcGxldGlvbg0KPiArICogQGRmZW5jZTogZGVwIGZl bmNlIHRvIHNpZ25hbA0KPiArICogQHJlc3VsdDogam9iIGVycm9yIGNvZGUsIG9yIDAgb24gc3Vj Y2Vzcw0KPiArICoNCj4gKyAqIEdldHMgYSB0ZW1wb3JhcnkgcmVmZXJlbmNlIHRvIEBkZmVuY2Ut PmZpbmlzaGVkIHRvIGd1YXJkIGFnYWluc3QgYSByYWNpbmcNCj4gKyAqIGxhc3QtcHV0LCBzaWdu YWxzIHRoZSBmZW5jZSB3aXRoIEByZXN1bHQsIHRoZW4gZHJvcHMgdGhlIHRlbXBvcmFyeQ0KPiAr ICogcmVmZXJlbmNlLiBDYWxsZWQgZnJvbSBkcm1fZGVwX2pvYl9kb25lKCkgaW4gdGhlIHF1ZXVl IGNvcmUgd2hlbiBhDQo+ICsgKiBoYXJkd2FyZSBjb21wbGV0aW9uIGNhbGxiYWNrIGZpcmVzIG9y IHdoZW4gcnVuX2pvYigpIHJldHVybnMgaW1tZWRpYXRlbHkuDQo+ICsgKg0KPiArICogQ29udGV4 dDogQW55IGNvbnRleHQuDQo+ICsgKi8NCj4gK3ZvaWQgZHJtX2RlcF9mZW5jZV9kb25lKHN0cnVj dCBkcm1fZGVwX2ZlbmNlICpkZmVuY2UsIGludCByZXN1bHQpDQo+ICt7DQo+ICsgICAgICAgZG1h X2ZlbmNlX2dldCgmZGZlbmNlLT5maW5pc2hlZCk7DQo+ICsgICAgICAgZHJtX2RlcF9mZW5jZV9m aW5pc2hlZChkZmVuY2UsIHJlc3VsdCk7DQo+ICsgICAgICAgZG1hX2ZlbmNlX3B1dCgmZGZlbmNl LT5maW5pc2hlZCk7DQo+ICt9DQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZGVwL2Ry bV9kZXBfZmVuY2UuaCBiL2RyaXZlcnMvZ3B1L2RybS9kZXAvZHJtX2RlcF9mZW5jZS5oDQo+IG5l dyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAwMC4uNjVhMTU4MmY4NThiDQo+ IC0tLSAvZGV2L251bGwNCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2RlcC9kcm1fZGVwX2ZlbmNl LmgNCj4gQEAgLTAsMCArMSwyNSBAQA0KPiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1J VCAqLw0KPiArLyoNCj4gKyAqIENvcHlyaWdodCDCqSAyMDI2IEludGVsIENvcnBvcmF0aW9uDQo+ ICsgKi8NCj4gKw0KPiArI2lmbmRlZiBfRFJNX0RFUF9GRU5DRV9IXw0KPiArI2RlZmluZSBfRFJN X0RFUF9GRU5DRV9IXw0KPiArDQo+ICsjaW5jbHVkZSA8bGludXgvZG1hLWZlbmNlLmg+DQo+ICsN Cj4gK3N0cnVjdCBkcm1fZGVwX2ZlbmNlOw0KPiArc3RydWN0IGRybV9kZXBfcXVldWU7DQo+ICsN Cj4gK3N0cnVjdCBkcm1fZGVwX2ZlbmNlICpkcm1fZGVwX2ZlbmNlX2FsbG9jKHZvaWQpOw0KPiAr dm9pZCBkcm1fZGVwX2ZlbmNlX2luaXQoc3RydWN0IGRybV9kZXBfZmVuY2UgKmRmZW5jZSwgc3Ry dWN0IGRybV9kZXBfcXVldWUgKnEpOw0KPiArdm9pZCBkcm1fZGVwX2ZlbmNlX2NsZWFudXAoc3Ry dWN0IGRybV9kZXBfZmVuY2UgKmRmZW5jZSk7DQo+ICt2b2lkIGRybV9kZXBfZmVuY2Vfc2V0X3Bh cmVudChzdHJ1Y3QgZHJtX2RlcF9mZW5jZSAqZGZlbmNlLA0KPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzdHJ1Y3QgZG1hX2ZlbmNlICpwYXJlbnQpOw0KPiArdm9pZCBkcm1fZGVwX2Zl bmNlX2RvbmUoc3RydWN0IGRybV9kZXBfZmVuY2UgKmRmZW5jZSwgaW50IHJlc3VsdCk7DQo+ICti b29sIGRybV9kZXBfZmVuY2VfaXNfYXJtZWQoc3RydWN0IGRybV9kZXBfZmVuY2UgKmRmZW5jZSk7 DQo+ICtib29sIGRybV9kZXBfZmVuY2VfaXNfZmluaXNoZWQoc3RydWN0IGRybV9kZXBfZmVuY2Ug KmRmZW5jZSk7DQo+ICtib29sIGRybV9kZXBfZmVuY2VfaXNfY29tcGxldGUoc3RydWN0IGRybV9k ZXBfZmVuY2UgKmRmZW5jZSk7DQo+ICtzdHJ1Y3QgZG1hX2ZlbmNlICpkcm1fZGVwX2ZlbmNlX3Rv X2RtYShzdHJ1Y3QgZHJtX2RlcF9mZW5jZSAqZGZlbmNlKTsNCj4gKw0KPiArI2VuZGlmIC8qIF9E Uk1fREVQX0ZFTkNFX0hfICovDQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZGVwL2Ry bV9kZXBfam9iLmMgYi9kcml2ZXJzL2dwdS9kcm0vZGVwL2RybV9kZXBfam9iLmMNCj4gbmV3IGZp bGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMDAwLi4yZDAxMmIyOWE1ZmMNCj4gLS0t IC9kZXYvbnVsbA0KPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vZGVwL2RybV9kZXBfam9iLmMNCj4g QEAgLTAsMCArMSw2NzUgQEANCj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQNCj4g Ky8qDQo+ICsgKiBDb3B5cmlnaHQgMjAxNSBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuDQo+ ICsgKg0KPiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2Us IHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGENCj4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBh bmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksDQo+ICsg KiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcg d2l0aG91dCBsaW1pdGF0aW9uDQo+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5 LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwNCj4gKyAqIGFuZC9vciBz ZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9t IHRoZQ0KPiArICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRo ZSBmb2xsb3dpbmcgY29uZGl0aW9uczoNCj4gKyAqDQo+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0 IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbg0K PiArICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUu DQo+ICsgKg0KPiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQg V0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1INCj4gKyAqIElNUExJRUQsIElOQ0xVRElO RyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLA0K PiArICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVO VC4gIElOIE5PIEVWRU5UIFNIQUxMDQo+ICsgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBB VVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1INCj4gKyAqIE9USEVS IExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RI RVJXSVNFLA0KPiArICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRI IFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SDQo+ICsgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUg U09GVFdBUkUuDQo+ICsgKg0KPiArICogQ29weXJpZ2h0IMKpIDIwMjYgSW50ZWwgQ29ycG9yYXRp b24NCj4gKyAqLw0KPiArDQo+ICsvKioNCj4gKyAqIERPQzogRFJNIGRlcGVuZGVuY3kgam9iDQo+ ICsgKg0KPiArICogQSBzdHJ1Y3QgZHJtX2RlcF9qb2IgcmVwcmVzZW50cyBhIHNpbmdsZSB1bml0 IG9mIEdQVSB3b3JrIGFzc29jaWF0ZWQgd2l0aA0KPiArICogYSBzdHJ1Y3QgZHJtX2RlcF9xdWV1 ZS4gVGhlIGxpZmVjeWNsZSBvZiBhIGpvYiBpczoNCj4gKyAqDQo+ICsgKiAxLiAqKkFsbG9jYXRp b24qKjogdGhlIGRyaXZlciBhbGxvY2F0ZXMgbWVtb3J5IGZvciB0aGUgam9iICh0eXBpY2FsbHkg YnkNCj4gKyAqICAgIGVtYmVkZGluZyBzdHJ1Y3QgZHJtX2RlcF9qb2IgaW4gYSBsYXJnZXIgc3Ry dWN0dXJlKSBhbmQgY2FsbHMNCj4gKyAqICAgIGRybV9kZXBfam9iX2luaXQoKSB0byBpbml0aWFs aXNlIGl0LiBPbiBzdWNjZXNzIHRoZSBqb2IgaG9sZHMgb25lDQo+ICsgKiAgICBrcmVmIHJlZmVy ZW5jZSBhbmQgYSByZWZlcmVuY2UgdG8gaXRzIHF1ZXVlLg0KPiArICoNCj4gKyAqIDIuICoqRGVw ZW5kZW5jeSBjb2xsZWN0aW9uKio6IHRoZSBkcml2ZXIgY2FsbHMgZHJtX2RlcF9qb2JfYWRkX2Rl cGVuZGVuY3koKSwNCj4gKyAqICAgIGRybV9kZXBfam9iX2FkZF9zeW5jb2JqX2RlcGVuZGVuY3ko KSwgZHJtX2RlcF9qb2JfYWRkX3Jlc3ZfZGVwZW5kZW5jaWVzKCksDQo+ICsgKiAgICBvciBkcm1f ZGVwX2pvYl9hZGRfaW1wbGljaXRfZGVwZW5kZW5jaWVzKCkgdG8gcmVnaXN0ZXIgZG1hX2ZlbmNl IG9iamVjdHMNCj4gKyAqICAgIHRoYXQgbXVzdCBiZSBzaWduYWxsZWQgYmVmb3JlIHRoZSBqb2Ig Y2FuIHJ1bi4gRHVwbGljYXRlIGZlbmNlcyBmcm9tIHRoZQ0KPiArICogICAgc2FtZSBmZW5jZSBj b250ZXh0IGFyZSBkZWR1cGxpY2F0ZWQgYXV0b21hdGljYWxseS4NCj4gKyAqDQo+ICsgKiAzLiAq KkFybWluZyoqOiBkcm1fZGVwX2pvYl9hcm0oKSBpbml0aWFsaXNlcyB0aGUgam9iJ3MgZmluaXNo ZWQgZmVuY2UsDQo+ICsgKiAgICBjb25zdW1pbmcgYSBzZXF1ZW5jZSBudW1iZXIgZnJvbSB0aGUg cXVldWUuIEFmdGVyIGFybWluZywNCj4gKyAqICAgIGRybV9kZXBfam9iX2ZpbmlzaGVkX2ZlbmNl KCkgcmV0dXJucyBhIHZhbGlkIGZlbmNlIHRoYXQgbWF5IGJlIHBhc3NlZCB0bw0KPiArICogICAg dXNlcnNwYWNlIG9yIHVzZWQgYXMgYSBkZXBlbmRlbmN5IGJ5IG90aGVyIGpvYnMuDQo+ICsgKg0K PiArICogNC4gKipTdWJtaXNzaW9uKio6IGRybV9kZXBfam9iX3B1c2goKSBzdWJtaXRzIHRoZSBq b2IgdG8gdGhlIHF1ZXVlLiBUaGUNCj4gKyAqICAgIHF1ZXVlIHRha2VzIGEgcmVmZXJlbmNlIHRo YXQgaXQgaG9sZHMgdW50aWwgdGhlIGpvYidzIGZpbmlzaGVkIGZlbmNlDQo+ICsgKiAgICBzaWdu YWxzIGFuZCB0aGUgam9iIGlzIGZyZWVkIGJ5IHRoZSBwdXRfam9iIHdvcmtlci4NCj4gKyAqDQo+ ICsgKiA1LiAqKkNvbXBsZXRpb24qKjogd2hlbiB0aGUgam9iJ3MgaGFyZHdhcmUgd29yayBmaW5p c2hlcyBpdHMgZmluaXNoZWQgZmVuY2UNCj4gKyAqICAgIGlzIHNpZ25hbGxlZCBhbmQgZHJtX2Rl cF9qb2JfcHV0KCkgaXMgY2FsbGVkIGJ5IHRoZSBxdWV1ZS4gVGhlIGRyaXZlcg0KPiArICogICAg bXVzdCByZWxlYXNlIGFueSBkcml2ZXItcHJpdmF0ZSByZXNvdXJjZXMgaW4gJmRybV9kZXBfam9i X29wcy5yZWxlYXNlLg0KPiArICoNCj4gKyAqIFJlZmVyZW5jZSBjb3VudGluZyB1c2VzIGRybV9k ZXBfam9iX2dldCgpIC8gZHJtX2RlcF9qb2JfcHV0KCkuIFRoZQ0KPiArICogaW50ZXJuYWwgZHJt X2RlcF9qb2JfZmluaSgpIHRlYXJzIGRvd24gdGhlIGRlcGVuZGVuY3kgeGFycmF5IGFuZCBmZW5j ZQ0KPiArICogb2JqZWN0cyBiZWZvcmUgdGhlIGRyaXZlcidzIHJlbGVhc2UgY2FsbGJhY2sgaXMg aW52b2tlZC4NCj4gKyAqLw0KPiArDQo+ICsjaW5jbHVkZSA8bGludXgvZG1hLXJlc3YuaD4NCj4g KyNpbmNsdWRlIDxsaW51eC9rcmVmLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvc2xhYi5oPg0KPiAr I2luY2x1ZGUgPGRybS9kcm1fZGVwLmg+DQo+ICsjaW5jbHVkZSA8ZHJtL2RybV9maWxlLmg+DQo+ ICsjaW5jbHVkZSA8ZHJtL2RybV9nZW0uaD4NCj4gKyNpbmNsdWRlIDxkcm0vZHJtX3N5bmNvYmou aD4NCj4gKyNpbmNsdWRlICJkcm1fZGVwX2ZlbmNlLmgiDQo+ICsjaW5jbHVkZSAiZHJtX2RlcF9q b2IuaCINCj4gKyNpbmNsdWRlICJkcm1fZGVwX3F1ZXVlLmgiDQo+ICsNCj4gKy8qKg0KPiArICog ZHJtX2RlcF9qb2JfaW5pdCgpIC0gaW5pdGlhbGlzZSBhIGRlcCBqb2INCj4gKyAqIEBqb2I6IGRl cCBqb2IgdG8gaW5pdGlhbGlzZQ0KPiArICogQGFyZ3M6IGluaXRpYWxpc2F0aW9uIGFyZ3VtZW50 cw0KPiArICoNCj4gKyAqIEluaXRpYWxpc2VzIEBqb2Igd2l0aCB0aGUgcXVldWUsIG9wcyBhbmQg Y3JlZGl0IGNvdW50IGZyb20gQGFyZ3MuICBBY3F1aXJlcw0KPiArICogYSByZWZlcmVuY2UgdG8g QGFyZ3MtPnEgdmlhIGRybV9kZXBfcXVldWVfZ2V0KCk7IHRoaXMgcmVmZXJlbmNlIGlzIGhlbGQg Zm9yDQo+ICsgKiB0aGUgbGlmZXRpbWUgb2YgdGhlIGpvYiBhbmQgcmVsZWFzZWQgYnkgZHJtX2Rl cF9qb2JfcmVsZWFzZSgpIHdoZW4gdGhlIGxhc3QNCj4gKyAqIGpvYiByZWZlcmVuY2UgaXMgZHJv cHBlZC4NCj4gKyAqDQo+ICsgKiBSZXNvdXJjZXMgYXJlIHJlbGVhc2VkIGF1dG9tYXRpY2FsbHkg d2hlbiB0aGUgbGFzdCByZWZlcmVuY2UgaXMgZHJvcHBlZA0KPiArICogdmlhIGRybV9kZXBfam9i X3B1dCgpLCB3aGljaCBtdXN0IGJlIGNhbGxlZCB0byByZWxlYXNlIHRoZSBqb2I7IGRyaXZlcnMN Cj4gKyAqIG11c3Qgbm90IGZyZWUgdGhlIGpvYiBkaXJlY3RseS4NCj4gKyAqDQo+ICsgKiBDb250 ZXh0OiBQcm9jZXNzIGNvbnRleHQuIEFsbG9jYXRlcyBtZW1vcnkgd2l0aCBHRlBfS0VSTkVMLg0K PiArICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC0lRUlOVkFMIGlmIGNyZWRpdHMgaXMgMCwNCj4g KyAqICAgLSVFTk9NRU0gb24gZmVuY2UgYWxsb2NhdGlvbiBmYWlsdXJlLg0KPiArICovDQo+ICtp bnQgZHJtX2RlcF9qb2JfaW5pdChzdHJ1Y3QgZHJtX2RlcF9qb2IgKmpvYiwNCj4gKyAgICAgICAg ICAgICAgICAgICAgY29uc3Qgc3RydWN0IGRybV9kZXBfam9iX2luaXRfYXJncyAqYXJncykNCj4g K3sNCj4gKyAgICAgICBpZiAodW5saWtlbHkoIWFyZ3MtPmNyZWRpdHMpKSB7DQo+ICsgICAgICAg ICAgICAgICBwcl9lcnIoImRybV9kZXA6ICVzOiBjcmVkaXRzIGNhbm5vdCBiZSAwXG4iLCBfX2Z1 bmNfXyk7DQo+ICsgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsNCj4gKyAgICAgICB9DQo+ ICsNCj4gKyAgICAgICBtZW1zZXQoam9iLCAwLCBzaXplb2YoKmpvYikpOw0KPiArDQo+ICsgICAg ICAgam9iLT5kZmVuY2UgPSBkcm1fZGVwX2ZlbmNlX2FsbG9jKCk7DQo+ICsgICAgICAgaWYgKCFq b2ItPmRmZW5jZSkNCj4gKyAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOw0KPiArDQo+ICsg ICAgICAgam9iLT5vcHMgPSBhcmdzLT5vcHM7DQo+ICsgICAgICAgam9iLT5xID0gZHJtX2RlcF9x dWV1ZV9nZXQoYXJncy0+cSk7DQo+ICsgICAgICAgam9iLT5jcmVkaXRzID0gYXJncy0+Y3JlZGl0 czsNCj4gKw0KPiArICAgICAgIGtyZWZfaW5pdCgmam9iLT5yZWZjb3VudCk7DQo+ICsgICAgICAg eGFfaW5pdF9mbGFncygmam9iLT5kZXBlbmRlbmNpZXMsIFhBX0ZMQUdTX0FMTE9DKTsNCj4gKyAg ICAgICBJTklUX0xJU1RfSEVBRCgmam9iLT5wZW5kaW5nX2xpbmspOw0KPiArDQo+ICsgICAgICAg cmV0dXJuIDA7DQo+ICt9DQo+ICtFWFBPUlRfU1lNQk9MKGRybV9kZXBfam9iX2luaXQpOw0KPiAr DQo+ICsvKioNCj4gKyAqIGRybV9kZXBfam9iX2Ryb3BfZGVwZW5kZW5jaWVzKCkgLSByZWxlYXNl IGFsbCBpbnB1dCBkZXBlbmRlbmN5IGZlbmNlcw0KPiArICogQGpvYjogZGVwIGpvYiB3aG9zZSBk ZXBlbmRlbmN5IHhhcnJheSB0byBkcmFpbg0KPiArICoNCj4gKyAqIFdhbGtzIEBqb2ItPmRlcGVu ZGVuY2llcywgcHV0cyBlYWNoIGZlbmNlLCBhbmQgZGVzdHJveXMgdGhlIHhhcnJheS4NCj4gKyAq IEFueSBzbG90cyBzdGlsbCBob2xkaW5nIGEgJURSTV9ERVBfSk9CX0ZFTkNFX1BSRUFMTE9DIHNl bnRpbmVsIOKAlA0KPiArICogaS5lLiBzbG90cyB0aGF0IHdlcmUgcHJlLWFsbG9jYXRlZCBidXQg bmV2ZXIgcmVwbGFjZWQg4oCUIGFyZSBzaWxlbnRseQ0KPiArICogc2tpcHBlZDsgdGhlIHNlbnRp bmVsIGNhcnJpZXMgbm8gcmVmZXJlbmNlLiAgQ2FsbGVkIGZyb20NCj4gKyAqIGRybV9kZXBfcXVl dWVfcnVuX2pvYigpIGluIHByb2Nlc3MgY29udGV4dCBpbW1lZGlhdGVseSBhZnRlcg0KPiArICog QG9wcy0+cnVuX2pvYigpIHJldHVybnMsIGJlZm9yZSB0aGUgZmluYWwgZHJtX2RlcF9qb2JfcHV0 KCkuICBSZWxlYXNpbmcNCj4gKyAqIGRlcGVuZGVuY2llcyBoZXJlIOKAlCB3aGlsZSBzdGlsbCBp biBwcm9jZXNzIGNvbnRleHQg4oCUIGF2b2lkcyBjYWxsaW5nDQo+ICsgKiB4YV9kZXN0cm95KCkg ZnJvbSBJUlEgY29udGV4dCBpZiB0aGUgam9iJ3MgbGFzdCByZWZlcmVuY2UgaXMgbGF0ZXINCj4g KyAqIGRyb3BwZWQgZnJvbSBhIGRtYV9mZW5jZSBjYWxsYmFjay4NCj4gKyAqDQo+ICsgKiBDb250 ZXh0OiBQcm9jZXNzIGNvbnRleHQuDQo+ICsgKi8NCj4gK3ZvaWQgZHJtX2RlcF9qb2JfZHJvcF9k ZXBlbmRlbmNpZXMoc3RydWN0IGRybV9kZXBfam9iICpqb2IpDQo+ICt7DQo+ICsgICAgICAgc3Ry dWN0IGRtYV9mZW5jZSAqZmVuY2U7DQo+ICsgICAgICAgdW5zaWduZWQgbG9uZyBpbmRleDsNCj4g Kw0KPiArICAgICAgIHhhX2Zvcl9lYWNoKCZqb2ItPmRlcGVuZGVuY2llcywgaW5kZXgsIGZlbmNl KSB7DQo+ICsgICAgICAgICAgICAgICBpZiAodW5saWtlbHkoZmVuY2UgPT0gRFJNX0RFUF9KT0Jf RkVOQ0VfUFJFQUxMT0MpKQ0KPiArICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsNCj4g KyAgICAgICAgICAgICAgIGRtYV9mZW5jZV9wdXQoZmVuY2UpOw0KPiArICAgICAgIH0NCj4gKyAg ICAgICB4YV9kZXN0cm95KCZqb2ItPmRlcGVuZGVuY2llcyk7DQo+ICt9DQo+ICsNCj4gKy8qKg0K PiArICogZHJtX2RlcF9qb2JfZmluaSgpIC0gY2xlYW4gdXAgYSBkZXAgam9iDQo+ICsgKiBAam9i OiBkZXAgam9iIHRvIGNsZWFuIHVwDQo+ICsgKg0KPiArICogQ2xlYW5zIHVwIHRoZSBkZXAgZmVu Y2UgYW5kIGRyb3BzIHRoZSBxdWV1ZSByZWZlcmVuY2UgaGVsZCBieSBAam9iLg0KPiArICoNCj4g KyAqIElmIHRoZSBqb2Igd2FzIG5ldmVyIGFybWVkIChlLmcuIGluaXQgZmFpbGVkIGJlZm9yZSBk cm1fZGVwX2pvYl9hcm0oKSksDQo+ICsgKiB0aGUgZGVwZW5kZW5jeSB4YXJyYXkgaXMgYWxzbyBy ZWxlYXNlZCBoZXJlLiAgRm9yIGFybWVkIGpvYnMgdGhlIHhhcnJheQ0KPiArICogaGFzIGFscmVh ZHkgYmVlbiBkcmFpbmVkIGJ5IGRybV9kZXBfam9iX2Ryb3BfZGVwZW5kZW5jaWVzKCkgaW4gcHJv Y2Vzcw0KPiArICogY29udGV4dCBpbW1lZGlhdGVseSBhZnRlciBydW5fam9iKCksIHNvIGl0IGlz IGxlZnQgdW50b3VjaGVkIHRvIGF2b2lkDQo+ICsgKiBjYWxsaW5nIHhhX2Rlc3Ryb3koKSBmcm9t IElSUSBjb250ZXh0Lg0KPiArICoNCj4gKyAqIFdhcm5zIGlmIEBqb2IgaXMgc3RpbGwgbGlua2Vk IG9uIHRoZSBxdWV1ZSdzIHBlbmRpbmcgbGlzdCwgd2hpY2ggd291bGQNCj4gKyAqIGluZGljYXRl IGEgYnVnIGluIHRoZSB0ZWFyZG93biBvcmRlcmluZy4NCj4gKyAqDQo+ICsgKiBDb250ZXh0OiBB bnkgY29udGV4dC4NCj4gKyAqLw0KPiArc3RhdGljIHZvaWQgZHJtX2RlcF9qb2JfZmluaShzdHJ1 Y3QgZHJtX2RlcF9qb2IgKmpvYikNCj4gK3sNCj4gKyAgICAgICBib29sIGFybWVkID0gZHJtX2Rl cF9mZW5jZV9pc19hcm1lZChqb2ItPmRmZW5jZSk7DQo+ICsNCj4gKyAgICAgICBXQVJOX09OKCFs aXN0X2VtcHR5KCZqb2ItPnBlbmRpbmdfbGluaykpOw0KPiArDQo+ICsgICAgICAgZHJtX2RlcF9m ZW5jZV9jbGVhbnVwKGpvYi0+ZGZlbmNlKTsNCj4gKyAgICAgICBqb2ItPmRmZW5jZSA9IE5VTEw7 DQo+ICsNCj4gKyAgICAgICAvKg0KPiArICAgICAgICAqIEFybWVkIGpvYnMgaGF2ZSB0aGVpciBk ZXBlbmRlbmNpZXMgZHJhaW5lZCBieQ0KPiArICAgICAgICAqIGRybV9kZXBfam9iX2Ryb3BfZGVw ZW5kZW5jaWVzKCkgaW4gcHJvY2VzcyBjb250ZXh0IGFmdGVyIHJ1bl9qb2IoKS4NCj4gKyAgICAg ICAgKiBTa2lwIGhlcmUgdG8gYXZvaWQgY2FsbGluZyB4YV9kZXN0cm95KCkgZnJvbSBJUlEgY29u dGV4dC4NCj4gKyAgICAgICAgKi8NCj4gKyAgICAgICBpZiAoIWFybWVkKQ0KPiArICAgICAgICAg ICAgICAgZHJtX2RlcF9qb2JfZHJvcF9kZXBlbmRlbmNpZXMoam9iKTsNCj4gK30NCj4gKw0KPiAr LyoqDQo+ICsgKiBkcm1fZGVwX2pvYl9nZXQoKSAtIGFjcXVpcmUgYSByZWZlcmVuY2UgdG8gYSBk ZXAgam9iDQo+ICsgKiBAam9iOiBkZXAgam9iIHRvIGFjcXVpcmUgYSByZWZlcmVuY2Ugb24sIG9y IE5VTEwNCj4gKyAqDQo+ICsgKiBDb250ZXh0OiBBbnkgY29udGV4dC4NCj4gKyAqIFJldHVybjog QGpvYiB3aXRoIGFuIGFkZGl0aW9uYWwgcmVmZXJlbmNlIGhlbGQsIG9yIE5VTEwgaWYgQGpvYiBp cyBOVUxMLg0KPiArICovDQo+ICtzdHJ1Y3QgZHJtX2RlcF9qb2IgKmRybV9kZXBfam9iX2dldChz dHJ1Y3QgZHJtX2RlcF9qb2IgKmpvYikNCj4gK3sNCj4gKyAgICAgICBpZiAoam9iKQ0KPiArICAg ICAgICAgICAgICAga3JlZl9nZXQoJmpvYi0+cmVmY291bnQpOw0KPiArICAgICAgIHJldHVybiBq b2I7DQo+ICt9DQo+ICtFWFBPUlRfU1lNQk9MKGRybV9kZXBfam9iX2dldCk7DQo+ICsNCj4gKy8q Kg0KPiArICogZHJtX2RlcF9qb2JfcmVsZWFzZSgpIC0ga3JlZiByZWxlYXNlIGNhbGxiYWNrIGZv ciBhIGRlcCBqb2INCj4gKyAqIEBrcmVmOiBrcmVmIGVtYmVkZGVkIGluIHRoZSBkZXAgam9iDQo+ ICsgKg0KPiArICogQ2FsbHMgZHJtX2RlcF9qb2JfZmluaSgpLCB0aGVuIGludm9rZXMgJmRybV9k ZXBfam9iX29wcy5yZWxlYXNlIGlmIHNldCwNCj4gKyAqIG90aGVyd2lzZSBmcmVlcyBAam9iIHdp dGgga2ZyZWUoKS4gIEZpbmFsbHksIHJlbGVhc2VzIHRoZSBxdWV1ZSByZWZlcmVuY2UNCj4gKyAq IHRoYXQgd2FzIGFjcXVpcmVkIGJ5IGRybV9kZXBfam9iX2luaXQoKSB2aWEgZHJtX2RlcF9xdWV1 ZV9wdXQoKS4gIFRoZQ0KPiArICogcXVldWUgcHV0IGlzIHBlcmZvcm1lZCBsYXN0IHRvIGVuc3Vy ZSBubyBxdWV1ZSBzdGF0ZSBpcyBhY2Nlc3NlZCBhZnRlcg0KPiArICogdGhlIGpvYiBtZW1vcnkg aXMgZnJlZWQuDQo+ICsgKg0KPiArICogQ29udGV4dDogQW55IGNvbnRleHQgaWYgJURSTV9ERVBf UVVFVUVfRkxBR1NfSk9CX1BVVF9JUlFfU0FGRSBpcyBzZXQgb24gdGhlDQo+ICsgKiAgIGpvYidz IHF1ZXVlOyBvdGhlcndpc2UgcHJvY2VzcyBjb250ZXh0IG9ubHksIGFzIHRoZSByZWxlYXNlIGNh bGxiYWNrIG1heQ0KPiArICogICBzbGVlcC4NCj4gKyAqLw0KPiArc3RhdGljIHZvaWQgZHJtX2Rl cF9qb2JfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqa3JlZikNCj4gK3sNCj4gKyAgICAgICBzdHJ1Y3Qg ZHJtX2RlcF9qb2IgKmpvYiA9DQo+ICsgICAgICAgICAgICAgICBjb250YWluZXJfb2Yoa3JlZiwg c3RydWN0IGRybV9kZXBfam9iLCByZWZjb3VudCk7DQo+ICsgICAgICAgc3RydWN0IGRybV9kZXBf cXVldWUgKnEgPSBqb2ItPnE7DQo+ICsNCj4gKyAgICAgICBkcm1fZGVwX2pvYl9maW5pKGpvYik7 DQo+ICsNCj4gKyAgICAgICBpZiAoam9iLT5vcHMgJiYgam9iLT5vcHMtPnJlbGVhc2UpDQo+ICsg ICAgICAgICAgICAgICBqb2ItPm9wcy0+cmVsZWFzZShqb2IpOw0KPiArICAgICAgIGVsc2UNCj4g KyAgICAgICAgICAgICAgIGtmcmVlKGpvYik7DQo+ICsNCj4gKyAgICAgICBkcm1fZGVwX3F1ZXVl X3B1dChxKTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBkcm1fZGVwX2pvYl9wdXQoKSAtIHJl bGVhc2UgYSByZWZlcmVuY2UgdG8gYSBkZXAgam9iDQo+ICsgKiBAam9iOiBkZXAgam9iIHRvIHJl bGVhc2UgYSByZWZlcmVuY2Ugb24sIG9yIE5VTEwNCj4gKyAqDQo+ICsgKiBXaGVuIHRoZSBsYXN0 IHJlZmVyZW5jZSBpcyBkcm9wcGVkLCBjYWxscyAmZHJtX2RlcF9qb2Jfb3BzLnJlbGVhc2UgaWYg c2V0LA0KPiArICogb3RoZXJ3aXNlIGZyZWVzIEBqb2Igd2l0aCBrZnJlZSgpLiBEb2VzIG5vdGhp bmcgaWYgQGpvYiBpcyBOVUxMLg0KPiArICoNCj4gKyAqIENvbnRleHQ6IEFueSBjb250ZXh0IGlm ICVEUk1fREVQX1FVRVVFX0ZMQUdTX0pPQl9QVVRfSVJRX1NBRkUgaXMgc2V0IG9uIHRoZQ0KPiAr ICogICBqb2IncyBxdWV1ZTsgb3RoZXJ3aXNlIHByb2Nlc3MgY29udGV4dCBvbmx5LCBhcyB0aGUg cmVsZWFzZSBjYWxsYmFjayBtYXkNCj4gKyAqICAgc2xlZXAuDQo+ICsgKi8NCj4gK3ZvaWQgZHJt X2RlcF9qb2JfcHV0KHN0cnVjdCBkcm1fZGVwX2pvYiAqam9iKQ0KPiArew0KPiArICAgICAgIGlm IChqb2IpDQo+ICsgICAgICAgICAgICAgICBrcmVmX3B1dCgmam9iLT5yZWZjb3VudCwgZHJtX2Rl cF9qb2JfcmVsZWFzZSk7DQo+ICt9DQo+ICtFWFBPUlRfU1lNQk9MKGRybV9kZXBfam9iX3B1dCk7 DQo+ICsNCj4gKy8qKg0KPiArICogZHJtX2RlcF9qb2JfYXJtKCkgLSBhcm0gYSBkZXAgam9iIGZv ciBzdWJtaXNzaW9uDQo+ICsgKiBAam9iOiBkZXAgam9iIHRvIGFybQ0KPiArICoNCj4gKyAqIElu aXRpYWxpc2VzIHRoZSBmaW5pc2hlZCBmZW5jZSBvbiBAam9iLT5kZmVuY2UsIGFzc2lnbmluZw0K PiArICogaXQgYSBzZXF1ZW5jZSBudW1iZXIgZnJvbSB0aGUgam9iJ3MgcXVldWUuIE11c3QgYmUg Y2FsbGVkIGFmdGVyDQo+ICsgKiBkcm1fZGVwX2pvYl9pbml0KCkgYW5kIGJlZm9yZSBkcm1fZGVw X2pvYl9wdXNoKCkuIE9uY2UgYXJtZWQsDQo+ICsgKiBkcm1fZGVwX2pvYl9maW5pc2hlZF9mZW5j ZSgpIHJldHVybnMgYSB2YWxpZCBmZW5jZSB0aGF0IG1heSBiZSBwYXNzZWQgdG8NCj4gKyAqIHVz ZXJzcGFjZSBvciB1c2VkIGFzIGEgZGVwZW5kZW5jeSBieSBvdGhlciBqb2JzLg0KPiArICoNCj4g KyAqIEJlZ2lucyB0aGUgRE1BIGZlbmNlIHNpZ25hbGxpbmcgcGF0aCB2aWEgZG1hX2ZlbmNlX2Jl Z2luX3NpZ25hbGxpbmcoKS4NCj4gKyAqIEFmdGVyIHRoaXMgcG9pbnQsIG1lbW9yeSBhbGxvY2F0 aW9ucyB0aGF0IGNvdWxkIHRyaWdnZXIgcmVjbGFpbSBhcmUNCj4gKyAqIGZvcmJpZGRlbjsgbG9j a2RlcCBlbmZvcmNlcyB0aGlzLiBhcm0oKSBtdXN0IGFsd2F5cyBiZSBwYWlyZWQgd2l0aA0KPiAr ICogZHJtX2RlcF9qb2JfcHVzaCgpOyBsb2NrZGVwIGFsc28gZW5mb3JjZXMgdGhpcyBwYWlyaW5n Lg0KPiArICoNCj4gKyAqIFdhcm5zIGlmIHRoZSBqb2IgaGFzIGFscmVhZHkgYmVlbiBhcm1lZC4N Cj4gKyAqDQo+ICsgKiBDb250ZXh0OiBQcm9jZXNzIGNvbnRleHQgaWYgJURSTV9ERVBfUVVFVUVf RkxBR1NfQllQQVNTX1NVUFBPUlRFRCBpcyBzZXQNCj4gKyAqICAgKHRha2VzIEBxLT5zY2hlZC5s b2NrLCBhIG11dGV4KTsgYW55IGNvbnRleHQgb3RoZXJ3aXNlLiBETUEgZmVuY2Ugc2lnbmFsaW5n DQo+ICsgKiAgIHBhdGguDQo+ICsgKi8NCj4gK3ZvaWQgZHJtX2RlcF9qb2JfYXJtKHN0cnVjdCBk cm1fZGVwX2pvYiAqam9iKQ0KPiArew0KPiArICAgICAgIGRybV9kZXBfcXVldWVfcHVzaF9qb2Jf YmVnaW4oam9iLT5xKTsNCj4gKyAgICAgICBXQVJOX09OKGRybV9kZXBfZmVuY2VfaXNfYXJtZWQo am9iLT5kZmVuY2UpKTsNCj4gKyAgICAgICBkcm1fZGVwX2ZlbmNlX2luaXQoam9iLT5kZmVuY2Us IGpvYi0+cSk7DQo+ICsgICAgICAgam9iLT5zaWduYWxsaW5nX2Nvb2tpZSA9IGRtYV9mZW5jZV9i ZWdpbl9zaWduYWxsaW5nKCk7DQo+ICt9DQo+ICtFWFBPUlRfU1lNQk9MKGRybV9kZXBfam9iX2Fy bSk7DQo+ICsNCj4gKy8qKg0KPiArICogZHJtX2RlcF9qb2JfcHVzaCgpIC0gc3VibWl0IGEgam9i IHRvIGl0cyBxdWV1ZSBmb3IgZXhlY3V0aW9uDQo+ICsgKiBAam9iOiBkZXAgam9iIHRvIHB1c2gN Cj4gKyAqDQo+ICsgKiBTdWJtaXRzIEBqb2IgdG8gdGhlIHF1ZXVlIGl0IHdhcyBpbml0aWFsaXNl ZCB3aXRoLiBNdXN0IGJlIGNhbGxlZCBhZnRlcg0KPiArICogZHJtX2RlcF9qb2JfYXJtKCkuIEFj cXVpcmVzIGEgcmVmZXJlbmNlIG9uIEBqb2Igb24gYmVoYWxmIG9mIHRoZSBxdWV1ZSwNCj4gKyAq IGhlbGQgdW50aWwgdGhlIHF1ZXVlIGlzIGZ1bGx5IGRvbmUgd2l0aCBpdC4gVGhlIHJlZmVyZW5j ZSBpcyByZWxlYXNlZA0KPiArICogZGlyZWN0bHkgaW4gdGhlIGZpbmlzaGVkLWZlbmNlIGRtYV9m ZW5jZSBjYWxsYmFjayBmb3IgcXVldWVzIHdpdGgNCj4gKyAqICVEUk1fREVQX1FVRVVFX0ZMQUdT X0pPQl9QVVRfSVJRX1NBRkUgKHdoZXJlIGRybV9kZXBfam9iX2RvbmUoKSBtYXkgcnVuDQo+ICsg KiBmcm9tIGhhcmRpcnEgY29udGV4dCksIG9yIHZpYSB0aGUgcHV0X2pvYiB3b3JrIGl0ZW0gb24g dGhlIHN1Ym1pdA0KPiArICogd29ya3F1ZXVlIG90aGVyd2lzZS4NCj4gKyAqDQo+ICsgKiBFbmRz IHRoZSBETUEgZmVuY2Ugc2lnbmFsbGluZyBwYXRoIGJlZ3VuIGJ5IGRybV9kZXBfam9iX2FybSgp IHZpYQ0KPiArICogZG1hX2ZlbmNlX2VuZF9zaWduYWxsaW5nKCkuIFRoaXMgbXVzdCBiZSBwYWly ZWQgd2l0aCBhcm0oKTsgbG9ja2RlcA0KPiArICogZW5mb3JjZXMgdGhlIHBhaXJpbmcuDQo+ICsg Kg0KPiArICogT25jZSBwdXNoZWQsICZkcm1fZGVwX3F1ZXVlX29wcy5ydW5fam9iIGlzIGd1YXJh bnRlZWQgdG8gYmUgY2FsbGVkIGZvcg0KPiArICogQGpvYiBleGFjdGx5IG9uY2UsIGV2ZW4gaWYg dGhlIHF1ZXVlIGlzIGtpbGxlZCBvciB0b3JuIGRvd24gYmVmb3JlIHRoZQ0KPiArICogam9iIHJl YWNoZXMgdGhlIGhlYWQgb2YgdGhlIHF1ZXVlLiBEcml2ZXJzIGNhbiB1c2UgdGhpcyBndWFyYW50 ZWUgdG8NCj4gKyAqIHBlcmZvcm0gYm9va2tlZXBpbmcgY2xlYW51cDsgdGhlIGFjdHVhbCBiYWNr ZW5kIG9wZXJhdGlvbiBzaG91bGQgYmUNCj4gKyAqIHNraXBwZWQgd2hlbiBkcm1fZGVwX3F1ZXVl X2lzX2tpbGxlZCgpIHJldHVybnMgdHJ1ZS4NCj4gKyAqDQo+ICsgKiBJZiB0aGUgcXVldWUgZG9l cyBub3Qgc3VwcG9ydCB0aGUgYnlwYXNzIHBhdGgsIHRoZSBqb2IgaXMgcHVzaGVkIGRpcmVjdGx5 DQo+ICsgKiBvbnRvIHRoZSBTUFNDIHN1Ym1pc3Npb24gcXVldWUgdmlhIGRybV9kZXBfcXVldWVf cHVzaF9qb2IoKSB3aXRob3V0IGhvbGRpbmcNCj4gKyAqIEBxLT5zY2hlZC5sb2NrLiBPdGhlcndp c2UsIEBxLT5zY2hlZC5sb2NrIGlzIHRha2VuIGFuZCB0aGUgam9iIGlzIGVpdGhlcg0KPiArICog cnVuIGltbWVkaWF0ZWx5IHZpYSBkcm1fZGVwX3F1ZXVlX3J1bl9qb2IoKSBpZiBpdCBxdWFsaWZp ZXMgZm9yIGJ5cGFzcywgb3INCj4gKyAqIGVucXVldWVkIHZpYSBkcm1fZGVwX3F1ZXVlX3B1c2hf am9iKCkgZm9yIGRpc3BhdGNoIGJ5IHRoZSBydW5fam9iIHdvcmsgaXRlbS4NCj4gKyAqDQo+ICsg KiBXYXJucyBpZiB0aGUgam9iIGhhcyBub3QgYmVlbiBhcm1lZC4NCj4gKyAqDQo+ICsgKiBDb250 ZXh0OiBQcm9jZXNzIGNvbnRleHQgaWYgJURSTV9ERVBfUVVFVUVfRkxBR1NfQllQQVNTX1NVUFBP UlRFRCBpcyBzZXQNCj4gKyAqICAgKHRha2VzIEBxLT5zY2hlZC5sb2NrLCBhIG11dGV4KTsgYW55 IGNvbnRleHQgb3RoZXJ3aXNlLiBETUEgZmVuY2Ugc2lnbmFsaW5nDQo+ICsgKiAgIHBhdGguDQo+ ICsgKi8NCj4gK3ZvaWQgZHJtX2RlcF9qb2JfcHVzaChzdHJ1Y3QgZHJtX2RlcF9qb2IgKmpvYikN Cj4gK3sNCj4gKyAgICAgICBzdHJ1Y3QgZHJtX2RlcF9xdWV1ZSAqcSA9IGpvYi0+cTsNCj4gKw0K PiArICAgICAgIFdBUk5fT04oIWRybV9kZXBfZmVuY2VfaXNfYXJtZWQoam9iLT5kZmVuY2UpKTsN Cj4gKw0KPiArICAgICAgIGRybV9kZXBfam9iX2dldChqb2IpOw0KPiArDQo+ICsgICAgICAgaWYg KCEocS0+c2NoZWQuZmxhZ3MgJiBEUk1fREVQX1FVRVVFX0ZMQUdTX0JZUEFTU19TVVBQT1JURUQp KSB7DQo+ICsgICAgICAgICAgICAgICBkcm1fZGVwX3F1ZXVlX3B1c2hfam9iKHEsIGpvYik7DQo+ ICsgICAgICAgICAgICAgICBkbWFfZmVuY2VfZW5kX3NpZ25hbGxpbmcoam9iLT5zaWduYWxsaW5n X2Nvb2tpZSk7DQo+ICsgICAgICAgICAgICAgICBkcm1fZGVwX3F1ZXVlX3B1c2hfam9iX2VuZChq b2ItPnEpOw0KPiArICAgICAgICAgICAgICAgcmV0dXJuOw0KPiArICAgICAgIH0NCj4gKw0KPiAr ICAgICAgIHNjb3BlZF9ndWFyZChtdXRleCwgJnEtPnNjaGVkLmxvY2spIHsNCj4gKyAgICAgICAg ICAgICAgIGlmIChkcm1fZGVwX3F1ZXVlX2Nhbl9qb2JfYnlwYXNzKHEsIGpvYikpDQo+ICsgICAg ICAgICAgICAgICAgICAgICAgIGRybV9kZXBfcXVldWVfcnVuX2pvYihxLCBqb2IpOw0KPiArICAg ICAgICAgICAgICAgZWxzZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICBkcm1fZGVwX3F1ZXVl X3B1c2hfam9iKHEsIGpvYik7DQo+ICsgICAgICAgfQ0KPiArDQo+ICsgICAgICAgZG1hX2ZlbmNl X2VuZF9zaWduYWxsaW5nKGpvYi0+c2lnbmFsbGluZ19jb29raWUpOw0KPiArICAgICAgIGRybV9k ZXBfcXVldWVfcHVzaF9qb2JfZW5kKGpvYi0+cSk7DQo+ICt9DQo+ICtFWFBPUlRfU1lNQk9MKGRy bV9kZXBfam9iX3B1c2gpOw0KPiArDQo+ICsvKioNCj4gKyAqIGRybV9kZXBfam9iX2FkZF9kZXBl bmRlbmN5KCkgLSBhZGRzIHRoZSBmZW5jZSBhcyBhIGpvYiBkZXBlbmRlbmN5DQo+ICsgKiBAam9i OiBkZXAgam9iIHRvIGFkZCB0aGUgZGVwZW5kZW5jaWVzIHRvDQo+ICsgKiBAZmVuY2U6IHRoZSBk bWFfZmVuY2UgdG8gYWRkIHRvIHRoZSBsaXN0IG9mIGRlcGVuZGVuY2llcywgb3INCj4gKyAqICAg ICAgICAgJURSTV9ERVBfSk9CX0ZFTkNFX1BSRUFMTE9DIHRvIHJlc2VydmUgYSBzbG90IGZvciBs YXRlci4NCj4gKyAqDQo+ICsgKiBOb3RlIHRoYXQgQGZlbmNlIGlzIGNvbnN1bWVkIGluIGJvdGgg dGhlIHN1Y2Nlc3MgYW5kIGVycm9yIGNhc2VzIChleGNlcHQNCj4gKyAqIHdoZW4gQGZlbmNlIGlz ICVEUk1fREVQX0pPQl9GRU5DRV9QUkVBTExPQywgd2hpY2ggY2FycmllcyBubyByZWZlcmVuY2Up Lg0KPiArICoNCj4gKyAqIFNpZ25hbGxlZCBmZW5jZXMgYW5kIGZlbmNlcyBiZWxvbmdpbmcgdG8g dGhlIHNhbWUgcXVldWUgYXMgQGpvYiAoaS5lLiB3aGVyZQ0KPiArICogZmVuY2UtPmNvbnRleHQg bWF0Y2hlcyB0aGUgcXVldWUncyBmaW5pc2hlZCBmZW5jZSBjb250ZXh0KSBhcmUgc2lsZW50bHkN Cj4gKyAqIGRyb3BwZWQ7IHRoZSBqb2IgbmVlZCBub3Qgd2FpdCBvbiBpdHMgb3duIHF1ZXVlJ3Mg b3V0cHV0Lg0KPiArICoNCj4gKyAqIFdhcm5zIGlmIHRoZSBqb2IgaGFzIGFscmVhZHkgYmVlbiBh cm1lZCAoZGVwZW5kZW5jaWVzIG11c3QgYmUgYWRkZWQgYmVmb3JlDQo+ICsgKiBkcm1fZGVwX2pv Yl9hcm0oKSkuDQo+ICsgKg0KPiArICogKipQcmUtYWxsb2NhdGlvbiBwYXR0ZXJuKioNCj4gKyAq DQo+ICsgKiBXaGVuIG11bHRpcGxlIGpvYnMgYWNyb3NzIGRpZmZlcmVudCBxdWV1ZXMgbXVzdCBi ZSBwcmVwYXJlZCBhbmQgc3VibWl0dGVkDQo+ICsgKiB0b2dldGhlciBpbiBhIHNpbmdsZSBhdG9t aWMgY29tbWl0IOKAlCBmb3IgZXhhbXBsZSwgd2hlcmUgam9iIEEncyBmaW5pc2hlZA0KPiArICog ZmVuY2UgaXMgYW4gaW5wdXQgZGVwZW5kZW5jeSBvZiBqb2IgQiDigJQgYWxsIGpvYnMgbXVzdCBi ZSBhcm1lZCBhbmQgcHVzaGVkDQo+ICsgKiB3aXRoaW4gYSBzaW5nbGUgZG1hX2ZlbmNlX2JlZ2lu X3NpZ25hbGxpbmcoKSAvIGRtYV9mZW5jZV9lbmRfc2lnbmFsbGluZygpDQo+ICsgKiByZWdpb24u ICBPbmNlIHRoYXQgcmVnaW9uIGhhcyBzdGFydGVkIG5vIG1lbW9yeSBhbGxvY2F0aW9uIGlzIHBl cm1pdHRlZC4NCj4gKyAqDQo+ICsgKiBUbyBoYW5kbGUgdGhpcywgcGFzcyAlRFJNX0RFUF9KT0Jf RkVOQ0VfUFJFQUxMT0MgZHVyaW5nIHRoZSBwcmVwYXJhdGlvbg0KPiArICogcGhhc2UgKGJlZm9y ZSBhcm1pbmcgYW55IGpvYiwgd2hpbGUgR0ZQX0tFUk5FTCBhbGxvY2F0aW9uIGlzIHN0aWxsIGFs bG93ZWQpDQo+ICsgKiB0byBwcmUtYWxsb2NhdGUgYSBzbG90IGluIEBqb2ItPmRlcGVuZGVuY2ll cy4gIFRoZSBzbG90IGluZGV4IGFzc2lnbmVkIGJ5DQo+ICsgKiB0aGUgdW5kZXJseWluZyB4YXJy YXkgbXVzdCBiZSB0cmFja2VkIGJ5IHRoZSBjYWxsZXIgc2VwYXJhdGVseSAoZS5nLiBpdCBpcw0K PiArICogYWx3YXlzIGluZGV4IDAgd2hlbiB0aGUgZGVwZW5kZW5jeSBhcnJheSBpcyBlbXB0eSwg YXMgWGUgcmVsaWVzIG9uKS4NCj4gKyAqIEFmdGVyIGFsbCBqb2JzIGhhdmUgYmVlbiBhcm1lZCBh bmQgdGhlIGZpbmlzaGVkIGZlbmNlcyBhcmUgYXZhaWxhYmxlLCBjYWxsDQo+ICsgKiBkcm1fZGVw X2pvYl9yZXBsYWNlX2RlcGVuZGVuY3koKSB3aXRoIHRoYXQgaW5kZXggYW5kIHRoZSByZWFsIGZl bmNlLg0KPiArICogZHJtX2RlcF9qb2JfcmVwbGFjZV9kZXBlbmRlbmN5KCkgdXNlcyBHRlBfTk9X QUlUIGludGVybmFsbHkgYW5kIG1heSBiZQ0KPiArICogY2FsbGVkIGZyb20gYXRvbWljIG9yIHNp Z25hbGxpbmcgY29udGV4dC4NCj4gKyAqDQo+ICsgKiBUaGUgc2VudGluZWwgc2xvdCBpcyBuZXZl ciBza2lwcGVkIGJ5IHRoZSBzaWduYWxsZWQtZmVuY2UgZmFzdC1wYXRoLA0KPiArICogZW5zdXJp bmcgYSBzbG90IGlzIGFsd2F5cyBhbGxvY2F0ZWQgZXZlbiB3aGVuIHRoZSByZWFsIGZlbmNlIGlz IG5vdCB5ZXQNCj4gKyAqIGtub3duLg0KPiArICoNCj4gKyAqICoqRXhhbXBsZTogYmluZCBqb2Ig ZmVlZGluZyBUTEIgaW52YWxpZGF0aW9uIGpvYnMqKg0KPiArICoNCj4gKyAqIENvbnNpZGVyIGEg R1BVIHdpdGggc2VwYXJhdGUgcXVldWVzIGZvciBwYWdlLXRhYmxlIGJpbmQgb3BlcmF0aW9ucyBh bmQgZm9yDQo+ICsgKiBUTEIgaW52YWxpZGF0aW9uLiAgQSBzaW5nbGUgYXRvbWljIGNvbW1pdCBt dXN0Og0KPiArICoNCj4gKyAqICAxLiBSdW4gYSBiaW5kIGpvYiB0aGF0IG1vZGlmaWVzIHBhZ2Ug dGFibGVzLg0KPiArICogIDIuIFJ1biBvbmUgVExCLWludmFsaWRhdGlvbiBqb2IgcGVyIE1NVSB0 aGF0IGRlcGVuZHMgb24gdGhlIGJpbmQNCj4gKyAqICAgICBjb21wbGV0aW5nLCBzbyBzdGFsZSB0 cmFuc2xhdGlvbnMgYXJlIGZsdXNoZWQgYmVmb3JlIHRoZSBlbmdpbmVzDQo+ICsgKiAgICAgY29u dGludWUuDQo+ICsgKg0KPiArICogQmVjYXVzZSBhbGwgam9icyBtdXN0IGJlIGFybWVkIGFuZCBw dXNoZWQgaW5zaWRlIGEgc2lnbmFsbGluZyByZWdpb24gKHdoZXJlDQo+ICsgKiBHRlBfS0VSTkVM IGlzIGZvcmJpZGRlbiksIHByZS1hbGxvY2F0ZSBzbG90cyBiZWZvcmUgZW50ZXJpbmcgdGhlIHJl Z2lvbjo6DQo+ICsgKg0KPiArICogICAvLyBQaGFzZSAxIOKAlCBwcm9jZXNzIGNvbnRleHQsIEdG UF9LRVJORUwgYWxsb3dlZA0KPiArICogICBkcm1fZGVwX2pvYl9pbml0KGJpbmRfam9iLCBiaW5k X3F1ZXVlLCBvcHMpOw0KPiArICogICBmb3JfZWFjaF9tbXUobW11KSB7DQo+ICsgKiAgICAgICBk cm1fZGVwX2pvYl9pbml0KHRsYl9qb2JbbW11XSwgdGxiX3F1ZXVlW21tdV0sIG9wcyk7DQo+ICsg KiAgICAgICAvLyBQcmUtYWxsb2NhdGUgc2xvdCBhdCBpbmRleCAwOyByZWFsIGZlbmNlIG5vdCBh dmFpbGFibGUgeWV0DQo+ICsgKiAgICAgICBkcm1fZGVwX2pvYl9hZGRfZGVwZW5kZW5jeSh0bGJf am9iW21tdV0sIERSTV9ERVBfSk9CX0ZFTkNFX1BSRUFMTE9DKTsNCj4gKyAqICAgfQ0KPiArICoN Cj4gKyAqICAgLy8gUGhhc2UgMiDigJQgaW5zaWRlIHNpZ25hbGxpbmcgcmVnaW9uLCBubyBHRlBf S0VSTkVMDQo+ICsgKiAgIGRtYV9mZW5jZV9iZWdpbl9zaWduYWxsaW5nKCk7DQo+ICsgKiAgIGRy bV9kZXBfam9iX2FybShiaW5kX2pvYik7DQo+ICsgKiAgIGZvcl9lYWNoX21tdShtbXUpIHsNCj4g KyAqICAgICAgIC8vIFN3YXAgc2VudGluZWwgZm9yIGJpbmQgam9iJ3MgZmluaXNoZWQgZmVuY2UN Cj4gKyAqICAgICAgIGRybV9kZXBfam9iX3JlcGxhY2VfZGVwZW5kZW5jeSh0bGJfam9iW21tdV0s IDAsDQo+ICsgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG1hX2ZlbmNl X2dldChiaW5kX2pvYi0+ZmluaXNoZWQpKTsNCj4gKyAqICAgICAgIGRybV9kZXBfam9iX2FybSh0 bGJfam9iW21tdV0pOw0KPiArICogICB9DQo+ICsgKiAgIGRybV9kZXBfam9iX3B1c2goYmluZF9q b2IpOw0KPiArICogICBmb3JfZWFjaF9tbXUobW11KQ0KPiArICogICAgICAgZHJtX2RlcF9qb2Jf cHVzaCh0bGJfam9iW21tdV0pOw0KPiArICogICBkbWFfZmVuY2VfZW5kX3NpZ25hbGxpbmcoKTsN Cj4gKyAqDQo+ICsgKiBDb250ZXh0OiBQcm9jZXNzIGNvbnRleHQuIE1heSBhbGxvY2F0ZSBtZW1v cnkgd2l0aCBHRlBfS0VSTkVMLg0KPiArICogUmV0dXJuOiBJZiBmZW5jZSA9PSBEUk1fREVQX0pP Ql9GRU5DRV9QUkVBTExPQyBpbmRleCBvZiBhbGxvY2F0aW9uIG9uDQo+ICsgKiBzdWNjZXNzLCBl bHNlIDAgb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlLg0KPiArICovDQo+ICtp bnQgZHJtX2RlcF9qb2JfYWRkX2RlcGVuZGVuY3koc3RydWN0IGRybV9kZXBfam9iICpqb2IsIHN0 cnVjdCBkbWFfZmVuY2UgKmZlbmNlKQ0KPiArew0KPiArICAgICAgIHN0cnVjdCBkcm1fZGVwX3F1 ZXVlICpxID0gam9iLT5xOw0KPiArICAgICAgIHN0cnVjdCBkbWFfZmVuY2UgKmVudHJ5Ow0KPiAr ICAgICAgIHVuc2lnbmVkIGxvbmcgaW5kZXg7DQo+ICsgICAgICAgdTMyIGlkID0gMDsNCj4gKyAg ICAgICBpbnQgcmV0Ow0KPiArDQo+ICsgICAgICAgV0FSTl9PTihkcm1fZGVwX2ZlbmNlX2lzX2Fy bWVkKGpvYi0+ZGZlbmNlKSk7DQo+ICsgICAgICAgbWlnaHRfYWxsb2MoR0ZQX0tFUk5FTCk7DQo+ ICsNCj4gKyAgICAgICBpZiAoIWZlbmNlKQ0KPiArICAgICAgICAgICAgICAgcmV0dXJuIDA7DQo+ ICsNCj4gKyAgICAgICBpZiAoZmVuY2UgPT0gRFJNX0RFUF9KT0JfRkVOQ0VfUFJFQUxMT0MpDQo+ ICsgICAgICAgICAgICAgICBnb3RvIGFkZF9mZW5jZTsNCj4gKw0KPiArICAgICAgIC8qDQo+ICsg ICAgICAgICogSWdub3JlIHNpZ25hbGxlZCBmZW5jZXMgb3IgZmVuY2VzIGZyb20gb3VyIG93biBx dWV1ZSDigJQgZmluaXNoZWQNCj4gKyAgICAgICAgKiBmZW5jZXMgdXNlIHEtPmZlbmNlLmNvbnRl eHQuDQo+ICsgICAgICAgICovDQo+ICsgICAgICAgaWYgKGRtYV9mZW5jZV90ZXN0X3NpZ25hbGVk X2ZsYWcoZmVuY2UpIHx8DQo+ICsgICAgICAgICAgIGZlbmNlLT5jb250ZXh0ID09IHEtPmZlbmNl LmNvbnRleHQpIHsNCj4gKyAgICAgICAgICAgICAgIGRtYV9mZW5jZV9wdXQoZmVuY2UpOw0KPiAr ICAgICAgICAgICAgICAgcmV0dXJuIDA7DQo+ICsgICAgICAgfQ0KPiArDQo+ICsgICAgICAgLyog RGVkdXBsaWNhdGUgaWYgd2UgYWxyZWFkeSBkZXBlbmQgb24gYSBmZW5jZSBmcm9tIHRoZSBzYW1l IGNvbnRleHQuDQo+ICsgICAgICAgICogVGhpcyBsZXRzIHRoZSBzaXplIG9mIHRoZSBhcnJheSBv ZiBkZXBzIHNjYWxlIHdpdGggdGhlIG51bWJlciBvZg0KPiArICAgICAgICAqIGVuZ2luZXMgaW52 b2x2ZWQsIHJhdGhlciB0aGFuIHRoZSBudW1iZXIgb2YgQk9zLg0KPiArICAgICAgICAqLw0KPiAr ICAgICAgIHhhX2Zvcl9lYWNoKCZqb2ItPmRlcGVuZGVuY2llcywgaW5kZXgsIGVudHJ5KSB7DQo+ ICsgICAgICAgICAgICAgICBpZiAoZW50cnkgPT0gRFJNX0RFUF9KT0JfRkVOQ0VfUFJFQUxMT0Mg fHwNCj4gKyAgICAgICAgICAgICAgICAgICBlbnRyeS0+Y29udGV4dCAhPSBmZW5jZS0+Y29udGV4 dCkNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7DQo+ICsNCj4gKyAgICAgICAg ICAgICAgIGlmIChkbWFfZmVuY2VfaXNfbGF0ZXIoZmVuY2UsIGVudHJ5KSkgew0KPiArICAgICAg ICAgICAgICAgICAgICAgICBkbWFfZmVuY2VfcHV0KGVudHJ5KTsNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgeGFfc3RvcmUoJmpvYi0+ZGVwZW5kZW5jaWVzLCBpbmRleCwgZmVuY2UsIEdGUF9L RVJORUwpOw0KPiArICAgICAgICAgICAgICAgfSBlbHNlIHsNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgZG1hX2ZlbmNlX3B1dChmZW5jZSk7DQo+ICsgICAgICAgICAgICAgICB9DQo+ICsgICAg ICAgICAgICAgICByZXR1cm4gMDsNCj4gKyAgICAgICB9DQo+ICsNCj4gK2FkZF9mZW5jZToNCj4g KyAgICAgICByZXQgPSB4YV9hbGxvYygmam9iLT5kZXBlbmRlbmNpZXMsICZpZCwgZmVuY2UsIHhh X2xpbWl0XzMyYiwNCj4gKyAgICAgICAgICAgICAgICAgICAgICBHRlBfS0VSTkVMKTsNCj4gKyAg ICAgICBpZiAocmV0ICE9IDApIHsNCj4gKyAgICAgICAgICAgICAgIGlmIChmZW5jZSAhPSBEUk1f REVQX0pPQl9GRU5DRV9QUkVBTExPQykNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgZG1hX2Zl bmNlX3B1dChmZW5jZSk7DQo+ICsgICAgICAgICAgICAgICByZXR1cm4gcmV0Ow0KPiArICAgICAg IH0NCj4gKw0KPiArICAgICAgIHJldHVybiAoZmVuY2UgPT0gRFJNX0RFUF9KT0JfRkVOQ0VfUFJF QUxMT0MpID8gaWQgOiAwOw0KPiArfQ0KPiArRVhQT1JUX1NZTUJPTChkcm1fZGVwX2pvYl9hZGRf ZGVwZW5kZW5jeSk7DQo+ICsNCj4gKy8qKg0KPiArICogZHJtX2RlcF9qb2JfcmVwbGFjZV9kZXBl bmRlbmN5KCkgLSByZXBsYWNlIGEgcHJlLWFsbG9jYXRlZCBkZXBlbmRlbmN5IHNsb3QNCj4gKyAq IEBqb2I6IGRlcCBqb2IgdG8gdXBkYXRlDQo+ICsgKiBAaW5kZXg6IHhhcnJheSBpbmRleCBvZiB0 aGUgc2xvdCB0byByZXBsYWNlLCBhcyByZXR1cm5lZCB3aGVuIHRoZSBzZW50aW5lbA0KPiArICog ICAgICAgICB3YXMgb3JpZ2luYWxseSBpbnNlcnRlZCB2aWEgZHJtX2RlcF9qb2JfYWRkX2RlcGVu ZGVuY3koKQ0KPiArICogQGZlbmNlOiB0aGUgcmVhbCBkbWFfZmVuY2UgdG8gc3RvcmU7IGl0cyBy ZWZlcmVuY2UgaXMgYWx3YXlzIGNvbnN1bWVkDQo+ICsgKg0KPiArICogUmVwbGFjZXMgdGhlICVE Uk1fREVQX0pPQl9GRU5DRV9QUkVBTExPQyBzZW50aW5lbCBhdCBAaW5kZXggaW4NCj4gKyAqIEBq b2ItPmRlcGVuZGVuY2llcyB3aXRoIEBmZW5jZS4gIFRoZSBzbG90IG11c3QgaGF2ZSBiZWVuIHBy ZS1hbGxvY2F0ZWQgYnkNCj4gKyAqIHBhc3NpbmcgJURSTV9ERVBfSk9CX0ZFTkNFX1BSRUFMTE9D IHRvIGRybV9kZXBfam9iX2FkZF9kZXBlbmRlbmN5KCk7IHRoZQ0KPiArICogZXhpc3RpbmcgZW50 cnkgaXMgYXNzZXJ0ZWQgdG8gYmUgdGhlIHNlbnRpbmVsLg0KPiArICoNCj4gKyAqIFRoaXMgaXMg dGhlIHNlY29uZCBoYWxmIG9mIHRoZSBwcmUtYWxsb2NhdGlvbiBwYXR0ZXJuIGRlc2NyaWJlZCBp bg0KPiArICogZHJtX2RlcF9qb2JfYWRkX2RlcGVuZGVuY3koKS4gIEl0IGlzIGludGVuZGVkIHRv IGJlIGNhbGxlZCBpbnNpZGUgYQ0KPiArICogZG1hX2ZlbmNlX2JlZ2luX3NpZ25hbGxpbmcoKSAv IGRtYV9mZW5jZV9lbmRfc2lnbmFsbGluZygpIHJlZ2lvbiB3aGVyZQ0KPiArICogbWVtb3J5IGFs bG9jYXRpb24gd2l0aCBHRlBfS0VSTkVMIGlzIGZvcmJpZGRlbi4gIEl0IHVzZXMgR0ZQX05PV0FJ VA0KPiArICogaW50ZXJuYWxseSBzbyBpdCBpcyBzYWZlIHRvIGNhbGwgZnJvbSBhdG9taWMgb3Ig c2lnbmFsbGluZyBjb250ZXh0LCBidXQNCj4gKyAqIHNpbmNlIHRoZSBzbG90IGhhcyBiZWVuIHBy ZS1hbGxvY2F0ZWQgbm8gYWN0dWFsIG1lbW9yeSBhbGxvY2F0aW9uIG9jY3Vycy4NCj4gKyAqDQo+ ICsgKiBJZiBAZmVuY2UgaXMgYWxyZWFkeSBzaWduYWxsZWQgdGhlIHNsb3QgaXMgZXJhc2VkIHJh dGhlciB0aGFuIHN0b3JpbmcgYQ0KPiArICogcmVkdW5kYW50IGRlcGVuZGVuY3kuICBUaGUgc3Vj Y2Vzc2Z1bCBzdG9yZSBpcyBhc3NlcnRlZCDigJQgaWYgdGhlIHN0b3JlDQo+ICsgKiBmYWlscyBp dCBpbmRpY2F0ZXMgYSBwcm9ncmFtbWluZyBlcnJvciAoc2xvdCBpbmRleCBvdXQgb2YgcmFuZ2Ug b3INCj4gKyAqIGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9uKS4NCj4gKyAqDQo+ICsgKiBNdXN0IGJl IGNhbGxlZCBiZWZvcmUgZHJtX2RlcF9qb2JfYXJtKCkuIEBmZW5jZSBpcyBjb25zdW1lZCBpbiBh bGwgY2FzZXMuDQo+ICsgKg0KPiArICogQ29udGV4dDogQW55IGNvbnRleHQuIERNQSBmZW5jZSBz aWduYWxpbmcgcGF0aC4NCj4gKyAqLw0KPiArdm9pZCBkcm1fZGVwX2pvYl9yZXBsYWNlX2RlcGVu ZGVuY3koc3RydWN0IGRybV9kZXBfam9iICpqb2IsIHUzMiBpbmRleCwNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRtYV9mZW5jZSAqZmVuY2UpDQo+ICt7DQo+ ICsgICAgICAgV0FSTl9PTih4YV9sb2FkKCZqb2ItPmRlcGVuZGVuY2llcywgaW5kZXgpICE9DQo+ ICsgICAgICAgICAgICAgICBEUk1fREVQX0pPQl9GRU5DRV9QUkVBTExPQyk7DQo+ICsNCj4gKyAg ICAgICBpZiAoZG1hX2ZlbmNlX3Rlc3Rfc2lnbmFsZWRfZmxhZyhmZW5jZSkpIHsNCj4gKyAgICAg ICAgICAgICAgIHhhX2VyYXNlKCZqb2ItPmRlcGVuZGVuY2llcywgaW5kZXgpOw0KPiArICAgICAg ICAgICAgICAgZG1hX2ZlbmNlX3B1dChmZW5jZSk7DQo+ICsgICAgICAgICAgICAgICByZXR1cm47 DQo+ICsgICAgICAgfQ0KPiArDQo+ICsgICAgICAgaWYgKFdBUk5fT04oeGFfaXNfZXJyKHhhX3N0 b3JlKCZqb2ItPmRlcGVuZGVuY2llcywgaW5kZXgsIGZlbmNlLA0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBHRlBfTk9XQUlUKSkpKSB7DQo+ICsgICAgICAgICAgICAg ICBkbWFfZmVuY2VfcHV0KGZlbmNlKTsNCj4gKyAgICAgICAgICAgICAgIHJldHVybjsNCj4gKyAg ICAgICB9DQo+ICt9DQo+ICtFWFBPUlRfU1lNQk9MKGRybV9kZXBfam9iX3JlcGxhY2VfZGVwZW5k ZW5jeSk7DQo+ICsNCj4gKy8qKg0KPiArICogZHJtX2RlcF9qb2JfYWRkX3N5bmNvYmpfZGVwZW5k ZW5jeSgpIC0gYWRkcyBhIHN5bmNvYmoncyBmZW5jZSBhcyBhDQo+ICsgKiAgIGpvYiBkZXBlbmRl bmN5DQo+ICsgKiBAam9iOiBkZXAgam9iIHRvIGFkZCB0aGUgZGVwZW5kZW5jaWVzIHRvDQo+ICsg KiBAZmlsZTogZHJtIGZpbGUgcHJpdmF0ZSBwb2ludGVyDQo+ICsgKiBAaGFuZGxlOiBzeW5jb2Jq IGhhbmRsZSB0byBsb29rdXANCj4gKyAqIEBwb2ludDogdGltZWxpbmUgcG9pbnQNCj4gKyAqDQo+ ICsgKiBUaGlzIGFkZHMgdGhlIGZlbmNlIG1hdGNoaW5nIHRoZSBnaXZlbiBzeW5jb2JqIHRvIEBq b2IuDQo+ICsgKg0KPiArICogQ29udGV4dDogUHJvY2VzcyBjb250ZXh0Lg0KPiArICogUmV0dXJu OiAwIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZS4NCj4gKyAqLw0KPiAraW50 IGRybV9kZXBfam9iX2FkZF9zeW5jb2JqX2RlcGVuZGVuY3koc3RydWN0IGRybV9kZXBfam9iICpq b2IsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcm1f ZmlsZSAqZmlsZSwgdTMyIGhhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdTMyIHBvaW50KQ0KPiArew0KPiArICAgICAgIHN0cnVjdCBkbWFfZmVuY2UgKmZl bmNlOw0KPiArICAgICAgIGludCByZXQ7DQo+ICsNCj4gKyAgICAgICByZXQgPSBkcm1fc3luY29i al9maW5kX2ZlbmNlKGZpbGUsIGhhbmRsZSwgcG9pbnQsIDAsICZmZW5jZSk7DQo+ICsgICAgICAg aWYgKHJldCkNCj4gKyAgICAgICAgICAgICAgIHJldHVybiByZXQ7DQo+ICsNCj4gKyAgICAgICBy ZXR1cm4gZHJtX2RlcF9qb2JfYWRkX2RlcGVuZGVuY3koam9iLCBmZW5jZSk7DQo+ICt9DQo+ICtF WFBPUlRfU1lNQk9MKGRybV9kZXBfam9iX2FkZF9zeW5jb2JqX2RlcGVuZGVuY3kpOw0KPiArDQo+ ICsvKioNCj4gKyAqIGRybV9kZXBfam9iX2FkZF9yZXN2X2RlcGVuZGVuY2llcygpIC0gYWRkIGFs bCBmZW5jZXMgZnJvbSB0aGUgcmVzdiB0byB0aGUgam9iDQo+ICsgKiBAam9iOiBkZXAgam9iIHRv IGFkZCB0aGUgZGVwZW5kZW5jaWVzIHRvDQo+ICsgKiBAcmVzdjogdGhlIGRtYV9yZXN2IG9iamVj dCB0byBnZXQgdGhlIGZlbmNlcyBmcm9tDQo+ICsgKiBAdXNhZ2U6IHRoZSBkbWFfcmVzdl91c2Fn ZSB0byB1c2UgdG8gZmlsdGVyIHRoZSBmZW5jZXMNCj4gKyAqDQo+ICsgKiBUaGlzIGFkZHMgYWxs IGZlbmNlcyBtYXRjaGluZyB0aGUgZ2l2ZW4gdXNhZ2UgZnJvbSBAcmVzdiB0byBAam9iLg0KPiAr ICogTXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgQHJlc3YgbG9jayBoZWxkLg0KPiArICoNCj4gKyAq IENvbnRleHQ6IFByb2Nlc3MgY29udGV4dC4NCj4gKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBv ciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUuDQo+ICsgKi8NCj4gK2ludCBkcm1fZGVwX2pvYl9hZGRf cmVzdl9kZXBlbmRlbmNpZXMoc3RydWN0IGRybV9kZXBfam9iICpqb2IsDQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRtYV9yZXN2ICpyZXN2LA0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gZG1hX3Jlc3ZfdXNhZ2UgdXNh Z2UpDQo+ICt7DQo+ICsgICAgICAgc3RydWN0IGRtYV9yZXN2X2l0ZXIgY3Vyc29yOw0KPiArICAg ICAgIHN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlOw0KPiArICAgICAgIGludCByZXQ7DQo+ICsNCj4g KyAgICAgICBkbWFfcmVzdl9hc3NlcnRfaGVsZChyZXN2KTsNCj4gKw0KPiArICAgICAgIGRtYV9y ZXN2X2Zvcl9lYWNoX2ZlbmNlKCZjdXJzb3IsIHJlc3YsIHVzYWdlLCBmZW5jZSkgew0KPiArICAg ICAgICAgICAgICAgLyoNCj4gKyAgICAgICAgICAgICAgICAqIEFzIGRybV9kZXBfam9iX2FkZF9k ZXBlbmRlbmN5IGFsd2F5cyBjb25zdW1lcyB0aGUgZmVuY2UNCj4gKyAgICAgICAgICAgICAgICAq IHJlZmVyZW5jZSAoZXZlbiB3aGVuIGl0IGZhaWxzKSwgYW5kIGRtYV9yZXN2X2Zvcl9lYWNoX2Zl bmNlDQo+ICsgICAgICAgICAgICAgICAgKiBpcyBub3Qgb2J0YWluaW5nIG9uZSwgd2UgbmVlZCB0 byBncmFiIG9uZSBiZWZvcmUgY2FsbGluZy4NCj4gKyAgICAgICAgICAgICAgICAqLw0KPiArICAg ICAgICAgICAgICAgcmV0ID0gZHJtX2RlcF9qb2JfYWRkX2RlcGVuZGVuY3koam9iLCBkbWFfZmVu Y2VfZ2V0KGZlbmNlKSk7DQo+ICsgICAgICAgICAgICAgICBpZiAocmV0KQ0KPiArICAgICAgICAg ICAgICAgICAgICAgICByZXR1cm4gcmV0Ow0KPiArICAgICAgIH0NCj4gKyAgICAgICByZXR1cm4g MDsNCj4gK30NCj4gK0VYUE9SVF9TWU1CT0woZHJtX2RlcF9qb2JfYWRkX3Jlc3ZfZGVwZW5kZW5j aWVzKTsNCj4gKw0KPiArLyoqDQo+ICsgKiBkcm1fZGVwX2pvYl9hZGRfaW1wbGljaXRfZGVwZW5k ZW5jaWVzKCkgLSBhZGRzIGltcGxpY2l0IGRlcGVuZGVuY2llcw0KPiArICogICBhcyBqb2IgZGVw ZW5kZW5jaWVzDQo+ICsgKiBAam9iOiBkZXAgam9iIHRvIGFkZCB0aGUgZGVwZW5kZW5jaWVzIHRv DQo+ICsgKiBAb2JqOiB0aGUgZ2VtIG9iamVjdCB0byBhZGQgbmV3IGRlcGVuZGVuY2llcyBmcm9t Lg0KPiArICogQHdyaXRlOiB3aGV0aGVyIHRoZSBqb2IgbWlnaHQgd3JpdGUgdGhlIG9iamVjdCAo c28gd2UgbmVlZCB0byBkZXBlbmQgb24NCj4gKyAqIHNoYXJlZCBmZW5jZXMgaW4gdGhlIHJlc2Vy dmF0aW9uIG9iamVjdCkuDQo+ICsgKg0KPiArICogVGhpcyBzaG91bGQgYmUgY2FsbGVkIGFmdGVy IGRybV9nZW1fbG9ja19yZXNlcnZhdGlvbnMoKSBvbiB5b3VyIGFycmF5IG9mDQo+ICsgKiBHRU0g b2JqZWN0cyB1c2VkIGluIHRoZSBqb2IgYnV0IGJlZm9yZSB1cGRhdGluZyB0aGUgcmVzZXJ2YXRp b25zIHdpdGggeW91cg0KPiArICogb3duIGZlbmNlcy4NCj4gKyAqDQo+ICsgKiBDb250ZXh0OiBQ cm9jZXNzIGNvbnRleHQuDQo+ICsgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2 ZSBlcnJvciBjb2RlLg0KPiArICovDQo+ICtpbnQgZHJtX2RlcF9qb2JfYWRkX2ltcGxpY2l0X2Rl cGVuZGVuY2llcyhzdHJ1Y3QgZHJtX2RlcF9qb2IgKmpvYiwNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgd3JpdGUpDQo+ICt7 DQo+ICsgICAgICAgcmV0dXJuIGRybV9kZXBfam9iX2FkZF9yZXN2X2RlcGVuZGVuY2llcyhqb2Is IG9iai0+cmVzdiwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGRtYV9yZXN2X3VzYWdlX3J3KHdyaXRlKSk7DQo+ICt9DQo+ICtFWFBPUlRfU1lNQk9M KGRybV9kZXBfam9iX2FkZF9pbXBsaWNpdF9kZXBlbmRlbmNpZXMpOw0KPiArDQo+ICsvKioNCj4g KyAqIGRybV9kZXBfam9iX2lzX3NpZ25hbGVkKCkgLSBjaGVjayB3aGV0aGVyIGEgZGVwIGpvYiBo YXMgY29tcGxldGVkDQo+ICsgKiBAam9iOiBkZXAgam9iIHRvIGNoZWNrDQo+ICsgKg0KPiArICog RGV0ZXJtaW5lcyB3aGV0aGVyIEBqb2IgaGFzIHNpZ25hbGxlZC4gVGhlIHF1ZXVlIHNob3VsZCBi ZSBzdG9wcGVkIGJlZm9yZQ0KPiArICogY2FsbGluZyB0aGlzIHRvIG9idGFpbiBhIHN0YWJsZSBz bmFwc2hvdCBvZiBzdGF0ZS4gQm90aCB0aGUgcGFyZW50IGhhcmR3YXJlDQo+ICsgKiBmZW5jZSBh bmQgdGhlIGZpbmlzaGVkIHNvZnR3YXJlIGZlbmNlIGFyZSBjaGVja2VkLg0KPiArICoNCj4gKyAq IENvbnRleHQ6IFByb2Nlc3MgY29udGV4dC4gVGhlIHF1ZXVlIG11c3QgYmUgc3RvcHBlZCBiZWZv cmUgY2FsbGluZyB0aGlzLg0KPiArICogUmV0dXJuOiB0cnVlIGlmIHRoZSBqb2IgaXMgc2lnbmFs bGVkLCBmYWxzZSBvdGhlcndpc2UuDQo+ICsgKi8NCj4gK2Jvb2wgZHJtX2RlcF9qb2JfaXNfc2ln bmFsZWQoc3RydWN0IGRybV9kZXBfam9iICpqb2IpDQo+ICt7DQo+ICsgICAgICAgV0FSTl9PTigh ZHJtX2RlcF9xdWV1ZV9pc19zdG9wcGVkKGpvYi0+cSkpOw0KPiArICAgICAgIHJldHVybiBkcm1f ZGVwX2ZlbmNlX2lzX2NvbXBsZXRlKGpvYi0+ZGZlbmNlKTsNCj4gK30NCj4gK0VYUE9SVF9TWU1C T0woZHJtX2RlcF9qb2JfaXNfc2lnbmFsZWQpOw0KPiArDQo+ICsvKioNCj4gKyAqIGRybV9kZXBf am9iX2lzX2ZpbmlzaGVkKCkgLSB0ZXN0IHdoZXRoZXIgYSBkZXAgam9iJ3MgZmluaXNoZWQgZmVu Y2UgaGFzIHNpZ25hbGxlZA0KPiArICogQGpvYjogZGVwIGpvYiB0byBjaGVjaw0KPiArICoNCj4g KyAqIFRlc3RzIHdoZXRoZXIgdGhlIGpvYidzIHNvZnR3YXJlIGZpbmlzaGVkIGZlbmNlIGhhcyBi ZWVuIHNpZ25hbGxlZCwgdXNpbmcNCj4gKyAqIGRtYV9mZW5jZV90ZXN0X3NpZ25hbGVkX2ZsYWco KSB0byBhdm9pZCBhbnkgc2lnbmFsbGluZyBzaWRlLWVmZmVjdHMuIFVubGlrZQ0KPiArICogZHJt X2RlcF9qb2JfaXNfc2lnbmFsZWQoKSwgdGhpcyBkb2VzIG5vdCByZXF1aXJlIHRoZSBxdWV1ZSB0 byBiZSBzdG9wcGVkIGFuZA0KPiArICogZG9lcyBub3QgY2hlY2sgdGhlIHBhcmVudCBoYXJkd2Fy ZSBmZW5jZSDigJQgaXQgaXMgYSBsaWdodHdlaWdodCB0ZXN0IG9mIHRoZQ0KPiArICogZmluaXNo ZWQgZmVuY2Ugb25seS4NCj4gKyAqDQo+ICsgKiBDb250ZXh0OiBBbnkgY29udGV4dC4NCj4gKyAq IFJldHVybjogdHJ1ZSBpZiB0aGUgam9iJ3MgZmluaXNoZWQgZmVuY2UgaGFzIGJlZW4gc2lnbmFs bGVkLCBmYWxzZSBvdGhlcndpc2UuDQo+ICsgKi8NCj4gK2Jvb2wgZHJtX2RlcF9qb2JfaXNfZmlu aXNoZWQoc3RydWN0IGRybV9kZXBfam9iICpqb2IpDQo+ICt7DQo+ICsgICAgICAgcmV0dXJuIGRy bV9kZXBfZmVuY2VfaXNfZmluaXNoZWQoam9iLT5kZmVuY2UpOw0KPiArfQ0KPiArRVhQT1JUX1NZ TUJPTChkcm1fZGVwX2pvYl9pc19maW5pc2hlZCk7DQo+ICsNCj4gKy8qKg0KPiArICogZHJtX2Rl cF9qb2JfaW52YWxpZGF0ZV9qb2IoKSAtIGluY3JlbWVudCB0aGUgaW52YWxpZGF0aW9uIGNvdW50 IGZvciBhIGpvYg0KPiArICogQGpvYjogZGVwIGpvYiB0byBpbnZhbGlkYXRlDQo+ICsgKiBAdGhy ZXNob2xkOiB0aHJlc2hvbGQgYWJvdmUgd2hpY2ggdGhlIGpvYiBpcyBjb25zaWRlcmVkIGludmFs aWRhdGVkDQo+ICsgKg0KPiArICogSW5jcmVtZW50cyBAam9iLT5pbnZhbGlkYXRlX2NvdW50IGFu ZCByZXR1cm5zIHRydWUgaWYgaXQgZXhjZWVkcyBAdGhyZXNob2xkLA0KPiArICogaW5kaWNhdGlu ZyB0aGUgam9iIHNob3VsZCBiZSBjb25zaWRlcmVkIGh1bmcgYW5kIGRpc2NhcmRlZC4gVGhlIHF1 ZXVlIG11c3QNCj4gKyAqIGJlIHN0b3BwZWQgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4N Cj4gKyAqDQo+ICsgKiBDb250ZXh0OiBQcm9jZXNzIGNvbnRleHQuIFRoZSBxdWV1ZSBtdXN0IGJl IHN0b3BwZWQgYmVmb3JlIGNhbGxpbmcgdGhpcy4NCj4gKyAqIFJldHVybjogdHJ1ZSBpZiBAam9i LT5pbnZhbGlkYXRlX2NvdW50IGV4Y2VlZHMgQHRocmVzaG9sZCwgZmFsc2Ugb3RoZXJ3aXNlLg0K PiArICovDQo+ICtib29sIGRybV9kZXBfam9iX2ludmFsaWRhdGVfam9iKHN0cnVjdCBkcm1fZGVw X2pvYiAqam9iLCBpbnQgdGhyZXNob2xkKQ0KPiArew0KPiArICAgICAgIFdBUk5fT04oIWRybV9k ZXBfcXVldWVfaXNfc3RvcHBlZChqb2ItPnEpKTsNCj4gKyAgICAgICByZXR1cm4gKytqb2ItPmlu dmFsaWRhdGVfY291bnQgPiB0aHJlc2hvbGQ7DQo+ICt9DQo+ICtFWFBPUlRfU1lNQk9MKGRybV9k ZXBfam9iX2ludmFsaWRhdGVfam9iKTsNCj4gKw0KPiArLyoqDQo+ICsgKiBkcm1fZGVwX2pvYl9m aW5pc2hlZF9mZW5jZSgpIC0gcmV0dXJuIHRoZSBmaW5pc2hlZCBmZW5jZSBmb3IgYSBqb2INCj4g KyAqIEBqb2I6IGRlcCBqb2IgdG8gcXVlcnkNCj4gKyAqDQo+ICsgKiBObyByZWZlcmVuY2UgaXMg dGFrZW4gb24gdGhlIHJldHVybmVkIGZlbmNlOyB0aGUgY2FsbGVyIG11c3QgaG9sZCBpdHMgb3du DQo+ICsgKiByZWZlcmVuY2UgdG8gQGpvYiBmb3IgdGhlIGR1cmF0aW9uIG9mIGFueSBhY2Nlc3Mu DQo+ICsgKg0KPiArICogQ29udGV4dDogQW55IGNvbnRleHQuDQo+ICsgKiBSZXR1cm46IHRoZSBm aW5pc2hlZCAmZG1hX2ZlbmNlIGZvciBAam9iLg0KPiArICovDQo+ICtzdHJ1Y3QgZG1hX2ZlbmNl ICpkcm1fZGVwX2pvYl9maW5pc2hlZF9mZW5jZShzdHJ1Y3QgZHJtX2RlcF9qb2IgKmpvYikNCj4g K3sNCj4gKyAgICAgICByZXR1cm4gZHJtX2RlcF9mZW5jZV90b19kbWEoam9iLT5kZmVuY2UpOw0K PiArfQ0KPiArRVhQT1JUX1NZTUJPTChkcm1fZGVwX2pvYl9maW5pc2hlZF9mZW5jZSk7DQo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZGVwL2RybV9kZXBfam9iLmggYi9kcml2ZXJzL2dw dS9kcm0vZGVwL2RybV9kZXBfam9iLmgNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXgg MDAwMDAwMDAwMDAwLi4zNWM2MWQyNThmYTENCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vZGVwL2RybV9kZXBfam9iLmgNCj4gQEAgLTAsMCArMSwxMyBAQA0KPiArLyog U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVCAqLw0KPiArLyoNCj4gKyAqIENvcHlyaWdodCDC qSAyMDI2IEludGVsIENvcnBvcmF0aW9uDQo+ICsgKi8NCj4gKw0KPiArI2lmbmRlZiBfRFJNX0RF UF9KT0JfSF8NCj4gKyNkZWZpbmUgX0RSTV9ERVBfSk9CX0hfDQo+ICsNCj4gK3N0cnVjdCBkcm1f ZGVwX3F1ZXVlOw0KPiArDQo+ICt2b2lkIGRybV9kZXBfam9iX2Ryb3BfZGVwZW5kZW5jaWVzKHN0 cnVjdCBkcm1fZGVwX2pvYiAqam9iKTsNCj4gKw0KPiArI2VuZGlmIC8qIF9EUk1fREVQX0pPQl9I XyAqLw0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RlcC9kcm1fZGVwX3F1ZXVlLmMg Yi9kcml2ZXJzL2dwdS9kcm0vZGVwL2RybV9kZXBfcXVldWUuYw0KPiBuZXcgZmlsZSBtb2RlIDEw MDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwMDAuLmRhYzAyZDBkMjJjNA0KPiAtLS0gL2Rldi9udWxs DQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9kZXAvZHJtX2RlcF9xdWV1ZS5jDQo+IEBAIC0wLDAg KzEsMTY0NyBAQA0KPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVA0KPiArLyoNCj4g KyAqIENvcHlyaWdodCAyMDE1IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4NCj4gKyAqDQo+ ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55 IHBlcnNvbiBvYnRhaW5pbmcgYQ0KPiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3Nv Y2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwNCj4gKyAqIHRvIGRl YWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0 IGxpbWl0YXRpb24NCj4gKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdl LCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLA0KPiArICogYW5kL29yIHNlbGwgY29w aWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlDQo+ ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxv d2luZyBjb25kaXRpb25zOg0KPiArICoNCj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNl IGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluDQo+ICsgKiBh bGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4NCj4gKyAq DQo+ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5U WSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUg0KPiArICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBO T1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksDQo+ICsgKiBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4g Tk8gRVZFTlQgU0hBTEwNCj4gKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihT KSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUg0KPiArICogT1RIRVIgTElBQklM SVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0Us DQo+ICsgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNP RlRXQVJFIE9SIFRIRSBVU0UgT1INCj4gKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FS RS4NCj4gKyAqDQo+ICsgKiBDb3B5cmlnaHQgwqkgMjAyNiBJbnRlbCBDb3Jwb3JhdGlvbg0KPiAr ICovDQo+ICsNCj4gKy8qKg0KPiArICogRE9DOiBEUk0gZGVwZW5kZW5jeSBxdWV1ZQ0KPiArICoN Cj4gKyAqIFRoZSBkcm1fZGVwIHN1YnN5c3RlbSBwcm92aWRlcyBhIGxpZ2h0d2VpZ2h0IEdQVSBz dWJtaXNzaW9uIHF1ZXVlIHRoYXQNCj4gKyAqIGNvbWJpbmVzIHRoZSByb2xlcyBvZiBkcm1fZ3B1 X3NjaGVkdWxlciBhbmQgZHJtX3NjaGVkX2VudGl0eSBpbnRvIGENCj4gKyAqIHNpbmdsZSBvYmpl Y3QgKHN0cnVjdCBkcm1fZGVwX3F1ZXVlKS4gRWFjaCBxdWV1ZSBvd25zIGl0cyBvd24gb3JkZXJl ZA0KPiArICogc3VibWl0IHdvcmtxdWV1ZSwgdGltZW91dCB3b3JrcXVldWUsIGFuZCBURFIgZGVs YXllZC13b3JrLg0KPiArICoNCj4gKyAqICoqSm9iIGxpZmVjeWNsZSoqDQo+ICsgKg0KPiArICog MS4gQWxsb2NhdGUgYW5kIGluaXRpYWxpc2UgYSBqb2Igd2l0aCBkcm1fZGVwX2pvYl9pbml0KCku DQo+ICsgKiAyLiBBZGQgZGVwZW5kZW5jeSBmZW5jZXMgd2l0aCBkcm1fZGVwX2pvYl9hZGRfZGVw ZW5kZW5jeSgpIGFuZCBmcmllbmRzLg0KPiArICogMy4gQXJtIHRoZSBqb2Igd2l0aCBkcm1fZGVw X2pvYl9hcm0oKSB0byBvYnRhaW4gaXRzIG91dC1mZW5jZXMuDQo+ICsgKiA0LiBTdWJtaXQgd2l0 aCBkcm1fZGVwX2pvYl9wdXNoKCkuDQo+ICsgKg0KPiArICogKipTdWJtaXNzaW9uIHBhdGhzKioN Cj4gKyAqDQo+ICsgKiBkcm1fZGVwX2pvYl9wdXNoKCkgZGVjaWRlcyBiZXR3ZWVuIHR3byBwYXRo cyB1bmRlciBAcS0+c2NoZWQubG9jazoNCj4gKyAqDQo+ICsgKiAtICoqQnlwYXNzIHBhdGgqKiAo ZHJtX2RlcF9xdWV1ZV9jYW5fam9iX2J5cGFzcygpKTogaWYNCj4gKyAqICAgJURSTV9ERVBfUVVF VUVfRkxBR1NfQllQQVNTX1NVUFBPUlRFRCBpcyBzZXQsIHRoZSBxdWV1ZSBpcyBub3Qgc3RvcHBl ZCwNCj4gKyAqICAgdGhlIFNQU0MgcXVldWUgaXMgZW1wdHksIHRoZSBqb2IgaGFzIG5vIGRlcGVu ZGVuY3kgZmVuY2VzLCBhbmQgY3JlZGl0cw0KPiArICogICBhcmUgYXZhaWxhYmxlLCB0aGUgam9i IGlzIHN1Ym1pdHRlZCBpbmxpbmUgb24gdGhlIGNhbGxpbmcgdGhyZWFkIHdpdGhvdXQNCj4gKyAq ICAgdG91Y2hpbmcgdGhlIHN1Ym1pdCB3b3JrcXVldWUuDQo+ICsgKg0KPiArICogLSAqKlF1ZXVl ZCBwYXRoKiogKGRybV9kZXBfcXVldWVfcHVzaF9qb2IoKSk6IHRoZSBqb2IgaXMgcHVzaGVkIG9u dG8gYW4NCj4gKyAqICAgU1BTQyBxdWV1ZSBhbmQgdGhlIHJ1bl9qb2Igd29ya2VyIGlzIGtpY2tl ZC4gVGhlIHJ1bl9qb2Igd29ya2VyIHBvcHMgdGhlDQo+ICsgKiAgIGpvYiwgcmVzb2x2ZXMgYW55 IHJlbWFpbmluZyBkZXBlbmRlbmN5IGZlbmNlcyAoaW5zdGFsbGluZyB3YWtldXANCj4gKyAqICAg Y2FsbGJhY2tzIGZvciB1bnJlc29sdmVkIG9uZXMpLCBhbmQgY2FsbHMgZHJtX2RlcF9xdWV1ZV9y dW5fam9iKCkuDQo+ICsgKg0KPiArICogKipSdW5uaW5nIGEgam9iKioNCj4gKyAqDQo+ICsgKiBk cm1fZGVwX3F1ZXVlX3J1bl9qb2IoKSBhY2NvdW50cyBjcmVkaXRzLCBhcHBlbmRzIHRoZSBqb2Ig dG8gdGhlIHBlbmRpbmcNCj4gKyAqIGxpc3QgKHN0YXJ0aW5nIHRoZSBURFIgdGltZXIgb25seSB3 aGVuIHRoZSBsaXN0IHdhcyBwcmV2aW91c2x5IGVtcHR5KSwNCj4gKyAqIGNhbGxzIEBvcHMtPnJ1 bl9qb2IoKSwgc3RvcmVzIHRoZSByZXR1cm5lZCBoYXJkd2FyZSBmZW5jZSBhcyB0aGUgcGFyZW50 DQo+ICsgKiBvZiB0aGUgam9iJ3MgZGVwIGZlbmNlLCB0aGVuIGluc3RhbGxzIGEgY2FsbGJhY2sg b24gaXQuIFdoZW4gdGhlIGhhcmR3YXJlDQo+ICsgKiBmZW5jZSBmaXJlcyAob3IgdGhlIGpvYiBj b21wbGV0ZXMgc3luY2hyb25vdXNseSksIGRybV9kZXBfam9iX2RvbmUoKQ0KPiArICogc2lnbmFs cyB0aGUgZmluaXNoZWQgZmVuY2UsIHJldHVybnMgY3JlZGl0cywgYW5kIGtpY2tzIHRoZSBwdXRf am9iIHdvcmtlcg0KPiArICogdG8gZnJlZSB0aGUgam9iLg0KPiArICoNCj4gKyAqICoqVGltZW91 dCBkZXRlY3Rpb24gYW5kIHJlY292ZXJ5IChURFIpKioNCj4gKyAqDQo+ICsgKiBBIGRlbGF5ZWQg d29yayBpdGVtIGZpcmVzIHdoZW4gYSBqb2Igb24gdGhlIHBlbmRpbmcgbGlzdCB0YWtlcyBsb25n ZXIgdGhhbg0KPiArICogQHEtPmpvYi50aW1lb3V0IGppZmZpZXMuIEl0IGNhbGxzIEBvcHMtPnRp bWVkb3V0X2pvYigpIGFuZCBhY3RzIG9uIHRoZQ0KPiArICogcmV0dXJuZWQgc3RhdHVzICglRFJN X0RFUF9USU1FRE9VVF9TVEFUX0pPQl9TSUdOQUxFRCBvcg0KPiArICogJURSTV9ERVBfVElNRURP VVRfU1RBVF9SRVFVRVVFX0pPQikuDQo+ICsgKiBkcm1fZGVwX3F1ZXVlX3RyaWdnZXJfdGltZW91 dCgpIGZvcmNlcyB0aGUgdGltZXIgdG8gZmlyZSBpbW1lZGlhdGVseSAod2l0aG91dA0KPiArICog Y2hhbmdpbmcgdGhlIHN0b3JlZCB0aW1lb3V0KSwgZm9yIGV4YW1wbGUgZHVyaW5nIGRldmljZSB0 ZWFyZG93bi4NCj4gKyAqDQo+ICsgKiAqKlJlZmVyZW5jZSBjb3VudGluZyoqDQo+ICsgKg0KPiAr ICogSm9icyBhbmQgcXVldWVzIGFyZSBib3RoIHJlZmVyZW5jZSBjb3VudGVkLg0KPiArICoNCj4g KyAqIEEgam9iIGhvbGRzIGEgcmVmZXJlbmNlIHRvIGl0cyBxdWV1ZSBmcm9tIGRybV9kZXBfam9i X2luaXQoKSB1bnRpbA0KPiArICogZHJtX2RlcF9qb2JfcHV0KCkgZHJvcHMgdGhlIGpvYidzIGxh c3QgcmVmZXJlbmNlIGFuZCBpdHMgcmVsZWFzZSBjYWxsYmFjaw0KPiArICogcnVucy4gVGhpcyBl bnN1cmVzIHRoZSBxdWV1ZSByZW1haW5zIHZhbGlkIGZvciB0aGUgZW50aXJlIGxpZmV0aW1lIG9m IGFueQ0KPiArICogam9iIHRoYXQgd2FzIHN1Ym1pdHRlZCB0byBpdC4NCj4gKyAqDQo+ICsgKiBU aGUgcXVldWUgaG9sZHMgaXRzIG93biByZWZlcmVuY2UgdG8gYSBqb2IgZm9yIGFzIGxvbmcgYXMg dGhlIGpvYiBpcw0KPiArICogaW50ZXJuYWxseSB0cmFja2VkOiBmcm9tIHRoZSBtb21lbnQgdGhl IGpvYiBpcyBhZGRlZCB0byB0aGUgcGVuZGluZyBsaXN0DQo+ICsgKiBpbiBkcm1fZGVwX3F1ZXVl X3J1bl9qb2IoKSB1bnRpbCBkcm1fZGVwX2pvYl9kb25lKCkga2lja3MgdGhlIHB1dF9qb2INCj4g KyAqIHdvcmtlciwgd2hpY2ggY2FsbHMgZHJtX2RlcF9qb2JfcHV0KCkgdG8gcmVsZWFzZSB0aGF0 IHJlZmVyZW5jZS4NCj4gKyAqDQo+ICsgKiAqKkhhemFyZDogdXNlLWFmdGVyLWZyZWUgZnJvbSB3 aXRoaW4gYSB3b3JrZXIqKg0KPiArICoNCj4gKyAqIEJlY2F1c2UgYSBqb2IgaG9sZHMgYSBxdWV1 ZSByZWZlcmVuY2UsIGRybV9kZXBfam9iX3B1dCgpIGRyb3BwaW5nIHRoZSBsYXN0DQo+ICsgKiBq b2IgcmVmZXJlbmNlIHdpbGwgYWxzbyBkcm9wIGEgcXVldWUgcmVmZXJlbmNlIHZpYSB0aGUgam9i J3MgcmVsZWFzZSBwYXRoLg0KPiArICogSWYgdGhhdCBoYXBwZW5zIHRvIGJlIHRoZSBsYXN0IHF1 ZXVlIHJlZmVyZW5jZSwgZHJtX2RlcF9xdWV1ZV9maW5pKCkgY2FuIGJlDQo+ICsgKiBjYWxsZWQs IHdoaWNoIHF1ZXVlcyBAcS0+ZnJlZV93b3JrIG9uIGRlcF9mcmVlX3dxIGFuZCByZXR1cm5zIGlt bWVkaWF0ZWx5Lg0KPiArICogZnJlZV93b3JrIGNhbGxzIGRpc2FibGVfd29ya19zeW5jKCkgLyBk aXNhYmxlX2RlbGF5ZWRfd29ya19zeW5jKCkgb24gdGhlDQo+ICsgKiBxdWV1ZSdzIG93biB3b3Jr ZXJzIGJlZm9yZSBkZXN0cm95aW5nIGl0cyB3b3JrcXVldWVzLCBzbyBpbiBwcmFjdGljZSBhDQo+ ICsgKiBydW5uaW5nIHdvcmtlciBhbHdheXMgY29tcGxldGVzIGJlZm9yZSB0aGUgcXVldWUgbWVt b3J5IGlzIGZyZWVkLg0KPiArICoNCj4gKyAqIEhvd2V2ZXIsIHRoZXJlIGlzIGEgc2Vjb25kYXJ5 IGhhemFyZDogYSB3b3JrZXIgY2FuIGJlIHF1ZXVlZCB3aGlsZSB0aGUNCj4gKyAqIHF1ZXVlIGlz IGluIGEgInpvbWJpZSIgc3RhdGUg4oCUIHJlZmNvdW50IGhhcyBhbHJlYWR5IHJlYWNoZWQgemVy byBhbmQgYXN5bmMNCj4gKyAqIHRlYXJkb3duIGlzIGluIGZsaWdodCwgYnV0IHRoZSB3b3JrIGl0 ZW0gaGFzIG5vdCB5ZXQgYmVlbiBkaXNhYmxlZCBieQ0KPiArICogZnJlZV93b3JrLiAgVG8gZ3Vh cmQgYWdhaW5zdCB0aGlzIGV2ZXJ5IHdvcmtlciB1c2VzDQo+ICsgKiBkcm1fZGVwX3F1ZXVlX2dl dF91bmxlc3NfemVybygpIGF0IGVudHJ5OyBpZiB0aGUgcmVmY291bnQgaXMgYWxyZWFkeSB6ZXJv DQo+ICsgKiB0aGUgd29ya2VyIGJhaWxzIGltbWVkaWF0ZWx5IHdpdGhvdXQgdG91Y2hpbmcgdGhl IHF1ZXVlIHN0YXRlLg0KPiArICoNCj4gKyAqIEJlY2F1c2UgYWxsIGFjdHVhbCB0ZWFyZG93biAo ZGlzYWJsZV8qX3N5bmMsIGRlc3Ryb3lfd29ya3F1ZXVlKSBydW5zIG9uDQo+ICsgKiBkZXBfZnJl ZV93cSDigJQgd2hpY2ggaXMgaW5kZXBlbmRlbnQgb2YgdGhlIHF1ZXVlJ3Mgb3duIHN1Ym1pdC90 aW1lb3V0DQo+ICsgKiB3b3JrcXVldWVzIOKAlCB0aGVyZSBpcyBubyBkZWFkbG9jayByaXNrLiAg RWFjaCBxdWV1ZSBob2xkcyBhIGRybV9kZXZfZ2V0KCkNCj4gKyAqIHJlZmVyZW5jZSBvbiBpdHMg b3duaW5nICZkcm1fZGV2aWNlLCB3aGljaCBpcyByZWxlYXNlZCBhcyB0aGUgbGFzdCBzdGVwIG9m DQo+ICsgKiB0ZWFyZG93bi4gIFRoaXMgZW5zdXJlcyB0aGUgZHJpdmVyIG1vZHVsZSBjYW5ub3Qg YmUgdW5sb2FkZWQgd2hpbGUgYW55IHF1ZXVlDQo+ICsgKiBpcyBzdGlsbCBhbGl2ZS4NCj4gKyAq Lw0KPiArDQo+ICsjaW5jbHVkZSA8bGludXgvZG1hLXJlc3YuaD4NCj4gKyNpbmNsdWRlIDxsaW51 eC9rcmVmLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+DQo+ICsjaW5jbHVkZSA8bGlu dXgvb3ZlcmZsb3cuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+DQo+ICsjaW5jbHVkZSA8 bGludXgvd2FpdC5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPg0KPiArI2luY2x1 ZGUgPGRybS9kcm1fZGVwLmg+DQo+ICsjaW5jbHVkZSA8ZHJtL2RybV9kcnYuaD4NCj4gKyNpbmNs dWRlIDxkcm0vZHJtX3ByaW50Lmg+DQo+ICsjaW5jbHVkZSAiZHJtX2RlcF9mZW5jZS5oIg0KPiAr I2luY2x1ZGUgImRybV9kZXBfam9iLmgiDQo+ICsjaW5jbHVkZSAiZHJtX2RlcF9xdWV1ZS5oIg0K PiArDQo+ICsvKg0KPiArICogRGVkaWNhdGVkIHdvcmtxdWV1ZSBmb3IgZGVmZXJyZWQgZHJtX2Rl cF9xdWV1ZSB0ZWFyZG93bi4gIFVzaW5nIGENCj4gKyAqIG1vZHVsZS1wcml2YXRlIFdRIGluc3Rl YWQgb2Ygc3lzdGVtX3BlcmNwdV93cSBrZWVwcyB0ZWFyZG93biBpc29sYXRlZA0KPiArICogZnJv bSB1bnJlbGF0ZWQga2VybmVsIHN1YnN5c3RlbXMuDQo+ICsgKi8NCj4gK3N0YXRpYyBzdHJ1Y3Qg d29ya3F1ZXVlX3N0cnVjdCAqZGVwX2ZyZWVfd3E7DQo+ICsNCj4gKy8qKg0KPiArICogZHJtX2Rl cF9xdWV1ZV9mbGFnc19zZXQoKSAtIHNldCBhIGZsYWcgb24gdGhlIHF1ZXVlIHVuZGVyIHNjaGVk LmxvY2sNCj4gKyAqIEBxOiBkZXAgcXVldWUNCj4gKyAqIEBmbGFnOiBmbGFnIHRvIHNldCAob25l IG9mICZlbnVtIGRybV9kZXBfcXVldWVfZmxhZ3MpDQo+ICsgKg0KPiArICogU2V0cyBAZmxhZyBp biBAcS0+c2NoZWQuZmxhZ3MuIE11c3QgYmUgY2FsbGVkIHdpdGggQHEtPnNjaGVkLmxvY2sNCj4g KyAqIGhlbGQ7IHRoZSBsb2NrZGVwIGFzc2VydGlvbiBlbmZvcmNlcyB0aGlzLg0KPiArICoNCj4g KyAqIENvbnRleHQ6IFByb2Nlc3MgY29udGV4dC4gTXVzdCBob2xkIEBxLT5zY2hlZC5sb2NrLiBE TUEgZmVuY2Ugc2lnbmFsaW5nIHBhdGguDQo+ICsgKi8NCj4gK3N0YXRpYyB2b2lkIGRybV9kZXBf cXVldWVfZmxhZ3Nfc2V0KHN0cnVjdCBkcm1fZGVwX3F1ZXVlICpxLA0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBlbnVtIGRybV9kZXBfcXVldWVfZmxhZ3MgZmxhZykNCj4g K3sNCj4gKyAgICAgICBsb2NrZGVwX2Fzc2VydF9oZWxkKCZxLT5zY2hlZC5sb2NrKTsNCj4gKyAg ICAgICBxLT5zY2hlZC5mbGFncyB8PSBmbGFnOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAqIGRy bV9kZXBfcXVldWVfZmxhZ3NfY2xlYXIoKSAtIGNsZWFyIGEgZmxhZyBvbiB0aGUgcXVldWUgdW5k ZXIgc2NoZWQubG9jaw0KPiArICogQHE6IGRlcCBxdWV1ZQ0KPiArICogQGZsYWc6IGZsYWcgdG8g Y2xlYXIgKG9uZSBvZiAmZW51bSBkcm1fZGVwX3F1ZXVlX2ZsYWdzKQ0KPiArICoNCj4gKyAqIENs ZWFycyBAZmxhZyBpbiBAcS0+c2NoZWQuZmxhZ3MuIE11c3QgYmUgY2FsbGVkIHdpdGggQHEtPnNj aGVkLmxvY2sNCj4gKyAqIGhlbGQ7IHRoZSBsb2NrZGVwIGFzc2VydGlvbiBlbmZvcmNlcyB0aGlz Lg0KPiArICoNCj4gKyAqIENvbnRleHQ6IFByb2Nlc3MgY29udGV4dC4gTXVzdCBob2xkIEBxLT5z Y2hlZC5sb2NrLiBETUEgZmVuY2Ugc2lnbmFsaW5nIHBhdGguDQo+ICsgKi8NCj4gK3N0YXRpYyB2 b2lkIGRybV9kZXBfcXVldWVfZmxhZ3NfY2xlYXIoc3RydWN0IGRybV9kZXBfcXVldWUgKnEsDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBkcm1fZGVwX3F1ZXVl X2ZsYWdzIGZsYWcpDQo+ICt7DQo+ICsgICAgICAgbG9ja2RlcF9hc3NlcnRfaGVsZCgmcS0+c2No ZWQubG9jayk7DQo+ICsgICAgICAgcS0+c2NoZWQuZmxhZ3MgJj0gfmZsYWc7DQo+ICt9DQo+ICsN Cj4gKy8qKg0KPiArICogZHJtX2RlcF9xdWV1ZV9oYXNfY3JlZGl0cygpIC0gY2hlY2sgd2hldGhl ciB0aGUgcXVldWUgaGFzIGVub3VnaCBjcmVkaXRzDQo+ICsgKiBAcTogZGVwIHF1ZXVlDQo+ICsg KiBAam9iOiBqb2IgcmVxdWVzdGluZyBjcmVkaXRzDQo+ICsgKg0KPiArICogQ2hlY2tzIHdoZXRo ZXIgdGhlIHF1ZXVlIGhhcyBlbm91Z2ggYXZhaWxhYmxlIGNyZWRpdHMgdG8gZGlzcGF0Y2gNCj4g KyAqIEBqb2IuIElmIEBqb2ItPmNyZWRpdHMgZXhjZWVkcyB0aGUgcXVldWUncyBjcmVkaXQgbGlt aXQsIGl0IGlzDQo+ICsgKiBjbGFtcGVkIHdpdGggYSBXQVJOLg0KPiArICoNCj4gKyAqIENvbnRl eHQ6IFByb2Nlc3MgY29udGV4dC4gTXVzdCBob2xkIEBxLT5zY2hlZC5sb2NrLiBETUEgZmVuY2Ug c2lnbmFsaW5nIHBhdGguDQo+ICsgKiBSZXR1cm46IHRydWUgaWYgYXZhaWxhYmxlIGNyZWRpdHMg Pj0gQGpvYi0+Y3JlZGl0cywgZmFsc2Ugb3RoZXJ3aXNlLg0KPiArICovDQo+ICtzdGF0aWMgYm9v bCBkcm1fZGVwX3F1ZXVlX2hhc19jcmVkaXRzKHN0cnVjdCBkcm1fZGVwX3F1ZXVlICpxLA0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcm1fZGVwX2pvYiAq am9iKQ0KPiArew0KPiArICAgICAgIHUzMiBhdmFpbGFibGU7DQo+ICsNCj4gKyAgICAgICBsb2Nr ZGVwX2Fzc2VydF9oZWxkKCZxLT5zY2hlZC5sb2NrKTsNCj4gKw0KPiArICAgICAgIGlmIChqb2It PmNyZWRpdHMgPiBxLT5jcmVkaXQubGltaXQpIHsNCj4gKyAgICAgICAgICAgICAgIGRybV93YXJu KHEtPmRybSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICJKb2JzIG1heSBub3QgZXhjZWVk IHRoZSBjcmVkaXQgbGltaXQsIHRydW5jYXRlLlxuIik7DQo+ICsgICAgICAgICAgICAgICBqb2It PmNyZWRpdHMgPSBxLT5jcmVkaXQubGltaXQ7DQo+ICsgICAgICAgfQ0KPiArDQo+ICsgICAgICAg V0FSTl9PTihjaGVja19zdWJfb3ZlcmZsb3cocS0+Y3JlZGl0LmxpbWl0LA0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGF0b21pY19yZWFkKCZxLT5jcmVkaXQuY291bnQpLA0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhdmFpbGFibGUpKTsNCj4gKw0K PiArICAgICAgIHJldHVybiBhdmFpbGFibGUgPj0gam9iLT5jcmVkaXRzOw0KPiArfQ0KPiArDQo+ ICsvKioNCj4gKyAqIGRybV9kZXBfcXVldWVfcnVuX2pvYl9xdWV1ZSgpIC0ga2ljayB0aGUgcnVu LWpvYiB3b3JrZXINCj4gKyAqIEBxOiBkZXAgcXVldWUNCj4gKyAqDQo+ICsgKiBRdWV1ZXMgQHEt PnNjaGVkLnJ1bl9qb2Igb24gQHEtPnNjaGVkLnN1Ym1pdF93cSB1bmxlc3MgdGhlIHF1ZXVlIGlz IHN0b3BwZWQNCj4gKyAqIG9yIHRoZSBqb2IgcXVldWUgaXMgZW1wdHkuICBUaGUgZW1wdHktcXVl dWUgY2hlY2sgYXZvaWRzIHF1ZXVlaW5nIGEgd29yayBpdGVtDQo+ICsgKiB0aGF0IHdvdWxkIGlt bWVkaWF0ZWx5IHJldHVybiB3aXRoIG5vdGhpbmcgdG8gZG8uDQo+ICsgKg0KPiArICogQ29udGV4 dDogQW55IGNvbnRleHQuDQo+ICsgKi8NCj4gK3N0YXRpYyB2b2lkIGRybV9kZXBfcXVldWVfcnVu X2pvYl9xdWV1ZShzdHJ1Y3QgZHJtX2RlcF9xdWV1ZSAqcSkNCj4gK3sNCj4gKyAgICAgICBpZiAo IWRybV9kZXBfcXVldWVfaXNfc3RvcHBlZChxKSAmJiBzcHNjX3F1ZXVlX2NvdW50KCZxLT5qb2Iu cXVldWUpKQ0KPiArICAgICAgICAgICAgICAgcXVldWVfd29yayhxLT5zY2hlZC5zdWJtaXRfd3Es ICZxLT5zY2hlZC5ydW5fam9iKTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBkcm1fZGVwX3F1 ZXVlX3B1dF9qb2JfcXVldWUoKSAtIGtpY2sgdGhlIHB1dC1qb2Igd29ya2VyDQo+ICsgKiBAcTog ZGVwIHF1ZXVlDQo+ICsgKg0KPiArICogUXVldWVzIEBxLT5zY2hlZC5wdXRfam9iIG9uIEBxLT5z Y2hlZC5zdWJtaXRfd3EgdW5sZXNzIHRoZSBxdWV1ZQ0KPiArICogaXMgc3RvcHBlZC4NCj4gKyAq DQo+ICsgKiBDb250ZXh0OiBBbnkgY29udGV4dC4NCj4gKyAqLw0KPiArc3RhdGljIHZvaWQgZHJt X2RlcF9xdWV1ZV9wdXRfam9iX3F1ZXVlKHN0cnVjdCBkcm1fZGVwX3F1ZXVlICpxKQ0KPiArew0K PiArICAgICAgIGlmICghZHJtX2RlcF9xdWV1ZV9pc19zdG9wcGVkKHEpKQ0KPiArICAgICAgICAg ICAgICAgcXVldWVfd29yayhxLT5zY2hlZC5zdWJtaXRfd3EsICZxLT5zY2hlZC5wdXRfam9iKTsN Cj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBkcm1fcXVldWVfc3RhcnRfdGltZW91dCgpIC0gYXJt IG9yIHJlLWFybSB0aGUgVERSIGRlbGF5ZWQgd29yaw0KPiArICogQHE6IGRlcCBxdWV1ZQ0KPiAr ICoNCj4gKyAqIEFybXMgdGhlIFREUiBkZWxheWVkIHdvcmsgd2l0aCBAcS0+am9iLnRpbWVvdXQu IE5vLW9wIGlmDQo+ICsgKiBAcS0+b3BzLT50aW1lZG91dF9qb2IgaXMgTlVMTCwgdGhlIHRpbWVv dXQgaXMgTUFYX1NDSEVEVUxFX1RJTUVPVVQsDQo+ICsgKiBvciB0aGUgcGVuZGluZyBsaXN0IGlz IGVtcHR5Lg0KPiArICoNCj4gKyAqIENvbnRleHQ6IFByb2Nlc3MgY29udGV4dC4gTXVzdCBob2xk IEBxLT5zY2hlZC5sb2NrLiBETUEgZmVuY2Ugc2lnbmFsaW5nIHBhdGguDQo+ICsgKi8NCj4gK3N0 YXRpYyB2b2lkIGRybV9xdWV1ZV9zdGFydF90aW1lb3V0KHN0cnVjdCBkcm1fZGVwX3F1ZXVlICpx KQ0KPiArew0KPiArICAgICAgIGxvY2tkZXBfYXNzZXJ0X2hlbGQoJnEtPmpvYi5sb2NrKTsNCj4g Kw0KPiArICAgICAgIGlmICghcS0+b3BzLT50aW1lZG91dF9qb2IgfHwNCj4gKyAgICAgICAgICAg cS0+am9iLnRpbWVvdXQgPT0gTUFYX1NDSEVEVUxFX1RJTUVPVVQgfHwNCj4gKyAgICAgICAgICAg bGlzdF9lbXB0eSgmcS0+am9iLnBlbmRpbmcpKQ0KPiArICAgICAgICAgICAgICAgcmV0dXJuOw0K PiArDQo+ICsgICAgICAgbW9kX2RlbGF5ZWRfd29yayhxLT5zY2hlZC50aW1lb3V0X3dxLCAmcS0+ c2NoZWQudGRyLCBxLT5qb2IudGltZW91dCk7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICogZHJt X3F1ZXVlX3N0YXJ0X3RpbWVvdXRfdW5sb2NrZWQoKSAtIGFybSBURFIsIGFjcXVpcmluZyBqb2Iu bG9jaw0KPiArICogQHE6IGRlcCBxdWV1ZQ0KPiArICoNCj4gKyAqIEFjcXVpcmVzIEBxLT5qb2Iu bG9jayB3aXRoIGlycSBhbmQgY2FsbHMNCj4gKyAqIGRybV9xdWV1ZV9zdGFydF90aW1lb3V0KCku DQo+ICsgKg0KPiArICogQ29udGV4dDogUHJvY2VzcyBjb250ZXh0ICh3b3JrcXVldWUpLg0KPiAr ICovDQo+ICtzdGF0aWMgdm9pZCBkcm1fcXVldWVfc3RhcnRfdGltZW91dF91bmxvY2tlZChzdHJ1 Y3QgZHJtX2RlcF9xdWV1ZSAqcSkNCj4gK3sNCj4gKyAgICAgICBndWFyZChzcGlubG9ja19pcnEp KCZxLT5qb2IubG9jayk7DQo+ICsgICAgICAgZHJtX3F1ZXVlX3N0YXJ0X3RpbWVvdXQocSk7DQo+ ICt9DQo+ICsNCj4gKy8qKg0KPiArICogZHJtX2RlcF9xdWV1ZV9yZW1vdmVfZGVwZW5kZW5jeSgp IC0gY2xlYXIgdGhlIGFjdGl2ZSBkZXBlbmRlbmN5IGFuZCB3YWtlDQo+ICsgKiAgIHRoZSBydW4t am9iIHdvcmtlcg0KPiArICogQHE6IGRlcCBxdWV1ZQ0KPiArICogQGY6IHRoZSBkZXBlbmRlbmN5 IGZlbmNlIGJlaW5nIHJlbW92ZWQNCj4gKyAqDQo+ICsgKiBTdG9yZXMgQGYgaW50byBAcS0+ZGVw LnJlbW92ZWRfZmVuY2UgdmlhIHNtcF9zdG9yZV9yZWxlYXNlKCkgc28gdGhhdCB0aGUNCj4gKyAq IHJ1bi1qb2Igd29ya2VyIGNhbiBkcm9wIHRoZSByZWZlcmVuY2UgdG8gaXQgaW4gZHJtX2RlcF9x dWV1ZV9pc19yZWFkeSgpLA0KPiArICogcGFpcmVkIHdpdGggc21wX2xvYWRfYWNxdWlyZSgpLiAg Q2xlYXJzIEBxLT5kZXAuZmVuY2UgYW5kIGtpY2tzIHRoZQ0KPiArICogcnVuLWpvYiB3b3JrZXIu DQo+ICsgKg0KPiArICogVGhlIGZlbmNlIHJlZmVyZW5jZSBpcyBub3QgZHJvcHBlZCBoZXJlOyBp dCBpcyBkZWZlcnJlZCB0byB0aGUgcnVuLWpvYg0KPiArICogd29ya2VyIHZpYSBAcS0+ZGVwLnJl bW92ZWRfZmVuY2UgdG8ga2VlcCB0aGlzIHBhdGggc3VpdGFibGUgZG1hX2ZlbmNlDQo+ICsgKiBj YWxsYmFjayByZW1vdmFsIGluIGRybV9kZXBfcXVldWVfa2lsbCgpLg0KPiArICoNCj4gKyAqIENv bnRleHQ6IEFueSBjb250ZXh0Lg0KPiArICovDQo+ICtzdGF0aWMgdm9pZCBkcm1fZGVwX3F1ZXVl X3JlbW92ZV9kZXBlbmRlbmN5KHN0cnVjdCBkcm1fZGVwX3F1ZXVlICpxLA0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkbWFfZmVuY2UgKmYpDQo+ ICt7DQo+ICsgICAgICAgLyogcmVtb3ZlZF9mZW5jZSBtdXN0IGJlIHZpc2libGUgdG8gdGhlIHJl YWRlciBiZWZvcmUgJnEtPmRlcC5mZW5jZSAqLw0KPiArICAgICAgIHNtcF9zdG9yZV9yZWxlYXNl KCZxLT5kZXAucmVtb3ZlZF9mZW5jZSwgZik7DQo+ICsNCj4gKyAgICAgICBXUklURV9PTkNFKHEt PmRlcC5mZW5jZSwgTlVMTCk7DQo+ICsgICAgICAgZHJtX2RlcF9xdWV1ZV9ydW5fam9iX3F1ZXVl KHEpOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAqIGRybV9kZXBfcXVldWVfd2FrZXVwKCkgLSBk bWFfZmVuY2UgY2FsbGJhY2sgdG8gd2FrZSB0aGUgcnVuLWpvYiB3b3JrZXINCj4gKyAqIEBmOiB0 aGUgc2lnbmFsbGVkIGRlcGVuZGVuY3kgZmVuY2UNCj4gKyAqIEBjYjogY2FsbGJhY2sgZW1iZWRk ZWQgaW4gdGhlIGRlcCBxdWV1ZQ0KPiArICoNCj4gKyAqIENhbGxlZCBmcm9tIGRtYV9mZW5jZV9z aWduYWwoKSB3aGVuIHRoZSBhY3RpdmUgZGVwZW5kZW5jeSBmZW5jZSBzaWduYWxzLg0KPiArICog RGVsZWdhdGVzIHRvIGRybV9kZXBfcXVldWVfcmVtb3ZlX2RlcGVuZGVuY3koKSB0byBjbGVhciBA cS0+ZGVwLmZlbmNlIGFuZA0KPiArICoga2ljayB0aGUgcnVuLWpvYiB3b3JrZXIuICBUaGUgZmVu Y2UgcmVmZXJlbmNlIGlzIG5vdCBkcm9wcGVkIGhlcmU7IGl0IGlzDQo+ICsgKiBkZWZlcnJlZCB0 byB0aGUgcnVuLWpvYiB3b3JrZXIgdmlhIEBxLT5kZXAucmVtb3ZlZF9mZW5jZS4NCj4gKyAqDQo+ ICsgKiBDb250ZXh0OiBBbnkgY29udGV4dC4NCj4gKyAqLw0KPiArc3RhdGljIHZvaWQgZHJtX2Rl cF9xdWV1ZV93YWtldXAoc3RydWN0IGRtYV9mZW5jZSAqZiwgc3RydWN0IGRtYV9mZW5jZV9jYiAq Y2IpDQo+ICt7DQo+ICsgICAgICAgc3RydWN0IGRybV9kZXBfcXVldWUgKnEgPQ0KPiArICAgICAg ICAgICAgICAgY29udGFpbmVyX29mKGNiLCBzdHJ1Y3QgZHJtX2RlcF9xdWV1ZSwgZGVwLmNiKTsN Cj4gKw0KPiArICAgICAgIGRybV9kZXBfcXVldWVfcmVtb3ZlX2RlcGVuZGVuY3kocSwgZik7DQo+ ICt9DQo+ICsNCj4gKy8qKg0KPiArICogZHJtX2RlcF9xdWV1ZV9pc19yZWFkeSgpIC0gY2hlY2sg d2hldGhlciB0aGUgcXVldWUgaGFzIGEgZGlzcGF0Y2hhYmxlIGpvYg0KPiArICogQHE6IGRlcCBx dWV1ZQ0KPiArICoNCj4gKyAqIENvbnRleHQ6IFByb2Nlc3MgY29udGV4dC4gTXVzdCBob2xkIEBx LT5zY2hlZC5sb2NrLiBETUEgZmVuY2Ugc2lnbmFsaW5nIHBhdGguDQo+ICsgKiBSZXR1cm46IHRy dWUgaWYgU1BTQyBxdWV1ZSBub24tZW1wdHkgYW5kIG5vIGRlcCBmZW5jZSBwZW5kaW5nLA0KPiAr ICogICBmYWxzZSBvdGhlcndpc2UuDQo+ICsgKi8NCj4gK3N0YXRpYyBib29sIGRybV9kZXBfcXVl dWVfaXNfcmVhZHkoc3RydWN0IGRybV9kZXBfcXVldWUgKnEpDQo+ICt7DQo+ICsgICAgICAgbG9j a2RlcF9hc3NlcnRfaGVsZCgmcS0+c2NoZWQubG9jayk7DQo+ICsNCj4gKyAgICAgICBpZiAoIXNw c2NfcXVldWVfY291bnQoJnEtPmpvYi5xdWV1ZSkpDQo+ICsgICAgICAgICAgICAgICByZXR1cm4g ZmFsc2U7DQo+ICsNCj4gKyAgICAgICBpZiAoUkVBRF9PTkNFKHEtPmRlcC5mZW5jZSkpDQo+ICsg ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQo+ICsNCj4gKyAgICAgICAvKiBQYWlyZWQgd2l0 aCBzbXBfc3RvcmVfcmVsZWFzZSBpbiBkcm1fZGVwX3F1ZXVlX3JlbW92ZV9kZXBlbmRlbmN5KCkg Ki8NCj4gKyAgICAgICBkbWFfZmVuY2VfcHV0KHNtcF9sb2FkX2FjcXVpcmUoJnEtPmRlcC5yZW1v dmVkX2ZlbmNlKSk7DQo+ICsNCj4gKyAgICAgICBxLT5kZXAucmVtb3ZlZF9mZW5jZSA9IE5VTEw7 DQo+ICsNCj4gKyAgICAgICByZXR1cm4gdHJ1ZTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBk cm1fZGVwX3F1ZXVlX2lzX2tpbGxlZCgpIC0gY2hlY2sgd2hldGhlciBhIGRlcCBxdWV1ZSBoYXMg YmVlbiBraWxsZWQNCj4gKyAqIEBxOiBkZXAgcXVldWUgdG8gY2hlY2sNCj4gKyAqDQo+ICsgKiBS ZXR1cm46IHRydWUgaWYgJURSTV9ERVBfUVVFVUVfRkxBR1NfS0lMTEVEIGlzIHNldCBvbiBAcSwg ZmFsc2Ugb3RoZXJ3aXNlLg0KPiArICoNCj4gKyAqIENvbnRleHQ6IEFueSBjb250ZXh0Lg0KPiAr ICovDQo+ICtib29sIGRybV9kZXBfcXVldWVfaXNfa2lsbGVkKHN0cnVjdCBkcm1fZGVwX3F1ZXVl ICpxKQ0KPiArew0KPiArICAgICAgIHJldHVybiAhIShxLT5zY2hlZC5mbGFncyAmIERSTV9ERVBf UVVFVUVfRkxBR1NfS0lMTEVEKTsNCj4gK30NCj4gK0VYUE9SVF9TWU1CT0woZHJtX2RlcF9xdWV1 ZV9pc19raWxsZWQpOw0KPiArDQo+ICsvKioNCj4gKyAqIGRybV9kZXBfcXVldWVfaXNfaW5pdGlh bGl6ZWQoKSAtIGNoZWNrIHdoZXRoZXIgYSBkZXAgcXVldWUgaGFzIGJlZW4gaW5pdGlhbGl6ZWQN Cj4gKyAqIEBxOiBkZXAgcXVldWUgdG8gY2hlY2sNCj4gKyAqDQo+ICsgKiBBIHF1ZXVlIGlzIGNv bnNpZGVyZWQgaW5pdGlhbGl6ZWQgb25jZSBpdHMgb3BzIHBvaW50ZXIgaGFzIGJlZW4gc2V0IGJ5 IGENCj4gKyAqIHN1Y2Nlc3NmdWwgY2FsbCB0byBkcm1fZGVwX3F1ZXVlX2luaXQoKS4gIERyaXZl cnMgdGhhdCBlbWJlZCBhDQo+ICsgKiAmZHJtX2RlcF9xdWV1ZSBpbnNpZGUgYSBsYXJnZXIgc3Ry dWN0dXJlIG1heSBjYWxsIHRoaXMgYmVmb3JlIGF0dGVtcHRpbmcgYW55DQo+ICsgKiBvdGhlciBx dWV1ZSBvcGVyYXRpb24gdG8gY29uZmlybSB0aGF0IGluaXRpYWxpemF0aW9uIGhhcyB0YWtlbiBw bGFjZS4NCj4gKyAqIGRybV9kZXBfcXVldWVfcHV0KCkgbXVzdCBiZSBjYWxsZWQgaWYgdGhpcyBm dW5jdGlvbiByZXR1cm5zIHRydWUgdG8gZHJvcCB0aGUNCj4gKyAqIGluaXRpYWxpemF0aW9uIHJl ZmVyZW5jZSBmcm9tIGRybV9kZXBfcXVldWVfaW5pdCgpLg0KPiArICoNCj4gKyAqIFJldHVybjog dHJ1ZSBpZiBAcSBoYXMgYmVlbiBpbml0aWFsaXplZCwgZmFsc2Ugb3RoZXJ3aXNlLg0KPiArICoN Cj4gKyAqIENvbnRleHQ6IEFueSBjb250ZXh0Lg0KPiArICovDQo+ICtib29sIGRybV9kZXBfcXVl dWVfaXNfaW5pdGlhbGl6ZWQoc3RydWN0IGRybV9kZXBfcXVldWUgKnEpDQo+ICt7DQo+ICsgICAg ICAgcmV0dXJuICEhcS0+b3BzOw0KPiArfQ0KPiArRVhQT1JUX1NZTUJPTChkcm1fZGVwX3F1ZXVl X2lzX2luaXRpYWxpemVkKTsNCj4gKw0KPiArLyoqDQo+ICsgKiBkcm1fZGVwX3F1ZXVlX3NldF9z dG9wcGVkKCkgLSBwcmUtbWFyayBhIHF1ZXVlIGFzIHN0b3BwZWQgYmVmb3JlIGZpcnN0IHVzZQ0K PiArICogQHE6IGRlcCBxdWV1ZSB0byBtYXJrDQo+ICsgKg0KPiArICogU2V0cyAlRFJNX0RFUF9R VUVVRV9GTEFHU19TVE9QUEVEIGRpcmVjdGx5IG9uIEBxIHdpdGhvdXQgZ29pbmcgdGhyb3VnaCB0 aGUNCj4gKyAqIG5vcm1hbCBkcm1fZGVwX3F1ZXVlX3N0b3AoKSBwYXRoLiAgVGhpcyBpcyBvbmx5 IHZhbGlkIGR1cmluZyB0aGUgZHJpdmVyLXNpZGUNCj4gKyAqIHF1ZXVlIGluaXRpYWxpc2F0aW9u IHNlcXVlbmNlIOKAlCBpLmUuIGFmdGVyIGRybV9kZXBfcXVldWVfaW5pdCgpIHJldHVybnMgYnV0 DQo+ICsgKiBiZWZvcmUgdGhlIHF1ZXVlIGlzIG1hZGUgdmlzaWJsZSB0byBvdGhlciB0aHJlYWRz IChlLmcuIGJlZm9yZSBpdCBpcyBhZGRlZA0KPiArICogdG8gYW55IGxvb2t1cCBzdHJ1Y3R1cmVz KS4gIFVzaW5nIHRoaXMgYWZ0ZXIgdGhlIHF1ZXVlIGlzIGxpdmUgaXMgYSBkcml2ZXINCj4gKyAq IGJ1ZzsgdXNlIGRybV9kZXBfcXVldWVfc3RvcCgpIGluc3RlYWQuDQo+ICsgKg0KPiArICogQ29u dGV4dDogUHJvY2VzcyBjb250ZXh0LCBxdWV1ZSBub3QgeWV0IHZpc2libGUgdG8gb3RoZXIgdGhy ZWFkcy4NCj4gKyAqLw0KPiArdm9pZCBkcm1fZGVwX3F1ZXVlX3NldF9zdG9wcGVkKHN0cnVjdCBk cm1fZGVwX3F1ZXVlICpxKQ0KPiArew0KPiArICAgICAgIHEtPnNjaGVkLmZsYWdzIHw9IERSTV9E RVBfUVVFVUVfRkxBR1NfU1RPUFBFRDsNCj4gK30NCj4gK0VYUE9SVF9TWU1CT0woZHJtX2RlcF9x dWV1ZV9zZXRfc3RvcHBlZCk7DQo+ICsNCj4gKy8qKg0KPiArICogZHJtX2RlcF9xdWV1ZV9yZWZj b3VudCgpIC0gcmVhZCB0aGUgY3VycmVudCByZWZlcmVuY2UgY291bnQgb2YgYSBxdWV1ZQ0KPiAr ICogQHE6IGRlcCBxdWV1ZSB0byBxdWVyeQ0KPiArICoNCj4gKyAqIFJldHVybnMgdGhlIGluc3Rh bnRhbmVvdXMga3JlZiB2YWx1ZS4gIFRoZSBjb3VudCBtYXkgY2hhbmdlIGltbWVkaWF0ZWx5DQo+ ICsgKiBhZnRlciB0aGlzIGNhbGw7IGNhbGxlcnMgbXVzdCBub3QgbWFrZSBzYWZldHkgZGVjaXNp b25zIGJhc2VkIHNvbGVseSBvbg0KPiArICogdGhlIHJldHVybmVkIHZhbHVlLiAgSW50ZW5kZWQg Zm9yIGRpYWdub3N0aWMgc25hcHNob3RzIGFuZCBkZWJ1Z2ZzIG91dHB1dC4NCj4gKyAqDQo+ICsg KiBDb250ZXh0OiBBbnkgY29udGV4dC4NCj4gKyAqIFJldHVybjogY3VycmVudCByZWZlcmVuY2Ug Y291bnQuDQo+ICsgKi8NCj4gK3Vuc2lnbmVkIGludCBkcm1fZGVwX3F1ZXVlX3JlZmNvdW50KGNv bnN0IHN0cnVjdCBkcm1fZGVwX3F1ZXVlICpxKQ0KPiArew0KPiArICAgICAgIHJldHVybiBrcmVm X3JlYWQoJnEtPnJlZmNvdW50KTsNCj4gK30NCj4gK0VYUE9SVF9TWU1CT0woZHJtX2RlcF9xdWV1 ZV9yZWZjb3VudCk7DQo+ICsNCj4gKy8qKg0KPiArICogZHJtX2RlcF9xdWV1ZV90aW1lb3V0KCkg LSByZWFkIHRoZSBwZXItam9iIFREUiB0aW1lb3V0IGZvciBhIHF1ZXVlDQo+ICsgKiBAcTogZGVw IHF1ZXVlIHRvIHF1ZXJ5DQo+ICsgKg0KPiArICogUmV0dXJucyB0aGUgcGVyLWpvYiB0aW1lb3V0 IGluIGppZmZpZXMgYXMgc2V0IGF0IGluaXQgdGltZS4NCj4gKyAqICVNQVhfU0NIRURVTEVfVElN RU9VVCBtZWFucyBubyB0aW1lb3V0IGlzIGNvbmZpZ3VyZWQuDQo+ICsgKg0KPiArICogQ29udGV4 dDogQW55IGNvbnRleHQuDQo+ICsgKiBSZXR1cm46IHRpbWVvdXQgaW4gamlmZmllcy4NCj4gKyAq Lw0KPiArbG9uZyBkcm1fZGVwX3F1ZXVlX3RpbWVvdXQoY29uc3Qgc3RydWN0IGRybV9kZXBfcXVl dWUgKnEpDQo+ICt7DQo+ICsgICAgICAgcmV0dXJuIHEtPmpvYi50aW1lb3V0Ow0KPiArfQ0KPiAr RVhQT1JUX1NZTUJPTChkcm1fZGVwX3F1ZXVlX3RpbWVvdXQpOw0KPiArDQo+ICsvKioNCj4gKyAq IGRybV9kZXBfcXVldWVfaXNfam9iX3B1dF9pcnFfc2FmZSgpIC0gdGVzdCB3aGV0aGVyIGpvYi1w dXQgZnJvbSBJUlEgaXMgYWxsb3dlZA0KPiArICogQHE6IGRlcCBxdWV1ZQ0KPiArICoNCj4gKyAq IENvbnRleHQ6IEFueSBjb250ZXh0Lg0KPiArICogUmV0dXJuOiB0cnVlIGlmICVEUk1fREVQX1FV RVVFX0ZMQUdTX0pPQl9QVVRfSVJRX1NBRkUgaXMgc2V0LA0KPiArICogICBmYWxzZSBvdGhlcndp c2UuDQo+ICsgKi8NCj4gK3N0YXRpYyBib29sIGRybV9kZXBfcXVldWVfaXNfam9iX3B1dF9pcnFf c2FmZShjb25zdCBzdHJ1Y3QgZHJtX2RlcF9xdWV1ZSAqcSkNCj4gK3sNCj4gKyAgICAgICByZXR1 cm4gISEocS0+c2NoZWQuZmxhZ3MgJiBEUk1fREVQX1FVRVVFX0ZMQUdTX0pPQl9QVVRfSVJRX1NB RkUpOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAqIGRybV9kZXBfcXVldWVfam9iX2RlcGVuZGVu Y3koKSAtIGdldCBuZXh0IHVucmVzb2x2ZWQgZGVwIGZlbmNlDQo+ICsgKiBAcTogZGVwIHF1ZXVl DQo+ICsgKiBAam9iOiBqb2Igd2hvc2UgZGVwZW5kZW5jaWVzIHRvIGFkdmFuY2UNCj4gKyAqDQo+ ICsgKiBSZXR1cm5zIE5VTEwgaW1tZWRpYXRlbHkgaWYgdGhlIHF1ZXVlIGhhcyBiZWVuIGtpbGxl ZCB2aWENCj4gKyAqIGRybV9kZXBfcXVldWVfa2lsbCgpLCBieXBhc3NpbmcgYWxsIGRlcGVuZGVu Y3kgd2FpdHMgc28gdGhhdCBqb2JzDQo+ICsgKiBkcmFpbiB0aHJvdWdoIHJ1bl9qb2IgYXMgcXVp Y2tseSBhcyBwb3NzaWJsZS4NCj4gKyAqDQo+ICsgKiBDb250ZXh0OiBQcm9jZXNzIGNvbnRleHQu IE11c3QgaG9sZCBAcS0+c2NoZWQubG9jay4gRE1BIGZlbmNlIHNpZ25hbGluZyBwYXRoLg0KPiAr ICogUmV0dXJuOiBuZXh0IHVucmVzb2x2ZWQgJmRtYV9mZW5jZSB3aXRoIGEgbmV3IHJlZmVyZW5j ZSwgb3IgTlVMTA0KPiArICogICB3aGVuIGFsbCBkZXBlbmRlbmNpZXMgaGF2ZSBiZWVuIGNvbnN1 bWVkIChvciB0aGUgcXVldWUgaXMga2lsbGVkKS4NCj4gKyAqLw0KPiArc3RhdGljIHN0cnVjdCBk bWFfZmVuY2UgKg0KPiArZHJtX2RlcF9xdWV1ZV9qb2JfZGVwZW5kZW5jeShzdHJ1Y3QgZHJtX2Rl cF9xdWV1ZSAqcSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJtX2Rl cF9qb2IgKmpvYikNCj4gK3sNCj4gKyAgICAgICBzdHJ1Y3QgZG1hX2ZlbmNlICpmOw0KPiArDQo+ ICsgICAgICAgbG9ja2RlcF9hc3NlcnRfaGVsZCgmcS0+c2NoZWQubG9jayk7DQo+ICsNCj4gKyAg ICAgICBpZiAoZHJtX2RlcF9xdWV1ZV9pc19raWxsZWQocSkpDQo+ICsgICAgICAgICAgICAgICBy ZXR1cm4gTlVMTDsNCj4gKw0KPiArICAgICAgIGYgPSB4YV9sb2FkKCZqb2ItPmRlcGVuZGVuY2ll cywgam9iLT5sYXN0X2RlcGVuZGVuY3kpOw0KPiArICAgICAgIGlmIChmKSB7DQo+ICsgICAgICAg ICAgICAgICBqb2ItPmxhc3RfZGVwZW5kZW5jeSsrOw0KPiArICAgICAgICAgICAgICAgaWYgKFdB Uk5fT04oRFJNX0RFUF9KT0JfRkVOQ0VfUFJFQUxMT0MgPT0gZikpDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgIHJldHVybiBkbWFfZmVuY2VfZ2V0X3N0dWIoKTsNCj4gKyAgICAgICAgICAgICAg IHJldHVybiBkbWFfZmVuY2VfZ2V0KGYpOw0KPiArICAgICAgIH0NCj4gKw0KPiArICAgICAgIHJl dHVybiBOVUxMOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAqIGRybV9kZXBfcXVldWVfYWRkX2Rl cF9jYigpIC0gaW5zdGFsbCB3YWtldXAgY2FsbGJhY2sgb24gZGVwIGZlbmNlDQo+ICsgKiBAcTog ZGVwIHF1ZXVlDQo+ICsgKiBAam9iOiBqb2Igd2hvc2UgZGVwZW5kZW5jeSBmZW5jZSBpcyBzdG9y ZWQgaW4gQHEtPmRlcC5mZW5jZQ0KPiArICoNCj4gKyAqIEluc3RhbGxzIGEgd2FrZXVwIGNhbGxi YWNrIG9uIEBxLT5kZXAuZmVuY2UuIFJldHVybnMgdHJ1ZSBpZiB0aGUNCj4gKyAqIGNhbGxiYWNr IHdhcyBpbnN0YWxsZWQgKHRoZSBxdWV1ZSBtdXN0IHdhaXQpLCBmYWxzZSBpZiB0aGUgZmVuY2Ug aXMNCj4gKyAqIGFscmVhZHkgc2lnbmFsbGVkIG9yIGlzIGEgc2VsZi1mZW5jZSBmcm9tIHRoZSBz YW1lIHF1ZXVlIGNvbnRleHQuDQo+ICsgKg0KPiArICogQ29udGV4dDogUHJvY2VzcyBjb250ZXh0 LiBNdXN0IGhvbGQgQHEtPnNjaGVkLmxvY2suIERNQSBmZW5jZSBzaWduYWxpbmcgcGF0aC4NCj4g KyAqIFJldHVybjogdHJ1ZSBpZiBjYWxsYmFjayBpbnN0YWxsZWQsIGZhbHNlIGlmIGZlbmNlIGFs cmVhZHkgZG9uZS4NCj4gKyAqLw0KPiArc3RhdGljIGJvb2wgZHJtX2RlcF9xdWV1ZV9hZGRfZGVw X2NiKHN0cnVjdCBkcm1fZGVwX3F1ZXVlICpxLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3RydWN0IGRybV9kZXBfam9iICpqb2IpDQo+ICt7DQo+ICsgICAgICAgc3Ry dWN0IGRtYV9mZW5jZSAqZmVuY2UgPSBxLT5kZXAuZmVuY2U7DQo+ICsNCj4gKyAgICAgICBsb2Nr ZGVwX2Fzc2VydF9oZWxkKCZxLT5zY2hlZC5sb2NrKTsNCj4gKw0KPiArICAgICAgIGlmIChXQVJO X09OKGZlbmNlLT5jb250ZXh0ID09IHEtPmZlbmNlLmNvbnRleHQpKSB7DQo+ICsgICAgICAgICAg ICAgICBkbWFfZmVuY2VfcHV0KHEtPmRlcC5mZW5jZSk7DQo+ICsgICAgICAgICAgICAgICBxLT5k ZXAuZmVuY2UgPSBOVUxMOw0KPiArICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KPiArICAg ICAgIH0NCj4gKw0KPiArICAgICAgIGlmICghZG1hX2ZlbmNlX2FkZF9jYWxsYmFjayhxLT5kZXAu ZmVuY2UsICZxLT5kZXAuY2IsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGRybV9kZXBfcXVldWVfd2FrZXVwKSkNCj4gKyAgICAgICAgICAgICAgIHJldHVybiB0cnVlOw0K PiArDQo+ICsgICAgICAgZG1hX2ZlbmNlX3B1dChxLT5kZXAuZmVuY2UpOw0KPiArICAgICAgIHEt PmRlcC5mZW5jZSA9IE5VTEw7DQo+ICsNCj4gKyAgICAgICByZXR1cm4gZmFsc2U7DQo+ICt9DQo+ ICsNCj4gKy8qKg0KPiArICogZHJtX2RlcF9xdWV1ZV9wb3Bfam9iKCkgLSBwb3AgYSBkaXNwYXRj aGFibGUgam9iIGZyb20gdGhlIFNQU0MgcXVldWUNCj4gKyAqIEBxOiBkZXAgcXVldWUNCj4gKyAq DQo+ICsgKiBQZWVrcyBhdCB0aGUgaGVhZCBvZiB0aGUgU1BTQyBxdWV1ZSBhbmQgZHJhaW5zIGFs bCByZXNvbHZlZA0KPiArICogZGVwZW5kZW5jaWVzLiBJZiBhIGRlcGVuZGVuY3kgaXMgc3RpbGwg cGVuZGluZywgaW5zdGFsbHMgYSB3YWtldXANCj4gKyAqIGNhbGxiYWNrIGFuZCByZXR1cm5zIE5V TEwuIE9uIHN1Y2Nlc3MgcG9wcyB0aGUgam9iIGFuZCByZXR1cm5zIGl0Lg0KPiArICoNCj4gKyAq IENvbnRleHQ6IFByb2Nlc3MgY29udGV4dC4gTXVzdCBob2xkIEBxLT5zY2hlZC5sb2NrLiBETUEg ZmVuY2Ugc2lnbmFsaW5nIHBhdGguDQo+ICsgKiBSZXR1cm46IG5leHQgZGlzcGF0Y2hhYmxlIGpv Yiwgb3IgTlVMTCBpZiBhIGRlcCBpcyBzdGlsbCBwZW5kaW5nLg0KPiArICovDQo+ICtzdGF0aWMg c3RydWN0IGRybV9kZXBfam9iICpkcm1fZGVwX3F1ZXVlX3BvcF9qb2Ioc3RydWN0IGRybV9kZXBf cXVldWUgKnEpDQo+ICt7DQo+ICsgICAgICAgc3RydWN0IHNwc2Nfbm9kZSAqbm9kZTsNCj4gKyAg ICAgICBzdHJ1Y3QgZHJtX2RlcF9qb2IgKmpvYjsNCj4gKw0KPiArICAgICAgIGxvY2tkZXBfYXNz ZXJ0X2hlbGQoJnEtPnNjaGVkLmxvY2spOw0KPiArDQo+ICsgICAgICAgbm9kZSA9IHNwc2NfcXVl dWVfcGVlaygmcS0+am9iLnF1ZXVlKTsNCj4gKyAgICAgICBpZiAoIW5vZGUpDQo+ICsgICAgICAg ICAgICAgICByZXR1cm4gTlVMTDsNCj4gKw0KPiArICAgICAgIGpvYiA9IGNvbnRhaW5lcl9vZihu b2RlLCBzdHJ1Y3QgZHJtX2RlcF9qb2IsIHF1ZXVlX25vZGUpOw0KPiArDQo+ICsgICAgICAgd2hp bGUgKChxLT5kZXAuZmVuY2UgPSBkcm1fZGVwX3F1ZXVlX2pvYl9kZXBlbmRlbmN5KHEsIGpvYikp KSB7DQo+ICsgICAgICAgICAgICAgICBpZiAoZHJtX2RlcF9xdWV1ZV9hZGRfZGVwX2NiKHEsIGpv YikpDQo+ICsgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOw0KPiArICAgICAgIH0N Cj4gKw0KPiArICAgICAgIHNwc2NfcXVldWVfcG9wKCZxLT5qb2IucXVldWUpOw0KPiArDQo+ICsg ICAgICAgcmV0dXJuIGpvYjsNCj4gK30NCj4gKw0KPiArLyoNCj4gKyAqIGRybV9kZXBfcXVldWVf Z2V0X3VubGVzc196ZXJvKCkgLSB0cnkgdG8gYWNxdWlyZSBhIHF1ZXVlIHJlZmVyZW5jZQ0KPiAr ICoNCj4gKyAqIFdvcmtlcnMgdXNlIHRoaXMgaW5zdGVhZCBvZiBkcm1fZGVwX3F1ZXVlX2dldCgp IHRvIGd1YXJkIGFnYWluc3QgdGhlIHpvbWJpZQ0KPiArICogc3RhdGU6IHRoZSBxdWV1ZSdzIHJl ZmNvdW50IGhhcyBhbHJlYWR5IHJlYWNoZWQgemVybyAoYXN5bmMgdGVhcmRvd24gaXMgaW4NCj4g KyAqIGZsaWdodCkgYnV0IGEgd29yayBpdGVtIHdhcyBxdWV1ZWQgYmVmb3JlIGZyZWVfd29yayBo YWQgYSBjaGFuY2UgdG8gY2FuY2VsDQo+ICsgKiBpdC4gIElmIGtyZWZfZ2V0X3VubGVzc196ZXJv KCkgZmFpbHMgdGhlIGNhbGxlciBtdXN0IGJhaWwgaW1tZWRpYXRlbHkuDQo+ICsgKg0KPiArICog Q29udGV4dDogQW55IGNvbnRleHQuDQo+ICsgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHJlZmVyZW5j ZSB3YXMgYWNxdWlyZWQsIGZhbHNlIGlmIHRoZSBxdWV1ZSBpcyB6b21iaWUuDQo+ICsgKi8NCj4g K2Jvb2wgZHJtX2RlcF9xdWV1ZV9nZXRfdW5sZXNzX3plcm8oc3RydWN0IGRybV9kZXBfcXVldWUg KnEpDQo+ICt7DQo+ICsgICAgICAgcmV0dXJuIGtyZWZfZ2V0X3VubGVzc196ZXJvKCZxLT5yZWZj b3VudCk7DQo+ICt9DQo+ICtFWFBPUlRfU1lNQk9MKGRybV9kZXBfcXVldWVfZ2V0X3VubGVzc196 ZXJvKTsNCj4gKw0KPiArLyoqDQo+ICsgKiBkcm1fZGVwX3F1ZXVlX3J1bl9qb2Jfd29yaygpIC0g cnVuLWpvYiB3b3JrZXINCj4gKyAqIEB3b3JrOiB3b3JrIGl0ZW0gZW1iZWRkZWQgaW4gdGhlIGRl cCBxdWV1ZQ0KPiArICoNCj4gKyAqIEFjcXVpcmVzIEBxLT5zY2hlZC5sb2NrLCBjaGVja3Mgc3Rv cHBlZCBzdGF0ZSwgcXVldWUgcmVhZGluZXNzIGFuZA0KPiArICogYXZhaWxhYmxlIGNyZWRpdHMs IHBvcHMgdGhlIG5leHQgam9iIHZpYSBkcm1fZGVwX3F1ZXVlX3BvcF9qb2IoKSwNCj4gKyAqIGRp c3BhdGNoZXMgaXQgdmlhIGRybV9kZXBfcXVldWVfcnVuX2pvYigpLCB0aGVuIHJlLWtpY2tzIGl0 c2VsZi4NCj4gKyAqDQo+ICsgKiBVc2VzIGRybV9kZXBfcXVldWVfZ2V0X3VubGVzc196ZXJvKCkg YXQgZW50cnkgYW5kIGJhaWxzIGltbWVkaWF0ZWx5IGlmIHRoZQ0KPiArICogcXVldWUgaXMgaW4g em9tYmllIHN0YXRlIChyZWZjb3VudCBhbHJlYWR5IHplcm8sIGFzeW5jIHRlYXJkb3duIGluIGZs aWdodCkuDQo+ICsgKg0KPiArICogQ29udGV4dDogUHJvY2VzcyBjb250ZXh0ICh3b3JrcXVldWUp LiBETUEgZmVuY2Ugc2lnbmFsaW5nIHBhdGguDQo+ICsgKi8NCj4gK3N0YXRpYyB2b2lkIGRybV9k ZXBfcXVldWVfcnVuX2pvYl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykNCj4gK3sNCj4g KyAgICAgICBzdHJ1Y3QgZHJtX2RlcF9xdWV1ZSAqcSA9DQo+ICsgICAgICAgICAgICAgICBjb250 YWluZXJfb2Yod29yaywgc3RydWN0IGRybV9kZXBfcXVldWUsIHNjaGVkLnJ1bl9qb2IpOw0KPiAr ICAgICAgIHN0cnVjdCBzcHNjX25vZGUgKm5vZGU7DQo+ICsgICAgICAgc3RydWN0IGRybV9kZXBf am9iICpqb2I7DQo+ICsgICAgICAgYm9vbCBjb29raWUgPSBkbWFfZmVuY2VfYmVnaW5fc2lnbmFs bGluZygpOw0KPiArDQo+ICsgICAgICAgLyogQmFpbCBpZiBxdWV1ZSBpcyB6b21iaWUgKHJlZmNv dW50IGFscmVhZHkgemVybywgdGVhcmRvd24gaW4gZmxpZ2h0KS4gKi8NCj4gKyAgICAgICBpZiAo IWRybV9kZXBfcXVldWVfZ2V0X3VubGVzc196ZXJvKHEpKSB7DQo+ICsgICAgICAgICAgICAgICBk bWFfZmVuY2VfZW5kX3NpZ25hbGxpbmcoY29va2llKTsNCj4gKyAgICAgICAgICAgICAgIHJldHVy bjsNCj4gKyAgICAgICB9DQo+ICsNCj4gKyAgICAgICBtdXRleF9sb2NrKCZxLT5zY2hlZC5sb2Nr KTsNCj4gKw0KPiArICAgICAgIGlmIChkcm1fZGVwX3F1ZXVlX2lzX3N0b3BwZWQocSkpDQo+ICsg ICAgICAgICAgICAgICBnb3RvIHB1dF9xdWV1ZTsNCj4gKw0KPiArICAgICAgIGlmICghZHJtX2Rl cF9xdWV1ZV9pc19yZWFkeShxKSkNCj4gKyAgICAgICAgICAgICAgIGdvdG8gcHV0X3F1ZXVlOw0K PiArDQo+ICsgICAgICAgLyogUGVlayB0byBjaGVjayBjcmVkaXRzIGJlZm9yZSBjb21taXR0aW5n IHRvIHBvcCBhbmQgZGVwIHJlc29sdXRpb24gKi8NCj4gKyAgICAgICBub2RlID0gc3BzY19xdWV1 ZV9wZWVrKCZxLT5qb2IucXVldWUpOw0KPiArICAgICAgIGlmICghbm9kZSkNCj4gKyAgICAgICAg ICAgICAgIGdvdG8gcHV0X3F1ZXVlOw0KPiArDQo+ICsgICAgICAgam9iID0gY29udGFpbmVyX29m KG5vZGUsIHN0cnVjdCBkcm1fZGVwX2pvYiwgcXVldWVfbm9kZSk7DQo+ICsgICAgICAgaWYgKCFk cm1fZGVwX3F1ZXVlX2hhc19jcmVkaXRzKHEsIGpvYikpDQo+ICsgICAgICAgICAgICAgICBnb3Rv IHB1dF9xdWV1ZTsNCj4gKw0KPiArICAgICAgIGpvYiA9IGRybV9kZXBfcXVldWVfcG9wX2pvYihx KTsNCj4gKyAgICAgICBpZiAoIWpvYikNCj4gKyAgICAgICAgICAgICAgIGdvdG8gcHV0X3F1ZXVl Ow0KPiArDQo+ICsgICAgICAgZHJtX2RlcF9xdWV1ZV9ydW5fam9iKHEsIGpvYik7DQo+ICsgICAg ICAgZHJtX2RlcF9xdWV1ZV9ydW5fam9iX3F1ZXVlKHEpOw0KPiArDQo+ICtwdXRfcXVldWU6DQo+ ICsgICAgICAgbXV0ZXhfdW5sb2NrKCZxLT5zY2hlZC5sb2NrKTsNCj4gKyAgICAgICBkcm1fZGVw X3F1ZXVlX3B1dChxKTsNCj4gKyAgICAgICBkbWFfZmVuY2VfZW5kX3NpZ25hbGxpbmcoY29va2ll KTsNCj4gK30NCj4gKw0KPiArLyoNCj4gKyAqIGRybV9kZXBfcXVldWVfcmVtb3ZlX2pvYigpIC0g dW5saW5rIGEgam9iIGZyb20gdGhlIHBlbmRpbmcgbGlzdCBhbmQgcmVzZXQgVERSDQo+ICsgKiBA cTogICBkZXAgcXVldWUgb3duaW5nIEBqb2INCj4gKyAqIEBqb2I6IGpvYiB0byByZW1vdmUNCj4g KyAqDQo+ICsgKiBTcGxpY2VzIEBqb2Igb3V0IG9mIEBxLT5qb2IucGVuZGluZywgY2FuY2VscyBh bnkgcGVuZGluZyBURFIgZGVsYXllZCB3b3JrLA0KPiArICogYW5kIGFybXMgdGhlIHRpbWVvdXQg Zm9yIHRoZSBuZXcgbGlzdCBoZWFkIChpZiBhbnkpLg0KPiArICoNCj4gKyAqIENvbnRleHQ6IFBy b2Nlc3MgY29udGV4dC4gTXVzdCBob2xkIEBxLT5zY2hlZC5sb2NrLiBETUEgZmVuY2Ugc2lnbmFs aW5nIHBhdGguDQo+ICsgKi8NCj4gK3N0YXRpYyB2b2lkIGRybV9kZXBfcXVldWVfcmVtb3ZlX2pv YihzdHJ1Y3QgZHJtX2RlcF9xdWV1ZSAqcSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHN0cnVjdCBkcm1fZGVwX2pvYiAqam9iKQ0KPiArew0KPiArICAgICAgIGxvY2tk ZXBfYXNzZXJ0X2hlbGQoJnEtPmpvYi5sb2NrKTsNCj4gKw0KPiArICAgICAgIGxpc3RfZGVsX2lu aXQoJmpvYi0+cGVuZGluZ19saW5rKTsNCj4gKyAgICAgICBjYW5jZWxfZGVsYXllZF93b3JrKCZx LT5zY2hlZC50ZHIpOw0KPiArICAgICAgIGRybV9xdWV1ZV9zdGFydF90aW1lb3V0KHEpOw0KPiAr fQ0KPiArDQo+ICsvKioNCj4gKyAqIGRybV9kZXBfcXVldWVfZ2V0X2ZpbmlzaGVkX2pvYigpIC0g ZGVxdWV1ZSBhIGZpbmlzaGVkIGpvYg0KPiArICogQHE6IGRlcCBxdWV1ZQ0KPiArICoNCj4gKyAq IFVuZGVyIEBxLT5qb2IubG9jayBjaGVja3MgdGhlIGhlYWQgb2YgdGhlIHBlbmRpbmcgbGlzdCBm b3IgYQ0KPiArICogZmluaXNoZWQgZGVwIGZlbmNlLiBJZiBmb3VuZCwgcmVtb3ZlcyB0aGUgam9i IGZyb20gdGhlIGxpc3QsDQo+ICsgKiBjYW5jZWxzIHRoZSBURFIsIGFuZCByZS1hcm1zIGl0IGZv ciB0aGUgbmV3IGhlYWQuDQo+ICsgKg0KPiArICogQ29udGV4dDogUHJvY2VzcyBjb250ZXh0ICh3 b3JrcXVldWUpLiBETUEgZmVuY2Ugc2lnbmFsaW5nIHBhdGguDQo+ICsgKiBSZXR1cm46IHRoZSBm aW5pc2hlZCAmZHJtX2RlcF9qb2IsIG9yIE5VTEwgaWYgbm9uZSBpcyByZWFkeS4NCj4gKyAqLw0K PiArc3RhdGljIHN0cnVjdCBkcm1fZGVwX2pvYiAqDQo+ICtkcm1fZGVwX3F1ZXVlX2dldF9maW5p c2hlZF9qb2Ioc3RydWN0IGRybV9kZXBfcXVldWUgKnEpDQo+ICt7DQo+ICsgICAgICAgc3RydWN0 IGRybV9kZXBfam9iICpqb2I7DQo+ICsNCj4gKyAgICAgICBndWFyZChzcGlubG9ja19pcnEpKCZx LT5qb2IubG9jayk7DQo+ICsNCj4gKyAgICAgICBqb2IgPSBsaXN0X2ZpcnN0X2VudHJ5X29yX251 bGwoJnEtPmpvYi5wZW5kaW5nLCBzdHJ1Y3QgZHJtX2RlcF9qb2IsDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHBlbmRpbmdfbGluayk7DQo+ICsgICAgICAgaWYgKGpv YiAmJiBkcm1fZGVwX2ZlbmNlX2lzX2ZpbmlzaGVkKGpvYi0+ZGZlbmNlKSkNCj4gKyAgICAgICAg ICAgICAgIGRybV9kZXBfcXVldWVfcmVtb3ZlX2pvYihxLCBqb2IpOw0KPiArICAgICAgIGVsc2UN Cj4gKyAgICAgICAgICAgICAgIGpvYiA9IE5VTEw7DQo+ICsNCj4gKyAgICAgICByZXR1cm4gam9i Ow0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAqIGRybV9kZXBfcXVldWVfcHV0X2pvYl93b3JrKCkg LSBwdXQtam9iIHdvcmtlcg0KPiArICogQHdvcms6IHdvcmsgaXRlbSBlbWJlZGRlZCBpbiB0aGUg ZGVwIHF1ZXVlDQo+ICsgKg0KPiArICogRHJhaW5zIGFsbCBmaW5pc2hlZCBqb2JzIGJ5IGNhbGxp bmcgZHJtX2RlcF9qb2JfcHV0KCkgaW4gYSBsb29wLA0KPiArICogdGhlbiBraWNrcyB0aGUgcnVu LWpvYiB3b3JrZXIuDQo+ICsgKg0KPiArICogVXNlcyBkcm1fZGVwX3F1ZXVlX2dldF91bmxlc3Nf emVybygpIGF0IGVudHJ5IGFuZCBiYWlscyBpbW1lZGlhdGVseSBpZiB0aGUNCj4gKyAqIHF1ZXVl IGlzIGluIHpvbWJpZSBzdGF0ZSAocmVmY291bnQgYWxyZWFkeSB6ZXJvLCBhc3luYyB0ZWFyZG93 biBpbiBmbGlnaHQpLg0KPiArICoNCj4gKyAqIFdyYXBzIGV4ZWN1dGlvbiBpbiBkbWFfZmVuY2Vf YmVnaW5fc2lnbmFsbGluZygpIC8gZG1hX2ZlbmNlX2VuZF9zaWduYWxsaW5nKCkNCj4gKyAqIGJl Y2F1c2Ugd29ya3F1ZXVlIGlzIHNoYXJlZCB3aXRoIG90aGVyIGl0ZW1zIGluIHRoZSBmZW5jZSBz aWduYWxpbmcgcGF0aC4NCj4gKyAqDQo+ICsgKiBDb250ZXh0OiBQcm9jZXNzIGNvbnRleHQgKHdv cmtxdWV1ZSkuIERNQSBmZW5jZSBzaWduYWxpbmcgcGF0aC4NCj4gKyAqLw0KPiArc3RhdGljIHZv aWQgZHJtX2RlcF9xdWV1ZV9wdXRfam9iX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQ0K PiArew0KPiArICAgICAgIHN0cnVjdCBkcm1fZGVwX3F1ZXVlICpxID0NCj4gKyAgICAgICAgICAg ICAgIGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZHJtX2RlcF9xdWV1ZSwgc2NoZWQucHV0X2pv Yik7DQo+ICsgICAgICAgc3RydWN0IGRybV9kZXBfam9iICpqb2I7DQo+ICsgICAgICAgYm9vbCBj b29raWUgPSBkbWFfZmVuY2VfYmVnaW5fc2lnbmFsbGluZygpOw0KPiArDQo+ICsgICAgICAgLyog QmFpbCBpZiBxdWV1ZSBpcyB6b21iaWUgKHJlZmNvdW50IGFscmVhZHkgemVybywgdGVhcmRvd24g aW4gZmxpZ2h0KS4gKi8NCj4gKyAgICAgICBpZiAoIWRybV9kZXBfcXVldWVfZ2V0X3VubGVzc196 ZXJvKHEpKSB7DQo+ICsgICAgICAgICAgICAgICBkbWFfZmVuY2VfZW5kX3NpZ25hbGxpbmcoY29v a2llKTsNCj4gKyAgICAgICAgICAgICAgIHJldHVybjsNCj4gKyAgICAgICB9DQo+ICsNCj4gKyAg ICAgICB3aGlsZSAoKGpvYiA9IGRybV9kZXBfcXVldWVfZ2V0X2ZpbmlzaGVkX2pvYihxKSkpDQo+ ICsgICAgICAgICAgICAgICBkcm1fZGVwX2pvYl9wdXQoam9iKTsNCj4gKw0KPiArICAgICAgIGRy bV9kZXBfcXVldWVfcnVuX2pvYl9xdWV1ZShxKTsNCj4gKw0KPiArICAgICAgIGRybV9kZXBfcXVl dWVfcHV0KHEpOw0KPiArICAgICAgIGRtYV9mZW5jZV9lbmRfc2lnbmFsbGluZyhjb29raWUpOw0K PiArfQ0KPiArDQo+ICsvKioNCj4gKyAqIGRybV9kZXBfcXVldWVfdGRyX3dvcmsoKSAtIFREUiB3 b3JrZXINCj4gKyAqIEB3b3JrOiB3b3JrIGl0ZW0gZW1iZWRkZWQgaW4gdGhlIGRlbGF5ZWQgVERS IHdvcmsNCj4gKyAqDQo+ICsgKiBSZW1vdmVzIHRoZSBoZWFkIGpvYiBmcm9tIHRoZSBwZW5kaW5n IGxpc3QgdW5kZXIgQHEtPmpvYi5sb2NrLA0KPiArICogYXNzZXJ0cyBAcS0+b3BzLT50aW1lZG91 dF9qb2IgaXMgbm9uLU5VTEwsIGNhbGxzIGl0IG91dHNpZGUgdGhlIGxvY2ssDQo+ICsgKiByZXF1 ZXVlcyB0aGUgam9iIGlmICVEUk1fREVQX1RJTUVET1VUX1NUQVRfUkVRVUVVRV9KT0IsIGRyb3Bz IHRoZQ0KPiArICogcXVldWUncyBqb2IgcmVmZXJlbmNlIG9uICVEUk1fREVQX1RJTUVET1VUX1NU QVRfSk9CX1NJR05BTEVELCBhbmQgYWx3YXlzDQo+ICsgKiByZXN0YXJ0cyB0aGUgVERSIHRpbWVy IGFmdGVyIGhhbmRsaW5nIHRoZSBqb2IgKHVubGVzcyBAcSBpcyBzdG9wcGluZykuDQo+ICsgKiBB bnkgb3RoZXIgcmV0dXJuIHZhbHVlIHRyaWdnZXJzIGEgV0FSTi4NCj4gKyAqDQo+ICsgKiBUaGUg VERSIGlzIG5ldmVyIGFybWVkIHdoZW4gQHEtPm9wcy0+dGltZWRvdXRfam9iIGlzIE5VTEwsIHNv IGZpcmluZw0KPiArICogdGhpcyB3b3JrZXIgd2l0aG91dCBhIHRpbWVkb3V0X2pvYiBjYWxsYmFj ayBpcyBhIGRyaXZlciBidWcuDQo+ICsgKg0KPiArICogVXNlcyBkcm1fZGVwX3F1ZXVlX2dldF91 bmxlc3NfemVybygpIGF0IGVudHJ5IGFuZCBiYWlscyBpbW1lZGlhdGVseSBpZiB0aGUNCj4gKyAq IHF1ZXVlIGlzIGluIHpvbWJpZSBzdGF0ZSAocmVmY291bnQgYWxyZWFkeSB6ZXJvLCBhc3luYyB0 ZWFyZG93biBpbiBmbGlnaHQpLg0KPiArICoNCj4gKyAqIFdyYXBzIGV4ZWN1dGlvbiBpbiBkbWFf ZmVuY2VfYmVnaW5fc2lnbmFsbGluZygpIC8gZG1hX2ZlbmNlX2VuZF9zaWduYWxsaW5nKCkNCj4g KyAqIGJlY2F1c2UgdGltZWRvdXRfam9iKCkgaXMgZXhwZWN0ZWQgdG8gc2lnbmFsIHRoZSBndWls dHkgam9iJ3MgZmVuY2UgYXMgcGFydA0KPiArICogb2YgcmVzZXQuDQo+ICsgKg0KPiArICogQ29u dGV4dDogUHJvY2VzcyBjb250ZXh0ICh3b3JrcXVldWUpLiBETUEgZmVuY2Ugc2lnbmFsaW5nIHBh dGguDQo+ICsgKi8NCj4gK3N0YXRpYyB2b2lkIGRybV9kZXBfcXVldWVfdGRyX3dvcmsoc3RydWN0 IHdvcmtfc3RydWN0ICp3b3JrKQ0KPiArew0KPiArICAgICAgIHN0cnVjdCBkcm1fZGVwX3F1ZXVl ICpxID0NCj4gKyAgICAgICAgICAgICAgIGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZHJtX2Rl cF9xdWV1ZSwgc2NoZWQudGRyLndvcmspOw0KPiArICAgICAgIHN0cnVjdCBkcm1fZGVwX2pvYiAq am9iOw0KPiArICAgICAgIGJvb2wgY29va2llID0gZG1hX2ZlbmNlX2JlZ2luX3NpZ25hbGxpbmco KTsNCj4gKw0KPiArICAgICAgIC8qIEJhaWwgaWYgcXVldWUgaXMgem9tYmllIChyZWZjb3VudCBh bHJlYWR5IHplcm8sIHRlYXJkb3duIGluIGZsaWdodCkuICovDQo+ICsgICAgICAgaWYgKCFkcm1f ZGVwX3F1ZXVlX2dldF91bmxlc3NfemVybyhxKSkgew0KPiArICAgICAgICAgICAgICAgZG1hX2Zl bmNlX2VuZF9zaWduYWxsaW5nKGNvb2tpZSk7DQo+ICsgICAgICAgICAgICAgICByZXR1cm47DQo+ ICsgICAgICAgfQ0KPiArDQo+ICsgICAgICAgc2NvcGVkX2d1YXJkKHNwaW5sb2NrX2lycSwgJnEt PmpvYi5sb2NrKSB7DQo+ICsgICAgICAgICAgICAgICBqb2IgPSBsaXN0X2ZpcnN0X2VudHJ5X29y X251bGwoJnEtPmpvYi5wZW5kaW5nLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHN0cnVjdCBkcm1fZGVwX2pvYiwNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZW5kaW5nX2xpbmspOw0KPiArICAgICAgICAg ICAgICAgaWYgKGpvYikNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgLyoNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICogUmVtb3ZlIGZyb20gcGVuZGluZyBzbyBpdCBjYW5ub3QgYmUgZnJl ZWQNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICogY29uY3VycmVudGx5IGJ5IGRybV9kZXBf cXVldWVfZ2V0X2ZpbmlzaGVkX2pvYigpIG9yDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAq IC5kcm1fZGVwX2pvYl9kb25lKCkuDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAqLw0KPiAr ICAgICAgICAgICAgICAgICAgICAgICBsaXN0X2RlbF9pbml0KCZqb2ItPnBlbmRpbmdfbGluayk7 DQo+ICsgICAgICAgfQ0KPiArDQo+ICsgICAgICAgaWYgKGpvYikgew0KPiArICAgICAgICAgICAg ICAgZW51bSBkcm1fZGVwX3RpbWVkb3V0X3N0YXQgc3RhdHVzOw0KPiArDQo+ICsgICAgICAgICAg ICAgICBpZiAoV0FSTl9PTighcS0+b3BzLT50aW1lZG91dF9qb2IpKSB7DQo+ICsgICAgICAgICAg ICAgICAgICAgICAgIGRybV9kZXBfam9iX3B1dChqb2IpOw0KPiArICAgICAgICAgICAgICAgICAg ICAgICBnb3RvIG91dDsNCj4gKyAgICAgICAgICAgICAgIH0NCj4gKw0KPiArICAgICAgICAgICAg ICAgc3RhdHVzID0gcS0+b3BzLT50aW1lZG91dF9qb2Ioam9iKTsNCj4gKw0KPiArICAgICAgICAg ICAgICAgc3dpdGNoIChzdGF0dXMpIHsNCj4gKyAgICAgICAgICAgICAgIGNhc2UgRFJNX0RFUF9U SU1FRE9VVF9TVEFUX1JFUVVFVUVfSk9COg0KPiArICAgICAgICAgICAgICAgICAgICAgICBzY29w ZWRfZ3VhcmQoc3BpbmxvY2tfaXJxLCAmcS0+am9iLmxvY2spDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbGlzdF9hZGQoJmpvYi0+cGVuZGluZ19saW5rLCAmcS0+am9iLnBlbmRp bmcpOw0KPiArICAgICAgICAgICAgICAgICAgICAgICBkcm1fZGVwX3F1ZXVlX3B1dF9qb2JfcXVl dWUocSk7DQo+ICsgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KPiArICAgICAgICAgICAg ICAgY2FzZSBEUk1fREVQX1RJTUVET1VUX1NUQVRfSk9CX1NJR05BTEVEOg0KPiArICAgICAgICAg ICAgICAgICAgICAgICBkcm1fZGVwX2pvYl9wdXQoam9iKTsNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgYnJlYWs7DQo+ICsgICAgICAgICAgICAgICBkZWZhdWx0Og0KPiArICAgICAgICAgICAg ICAgICAgICAgICBXQVJOX09OKCJpbnZhbGlkIGRybV9kZXBfdGltZWRvdXRfc3RhdCIpOw0KPiAr ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCj4gKyAgICAgICAgICAgICAgIH0NCj4gKyAg ICAgICB9DQo+ICsNCj4gK291dDoNCj4gKyAgICAgICBkcm1fcXVldWVfc3RhcnRfdGltZW91dF91 bmxvY2tlZChxKTsNCj4gKyAgICAgICBkcm1fZGVwX3F1ZXVlX3B1dChxKTsNCj4gKyAgICAgICBk bWFfZmVuY2VfZW5kX3NpZ25hbGxpbmcoY29va2llKTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsg KiBkcm1fZGVwX2FsbG9jX3N1Ym1pdF93cSgpIC0gYWxsb2NhdGUgYW4gb3JkZXJlZCBzdWJtaXQg d29ya3F1ZXVlDQo+ICsgKiBAbmFtZTogbmFtZSBmb3IgdGhlIHdvcmtxdWV1ZQ0KPiArICogQGZs YWdzOiBEUk1fREVQX1FVRVVFX0ZMQUdTXyogZmxhZ3MNCj4gKyAqDQo+ICsgKiBBbGxvY2F0ZXMg YW4gb3JkZXJlZCB3b3JrcXVldWUgZm9yIGpvYiBzdWJtaXNzaW9uIHdpdGggJVdRX01FTV9SRUNM QUlNIGFuZA0KPiArICogJVdRX01FTV9XQVJOX09OX1JFQ0xBSU0gc2V0LCBlbnN1cmluZyB0aGUg d29ya3F1ZXVlIGlzIHNhZmUgdG8gdXNlIGZyb20NCj4gKyAqIG1lbW9yeSByZWNsYWltIGNvbnRl eHQgYW5kIHByb3Blcmx5IGFubm90YXRlZCBmb3IgbG9ja2RlcCB0YWludCB0cmFja2luZy4NCj4g KyAqIEFkZHMgJVdRX0hJR0hQUkkgaWYgJURSTV9ERVBfUVVFVUVfRkxBR1NfSElHSFBSSSBpcyBz ZXQuIFdoZW4NCj4gKyAqIENPTkZJR19MT0NLREVQIGlzIGVuYWJsZWQsIHVzZXMgYSBkZWRpY2F0 ZWQgbG9ja2RlcCBtYXAgZm9yIGFubm90YXRpb24uDQo+ICsgKg0KPiArICogQ29udGV4dDogUHJv Y2VzcyBjb250ZXh0Lg0KPiArICogUmV0dXJuOiB0aGUgbmV3ICZ3b3JrcXVldWVfc3RydWN0LCBv ciBOVUxMIG9uIGZhaWx1cmUuDQo+ICsgKi8NCj4gK3N0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0 cnVjdCAqDQo+ICtkcm1fZGVwX2FsbG9jX3N1Ym1pdF93cShjb25zdCBjaGFyICpuYW1lLCBlbnVt IGRybV9kZXBfcXVldWVfZmxhZ3MgZmxhZ3MpDQo+ICt7DQo+ICsgICAgICAgdW5zaWduZWQgaW50 IHdxX2ZsYWdzID0gV1FfTUVNX1JFQ0xBSU0gfCBXUV9NRU1fV0FSTl9PTl9SRUNMQUlNOw0KPiAr DQo+ICsgICAgICAgaWYgKGZsYWdzICYgRFJNX0RFUF9RVUVVRV9GTEFHU19ISUdIUFJJKQ0KPiAr ICAgICAgICAgICAgICAgd3FfZmxhZ3MgfD0gV1FfSElHSFBSSTsNCj4gKw0KPiArI2lmIElTX0VO QUJMRUQoQ09ORklHX0xPQ0tERVApDQo+ICsgICAgICAgc3RhdGljIHN0cnVjdCBsb2NrZGVwX21h cCBtYXAgPSB7DQo+ICsgICAgICAgICAgICAgICAubmFtZSA9ICJkcm1fZGVwX3N1Ym1pdF9sb2Nr ZGVwX21hcCINCj4gKyAgICAgICB9Ow0KPiArICAgICAgIHJldHVybiBhbGxvY19vcmRlcmVkX3dv cmtxdWV1ZV9sb2NrZGVwX21hcChuYW1lLCB3cV9mbGFncywgJm1hcCk7DQo+ICsjZWxzZQ0KPiAr ICAgICAgIHJldHVybiBhbGxvY19vcmRlcmVkX3dvcmtxdWV1ZShuYW1lLCB3cV9mbGFncyk7DQo+ ICsjZW5kaWYNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBkcm1fZGVwX2FsbG9jX3RpbWVvdXRf d3EoKSAtIGFsbG9jYXRlIGFuIG9yZGVyZWQgVERSIHdvcmtxdWV1ZQ0KPiArICogQG5hbWU6IG5h bWUgZm9yIHRoZSB3b3JrcXVldWUNCj4gKyAqDQo+ICsgKiBBbGxvY2F0ZXMgYW4gb3JkZXJlZCB3 b3JrcXVldWUgZm9yIHRpbWVvdXQgZGV0ZWN0aW9uIGFuZCByZWNvdmVyeSB3aXRoDQo+ICsgKiAl V1FfTUVNX1JFQ0xBSU0gYW5kICVXUV9NRU1fV0FSTl9PTl9SRUNMQUlNIHNldCwgZW5zdXJpbmcg Y29uc2lzdGVudCB0YWludA0KPiArICogYW5ub3RhdGlvbiB3aXRoIHRoZSBzdWJtaXQgd29ya3F1 ZXVlLiBXaGVuIENPTkZJR19MT0NLREVQIGlzIGVuYWJsZWQsIHVzZXMNCj4gKyAqIGEgZGVkaWNh dGVkIGxvY2tkZXAgbWFwIGZvciBhbm5vdGF0aW9uLg0KPiArICoNCj4gKyAqIENvbnRleHQ6IFBy b2Nlc3MgY29udGV4dC4NCj4gKyAqIFJldHVybjogdGhlIG5ldyAmd29ya3F1ZXVlX3N0cnVjdCwg b3IgTlVMTCBvbiBmYWlsdXJlLg0KPiArICovDQo+ICtzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9z dHJ1Y3QgKmRybV9kZXBfYWxsb2NfdGltZW91dF93cShjb25zdCBjaGFyICpuYW1lKQ0KPiArew0K PiArICAgICAgIHVuc2lnbmVkIGludCB3cV9mbGFncyA9IFdRX01FTV9SRUNMQUlNIHwgV1FfTUVN X1dBUk5fT05fUkVDTEFJTTsNCj4gKw0KPiArI2lmIElTX0VOQUJMRUQoQ09ORklHX0xPQ0tERVAp DQo+ICsgICAgICAgc3RhdGljIHN0cnVjdCBsb2NrZGVwX21hcCBtYXAgPSB7DQo+ICsgICAgICAg ICAgICAgICAubmFtZSA9ICJkcm1fZGVwX3RpbWVvdXRfbG9ja2RlcF9tYXAiDQo+ICsgICAgICAg fTsNCj4gKyAgICAgICByZXR1cm4gYWxsb2Nfb3JkZXJlZF93b3JrcXVldWVfbG9ja2RlcF9tYXAo bmFtZSwgd3FfZmxhZ3MsICZtYXApOw0KPiArI2Vsc2UNCj4gKyAgICAgICByZXR1cm4gYWxsb2Nf b3JkZXJlZF93b3JrcXVldWUobmFtZSwgd3FfZmxhZ3MpOw0KPiArI2VuZGlmDQo+ICt9DQo+ICsN Cj4gKy8qKg0KPiArICogZHJtX2RlcF9xdWV1ZV9pbml0KCkgLSBpbml0aWFsaXplIGEgZGVwIHF1 ZXVlDQo+ICsgKiBAcTogZGVwIHF1ZXVlIHRvIGluaXRpYWxpemUNCj4gKyAqIEBhcmdzOiBpbml0 aWFsaXphdGlvbiBhcmd1bWVudHMNCj4gKyAqDQo+ICsgKiBJbml0aWFsaXplcyBhbGwgZmllbGRz IG9mIEBxIGZyb20gQGFyZ3MuIElmIEBhcmdzLT5zdWJtaXRfd3EgaXMgTlVMTCBhbg0KPiArICog b3JkZXJlZCB3b3JrcXVldWUgaXMgYWxsb2NhdGVkIGFuZCBvd25lZCBieSB0aGUgcXVldWUNCj4g KyAqICglRFJNX0RFUF9RVUVVRV9GTEFHU19PV05fU1VCTUlUX1dRKS4gSWYgQGFyZ3MtPnRpbWVv dXRfd3EgaXMgTlVMTCBhbg0KPiArICogb3JkZXJlZCB3b3JrcXVldWUgaXMgYWxsb2NhdGVkIGFu ZCBvd25lZCBieSB0aGUgcXVldWUNCj4gKyAqICglRFJNX0RFUF9RVUVVRV9GTEFHU19PV05fVElN RURPVVRfV1EpLiBPbiBzdWNjZXNzIHRoZSBxdWV1ZSBob2xkcyBvbmUga3JlZg0KPiArICogcmVm ZXJlbmNlIGFuZCBkcm1fZGVwX3F1ZXVlX3B1dCgpIG11c3QgYmUgY2FsbGVkIHRvIGRyb3AgdGhp cyByZWZlcmVuY2UNCj4gKyAqIChpLmUuLCBkcml2ZXJzIGNhbm5vdCBkaXJlY3RseSBmcmVlIHRo ZSBxdWV1ZSkuDQo+ICsgKg0KPiArICogV2hlbiBDT05GSUdfTE9DS0RFUCBpcyBlbmFibGVkLCBA cS0+c2NoZWQubG9jayBpcyBwcmltZWQgYWdhaW5zdCB0aGUNCj4gKyAqIGZzX3JlY2xhaW0gcHNl dWRvLWxvY2sgc28gdGhhdCBsb2NrZGVwIGNhbiBkZXRlY3QgYW55IGxvY2sgb3JkZXJpbmcNCj4g KyAqIGludmVyc2lvbiBiZXR3ZWVuIEBzY2hlZC5sb2NrIGFuZCBtZW1vcnkgcmVjbGFpbS4NCj4g KyAqDQo+ICsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgJS1FSU5WQUwgd2hlbiBAYXJncy0+Y3Jl ZGl0X2xpbWl0IGlzIHplcm8sIEBhcmdzLT5vcHMNCj4gKyAqIGlzIE5VTEwsIEBhcmdzLT5kcm0g aXMgTlVMTCwgQGFyZ3MtPm9wcy0+cnVuX2pvYiBpcyBOVUxMLCBvciB3aGVuDQo+ICsgKiBAYXJn cy0+c3VibWl0X3dxIG9yIEBhcmdzLT50aW1lb3V0X3dxIGlzIG5vbi1OVUxMIGJ1dCB3YXMgbm90 IGFsbG9jYXRlZCB3aXRoDQo+ICsgKiAlV1FfTUVNX1dBUk5fT05fUkVDTEFJTTsgJS1FTk9NRU0g d2hlbiB3b3JrcXVldWUgYWxsb2NhdGlvbiBmYWlscy4NCj4gKyAqDQo+ICsgKiBDb250ZXh0OiBQ cm9jZXNzIGNvbnRleHQuIE1heSBhbGxvY2F0ZSBtZW1vcnkgYW5kIGNyZWF0ZSB3b3JrcXVldWVz Lg0KPiArICovDQo+ICtpbnQgZHJtX2RlcF9xdWV1ZV9pbml0KHN0cnVjdCBkcm1fZGVwX3F1ZXVl ICpxLA0KPiArICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBkcm1fZGVwX3F1ZXVl X2luaXRfYXJncyAqYXJncykNCj4gK3sNCj4gKyAgICAgICBpZiAoIWFyZ3MtPmNyZWRpdF9saW1p dCB8fCAhYXJncy0+ZHJtIHx8ICFhcmdzLT5vcHMgfHwNCj4gKyAgICAgICAgICAgIWFyZ3MtPm9w cy0+cnVuX2pvYikNCj4gKyAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOw0KPiArDQo+ICsg ICAgICAgaWYgKGFyZ3MtPnN1Ym1pdF93cSAmJiAhd29ya3F1ZXVlX2lzX3JlY2xhaW1fYW5ub3Rh dGVkKGFyZ3MtPnN1Ym1pdF93cSkpDQo+ICsgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsN Cj4gKw0KPiArICAgICAgIGlmIChhcmdzLT50aW1lb3V0X3dxICYmDQo+ICsgICAgICAgICAgICF3 b3JrcXVldWVfaXNfcmVjbGFpbV9hbm5vdGF0ZWQoYXJncy0+dGltZW91dF93cSkpDQo+ICsgICAg ICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsNCj4gKw0KPiArICAgICAgIG1lbXNldChxLCAwLCBz aXplb2YoKnEpKTsNCj4gKw0KPiArICAgICAgIHEtPm5hbWUgPSBhcmdzLT5uYW1lOw0KPiArICAg ICAgIHEtPmRybSA9IGFyZ3MtPmRybTsNCj4gKyAgICAgICBxLT5jcmVkaXQubGltaXQgPSBhcmdz LT5jcmVkaXRfbGltaXQ7DQo+ICsgICAgICAgcS0+am9iLnRpbWVvdXQgPSBhcmdzLT50aW1lb3V0 ID8gYXJncy0+dGltZW91dCA6IE1BWF9TQ0hFRFVMRV9USU1FT1VUOw0KPiArDQo+ICsgICAgICAg aW5pdF9yY3VfaGVhZCgmcS0+cmN1KTsNCj4gKyAgICAgICBJTklUX0xJU1RfSEVBRCgmcS0+am9i LnBlbmRpbmcpOw0KPiArICAgICAgIHNwaW5fbG9ja19pbml0KCZxLT5qb2IubG9jayk7DQo+ICsg ICAgICAgc3BzY19xdWV1ZV9pbml0KCZxLT5qb2IucXVldWUpOw0KPiArDQo+ICsgICAgICAgbXV0 ZXhfaW5pdCgmcS0+c2NoZWQubG9jayk7DQo+ICsgICAgICAgaWYgKElTX0VOQUJMRUQoQ09ORklH X0xPQ0tERVApKSB7DQo+ICsgICAgICAgICAgICAgICBmc19yZWNsYWltX2FjcXVpcmUoR0ZQX0tF Uk5FTCk7DQo+ICsgICAgICAgICAgICAgICBtaWdodF9sb2NrKCZxLT5zY2hlZC5sb2NrKTsNCj4g KyAgICAgICAgICAgICAgIGZzX3JlY2xhaW1fcmVsZWFzZShHRlBfS0VSTkVMKTsNCj4gKyAgICAg ICB9DQo+ICsNCj4gKyAgICAgICBpZiAoYXJncy0+c3VibWl0X3dxKSB7DQo+ICsgICAgICAgICAg ICAgICBxLT5zY2hlZC5zdWJtaXRfd3EgPSBhcmdzLT5zdWJtaXRfd3E7DQo+ICsgICAgICAgfSBl bHNlIHsNCj4gKyAgICAgICAgICAgICAgIHEtPnNjaGVkLnN1Ym1pdF93cSA9IGRybV9kZXBfYWxs b2Nfc3VibWl0X3dxKGFyZ3MtPm5hbWUgPzogImRybV9kZXAiLA0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncy0+ZmxhZ3Mp Ow0KPiArICAgICAgICAgICAgICAgaWYgKCFxLT5zY2hlZC5zdWJtaXRfd3EpDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOw0KPiArDQo+ICsgICAgICAgICAgICAgICBx LT5zY2hlZC5mbGFncyB8PSBEUk1fREVQX1FVRVVFX0ZMQUdTX09XTl9TVUJNSVRfV1E7DQo+ICsg ICAgICAgfQ0KPiArDQo+ICsgICAgICAgaWYgKGFyZ3MtPnRpbWVvdXRfd3EpIHsNCj4gKyAgICAg ICAgICAgICAgIHEtPnNjaGVkLnRpbWVvdXRfd3EgPSBhcmdzLT50aW1lb3V0X3dxOw0KPiArICAg ICAgIH0gZWxzZSB7DQo+ICsgICAgICAgICAgICAgICBxLT5zY2hlZC50aW1lb3V0X3dxID0gZHJt X2RlcF9hbGxvY190aW1lb3V0X3dxKGFyZ3MtPm5hbWUgPzogImRybV9kZXAiKTsNCj4gKyAgICAg ICAgICAgICAgIGlmICghcS0+c2NoZWQudGltZW91dF93cSkNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgZ290byBlcnJfc3VibWl0X3dxOw0KPiArDQo+ICsgICAgICAgICAgICAgICBxLT5zY2hl ZC5mbGFncyB8PSBEUk1fREVQX1FVRVVFX0ZMQUdTX09XTl9USU1FRE9VVF9XUTsNCj4gKyAgICAg ICB9DQo+ICsNCj4gKyAgICAgICBxLT5zY2hlZC5mbGFncyB8PSBhcmdzLT5mbGFncyAmDQo+ICsg ICAgICAgICAgICAgICB+KERSTV9ERVBfUVVFVUVfRkxBR1NfT1dOX1NVQk1JVF9XUSB8DQo+ICsg ICAgICAgICAgICAgICAgIERSTV9ERVBfUVVFVUVfRkxBR1NfT1dOX1RJTUVET1VUX1dRKTsNCj4g Kw0KPiArICAgICAgIElOSVRfREVMQVlFRF9XT1JLKCZxLT5zY2hlZC50ZHIsIGRybV9kZXBfcXVl dWVfdGRyX3dvcmspOw0KPiArICAgICAgIElOSVRfV09SSygmcS0+c2NoZWQucnVuX2pvYiwgZHJt X2RlcF9xdWV1ZV9ydW5fam9iX3dvcmspOw0KPiArICAgICAgIElOSVRfV09SSygmcS0+c2NoZWQu cHV0X2pvYiwgZHJtX2RlcF9xdWV1ZV9wdXRfam9iX3dvcmspOw0KPiArDQo+ICsgICAgICAgcS0+ ZmVuY2UuY29udGV4dCA9IGRtYV9mZW5jZV9jb250ZXh0X2FsbG9jKDEpOw0KPiArDQo+ICsgICAg ICAga3JlZl9pbml0KCZxLT5yZWZjb3VudCk7DQo+ICsgICAgICAgcS0+b3BzID0gYXJncy0+b3Bz Ow0KPiArICAgICAgIGRybV9kZXZfZ2V0KHEtPmRybSk7DQo+ICsNCj4gKyAgICAgICByZXR1cm4g MDsNCj4gKw0KPiArZXJyX3N1Ym1pdF93cToNCj4gKyAgICAgICBpZiAocS0+c2NoZWQuZmxhZ3Mg JiBEUk1fREVQX1FVRVVFX0ZMQUdTX09XTl9TVUJNSVRfV1EpDQo+ICsgICAgICAgICAgICAgICBk ZXN0cm95X3dvcmtxdWV1ZShxLT5zY2hlZC5zdWJtaXRfd3EpOw0KPiArICAgICAgIG11dGV4X2Rl c3Ryb3koJnEtPnNjaGVkLmxvY2spOw0KPiArDQo+ICsgICAgICAgcmV0dXJuIC1FTk9NRU07DQo+ ICt9DQo+ICtFWFBPUlRfU1lNQk9MKGRybV9kZXBfcXVldWVfaW5pdCk7DQo+ICsNCj4gKyNpZiBJ U19FTkFCTEVEKENPTkZJR19QUk9WRV9MT0NLSU5HKQ0KPiArLyoqDQo+ICsgKiBkcm1fZGVwX3F1 ZXVlX3B1c2hfam9iX2JlZ2luKCkgLSBtYXJrIHRoZSBzdGFydCBvZiBhbiBhcm0vcHVzaCBjcml0 aWNhbCBzZWN0aW9uDQo+ICsgKiBAcTogZGVwIHF1ZXVlIHRoZSBqb2IgYmVsb25ncyB0bw0KPiAr ICoNCj4gKyAqIENhbGxlZCBhdCB0aGUgc3RhcnQgb2YgZHJtX2RlcF9qb2JfYXJtKCkgYW5kIHdh cm5zIGlmIHRoZSBwdXNoIGNvbnRleHQgaXMNCj4gKyAqIGFscmVhZHkgb3duZWQgYnkgYW5vdGhl ciB0YXNrLCB3aGljaCB3b3VsZCBpbmRpY2F0ZSBjb25jdXJyZW50IGFybS9wdXNoIG9uDQo+ICsg KiB0aGUgc2FtZSBxdWV1ZS4NCj4gKyAqDQo+ICsgKiBOby1vcCB3aGVuIENPTkZJR19QUk9WRV9M T0NLSU5HIGlzIGRpc2FibGVkLg0KPiArICoNCj4gKyAqIENvbnRleHQ6IFByb2Nlc3MgY29udGV4 dC4gRE1BIGZlbmNlIHNpZ25hbGluZyBwYXRoLg0KPiArICovDQo+ICt2b2lkIGRybV9kZXBfcXVl dWVfcHVzaF9qb2JfYmVnaW4oc3RydWN0IGRybV9kZXBfcXVldWUgKnEpDQo+ICt7DQo+ICsgICAg ICAgV0FSTl9PTihxLT5qb2IucHVzaC5vd25lcik7DQo+ICsgICAgICAgcS0+am9iLnB1c2gub3du ZXIgPSBjdXJyZW50Ow0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAqIGRybV9kZXBfcXVldWVfcHVz aF9qb2JfZW5kKCkgLSBtYXJrIHRoZSBlbmQgb2YgYW4gYXJtL3B1c2ggY3JpdGljYWwgc2VjdGlv bg0KPiArICogQHE6IGRlcCBxdWV1ZSB0aGUgam9iIGJlbG9uZ3MgdG8NCj4gKyAqDQo+ICsgKiBD YWxsZWQgYXQgdGhlIGVuZCBvZiBkcm1fZGVwX2pvYl9wdXNoKCkgYW5kIHdhcm5zIGlmIHRoZSBw dXNoIGNvbnRleHQgaXMgbm90DQo+ICsgKiBvd25lZCBieSB0aGUgY3VycmVudCB0YXNrLCB3aGlj aCB3b3VsZCBpbmRpY2F0ZSBhIG1pc21hdGNoZWQgYmVnaW4vZW5kIHBhaXINCj4gKyAqIG9yIGEg cHVzaCBmcm9tIHRoZSB3cm9uZyB0aHJlYWQuDQo+ICsgKg0KPiArICogTm8tb3Agd2hlbiBDT05G SUdfUFJPVkVfTE9DS0lORyBpcyBkaXNhYmxlZC4NCj4gKyAqDQo+ICsgKiBDb250ZXh0OiBQcm9j ZXNzIGNvbnRleHQuIERNQSBmZW5jZSBzaWduYWxpbmcgcGF0aC4NCj4gKyAqLw0KPiArdm9pZCBk cm1fZGVwX3F1ZXVlX3B1c2hfam9iX2VuZChzdHJ1Y3QgZHJtX2RlcF9xdWV1ZSAqcSkNCj4gK3sN Cj4gKyAgICAgICBXQVJOX09OKHEtPmpvYi5wdXNoLm93bmVyICE9IGN1cnJlbnQpOw0KPiArICAg ICAgIHEtPmpvYi5wdXNoLm93bmVyID0gTlVMTDsNCj4gK30NCj4gKyNlbmRpZg0KPiArDQo+ICsv KioNCj4gKyAqIGRybV9kZXBfcXVldWVfYXNzZXJ0X3RlYXJkb3duX2ludmFyaWFudHMoKSAtIGFz c2VydCB0ZWFyZG93biBpbnZhcmlhbnRzDQo+ICsgKiBAcTogZGVwIHF1ZXVlIGJlaW5nIHRvcm4g ZG93bg0KPiArICoNCj4gKyAqIFdhcm5zIGlmIHRoZSBwZW5kaW5nLWpvYiBsaXN0LCB0aGUgU1BT QyBzdWJtaXNzaW9uIHF1ZXVlLCBvciB0aGUgY3JlZGl0DQo+ICsgKiBjb3VudGVyIGlzIG5vbi16 ZXJvIHdoZW4gY2FsbGVkLCBvciBpZiB0aGUgcXVldWUgc3RpbGwgaGFzIGEgbm9uLXplcm8NCj4g KyAqIHJlZmVyZW5jZSBjb3VudC4NCj4gKyAqDQo+ICsgKiBDb250ZXh0OiBBbnkgY29udGV4dC4N Cj4gKyAqLw0KPiArc3RhdGljIHZvaWQgZHJtX2RlcF9xdWV1ZV9hc3NlcnRfdGVhcmRvd25faW52 YXJpYW50cyhzdHJ1Y3QgZHJtX2RlcF9xdWV1ZSAqcSkNCj4gK3sNCj4gKyAgICAgICBXQVJOX09O KCFsaXN0X2VtcHR5KCZxLT5qb2IucGVuZGluZykpOw0KPiArICAgICAgIFdBUk5fT04oc3BzY19x dWV1ZV9jb3VudCgmcS0+am9iLnF1ZXVlKSk7DQo+ICsgICAgICAgV0FSTl9PTihhdG9taWNfcmVh ZCgmcS0+Y3JlZGl0LmNvdW50KSk7DQo+ICsgICAgICAgV0FSTl9PTihkcm1fZGVwX3F1ZXVlX3Jl ZmNvdW50KHEpKTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBkcm1fZGVwX3F1ZXVlX3JlbGVh c2UoKSAtIGZpbmFsIGludGVybmFsIGNsZWFudXAgb2YgYSBkZXAgcXVldWUNCj4gKyAqIEBxOiBk ZXAgcXVldWUgdG8gY2xlYW4gdXANCj4gKyAqDQo+ICsgKiBBc3NlcnRzIHRlYXJkb3duIGludmFy aWFudHMgYW5kIGRlc3Ryb3lzIGludGVybmFsIHJlc291cmNlcyBhbGxvY2F0ZWQgYnkNCj4gKyAq IGRybV9kZXBfcXVldWVfaW5pdCgpIHRoYXQgY2Fubm90IGJlIHRvcm4gZG93biBlYXJsaWVyIGlu IHRoZSB0ZWFyZG93bg0KPiArICogc2VxdWVuY2UuICBDdXJyZW50bHkgdGhpcyBkZXN0cm95cyBA cS0+c2NoZWQubG9jay4NCj4gKyAqDQo+ICsgKiBEcml2ZXJzIHRoYXQgaW1wbGVtZW50ICZkcm1f ZGVwX3F1ZXVlX29wcy5yZWxlYXNlICoqbXVzdCoqIGNhbGwgdGhpcw0KPiArICogZnVuY3Rpb24g YWZ0ZXIgcmVtb3ZpbmcgQHEgZnJvbSBhbnkgaW50ZXJuYWwgYm9va2tlZXBpbmcgKGUuZy4gbG9v a3VwDQo+ICsgKiB0YWJsZXMgb3IgbGlzdHMpIGJ1dCBiZWZvcmUgZnJlZWluZyB0aGUgbWVtb3J5 IHRoYXQgY29udGFpbnMgQHEuICBXaGVuDQo+ICsgKiAmZHJtX2RlcF9xdWV1ZV9vcHMucmVsZWFz ZSBpcyBOVUxMLCBkcm1fZGVwIGZvbGxvd3MgdGhlIGRlZmF1bHQgdGVhcmRvd24NCj4gKyAqIHBh dGggYW5kIGNhbGxzIHRoaXMgZnVuY3Rpb24gYXV0b21hdGljYWxseS4NCj4gKyAqDQo+ICsgKiBD b250ZXh0OiBBbnkgY29udGV4dC4NCj4gKyAqLw0KPiArdm9pZCBkcm1fZGVwX3F1ZXVlX3JlbGVh c2Uoc3RydWN0IGRybV9kZXBfcXVldWUgKnEpDQo+ICt7DQo+ICsgICAgICAgZHJtX2RlcF9xdWV1 ZV9hc3NlcnRfdGVhcmRvd25faW52YXJpYW50cyhxKTsNCj4gKyAgICAgICBtdXRleF9kZXN0cm95 KCZxLT5zY2hlZC5sb2NrKTsNCj4gK30NCj4gK0VYUE9SVF9TWU1CT0woZHJtX2RlcF9xdWV1ZV9y ZWxlYXNlKTsNCj4gKw0KPiArLyoqDQo+ICsgKiBkcm1fZGVwX3F1ZXVlX2ZyZWUoKSAtIGZpbmFs IGNsZWFudXAgb2YgYSBkZXAgcXVldWUNCj4gKyAqIEBxOiBkZXAgcXVldWUgdG8gZnJlZQ0KPiAr ICoNCj4gKyAqIEludm9rZXMgJmRybV9kZXBfcXVldWVfb3BzLnJlbGVhc2UgaWYgc2V0LCBpbiB3 aGljaCBjYXNlIHRoZSBkcml2ZXIgaXMNCj4gKyAqIHJlc3BvbnNpYmxlIGZvciBjYWxsaW5nIGRy bV9kZXBfcXVldWVfcmVsZWFzZSgpIGFuZCBmcmVlaW5nIEBxIGl0c2VsZi4NCj4gKyAqIElmICZk cm1fZGVwX3F1ZXVlX29wcy5yZWxlYXNlIGlzIE5VTEwsIGNhbGxzIGRybV9kZXBfcXVldWVfcmVs ZWFzZSgpDQo+ICsgKiBhbmQgdGhlbiBmcmVlcyBAcSB3aXRoIGtmcmVlX3JjdSgpLg0KPiArICoN Cj4gKyAqIEluIGVpdGhlciBjYXNlLCByZWxlYXNlcyB0aGUgZHJtX2Rldl9nZXQoKSByZWZlcmVu Y2UgdGFrZW4gYXQgaW5pdCB0aW1lDQo+ICsgKiB2aWEgZHJtX2Rldl9wdXQoKSwgYWxsb3dpbmcg dGhlIG93bmluZyAmZHJtX2RldmljZSB0byBiZSB1bmxvYWRlZCBvbmNlDQo+ICsgKiBhbGwgcXVl dWVzIGhhdmUgYmVlbiBmcmVlZC4NCj4gKyAqDQo+ICsgKiBDb250ZXh0OiBQcm9jZXNzIGNvbnRl eHQgKHdvcmtxdWV1ZSksIHJlY2xhaW0gc2FmZS4NCj4gKyAqLw0KPiArc3RhdGljIHZvaWQgZHJt X2RlcF9xdWV1ZV9mcmVlKHN0cnVjdCBkcm1fZGVwX3F1ZXVlICpxKQ0KPiArew0KPiArICAgICAg IHN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBxLT5kcm07DQo+ICsNCj4gKyAgICAgICBpZiAocS0+ b3BzLT5yZWxlYXNlKSB7DQo+ICsgICAgICAgICAgICAgICBxLT5vcHMtPnJlbGVhc2UocSk7DQo+ ICsgICAgICAgfSBlbHNlIHsNCj4gKyAgICAgICAgICAgICAgIGRybV9kZXBfcXVldWVfcmVsZWFz ZShxKTsNCj4gKyAgICAgICAgICAgICAgIGtmcmVlX3JjdShxLCByY3UpOw0KPiArICAgICAgIH0N Cj4gKyAgICAgICBkcm1fZGV2X3B1dChkcm0pOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAqIGRy bV9kZXBfcXVldWVfZnJlZV93b3JrKCkgLSBkZWZlcnJlZCBxdWV1ZSB0ZWFyZG93biB3b3JrZXIN Cj4gKyAqIEB3b3JrOiBmcmVlX3dvcmsgaXRlbSBlbWJlZGRlZCBpbiB0aGUgZGVwIHF1ZXVlDQo+ ICsgKg0KPiArICogUnVucyBvbiBkZXBfZnJlZV93cS4gRGlzYWJsZXMgYWxsIHdvcmsgaXRlbXMg c3luY2hyb25vdXNseQ0KPiArICogKHByZXZlbnRpbmcgcmUtcXVldWUgYW5kIHdhaXRpbmcgZm9y IGluLWZsaWdodCBpbnN0YW5jZXMpLA0KPiArICogZGVzdHJveXMgYW55IG93bmVkIHdvcmtxdWV1 ZXMsIHRoZW4gY2FsbHMgZHJtX2RlcF9xdWV1ZV9mcmVlKCkuDQo+ICsgKiBSdW5uaW5nIG9uIGRl cF9mcmVlX3dxIGVuc3VyZXMgZGVzdHJveV93b3JrcXVldWUoKSBpcyBuZXZlcg0KPiArICogY2Fs bGVkIGZyb20gd2l0aGluIG9uZSBvZiB0aGUgcXVldWUncyBvd24gd29ya2VycyAoZGVhZGxvY2sp DQo+ICsgKiBhbmQgZGlzYWJsZV8qX3N5bmMoKSBjYW5ub3QgZGVhZGxvY2sgZWl0aGVyLg0KPiAr ICoNCj4gKyAqIENvbnRleHQ6IFByb2Nlc3MgY29udGV4dCAod29ya3F1ZXVlKSwgcmVjbGFpbSBz YWZlLg0KPiArICovDQo+ICtzdGF0aWMgdm9pZCBkcm1fZGVwX3F1ZXVlX2ZyZWVfd29yayhzdHJ1 Y3Qgd29ya19zdHJ1Y3QgKndvcmspDQo+ICt7DQo+ICsgICAgICAgc3RydWN0IGRybV9kZXBfcXVl dWUgKnEgPQ0KPiArICAgICAgICAgICAgICAgY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkcm1f ZGVwX3F1ZXVlLCBmcmVlX3dvcmspOw0KPiArDQo+ICsgICAgICAgZHJtX2RlcF9xdWV1ZV9hc3Nl cnRfdGVhcmRvd25faW52YXJpYW50cyhxKTsNCj4gKw0KPiArICAgICAgIGRpc2FibGVfZGVsYXll ZF93b3JrX3N5bmMoJnEtPnNjaGVkLnRkcik7DQo+ICsgICAgICAgZGlzYWJsZV93b3JrX3N5bmMo JnEtPnNjaGVkLnJ1bl9qb2IpOw0KPiArICAgICAgIGRpc2FibGVfd29ya19zeW5jKCZxLT5zY2hl ZC5wdXRfam9iKTsNCj4gKw0KPiArICAgICAgIGlmIChxLT5zY2hlZC5mbGFncyAmIERSTV9ERVBf UVVFVUVfRkxBR1NfT1dOX1RJTUVET1VUX1dRKQ0KPiArICAgICAgICAgICAgICAgZGVzdHJveV93 b3JrcXVldWUocS0+c2NoZWQudGltZW91dF93cSk7DQo+ICsNCj4gKyAgICAgICBpZiAocS0+c2No ZWQuZmxhZ3MgJiBEUk1fREVQX1FVRVVFX0ZMQUdTX09XTl9TVUJNSVRfV1EpDQo+ICsgICAgICAg ICAgICAgICBkZXN0cm95X3dvcmtxdWV1ZShxLT5zY2hlZC5zdWJtaXRfd3EpOw0KPiArDQo+ICsg ICAgICAgZHJtX2RlcF9xdWV1ZV9mcmVlKHEpOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAqIGRy bV9kZXBfcXVldWVfZmluaSgpIC0gdGVhciBkb3duIGEgZGVwIHF1ZXVlDQo+ICsgKiBAcTogZGVw IHF1ZXVlIHRvIHRlYXIgZG93bg0KPiArICoNCj4gKyAqIEFzc2VydHMgdGVhcmRvd24gaW52YXJp YW50cyAgYW5kIG5pdGlhdGVzIHRlYXJkb3duIG9mIEBxIGJ5IHF1ZXVpbmcgdGhlDQo+ICsgKiBk ZWZlcnJlZCBmcmVlIHdvcmsgb250byB0aHQgbW9kdWxlLXByaXZhdGUgZGVwX2ZyZWVfd3Egd29y a3F1ZXVlLiAgVGhlIHdvcmsNCj4gKyAqIGl0ZW0gZGlzYWJsZXMgYW55IHBlbmRpbmcgVERSIGFu ZCBydW4vcHV0LWpvYiB3b3JrIHN5bmNocm9ub3VzbHksIGRlc3Ryb3lzDQo+ICsgKiBhbnkgd29y a3F1ZXVlcyB0aGF0IHdlcmUgYWxsb2NhdGVkIGJ5IGRybV9kZXBfcXVldWVfaW5pdCgpLCBhbmQg dGhlbiByZWxlYXNlcw0KPiArICogdGhlIHF1ZXVlIG1lbW9yeS4NCj4gKyAqDQo+ICsgKiBSdW5u aW5nIHRlYXJkb3duIGZyb20gZGVwX2ZyZWVfd3EgZW5zdXJlcyB0aGF0IGRlc3Ryb3lfd29ya3F1 ZXVlKCkgaXMgbmV2ZXINCj4gKyAqIGNhbGxlZCBmcm9tIHdpdGhpbiBvbmUgb2YgdGhlIHF1ZXVl J3Mgb3duIHdvcmtlcnMgKGUuZy4gdmlhDQo+ICsgKiBkcm1fZGVwX3F1ZXVlX3B1dCgpKSwgd2hp Y2ggd291bGQgZGVhZGxvY2suDQo+ICsgKg0KPiArICogRHJpdmVycyBjYW4gd2FpdCBmb3IgYWxs IG91dHN0YW5kaW5nIGRlZmVycmVkIHdvcmsgdG8gY29tcGxldGUgYnkgd2FpdGluZw0KPiArICog Zm9yIHRoZSBsYXN0IGRybV9kZXZfcHV0KCkgcmVmZXJlbmNlIG9uIHRoZWlyICZkcm1fZGV2aWNl LCB3aGljaCBpcw0KPiArICogcmVsZWFzZWQgYXMgdGhlIGZpbmFsIHN0ZXAgb2YgZWFjaCBxdWV1 ZSdzIHRlYXJkb3duLg0KPiArICoNCj4gKyAqIERyaXZlcnMgdGhhdCBpbXBsZW1lbnQgJmRybV9k ZXBfcXVldWVfb3BzLmZpbmkgKiptdXN0KiogY2FsbCB0aGlzDQo+ICsgKiBmdW5jdGlvbiBhZnRl ciByZW1vdmluZyBAcSBmcm9tIGFueSBkZXZpY2UgYm9va2tlZXBpbmcgYnV0IGJlZm9yZSBmcmVl aW5nIHRoZQ0KPiArICogbWVtb3J5IHRoYXQgY29udGFpbnMgQHEuICBXaGVuICZkcm1fZGVwX3F1 ZXVlX29wcy5maW5pIGlzIE5VTEwsIGRybV9kZXANCj4gKyAqIGZvbGxvd3MgdGhlIGRlZmF1bHQg dGVhcmRvd24gcGF0aCBhbmQgY2FsbHMgdGhpcyBmdW5jdGlvbiBhdXRvbWF0aWNhbGx5Lg0KPiAr ICoNCj4gKyAqIENvbnRleHQ6IEFueSBjb250ZXh0Lg0KPiArICovDQo+ICt2b2lkIGRybV9kZXBf cXVldWVfZmluaShzdHJ1Y3QgZHJtX2RlcF9xdWV1ZSAqcSkNCj4gK3sNCj4gKyAgICAgICBkcm1f ZGVwX3F1ZXVlX2Fzc2VydF90ZWFyZG93bl9pbnZhcmlhbnRzKHEpOw0KPiArDQo+ICsgICAgICAg SU5JVF9XT1JLKCZxLT5mcmVlX3dvcmssIGRybV9kZXBfcXVldWVfZnJlZV93b3JrKTsNCj4gKyAg ICAgICBxdWV1ZV93b3JrKGRlcF9mcmVlX3dxLCAmcS0+ZnJlZV93b3JrKTsNCj4gK30NCj4gK0VY UE9SVF9TWU1CT0woZHJtX2RlcF9xdWV1ZV9maW5pKTsNCj4gKw0KPiArLyoqDQo+ICsgKiBkcm1f ZGVwX3F1ZXVlX2dldCgpIC0gYWNxdWlyZSBhIHJlZmVyZW5jZSB0byBhIGRlcCBxdWV1ZQ0KPiAr ICogQHE6IGRlcCBxdWV1ZSB0byBhY3F1aXJlIGEgcmVmZXJlbmNlIG9uLCBvciBOVUxMDQo+ICsg Kg0KPiArICogUmV0dXJuOiBAcSB3aXRoIGFuIGFkZGl0aW9uYWwgcmVmZXJlbmNlIGhlbGQsIG9y IE5VTEwgaWYgQHEgaXMgTlVMTC4NCj4gKyAqDQo+ICsgKiBDb250ZXh0OiBBbnkgY29udGV4dC4N Cj4gKyAqLw0KPiArc3RydWN0IGRybV9kZXBfcXVldWUgKmRybV9kZXBfcXVldWVfZ2V0KHN0cnVj dCBkcm1fZGVwX3F1ZXVlICpxKQ0KPiArew0KPiArICAgICAgIGlmIChxKQ0KPiArICAgICAgICAg ICAgICAga3JlZl9nZXQoJnEtPnJlZmNvdW50KTsNCj4gKyAgICAgICByZXR1cm4gcTsNCj4gK30N Cj4gK0VYUE9SVF9TWU1CT0woZHJtX2RlcF9xdWV1ZV9nZXQpOw0KPiArDQo+ICsvKioNCj4gKyAq IF9fZHJtX2RlcF9xdWV1ZV9yZWxlYXNlKCkgLSBrcmVmIHJlbGVhc2UgY2FsbGJhY2sgZm9yIGEg ZGVwIHF1ZXVlDQo+ICsgKiBAa3JlZjoga3JlZiBlbWJlZGRlZCBpbiB0aGUgZGVwIHF1ZXVlDQo+ ICsgKg0KPiArICogQ2FsbHMgJmRybV9kZXBfcXVldWVfb3BzLmZpbmkgaWYgc2V0LCBvdGhlcndp c2UgY2FsbHMNCj4gKyAqIGRybV9kZXBfcXVldWVfZmluaSgpIHRvIGluaXRpYXRlIGRlZmVycmVk IHRlYXJkb3duLg0KPiArICoNCj4gKyAqIENvbnRleHQ6IEFueSBjb250ZXh0Lg0KPiArICovDQo+ ICtzdGF0aWMgdm9pZCBfX2RybV9kZXBfcXVldWVfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqa3JlZikN Cj4gK3sNCj4gKyAgICAgICBzdHJ1Y3QgZHJtX2RlcF9xdWV1ZSAqcSA9DQo+ICsgICAgICAgICAg ICAgICBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IGRybV9kZXBfcXVldWUsIHJlZmNvdW50KTsN Cj4gKw0KPiArICAgICAgIGlmIChxLT5vcHMtPmZpbmkpDQo+ICsgICAgICAgICAgICAgICBxLT5v cHMtPmZpbmkocSk7DQo+ICsgICAgICAgZWxzZQ0KPiArICAgICAgICAgICAgICAgZHJtX2RlcF9x dWV1ZV9maW5pKHEpOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAqIGRybV9kZXBfcXVldWVfcHV0 KCkgLSByZWxlYXNlIGEgcmVmZXJlbmNlIHRvIGEgZGVwIHF1ZXVlDQo+ICsgKiBAcTogZGVwIHF1 ZXVlIHRvIHJlbGVhc2UgYSByZWZlcmVuY2Ugb24sIG9yIE5VTEwNCj4gKyAqDQo+ICsgKiBXaGVu IHRoZSBsYXN0IHJlZmVyZW5jZSBpcyBkcm9wcGVkLCBjYWxscyAmZHJtX2RlcF9xdWV1ZV9vcHMu ZmluaSBpZiBzZXQsDQo+ICsgKiBvdGhlcndpc2UgY2FsbHMgZHJtX2RlcF9xdWV1ZV9maW5pKCku IEZpbmFsIG1lbW9yeSByZWxlYXNlIGlzIGhhbmRsZWQgYnkNCj4gKyAqICZkcm1fZGVwX3F1ZXVl X29wcy5yZWxlYXNlICh3aGljaCBtdXN0IGNhbGwgZHJtX2RlcF9xdWV1ZV9yZWxlYXNlKCkpIGlm IHNldCwNCj4gKyAqIG9yIGRybV9kZXBfcXVldWVfcmVsZWFzZSgpIGZvbGxvd2VkIGJ5IGtmcmVl X3JjdSgpIG90aGVyd2lzZS4NCj4gKyAqIERvZXMgbm90aGluZyBpZiBAcSBpcyBOVUxMLg0KPiAr ICoNCj4gKyAqIENvbnRleHQ6IEFueSBjb250ZXh0Lg0KPiArICovDQo+ICt2b2lkIGRybV9kZXBf cXVldWVfcHV0KHN0cnVjdCBkcm1fZGVwX3F1ZXVlICpxKQ0KPiArew0KPiArICAgICAgIGlmIChx KQ0KPiArICAgICAgICAgICAgICAga3JlZl9wdXQoJnEtPnJlZmNvdW50LCBfX2RybV9kZXBfcXVl dWVfcmVsZWFzZSk7DQo+ICt9DQo+ICtFWFBPUlRfU1lNQk9MKGRybV9kZXBfcXVldWVfcHV0KTsN Cj4gKw0KPiArLyoqDQo+ICsgKiBkcm1fZGVwX3F1ZXVlX3N0b3AoKSAtIHN0b3AgYSBkZXAgcXVl dWUgZnJvbSBwcm9jZXNzaW5nIG5ldyBqb2JzDQo+ICsgKiBAcTogZGVwIHF1ZXVlIHRvIHN0b3AN Cj4gKyAqDQo+ICsgKiBTZXRzICVEUk1fREVQX1FVRVVFX0ZMQUdTX1NUT1BQRUQgb24gQHEgdW5k ZXIgYm90aCBAcS0+c2NoZWQubG9jayAobXV0ZXgpDQo+ICsgKiBhbmQgQHEtPmpvYi5sb2NrIChz cGlubG9ja19pcnEpLCBtYWtpbmcgdGhlIGZsYWcgc2FmZSB0byB0ZXN0IGZyb20gZmluaXNoZWQN Cj4gKyAqIGZlbmNlZCBzaWduYWxpbmcgY29udGV4dC4gVGhlbiBjYW5jZWxzIGFueSBpbi1mbGln aHQgcnVuX2pvYiBhbmQgcHV0X2pvYiB3b3JrDQo+ICsgKiBpdGVtcy4gT25jZSBzdG9wcGVkLCB0 aGUgYnlwYXNzIHBhdGggYW5kIHRoZSBzdWJtaXQgd29ya3F1ZXVlIHdpbGwgbm90DQo+ICsgKiBk aXNwYXRjaCBmdXJ0aGVyIGpvYnMgbm9yIHdpbGwgYW55IGpvYnMgYmUgcmVtb3ZlZCBmcm9tIHRo ZSBwZW5kaW5nIGxpc3QuDQo+ICsgKiBDYWxsIGRybV9kZXBfcXVldWVfc3RhcnQoKSB0byByZXN1 bWUgcHJvY2Vzc2luZy4NCj4gKyAqDQo+ICsgKiBDb250ZXh0OiBQcm9jZXNzIGNvbnRleHQuIFdh aXRzIGZvciBpbi1mbGlnaHQgd29ya2VycyB0byBjb21wbGV0ZS4NCj4gKyAqLw0KPiArdm9pZCBk cm1fZGVwX3F1ZXVlX3N0b3Aoc3RydWN0IGRybV9kZXBfcXVldWUgKnEpDQo+ICt7DQo+ICsgICAg ICAgc2NvcGVkX2d1YXJkKG11dGV4LCAmcS0+c2NoZWQubG9jaykgew0KPiArICAgICAgICAgICAg ICAgc2NvcGVkX2d1YXJkKHNwaW5sb2NrX2lycSwgJnEtPmpvYi5sb2NrKQ0KPiArICAgICAgICAg ICAgICAgICAgICAgICBkcm1fZGVwX3F1ZXVlX2ZsYWdzX3NldChxLCBEUk1fREVQX1FVRVVFX0ZM QUdTX1NUT1BQRUQpOw0KPiArICAgICAgIH0NCj4gKyAgICAgICBjYW5jZWxfd29ya19zeW5jKCZx LT5zY2hlZC5ydW5fam9iKTsNCj4gKyAgICAgICBjYW5jZWxfd29ya19zeW5jKCZxLT5zY2hlZC5w dXRfam9iKTsNCj4gK30NCj4gK0VYUE9SVF9TWU1CT0woZHJtX2RlcF9xdWV1ZV9zdG9wKTsNCj4g Kw0KPiArLyoqDQo+ICsgKiBkcm1fZGVwX3F1ZXVlX3N0YXJ0KCkgLSByZXN1bWUgYSBzdG9wcGVk IGRlcCBxdWV1ZQ0KPiArICogQHE6IGRlcCBxdWV1ZSB0byBzdGFydA0KPiArICoNCj4gKyAqIENs ZWFycyAlRFJNX0RFUF9RVUVVRV9GTEFHU19TVE9QUEVEIG9uIEBxIHVuZGVyIGJvdGggQHEtPnNj aGVkLmxvY2sgKG11dGV4KQ0KPiArICogYW5kIEBxLT5qb2IubG9jayAoc3BpbmxvY2tfaXJxKSwg bWFraW5nIHRoZSBmbGFnIHNhZmUgdG8gdGVzdCBmcm9tIElSUQ0KPiArICogY29udGV4dC4gVGhl biByZS1xdWV1ZXMgdGhlIHJ1bl9qb2IgYW5kIHB1dF9qb2Igd29yayBpdGVtcyBzbyB0aGF0IGFu eSBqb2JzDQo+ICsgKiBwZW5kaW5nIHNpbmNlIHRoZSBxdWV1ZSB3YXMgc3RvcHBlZCBhcmUgcHJv Y2Vzc2VkLiBNdXN0IG9ubHkgYmUgY2FsbGVkIGFmdGVyDQo+ICsgKiBkcm1fZGVwX3F1ZXVlX3N0 b3AoKS4NCj4gKyAqDQo+ICsgKiBDb250ZXh0OiBQcm9jZXNzIGNvbnRleHQuDQo+ICsgKi8NCj4g K3ZvaWQgZHJtX2RlcF9xdWV1ZV9zdGFydChzdHJ1Y3QgZHJtX2RlcF9xdWV1ZSAqcSkNCj4gK3sN Cj4gKyAgICAgICBzY29wZWRfZ3VhcmQobXV0ZXgsICZxLT5zY2hlZC5sb2NrKSB7DQo+ICsgICAg ICAgICAgICAgICBzY29wZWRfZ3VhcmQoc3BpbmxvY2tfaXJxLCAmcS0+am9iLmxvY2spDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgIGRybV9kZXBfcXVldWVfZmxhZ3NfY2xlYXIocSwgRFJNX0RF UF9RVUVVRV9GTEFHU19TVE9QUEVEKTsNCj4gKyAgICAgICB9DQo+ICsgICAgICAgZHJtX2RlcF9x dWV1ZV9ydW5fam9iX3F1ZXVlKHEpOw0KPiArICAgICAgIGRybV9kZXBfcXVldWVfcHV0X2pvYl9x dWV1ZShxKTsNCj4gK30NCj4gK0VYUE9SVF9TWU1CT0woZHJtX2RlcF9xdWV1ZV9zdGFydCk7DQo+ ICsNCj4gKy8qKg0KPiArICogZHJtX2RlcF9xdWV1ZV90cmlnZ2VyX3RpbWVvdXQoKSAtIHRyaWdn ZXIgdGhlIFREUiBpbW1lZGlhdGVseSBmb3INCj4gKyAqICAgYWxsIHBlbmRpbmcgam9icw0KPiAr ICogQHE6IGRlcCBxdWV1ZSB0byB0cmlnZ2VyIHRpbWVvdXQgb24NCj4gKyAqDQo+ICsgKiBTZXRz IEBxLT5qb2IudGltZW91dCB0byAxIGFuZCBhcm1zIHRoZSBURFIgZGVsYXllZCB3b3JrIHdpdGgg YSBvbmUtamlmZnkNCj4gKyAqIGRlbGF5LCBjYXVzaW5nIGl0IHRvIGZpcmUgYWxtb3N0IGltbWVk aWF0ZWx5IHdpdGhvdXQgaG90LXNwaW5uaW5nIGF0IHplcm8NCj4gKyAqIGRlbGF5LiBUaGlzIGlz IHVzZWQgdG8gZm9yY2UtZXhwaXJlIGFueSBwZW5kaW5kIGpvYnMgb24gdGhlIHF1ZXVlLCBmb3IN Cj4gKyAqIGV4YW1wbGUgd2hlbiB0aGUgZGV2aWNlIGlzIGJlaW5nIHRvcm4gZG93biBvciBoYXMg ZW5jb3VudGVyZWQgYW4NCj4gKyAqIHVucmVjb3ZlcmFibGUgZXJyb3IuDQo+ICsgKg0KPiArICog SXQgaXMgc3VnZ2VzdGVkIHRoYXQgd2hlbiB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQsIHRoZSBmaXJz dCB0aW1lZG91dF9qb2IgY2FsbA0KPiArICogY2F1c2VzIHRoZSBkcml2ZXIgdG8ga2ljayB0aGUg cXVldWUgb2ZmIHRoZSBoYXJkd2FyZSBhbmQgc2lnbmFsIGFsbCBwZW5kaW5nDQo+ICsgKiBqb2Ig ZmVuY2VzLiBTdWJzZXF1ZW50IGNhbGxzIGNvbnRpbnVlIHRvIHNpZ25hbCBhbGwgcGVuZGluZyBq b2IgZmVuY2VzLg0KPiArICoNCj4gKyAqIEhhcyBubyBlZmZlY3QgaWYgdGhlIHBlbmRpbmcgbGlz dCBpcyBlbXB0eS4NCj4gKyAqDQo+ICsgKiBDb250ZXh0OiBBbnkgY29udGV4dC4NCj4gKyAqLw0K PiArdm9pZCBkcm1fZGVwX3F1ZXVlX3RyaWdnZXJfdGltZW91dChzdHJ1Y3QgZHJtX2RlcF9xdWV1 ZSAqcSkNCj4gK3sNCj4gKyAgICAgICBndWFyZChzcGlubG9ja19pcnFzYXZlKSgmcS0+am9iLmxv Y2spOw0KPiArICAgICAgIHEtPmpvYi50aW1lb3V0ID0gMTsNCj4gKyAgICAgICBkcm1fcXVldWVf c3RhcnRfdGltZW91dChxKTsNCj4gK30NCj4gK0VYUE9SVF9TWU1CT0woZHJtX2RlcF9xdWV1ZV90 cmlnZ2VyX3RpbWVvdXQpOw0KPiArDQo+ICsvKioNCj4gKyAqIGRybV9kZXBfcXVldWVfY2FuY2Vs X3Rkcl9zeW5jKCkgLSBjYW5jZWwgYW55IHBlbmRpbmcgVERSIGFuZCB3YWl0DQo+ICsgKiAgIGZv ciBpdCB0byBmaW5pc2gNCj4gKyAqIEBxOiBkZXAgcXVldWUgd2hvc2UgVERSIHRvIGNhbmNlbA0K PiArICoNCj4gKyAqIENhbmNlbHMgdGhlIFREUiBkZWxheWVkIHdvcmsgaXRlbSBpZiBpdCBoYXMg bm90IHlldCBzdGFydGVkLCBhbmQgd2FpdHMgZm9yDQo+ICsgKiBpdCB0byBjb21wbGV0ZSBpZiBp dCBpcyBhbHJlYWR5IHJ1bm5pbmcuICBBZnRlciB0aGlzIGNhbGwgcmV0dXJucywgdGhlIFREUg0K PiArICogd29ya2VyIGlzIGd1YXJhbnRlZWQgbm90IHRvIGJlIGV4ZWN1dGluZyBhbmQgd2lsbCBu b3QgZmlyZSBhZ2FpbiB1bnRpbA0KPiArICogZXhwbGljaXRseSByZWFybWVkIChlLmcuIHZpYSBk cm1fZGVwX3F1ZXVlX3Jlc3VtZV90aW1lb3V0KCkgb3IgYnkgYSBuZXcNCj4gKyAqIGpvYiBiZWlu ZyBzdWJtaXR0ZWQpLg0KPiArICoNCj4gKyAqIFVzZWZ1bCBkdXJpbmcgZXJyb3IgcmVjb3Zlcnkg b3IgcXVldWUgdGVhcmRvd24gd2hlbiB0aGUgY2FsbGVyIG5lZWRzIHRvDQo+ICsgKiBrbm93IHRo YXQgbm8gdGltZW91dCBoYW5kbGluZyByYWNlcyB3aXRoIGl0cyBvd24gcmVzZXQgbG9naWMuDQo+ ICsgKg0KPiArICogQ29udGV4dDogUHJvY2VzcyBjb250ZXh0LiBNYXkgc2xlZXAgd2FpdGluZyBm b3IgdGhlIFREUiB3b3JrZXIgdG8gZmluaXNoLg0KPiArICovDQo+ICt2b2lkIGRybV9kZXBfcXVl dWVfY2FuY2VsX3Rkcl9zeW5jKHN0cnVjdCBkcm1fZGVwX3F1ZXVlICpxKQ0KPiArew0KPiArICAg ICAgIGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcS0+c2NoZWQudGRyKTsNCj4gK30NCj4gK0VY UE9SVF9TWU1CT0woZHJtX2RlcF9xdWV1ZV9jYW5jZWxfdGRyX3N5bmMpOw0KPiArDQo+ICsvKioN Cj4gKyAqIGRybV9kZXBfcXVldWVfcmVzdW1lX3RpbWVvdXQoKSAtIHJlc3RhcnQgdGhlIFREUiB0 aW1lciB3aXRoIHRoZQ0KPiArICogICBjb25maWd1cmVkIHRpbWVvdXQNCj4gKyAqIEBxOiBkZXAg cXVldWUgdG8gcmVzdW1lIHRoZSB0aW1lb3V0IGZvcg0KPiArICoNCj4gKyAqIFJlc3RhcnRzIHRo ZSBURFIgZGVsYXllZCB3b3JrIHVzaW5nIEBxLT5qb2IudGltZW91dC4gQ2FsbGVkIGFmdGVyIGRl dmljZQ0KPiArICogcmVjb3ZlcnkgdG8gZ2l2ZSBwZW5kaW5nIGpvYnMgYSBmcmVzaCBmdWxsIHRp bWVvdXQgd2luZG93LiBIYXMgbm8gZWZmZWN0DQo+ICsgKiBpZiB0aGUgcGVuZGluZyBsaXN0IGlz IGVtcHR5Lg0KPiArICoNCj4gKyAqIENvbnRleHQ6IEFueSBjb250ZXh0Lg0KPiArICovDQo+ICt2 b2lkIGRybV9kZXBfcXVldWVfcmVzdW1lX3RpbWVvdXQoc3RydWN0IGRybV9kZXBfcXVldWUgKnEp DQo+ICt7DQo+ICsgICAgICAgZHJtX3F1ZXVlX3N0YXJ0X3RpbWVvdXRfdW5sb2NrZWQocSk7DQo+ ICt9DQo+ICtFWFBPUlRfU1lNQk9MKGRybV9kZXBfcXVldWVfcmVzdW1lX3RpbWVvdXQpOw0KPiAr DQo+ICsvKioNCj4gKyAqIGRybV9kZXBfcXVldWVfaXNfc3RvcHBlZCgpIC0gY2hlY2sgd2hldGhl ciBhIGRlcCBxdWV1ZSBpcyBzdG9wcGVkDQo+ICsgKiBAcTogZGVwIHF1ZXVlIHRvIGNoZWNrDQo+ ICsgKg0KPiArICogUmV0dXJuOiB0cnVlIGlmICVEUk1fREVQX1FVRVVFX0ZMQUdTX1NUT1BQRUQg aXMgc2V0IG9uIEBxLCBmYWxzZSBvdGhlcndpc2UuDQo+ICsgKg0KPiArICogQ29udGV4dDogQW55 IGNvbnRleHQuDQo+ICsgKi8NCj4gK2Jvb2wgZHJtX2RlcF9xdWV1ZV9pc19zdG9wcGVkKHN0cnVj dCBkcm1fZGVwX3F1ZXVlICpxKQ0KPiArew0KPiArICAgICAgIHJldHVybiAhIShxLT5zY2hlZC5m bGFncyAmIERSTV9ERVBfUVVFVUVfRkxBR1NfU1RPUFBFRCk7DQo+ICt9DQo+ICtFWFBPUlRfU1lN Qk9MKGRybV9kZXBfcXVldWVfaXNfc3RvcHBlZCk7DQo+ICsNCj4gKy8qKg0KPiArICogZHJtX2Rl cF9xdWV1ZV9raWxsKCkgLSBraWxsIGEgZGVwIHF1ZXVlIGFuZCBmbHVzaCBhbGwgcGVuZGluZyBq b2JzDQo+ICsgKiBAcTogZGVwIHF1ZXVlIHRvIGtpbGwNCj4gKyAqDQo+ICsgKiBTZXRzICVEUk1f REVQX1FVRVVFX0ZMQUdTX0tJTExFRCBvbiBAcSB1bmRlciBAcS0+c2NoZWQubG9jay4gIElmIGEN Cj4gKyAqIGRlcGVuZGVuY3kgZmVuY2UgaXMgY3VycmVudGx5IGJlaW5nIHdhaXRlZCBvbiwgaXRz IGNhbGxiYWNrIGlzIHJlbW92ZWQgYW5kDQo+ICsgKiB0aGUgcnVuLWpvYiB3b3JrZXIgaXMga2lj a2VkIGltbWVkaWF0ZWx5IHNvIHRoYXQgdGhlIGJsb2NrZWQgam9iIGRyYWlucw0KPiArICogd2l0 aG91dCB3YWl0aW5nLg0KPiArICoNCj4gKyAqIE9uY2Uga2lsbGVkLCBkcm1fZGVwX3F1ZXVlX2pv Yl9kZXBlbmRlbmN5KCkgcmV0dXJucyBOVUxMIGZvciBhbGwgam9icywNCj4gKyAqIGJ5cGFzc2lu ZyBkZXBlbmRlbmN5IHdhaXRzIHNvIHRoYXQgZXZlcnkgcXVldWVkIGpvYiBkcmFpbnMgdGhyb3Vn aA0KPiArICogJmRybV9kZXBfcXVldWVfb3BzLnJ1bl9qb2Igd2l0aG91dCBibG9ja2luZy4NCj4g KyAqDQo+ICsgKiBUaGUgJmRybV9kZXBfcXVldWVfb3BzLnJ1bl9qb2IgY2FsbGJhY2sgaXMgZ3Vh cmFudGVlZCB0byBiZSBjYWxsZWQgZm9yIGV2ZXJ5DQo+ICsgKiBqb2IgdGhhdCB3YXMgcHVzaGVk IGJlZm9yZSBvciBhZnRlciBkcm1fZGVwX3F1ZXVlX2tpbGwoKSwgZXZlbiBkdXJpbmcgcXVldWUN Cj4gKyAqIHRlYXJkb3duLiAgRHJpdmVycyBzaG91bGQgdXNlIHRoaXMgZ3VhcmFudGVlIHRvIHBl cmZvcm0gYW55IG5lY2Vzc2FyeQ0KPiArICogYm9va2tlZXBpbmcgY2xlYW51cCB3aXRob3V0IGV4 ZWN1dGluZyB0aGUgYWN0dWFsIGJhY2tlbmQgb3BlcmF0aW9uIHdoZW4gdGhlDQo+ICsgKiBxdWV1 ZSBpcyBraWxsZWQuDQo+ICsgKg0KPiArICogVW5saWtlIGRybV9kZXBfcXVldWVfc3RvcCgpLCBr aWxsaW5nIGlzIG9uZS13YXk6IHRoZXJlIGlzIG5vIGNvcnJlc3BvbmRpbmcNCj4gKyAqIHN0YXJ0 IGZ1bmN0aW9uLg0KPiArICoNCj4gKyAqICoqRHJpdmVyIHNhZmV0eSByZXF1aXJlbWVudCoqDQo+ ICsgKg0KPiArICogZHJtX2RlcF9xdWV1ZV9raWxsKCkgbXVzdCBvbmx5IGJlIGNhbGxlZCBvbmNl IHRoZSBkcml2ZXIgY2FuIGd1YXJhbnRlZSB0aGF0DQo+ICsgKiBubyBqb2IgaW4gdGhlIHF1ZXVl IHdpbGwgdG91Y2ggbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCBhbnkgb2YgaXRzIGZlbmNlcw0KPiAr ICogKGkuZS4sIHRoZSBxdWV1ZSBoYXMgYmVlbiByZW1vdmVkIGZyb20gdGhlIGRldmljZSBhbmQg d2lsbCBuZXZlciBiZSBwdXQgYmFjaw0KPiArICogb24pLg0KPiArICoNCj4gKyAqIENvbnRleHQ6 IFByb2Nlc3MgY29udGV4dC4NCj4gKyAqLw0KPiArdm9pZCBkcm1fZGVwX3F1ZXVlX2tpbGwoc3Ry dWN0IGRybV9kZXBfcXVldWUgKnEpDQo+ICt7DQo+ICsgICAgICAgc2NvcGVkX2d1YXJkKG11dGV4 LCAmcS0+c2NoZWQubG9jaykgew0KPiArICAgICAgICAgICAgICAgc3RydWN0IGRtYV9mZW5jZSAq ZmVuY2U7DQo+ICsNCj4gKyAgICAgICAgICAgICAgIGRybV9kZXBfcXVldWVfZmxhZ3Nfc2V0KHEs IERSTV9ERVBfUVVFVUVfRkxBR1NfS0lMTEVEKTsNCj4gKw0KPiArICAgICAgICAgICAgICAgLyoN Cj4gKyAgICAgICAgICAgICAgICAqIEhvbGRpbmcgJnEtPnNjaGVkLmxvY2sgZ3VhcmFudGVlcyB0 aGF0IHRoZSBydW4tam9iIHdvcmsgaXRlbQ0KPiArICAgICAgICAgICAgICAgICogY2Fubm90IGRy b3AgaXRzIHJlZmVyZW5jZSB0byBxLT5kZXAuZmVuY2UgY29uY3VycmVudGx5LCBzbw0KPiArICAg ICAgICAgICAgICAgICogcmVhZGluZyBxLT5kZXAuZmVuY2UgaGVyZSBpcyBzYWZlLg0KPiArICAg ICAgICAgICAgICAgICovDQo+ICsgICAgICAgICAgICAgICBmZW5jZSA9IFJFQURfT05DRShxLT5k ZXAuZmVuY2UpOw0KPiArICAgICAgICAgICAgICAgaWYgKGZlbmNlICYmIGRtYV9mZW5jZV9yZW1v dmVfY2FsbGJhY2soZmVuY2UsICZxLT5kZXAuY2IpKQ0KPiArICAgICAgICAgICAgICAgICAgICAg ICBkcm1fZGVwX3F1ZXVlX3JlbW92ZV9kZXBlbmRlbmN5KHEsIGZlbmNlKTsNCj4gKyAgICAgICB9 DQo+ICt9DQo+ICtFWFBPUlRfU1lNQk9MKGRybV9kZXBfcXVldWVfa2lsbCk7DQo+ICsNCj4gKy8q Kg0KPiArICogZHJtX2RlcF9xdWV1ZV9zdWJtaXRfd3EoKSAtIHJldHJpZXZlIHRoZSBzdWJtaXQg d29ya3F1ZXVlIG9mIGEgZGVwIHF1ZXVlDQo+ICsgKiBAcTogZGVwIHF1ZXVlIHdob3NlIHdvcmtx dWV1ZSB0byByZXRyaWV2ZQ0KPiArICoNCj4gKyAqIERyaXZlcnMgbWF5IHVzZSB0aGlzIHRvIHF1 ZXVlIHRoZWlyIG93biB3b3JrIGl0ZW1zIGFsb25nc2lkZSB0aGUgcXVldWUncw0KPiArICogaW50 ZXJuYWwgcnVuLWpvYiBhbmQgcHV0LWpvYiB3b3JrZXJzIOKAlCBmb3IgZXhhbXBsZSB0byBwcm9j ZXNzIGluY29taW5nDQo+ICsgKiBtZXNzYWdlcyBpbiB0aGUgc2FtZSBzZXJpYWxpc2F0aW9uIGRv bWFpbi4NCj4gKyAqDQo+ICsgKiBQcmVmZXIgZHJtX2RlcF9xdWV1ZV93b3JrX2VucXVldWUoKSB3 aGVuIHRoZSBvbmx5IG5lZWQgaXMgdG8gZW5xdWV1ZSBhDQo+ICsgKiB3b3JrIGl0ZW0sIGFzIGl0 IGFkZGl0aW9uYWxseSBjaGVja3MgdGhlIHN0b3BwZWQgc3RhdGUuICBVc2UgdGhpcyBhY2Nlc3Nv cg0KPiArICogd2hlbiB0aGUgd29ya3F1ZXVlIGl0c2VsZiBpcyByZXF1aXJlZCAoZS5nLiBmb3Ig YWxsb2Nfb3JkZXJlZF93b3JrcXVldWUNCj4gKyAqIHJlcGxhY2VtZW50IG9yIGRyYWluX3dvcmtx dWV1ZSBjYWxscykuDQo+ICsgKg0KPiArICogQ29udGV4dDogQW55IGNvbnRleHQuDQo+ICsgKiBS ZXR1cm46IHRoZSAmd29ya3F1ZXVlX3N0cnVjdCB1c2VkIGJ5IEBxIGZvciBqb2Igc3VibWlzc2lv bi4NCj4gKyAqLw0KPiArc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmRybV9kZXBfcXVldWVfc3Vi bWl0X3dxKHN0cnVjdCBkcm1fZGVwX3F1ZXVlICpxKQ0KPiArew0KPiArICAgICAgIHJldHVybiBx LT5zY2hlZC5zdWJtaXRfd3E7DQo+ICt9DQo+ICtFWFBPUlRfU1lNQk9MKGRybV9kZXBfcXVldWVf c3VibWl0X3dxKTsNCj4gKw0KPiArLyoqDQo+ICsgKiBkcm1fZGVwX3F1ZXVlX3RpbWVvdXRfd3Eo KSAtIHJldHJpZXZlIHRoZSB0aW1lb3V0IHdvcmtxdWV1ZSBvZiBhIGRlcCBxdWV1ZQ0KPiArICog QHE6IGRlcCBxdWV1ZSB3aG9zZSB3b3JrcXVldWUgdG8gcmV0cmlldmUNCj4gKyAqDQo+ICsgKiBS ZXR1cm5zIHRoZSB3b3JrcXVldWUgdXNlZCBieSBAcSB0byBydW4gVERSICh0aW1lb3V0IGRldGVj dGlvbiBhbmQgcmVjb3ZlcnkpDQo+ICsgKiB3b3JrLiAgRHJpdmVycyBtYXkgdXNlIHRoaXMgdG8g cXVldWUgdGhlaXIgb3duIHRpbWVvdXQtZG9tYWluIHdvcmsgaXRlbXMsIG9yDQo+ICsgKiB0byBj YWxsIGRyYWluX3dvcmtxdWV1ZSgpIHdoZW4gdGVhcmluZyBkb3duIGFuZCBuZWVkaW5nIHRvIGVu c3VyZSBhbGwgcGVuZGluZw0KPiArICogdGltZW91dCBjYWxsYmFja3MgaGF2ZSBjb21wbGV0ZWQg YmVmb3JlIHByb2NlZWRpbmcuDQo+ICsgKg0KPiArICogQ29udGV4dDogQW55IGNvbnRleHQuDQo+ ICsgKiBSZXR1cm46IHRoZSAmd29ya3F1ZXVlX3N0cnVjdCB1c2VkIGJ5IEBxIGZvciBURFIgd29y ay4NCj4gKyAqLw0KPiArc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmRybV9kZXBfcXVldWVfdGlt ZW91dF93cShzdHJ1Y3QgZHJtX2RlcF9xdWV1ZSAqcSkNCj4gK3sNCj4gKyAgICAgICByZXR1cm4g cS0+c2NoZWQudGltZW91dF93cTsNCj4gK30NCj4gK0VYUE9SVF9TWU1CT0woZHJtX2RlcF9xdWV1 ZV90aW1lb3V0X3dxKTsNCj4gKw0KPiArLyoqDQo+ICsgKiBkcm1fZGVwX3F1ZXVlX3dvcmtfZW5x dWV1ZSgpIC0gcXVldWUgd29yayBvbiB0aGUgZGVwIHF1ZXVlJ3Mgc3VibWl0IHdvcmtxdWV1ZQ0K PiArICogQHE6IGRlcCBxdWV1ZSB0byBlbnF1ZXVlIHdvcmsgb24NCj4gKyAqIEB3b3JrOiB3b3Jr IGl0ZW0gdG8gZW5xdWV1ZQ0KPiArICoNCj4gKyAqIFF1ZXVlcyBAd29yayBvbiBAcS0+c2NoZWQu c3VibWl0X3dxIGlmIHRoZSBxdWV1ZSBpcyBub3Qgc3RvcHBlZC4gIFRoaXMNCj4gKyAqIGFsbG93 cyBkcml2ZXJzIHRvIHNjaGVkdWxlIGN1c3RvbSB3b3JrIGl0ZW1zIHRoYXQgcnVuIHNlcmlhbGlz ZWQgd2l0aCB0aGUNCj4gKyAqIHF1ZXVlJ3Mgb3duIHJ1bi1qb2IgYW5kIHB1dC1qb2Igd29ya2Vy cy4NCj4gKyAqDQo+ICsgKiBSZXR1cm46IHRydWUgaWYgdGhlIHdvcmsgd2FzIHF1ZXVlZCwgZmFs c2UgaWYgdGhlIHF1ZXVlIGlzIHN0b3BwZWQgb3IgdGhlDQo+ICsgKiB3b3JrIGl0ZW0gd2FzIGFs cmVhZHkgcGVuZGluZy4NCj4gKyAqDQo+ICsgKiBDb250ZXh0OiBBbnkgY29udGV4dC4NCj4gKyAq Lw0KPiArYm9vbCBkcm1fZGVwX3F1ZXVlX3dvcmtfZW5xdWV1ZShzdHJ1Y3QgZHJtX2RlcF9xdWV1 ZSAqcSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgd29ya19zdHJ1 Y3QgKndvcmspDQo+ICt7DQo+ICsgICAgICAgaWYgKGRybV9kZXBfcXVldWVfaXNfc3RvcHBlZChx KSkNCj4gKyAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCj4gKw0KPiArICAgICAgIHJldHVy biBxdWV1ZV93b3JrKHEtPnNjaGVkLnN1Ym1pdF93cSwgd29yayk7DQo+ICt9DQo+ICtFWFBPUlRf U1lNQk9MKGRybV9kZXBfcXVldWVfd29ya19lbnF1ZXVlKTsNCj4gKw0KPiArLyoqDQo+ICsgKiBk cm1fZGVwX3F1ZXVlX2Nhbl9qb2JfYnlwYXNzKCkgLSB0ZXN0IHdoZXRoZXIgYSBqb2IgY2FuIHNr aXAgdGhlIFNQU0MgcXVldWUNCj4gKyAqIEBxOiBkZXAgcXVldWUNCj4gKyAqIEBqb2I6IGpvYiB0 byB0ZXN0DQo+ICsgKg0KPiArICogQSBqb2IgbWF5IGJ5cGFzcyB0aGUgc3VibWl0IHdvcmtxdWV1 ZSBhbmQgcnVuIGlubGluZSBvbiB0aGUgY2FsbGluZyB0aHJlYWQNCj4gKyAqIGlmIGFsbCBvZiB0 aGUgZm9sbG93aW5nIGhvbGQ6DQo+ICsgKg0KPiArICogIC0gJURSTV9ERVBfUVVFVUVfRkxBR1Nf QllQQVNTX1NVUFBPUlRFRCBpcyBzZXQgb24gdGhlIHF1ZXVlDQo+ICsgKiAgLSB0aGUgcXVldWUg aXMgbm90IHN0b3BwZWQNCj4gKyAqICAtIHRoZSBTUFNDIHN1Ym1pc3Npb24gcXVldWUgaXMgZW1w dHkgKG5vIG90aGVyIGpvYnMgd2FpdGluZykNCj4gKyAqICAtIHRoZSBxdWV1ZSBoYXMgZW5vdWdo IGNyZWRpdHMgZm9yIEBqb2INCj4gKyAqICAtIEBqb2IgaGFzIG5vIHVucmVzb2x2ZWQgZGVwZW5k ZW5jeSBmZW5jZXMNCj4gKyAqDQo+ICsgKiBNdXN0IGJlIGNhbGxlZCB1bmRlciBAcS0+c2NoZWQu bG9jay4NCj4gKyAqDQo+ICsgKiBDb250ZXh0OiBQcm9jZXNzIGNvbnRleHQuIE11c3QgaG9sZCBA cS0+c2NoZWQubG9jayAoYSBtdXRleCkuDQo+ICsgKiBSZXR1cm46IHRydWUgaWYgdGhlIGpvYiBt YXkgYmUgcnVuIGlubGluZSwgZmFsc2Ugb3RoZXJ3aXNlLg0KPiArICovDQo+ICtib29sIGRybV9k ZXBfcXVldWVfY2FuX2pvYl9ieXBhc3Moc3RydWN0IGRybV9kZXBfcXVldWUgKnEsDQo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJtX2RlcF9qb2IgKmpvYikNCj4g K3sNCj4gKyAgICAgICBsb2NrZGVwX2Fzc2VydF9oZWxkKCZxLT5zY2hlZC5sb2NrKTsNCj4gKw0K PiArICAgICAgIHJldHVybiBxLT5zY2hlZC5mbGFncyAmIERSTV9ERVBfUVVFVUVfRkxBR1NfQllQ QVNTX1NVUFBPUlRFRCAmJg0KPiArICAgICAgICAgICAgICAgIWRybV9kZXBfcXVldWVfaXNfc3Rv cHBlZChxKSAmJg0KPiArICAgICAgICAgICAgICAgIXNwc2NfcXVldWVfY291bnQoJnEtPmpvYi5x dWV1ZSkgJiYNCj4gKyAgICAgICAgICAgICAgIGRybV9kZXBfcXVldWVfaGFzX2NyZWRpdHMocSwg am9iKSAmJg0KPiArICAgICAgICAgICAgICAgeGFfZW1wdHkoJmpvYi0+ZGVwZW5kZW5jaWVzKTsN Cj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBkcm1fZGVwX2pvYl9kb25lKCkgLSBtYXJrIGEgam9i IGFzIGNvbXBsZXRlDQo+ICsgKiBAam9iOiB0aGUgam9iIHRoYXQgZmluaXNoZWQNCj4gKyAqIEBy ZXN1bHQ6IGVycm9yIGNvZGUgdG8gcHJvcGFnYXRlLCBvciAwIGZvciBzdWNjZXNzDQo+ICsgKg0K PiArICogU3VidHJhY3RzIEBqb2ItPmNyZWRpdHMgZnJvbSB0aGUgcXVldWUgY3JlZGl0IGNvdW50 ZXIsIHRoZW4gc2lnbmFscyB0aGUNCj4gKyAqIGpvYidzIGRlcCBmZW5jZSB3aXRoIEByZXN1bHQu DQo+ICsgKg0KPiArICogV2hlbiAlRFJNX0RFUF9RVUVVRV9GTEFHU19KT0JfUFVUX0lSUV9TQUZF IGlzIHNldCAoSVJRLXNhZmUgcGF0aCksIGENCj4gKyAqIHRlbXBvcmFyeSBleHRyYSByZWZlcmVu Y2UgaXMgdGFrZW4gb24gQGpvYiBiZWZvcmUgc2lnbmFsbGluZyB0aGUgZmVuY2UuDQo+ICsgKiBU aGlzIHByZXZlbnRzIGEgY29uY3VycmVudCBwdXQtam9iIHdvcmtlciDigJQgd2hpY2ggbWF5IGJl IHdva2VuIGJ5IHRpbWVvdXRzIG9yDQo+ICsgKiBxdWV1ZSBzdGFydGluZyDigJQgZnJvbSBmcmVl aW5nIHRoZSBqb2Igd2hpbGUgdGhpcyBmdW5jdGlvbiBzdGlsbCBob2xkcyBhDQo+ICsgKiBwb2lu dGVyIHRvIGl0LiAgVGhlIGV4dHJhIHJlZmVyZW5jZSBpcyByZWxlYXNlZCBhdCB0aGUgZW5kIG9m IHRoZSBmdW5jdGlvbi4NCj4gKyAqDQo+ICsgKiBBZnRlciBzaWduYWxsaW5nLCB0aGUgSVJRLXNh ZmUgcGF0aCByZW1vdmVzIHRoZSBqb2IgZnJvbSB0aGUgcGVuZGluZyBsaXN0DQo+ICsgKiB1bmRl ciBAcS0+am9iLmxvY2ssIHByb3ZpZGVkIHRoZSBxdWV1ZSBpcyBub3Qgc3RvcHBlZC4gIFJlbW92 YWwgaXMgc2tpcHBlZA0KPiArICogd2hlbiB0aGUgcXVldWUgaXMgc3RvcHBlZCBzbyB0aGF0IGRy bV9kZXBfcXVldWVfZm9yX2VhY2hfcGVuZGluZ19qb2IoKSBjYW4NCj4gKyAqIGl0ZXJhdGUgdGhl IGxpc3Qgd2l0aG91dCByYWNpbmcgd2l0aCB0aGUgY29tcGxldGlvbiBwYXRoLiAgT24gc3VjY2Vz c2Z1bA0KPiArICogcmVtb3ZhbCwga2lja3MgdGhlIHJ1bi1qb2Igd29ya2VyIHNvIHRoZSBuZXh0 IHF1ZXVlZCBqb2IgY2FuIGJlIGRpc3BhdGNoZWQNCj4gKyAqIGltbWVkaWF0ZWx5LCB0aGVuIGRy b3BzIHRoZSBqb2IgcmVmZXJlbmNlLiAgSWYgdGhlIGpvYiB3YXMgYWxyZWFkeSByZW1vdmVkDQo+ ICsgKiBieSBURFIsIG9yIHJlbW92YWwgd2FzIHNraXBwZWQgYmVjYXVzZSB0aGUgcXVldWUgaXMg c3RvcHBlZCwga2lja3MgdGhlDQo+ICsgKiBwdXQtam9iIHdvcmtlciBpbnN0ZWFkIHRvIGFsbG93 IHRoZSBkZWZlcnJlZCBwdXQgdG8gY29tcGxldGUuDQo+ICsgKg0KPiArICogQ29udGV4dDogQW55 IGNvbnRleHQuDQo+ICsgKi8NCj4gK3N0YXRpYyB2b2lkIGRybV9kZXBfam9iX2RvbmUoc3RydWN0 IGRybV9kZXBfam9iICpqb2IsIGludCByZXN1bHQpDQo+ICt7DQo+ICsgICAgICAgc3RydWN0IGRy bV9kZXBfcXVldWUgKnEgPSBqb2ItPnE7DQo+ICsgICAgICAgYm9vbCBpcnFfc2FmZSA9IGRybV9k ZXBfcXVldWVfaXNfam9iX3B1dF9pcnFfc2FmZShxKSwgcmVtb3ZlZCA9IGZhbHNlOw0KPiArDQo+ ICsgICAgICAgLyoNCj4gKyAgICAgICAgKiBMb2NhbCByZWYgdG8gZW5zdXJlIHRoZSBwdXQgd29y a2Vy4oCUd2hpY2ggbWF5IGJlIHdva2VuIGJ5IGV4dGVybmFsDQo+ICsgICAgICAgICogZm9yY2Vz IChURFIsIGRyaXZlci1zaWRlIHF1ZXVlIHN0YXJ0aW5nKeKAlGRvZXNuJ3QgZnJlZSB0aGUgam9i IGJlaGluZA0KPiArICAgICAgICAqIHRoaXMgZnVuY3Rpb24ncyBiYWNrIGFmdGVyIGRybV9kZXBf ZmVuY2VfZG9uZSgpIHdoaWxlIGl0IGlzIHN0aWxsIG9uDQo+ICsgICAgICAgICogdGhlIHBlbmRp bmcgbGlzdC4NCj4gKyAgICAgICAgKi8NCj4gKyAgICAgICBpZiAoaXJxX3NhZmUpDQo+ICsgICAg ICAgICAgICAgICBkcm1fZGVwX2pvYl9nZXQoam9iKTsNCj4gKw0KPiArICAgICAgIGF0b21pY19z dWIoam9iLT5jcmVkaXRzLCAmcS0+Y3JlZGl0LmNvdW50KTsNCj4gKyAgICAgICBkcm1fZGVwX2Zl bmNlX2RvbmUoam9iLT5kZmVuY2UsIHJlc3VsdCk7DQo+ICsNCj4gKyAgICAgICAvKiBPbmx5IHNh ZmUgdG8gdG91Y2ggam9iIGFmdGVyIGZlbmNlIHNpZ25hbCBpZiB3ZSBoYXZlIGEgbG9jYWwgcmVm LiAqLw0KPiArDQo+ICsgICAgICAgaWYgKGlycV9zYWZlKSB7DQo+ICsgICAgICAgICAgICAgICBz Y29wZWRfZ3VhcmQoc3BpbmxvY2tfaXJxc2F2ZSwgJnEtPmpvYi5sb2NrKSB7DQo+ICsgICAgICAg ICAgICAgICAgICAgICAgIHJlbW92ZWQgPSAhbGlzdF9lbXB0eSgmam9iLT5wZW5kaW5nX2xpbmsp ICYmDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWRybV9kZXBfcXVldWVfaXNf c3RvcHBlZChxKTsNCj4gKw0KPiArICAgICAgICAgICAgICAgICAgICAgICAvKiBHdWFyZCBhZ2Fp bnN0IFREUiBvcGVyYXRpbmcgb24gam9iICovDQo+ICsgICAgICAgICAgICAgICAgICAgICAgIGlm IChyZW1vdmVkKQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRybV9kZXBfcXVl dWVfcmVtb3ZlX2pvYihxLCBqb2IpOw0KPiArICAgICAgICAgICAgICAgfQ0KPiArICAgICAgIH0N Cj4gKw0KPiArICAgICAgIGlmIChyZW1vdmVkKSB7DQo+ICsgICAgICAgICAgICAgICBkcm1fZGVw X3F1ZXVlX3J1bl9qb2JfcXVldWUocSk7DQo+ICsgICAgICAgICAgICAgICBkcm1fZGVwX2pvYl9w dXQoam9iKTsNCj4gKyAgICAgICB9IGVsc2Ugew0KPiArICAgICAgICAgICAgICAgZHJtX2RlcF9x dWV1ZV9wdXRfam9iX3F1ZXVlKHEpOw0KPiArICAgICAgIH0NCj4gKw0KPiArICAgICAgIGlmIChp cnFfc2FmZSkNCj4gKyAgICAgICAgICAgICAgIGRybV9kZXBfam9iX3B1dChqb2IpOw0KPiArfQ0K PiArDQo+ICsvKioNCj4gKyAqIGRybV9kZXBfam9iX2RvbmVfY2IoKSAtIGRtYV9mZW5jZSBjYWxs YmFjayB0byBjb21wbGV0ZSBhIGpvYg0KPiArICogQGY6IHRoZSBoYXJkd2FyZSBmZW5jZSB0aGF0 IHNpZ25hbGxlZA0KPiArICogQGNiOiBmZW5jZSBjYWxsYmFjayBlbWJlZGRlZCBpbiB0aGUgZGVw IGpvYg0KPiArICoNCj4gKyAqIEV4dHJhY3RzIHRoZSBqb2IgZnJvbSBAY2IgYW5kIGNhbGxzIGRy bV9kZXBfam9iX2RvbmUoKSB3aXRoDQo+ICsgKiBAZi0+ZXJyb3IgYXMgdGhlIHJlc3VsdC4NCj4g KyAqDQo+ICsgKiBDb250ZXh0OiBBbnkgY29udGV4dCwgYnV0IHdpdGggSVJRIGRpc2FibGVkLiBN YXkgbm90IHNsZWVwLg0KPiArICovDQo+ICtzdGF0aWMgdm9pZCBkcm1fZGVwX2pvYl9kb25lX2Ni KHN0cnVjdCBkbWFfZmVuY2UgKmYsIHN0cnVjdCBkbWFfZmVuY2VfY2IgKmNiKQ0KPiArew0KPiAr ICAgICAgIHN0cnVjdCBkcm1fZGVwX2pvYiAqam9iID0gY29udGFpbmVyX29mKGNiLCBzdHJ1Y3Qg ZHJtX2RlcF9qb2IsIGNiKTsNCj4gKw0KPiArICAgICAgIGRybV9kZXBfam9iX2RvbmUoam9iLCBm LT5lcnJvcik7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICogZHJtX2RlcF9xdWV1ZV9ydW5fam9i KCkgLSBzdWJtaXQgYSBqb2IgdG8gaGFyZHdhcmUgYW5kIHNldCB1cA0KPiArICogICBjb21wbGV0 aW9uIHRyYWNraW5nDQo+ICsgKiBAcTogZGVwIHF1ZXVlDQo+ICsgKiBAam9iOiBqb2IgdG8gcnVu DQo+ICsgKg0KPiArICogQWNjb3VudHMgQGpvYi0+Y3JlZGl0cyBhZ2FpbnN0IHRoZSBxdWV1ZSwg YXBwZW5kcyB0aGUgam9iIHRvIHRoZSBwZW5kaW5nDQo+ICsgKiBsaXN0LCB0aGVuIGNhbGxzIEBx LT5vcHMtPnJ1bl9qb2IoKS4gVGhlIFREUiB0aW1lciBpcyBzdGFydGVkIG9ubHkgd2hlbg0KPiAr ICogQGpvYiBpcyB0aGUgZmlyc3QgZW50cnkgb24gdGhlIHBlbmRpbmcgbGlzdDsgc3Vic2VxdWVu dCBqb2JzIGFkZGVkIHdoaWxlDQo+ICsgKiBhIFREUiBpcyBhbHJlYWR5IGluIGZsaWdodCBkbyBu b3QgcmVzZXQgdGhlIHRpbWVyICh3aGljaCB3b3VsZCBvdGhlcndpc2UNCj4gKyAqIGV4dGVuZCB0 aGUgZGVhZGxpbmUgZm9yIHRoZSBhbHJlYWR5LXJ1bm5pbmcgaGVhZCBqb2IpLiBTdG9yZXMgdGhl IHJldHVybmVkDQo+ICsgKiBoYXJkd2FyZSBmZW5jZSBhcyB0aGUgcGFyZW50IG9mIHRoZSBqb2In cyBkZXAgZmVuY2UsIHRoZW4gaW5zdGFsbHMNCj4gKyAqIGRybV9kZXBfam9iX2RvbmVfY2IoKSBv biBpdC4gSWYgdGhlIGhhcmR3YXJlIGZlbmNlIGlzIGFscmVhZHkgc2lnbmFsbGVkDQo+ICsgKiAo JS1FTk9FTlQgZnJvbSBkbWFfZmVuY2VfYWRkX2NhbGxiYWNrKCkpIG9yIHJ1bl9qb2IoKSByZXR1 cm5zIE5VTEwvZXJyb3IsDQo+ICsgKiB0aGUgam9iIGlzIGNvbXBsZXRlZCBpbW1lZGlhdGVseS4g TXVzdCBiZSBjYWxsZWQgdW5kZXIgQHEtPnNjaGVkLmxvY2suDQo+ICsgKg0KPiArICogQ29udGV4 dDogUHJvY2VzcyBjb250ZXh0LiBNdXN0IGhvbGQgQHEtPnNjaGVkLmxvY2sgKGEgbXV0ZXgpLiBE TUEgZmVuY2UNCj4gKyAqIHNpZ25hbGluZyBwYXRoLg0KPiArICovDQo+ICt2b2lkIGRybV9kZXBf cXVldWVfcnVuX2pvYihzdHJ1Y3QgZHJtX2RlcF9xdWV1ZSAqcSwgc3RydWN0IGRybV9kZXBfam9i ICpqb2IpDQo+ICt7DQo+ICsgICAgICAgc3RydWN0IGRtYV9mZW5jZSAqZmVuY2U7DQo+ICsgICAg ICAgaW50IHI7DQo+ICsNCj4gKyAgICAgICBsb2NrZGVwX2Fzc2VydF9oZWxkKCZxLT5zY2hlZC5s b2NrKTsNCj4gKw0KPiArICAgICAgIGRybV9kZXBfam9iX2dldChqb2IpOw0KPiArICAgICAgIGF0 b21pY19hZGQoam9iLT5jcmVkaXRzLCAmcS0+Y3JlZGl0LmNvdW50KTsNCj4gKw0KPiArICAgICAg IHNjb3BlZF9ndWFyZChzcGlubG9ja19pcnEsICZxLT5qb2IubG9jaykgew0KPiArICAgICAgICAg ICAgICAgYm9vbCBmaXJzdCA9IGxpc3RfZW1wdHkoJnEtPmpvYi5wZW5kaW5nKTsNCj4gKw0KPiAr ICAgICAgICAgICAgICAgbGlzdF9hZGRfdGFpbCgmam9iLT5wZW5kaW5nX2xpbmssICZxLT5qb2Iu cGVuZGluZyk7DQo+ICsgICAgICAgICAgICAgICBpZiAoZmlyc3QpDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgIGRybV9xdWV1ZV9zdGFydF90aW1lb3V0KHEpOw0KPiArICAgICAgIH0NCj4gKw0K PiArICAgICAgIGZlbmNlID0gcS0+b3BzLT5ydW5fam9iKGpvYik7DQo+ICsgICAgICAgZHJtX2Rl cF9mZW5jZV9zZXRfcGFyZW50KGpvYi0+ZGZlbmNlLCBmZW5jZSk7DQo+ICsNCj4gKyAgICAgICBp ZiAoIUlTX0VSUl9PUl9OVUxMKGZlbmNlKSkgew0KPiArICAgICAgICAgICAgICAgciA9IGRtYV9m ZW5jZV9hZGRfY2FsbGJhY2soZmVuY2UsICZqb2ItPmNiLA0KPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZHJtX2RlcF9qb2JfZG9uZV9jYik7DQo+ICsgICAgICAg ICAgICAgICBpZiAociA9PSAtRU5PRU5UKQ0KPiArICAgICAgICAgICAgICAgICAgICAgICBkcm1f ZGVwX2pvYl9kb25lKGpvYiwgZmVuY2UtPmVycm9yKTsNCj4gKyAgICAgICAgICAgICAgIGVsc2Ug aWYgKHIpDQo+ICsgICAgICAgICAgICAgICAgICAgICAgIGRybV9lcnIocS0+ZHJtLCAiZmVuY2Ug YWRkIGNhbGxiYWNrIGZhaWxlZCAoJWQpXG4iLCByKTsNCj4gKyAgICAgICAgICAgICAgIGRtYV9m ZW5jZV9wdXQoZmVuY2UpOw0KPiArICAgICAgIH0gZWxzZSB7DQo+ICsgICAgICAgICAgICAgICBk cm1fZGVwX2pvYl9kb25lKGpvYiwgSVNfRVJSKGZlbmNlKSA/IFBUUl9FUlIoZmVuY2UpIDogMCk7 DQo+ICsgICAgICAgfQ0KPiArDQo+ICsgICAgICAgLyoNCj4gKyAgICAgICAgKiBEcm9wIGFsbCBp bnB1dCBkZXBlbmRlbmN5IGZlbmNlcyBub3csIGluIHByb2Nlc3MgY29udGV4dCwgYmVmb3JlIHRo ZQ0KPiArICAgICAgICAqIGZpbmFsIGpvYiBwdXQuIE9uY2UgdGhlIGpvYiBpcyBvbiB0aGUgcGVu ZGluZyBsaXN0IGl0cyBsYXN0IHJlZmVyZW5jZQ0KPiArICAgICAgICAqIG1heSBiZSBkcm9wcGVk IGZyb20gYSBkbWFfZmVuY2UgY2FsbGJhY2sgKElSUSBjb250ZXh0KSwgd2hlcmUgY2FsbGluZw0K PiArICAgICAgICAqIHhhX2Rlc3Ryb3koKSB3b3VsZCBiZSB1bnNhZmUuDQo+ICsgICAgICAgICov DQo+ICsgICAgICAgZHJtX2RlcF9qb2JfZHJvcF9kZXBlbmRlbmNpZXMoam9iKTsNCj4gKyAgICAg ICBkcm1fZGVwX2pvYl9wdXQoam9iKTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBkcm1fZGVw X3F1ZXVlX3B1c2hfam9iKCkgLSBlbnF1ZXVlIGEgam9iIG9uIHRoZSBTUFNDIHN1Ym1pc3Npb24g cXVldWUNCj4gKyAqIEBxOiBkZXAgcXVldWUNCj4gKyAqIEBqb2I6IGpvYiB0byBwdXNoDQo+ICsg Kg0KPiArICogUHVzaGVzIEBqb2Igb250byB0aGUgU1BTQyBxdWV1ZS4gSWYgdGhlIHF1ZXVlIHdh cyBwcmV2aW91c2x5IGVtcHR5DQo+ICsgKiAoaS5lLiB0aGlzIGlzIHRoZSBmaXJzdCBwZW5kaW5n IGpvYiksIGtpY2tzIHRoZSBydW5fam9iIHdvcmtlciBzbyBpdA0KPiArICogcHJvY2Vzc2VzIHRo ZSBqb2IgcHJvbXB0bHkgd2l0aG91dCB3YWl0aW5nIGZvciB0aGUgbmV4dCB3YWtldXAuDQo+ICsg KiBNYXkgYmUgY2FsbGVkIHdpdGggb3Igd2l0aG91dCBAcS0+c2NoZWQubG9jayBoZWxkLg0KPiAr ICoNCj4gKyAqIENvbnRleHQ6IEFueSBjb250ZXh0LiBETUEgZmVuY2Ugc2lnbmFsaW5nIHBhdGgu DQo+ICsgKi8NCj4gK3ZvaWQgZHJtX2RlcF9xdWV1ZV9wdXNoX2pvYihzdHJ1Y3QgZHJtX2RlcF9x dWV1ZSAqcSwgc3RydWN0IGRybV9kZXBfam9iICpqb2IpDQo+ICt7DQo+ICsgICAgICAgLyoNCj4g KyAgICAgICAgKiBzcHNjX3F1ZXVlX3B1c2goKSByZXR1cm5zIHRydWUgaWYgdGhlIHF1ZXVlIHdh cyBwcmV2aW91c2x5IGVtcHR5LA0KPiArICAgICAgICAqIGkuZS4gdGhpcyBpcyB0aGUgZmlyc3Qg cGVuZGluZyBqb2IuIEtpY2sgdGhlIHJ1bl9qb2Igd29ya2VyIHNvIGl0DQo+ICsgICAgICAgICog cGlja3MgaXQgdXAgd2l0aG91dCB3YWl0aW5nIGZvciB0aGUgbmV4dCB3YWtldXAuDQo+ICsgICAg ICAgICovDQo+ICsgICAgICAgaWYgKHNwc2NfcXVldWVfcHVzaCgmcS0+am9iLnF1ZXVlLCAmam9i LT5xdWV1ZV9ub2RlKSkNCj4gKyAgICAgICAgICAgICAgIGRybV9kZXBfcXVldWVfcnVuX2pvYl9x dWV1ZShxKTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBkcm1fZGVwX2luaXQoKSAtIG1vZHVs ZSBpbml0aWFsaXNlcg0KPiArICoNCj4gKyAqIEFsbG9jYXRlcyB0aGUgbW9kdWxlLXByaXZhdGUg ZGVwX2ZyZWVfd3EgdW5ib3VuZCB3b3JrcXVldWUgdXNlZCBmb3INCj4gKyAqIGRlZmVycmVkIHF1 ZXVlIHRlYXJkb3duLg0KPiArICoNCj4gKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAlLUVOT01F TSBpZiB3b3JrcXVldWUgYWxsb2NhdGlvbiBmYWlscy4NCj4gKyAqLw0KPiArc3RhdGljIGludCBf X2luaXQgZHJtX2RlcF9pbml0KHZvaWQpDQo+ICt7DQo+ICsgICAgICAgZGVwX2ZyZWVfd3EgPSBh bGxvY193b3JrcXVldWUoImRybV9kZXBfZnJlZSIsIFdRX1VOQk9VTkQsIDApOw0KPiArICAgICAg IGlmICghZGVwX2ZyZWVfd3EpDQo+ICsgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsNCj4g Kw0KPiArICAgICAgIHJldHVybiAwOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAqIGRybV9kZXBf ZXhpdCgpIC0gbW9kdWxlIGV4aXQNCj4gKyAqDQo+ICsgKiBEZXN0cm95cyB0aGUgbW9kdWxlLXBy aXZhdGUgZGVwX2ZyZWVfd3Egd29ya3F1ZXVlLg0KPiArICovDQo+ICtzdGF0aWMgdm9pZCBfX2V4 aXQgZHJtX2RlcF9leGl0KHZvaWQpDQo+ICt7DQo+ICsgICAgICAgZGVzdHJveV93b3JrcXVldWUo ZGVwX2ZyZWVfd3EpOw0KPiArICAgICAgIGRlcF9mcmVlX3dxID0gTlVMTDsNCj4gK30NCj4gKw0K PiArbW9kdWxlX2luaXQoZHJtX2RlcF9pbml0KTsNCj4gK21vZHVsZV9leGl0KGRybV9kZXBfZXhp dCk7DQo+ICsNCj4gK01PRFVMRV9ERVNDUklQVElPTigiRFJNIGRlcGVuZGVuY3kgcXVldWUiKTsN Cj4gK01PRFVMRV9MSUNFTlNFKCJEdWFsIE1JVC9HUEwiKTsNCj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9kZXAvZHJtX2RlcF9xdWV1ZS5oIGIvZHJpdmVycy9ncHUvZHJtL2RlcC9kcm1f ZGVwX3F1ZXVlLmgNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMDAw Li5lNWMyMTdhM2ZhYjUNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9kcml2ZXJzL2dwdS9kcm0v ZGVwL2RybV9kZXBfcXVldWUuaA0KPiBAQCAtMCwwICsxLDMxIEBADQo+ICsvKiBTUERYLUxpY2Vu c2UtSWRlbnRpZmllcjogTUlUICovDQo+ICsvKg0KPiArICogQ29weXJpZ2h0IMKpIDIwMjYgSW50 ZWwgQ29ycG9yYXRpb24NCj4gKyAqLw0KPiArDQo+ICsjaWZuZGVmIF9EUk1fREVQX1FVRVVFX0hf DQo+ICsjZGVmaW5lIF9EUk1fREVQX1FVRVVFX0hfDQo+ICsNCj4gKyNpbmNsdWRlIDxsaW51eC90 eXBlcy5oPg0KPiArDQo+ICtzdHJ1Y3QgZHJtX2RlcF9qb2I7DQo+ICtzdHJ1Y3QgZHJtX2RlcF9x dWV1ZTsNCj4gKw0KPiArYm9vbCBkcm1fZGVwX3F1ZXVlX2Nhbl9qb2JfYnlwYXNzKHN0cnVjdCBk cm1fZGVwX3F1ZXVlICpxLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ry dWN0IGRybV9kZXBfam9iICpqb2IpOw0KPiArdm9pZCBkcm1fZGVwX3F1ZXVlX3J1bl9qb2Ioc3Ry dWN0IGRybV9kZXBfcXVldWUgKnEsIHN0cnVjdCBkcm1fZGVwX2pvYiAqam9iKTsNCj4gK3ZvaWQg ZHJtX2RlcF9xdWV1ZV9wdXNoX2pvYihzdHJ1Y3QgZHJtX2RlcF9xdWV1ZSAqcSwgc3RydWN0IGRy bV9kZXBfam9iICpqb2IpOw0KPiArDQo+ICsjaWYgSVNfRU5BQkxFRChDT05GSUdfUFJPVkVfTE9D S0lORykNCj4gK3ZvaWQgZHJtX2RlcF9xdWV1ZV9wdXNoX2pvYl9iZWdpbihzdHJ1Y3QgZHJtX2Rl cF9xdWV1ZSAqcSk7DQo+ICt2b2lkIGRybV9kZXBfcXVldWVfcHVzaF9qb2JfZW5kKHN0cnVjdCBk cm1fZGVwX3F1ZXVlICpxKTsNCj4gKyNlbHNlDQo+ICtzdGF0aWMgaW5saW5lIHZvaWQgZHJtX2Rl cF9xdWV1ZV9wdXNoX2pvYl9iZWdpbihzdHJ1Y3QgZHJtX2RlcF9xdWV1ZSAqcSkNCj4gK3sNCj4g K30NCj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBkcm1fZGVwX3F1ZXVlX3B1c2hfam9iX2VuZChzdHJ1 Y3QgZHJtX2RlcF9xdWV1ZSAqcSkNCj4gK3sNCj4gK30NCj4gKyNlbmRpZg0KPiArDQo+ICsjZW5k aWYgLyogX0RSTV9ERVBfUVVFVUVfSF8gKi8NCj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2Ry bV9kZXAuaCBiL2luY2x1ZGUvZHJtL2RybV9kZXAuaA0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0K PiBpbmRleCAwMDAwMDAwMDAwMDAuLjYxNTkyNjU4NDUwNg0KPiAtLS0gL2Rldi9udWxsDQo+ICsr KyBiL2luY2x1ZGUvZHJtL2RybV9kZXAuaA0KPiBAQCAtMCwwICsxLDU5NyBAQA0KPiArLyogU1BE WC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVCAqLw0KPiArLyoNCj4gKyAqIENvcHlyaWdodCAyMDE1 IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4NCj4gKyAqDQo+ICsgKiBQZXJtaXNzaW9uIGlz IGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcg YQ0KPiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRp b24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwNCj4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJl IHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24NCj4gKyAq IHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmli dXRlLCBzdWJsaWNlbnNlLA0KPiArICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2Fy ZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlDQo+ICsgKiBTb2Z0d2FyZSBpcyBm dXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOg0K PiArICoNCj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Np b24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluDQo+ICsgKiBhbGwgY29waWVzIG9yIHN1YnN0 YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4NCj4gKyAqDQo+ICsgKiBUSEUgU09GVFdB UkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQ UkVTUyBPUg0KPiArICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUg V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksDQo+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwNCj4g KyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFO WSBDTEFJTSwgREFNQUdFUyBPUg0KPiArICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFO IEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsDQo+ICsgKiBBUklTSU5HIEZS T00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0Ug T1INCj4gKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4NCj4gKyAqDQo+ICsgKiBD b3B5cmlnaHQgwqkgMjAyNiBJbnRlbCBDb3Jwb3JhdGlvbg0KPiArICovDQo+ICsNCj4gKyNpZm5k ZWYgX0RSTV9ERVBfSF8NCj4gKyNkZWZpbmUgX0RSTV9ERVBfSF8NCj4gKw0KPiArI2luY2x1ZGUg PGRybS9zcHNjX3F1ZXVlLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvZG1hLWZlbmNlLmg+DQo+ICsj aW5jbHVkZSA8bGludXgveGFycmF5Lmg+DQo+ICsjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+ DQo+ICsNCj4gK2VudW0gZG1hX3Jlc3ZfdXNhZ2U7DQo+ICtzdHJ1Y3QgZG1hX3Jlc3Y7DQo+ICtz dHJ1Y3QgZHJtX2RlcF9mZW5jZTsNCj4gK3N0cnVjdCBkcm1fZGVwX2pvYjsNCj4gK3N0cnVjdCBk cm1fZGVwX3F1ZXVlOw0KPiArc3RydWN0IGRybV9maWxlOw0KPiArc3RydWN0IGRybV9nZW1fb2Jq ZWN0Ow0KPiArDQo+ICsvKioNCj4gKyAqIGVudW0gZHJtX2RlcF90aW1lZG91dF9zdGF0IC0gcmV0 dXJuIHZhbHVlIG9mICZkcm1fZGVwX3F1ZXVlX29wcy50aW1lZG91dF9qb2INCj4gKyAqIEBEUk1f REVQX1RJTUVET1VUX1NUQVRfSk9CX1NJR05BTEVEOiBkcml2ZXIgc2lnbmFsZWQgdGhlIGpvYidz IGZpbmlzaGVkDQo+ICsgKiAgIGZlbmNlIGR1cmluZyByZXNldDsgZHJtX2RlcCBtYXkgc2FmZWx5 IGRyb3AgaXRzIHJlZmVyZW5jZSB0byB0aGUgam9iLg0KPiArICogQERSTV9ERVBfVElNRURPVVRf U1RBVF9SRVFVRVVFX0pPQjogdGltZW91dCB3YXMgYSBmYWxzZSBhbGFybTsgcmVpbnNlcnQgdGhl DQo+ICsgKiAgIGpvYiBhdCB0aGUgaGVhZCBvZiB0aGUgcGVuZGluZyBsaXN0IHNvIGl0IGNhbiBj b21wbGV0ZSBub3JtYWxseS4NCj4gKyAqLw0KPiArZW51bSBkcm1fZGVwX3RpbWVkb3V0X3N0YXQg ew0KPiArICAgICAgIERSTV9ERVBfVElNRURPVVRfU1RBVF9KT0JfU0lHTkFMRUQsDQo+ICsgICAg ICAgRFJNX0RFUF9USU1FRE9VVF9TVEFUX1JFUVVFVUVfSk9CLA0KPiArfTsNCj4gKw0KPiArLyoq DQo+ICsgKiBzdHJ1Y3QgZHJtX2RlcF9xdWV1ZV9vcHMgLSBkcml2ZXIgY2FsbGJhY2tzIGZvciBh IGRlcCBxdWV1ZQ0KPiArICovDQo+ICtzdHJ1Y3QgZHJtX2RlcF9xdWV1ZV9vcHMgew0KPiArICAg ICAgIC8qKg0KPiArICAgICAgICAqIEBydW5fam9iOiBzdWJtaXQgdGhlIGpvYiB0byBoYXJkd2Fy ZS4gUmV0dXJucyB0aGUgaGFyZHdhcmUgY29tcGxldGlvbg0KPiArICAgICAgICAqIGZlbmNlICh3 aXRoIGEgcmVmZXJlbmNlIGhlbGQgZm9yIHRoZSBzY2hlZHVsZXIpLCBvciBOVUxML0VSUl9QVFIg b24NCj4gKyAgICAgICAgKiBzeW5jaHJvbm91cyBjb21wbGV0aW9uIG9yIGVycm9yLg0KPiArICAg ICAgICAqLw0KPiArICAgICAgIHN0cnVjdCBkbWFfZmVuY2UgKigqcnVuX2pvYikoc3RydWN0IGRy bV9kZXBfam9iICpqb2IpOw0KPiArDQo+ICsgICAgICAgLyoqDQo+ICsgICAgICAgICogQHRpbWVk b3V0X2pvYjogY2FsbGVkIHdoZW4gdGhlIFREUiBmaXJlcyBmb3IgdGhlIGhlYWQgam9iLiBNdXN0 IHN0b3ANCj4gKyAgICAgICAgKiB0aGUgaGFyZHdhcmUsIHRoZW4gcmV0dXJuICVEUk1fREVQX1RJ TUVET1VUX1NUQVRfSk9CX1NJR05BTEVEIGlmIHRoZQ0KPiArICAgICAgICAqIGpvYidzIGZlbmNl IHdhcyBzaWduYWxsZWQgZHVyaW5nIHJlc2V0LCBvcg0KPiArICAgICAgICAqICVEUk1fREVQX1RJ TUVET1VUX1NUQVRfUkVRVUVVRV9KT0IgaWYgdGhlIHRpbWVvdXQgd2FzIHNwdXJpb3VzIG9yDQo+ ICsgICAgICAgICogc2lnbmFsbGluZyB3YXMgb3RoZXJ3aXNlIGRlbGF5ZWQsIGFuZCB0aGUgam9i IHNob3VsZCBiZSByZS1pbnNlcnRlZA0KPiArICAgICAgICAqIGF0IHRoZSBoZWFkIG9mIHRoZSBw ZW5kaW5nIGxpc3QuIEFueSBvdGhlciB2YWx1ZSB0cmlnZ2VycyBhIFdBUk4uDQo+ICsgICAgICAg ICovDQo+ICsgICAgICAgZW51bSBkcm1fZGVwX3RpbWVkb3V0X3N0YXQgKCp0aW1lZG91dF9qb2Ip KHN0cnVjdCBkcm1fZGVwX2pvYiAqam9iKTsNCj4gKw0KPiArICAgICAgIC8qKg0KPiArICAgICAg ICAqIEByZWxlYXNlOiBjYWxsZWQgd2hlbiB0aGUgbGFzdCBrcmVmIG9uIHRoZSBxdWV1ZSBpcyBk cm9wcGVkIGFuZA0KPiArICAgICAgICAqIGRybV9kZXBfcXVldWVfZmluaSgpIGhhcyBjb21wbGV0 ZWQuICBUaGUgZHJpdmVyIGlzIHJlc3BvbnNpYmxlIGZvcg0KPiArICAgICAgICAqIHJlbW92aW5n IEBxIGZyb20gYW55IGludGVybmFsIGJvb2trZWVwaW5nLCBjYWxsaW5nDQo+ICsgICAgICAgICog ZHJtX2RlcF9xdWV1ZV9yZWxlYXNlKCksIGFuZCB0aGVuIGZyZWVpbmcgdGhlIG1lbW9yeSBjb250 YWluaW5nIEBxDQo+ICsgICAgICAgICogKGUuZy4gdmlhIGtmcmVlX3JjdSgpIHVzaW5nIEBxLT5y Y3UpLiAgSWYgTlVMTCwgZHJtX2RlcCBjYWxscw0KPiArICAgICAgICAqIGRybV9kZXBfcXVldWVf cmVsZWFzZSgpIGFuZCBmcmVlcyBAcSBhdXRvbWF0aWNhbGx5IHZpYSBrZnJlZV9yY3UoKS4NCj4g KyAgICAgICAgKiBVc2UgdGhpcyB3aGVuIHRoZSBxdWV1ZSBpcyBlbWJlZGRlZCBpbiBhIGxhcmdl ciBzdHJ1Y3R1cmUuDQo+ICsgICAgICAgICovDQo+ICsgICAgICAgdm9pZCAoKnJlbGVhc2UpKHN0 cnVjdCBkcm1fZGVwX3F1ZXVlICpxKTsNCj4gKw0KPiArICAgICAgIC8qKg0KPiArICAgICAgICAq IEBmaW5pOiBpZiBzZXQsIGNhbGxlZCBpbnN0ZWFkIG9mIGRybV9kZXBfcXVldWVfZmluaSgpIHdo ZW4gdGhlIGxhc3QNCj4gKyAgICAgICAgKiBrcmVmIGlzIGRyb3BwZWQuIFRoZSBkcml2ZXIgaXMg cmVzcG9uc2libGUgZm9yIGNhbGxpbmcNCj4gKyAgICAgICAgKiBkcm1fZGVwX3F1ZXVlX2Zpbmko KSBpdHNlbGYgYWZ0ZXIgaXQgaXMgZG9uZSB3aXRoIHRoZSBxdWV1ZS4gVXNlIHRoaXMNCj4gKyAg ICAgICAgKiB3aGVuIGFkZGl0aW9uYWwgdGVhcmRvd24gbG9naWMgbXVzdCBydW4gYmVmb3JlIGZp bmkgKGUuZy4sIGNsZWFudXANCj4gKyAgICAgICAgKiBmaXJtd2FyZSByZXNvdXJjZXMgYXNzb2Np YXRlZCB3aXRoIHRoZSBxdWV1ZSkuDQo+ICsgICAgICAgICovDQo+ICsgICAgICAgdm9pZCAoKmZp bmkpKHN0cnVjdCBkcm1fZGVwX3F1ZXVlICpxKTsNCj4gK307DQo+ICsNCj4gKy8qKg0KPiArICog ZW51bSBkcm1fZGVwX3F1ZXVlX2ZsYWdzIC0gZmxhZ3MgZm9yICZkcm1fZGVwX3F1ZXVlIGFuZA0K PiArICogICAmZHJtX2RlcF9xdWV1ZV9pbml0X2FyZ3MNCj4gKyAqDQo+ICsgKiBGbGFncyBhcmUg ZGl2aWRlZCBpbnRvIHRocmVlIGNhdGVnb3JpZXM6DQo+ICsgKg0KPiArICogLSAqKlByaXZhdGUg c3RhdGljKio6IHNldCBpbnRlcm5hbGx5IGF0IGluaXQgdGltZSBhbmQgbmV2ZXIgY2hhbmdlZC4N Cj4gKyAqICAgRHJpdmVycyBtdXN0IG5vdCByZWFkIG9yIHdyaXRlIHRoZXNlLg0KPiArICogICAl RFJNX0RFUF9RVUVVRV9GTEFHU19PV05fU1VCTUlUX1dRLA0KPiArICogICAlRFJNX0RFUF9RVUVV RV9GTEFHU19PV05fVElNRURPVVRfV1EuDQo+ICsgKg0KPiArICogLSAqKlB1YmxpYyBkeW5hbWlj Kio6IHRvZ2dsZWQgYXQgcnVudGltZSBieSBkcml2ZXJzIHZpYSBhY2Nlc3NvcnMuDQo+ICsgKiAg IEFueSBtb2RpZmljYXRpb24gbXVzdCBiZSBwZXJmb3JtZWQgdW5kZXIgJmRybV9kZXBfcXVldWUu c2NoZWQubG9jay4NCj4gKyAqICAgQWNjZXNzb3IgZnVuY3Rpb25zIHByb3ZpZGUgdW5zdGFibGUg cmVhZHMuDQo+ICsgKiAgICVEUk1fREVQX1FVRVVFX0ZMQUdTX1NUT1BQRUQsDQo+ICsgKiAgICVE Uk1fREVQX1FVRVVFX0ZMQUdTX0tJTExFRC4NCj4gKyAqDQo+ICsgKiAtICoqUHVibGljIHN0YXRp YyoqOiBzdXBwbGllZCBieSB0aGUgZHJpdmVyIGluDQo+ICsgKiAgICZkcm1fZGVwX3F1ZXVlX2lu aXRfYXJncy5mbGFncyBhdCBxdWV1ZSBjcmVhdGlvbiB0aW1lIGFuZCBub3QgbW9kaWZpZWQNCj4g KyAqICAgdGhlcmVhZnRlci4NCj4gKyAqICAgJURSTV9ERVBfUVVFVUVfRkxBR1NfQllQQVNTX1NV UFBPUlRFRCwNCj4gKyAqICAgJURSTV9ERVBfUVVFVUVfRkxBR1NfSElHSFBSSSwNCj4gKyAqICAg JURSTV9ERVBfUVVFVUVfRkxBR1NfSk9CX1BVVF9JUlFfU0FGRS4NCj4gKyAqDQo+ICsgKiBARFJN X0RFUF9RVUVVRV9GTEFHU19PV05fU1VCTUlUX1dROiAocHJpdmF0ZSwgc3RhdGljKSBzdWJtaXQg d29ya3F1ZXVlIHdhcw0KPiArICogICBhbGxvY2F0ZWQgYnkgZHJtX2RlcF9xdWV1ZV9pbml0KCkg YW5kIHdpbGwgYmUgZGVzdHJveWVkIGJ5DQo+ICsgKiAgIGRybV9kZXBfcXVldWVfZmluaSgpLg0K PiArICogQERSTV9ERVBfUVVFVUVfRkxBR1NfT1dOX1RJTUVET1VUX1dROiAocHJpdmF0ZSwgc3Rh dGljKSB0aW1lb3V0IHdvcmtxdWV1ZQ0KPiArICogICB3YXMgYWxsb2NhdGVkIGJ5IGRybV9kZXBf cXVldWVfaW5pdCgpIGFuZCB3aWxsIGJlIGRlc3Ryb3llZCBieQ0KPiArICogICBkcm1fZGVwX3F1 ZXVlX2ZpbmkoKS4NCj4gKyAqIEBEUk1fREVQX1FVRVVFX0ZMQUdTX1NUT1BQRUQ6IChwdWJsaWMs IGR5bmFtaWMpIHRoZSBxdWV1ZSBpcyBzdG9wcGVkIGFuZA0KPiArICogICB3aWxsIG5vdCBkaXNw YXRjaCBuZXcgam9icyBvciByZW1vdmUgam9icyBmcm9tIHRoZSBwZW5kaW5nIGxpc3QsIGRyb3Bw aW5nDQo+ICsgKiAgIHRoZSBkcm1fZGVwLW93bmVkIHJlZmVyZW5jZS4gU2V0IGJ5IGRybV9kZXBf cXVldWVfc3RvcCgpLCBjbGVhcmVkIGJ5DQo+ICsgKiAgIGRybV9kZXBfcXVldWVfc3RhcnQoKS4N Cj4gKyAqIEBEUk1fREVQX1FVRVVFX0ZMQUdTX0tJTExFRDogKHB1YmxpYywgZHluYW1pYykgdGhl IHF1ZXVlIGhhcyBiZWVuIGtpbGxlZA0KPiArICogICB2aWEgZHJtX2RlcF9xdWV1ZV9raWxsKCku IEFueSBhY3RpdmUgZGVwZW5kZW5jeSB3YWl0IGlzIGNhbmNlbGxlZA0KPiArICogICBpbW1lZGlh dGVseS4gIEpvYnMgY29udGludWUgdG8gZmxvdyB0aHJvdWdoIHJ1bl9qb2IgZm9yIGJvb2trZWVw aW5nDQo+ICsgKiAgIGNsZWFudXAsIGJ1dCBkZXBlbmRlbmN5IHdhaXRpbmcgaXMgc2tpcHBlZCBz byB0aGF0IHF1ZXVlZCB3b3JrIGRyYWlucw0KPiArICogICBhcyBxdWlja2x5IGFzIHBvc3NpYmxl Lg0KPiArICogQERSTV9ERVBfUVVFVUVfRkxBR1NfQllQQVNTX1NVUFBPUlRFRDogKHB1YmxpYywg c3RhdGljKSB0aGUgcXVldWUgc3VwcG9ydHMNCj4gKyAqICAgdGhlIGJ5cGFzcyBwYXRoIHdoZXJl IGVsaWdpYmxlIGpvYnMgc2tpcCB0aGUgU1BTQyBxdWV1ZSBhbmQgcnVuIGlubGluZS4NCj4gKyAq IEBEUk1fREVQX1FVRVVFX0ZMQUdTX0hJR0hQUkk6IChwdWJsaWMsIHN0YXRpYykgdGhlIHN1Ym1p dCB3b3JrcXVldWUgb3duZWQNCj4gKyAqICAgYnkgdGhlIHF1ZXVlIGlzIGNyZWF0ZWQgd2l0aCAl V1FfSElHSFBSSSwgY2F1c2luZyBydW4tam9iIGFuZCBwdXQtam9iDQo+ICsgKiAgIHdvcmtlcnMg dG8gZXhlY3V0ZSBhdCBlbGV2YXRlZCBwcmlvcml0eS4gT25seSBwcml2aWxlZ2VkIGNsaWVudHMg KGUuZy4NCj4gKyAqICAgZHJpdmVycyBtYW5hZ2luZyB0aW1lLWNyaXRpY2FsIG9yIHJlYWwtdGlt ZSBHUFUgY29udGV4dHMpIHNob3VsZCByZXF1ZXN0DQo+ICsgKiAgIHRoaXMgZmxhZzsgZ3JhbnRp bmcgaXQgdG8gdW5wcml2aWxlZ2VkIHVzZXJzcGFjZSB3b3VsZCBhbGxvdyBwcmlvcml0eQ0KPiAr ICogICBpbnZlcnNpb24gYXR0YWNrcy4NCj4gKyAqICAgQGRybV9kZXBfcXVldWVfaW5pdF9hcmdz LnN1Ym1pdF93cSBpcyBwcm92aWRlZC4NCj4gKyAqIEBEUk1fREVQX1FVRVVFX0ZMQUdTX0pPQl9Q VVRfSVJRX1NBRkU6IChwdWJsaWMsIHN0YXRpYykgd2hlbiBzZXQsDQo+ICsgKiAgIGRybV9kZXBf am9iX2RvbmUoKSBtYXkgYmUgY2FsbGVkIGZyb20gaGFyZGlycSBjb250ZXh0IChlLmcuIGZyb20g YQ0KPiArICogICBoYXJkd2FyZS1zaWduYWxsZWQgZG1hX2ZlbmNlIGNhbGxiYWNrKS4gZHJtX2Rl cF9qb2JfZG9uZSgpIHdpbGwgZGlyZWN0bHkNCj4gKyAqICAgZGVxdWV1ZSB0aGUgam9iIGFuZCBj YWxsIGRybV9kZXBfam9iX3B1dCgpIHdpdGhvdXQgZGVmZXJyaW5nIHRvIGENCj4gKyAqICAgd29y a3F1ZXVlLiBUaGUgZHJpdmVyJ3MgJmRybV9kZXBfam9iX29wcy5yZWxlYXNlIGNhbGxiYWNrIG11 c3QgdGhlcmVmb3JlDQo+ICsgKiAgIGJlIHNhZmUgdG8gaW52b2tlIGZyb20gSVJRIGNvbnRleHQu DQo+ICsgKi8NCj4gK2VudW0gZHJtX2RlcF9xdWV1ZV9mbGFncyB7DQo+ICsgICAgICAgRFJNX0RF UF9RVUVVRV9GTEFHU19PV05fU1VCTUlUX1dRICAgICAgID0gQklUKDApLA0KPiArICAgICAgIERS TV9ERVBfUVVFVUVfRkxBR1NfT1dOX1RJTUVET1VUX1dRICAgICA9IEJJVCgxKSwNCj4gKyAgICAg ICBEUk1fREVQX1FVRVVFX0ZMQUdTX1NUT1BQRUQgICAgICAgICAgICAgPSBCSVQoMiksDQo+ICsg ICAgICAgRFJNX0RFUF9RVUVVRV9GTEFHU19CWVBBU1NfU1VQUE9SVEVEICAgID0gQklUKDMpLA0K PiArICAgICAgIERSTV9ERVBfUVVFVUVfRkxBR1NfSElHSFBSSSAgICAgICAgICAgICA9IEJJVCg0 KSwNCj4gKyAgICAgICBEUk1fREVQX1FVRVVFX0ZMQUdTX0pPQl9QVVRfSVJRX1NBRkUgICAgPSBC SVQoNSksDQo+ICsgICAgICAgRFJNX0RFUF9RVUVVRV9GTEFHU19LSUxMRUQgICAgICAgICAgICAg ID0gQklUKDYpLA0KPiArfTsNCj4gKw0KPiArLyoqDQo+ICsgKiBzdHJ1Y3QgZHJtX2RlcF9xdWV1 ZSAtIGEgZGVwZW5kZW5jeS10cmFja2VkIEdQVSBzdWJtaXNzaW9uIHF1ZXVlDQo+ICsgKg0KPiAr ICogQ29tYmluZXMgdGhlIHJvbGUgb2YgJmRybV9ncHVfc2NoZWR1bGVyIGFuZCAmZHJtX3NjaGVk X2VudGl0eSBpbnRvIGEgc2luZ2xlDQo+ICsgKiBvYmplY3QuICBFYWNoIHF1ZXVlIG93bnMgYSBz dWJtaXQgd29ya3F1ZXVlIChvciBib3Jyb3dzIG9uZSksIGEgdGltZW91dA0KPiArICogd29ya3F1 ZXVlLCBhbiBTUFNDIHN1Ym1pc3Npb24gcXVldWUsIGFuZCBhIHBlbmRpbmctam9iIGxpc3QgdXNl ZCBmb3IgVERSLg0KPiArICoNCj4gKyAqIEluaXRpYWxpc2Ugd2l0aCBkcm1fZGVwX3F1ZXVlX2lu aXQoKSwgdGVhciBkb3duIHdpdGggZHJtX2RlcF9xdWV1ZV9maW5pKCkuDQo+ICsgKiBSZWZlcmVu Y2UgY291bnRlZCB2aWEgZHJtX2RlcF9xdWV1ZV9nZXQoKSAvIGRybV9kZXBfcXVldWVfcHV0KCku DQo+ICsgKg0KPiArICogQWxsIGZpZWxkcyBhcmUgKipvcGFxdWUgdG8gZHJpdmVycyoqLiAgRG8g bm90IHJlYWQgb3Igd3JpdGUgYW55IGZpZWxkDQo+ICsgKiBkaXJlY3RseTsgdXNlIHRoZSBwcm92 aWRlZCBoZWxwZXIgZnVuY3Rpb25zIGluc3RlYWQuICBUaGUgc29sZSBleGNlcHRpb24NCj4gKyAq IGlzIEByY3UsIHdoaWNoIGRyaXZlcnMgbWF5IHBhc3MgdG8ga2ZyZWVfcmN1KCkgd2hlbiB0aGUg cXVldWUgaXMgZW1iZWRkZWQNCj4gKyAqIGluc2lkZSBhIGxhcmdlciBkcml2ZXItbWFuYWdlZCBz dHJ1Y3R1cmUgYW5kIHRoZSAmZHJtX2RlcF9xdWV1ZV9vcHMucmVsZWFzZQ0KPiArICogdmZ1bmMg cGVyZm9ybXMgYW4gUkNVLWRlZmVycmVkIGZyZWUuDQo+ICsgKi8NCj4gK3N0cnVjdCBkcm1fZGVw X3F1ZXVlIHsNCj4gKyAgICAgICAvKiogQG9wczogZHJpdmVyIGNhbGxiYWNrcywgc2V0IGF0IGlu aXQgdGltZS4gKi8NCj4gKyAgICAgICBjb25zdCBzdHJ1Y3QgZHJtX2RlcF9xdWV1ZV9vcHMgKm9w czsNCj4gKyAgICAgICAvKiogQG5hbWU6IGh1bWFuLXJlYWRhYmxlIG5hbWUgdXNlZCBmb3Igd29y a3F1ZXVlIGFuZCBmZW5jZSBuYW1pbmcuICovDQo+ICsgICAgICAgY29uc3QgY2hhciAqbmFtZTsN Cj4gKyAgICAgICAvKiogQGRybTogb3duaW5nIERSTSBkZXZpY2U7IGEgZHJtX2Rldl9nZXQoKSBy ZWZlcmVuY2UgaXMgaGVsZCBmb3IgdGhlDQo+ICsgICAgICAgICogIGxpZmV0aW1lIG9mIHRoZSBx dWV1ZSB0byBwcmV2ZW50IG1vZHVsZSB1bmxvYWQgd2hpbGUgcXVldWVzIGFyZSBsaXZlLg0KPiAr ICAgICAgICAqLw0KPiArICAgICAgIHN0cnVjdCBkcm1fZGV2aWNlICpkcm07DQo+ICsgICAgICAg LyoqIEByZWZjb3VudDogcmVmZXJlbmNlIGNvdW50OyB1c2UgZHJtX2RlcF9xdWV1ZV9nZXQvcHV0 KCkuICovDQo+ICsgICAgICAgc3RydWN0IGtyZWYgcmVmY291bnQ7DQo+ICsgICAgICAgLyoqDQo+ ICsgICAgICAgICogQGZyZWVfd29yazogZGVmZXJyZWQgdGVhcmRvd24gd29yayBxdWV1ZWQgdW5j b25kaXRpb25hbGx5IGJ5DQo+ICsgICAgICAgICogZHJtX2RlcF9xdWV1ZV9maW5pKCkgb250byB0 aGUgbW9kdWxlLXByaXZhdGUgZGVwX2ZyZWVfd3EuICBUaGUgd29yaw0KPiArICAgICAgICAqIGl0 ZW0gZGlzYWJsZXMgcGVuZGluZyB3b3JrZXJzIHN5bmNocm9ub3VzbHkgYW5kIGRlc3Ryb3lzIGFu eSBvd25lZA0KPiArICAgICAgICAqIHdvcmtxdWV1ZXMgYmVmb3JlIHJlbGVhc2luZyB0aGUgcXVl dWUgbWVtb3J5IGFuZCBkcm9wcGluZyB0aGUNCj4gKyAgICAgICAgKiBkcm1fZGV2X2dldCgpIHJl ZmVyZW5jZS4gIFJ1bm5pbmcgb24gZGVwX2ZyZWVfd3EgZW5zdXJlcw0KPiArICAgICAgICAqIGRl c3Ryb3lfd29ya3F1ZXVlKCkgaXMgbmV2ZXIgY2FsbGVkIGZyb20gd2l0aGluIG9uZSBvZiB0aGUg cXVldWUncw0KPiArICAgICAgICAqIG93biB3b3JrZXJzLg0KPiArICAgICAgICAqLw0KPiArICAg ICAgIHN0cnVjdCB3b3JrX3N0cnVjdCBmcmVlX3dvcms7DQo+ICsgICAgICAgLyoqDQo+ICsgICAg ICAgICogQHJjdTogUkNVIGhlYWQgZm9yIGRlZmVycmVkIGZyZWVpbmcuDQo+ICsgICAgICAgICoN Cj4gKyAgICAgICAgKiBUaGlzIGlzIHRoZSAqKm9ubHkqKiBmaWVsZCBkcml2ZXJzIG1heSBhY2Nl c3MgZGlyZWN0bHkuICBXaGVuIHRoZQ0KPiArICAgICAgICAqIHF1ZXVlIGlzIGVtYmVkZGVkIGlu IGEgbGFyZ2VyIHN0cnVjdHVyZSwgaW1wbGVtZW50DQo+ICsgICAgICAgICogJmRybV9kZXBfcXVl dWVfb3BzLnJlbGVhc2UsIGNhbGwgZHJtX2RlcF9xdWV1ZV9yZWxlYXNlKCkgdG8gZGVzdHJveQ0K PiArICAgICAgICAqIGludGVybmFsIHJlc291cmNlcywgdGhlbiBwYXNzIHRoaXMgZmllbGQgdG8g a2ZyZWVfcmN1KCkgc28gdGhhdCBhbnkNCj4gKyAgICAgICAgKiBpbi1mbGlnaHQgUkNVIHJlYWRl cnMgcmVmZXJlbmNpbmcgdGhlIHF1ZXVlJ3MgZG1hX2ZlbmNlIHRpbWVsaW5lIG5hbWUNCj4gKyAg ICAgICAgKiBjb21wbGV0ZSBiZWZvcmUgdGhlIG1lbW9yeSBpcyByZXR1cm5lZC4gIEFsbCBvdGhl ciBmaWVsZHMgbXVzdCBiZQ0KPiArICAgICAgICAqIGFjY2Vzc2VkIHRocm91Z2ggdGhlIHByb3Zp ZGVkIGhlbHBlcnMuDQo+ICsgICAgICAgICovDQo+ICsgICAgICAgc3RydWN0IHJjdV9oZWFkIHJj dTsNCj4gKw0KPiArICAgICAgIC8qKiBAc2NoZWQ6IHNjaGVkdWxpbmcgYW5kIHdvcmtxdWV1ZSBz dGF0ZS4gKi8NCj4gKyAgICAgICBzdHJ1Y3Qgew0KPiArICAgICAgICAgICAgICAgLyoqIEBzY2hl ZC5zdWJtaXRfd3E6IG9yZGVyZWQgd29ya3F1ZXVlIGZvciBydW4vcHV0LWpvYiB3b3JrLiAqLw0K PiArICAgICAgICAgICAgICAgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnN1Ym1pdF93cTsNCj4g KyAgICAgICAgICAgICAgIC8qKiBAc2NoZWQudGltZW91dF93cTogd29ya3F1ZXVlIGZvciB0aGUg VERSIGRlbGF5ZWQgd29yay4gKi8NCj4gKyAgICAgICAgICAgICAgIHN0cnVjdCB3b3JrcXVldWVf c3RydWN0ICp0aW1lb3V0X3dxOw0KPiArICAgICAgICAgICAgICAgLyoqDQo+ICsgICAgICAgICAg ICAgICAgKiBAc2NoZWQucnVuX2pvYjogd29yayBpdGVtIHRoYXQgZGlzcGF0Y2hlcyB0aGUgbmV4 dCBxdWV1ZWQNCj4gKyAgICAgICAgICAgICAgICAqIGpvYi4NCj4gKyAgICAgICAgICAgICAgICAq Lw0KPiArICAgICAgICAgICAgICAgc3RydWN0IHdvcmtfc3RydWN0IHJ1bl9qb2I7DQo+ICsgICAg ICAgICAgICAgICAvKiogQHNjaGVkLnB1dF9qb2I6IHdvcmsgaXRlbSB0aGF0IGZyZWVzIGZpbmlz aGVkIGpvYnMuICovDQo+ICsgICAgICAgICAgICAgICBzdHJ1Y3Qgd29ya19zdHJ1Y3QgcHV0X2pv YjsNCj4gKyAgICAgICAgICAgICAgIC8qKiBAc2NoZWQudGRyOiBkZWxheWVkIHdvcmsgaXRlbSBm b3IgdGltZW91dC9yZXNldCAoVERSKS4gKi8NCj4gKyAgICAgICAgICAgICAgIHN0cnVjdCBkZWxh eWVkX3dvcmsgdGRyOw0KPiArICAgICAgICAgICAgICAgLyoqDQo+ICsgICAgICAgICAgICAgICAg KiBAc2NoZWQubG9jazogbXV0ZXggc2VyaWFsaXNpbmcgam9iIGRpc3BhdGNoLCBieXBhc3MNCj4g KyAgICAgICAgICAgICAgICAqIGRlY2lzaW9ucywgc3RvcC9zdGFydCwgYW5kIGZsYWcgdXBkYXRl cy4NCj4gKyAgICAgICAgICAgICAgICAqLw0KPiArICAgICAgICAgICAgICAgc3RydWN0IG11dGV4 IGxvY2s7DQo+ICsgICAgICAgICAgICAgICAvKioNCj4gKyAgICAgICAgICAgICAgICAqIEBzY2hl ZC5mbGFnczogYml0bWFzayBvZiAmZW51bSBkcm1fZGVwX3F1ZXVlX2ZsYWdzLg0KPiArICAgICAg ICAgICAgICAgICogQW55IG1vZGlmaWNhdGlvbiBhZnRlciBkcm1fZGVwX3F1ZXVlX2luaXQoKSBt dXN0IGJlDQo+ICsgICAgICAgICAgICAgICAgKiBwZXJmb3JtZWQgdW5kZXIgQHNjaGVkLmxvY2su DQo+ICsgICAgICAgICAgICAgICAgKi8NCj4gKyAgICAgICAgICAgICAgIGVudW0gZHJtX2RlcF9x dWV1ZV9mbGFncyBmbGFnczsNCj4gKyAgICAgICB9IHNjaGVkOw0KPiArDQo+ICsgICAgICAgLyoq IEBqb2I6IHBlbmRpbmctam9iIHRyYWNraW5nIHN0YXRlLiAqLw0KPiArICAgICAgIHN0cnVjdCB7 DQo+ICsgICAgICAgICAgICAgICAvKioNCj4gKyAgICAgICAgICAgICAgICAqIEBqb2IucGVuZGlu ZzogbGlzdCBvZiBqb2JzIHRoYXQgaGF2ZSBiZWVuIGRpc3BhdGNoZWQgdG8NCj4gKyAgICAgICAg ICAgICAgICAqIGhhcmR3YXJlIGFuZCBub3QgeWV0IGZyZWVkLiBQcm90ZWN0ZWQgYnkgQGpvYi5s b2NrLg0KPiArICAgICAgICAgICAgICAgICovDQo+ICsgICAgICAgICAgICAgICBzdHJ1Y3QgbGlz dF9oZWFkIHBlbmRpbmc7DQo+ICsgICAgICAgICAgICAgICAvKioNCj4gKyAgICAgICAgICAgICAg ICAqIEBqb2IucXVldWU6IFNQU0MgcXVldWUgb2Ygam9icyB3YWl0aW5nIHRvIGJlIGRpc3BhdGNo ZWQuDQo+ICsgICAgICAgICAgICAgICAgKiBQcm9kdWNlcnMgcHVzaCB2aWEgZHJtX2RlcF9xdWV1 ZV9wdXNoX2pvYigpOyB0aGUgcnVuX2pvYg0KPiArICAgICAgICAgICAgICAgICogd29yayBpdGVt IHBvcHMgZnJvbSB0aGUgY29uc3VtZXIgc2lkZS4NCj4gKyAgICAgICAgICAgICAgICAqLw0KPiAr ICAgICAgICAgICAgICAgc3RydWN0IHNwc2NfcXVldWUgcXVldWU7DQo+ICsgICAgICAgICAgICAg ICAvKioNCj4gKyAgICAgICAgICAgICAgICAqIEBqb2IubG9jazogc3BpbmxvY2sgcHJvdGVjdGlu ZyBAam9iLnBlbmRpbmcsIFREUiBzdGFydCwgYW5kDQo+ICsgICAgICAgICAgICAgICAgKiB0aGUg JURSTV9ERVBfUVVFVUVfRkxBR1NfU1RPUFBFRCBmbGFnLiBBbHdheXMgYWNxdWlyZWQgd2l0aA0K PiArICAgICAgICAgICAgICAgICogaXJxc2F2ZSAoc3Bpbl9sb2NrX2lycXNhdmUgLyBzcGluX3Vu bG9ja19pcnFyZXN0b3JlKSB0bw0KPiArICAgICAgICAgICAgICAgICogc3VwcG9ydCAlRFJNX0RF UF9RVUVVRV9GTEFHU19KT0JfUFVUX0lSUV9TQUZFIHF1ZXVlcyB3aGVyZQ0KPiArICAgICAgICAg ICAgICAgICogZHJtX2RlcF9qb2JfZG9uZSgpIG1heSBydW4gZnJvbSBoYXJkaXJxIGNvbnRleHQu DQo+ICsgICAgICAgICAgICAgICAgKi8NCj4gKyAgICAgICAgICAgICAgIHNwaW5sb2NrX3QgbG9j azsNCj4gKyAgICAgICAgICAgICAgIC8qKg0KPiArICAgICAgICAgICAgICAgICogQGpvYi50aW1l b3V0OiBwZXItam9iIFREUiB0aW1lb3V0IGluIGppZmZpZXMuDQo+ICsgICAgICAgICAgICAgICAg KiAlTUFYX1NDSEVEVUxFX1RJTUVPVVQgbWVhbnMgbm8gdGltZW91dC4NCj4gKyAgICAgICAgICAg ICAgICAqLw0KPiArICAgICAgICAgICAgICAgbG9uZyB0aW1lb3V0Ow0KPiArI2lmIElTX0VOQUJM RUQoQ09ORklHX1BST1ZFX0xPQ0tJTkcpDQo+ICsgICAgICAgICAgICAgICAvKioNCj4gKyAgICAg ICAgICAgICAgICAqIEBqb2IucHVzaDogbG9ja2RlcCBhbm5vdGF0aW9uIHRyYWNraW5nIHRoZSBh cm0tdG8tcHVzaA0KPiArICAgICAgICAgICAgICAgICogY3JpdGljYWwgc2VjdGlvbi4NCj4gKyAg ICAgICAgICAgICAgICAqLw0KPiArICAgICAgICAgICAgICAgc3RydWN0IHsNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgLyoNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICogQGpvYi5wdXNo Lm93bmVyOiB0YXNrIHRoYXQgY3VycmVudGx5IGhvbGRzIHRoZSBwdXNoDQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAqIGNvbnRleHQsIHVzZWQgdG8gYXNzZXJ0IHNpbmdsZS1vd25lciBpbnZh cmlhbnRzLg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgKiBOVUxMIHdoZW4gaWRsZS4NCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICovDQo+ICsgICAgICAgICAgICAgICAgICAgICAgIHN0 cnVjdCB0YXNrX3N0cnVjdCAqb3duZXI7DQo+ICsgICAgICAgICAgICAgICB9IHB1c2g7DQo+ICsj ZW5kaWYNCj4gKyAgICAgICB9IGpvYjsNCj4gKw0KPiArICAgICAgIC8qKiBAY3JlZGl0OiBoYXJk d2FyZSBjcmVkaXQgYWNjb3VudGluZy4gKi8NCj4gKyAgICAgICBzdHJ1Y3Qgew0KPiArICAgICAg ICAgICAgICAgLyoqIEBjcmVkaXQubGltaXQ6IG1heGltdW0gY3JlZGl0cyB0aGUgcXVldWUgY2Fu IGhvbGQuICovDQo+ICsgICAgICAgICAgICAgICB1MzIgbGltaXQ7DQo+ICsgICAgICAgICAgICAg ICAvKiogQGNyZWRpdC5jb3VudDogY3JlZGl0cyBjdXJyZW50bHkgaW4gZmxpZ2h0IChhdG9taWMp LiAqLw0KPiArICAgICAgICAgICAgICAgYXRvbWljX3QgY291bnQ7DQo+ICsgICAgICAgfSBjcmVk aXQ7DQo+ICsNCj4gKyAgICAgICAvKiogQGRlcDogY3VycmVudCBibG9ja2luZyBkZXBlbmRlbmN5 IGZvciB0aGUgaGVhZCBTUFNDIGpvYi4gKi8NCj4gKyAgICAgICBzdHJ1Y3Qgew0KPiArICAgICAg ICAgICAgICAgLyoqDQo+ICsgICAgICAgICAgICAgICAgKiBAZGVwLmZlbmNlOiBmZW5jZSBiZWlu ZyB3YWl0ZWQgb24gYmVmb3JlIHRoZSBoZWFkIGpvYiBjYW4NCj4gKyAgICAgICAgICAgICAgICAq IHJ1bi4gTlVMTCB3aGVuIG5vIGRlcGVuZGVuY3kgaXMgcGVuZGluZy4NCj4gKyAgICAgICAgICAg ICAgICAqLw0KPiArICAgICAgICAgICAgICAgc3RydWN0IGRtYV9mZW5jZSAqZmVuY2U7DQo+ICsg ICAgICAgICAgICAgICAvKioNCj4gKyAgICAgICAgICAgICAgICAqIEBkZXAucmVtb3ZlZF9mZW5j ZTogZGVwZW5kZW5jeSBmZW5jZSB3aG9zZSBjYWxsYmFjayBoYXMgYmVlbg0KPiArICAgICAgICAg ICAgICAgICogcmVtb3ZlZC4gIFRoZSBydW4tam9iIHdvcmtlciBtdXN0IGRyb3AgaXRzIHJlZmVy ZW5jZSB0byB0aGlzDQo+ICsgICAgICAgICAgICAgICAgKiBmZW5jZSBiZWZvcmUgcHJvY2VlZGlu ZyB0byBjYWxsIHJ1bl9qb2IuDQo+ICsgICAgICAgICAgICAgICAgKi8NCj4gKyAgICAgICAgICAg ICAgIHN0cnVjdCBkbWFfZmVuY2UgKnJlbW92ZWRfZmVuY2U7DQo+ICsgICAgICAgICAgICAgICAv KiogQGRlcC5jYjogY2FsbGJhY2sgaW5zdGFsbGVkIG9uIEBkZXAuZmVuY2UuICovDQo+ICsgICAg ICAgICAgICAgICBzdHJ1Y3QgZG1hX2ZlbmNlX2NiIGNiOw0KPiArICAgICAgIH0gZGVwOw0KPiAr DQo+ICsgICAgICAgLyoqIEBmZW5jZTogZmVuY2UgY29udGV4dCBhbmQgc2VxdWVuY2UgbnVtYmVy IHN0YXRlLiAqLw0KPiArICAgICAgIHN0cnVjdCB7DQo+ICsgICAgICAgICAgICAgICAvKioNCj4g KyAgICAgICAgICAgICAgICAqIEBmZW5jZS5zZXFubzogbmV4dCBzZXF1ZW5jZSBudW1iZXIgdG8g YXNzaWduLCBpbmNyZW1lbnRlZA0KPiArICAgICAgICAgICAgICAgICogZWFjaCB0aW1lIGEgam9i IGlzIGFybWVkLg0KPiArICAgICAgICAgICAgICAgICovDQo+ICsgICAgICAgICAgICAgICB1MzIg c2Vxbm87DQo+ICsgICAgICAgICAgICAgICAvKioNCj4gKyAgICAgICAgICAgICAgICAqIEBmZW5j ZS5jb250ZXh0OiBiYXNlIERNQSBmZW5jZSBjb250ZXh0IGFsbG9jYXRlZCBhdCBpbml0DQo+ICsg ICAgICAgICAgICAgICAgKiB0aW1lLiBGaW5pc2hlZCBmZW5jZXMgdXNlIHRoaXMgY29udGV4dC4N Cj4gKyAgICAgICAgICAgICAgICAqLw0KPiArICAgICAgICAgICAgICAgdTY0IGNvbnRleHQ7DQo+ ICsgICAgICAgfSBmZW5jZTsNCj4gK307DQo+ICsNCj4gKy8qKg0KPiArICogc3RydWN0IGRybV9k ZXBfcXVldWVfaW5pdF9hcmdzIC0gYXJndW1lbnRzIGZvciBkcm1fZGVwX3F1ZXVlX2luaXQoKQ0K PiArICovDQo+ICtzdHJ1Y3QgZHJtX2RlcF9xdWV1ZV9pbml0X2FyZ3Mgew0KPiArICAgICAgIC8q KiBAb3BzOiBkcml2ZXIgY2FsbGJhY2tzOyBtdXN0IG5vdCBiZSBOVUxMLiAqLw0KPiArICAgICAg IGNvbnN0IHN0cnVjdCBkcm1fZGVwX3F1ZXVlX29wcyAqb3BzOw0KPiArICAgICAgIC8qKiBAbmFt ZTogaHVtYW4tcmVhZGFibGUgbmFtZSBmb3Igd29ya3F1ZXVlcyBhbmQgZmVuY2UgdGltZWxpbmVz LiAqLw0KPiArICAgICAgIGNvbnN0IGNoYXIgKm5hbWU7DQo+ICsgICAgICAgLyoqIEBkcm06IG93 bmluZyBEUk0gZGV2aWNlLiBBIGRybV9kZXZfZ2V0KCkgcmVmZXJlbmNlIGlzIHRha2VuIGF0DQo+ ICsgICAgICAgICogIHF1ZXVlIGluaXQgYW5kIHJlbGVhc2VkIHdoZW4gdGhlIHF1ZXVlIGlzIGZy ZWVkLCBwcmV2ZW50aW5nIG1vZHVsZQ0KPiArICAgICAgICAqICB1bmxvYWQgd2hpbGUgYW55IHF1 ZXVlIGlzIHN0aWxsIGFsaXZlLg0KPiArICAgICAgICAqLw0KPiArICAgICAgIHN0cnVjdCBkcm1f ZGV2aWNlICpkcm07DQo+ICsgICAgICAgLyoqDQo+ICsgICAgICAgICogQHN1Ym1pdF93cTogd29y a3F1ZXVlIGZvciBqb2IgZGlzcGF0Y2guIElmIE5VTEwsIGFuIG9yZGVyZWQNCj4gKyAgICAgICAg KiB3b3JrcXVldWUgaXMgYWxsb2NhdGVkIGFuZCBvd25lZCBieSB0aGUgcXVldWUuICBJZiBub24t TlVMTCwgdGhlDQo+ICsgICAgICAgICogd29ya3F1ZXVlIG11c3QgaGF2ZSBiZWVuIGFsbG9jYXRl ZCB3aXRoICVXUV9NRU1fUkVDTEFJTV9UQUlOVDsNCj4gKyAgICAgICAgKiBkcm1fZGVwX3F1ZXVl X2luaXQoKSByZXR1cm5zICUtRUlOVkFMIG90aGVyd2lzZS4NCj4gKyAgICAgICAgKi8NCj4gKyAg ICAgICBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqc3VibWl0X3dxOw0KPiArICAgICAgIC8qKg0K PiArICAgICAgICAqIEB0aW1lb3V0X3dxOiB3b3JrcXVldWUgZm9yIFREUi4gSWYgTlVMTCwgYW4g b3JkZXJlZCB3b3JrcXVldWUNCj4gKyAgICAgICAgKiBpcyBhbGxvY2F0ZWQgYW5kIG93bmVkIGJ5 IHRoZSBxdWV1ZS4gIElmIG5vbi1OVUxMLCB0aGUgd29ya3F1ZXVlDQo+ICsgICAgICAgICogbXVz dCBoYXZlIGJlZW4gYWxsb2NhdGVkIHdpdGggJVdRX01FTV9SRUNMQUlNX1RBSU5UOw0KPiArICAg ICAgICAqIGRybV9kZXBfcXVldWVfaW5pdCgpIHJldHVybnMgJS1FSU5WQUwgb3RoZXJ3aXNlLg0K PiArICAgICAgICAqLw0KPiArICAgICAgIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp0aW1lb3V0 X3dxOw0KPiArICAgICAgIC8qKiBAY3JlZGl0X2xpbWl0OiBtYXhpbXVtIGhhcmR3YXJlIGNyZWRp dHM7IG11c3QgYmUgbm9uLXplcm8uICovDQo+ICsgICAgICAgdTMyIGNyZWRpdF9saW1pdDsNCj4g KyAgICAgICAvKioNCj4gKyAgICAgICAgKiBAdGltZW91dDogcGVyLWpvYiBURFIgdGltZW91dCBp biBqaWZmaWVzLiBaZXJvIG1lYW5zIG5vIHRpbWVvdXQNCj4gKyAgICAgICAgKiAoJU1BWF9TQ0hF RFVMRV9USU1FT1VUIGlzIHVzZWQgaW50ZXJuYWxseSkuDQo+ICsgICAgICAgICovDQo+ICsgICAg ICAgbG9uZyB0aW1lb3V0Ow0KPiArICAgICAgIC8qKg0KPiArICAgICAgICAqIEBmbGFnczogaW5p dGlhbCBxdWV1ZSBmbGFncy4gJURSTV9ERVBfUVVFVUVfRkxBR1NfT1dOX1NVQk1JVF9XUQ0KPiAr ICAgICAgICAqIGFuZCAlRFJNX0RFUF9RVUVVRV9GTEFHU19PV05fVElNRURPVVRfV1EgYXJlIG1h bmFnZWQgaW50ZXJuYWxseQ0KPiArICAgICAgICAqIGFuZCB3aWxsIGJlIGlnbm9yZWQgaWYgc2V0 IGhlcmUuIFNldHRpbmcNCj4gKyAgICAgICAgKiAlRFJNX0RFUF9RVUVVRV9GTEFHU19ISUdIUFJJ IHJlcXVlc3RzIGEgaGlnaC1wcmlvcml0eSBzdWJtaXQNCj4gKyAgICAgICAgKiB3b3JrcXVldWU7 IGRyaXZlcnMgbXVzdCBvbmx5IHNldCB0aGlzIGZvciBwcml2aWxlZ2VkIGNsaWVudHMuDQo+ICsg ICAgICAgICovDQo+ICsgICAgICAgZW51bSBkcm1fZGVwX3F1ZXVlX2ZsYWdzIGZsYWdzOw0KPiAr fTsNCj4gKw0KPiArLyoqDQo+ICsgKiBzdHJ1Y3QgZHJtX2RlcF9qb2Jfb3BzIC0gZHJpdmVyIGNh bGxiYWNrcyBmb3IgYSBkZXAgam9iDQo+ICsgKi8NCj4gK3N0cnVjdCBkcm1fZGVwX2pvYl9vcHMg ew0KPiArICAgICAgIC8qKg0KPiArICAgICAgICAqIEByZWxlYXNlOiBjYWxsZWQgd2hlbiB0aGUg bGFzdCByZWZlcmVuY2UgdG8gdGhlIGpvYiBpcyBkcm9wcGVkLg0KPiArICAgICAgICAqDQo+ICsg ICAgICAgICogSWYgc2V0LCB0aGUgZHJpdmVyIGlzIHJlc3BvbnNpYmxlIGZvciBmcmVlaW5nIHRo ZSBqb2IuIElmIE5VTEwsDQo+ICsgICAgICAgICogZHJtX2RlcF9qb2JfcHV0KCkgd2lsbCBjYWxs IGtmcmVlKCkgb24gdGhlIGpvYiBkaXJlY3RseS4NCj4gKyAgICAgICAgKi8NCj4gKyAgICAgICB2 b2lkICgqcmVsZWFzZSkoc3RydWN0IGRybV9kZXBfam9iICpqb2IpOw0KPiArfTsNCj4gKw0KPiAr LyoqDQo+ICsgKiBzdHJ1Y3QgZHJtX2RlcF9qb2IgLSBhIHVuaXQgb2Ygd29yayBzdWJtaXR0ZWQg dG8gYSBkZXAgcXVldWUNCj4gKyAqDQo+ICsgKiBBbGwgZmllbGRzIGFyZSAqKm9wYXF1ZSB0byBk cml2ZXJzKiouICBEbyBub3QgcmVhZCBvciB3cml0ZSBhbnkgZmllbGQNCj4gKyAqIGRpcmVjdGx5 OyB1c2UgdGhlIHByb3ZpZGVkIGhlbHBlciBmdW5jdGlvbnMgaW5zdGVhZC4NCj4gKyAqLw0KPiAr c3RydWN0IGRybV9kZXBfam9iIHsNCj4gKyAgICAgICAvKiogQG9wczogZHJpdmVyIGNhbGxiYWNr cyBmb3IgdGhpcyBqb2IuICovDQo+ICsgICAgICAgY29uc3Qgc3RydWN0IGRybV9kZXBfam9iX29w cyAqb3BzOw0KPiArICAgICAgIC8qKiBAcmVmY291bnQ6IHJlZmVyZW5jZSBjb3VudCwgbWFuYWdl ZCBieSBkcm1fZGVwX2pvYl9nZXQvcHV0KCkuICovDQo+ICsgICAgICAgc3RydWN0IGtyZWYgcmVm Y291bnQ7DQo+ICsgICAgICAgLyoqDQo+ICsgICAgICAgICogQGRlcGVuZGVuY2llczogeGFycmF5 IG9mICZkbWFfZmVuY2UgZGVwZW5kZW5jaWVzIGJlZm9yZSB0aGUgam9iIGNhbg0KPiArICAgICAg ICAqIHJ1bi4NCj4gKyAgICAgICAgKi8NCj4gKyAgICAgICBzdHJ1Y3QgeGFycmF5IGRlcGVuZGVu Y2llczsNCj4gKyAgICAgICAvKiogQHE6IHRoZSBxdWV1ZSB0aGlzIGpvYiBpcyBzdWJtaXR0ZWQg dG8uICovDQo+ICsgICAgICAgc3RydWN0IGRybV9kZXBfcXVldWUgKnE7DQo+ICsgICAgICAgLyoq IEBxdWV1ZV9ub2RlOiBTUFNDIHF1ZXVlIGxpbmthZ2UgZm9yIHBlbmRpbmcgc3VibWlzc2lvbi4g Ki8NCj4gKyAgICAgICBzdHJ1Y3Qgc3BzY19ub2RlIHF1ZXVlX25vZGU7DQo+ICsgICAgICAgLyoq DQo+ICsgICAgICAgICogQHBlbmRpbmdfbGluazogbGlzdCBlbnRyeSBpbiB0aGUgcXVldWUncyBw ZW5kaW5nIGpvYiBsaXN0LiBQcm90ZWN0ZWQNCj4gKyAgICAgICAgKiBieSBAam9iLnEtPmpvYi5s b2NrLg0KPiArICAgICAgICAqLw0KPiArICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgcGVuZGluZ19s aW5rOw0KPiArICAgICAgIC8qKiBAZGZlbmNlOiBmaW5pc2hlZCBmZW5jZSBmb3IgdGhpcyBqb2Iu ICovDQo+ICsgICAgICAgc3RydWN0IGRybV9kZXBfZmVuY2UgKmRmZW5jZTsNCj4gKyAgICAgICAv KiogQGNiOiBmZW5jZSBjYWxsYmFjayB1c2VkIHRvIHdhdGNoIGZvciBkZXBlbmRlbmN5IGNvbXBs ZXRpb24uICovDQo+ICsgICAgICAgc3RydWN0IGRtYV9mZW5jZV9jYiBjYjsNCj4gKyAgICAgICAv KiogQGNyZWRpdHM6IG51bWJlciBvZiBjcmVkaXRzIHRoaXMgam9iIGNvbnN1bWVzIGZyb20gdGhl IHF1ZXVlLiAqLw0KPiArICAgICAgIHUzMiBjcmVkaXRzOw0KPiArICAgICAgIC8qKg0KPiArICAg ICAgICAqIEBsYXN0X2RlcGVuZGVuY3k6IGluZGV4IGludG8gQGRlcGVuZGVuY2llcyBvZiB0aGUg bmV4dCBmZW5jZSB0bw0KPiArICAgICAgICAqIGNoZWNrLiBBZHZhbmNlZCBieSBkcm1fZGVwX3F1 ZXVlX2pvYl9kZXBlbmRlbmN5KCkgYXMgZWFjaA0KPiArICAgICAgICAqIGRlcGVuZGVuY3kgaXMg Y29uc3VtZWQuDQo+ICsgICAgICAgICovDQo+ICsgICAgICAgdTMyIGxhc3RfZGVwZW5kZW5jeTsN Cj4gKyAgICAgICAvKioNCj4gKyAgICAgICAgKiBAaW52YWxpZGF0ZV9jb3VudDogbnVtYmVyIG9m IHRpbWVzIHRoaXMgam9iIGhhcyBiZWVuIGludmFsaWRhdGVkLg0KPiArICAgICAgICAqIEluY3Jl bWVudGVkIGJ5IGRybV9kZXBfam9iX2ludmFsaWRhdGVfam9iKCkuDQo+ICsgICAgICAgICovDQo+ ICsgICAgICAgdTMyIGludmFsaWRhdGVfY291bnQ7DQo+ICsgICAgICAgLyoqDQo+ICsgICAgICAg ICogQHNpZ25hbGxpbmdfY29va2llOiByZXR1cm4gdmFsdWUgb2YgZG1hX2ZlbmNlX2JlZ2luX3Np Z25hbGxpbmcoKQ0KPiArICAgICAgICAqIGNhcHR1cmVkIGluIGRybV9kZXBfam9iX2FybSgpIGFu ZCBjb25zdW1lZCBieSBkcm1fZGVwX2pvYl9wdXNoKCkuDQo+ICsgICAgICAgICogTm90IHZhbGlk IG91dHNpZGUgdGhlIGFybeKGknB1c2ggd2luZG93Lg0KPiArICAgICAgICAqLw0KPiArICAgICAg IGJvb2wgc2lnbmFsbGluZ19jb29raWU7DQo+ICt9Ow0KPiArDQo+ICsvKioNCj4gKyAqIHN0cnVj dCBkcm1fZGVwX2pvYl9pbml0X2FyZ3MgLSBhcmd1bWVudHMgZm9yIGRybV9kZXBfam9iX2luaXQo KQ0KPiArICovDQo+ICtzdHJ1Y3QgZHJtX2RlcF9qb2JfaW5pdF9hcmdzIHsNCj4gKyAgICAgICAv KioNCj4gKyAgICAgICAgKiBAb3BzOiBkcml2ZXIgY2FsbGJhY2tzIGZvciB0aGUgam9iLCBvciBO VUxMIGZvciBkZWZhdWx0IGJlaGF2aW91ci4NCj4gKyAgICAgICAgKi8NCj4gKyAgICAgICBjb25z dCBzdHJ1Y3QgZHJtX2RlcF9qb2Jfb3BzICpvcHM7DQo+ICsgICAgICAgLyoqIEBxOiB0aGUgcXVl dWUgdG8gYXNzb2NpYXRlIHRoZSBqb2Igd2l0aC4gQSByZWZlcmVuY2UgaXMgdGFrZW4uICovDQo+ ICsgICAgICAgc3RydWN0IGRybV9kZXBfcXVldWUgKnE7DQo+ICsgICAgICAgLyoqIEBjcmVkaXRz OiBudW1iZXIgb2YgY3JlZGl0cyB0aGlzIGpvYiBjb25zdW1lczsgbXVzdCBiZSBub24temVyby4g Ki8NCj4gKyAgICAgICB1MzIgY3JlZGl0czsNCj4gK307DQo+ICsNCj4gKy8qIFF1ZXVlIEFQSSAq Lw0KPiArDQo+ICsvKioNCj4gKyAqIGRybV9kZXBfcXVldWVfc2NoZWRfZ3VhcmQoKSAtIGFjcXVp cmUgdGhlIHF1ZXVlIHNjaGVkdWxlciBsb2NrIGFzIGEgZ3VhcmQNCj4gKyAqIEBfX3E6IGRlcCBx dWV1ZSB3aG9zZSBzY2hlZHVsZXIgbG9jayB0byBhY3F1aXJlDQo+ICsgKg0KPiArICogQWNxdWly ZXMgQF9fcS0+c2NoZWQubG9jayBhcyBhIHNjb3BlZCBtdXRleCBndWFyZCAocmVsZWFzZWQgYXV0 b21hdGljYWxseQ0KPiArICogd2hlbiB0aGUgZW5jbG9zaW5nIHNjb3BlIGV4aXRzKS4gIFRoaXMg bG9jayBzZXJpYWxpc2VzIGFsbCBzY2hlZHVsZXIgc3RhdGUNCj4gKyAqIHRyYW5zaXRpb25zIOKA lCBzdG9wL3N0YXJ0L2tpbGwgZmxhZyBjaGFuZ2VzLCBieXBhc3MtcGF0aCBkZWNpc2lvbnMsIGFu ZCB0aGUNCj4gKyAqIHJ1bi1qb2Igd29ya2VyIOKAlCBzbyBpdCBtdXN0IGJlIGhlbGQgd2hlbiB0 aGUgZHJpdmVyIG5lZWRzIHRvIGF0b21pY2FsbHkNCj4gKyAqIGluc3BlY3Qgb3IgbW9kaWZ5IHF1 ZXVlIHN0YXRlIGluIHJlbGF0aW9uIHRvIGpvYiBzdWJtaXNzaW9uLg0KPiArICoNCj4gKyAqICoq V2hlbiB0byB1c2UqKg0KPiArICoNCj4gKyAqIERyaXZlcnMgdGhhdCBzZXQgJURSTV9ERVBfUVVF VUVfRkxBR1NfQllQQVNTX1NVUFBPUlRFRCBhbmQgd2lzaCB0bw0KPiArICogc2VyaWFsaXNlIHRo ZWlyIG93biBzdWJtaXQgd29yayBhZ2FpbnN0IHRoZSBieXBhc3MgcGF0aCBtdXN0IGFjcXVpcmUg dGhpcw0KPiArICogZ3VhcmQuICBXaXRob3V0IGl0LCBhIGNvbmN1cnJlbnQgY2FsbGVyIG9mIGRy bV9kZXBfam9iX3B1c2goKSBjb3VsZCB0YWtlDQo+ICsgKiB0aGUgYnlwYXNzIHBhdGggYW5kIGNh bGwgb3BzLT5ydW5fam9iKCkgaW5saW5lIGJldHdlZW4gdGhlIGRyaXZlcidzDQo+ICsgKiBlbGln aWJpbGl0eSBjaGVjayBhbmQgaXRzIGNvcnJlc3BvbmRpbmcgYWN0aW9uLCBwcm9kdWNpbmcgYSBy YWNlLg0KPiArICoNCj4gKyAqICoqQ29uc3RyYWludDogb25seSBmcm9tIHN1Ym1pdF93cSB3b3Jr ZXIgY29udGV4dCoqDQo+ICsgKg0KPiArICogVGhpcyBndWFyZCBtdXN0IG9ubHkgYmUgYWNxdWly ZWQgZnJvbSBhIHdvcmsgaXRlbSBydW5uaW5nIG9uIHRoZSBxdWV1ZSdzDQo+ICsgKiBzdWJtaXQg d29ya3F1ZXVlIChAcS0+c2NoZWQuc3VibWl0X3dxKSBieSBkcml2ZXJzLg0KPiArICoNCj4gKyAq IENvbnRleHQ6IFByb2Nlc3MgY29udGV4dCBvbmx5OyBtdXN0IGJlIGNhbGxlZCBmcm9tIHN1Ym1p dF93cSB3b3JrIGJ5DQo+ICsgKiBkcml2ZXJzLg0KPiArICovDQo+ICsjZGVmaW5lIGRybV9kZXBf cXVldWVfc2NoZWRfZ3VhcmQoX19xKSBcDQo+ICsgICAgICAgZ3VhcmQobXV0ZXgpKCYoX19xKS0+ c2NoZWQubG9jaykNCj4gKw0KPiAraW50IGRybV9kZXBfcXVldWVfaW5pdChzdHJ1Y3QgZHJtX2Rl cF9xdWV1ZSAqcSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgZHJtX2Rl cF9xdWV1ZV9pbml0X2FyZ3MgKmFyZ3MpOw0KPiArdm9pZCBkcm1fZGVwX3F1ZXVlX2Zpbmkoc3Ry dWN0IGRybV9kZXBfcXVldWUgKnEpOw0KPiArdm9pZCBkcm1fZGVwX3F1ZXVlX3JlbGVhc2Uoc3Ry dWN0IGRybV9kZXBfcXVldWUgKnEpOw0KPiArc3RydWN0IGRybV9kZXBfcXVldWUgKmRybV9kZXBf cXVldWVfZ2V0KHN0cnVjdCBkcm1fZGVwX3F1ZXVlICpxKTsNCj4gK2Jvb2wgZHJtX2RlcF9xdWV1 ZV9nZXRfdW5sZXNzX3plcm8oc3RydWN0IGRybV9kZXBfcXVldWUgKnEpOw0KPiArdm9pZCBkcm1f ZGVwX3F1ZXVlX3B1dChzdHJ1Y3QgZHJtX2RlcF9xdWV1ZSAqcSk7DQo+ICt2b2lkIGRybV9kZXBf cXVldWVfc3RvcChzdHJ1Y3QgZHJtX2RlcF9xdWV1ZSAqcSk7DQo+ICt2b2lkIGRybV9kZXBfcXVl dWVfc3RhcnQoc3RydWN0IGRybV9kZXBfcXVldWUgKnEpOw0KPiArdm9pZCBkcm1fZGVwX3F1ZXVl X2tpbGwoc3RydWN0IGRybV9kZXBfcXVldWUgKnEpOw0KPiArdm9pZCBkcm1fZGVwX3F1ZXVlX3Ry aWdnZXJfdGltZW91dChzdHJ1Y3QgZHJtX2RlcF9xdWV1ZSAqcSk7DQo+ICt2b2lkIGRybV9kZXBf cXVldWVfY2FuY2VsX3Rkcl9zeW5jKHN0cnVjdCBkcm1fZGVwX3F1ZXVlICpxKTsNCj4gK3ZvaWQg ZHJtX2RlcF9xdWV1ZV9yZXN1bWVfdGltZW91dChzdHJ1Y3QgZHJtX2RlcF9xdWV1ZSAqcSk7DQo+ ICtib29sIGRybV9kZXBfcXVldWVfd29ya19lbnF1ZXVlKHN0cnVjdCBkcm1fZGVwX3F1ZXVlICpx LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB3b3JrX3N0cnVjdCAq d29yayk7DQo+ICtib29sIGRybV9kZXBfcXVldWVfaXNfc3RvcHBlZChzdHJ1Y3QgZHJtX2RlcF9x dWV1ZSAqcSk7DQo+ICtib29sIGRybV9kZXBfcXVldWVfaXNfa2lsbGVkKHN0cnVjdCBkcm1fZGVw X3F1ZXVlICpxKTsNCj4gK2Jvb2wgZHJtX2RlcF9xdWV1ZV9pc19pbml0aWFsaXplZChzdHJ1Y3Qg ZHJtX2RlcF9xdWV1ZSAqcSk7DQo+ICt2b2lkIGRybV9kZXBfcXVldWVfc2V0X3N0b3BwZWQoc3Ry dWN0IGRybV9kZXBfcXVldWUgKnEpOw0KPiArdW5zaWduZWQgaW50IGRybV9kZXBfcXVldWVfcmVm Y291bnQoY29uc3Qgc3RydWN0IGRybV9kZXBfcXVldWUgKnEpOw0KPiArbG9uZyBkcm1fZGVwX3F1 ZXVlX3RpbWVvdXQoY29uc3Qgc3RydWN0IGRybV9kZXBfcXVldWUgKnEpOw0KPiArc3RydWN0IHdv cmtxdWV1ZV9zdHJ1Y3QgKmRybV9kZXBfcXVldWVfc3VibWl0X3dxKHN0cnVjdCBkcm1fZGVwX3F1 ZXVlICpxKTsNCj4gK3N0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpkcm1fZGVwX3F1ZXVlX3RpbWVv dXRfd3Eoc3RydWN0IGRybV9kZXBfcXVldWUgKnEpOw0KPiArDQo+ICsvKiBKb2IgQVBJICovDQo+ ICsNCj4gKy8qKg0KPiArICogRFJNX0RFUF9KT0JfRkVOQ0VfUFJFQUxMT0MgLSBzZW50aW5lbCB2 YWx1ZSBmb3IgcHJlLWFsbG9jYXRpbmcgYSBkZXBlbmRlbmN5IHNsb3QNCj4gKyAqDQo+ICsgKiBQ YXNzIHRoaXMgdG8gZHJtX2RlcF9qb2JfYWRkX2RlcGVuZGVuY3koKSBpbnN0ZWFkIG9mIGEgcmVh bCBmZW5jZSB0bw0KPiArICogcHJlLWFsbG9jYXRlIGEgc2xvdCBpbiB0aGUgam9iJ3MgZGVwZW5k ZW5jeSB4YXJyYXkgZHVyaW5nIHRoZSBwcmVwYXJhdGlvbg0KPiArICogcGhhc2UgKHdoZXJlIEdG UF9LRVJORUwgaXMgYXZhaWxhYmxlKS4gIFRoZSByZXR1cm5lZCB4YXJyYXkgaW5kZXggaWRlbnRp Zmllcw0KPiArICogdGhlIHNsb3QuICBDYWxsIGRybV9kZXBfam9iX3JlcGxhY2VfZGVwZW5kZW5j eSgpIGxhdGVyIOKAlCBpbnNpZGUgYQ0KPiArICogZG1hX2ZlbmNlX2JlZ2luX3NpZ25hbGxpbmco KSByZWdpb24gaWYgbmVlZGVkIOKAlCB0byBzd2FwIGluIHRoZSByZWFsIGZlbmNlDQo+ICsgKiB3 aXRob3V0IGZ1cnRoZXIgYWxsb2NhdGlvbi4NCj4gKyAqDQo+ICsgKiBUaGlzIHNlbnRpbmVsIGlz IG5ldmVyIHRyZWF0ZWQgYXMgYSBkbWFfZmVuY2U7IGl0IGNhcnJpZXMgbm8gcmVmZXJlbmNlIGNv dW50DQo+ICsgKiBhbmQgbXVzdCBub3QgYmUgcGFzc2VkIHRvIGRtYV9mZW5jZV9wdXQoKS4gIEl0 IGlzIG9ubHkgdmFsaWQgYXMgYW4gYXJndW1lbnQNCj4gKyAqIHRvIGRybV9kZXBfam9iX2FkZF9k ZXBlbmRlbmN5KCkgYW5kIGFzIHRoZSBleHBlY3RlZCBzdG9yZWQgdmFsdWUgY2hlY2tlZCBieQ0K PiArICogZHJtX2RlcF9qb2JfcmVwbGFjZV9kZXBlbmRlbmN5KCkuDQo+ICsgKi8NCj4gKyNkZWZp bmUgRFJNX0RFUF9KT0JfRkVOQ0VfUFJFQUxMT0MgICAgICgoc3RydWN0IGRtYV9mZW5jZSAqKS0x KQ0KPiArDQo+ICtpbnQgZHJtX2RlcF9qb2JfaW5pdChzdHJ1Y3QgZHJtX2RlcF9qb2IgKmpvYiwN Cj4gKyAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGRybV9kZXBfam9iX2luaXRfYXJn cyAqYXJncyk7DQo+ICtzdHJ1Y3QgZHJtX2RlcF9qb2IgKmRybV9kZXBfam9iX2dldChzdHJ1Y3Qg ZHJtX2RlcF9qb2IgKmpvYik7DQo+ICt2b2lkIGRybV9kZXBfam9iX3B1dChzdHJ1Y3QgZHJtX2Rl cF9qb2IgKmpvYik7DQo+ICt2b2lkIGRybV9kZXBfam9iX2FybShzdHJ1Y3QgZHJtX2RlcF9qb2Ig KmpvYik7DQo+ICt2b2lkIGRybV9kZXBfam9iX3B1c2goc3RydWN0IGRybV9kZXBfam9iICpqb2Ip Ow0KPiAraW50IGRybV9kZXBfam9iX2FkZF9kZXBlbmRlbmN5KHN0cnVjdCBkcm1fZGVwX2pvYiAq am9iLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRtYV9mZW5jZSAq ZmVuY2UpOw0KPiArdm9pZCBkcm1fZGVwX2pvYl9yZXBsYWNlX2RlcGVuZGVuY3koc3RydWN0IGRy bV9kZXBfam9iICpqb2IsIHUzMiBpbmRleCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc3RydWN0IGRtYV9mZW5jZSAqZmVuY2UpOw0KPiAraW50IGRybV9kZXBfam9iX2Fk ZF9zeW5jb2JqX2RlcGVuZGVuY3koc3RydWN0IGRybV9kZXBfam9iICpqb2IsDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSwgdTMy IGhhbmRsZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyIHBv aW50KTsNCj4gK2ludCBkcm1fZGVwX2pvYl9hZGRfcmVzdl9kZXBlbmRlbmNpZXMoc3RydWN0IGRy bV9kZXBfam9iICpqb2IsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c3RydWN0IGRtYV9yZXN2ICpyZXN2LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGVudW0gZG1hX3Jlc3ZfdXNhZ2UgdXNhZ2UpOw0KPiAraW50IGRybV9kZXBfam9iX2Fk ZF9pbXBsaWNpdF9kZXBlbmRlbmNpZXMoc3RydWN0IGRybV9kZXBfam9iICpqb2IsDQo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcm1fZ2VtX29iamVj dCAqb2JqLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29s IHdyaXRlKTsNCj4gK2Jvb2wgZHJtX2RlcF9qb2JfaXNfc2lnbmFsZWQoc3RydWN0IGRybV9kZXBf am9iICpqb2IpOw0KPiArYm9vbCBkcm1fZGVwX2pvYl9pc19maW5pc2hlZChzdHJ1Y3QgZHJtX2Rl cF9qb2IgKmpvYik7DQo+ICtib29sIGRybV9kZXBfam9iX2ludmFsaWRhdGVfam9iKHN0cnVjdCBk cm1fZGVwX2pvYiAqam9iLCBpbnQgdGhyZXNob2xkKTsNCj4gK3N0cnVjdCBkbWFfZmVuY2UgKmRy bV9kZXBfam9iX2ZpbmlzaGVkX2ZlbmNlKHN0cnVjdCBkcm1fZGVwX2pvYiAqam9iKTsNCj4gKw0K PiArLyoqDQo+ICsgKiBzdHJ1Y3QgZHJtX2RlcF9xdWV1ZV9wZW5kaW5nX2pvYl9pdGVyIC0gaXRl cmF0b3Igc3RhdGUgZm9yDQo+ICsgKiAgIGRybV9kZXBfcXVldWVfZm9yX2VhY2hfcGVuZGluZ19q b2IoKQ0KPiArICogQHE6IHF1ZXVlIGJlaW5nIGl0ZXJhdGVkDQo+ICsgKi8NCj4gK3N0cnVjdCBk cm1fZGVwX3F1ZXVlX3BlbmRpbmdfam9iX2l0ZXIgew0KPiArICAgICAgIHN0cnVjdCBkcm1fZGVw X3F1ZXVlICpxOw0KPiArfTsNCj4gKw0KPiArLyogRHJpdmVycyBzaG91bGQgbmV2ZXIgY2FsbCB0 aGlzIGRpcmVjdGx5ICovDQo+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCBkcm1fZGVwX3F1ZXVlX3Bl bmRpbmdfam9iX2l0ZXINCj4gK19fZHJtX2RlcF9xdWV1ZV9wZW5kaW5nX2pvYl9pdGVyX2JlZ2lu KHN0cnVjdCBkcm1fZGVwX3F1ZXVlICpxKQ0KPiArew0KPiArICAgICAgIHN0cnVjdCBkcm1fZGVw X3F1ZXVlX3BlbmRpbmdfam9iX2l0ZXIgaXRlciA9IHsNCj4gKyAgICAgICAgICAgICAgIC5xID0g cSwNCj4gKyAgICAgICB9Ow0KPiArDQo+ICsgICAgICAgV0FSTl9PTighZHJtX2RlcF9xdWV1ZV9p c19zdG9wcGVkKHEpKTsNCj4gKyAgICAgICByZXR1cm4gaXRlcjsNCj4gK30NCj4gKw0KPiArLyog RHJpdmVycyBzaG91bGQgbmV2ZXIgY2FsbCB0aGlzIGRpcmVjdGx5ICovDQo+ICtzdGF0aWMgaW5s aW5lIHZvaWQNCj4gK19fZHJtX2RlcF9xdWV1ZV9wZW5kaW5nX2pvYl9pdGVyX2VuZChzdHJ1Y3Qg ZHJtX2RlcF9xdWV1ZV9wZW5kaW5nX2pvYl9pdGVyIGl0ZXIpDQo+ICt7DQo+ICsgICAgICAgV0FS Tl9PTighZHJtX2RlcF9xdWV1ZV9pc19zdG9wcGVkKGl0ZXIucSkpOw0KPiArfQ0KPiArDQo+ICsv KiBjbGFuZy1mb3JtYXQgb2ZmICovDQo+ICtERUZJTkVfQ0xBU1MoZHJtX2RlcF9xdWV1ZV9wZW5k aW5nX2pvYl9pdGVyLA0KPiArICAgICAgICAgICAgc3RydWN0IGRybV9kZXBfcXVldWVfcGVuZGlu Z19qb2JfaXRlciwNCj4gKyAgICAgICAgICAgIF9fZHJtX2RlcF9xdWV1ZV9wZW5kaW5nX2pvYl9p dGVyX2VuZChfVCksDQo+ICsgICAgICAgICAgICBfX2RybV9kZXBfcXVldWVfcGVuZGluZ19qb2Jf aXRlcl9iZWdpbihfX3EpLA0KPiArICAgICAgICAgICAgc3RydWN0IGRybV9kZXBfcXVldWUgKl9f cSk7DQo+ICsvKiBjbGFuZy1mb3JtYXQgb24gKi8NCj4gK3N0YXRpYyBpbmxpbmUgdm9pZCAqDQo+ ICtjbGFzc19kcm1fZGVwX3F1ZXVlX3BlbmRpbmdfam9iX2l0ZXJfbG9ja19wdHIoDQo+ICsgICAg ICAgY2xhc3NfZHJtX2RlcF9xdWV1ZV9wZW5kaW5nX2pvYl9pdGVyX3QgKl9UKQ0KPiAreyByZXR1 cm4gX1Q7IH0NCj4gKyNkZWZpbmUgY2xhc3NfZHJtX2RlcF9xdWV1ZV9wZW5kaW5nX2pvYl9pdGVy X2lzX2NvbmRpdGlvbmFsIGZhbHNlDQo+ICsNCj4gKy8qKg0KPiArICogZHJtX2RlcF9xdWV1ZV9m b3JfZWFjaF9wZW5kaW5nX2pvYigpIC0gaXRlcmF0ZSBvdmVyIGFsbCBwZW5kaW5nIGpvYnMNCj4g KyAqICAgaW4gYSBxdWV1ZQ0KPiArICogQF9fam9iOiBsb29wIGN1cnNvciwgYSAmc3RydWN0IGRy bV9kZXBfam9iIHBvaW50ZXINCj4gKyAqIEBfX3E6ICZzdHJ1Y3QgZHJtX2RlcF9xdWV1ZSB0byBp dGVyYXRlDQo+ICsgKg0KPiArICogSXRlcmF0ZXMgb3ZlciBldmVyeSBqb2IgY3VycmVudGx5IG9u IEBfX3EtPmpvYi5wZW5kaW5nLiBUaGUgcXVldWUgbXVzdCBiZQ0KPiArICogc3RvcHBlZCAoZHJt X2RlcF9xdWV1ZV9zdG9wKCkgY2FsbGVkKSBiZWZvcmUgdXNpbmcgdGhpcyBpdGVyYXRvcjsgYSBX QVJOX09ODQo+ICsgKiBmaXJlcyBhdCB0aGUgc3RhcnQgYW5kIGVuZCBvZiB0aGUgc2NvcGUgaWYg aXQgaXMgbm90Lg0KPiArICoNCj4gKyAqIENvbnRleHQ6IEFueSBjb250ZXh0Lg0KPiArICovDQo+ ICsjZGVmaW5lIGRybV9kZXBfcXVldWVfZm9yX2VhY2hfcGVuZGluZ19qb2IoX19qb2IsIF9fcSkg ICAgICAgICAgICAgICAgIFwNCj4gKyAgICAgICBzY29wZWRfZ3VhcmQoZHJtX2RlcF9xdWV1ZV9w ZW5kaW5nX2pvYl9pdGVyLCAoX19xKSkgICAgICAgICAgICAgXA0KPiArICAgICAgICAgICAgICAg bGlzdF9mb3JfZWFjaF9lbnRyeSgoX19qb2IpLCAmKF9fcSktPmpvYi5wZW5kaW5nLCBwZW5kaW5n X2xpbmspDQo+ICsNCj4gKyNlbmRpZg0KPiAtLQ0KPiAyLjM0LjENCj4NCg0K