From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id D8EDAA0543; Tue, 25 Oct 2022 04:14:22 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 74CF8410D3; Tue, 25 Oct 2022 04:14:22 +0200 (CEST) Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by mails.dpdk.org (Postfix) with ESMTP id 2D10C40DF7 for ; Tue, 25 Oct 2022 04:14:20 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1666664061; x=1698200061; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=MZ4aM0RyktB1e51s7V5lCdYuqRdlFCFCayFWcfaF85c=; b=d24+//wMGhmIBm4GazFi7ABDNXFAvLxSIveBtR8/AAFVKSUTJNyewCCd wZLbyg8UhySdfg3YhbW0uEKOemJxRzb+ZylvWc7Frgk/qGVriiTXnNs4Z HapQBgQaRDW8OrZ82c3hYeyV8tI2x0l2xVezMPzMpIzB+/oZq6DR3jepo qvtO/c+MUXQiI0XRmXturrUfmtU3nhFmKkXLUtnE77F8awpQB5AkPXtdo Amgh6QV3oqGAaFSYccGREIm13+9lhWKnQvFCBdbLWjE1I+fKgIqBempzp ovb3L0T5ZkIKX0fmCbxEQjSkuqJqDovCUmj0g9LHpkXUI6PLMTsIROWQL A==; X-IronPort-AV: E=McAfee;i="6500,9779,10510"; a="334159685" X-IronPort-AV: E=Sophos;i="5.95,210,1661842800"; d="scan'208";a="334159685" Received: from orsmga005.jf.intel.com ([10.7.209.41]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Oct 2022 19:14:19 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6500,9779,10510"; a="806505995" X-IronPort-AV: E=Sophos;i="5.95,210,1661842800"; d="scan'208";a="806505995" Received: from orsmsx603.amr.corp.intel.com ([10.22.229.16]) by orsmga005.jf.intel.com with ESMTP; 24 Oct 2022 19:14:18 -0700 Received: from orsmsx610.amr.corp.intel.com (10.22.229.23) by ORSMSX603.amr.corp.intel.com (10.22.229.16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31; Mon, 24 Oct 2022 19:14:17 -0700 Received: from ORSEDG601.ED.cps.intel.com (10.7.248.6) by orsmsx610.amr.corp.intel.com (10.22.229.23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31 via Frontend Transport; Mon, 24 Oct 2022 19:14:17 -0700 Received: from NAM11-BN8-obe.outbound.protection.outlook.com (104.47.58.169) by edgegateway.intel.com (134.134.137.102) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2375.31; Mon, 24 Oct 2022 19:14:17 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Q75IIDaKS0pDYXYpakH1ELEQSB7Mtbqh2mhTgNjOiNgrguvzfPqfbBXGaOeNVCee2gx9dGkNY27ilho/bliH49aWg/mved7U3jr+d+X+OU0FHZrgfhAta7MXYJHI5VR8BPlSZscTYERtq+ZAXnaFLjIItRI4Kmwu9D0eXKF8JGaGlRgxYiEPyWm7kkvQ74TU/jF64ijSAuaYia1PEbsjpaCEa8ETjHqmOOrBfUAOFJ3EuDZGSzIhBywevMUHrSK8kBA0GUojPYVzkm+9nXlH137HGjpmub7Jh25QmyleGq33iQ6TGZ6KNHmU4LrYADq61GjLEHRUH9BqBipaLLxvqg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=MZ4aM0RyktB1e51s7V5lCdYuqRdlFCFCayFWcfaF85c=; b=SNzHkWluq5p3X5Yc137ygJ90VX5XMUWqeJjzVCsbZqzac6gInRQdJD1adwC66oZWFLOC91kIgduQA9zkIs3G36nznOWyGdupIsGoH5F3ysmMLN+L70bI3UM3T+9qEZ4rr+WIbVVdpFLJAdtDg5CM23KE0AwnhrHkAnDfveCxOsUoB3hU85oBy8+H2Fe0jRUdLPgCuFkcbprXSoKPyI+JjAlmTf0VrqJ3MckBEOvTl4qRJLkaO3bhxaBYeUKN9R7fLL05PZ2gRKmPoCHQCTOjqO5HwzCb0N5Ry0Sg2cxoPK0TT78sG5wCHDB3WX3mslK+YmW/f7Wu3JreBykf1QcGNQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Received: from CY5PR11MB6487.namprd11.prod.outlook.com (2603:10b6:930:31::17) by MN2PR11MB4616.namprd11.prod.outlook.com (2603:10b6:208:26f::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5746.28; Tue, 25 Oct 2022 02:14:15 +0000 Received: from CY5PR11MB6487.namprd11.prod.outlook.com ([fe80::d550:5776:e363:748d]) by CY5PR11MB6487.namprd11.prod.outlook.com ([fe80::d550:5776:e363:748d%5]) with mapi id 15.20.5746.021; Tue, 25 Oct 2022 02:14:14 +0000 From: "Hu, Jiayu" To: Maxime Coquelin , "Wang, YuanX" , "Xia, Chenbo" CC: "dev@dpdk.org" , "Jiang, Cheng1" , "Ma, WenwuX" , "He, Xingguang" Subject: RE: [PATCH v5] net/vhost: support asynchronous data path Thread-Topic: [PATCH v5] net/vhost: support asynchronous data path Thread-Index: AQHY53p0yvmzJTACnUKSC8wIvxSP264dQUUAgAEYdLA= Date: Tue, 25 Oct 2022 02:14:14 +0000 Message-ID: References: <20220814150636.2260317-1-jiayu.hu@intel.com> <20221024151434.1051251-1-yuanx.wang@intel.com> <9336e30f-7daf-3113-cc1d-d9be4269ec3d@redhat.com> In-Reply-To: <9336e30f-7daf-3113-cc1d-d9be4269ec3d@redhat.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-reaction: no-action dlp-version: 11.6.500.17 dlp-product: dlpe-windows authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: CY5PR11MB6487:EE_|MN2PR11MB4616:EE_ x-ms-office365-filtering-correlation-id: 7465eafb-0617-47ef-71f9-08dab62e9d36 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: pEIs3RXf/uGK52yUkpPvRhuyCZ2JjTqJpMgRLFVOoIEOtksplUU3avfoPZrQywvuO70ygh5n8WG1fCmoCVD+MglYmCfXSuElaq8xAZ7ZdgODq/du4nduYT7nMSMsH1S9stE40ym/b2NslH32BaYB/pMegSq8Bzl5+V05PSgIrvLYSIr/Zhdy1KhzSkQoc2ArZ/icF7cFXeuKahZFerVQHLVRVuu3rjzLuhxnqi3v/ciBzbobxpA57C2zPOcFo1rhMDy/oPMQAY2XTunYOmywuKFu1gBIhIWbJ5ubqEVA8wSlZ1flg30kPduEnGySl1n9lfQYc6J9bnoAht6oFBNlUQbLV7Snp5x5SZgcKpLf0eN69RSqrbjKPC8+p8YCDb79R65v0NBOq/r9kHJA33Aa+5tEoUC2KGWwbjmQ8HOlCowZAVGWUBnapZNJO10n1+iKcZBx/YCC5nc35mlpBila1EQIXuGz0Lj+OblrVh6RwsZesB+pQ2MxxgVEVgg9tsNnFo8PA3LuGRpWS8wz0MOGzc/tBGlKEyVhWj5D2/Lfr/BBenx/63C0UXtMP4xvIXk+rG7ZlzU8R5hbJt5ZYAkoha1RBxHVFpNbpQics6tXxvYtUOsMjnmTX8dt4S46kxPXweskjAaEfZp9YjVMvlrF+nd8wl1yO0VWK8O+t4dqaDJyn9cpATK6Q8fCzzs/wx8nC+oIO/j3kk6oY1F++kNxNJkjRgIF9GQtliJRJTV5YAKEl3NUpyCgUvbRrlpyzMW7a05TuXMGHAM6YGgUdu5/Fg== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CY5PR11MB6487.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230022)(346002)(39860400002)(376002)(396003)(366004)(136003)(451199015)(55016003)(478600001)(71200400001)(54906003)(110136005)(316002)(6636002)(107886003)(86362001)(76116006)(66946007)(66476007)(66556008)(66446008)(4326008)(8676002)(64756008)(33656002)(7696005)(6506007)(53546011)(26005)(186003)(38070700005)(2906002)(122000001)(83380400001)(9686003)(41300700001)(5660300002)(30864003)(38100700002)(82960400001)(52536014)(8936002)(579004)(559001); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?U1REN2xtOGs1czJ6a3FMbnZ3cGpadXBYcVB5SWtua1QxT3hDMFJGZ0N5MFVY?= =?utf-8?B?VTMwME0zMUZ1d3dPbytEVWRNRUZaY0g1ejI2a2g4OEVvcXozdTByR3R1Q2w1?= =?utf-8?B?NFdMSy9aNnV1RVBQanlrR0hCR3R3cEgrd1lDT3lGditmQS9NNHp3WnNMQ2lm?= =?utf-8?B?QkRib1N3ZFA0a0pQalBtYlhodzdaS05nMzlhY294MTFPU3N4MmtEMjR2S285?= =?utf-8?B?L0RKc3JoSjFpSC92UU1EcDM5NVI5OUxIVGsvdWcyY3grWTN1R3BHWTkwQ3ZO?= =?utf-8?B?a2hrMEdlYTdEOFpNUndUY0lXQlZraUFuQVU5aTl2MHkyVlFJYVRJR3AvNnFU?= =?utf-8?B?RlIwQ1YxNEtUU1BIWjRVMXh1dEdkSjNkcTkzSDhySW8wUkhWZVpzREJ1dFZn?= =?utf-8?B?T01BUDRxamd3V2RndmdCSFZyTTZUQUQ2LzB3OVp5TmlGZFRwbWF5YVpCNVps?= =?utf-8?B?cWhWNjhwY3hFcWI1WTZSWGJ4TGtWaWk3Ti9NaDM0OGswWUVkcnNZK2JJK2NU?= =?utf-8?B?VVlsekRHbE1jRTZGbzVoRWdGL240d2x2OXZqd1Q3cE5CbWloaldHMDRGMlZo?= =?utf-8?B?V0wxdTM4MVFrMG9JUEtydk9Sck82T1lxNFlVaUV0cEFLR2VYV1RqS21nYVln?= =?utf-8?B?ZE53OHcweU80YXBJRldOcTVXOE1HbFUvMmdPSHFDU1FHcVRQVFJUaWw0Zysx?= =?utf-8?B?WWd5KzRwVGZoT2tIMS84ZmNjYmovUEJ6VUFxeFpSdE9hLzhIa2hqZGhVdVNC?= =?utf-8?B?YTFjT3l1cE5sc0Z5THRicDZ1SzRxb2JmWFZQSGZuNkdSdmFsV1BoaXQxaWlk?= =?utf-8?B?UWIzbEdKcDNpTHF0Z3hCSHk4MEVmdURhbkZpcEZzT2RkZDZ1OGpCTDgvMVQ3?= =?utf-8?B?ellqNDdHVVFMblZIcm9wUEhxUW16VStLNlJicHBrbCtyN1N5aWtEUnROWWNt?= =?utf-8?B?Vm55NnBtNWF4N21oMjRYdjFRL1F3Rjl4ZDRUd3J0UFRxL1BlUWhxdk4wZlRl?= =?utf-8?B?dHB2M0NnNUk5cUxBQ3J6S3h1VG4wakxrNmg1VWpGUmttMjY5SHkxWmRWdmk0?= =?utf-8?B?aE1JL0JOaVZ6QWdVS214OUxuVnNpOEJLdUhDbnhCQkVDK29FMkhLYjdqaEFX?= =?utf-8?B?K2xaUEpEUjV0TjRWOWNUQ010cDZWWGd5VWlhYzR4RUxBd2lkeVNZcFlrQkNR?= =?utf-8?B?eE0wSWlibUpNd3dIQ0R5T3JIamRURzZMVTFVTU1oREphSU5qTVY2TnZ0Rnhl?= =?utf-8?B?YnFIQXQ3dkprTEM4T0lzME9ZN1pFMXBzM3A1YUYwcDlVaXJCZzdZUHoyT0FF?= =?utf-8?B?eHBodWZ6dDF1OTFwQmJoU1hYaEtIZkEySDdEK2tyc1ZSaGtSZUxhby8vOWdQ?= =?utf-8?B?Qk1WWXF1OU1KNmNWL0dXSm84V1dsdDF6ZTBFQVp5UnYxcVgxRkFndTRjaUFt?= =?utf-8?B?aU8vSjlRek1jOFYwR0JEdFBna0JUd0pSc3hOa3FKcXRyUUVNbm5MejRsSFQy?= =?utf-8?B?SlloN1lpNHBXaloxdzlrQm9DRWhibG50UGtSVHFiT3c2SzdFeCsrNDdsRGlU?= =?utf-8?B?QmhPOXZHU3JrSW85YVE3c1FEZkk2V1dPWlFTRjViYUlhR1dPazVpVEluODhl?= =?utf-8?B?TXJKVjFxbjJLcEpJUHJEVG9jL2ZkaURyazI5ZmVtMzNJOGZhMEZBRHBDVjht?= =?utf-8?B?U05FQmNVRGdqc1BSY2g4ekJCbk56ekduK2ZXUHcwcWk0V2FNWVpiY242MUph?= =?utf-8?B?eDBKV09tb3pTaldrZXBiMTQ4MzZGL1JaY0RkNGUvaTN3aDlYV1U5cFFIVFR0?= =?utf-8?B?VnZzMm51NzJjcEtUNW1CbDBleCttczlWekxNSlRSd1ZMQWtOM3VkWG01Q3Ay?= =?utf-8?B?QkZOMGJEc28xS3h1WXlZTmZxRkdSemh5MG1kZjJhTDI3WjJYUTk0VWIvYTQ4?= =?utf-8?B?TEkwN3N0Mkk5VEQxOGR2aHQxRytvRmhTMDNkRE1qelhnK29sR3lMZG1rOVRM?= =?utf-8?B?d3Z5ZW43U214R1NkSFg3c1AydXNzNHNNa2ovT0h0YzNUY0RQS0ZxSkEzREty?= =?utf-8?B?N2dQd0FjNWpUOW1VeU1CTHBQdXZ4UG5GeG9YSWszMlRiOU5rUHczZm5QcWlr?= =?utf-8?Q?QZjBhBzwoK1cnbHbAAhIt7V7M?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CY5PR11MB6487.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7465eafb-0617-47ef-71f9-08dab62e9d36 X-MS-Exchange-CrossTenant-originalarrivaltime: 25 Oct 2022 02:14:14.8375 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: bsxg06V9DT9cMj6S2owraQG7Rghtj++XldcyKs3UV9Lxt4JdNaDq00XlRaw9XCJ2mRG3q4m8nZ2trLXhEXZolA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR11MB4616 X-OriginatorOrg: intel.com X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org SGkgTWF4aW1lLA0KDQpUaGFua3MgZm9yIHlvdXIgY29tbWVudHMuIFBsZWFzZSBzZWUgcmVwbGll cyBpbmxpbmUuDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogTWF4aW1l IENvcXVlbGluIDxtYXhpbWUuY29xdWVsaW5AcmVkaGF0LmNvbT4NCj4gU2VudDogTW9uZGF5LCBP Y3RvYmVyIDI0LCAyMDIyIDU6MDggUE0NCj4gVG86IFdhbmcsIFl1YW5YIDx5dWFueC53YW5nQGlu dGVsLmNvbT47IFhpYSwgQ2hlbmJvDQo+IDxjaGVuYm8ueGlhQGludGVsLmNvbT4NCj4gQ2M6IGRl dkBkcGRrLm9yZzsgSHUsIEppYXl1IDxqaWF5dS5odUBpbnRlbC5jb20+OyBKaWFuZywgQ2hlbmcx DQo+IDxjaGVuZzEuamlhbmdAaW50ZWwuY29tPjsgTWEsIFdlbnd1WCA8d2Vud3V4Lm1hQGludGVs LmNvbT47IEhlLA0KPiBYaW5nZ3VhbmcgPHhpbmdndWFuZy5oZUBpbnRlbC5jb20+DQo+IFN1Ympl Y3Q6IFJlOiBbUEFUQ0ggdjVdIG5ldC92aG9zdDogc3VwcG9ydCBhc3luY2hyb25vdXMgZGF0YSBw YXRoDQo+IA0KPiBIaSBZdWFuLA0KPiANCj4gUGxlYXNlIGZpeCB5b3VyIHN5c3RlbSBmb3IgdGhl IG5leHQgdGltZXMsIHlvdXIgcGF0Y2ggaXMgZGF0ZWQgc2V2ZXJhbCBob3VycyBpbg0KPiB0aGUg ZnV0dXJlLg0KPiANCj4gT24gMTAvMjQvMjIgMTc6MTQsIFl1YW4gV2FuZyB3cm90ZToNCj4gPiBW aG9zdCBhc3luY2hyb25vdXMgZGF0YS1wYXRoIG9mZmxvYWRzIHBhY2tldCBjb3B5IGZyb20gdGhl IENQVSB0byB0aGUNCj4gPiBETUEgZW5naW5lLiBBcyBhIHJlc3VsdCwgbGFyZ2UgcGFja2V0IGNv cHkgY2FuIGJlIGFjY2VsZXJhdGVkIGJ5IHRoZQ0KPiA+IERNQSBlbmdpbmUsIGFuZCB2aG9zdCBj YW4gZnJlZSBDUFUgY3ljbGVzIGZvciBoaWdoZXIgbGV2ZWwNCj4gDQo+IFZob3N0DQo+IA0KPiA+ IGZ1bmN0aW9ucy4NCj4gPg0KPiA+IEluIHRoaXMgcGF0Y2gsIHdlIGVuYWJsZSBhc3luY2hyb25v dXMgZGF0YS1wYXRoIGZvciB2aG9zdHBtZC4NCj4gPiBBc3luY2hyb25vdXMgZGF0YSBwYXRoIGlz IGVuYWJsZWQgcGVyIHR4L3J4IHF1ZXVlLCBhbmQgdXNlcnMgbmVlZCB0bw0KPiA+IHNwZWNpZnkg dGhlIERNQSBkZXZpY2UgdXNlZCBieSB0aGUgdHgvcnggcXVldWUuIEVhY2ggdHgvcnggcXVldWUg b25seQ0KPiA+IHN1cHBvcnRzIHRvIHVzZSBvbmUgRE1BIGRldmljZSwgYnV0IG9uZSBETUEgZGV2 aWNlIGNhbiBiZSBzaGFyZWQNCj4gYW1vbmcNCj4gPiBtdWx0aXBsZSB0eC9yeCBxdWV1ZXMgb2Yg ZGlmZmVyZW50IHZob3N0IFBNRCBwb3J0cy4NCj4gPg0KPiA+IFR3byBQTUQgcGFyYW1ldGVycyBh cmUgYWRkZWQ6DQo+ID4gLSBkbWFzOglzcGVjaWZ5IHRoZSB1c2VkIERNQSBkZXZpY2UgZm9yIGEg dHgvcnggcXVldWUuDQo+ID4gCShEZWZhdWx0OiBubyBxdWV1ZXMgZW5hYmxlIGFzeW5jaHJvbm91 cyBkYXRhIHBhdGgpDQo+ID4gLSBkbWEtcmluZy1zaXplOiBETUEgcmluZyBzaXplLg0KPiA+IAko RGVmYXVsdDogNDA5NikuDQo+ID4NCj4gPiBIZXJlIGlzIGFuIGV4YW1wbGU6DQo+ID4gLS12ZGV2 DQo+ICdldGhfdmhvc3QwLGlmYWNlPS4vczAsZG1hcz1bdHhxMEAwMDAwOjAwLjAxLjA7cnhxMEAw MDAwOjAwLjAxLjFdLGRtYS0NCj4gcmluZy1zaXplPTQwOTYnDQo+ID4NCj4gPiBTaWduZWQtb2Zm LWJ5OiBKaWF5dSBIdSA8amlheXUuaHVAaW50ZWwuY29tPg0KPiA+IFNpZ25lZC1vZmYtYnk6IFl1 YW4gV2FuZyA8eXVhbngud2FuZ0BpbnRlbC5jb20+DQo+ID4gU2lnbmVkLW9mZi1ieTogV2Vud3Ug TWEgPHdlbnd1eC5tYUBpbnRlbC5jb20+DQo+ID4NCj4gPiAtLS0NCj4gPiB2NToNCj4gPiAtIGFk ZCBlcnJvciBsb2cgb2YgdGVzdHBtZCBjbWQNCj4gPg0KPiA+IHY0Og0KPiA+IC0gYWRkIHR4cSBh bGxvd19xdWV1aW5nIGNoZWNrIG9uIHBvbGwgY29tcGxldGVkDQo+ID4gLSB1bnJlZ2lzdGVyIGRt YSBjaGFubmVsIGluIGRlc3Ryb3lfZGV2aWNlDQo+ID4gLSBhZGQgZG1hIHJpbmcgc2l6ZSBtaW5p bXVtIGxpbWl0DQo+ID4gLSBmaXggc2VydmVyYWwgY29kZSBzdHlsZSBhbmQgbG9nZ2luZyBpc3N1 ZXMNCj4gPg0KPiA+IHYzOg0KPiA+IC0gYWRkIHRoZSBBUEkgdG8gdmVyc2lvbi5tYXANCj4gPg0K PiA+IHYyOg0KPiA+IC0gYWRkIG1pc3NpbmcgZmlsZQ0KPiA+IC0gaGlkZSBhc3luY190eF9wb2xs X2NvbXBsZXRlZA0KPiA+IC0gY2hhbmdlIGRlZmF1bHQgRE1BIHJpbmcgc2l6ZSB0byA0MDk2DQo+ ID4NCj4gPiAtLS0NCj4gPiAgIGRyaXZlcnMvbmV0L3Zob3N0L21lc29uLmJ1aWxkICAgICB8ICAg MSArDQo+ID4gICBkcml2ZXJzL25ldC92aG9zdC9ydGVfZXRoX3Zob3N0LmMgfCA1MTINCj4gKysr KysrKysrKysrKysrKysrKysrKysrKysrKy0tDQo+ID4gICBkcml2ZXJzL25ldC92aG9zdC9ydGVf ZXRoX3Zob3N0LmggfCAgMTUgKw0KPiA+ICAgZHJpdmVycy9uZXQvdmhvc3QvdmVyc2lvbi5tYXAg ICAgIHwgICA3ICsNCj4gPiAgIGRyaXZlcnMvbmV0L3Zob3N0L3Zob3N0X3Rlc3RwbWQuYyB8ICA2 NyArKysrDQo+ID4gICA1IGZpbGVzIGNoYW5nZWQsIDU2OSBpbnNlcnRpb25zKCspLCAzMyBkZWxl dGlvbnMoLSkNCj4gPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC92aG9zdC92aG9z dF90ZXN0cG1kLmMNCj4gPg0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92aG9zdC9tZXNv bi5idWlsZA0KPiA+IGIvZHJpdmVycy9uZXQvdmhvc3QvbWVzb24uYnVpbGQgaW5kZXggZjQ4MWEz YTRiOC4uMjJhMGFiM2E1OCAxMDA2NDQNCj4gPiAtLS0gYS9kcml2ZXJzL25ldC92aG9zdC9tZXNv bi5idWlsZA0KPiA+ICsrKyBiL2RyaXZlcnMvbmV0L3Zob3N0L21lc29uLmJ1aWxkDQo+ID4gQEAg LTksNCArOSw1IEBAIGVuZGlmDQo+ID4NCj4gPiAgIGRlcHMgKz0gJ3Zob3N0Jw0KPiA+ICAgc291 cmNlcyA9IGZpbGVzKCdydGVfZXRoX3Zob3N0LmMnKQ0KPiA+ICt0ZXN0cG1kX3NvdXJjZXMgPSBm aWxlcygndmhvc3RfdGVzdHBtZC5jJykNCj4gPiAgIGhlYWRlcnMgPSBmaWxlcygncnRlX2V0aF92 aG9zdC5oJykNCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdmhvc3QvcnRlX2V0aF92aG9z dC5jDQo+ID4gYi9kcml2ZXJzL25ldC92aG9zdC9ydGVfZXRoX3Zob3N0LmMNCj4gPiBpbmRleCBi MTUyMjc5ZmFjLi44MGNkOWM4ZDkyIDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMvbmV0L3Zob3N0 L3J0ZV9ldGhfdmhvc3QuYw0KPiA+ICsrKyBiL2RyaXZlcnMvbmV0L3Zob3N0L3J0ZV9ldGhfdmhv c3QuYw0KPiA+IEBAIC03LDYgKzcsNyBAQA0KPiA+ICAgI2luY2x1ZGUgPHB0aHJlYWQuaD4NCj4g PiAgICNpbmNsdWRlIDxzdGRib29sLmg+DQo+ID4gICAjaW5jbHVkZSA8c3lzL2Vwb2xsLmg+DQo+ ID4gKyNpbmNsdWRlIDxjdHlwZS5oPg0KPiA+DQo+ID4gICAjaW5jbHVkZSA8cnRlX21idWYuaD4N Cj4gPiAgICNpbmNsdWRlIDxldGhkZXZfZHJpdmVyLmg+DQo+ID4gQEAgLTE4LDYgKzE5LDggQEAN Cj4gPiAgICNpbmNsdWRlIDxydGVfa3ZhcmdzLmg+DQo+ID4gICAjaW5jbHVkZSA8cnRlX3Zob3N0 Lmg+DQo+ID4gICAjaW5jbHVkZSA8cnRlX3NwaW5sb2NrLmg+DQo+ID4gKyNpbmNsdWRlIDxydGVf dmhvc3RfYXN5bmMuaD4NCj4gPiArI2luY2x1ZGUgPHJ0ZV9kbWFkZXYuaD4NCj4gPg0KPiA+ICAg I2luY2x1ZGUgInJ0ZV9ldGhfdmhvc3QuaCINCj4gPg0KPiA+IEBAIC0zNyw4ICs0MCwxNSBAQCBl bnVtIHtWSVJUSU9fUlhRLCBWSVJUSU9fVFhRLCBWSVJUSU9fUU5VTX07DQo+ID4gICAjZGVmaW5l IEVUSF9WSE9TVF9MSU5FQVJfQlVGCQkibGluZWFyLWJ1ZmZlciINCj4gPiAgICNkZWZpbmUgRVRI X1ZIT1NUX0VYVF9CVUYJCSJleHQtYnVmZmVyIg0KPiA+ICAgI2RlZmluZSBFVEhfVkhPU1RfTEVH QUNZX09MX0ZMQUdTCSJsZWdhY3ktb2wtZmxhZ3MiDQo+ID4gKyNkZWZpbmUgRVRIX1ZIT1NUX0RN QV9BUkcJCSJkbWFzIg0KPiA+ICsjZGVmaW5lIEVUSF9WSE9TVF9ETUFfUklOR19TSVpFCQkiZG1h LXJpbmctc2l6ZSINCj4gPiAgICNkZWZpbmUgVkhPU1RfTUFYX1BLVF9CVVJTVCAzMg0KPiA+DQo+ ID4gKyNkZWZpbmUgSU5WQUxJRF9ETUFfSUQJCS0xDQo+ID4gKyNkZWZpbmUgREVGQVVMVF9ETUFf UklOR19TSVpFCTQwOTYNCj4gPiArLyogTWluaW11bSBwYWNrYWdlIHNpemUgaXMgNjQsIGRtYSBy aW5nIHNpemUgc2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiAzMiAqLw0KPiA+ICsjZGVmaW5lIE1JTklN VU1fRE1BX1JJTkdfU0laRQk2NA0KPiANCj4gV2h5PyBJcyB0aGF0IHJlbGF0ZWQgdG8gSW50ZWwg SFc/DQoNCk5vLCBpdCBpcyBmb3IgVENQL1VEUCB0ZXN0cy4gVGhlIG1heCBUQ1AvVURQIGxlbmd0 aCBpcyA2NEtCLCBzbyBvbmUgcGFja2V0DQpuZWVkcyAzMiBwa3RtYnVmcy4gSWYgd2Ugc2V0IERN QSByaW5nIHNpemUgdG8gMzIsIGl0J3MgcG9zc2libGUgdGhhdCB2aG9zdCBjYW5ub3QNCmVucXVl dWUvZGVxdWV1ZSBvbmUgcGFja2V0LCBhcyB0aGVyZSBtYXkgYmUgc29tZSBjb250cm9sIHBhY2tl dHMgbWl4ZWQgYW5kDQpETUEgcmluZyBmdWxsIHdpbGwgY2F1c2UgZW5xdWV1ZS9kZXF1ZXVlIHRo ZSBwYWNrZXQgZmFpbGVkLiBTbyB0aGUgcmVjb21tZW5kDQptaW5pbWFsIERNQSByaW5nIHNpemUg aXMgPiAzMi4NCg0KV2UgY2FuIHJlbW92ZSB0aGUgbWFjcm8sIGJ1dCBhZGQgb25lIGNvbW1lbnQg dG8gc3VnZ2VzdCB0aGUgRE1BIHJpbmcNCnNpemUuDQo+IA0KPiA+ICsNCj4gPiAgIHN0YXRpYyBj b25zdCBjaGFyICp2YWxpZF9hcmd1bWVudHNbXSA9IHsNCj4gPiAgIAlFVEhfVkhPU1RfSUZBQ0Vf QVJHLA0KPiA+ICAgCUVUSF9WSE9TVF9RVUVVRVNfQVJHLA0KPiA+IEBAIC00OSw2ICs1OSw4IEBA IHN0YXRpYyBjb25zdCBjaGFyICp2YWxpZF9hcmd1bWVudHNbXSA9IHsNCj4gPiAgIAlFVEhfVkhP U1RfTElORUFSX0JVRiwNCj4gPiAgIAlFVEhfVkhPU1RfRVhUX0JVRiwNCj4gPiAgIAlFVEhfVkhP U1RfTEVHQUNZX09MX0ZMQUdTLA0KPiA+ICsJRVRIX1ZIT1NUX0RNQV9BUkcsDQo+ID4gKwlFVEhf VkhPU1RfRE1BX1JJTkdfU0laRSwNCj4gPiAgIAlOVUxMDQo+ID4gICB9Ow0KPiA+DQo+ID4gQEAg LTgwLDggKzkyLDM5IEBAIHN0cnVjdCB2aG9zdF9xdWV1ZSB7DQo+ID4gICAJc3RydWN0IHZob3N0 X3N0YXRzIHN0YXRzOw0KPiA+ICAgCWludCBpbnRyX2VuYWJsZTsNCj4gPiAgIAlydGVfc3Bpbmxv Y2tfdCBpbnRyX2xvY2s7DQo+ID4gKw0KPiA+ICsJLyogRmxhZyBvZiBlbmFibGluZyBhc3luYyBk YXRhIHBhdGggKi8NCj4gPiArCWJvb2wgYXN5bmNfcmVnaXN0ZXI7DQo+ID4gKwkvKiBETUEgZGV2 aWNlIElEICovDQo+ID4gKwlpbnQxNl90IGRtYV9pZDsNCj4gPiArCS8qKg0KPiA+ICsJICogRm9y IGEgUnggcXVldWUsICJ0eHEiIHBvaW50cyB0byBpdHMgcGVlciBUeCBxdWV1ZS4NCj4gPiArCSAq IEZvciBhIFR4IHF1ZXVlLCAidHhxIiBpcyBuZXZlciB1c2VkLg0KPiA+ICsJICovDQo+ID4gKwlz dHJ1Y3Qgdmhvc3RfcXVldWUgKnR4cTsNCj4gPiArCS8qIEFycmF5IHRvIGtlZXAgRE1BIGNvbXBs ZXRlZCBwYWNrZXRzICovDQo+ID4gKwlzdHJ1Y3QgcnRlX21idWYgKmNtcGxfcGt0c1tWSE9TVF9N QVhfUEtUX0JVUlNUXTsNCj4gPiAgIH07DQo+ID4NCj4gPiArc3RydWN0IGRtYV9pbnB1dF9pbmZv IHsNCj4gPiArCWludDE2X3QgZG1hc1tSVEVfTUFYX1FVRVVFU19QRVJfUE9SVCAqIDJdOw0KPiA+ ICsJdWludDE2X3QgZG1hX3Jpbmdfc2l6ZTsNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0YXRpYyBp bnQxNl90IGNvbmZpZ3VyZWRfZG1hc1tSVEVfRE1BREVWX0RFRkFVTFRfTUFYXTsNCj4gPiArc3Rh dGljIGludCBkbWFfY291bnQ7DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogQnkgZGVmYXVsdCwg aXRzIFJ4IHBhdGggdG8gY2FsbCBydGVfdmhvc3RfcG9sbF9lbnF1ZXVlX2NvbXBsZXRlZCgpIGZv cg0KPiBlbnF1ZXVlIG9wZXJhdGlvbnMuDQo+ID4gKyAqIEhvd2V2ZXIsIFJ4IGZ1bmN0aW9uIGlz IG5ldmVyIGJlZW4gY2FsbGVkIGluIHRlc3RwbWQgInR4b25seSINCj4gPiArbW9kZSwgdGh1cyBj YXVzaW5nIHZpcnRpbw0KPiA+ICsgKiBjYW5ub3QgcmVjZWl2ZSBETUEgY29tcGxldGVkIHBhY2tl dHMuIFRvIG1ha2UgdHhvbmx5IG1vZGUgd29yaw0KPiA+ICtjb3JyZWN0bHksIHdlIHByb3ZpZGUg YQ0KPiA+ICsgKiBjb21tYW5kIGluIHRlc3RwbWQgdG8gY2FsbCBydGVfdmhvc3RfcG9sbF9lbnF1 ZXVlX2NvbXBsZXRlZCgpIGluIFR4DQo+IHBhdGguDQo+ID4gKyAqDQo+ID4gKyAqIFdoZW4gc2V0 IGFzeW5jX3R4X3BvbGxfY29tcGxldGVkIHRvIHRydWUsIFR4IHBhdGggY2FsbHMNCj4gPiArcnRl X3Zob3N0X3BvbGxfZW5xdWV1ZV9jb21wbGV0ZWQoKTsNCj4gPiArICogb3RoZXJ3aXNlLCBSeCBw YXRoIGNhbGxzIGl0Lg0KPiA+ICsgKi8NCj4gPiArYm9vbCBhc3luY190eF9wb2xsX2NvbXBsZXRl ZDsNCj4gPiArDQo+ID4gICBzdHJ1Y3QgcG1kX2ludGVybmFsIHsNCj4gPiAgIAlydGVfYXRvbWlj MzJfdCBkZXZfYXR0YWNoZWQ7DQo+ID4gICAJY2hhciAqaWZhY2VfbmFtZTsNCj4gPiBAQCAtOTQs NiArMTM3LDEwIEBAIHN0cnVjdCBwbWRfaW50ZXJuYWwgew0KPiA+ICAgCWJvb2wgdmxhbl9zdHJp cDsNCj4gPiAgIAlib29sIHJ4X3N3X2NzdW07DQo+ID4gICAJYm9vbCB0eF9zd19jc3VtOw0KPiA+ ICsJc3RydWN0IHsNCj4gPiArCQlpbnQxNl90IGRtYV9pZDsNCj4gPiArCQlib29sIGFzeW5jX3Jl Z2lzdGVyOw0KPiA+ICsJfSBxdWV1ZV9kbWFzW1JURV9NQVhfUVVFVUVTX1BFUl9QT1JUICogMl07 DQo+ID4gICB9Ow0KPiA+DQo+ID4gICBzdHJ1Y3QgaW50ZXJuYWxfbGlzdCB7DQo+ID4gQEAgLTEy NCw2ICsxNzEsMTcgQEAgc3RydWN0IHJ0ZV92aG9zdF92cmluZ19zdGF0ZSB7DQo+ID4NCj4gPiAg IHN0YXRpYyBzdHJ1Y3QgcnRlX3Zob3N0X3ZyaW5nX3N0YXRlICp2cmluZ19zdGF0ZXNbUlRFX01B WF9FVEhQT1JUU107DQo+ID4NCj4gPiArc3RhdGljIGJvb2wNCj4gPiArZG1hX2lzX2NvbmZpZ3Vy ZWQoaW50MTZfdCBkbWFfaWQpDQo+ID4gK3sNCj4gPiArCWludCBpOw0KPiA+ICsNCj4gPiArCWZv ciAoaSA9IDA7IGkgPCBkbWFfY291bnQ7IGkrKykNCj4gPiArCQlpZiAoY29uZmlndXJlZF9kbWFz W2ldID09IGRtYV9pZCkNCj4gPiArCQkJcmV0dXJuIHRydWU7DQo+ID4gKwlyZXR1cm4gZmFsc2U7 DQo+ID4gK30NCj4gPiArDQo+ID4gICBzdGF0aWMgaW50DQo+ID4gICB2aG9zdF9kZXZfeHN0YXRz X3Jlc2V0KHN0cnVjdCBydGVfZXRoX2RldiAqZGV2KQ0KPiA+ICAgew0KPiA+IEBAIC0zOTYsMTUg KzQ1NCwyNyBAQCB2aG9zdF9kZXZfcnhfc3dfY3N1bShzdHJ1Y3QgcnRlX21idWYgKm1idWYpDQo+ ID4gICAJbWJ1Zi0+b2xfZmxhZ3MgfD0gUlRFX01CVUZfRl9SWF9MNF9DS1NVTV9HT09EOw0KPiA+ ICAgfQ0KPiA+DQo+ID4gK3N0YXRpYyBpbmxpbmUgdm9pZA0KPiA+ICt2aG9zdF90eF9mcmVlX2Nv bXBsZXRlZChpbnQgdmlkLCB1aW50MTZfdCB2aXJ0cXVldWVfaWQsIGludDE2X3QgZG1hX2lkLA0K PiA+ICsJCXN0cnVjdCBydGVfbWJ1ZiAqKnBrdHMsIHVpbnQxNl90IGNvdW50KSB7DQo+ID4gKwl1 aW50MTZfdCBpLCByZXQ7DQo+ID4gKw0KPiA+ICsJcmV0ID0gcnRlX3Zob3N0X3BvbGxfZW5xdWV1 ZV9jb21wbGV0ZWQodmlkLCB2aXJ0cXVldWVfaWQsIHBrdHMsDQo+IGNvdW50LCBkbWFfaWQsIDAp Ow0KPiA+ICsJZm9yIChpID0gMDsgbGlrZWx5KGkgPCByZXQpOyBpKyspDQo+ID4gKwkJcnRlX3Br dG1idWZfZnJlZShwa3RzW2ldKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiAgIHN0YXRpYyB1aW50MTZf dA0KPiA+ICAgZXRoX3Zob3N0X3J4KHZvaWQgKnEsIHN0cnVjdCBydGVfbWJ1ZiAqKmJ1ZnMsIHVp bnQxNl90IG5iX2J1ZnMpDQo+ID4gICB7DQo+ID4gICAJc3RydWN0IHZob3N0X3F1ZXVlICpyID0g cTsNCj4gPiAgIAl1aW50MTZfdCBpLCBuYl9yeCA9IDA7DQo+ID4gICAJdWludDE2X3QgbmJfcmVj ZWl2ZSA9IG5iX2J1ZnM7DQo+ID4gKwl1aW50MTZfdCBuYl9wa3RzLCBudW07DQo+ID4NCj4gPiAg IAlpZiAodW5saWtlbHkocnRlX2F0b21pYzMyX3JlYWQoJnItPmFsbG93X3F1ZXVpbmcpID09IDAp KQ0KPiA+IC0JCXJldHVybiAwOw0KPiA+ICsJCWdvdG8gdHhfcG9sbDsNCj4gPg0KPiA+ICAgCXJ0 ZV9hdG9taWMzMl9zZXQoJnItPndoaWxlX3F1ZXVpbmcsIDEpOw0KPiA+DQo+ID4gQEAgLTQxMiwx OSArNDgyLDMyIEBAIGV0aF92aG9zdF9yeCh2b2lkICpxLCBzdHJ1Y3QgcnRlX21idWYgKipidWZz LA0KPiB1aW50MTZfdCBuYl9idWZzKQ0KPiA+ICAgCQlnb3RvIG91dDsNCj4gPg0KPiA+ICAgCS8q IERlcXVldWUgcGFja2V0cyBmcm9tIGd1ZXN0IFRYIHF1ZXVlICovDQo+ID4gLQl3aGlsZSAobmJf cmVjZWl2ZSkgew0KPiA+IC0JCXVpbnQxNl90IG5iX3BrdHM7DQo+ID4gLQkJdWludDE2X3QgbnVt ID0gKHVpbnQxNl90KVJURV9NSU4obmJfcmVjZWl2ZSwNCj4gPiAtCQkJCQkJIFZIT1NUX01BWF9Q S1RfQlVSU1QpOw0KPiA+IC0NCj4gPiAtCQluYl9wa3RzID0gcnRlX3Zob3N0X2RlcXVldWVfYnVy c3Qoci0+dmlkLCByLT52aXJ0cXVldWVfaWQsDQo+ID4gLQkJCQkJCSAgci0+bWJfcG9vbCwgJmJ1 ZnNbbmJfcnhdLA0KPiA+IC0JCQkJCQkgIG51bSk7DQo+ID4gLQ0KPiA+IC0JCW5iX3J4ICs9IG5i X3BrdHM7DQo+ID4gLQkJbmJfcmVjZWl2ZSAtPSBuYl9wa3RzOw0KPiA+IC0JCWlmIChuYl9wa3Rz IDwgbnVtKQ0KPiA+IC0JCQlicmVhazsNCj4gPiArCWlmICghci0+YXN5bmNfcmVnaXN0ZXIpIHsN Cj4gPiArCQl3aGlsZSAobmJfcmVjZWl2ZSkgew0KPiA+ICsJCQludW0gPSAodWludDE2X3QpUlRF X01JTihuYl9yZWNlaXZlLA0KPiBWSE9TVF9NQVhfUEtUX0JVUlNUKTsNCj4gPiArCQkJbmJfcGt0 cyA9IHJ0ZV92aG9zdF9kZXF1ZXVlX2J1cnN0KHItPnZpZCwgci0NCj4gPnZpcnRxdWV1ZV9pZCwN Cj4gPiArCQkJCQkJci0+bWJfcG9vbCwgJmJ1ZnNbbmJfcnhdLA0KPiA+ICsJCQkJCQludW0pOw0K PiA+ICsNCj4gPiArCQkJbmJfcnggKz0gbmJfcGt0czsNCj4gPiArCQkJbmJfcmVjZWl2ZSAtPSBu Yl9wa3RzOw0KPiA+ICsJCQlpZiAobmJfcGt0cyA8IG51bSkNCj4gPiArCQkJCWJyZWFrOw0KPiA+ ICsJCX0NCj4gPiArCX0gZWxzZSB7DQo+ID4gKwkJaW50IG5yX2luZmxpZ2h0Ow0KPiA+ICsNCj4g PiArCQl3aGlsZSAobmJfcmVjZWl2ZSkgew0KPiA+ICsJCQludW0gPSAodWludDE2X3QpUlRFX01J TihuYl9yZWNlaXZlLA0KPiBWSE9TVF9NQVhfUEtUX0JVUlNUKTsNCj4gPiArCQkJbmJfcGt0cyA9 IHJ0ZV92aG9zdF9hc3luY190cnlfZGVxdWV1ZV9idXJzdChyLQ0KPiA+dmlkLCByLT52aXJ0cXVl dWVfaWQsDQo+ID4gKwkJCQkJCXItPm1iX3Bvb2wsICZidWZzW25iX3J4XSwNCj4gbnVtLCAmbnJf aW5mbGlnaHQsDQo+ID4gKwkJCQkJCXItPmRtYV9pZCwgMCk7DQo+ID4gKw0KPiA+ICsJCQluYl9y eCArPSBuYl9wa3RzOw0KPiA+ICsJCQluYl9yZWNlaXZlIC09IG5iX3BrdHM7DQo+ID4gKwkJCWlm IChuYl9wa3RzIDwgbnVtKQ0KPiA+ICsJCQkJYnJlYWs7DQo+ID4gKwkJfQ0KPiA+ICAgCX0NCj4g Pg0KPiA+ICAgCXItPnN0YXRzLnBrdHMgKz0gbmJfcng7DQo+ID4gQEAgLTQ0NSw2ICs1MjgsMTcg QEAgZXRoX3Zob3N0X3J4KHZvaWQgKnEsIHN0cnVjdCBydGVfbWJ1ZiAqKmJ1ZnMsDQo+IHVpbnQx Nl90IG5iX2J1ZnMpDQo+ID4gICBvdXQ6DQo+ID4gICAJcnRlX2F0b21pYzMyX3NldCgmci0+d2hp bGVfcXVldWluZywgMCk7DQo+ID4NCj4gPiArdHhfcG9sbDoNCj4gPiArCS8qKg0KPiA+ICsJICog UG9sbCBhbmQgZnJlZSBjb21wbGV0ZWQgcGFja2V0cyBmb3IgdGhlIHZpcnRxdWV1ZSBvZiBUeCBx dWV1ZS4NCj4gPiArCSAqIE5vdGUgdGhhdCB3ZSBhY2Nlc3MgVHggcXVldWUncyB2aXJ0cXVldWUs IHdoaWNoIGlzIHByb3RlY3RlZA0KPiA+ICsJICogYnkgdnJpbmcgbG9jay4NCj4gPiArCSAqLw0K PiA+ICsJaWYgKHItPnR4cS0+YXN5bmNfcmVnaXN0ZXIgJiYgIWFzeW5jX3R4X3BvbGxfY29tcGxl dGVkICYmDQo+ID4gKwkJCXJ0ZV9hdG9taWMzMl9yZWFkKCZyLT50eHEtPmFsbG93X3F1ZXVpbmcp ID09IDEpDQo+ID4gKwkJdmhvc3RfdHhfZnJlZV9jb21wbGV0ZWQoci0+dmlkLCByLT50eHEtPnZp cnRxdWV1ZV9pZCwgci0NCj4gPnR4cS0+ZG1hX2lkLA0KPiA+ICsJCQkJci0+Y21wbF9wa3RzLCBW SE9TVF9NQVhfUEtUX0JVUlNUKTsNCj4gPiArDQo+ID4gICAJcmV0dXJuIG5iX3J4Ow0KPiA+ICAg fQ0KPiA+DQo+ID4gQEAgLTQ1Niw2ICs1NTAsNyBAQCBldGhfdmhvc3RfdHgodm9pZCAqcSwgc3Ry dWN0IHJ0ZV9tYnVmICoqYnVmcywNCj4gdWludDE2X3QgbmJfYnVmcykNCj4gPiAgIAl1aW50MTZf dCBuYl9zZW5kID0gMDsNCj4gPiAgIAl1aW50NjRfdCBuYl9ieXRlcyA9IDA7DQo+ID4gICAJdWlu dDY0X3QgbmJfbWlzc2VkID0gMDsNCj4gPiArCXVpbnQxNl90IG5iX3BrdHMsIG51bTsNCj4gPg0K PiA+ICAgCWlmICh1bmxpa2VseShydGVfYXRvbWljMzJfcmVhZCgmci0+YWxsb3dfcXVldWluZykg PT0gMCkpDQo+ID4gICAJCXJldHVybiAwOw0KPiA+IEBAIC00ODYsMzEgKzU4MSw0OSBAQCBldGhf dmhvc3RfdHgodm9pZCAqcSwgc3RydWN0IHJ0ZV9tYnVmICoqYnVmcywNCj4gdWludDE2X3QgbmJf YnVmcykNCj4gPiAgIAl9DQo+ID4NCj4gPiAgIAkvKiBFbnF1ZXVlIHBhY2tldHMgdG8gZ3Vlc3Qg UlggcXVldWUgKi8NCj4gPiAtCXdoaWxlIChuYl9zZW5kKSB7DQo+ID4gLQkJdWludDE2X3QgbmJf cGt0czsNCj4gPiAtCQl1aW50MTZfdCBudW0gPSAodWludDE2X3QpUlRFX01JTihuYl9zZW5kLA0K PiA+IC0JCQkJCQkgVkhPU1RfTUFYX1BLVF9CVVJTVCk7DQo+ID4gKwlpZiAoIXItPmFzeW5jX3Jl Z2lzdGVyKSB7DQo+ID4gKwkJd2hpbGUgKG5iX3NlbmQpIHsNCj4gPiArCQkJbnVtID0gKHVpbnQx Nl90KVJURV9NSU4obmJfc2VuZCwNCj4gVkhPU1RfTUFYX1BLVF9CVVJTVCk7DQo+ID4gKwkJCW5i X3BrdHMgPSBydGVfdmhvc3RfZW5xdWV1ZV9idXJzdChyLT52aWQsIHItDQo+ID52aXJ0cXVldWVf aWQsDQo+ID4gKwkJCQkJCSZidWZzW25iX3R4XSwgbnVtKTsNCj4gPiArDQo+ID4gKwkJCW5iX3R4 ICs9IG5iX3BrdHM7DQo+ID4gKwkJCW5iX3NlbmQgLT0gbmJfcGt0czsNCj4gPiArCQkJaWYgKG5i X3BrdHMgPCBudW0pDQo+ID4gKwkJCQlicmVhazsNCj4gPiArCQl9DQo+ID4NCj4gPiAtCQluYl9w a3RzID0gcnRlX3Zob3N0X2VucXVldWVfYnVyc3Qoci0+dmlkLCByLT52aXJ0cXVldWVfaWQsDQo+ ID4gLQkJCQkJCSAgJmJ1ZnNbbmJfdHhdLCBudW0pOw0KPiA+ICsJCWZvciAoaSA9IDA7IGxpa2Vs eShpIDwgbmJfdHgpOyBpKyspIHsNCj4gPiArCQkJbmJfYnl0ZXMgKz0gYnVmc1tpXS0+cGt0X2xl bjsNCj4gPiArCQkJcnRlX3BrdG1idWZfZnJlZShidWZzW2ldKTsNCj4gPiArCQl9DQo+ID4NCj4g PiAtCQluYl90eCArPSBuYl9wa3RzOw0KPiA+IC0JCW5iX3NlbmQgLT0gbmJfcGt0czsNCj4gPiAt CQlpZiAobmJfcGt0cyA8IG51bSkNCj4gPiAtCQkJYnJlYWs7DQo+ID4gLQl9DQo+ID4gKwl9IGVs c2Ugew0KPiA+ICsJCXdoaWxlIChuYl9zZW5kKSB7DQo+ID4gKwkJCW51bSA9ICh1aW50MTZfdClS VEVfTUlOKG5iX3NlbmQsDQo+IFZIT1NUX01BWF9QS1RfQlVSU1QpOw0KPiA+ICsJCQluYl9wa3Rz ID0gcnRlX3Zob3N0X3N1Ym1pdF9lbnF1ZXVlX2J1cnN0KHItPnZpZCwNCj4gci0+dmlydHF1ZXVl X2lkLA0KPiA+ICsJCQkJCQkJJmJ1ZnNbbmJfdHhdLCBudW0sIHItDQo+ID5kbWFfaWQsIDApOw0K PiA+ICsNCj4gPiArCQkJbmJfdHggKz0gbmJfcGt0czsNCj4gPiArCQkJbmJfc2VuZCAtPSBuYl9w a3RzOw0KPiA+ICsJCQlpZiAobmJfcGt0cyA8IG51bSkNCj4gPiArCQkJCWJyZWFrOw0KPiA+ICsJ CX0NCj4gPg0KPiA+IC0JZm9yIChpID0gMDsgbGlrZWx5KGkgPCBuYl90eCk7IGkrKykNCj4gPiAt CQluYl9ieXRlcyArPSBidWZzW2ldLT5wa3RfbGVuOw0KPiA+ICsJCWZvciAoaSA9IDA7IGxpa2Vs eShpIDwgbmJfdHgpOyBpKyspDQo+ID4gKwkJCW5iX2J5dGVzICs9IGJ1ZnNbaV0tPnBrdF9sZW47 DQo+ID4NCj4gPiAtCW5iX21pc3NlZCA9IG5iX2J1ZnMgLSBuYl90eDsNCj4gPiArCQlpZiAodW5s aWtlbHkoYXN5bmNfdHhfcG9sbF9jb21wbGV0ZWQpKSB7DQo+ID4gKwkJCXZob3N0X3R4X2ZyZWVf Y29tcGxldGVkKHItPnZpZCwgci0+dmlydHF1ZXVlX2lkLCByLQ0KPiA+ZG1hX2lkLCByLT5jbXBs X3BrdHMsDQo+ID4gKwkJCQkJVkhPU1RfTUFYX1BLVF9CVVJTVCk7DQo+ID4gKwkJfQ0KPiA+ICsJ fQ0KPiA+DQo+ID4gKwluYl9taXNzZWQgPSBuYl9idWZzIC0gbmJfdHg7DQo+ID4gICAJci0+c3Rh dHMucGt0cyArPSBuYl90eDsNCj4gPiAgIAlyLT5zdGF0cy5ieXRlcyArPSBuYl9ieXRlczsNCj4g PiAgIAlyLT5zdGF0cy5taXNzZWRfcGt0cyArPSBuYl9taXNzZWQ7DQo+ID4NCj4gPiAtCWZvciAo aSA9IDA7IGxpa2VseShpIDwgbmJfdHgpOyBpKyspDQo+ID4gLQkJcnRlX3BrdG1idWZfZnJlZShi dWZzW2ldKTsNCj4gPiAgIG91dDoNCj4gPiAgIAlydGVfYXRvbWljMzJfc2V0KCZyLT53aGlsZV9x dWV1aW5nLCAwKTsNCj4gPg0KPiA+IEBAIC03OTgsNiArOTExLDggQEAgcXVldWVfc2V0dXAoc3Ry dWN0IHJ0ZV9ldGhfZGV2ICpldGhfZGV2LCBzdHJ1Y3QNCj4gcG1kX2ludGVybmFsICppbnRlcm5h bCkNCj4gPiAgIAkJdnEtPnZpZCA9IGludGVybmFsLT52aWQ7DQo+ID4gICAJCXZxLT5pbnRlcm5h bCA9IGludGVybmFsOw0KPiA+ICAgCQl2cS0+cG9ydCA9IGV0aF9kZXYtPmRhdGEtPnBvcnRfaWQ7 DQo+ID4gKwkJaWYgKGkgPCBldGhfZGV2LT5kYXRhLT5uYl90eF9xdWV1ZXMpDQo+ID4gKwkJCXZx LT50eHEgPSBldGhfZGV2LT5kYXRhLT50eF9xdWV1ZXNbaV07DQo+ID4gICAJfQ0KPiA+ICAgCWZv ciAoaSA9IDA7IGkgPCBldGhfZGV2LT5kYXRhLT5uYl90eF9xdWV1ZXM7IGkrKykgew0KPiA+ICAg CQl2cSA9IGV0aF9kZXYtPmRhdGEtPnR4X3F1ZXVlc1tpXTsNCj4gPiBAQCAtODc4LDYgKzk5Mywz MCBAQCBuZXdfZGV2aWNlKGludCB2aWQpDQo+ID4gICAJcmV0dXJuIDA7DQo+ID4gICB9DQo+ID4N Cj4gPiArc3RhdGljIGlubGluZSB2b2lkDQo+ID4gK2FzeW5jX2NsZWFyX3ZpcnRxdWV1ZShpbnQg dmlkLCB1aW50MTZfdCB2aXJ0cXVldWVfaWQsIGludDE2X3QgZG1hX2lkKQ0KPiA+ICt7DQo+ID4g KwlzdHJ1Y3QgcnRlX21idWYgKnBrdHNbVkhPU1RfTUFYX1BLVF9CVVJTVF07DQo+ID4gKwl1aW50 MTZfdCBpLCByZXQsIG5yX2RvbmUgPSAwOw0KPiA+ICsNCj4gPiArCWlmICh2aWQgPT0gLTEpDQo+ ID4gKwkJcmV0dXJuOw0KPiA+ICsNCj4gPiArCXdoaWxlIChydGVfdmhvc3RfYXN5bmNfZ2V0X2lu ZmxpZ2h0KHZpZCwgdmlydHF1ZXVlX2lkKSA+IDApIHsNCj4gPiArCQlyZXQgPSBydGVfdmhvc3Rf Y2xlYXJfcXVldWUodmlkLCB2aXJ0cXVldWVfaWQsIHBrdHMsDQo+IFZIT1NUX01BWF9QS1RfQlVS U1QsIGRtYV9pZCwNCj4gPiArCQkJCTApOw0KPiA+ICsJCWZvciAoaSA9IDA7IGkgPCByZXQgOyBp KyspDQo+ID4gKwkJCXJ0ZV9wa3RtYnVmX2ZyZWUocGt0c1tpXSk7DQo+ID4gKw0KPiA+ICsJCW5y X2RvbmUgKz0gcmV0Ow0KPiA+ICsJfQ0KPiA+ICsJVkhPU1RfTE9HKElORk8sICJDb21wbGV0ZWQg JXUgcGt0cyBmb3IgdmlkLSV1IHZyaW5nLSV1XG4iLA0KPiBucl9kb25lLA0KPiA+ICt2aWQsIHZp cnRxdWV1ZV9pZCk7DQo+ID4gKw0KPiA+ICsJaWYgKHJ0ZV92aG9zdF9hc3luY19jaGFubmVsX3Vu cmVnaXN0ZXIodmlkLCB2aXJ0cXVldWVfaWQpKQ0KPiA+ICsJCVZIT1NUX0xPRyhFUlIsICJGYWls ZWQgdG8gdW5yZWdpc3RlciBhc3luYyBmb3IgdmlkLSV1DQo+IHZyaW5nLSV1XG4iLCB2aWQsDQo+ ID4gKwkJCQl2aXJ0cXVldWVfaWQpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICAgc3RhdGljIHZvaWQN Cj4gPiAgIGRlc3Ryb3lfZGV2aWNlKGludCB2aWQpDQo+ID4gICB7DQo+ID4gQEAgLTkwOCwxMyAr MTA0NywyNyBAQCBkZXN0cm95X2RldmljZShpbnQgdmlkKQ0KPiA+ICAgCQkJdnEgPSBldGhfZGV2 LT5kYXRhLT5yeF9xdWV1ZXNbaV07DQo+ID4gICAJCQlpZiAoIXZxKQ0KPiA+ICAgCQkJCWNvbnRp bnVlOw0KPiA+ICsJCQlpZiAodnEtPmFzeW5jX3JlZ2lzdGVyKSB7DQo+ID4gKwkJCQlhc3luY19j bGVhcl92aXJ0cXVldWUodnEtPnZpZCwgdnEtDQo+ID52aXJ0cXVldWVfaWQsDQo+ID4gKwkJCQkJ CQl2cS0+ZG1hX2lkKTsNCj4gPiArCQkJCXZxLT5hc3luY19yZWdpc3RlciA9IGZhbHNlOw0KPiA+ ICsJCQkJaW50ZXJuYWwtPnF1ZXVlX2RtYXNbdnEtDQo+ID52aXJ0cXVldWVfaWRdLmFzeW5jX3Jl Z2lzdGVyID0gZmFsc2U7DQo+ID4gKwkJCX0NCj4gPiAgIAkJCXZxLT52aWQgPSAtMTsNCj4gPiAr DQo+ID4gICAJCX0NCj4gPiAgIAkJZm9yIChpID0gMDsgaSA8IGV0aF9kZXYtPmRhdGEtPm5iX3R4 X3F1ZXVlczsgaSsrKSB7DQo+ID4gICAJCQl2cSA9IGV0aF9kZXYtPmRhdGEtPnR4X3F1ZXVlc1tp XTsNCj4gPiAgIAkJCWlmICghdnEpDQo+ID4gICAJCQkJY29udGludWU7DQo+ID4gKwkJCWlmICh2 cS0+YXN5bmNfcmVnaXN0ZXIpIHsNCj4gPiArCQkJCWFzeW5jX2NsZWFyX3ZpcnRxdWV1ZSh2cS0+ dmlkLCB2cS0NCj4gPnZpcnRxdWV1ZV9pZCwNCj4gPiArCQkJCQkJCXZxLT5kbWFfaWQpOw0KPiA+ ICsJCQkJdnEtPmFzeW5jX3JlZ2lzdGVyID0gZmFsc2U7DQo+ID4gKwkJCQlpbnRlcm5hbC0+cXVl dWVfZG1hc1t2cS0NCj4gPnZpcnRxdWV1ZV9pZF0uYXN5bmNfcmVnaXN0ZXIgPSBmYWxzZTsNCj4g PiArCQkJfQ0KPiA+ICAgCQkJdnEtPnZpZCA9IC0xOw0KPiA+ICsNCj4gPiAgIAkJfQ0KPiA+ICAg CX0NCj4gPg0KPiA+IEBAIC05ODMsNiArMTEzNiw5IEBAIHZyaW5nX3N0YXRlX2NoYW5nZWQoaW50 IHZpZCwgdWludDE2X3QgdnJpbmcsIGludA0KPiBlbmFibGUpDQo+ID4gICAJc3RydWN0IHJ0ZV92 aG9zdF92cmluZ19zdGF0ZSAqc3RhdGU7DQo+ID4gICAJc3RydWN0IHJ0ZV9ldGhfZGV2ICpldGhf ZGV2Ow0KPiA+ICAgCXN0cnVjdCBpbnRlcm5hbF9saXN0ICpsaXN0Ow0KPiA+ICsJc3RydWN0IHZo b3N0X3F1ZXVlICpxdWV1ZTsNCj4gPiArCXN0cnVjdCBwbWRfaW50ZXJuYWwgKmludGVybmFsOw0K PiA+ICsJaW50IHFpZDsNCj4gPiAgIAljaGFyIGlmbmFtZVtQQVRIX01BWF07DQo+ID4NCj4gPiAg IAlydGVfdmhvc3RfZ2V0X2lmbmFtZSh2aWQsIGlmbmFtZSwgc2l6ZW9mKGlmbmFtZSkpOyBAQCAt MTAxMSw2DQo+ID4gKzExNjcsNjUgQEAgdnJpbmdfc3RhdGVfY2hhbmdlZChpbnQgdmlkLCB1aW50 MTZfdCB2cmluZywgaW50IGVuYWJsZSkNCj4gPg0KPiA+ICAgCXVwZGF0ZV9xdWV1aW5nX3N0YXR1 cyhldGhfZGV2LCBmYWxzZSk7DQo+ID4NCj4gPiArCXFpZCA9IHZyaW5nIC8gVklSVElPX1FOVU07 DQo+ID4gKwlpZiAodnJpbmcgJSBWSVJUSU9fUU5VTSA9PSBWSVJUSU9fUlhRKQ0KPiA+ICsJCXF1 ZXVlID0gZXRoX2Rldi0+ZGF0YS0+dHhfcXVldWVzW3FpZF07DQo+ID4gKwllbHNlDQo+ID4gKwkJ cXVldWUgPSBldGhfZGV2LT5kYXRhLT5yeF9xdWV1ZXNbcWlkXTsNCj4gPiArDQo+ID4gKwlpZiAo IXF1ZXVlKQ0KPiA+ICsJCWdvdG8gc2tpcDsNCj4gPiArDQo+ID4gKwlpbnRlcm5hbCA9IGV0aF9k ZXYtPmRhdGEtPmRldl9wcml2YXRlOw0KPiA+ICsNCj4gPiArCS8qIFJlZ2lzdGVyIGFzeW5jIGRh dGEgcGF0aCBmb3IgdGhlIHF1ZXVlIGFzc2lnbmVkIHZhbGlkIERNQSBkZXZpY2UNCj4gKi8NCj4g PiArCWlmIChpbnRlcm5hbC0+cXVldWVfZG1hc1txdWV1ZS0+dmlydHF1ZXVlX2lkXS5kbWFfaWQg PT0NCj4gSU5WQUxJRF9ETUFfSUQpDQo+ID4gKwkJZ290byBza2lwOw0KPiA+ICsNCj4gPiArCWlm IChlbmFibGUgJiYgIXF1ZXVlLT5hc3luY19yZWdpc3Rlcikgew0KPiA+ICsJCWlmIChydGVfdmhv c3RfYXN5bmNfY2hhbm5lbF9yZWdpc3Rlcl90aHJlYWRfdW5zYWZlKHZpZCwNCj4gdnJpbmcpKSB7 DQo+ID4gKwkJCVZIT1NUX0xPRyhFUlIsICJGYWlsZWQgdG8gcmVnaXN0ZXIgYXN5bmMgZm9yIHZp ZC0ldQ0KPiB2cmluZy0ldSFcbiIsIHZpZCwNCj4gPiArCQkJCQl2cmluZyk7DQo+ID4gKwkJCXJl dHVybiAtMTsNCj4gPiArCQl9DQo+ID4gKw0KPiA+ICsJCXF1ZXVlLT5hc3luY19yZWdpc3RlciA9 IHRydWU7DQo+ID4gKwkJaW50ZXJuYWwtPnF1ZXVlX2RtYXNbdnJpbmddLmFzeW5jX3JlZ2lzdGVy ID0gdHJ1ZTsNCj4gPiArDQo+ID4gKwkJVkhPU1RfTE9HKElORk8sICJTdWNjZWVkIHRvIHJlZ2lz dGVyIGFzeW5jIGZvciB2aWQtJXUNCj4gdnJpbmctJXVcbiIsIHZpZCwgdnJpbmcpOw0KPiA+ICsJ fQ0KPiA+ICsNCj4gPiArCWlmICghZW5hYmxlICYmIHF1ZXVlLT5hc3luY19yZWdpc3Rlcikgew0K PiA+ICsJCXN0cnVjdCBydGVfbWJ1ZiAqcGt0c1tWSE9TVF9NQVhfUEtUX0JVUlNUXTsNCj4gPiAr CQl1aW50MTZfdCByZXQsIGksIG5yX2RvbmUgPSAwOw0KPiA+ICsJCXVpbnQxNl90IGRtYV9pZCA9 IHF1ZXVlLT5kbWFfaWQ7DQo+ID4gKw0KPiA+ICsJCXdoaWxlIChydGVfdmhvc3RfYXN5bmNfZ2V0 X2luZmxpZ2h0X3RocmVhZF91bnNhZmUodmlkLA0KPiB2cmluZykgPiAwKSB7DQo+ID4gKwkJCXJl dCA9IHJ0ZV92aG9zdF9jbGVhcl9xdWV1ZV90aHJlYWRfdW5zYWZlKHZpZCwNCj4gdnJpbmcsIHBr dHMsDQo+ID4gKwkJCQkJVkhPU1RfTUFYX1BLVF9CVVJTVCwgZG1hX2lkLCAwKTsNCj4gPiArDQo+ ID4gKwkJCWZvciAoaSA9IDA7IGkgPCByZXQgOyBpKyspDQo+ID4gKwkJCQlydGVfcGt0bWJ1Zl9m cmVlKHBrdHNbaV0pOw0KPiA+ICsNCj4gPiArCQkJbnJfZG9uZSArPSByZXQ7DQo+ID4gKwkJfQ0K PiA+ICsNCj4gPiArCQlWSE9TVF9MT0coSU5GTywgIkNvbXBsZXRlZCAldSBpbi1mbGlnaHQgcGt0 cyBmb3IgdmlkLSV1DQo+IHZyaW5nLSV1XG4iLCBucl9kb25lLCB2aWQsDQo+ID4gKwkJCQl2cmlu Zyk7DQo+ID4gKw0KPiA+ICsJCWlmIChydGVfdmhvc3RfYXN5bmNfY2hhbm5lbF91bnJlZ2lzdGVy X3RocmVhZF91bnNhZmUodmlkLA0KPiB2cmluZykpIHsNCj4gPiArCQkJVkhPU1RfTE9HKEVSUiwg IkZhaWxlZCB0byB1bnJlZ2lzdGVyIGFzeW5jIGZvciB2aWQtDQo+ICV1IHZyaW5nLSV1XG4iLCB2 aWQsDQo+ID4gKwkJCQkJdnJpbmcpOw0KPiA+ICsJCQlyZXR1cm4gLTE7DQo+ID4gKwkJfQ0KPiA+ ICsNCj4gPiArCQlxdWV1ZS0+YXN5bmNfcmVnaXN0ZXIgPSBmYWxzZTsNCj4gPiArCQlpbnRlcm5h bC0+cXVldWVfZG1hc1t2cmluZ10uYXN5bmNfcmVnaXN0ZXIgPSBmYWxzZTsNCj4gPiArDQo+ID4g KwkJVkhPU1RfTE9HKElORk8sICJTdWNjZWVkIHRvIHVucmVnaXN0ZXIgYXN5bmMgZm9yIHZpZC0l dQ0KPiB2cmluZy0ldVxuIiwgdmlkLCB2cmluZyk7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICtza2lw Og0KPiA+ICAgCVZIT1NUX0xPRyhJTkZPLCAidnJpbmcldSBpcyAlc1xuIiwNCj4gPiAgIAkJCXZy aW5nLCBlbmFibGUgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKTsNCj4gPg0KPiA+IEBAIC0xMTU5 LDYgKzEzNzQsMTIgQEAgcnRlX2V0aF92aG9zdF9nZXRfdmlkX2Zyb21fcG9ydF9pZCh1aW50MTZf dA0KPiBwb3J0X2lkKQ0KPiA+ICAgCXJldHVybiB2aWQ7DQo+ID4gICB9DQo+ID4NCj4gPiArdm9p ZA0KPiA+ICtydGVfZXRoX3Zob3N0X2FzeW5jX3R4X3BvbGxfY29tcGxldGVkKGJvb2wgZW5hYmxl KSB7DQo+ID4gKwlhc3luY190eF9wb2xsX2NvbXBsZXRlZCA9IGVuYWJsZTsNCj4gPiArfQ0KPiA+ ICsNCj4gPiAgIHN0YXRpYyBpbnQNCj4gPiAgIGV0aF9kZXZfY29uZmlndXJlKHN0cnVjdCBydGVf ZXRoX2RldiAqZGV2KQ0KPiA+ICAgew0KPiA+IEBAIC0xMjIwLDYgKzE0NDEsNyBAQCBldGhfZGV2 X2Nsb3NlKHN0cnVjdCBydGVfZXRoX2RldiAqZGV2KQ0KPiA+ICAgew0KPiA+ICAgCXN0cnVjdCBw bWRfaW50ZXJuYWwgKmludGVybmFsOw0KPiA+ICAgCXN0cnVjdCBpbnRlcm5hbF9saXN0ICpsaXN0 Ow0KPiA+ICsJc3RydWN0IHZob3N0X3F1ZXVlICpxdWV1ZTsNCj4gPiAgIAl1bnNpZ25lZCBpbnQg aSwgcmV0Ow0KPiA+DQo+ID4gICAJaWYgKHJ0ZV9lYWxfcHJvY2Vzc190eXBlKCkgIT0gUlRFX1BS T0NfUFJJTUFSWSkgQEAgLTEyMzMsNg0KPiArMTQ1NSwyNQ0KPiA+IEBAIGV0aF9kZXZfY2xvc2Uo c3RydWN0IHJ0ZV9ldGhfZGV2ICpkZXYpDQo+ID4NCj4gPiAgIAlsaXN0ID0gZmluZF9pbnRlcm5h bF9yZXNvdXJjZShpbnRlcm5hbC0+aWZhY2VfbmFtZSk7DQo+ID4gICAJaWYgKGxpc3QpIHsNCj4g PiArCQkvKiBNYWtlIHN1cmUgYWxsIGluLWZsaWdodCBwYWNrZXRzIGFyZSBjb21wbGV0ZWQgYmVm b3JlDQo+IGRlc3Ryb3kgdmhvc3QgKi8NCj4gPiArCQlpZiAoZGV2LT5kYXRhLT5yeF9xdWV1ZXMp IHsNCj4gPiArCQkJZm9yIChpID0gMDsgaSA8IGRldi0+ZGF0YS0+bmJfcnhfcXVldWVzOyBpKysp IHsNCj4gPiArCQkJCXF1ZXVlID0gZGV2LT5kYXRhLT5yeF9xdWV1ZXNbaV07DQo+ID4gKwkJCQlp ZiAocXVldWUtPmFzeW5jX3JlZ2lzdGVyKQ0KPiA+ICsJCQkJCWFzeW5jX2NsZWFyX3ZpcnRxdWV1 ZShxdWV1ZS0+dmlkLA0KPiBxdWV1ZS0+dmlydHF1ZXVlX2lkLA0KPiA+ICsJCQkJCQkJcXVldWUt PmRtYV9pZCk7DQo+ID4gKwkJCX0NCj4gPiArCQl9DQo+ID4gKw0KPiA+ICsJCWlmIChkZXYtPmRh dGEtPnR4X3F1ZXVlcykgew0KPiA+ICsJCQlmb3IgKGkgPSAwOyBpIDwgZGV2LT5kYXRhLT5uYl90 eF9xdWV1ZXM7IGkrKykgew0KPiA+ICsJCQkJcXVldWUgPSBkZXYtPmRhdGEtPnR4X3F1ZXVlc1tp XTsNCj4gPiArCQkJCWlmIChxdWV1ZS0+YXN5bmNfcmVnaXN0ZXIpDQo+ID4gKwkJCQkJYXN5bmNf Y2xlYXJfdmlydHF1ZXVlKHF1ZXVlLT52aWQsDQo+IHF1ZXVlLT52aXJ0cXVldWVfaWQsDQo+ID4g KwkJCQkJCQlxdWV1ZS0+ZG1hX2lkKTsNCj4gPiArCQkJfQ0KPiA+ICsJCX0NCj4gPiArDQo+ID4g ICAJCXJ0ZV92aG9zdF9kcml2ZXJfdW5yZWdpc3RlcihpbnRlcm5hbC0+aWZhY2VfbmFtZSk7DQo+ ID4gICAJCXB0aHJlYWRfbXV0ZXhfbG9jaygmaW50ZXJuYWxfbGlzdF9sb2NrKTsNCj4gPiAgIAkJ VEFJTFFfUkVNT1ZFKCZpbnRlcm5hbF9saXN0LCBsaXN0LCBuZXh0KTsgQEAgLTEyNjcsNg0KPiAr MTUwOCw3IEBADQo+ID4gZXRoX3J4X3F1ZXVlX3NldHVwKHN0cnVjdCBydGVfZXRoX2RldiAqZGV2 LCB1aW50MTZfdCByeF9xdWV1ZV9pZCwNCj4gPiAgIAkJICAgc3RydWN0IHJ0ZV9tZW1wb29sICpt Yl9wb29sKQ0KPiA+ICAgew0KPiA+ICAgCXN0cnVjdCB2aG9zdF9xdWV1ZSAqdnE7DQo+ID4gKwlz dHJ1Y3QgcG1kX2ludGVybmFsICppbnRlcm5hbCA9IGRldi0+ZGF0YS0+ZGV2X3ByaXZhdGU7DQo+ ID4NCj4gPiAgIAl2cSA9IHJ0ZV96bWFsbG9jX3NvY2tldChOVUxMLCBzaXplb2Yoc3RydWN0IHZo b3N0X3F1ZXVlKSwNCj4gPiAgIAkJCVJURV9DQUNIRV9MSU5FX1NJWkUsIHNvY2tldF9pZCk7DQo+ ID4gQEAgLTEyNzcsNiArMTUxOSw4IEBAIGV0aF9yeF9xdWV1ZV9zZXR1cChzdHJ1Y3QgcnRlX2V0 aF9kZXYgKmRldiwNCj4gPiB1aW50MTZfdCByeF9xdWV1ZV9pZCwNCj4gPg0KPiA+ICAgCXZxLT5t Yl9wb29sID0gbWJfcG9vbDsNCj4gPiAgIAl2cS0+dmlydHF1ZXVlX2lkID0gcnhfcXVldWVfaWQg KiBWSVJUSU9fUU5VTSArIFZJUlRJT19UWFE7DQo+ID4gKwl2cS0+YXN5bmNfcmVnaXN0ZXIgPSBp bnRlcm5hbC0+cXVldWVfZG1hc1t2cS0NCj4gPnZpcnRxdWV1ZV9pZF0uYXN5bmNfcmVnaXN0ZXI7 DQo+ID4gKwl2cS0+ZG1hX2lkID0gaW50ZXJuYWwtPnF1ZXVlX2RtYXNbdnEtPnZpcnRxdWV1ZV9p ZF0uZG1hX2lkOw0KPiA+ICAgCXJ0ZV9zcGlubG9ja19pbml0KCZ2cS0+aW50cl9sb2NrKTsNCj4g PiAgIAlkZXYtPmRhdGEtPnJ4X3F1ZXVlc1tyeF9xdWV1ZV9pZF0gPSB2cTsNCj4gPg0KPiA+IEBA IC0xMjkwLDYgKzE1MzQsNyBAQCBldGhfdHhfcXVldWVfc2V0dXAoc3RydWN0IHJ0ZV9ldGhfZGV2 ICpkZXYsDQo+IHVpbnQxNl90IHR4X3F1ZXVlX2lkLA0KPiA+ICAgCQkgICBjb25zdCBzdHJ1Y3Qg cnRlX2V0aF90eGNvbmYgKnR4X2NvbmYgX19ydGVfdW51c2VkKQ0KPiA+ICAgew0KPiA+ICAgCXN0 cnVjdCB2aG9zdF9xdWV1ZSAqdnE7DQo+ID4gKwlzdHJ1Y3QgcG1kX2ludGVybmFsICppbnRlcm5h bCA9IGRldi0+ZGF0YS0+ZGV2X3ByaXZhdGU7DQo+ID4NCj4gPiAgIAl2cSA9IHJ0ZV96bWFsbG9j X3NvY2tldChOVUxMLCBzaXplb2Yoc3RydWN0IHZob3N0X3F1ZXVlKSwNCj4gPiAgIAkJCVJURV9D QUNIRV9MSU5FX1NJWkUsIHNvY2tldF9pZCk7DQo+ID4gQEAgLTEyOTksNiArMTU0NCw4IEBAIGV0 aF90eF9xdWV1ZV9zZXR1cChzdHJ1Y3QgcnRlX2V0aF9kZXYgKmRldiwNCj4gdWludDE2X3QgdHhf cXVldWVfaWQsDQo+ID4gICAJfQ0KPiA+DQo+ID4gICAJdnEtPnZpcnRxdWV1ZV9pZCA9IHR4X3F1 ZXVlX2lkICogVklSVElPX1FOVU0gKyBWSVJUSU9fUlhROw0KPiA+ICsJdnEtPmFzeW5jX3JlZ2lz dGVyID0gaW50ZXJuYWwtPnF1ZXVlX2RtYXNbdnEtDQo+ID52aXJ0cXVldWVfaWRdLmFzeW5jX3Jl Z2lzdGVyOw0KPiA+ICsJdnEtPmRtYV9pZCA9IGludGVybmFsLT5xdWV1ZV9kbWFzW3ZxLT52aXJ0 cXVldWVfaWRdLmRtYV9pZDsNCj4gPiAgIAlydGVfc3BpbmxvY2tfaW5pdCgmdnEtPmludHJfbG9j ayk7DQo+ID4gICAJZGV2LT5kYXRhLT50eF9xdWV1ZXNbdHhfcXVldWVfaWRdID0gdnE7DQo+ID4N Cj4gPiBAQCAtMTUwOSwxMyArMTc1NiwxNCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aF9kZXZf b3BzIG9wcyA9IHsNCj4gPiAgIHN0YXRpYyBpbnQNCj4gPiAgIGV0aF9kZXZfdmhvc3RfY3JlYXRl KHN0cnVjdCBydGVfdmRldl9kZXZpY2UgKmRldiwgY2hhciAqaWZhY2VfbmFtZSwNCj4gPiAgIAlp bnQxNl90IHF1ZXVlcywgY29uc3QgdW5zaWduZWQgaW50IG51bWFfbm9kZSwgdWludDY0X3QgZmxh Z3MsDQo+ID4gLQl1aW50NjRfdCBkaXNhYmxlX2ZsYWdzKQ0KPiA+ICsJdWludDY0X3QgZGlzYWJs ZV9mbGFncywgc3RydWN0IGRtYV9pbnB1dF9pbmZvICpkbWFfaW5wdXQpDQo+ID4gICB7DQo+ID4g ICAJY29uc3QgY2hhciAqbmFtZSA9IHJ0ZV92ZGV2X2RldmljZV9uYW1lKGRldik7DQo+ID4gICAJ c3RydWN0IHJ0ZV9ldGhfZGV2X2RhdGEgKmRhdGE7DQo+ID4gICAJc3RydWN0IHBtZF9pbnRlcm5h bCAqaW50ZXJuYWwgPSBOVUxMOw0KPiA+ICAgCXN0cnVjdCBydGVfZXRoX2RldiAqZXRoX2RldiA9 IE5VTEw7DQo+ID4gICAJc3RydWN0IHJ0ZV9ldGhlcl9hZGRyICpldGhfYWRkciA9IE5VTEw7DQo+ ID4gKwlpbnQgaTsNCj4gPg0KPiA+ICAgCVZIT1NUX0xPRyhJTkZPLCAiQ3JlYXRpbmcgVkhPU1Qt VVNFUiBiYWNrZW5kIG9uIG51bWENCj4gc29ja2V0ICV1XG4iLA0KPiA+ICAgCQludW1hX25vZGUp Ow0KPiA+IEBAIC0xNTY0LDYgKzE4MTIsMTIgQEAgZXRoX2Rldl92aG9zdF9jcmVhdGUoc3RydWN0 IHJ0ZV92ZGV2X2RldmljZQ0KPiAqZGV2LCBjaGFyICppZmFjZV9uYW1lLA0KPiA+ICAgCWV0aF9k ZXYtPnJ4X3BrdF9idXJzdCA9IGV0aF92aG9zdF9yeDsNCj4gPiAgIAlldGhfZGV2LT50eF9wa3Rf YnVyc3QgPSBldGhfdmhvc3RfdHg7DQo+ID4NCj4gPiArCWZvciAoaSA9IDA7IGkgPCBSVEVfTUFY X1FVRVVFU19QRVJfUE9SVCAqIDI7IGkrKykgew0KPiA+ICsJCS8qIEludmFsaWQgRE1BIElEIGlu ZGljYXRlcyB0aGUgcXVldWUgZG9lcyBub3Qgd2FudCB0bw0KPiBlbmFibGUgYXN5bmMgZGF0YSBw YXRoICovDQo+ID4gKwkJaW50ZXJuYWwtPnF1ZXVlX2RtYXNbaV0uZG1hX2lkID0gZG1hX2lucHV0 LT5kbWFzW2ldOw0KPiA+ICsJCWludGVybmFsLT5xdWV1ZV9kbWFzW2ldLmFzeW5jX3JlZ2lzdGVy ID0gZmFsc2U7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICAgCXJ0ZV9ldGhfZGV2X3Byb2JpbmdfZmlu aXNoKGV0aF9kZXYpOw0KPiA+ICAgCXJldHVybiAwOw0KPiA+DQo+ID4gQEAgLTE2MDMsNiArMTg1 NywxNTUgQEAgb3Blbl9pbnQoY29uc3QgY2hhciAqa2V5IF9fcnRlX3VudXNlZCwgY29uc3QNCj4g Y2hhciAqdmFsdWUsIHZvaWQgKmV4dHJhX2FyZ3MpDQo+ID4gICAJcmV0dXJuIDA7DQo+ID4gICB9 DQo+ID4NCj4gPiArc3RhdGljIGludA0KPiA+ICtpbml0X2RtYShpbnQxNl90IGRtYV9pZCwgdWlu dDE2X3QgcmluZ19zaXplKSB7DQo+ID4gKwlzdHJ1Y3QgcnRlX2RtYV9pbmZvIGluZm87DQo+ID4g KwlzdHJ1Y3QgcnRlX2RtYV9jb25mIGRldl9jb25maWcgPSB7IC5uYl92Y2hhbnMgPSAxIH07DQo+ ID4gKwlzdHJ1Y3QgcnRlX2RtYV92Y2hhbl9jb25mIHFjb25mID0gew0KPiA+ICsJCS5kaXJlY3Rp b24gPSBSVEVfRE1BX0RJUl9NRU1fVE9fTUVNLA0KPiA+ICsJfTsNCj4gPiArCWludCByZXQgPSAw Ow0KPiA+ICsNCj4gPiArCWlmIChkbWFfaXNfY29uZmlndXJlZChkbWFfaWQpKQ0KPiA+ICsJCWdv dG8gb3V0Ow0KPiA+ICsNCj4gPiArCWlmIChydGVfZG1hX2luZm9fZ2V0KGRtYV9pZCwgJmluZm8p ICE9IDApIHsNCj4gPiArCQlWSE9TVF9MT0coRVJSLCAiZG1hICV1IGdldCBpbmZvIGZhaWxlZFxu IiwgZG1hX2lkKTsNCj4gPiArCQlyZXQgPSAtMTsNCj4gPiArCQlnb3RvIG91dDsNCj4gPiArCX0N Cj4gPiArDQo+ID4gKwlpZiAoaW5mby5tYXhfdmNoYW5zIDwgMSkgew0KPiA+ICsJCVZIT1NUX0xP RyhFUlIsICJObyBjaGFubmVscyBhdmFpbGFibGUgb24gZG1hICVkXG4iLA0KPiBkbWFfaWQpOw0K PiA+ICsJCXJldCA9IC0xOw0KPiA+ICsJCWdvdG8gb3V0Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiAr CWlmIChydGVfZG1hX2NvbmZpZ3VyZShkbWFfaWQsICZkZXZfY29uZmlnKSAhPSAwKSB7DQo+ID4g KwkJVkhPU1RfTE9HKEVSUiwgImRtYSAldSBjb25maWd1cmUgZmFpbGVkXG4iLCBkbWFfaWQpOw0K PiA+ICsJCXJldCA9IC0xOw0KPiA+ICsJCWdvdG8gb3V0Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiAr CXJ0ZV9kbWFfaW5mb19nZXQoZG1hX2lkLCAmaW5mbyk7DQo+ID4gKwlpZiAoaW5mby5uYl92Y2hh bnMgIT0gMSkgew0KPiA+ICsJCVZIT1NUX0xPRyhFUlIsICJkbWEgJXUgaGFzIG5vIHF1ZXVlc1xu IiwgZG1hX2lkKTsNCj4gPiArCQlyZXQgPSAtMTsNCj4gPiArCQlnb3RvIG91dDsNCj4gPiArCX0N Cj4gPiArDQo+ID4gKwlyaW5nX3NpemUgPSBSVEVfTUFYKHJpbmdfc2l6ZSwgTUlOSU1VTV9ETUFf UklOR19TSVpFKTsNCj4gPiArCXJpbmdfc2l6ZSA9IFJURV9NQVgocmluZ19zaXplLCBpbmZvLm1p bl9kZXNjKTsNCj4gPiArCXFjb25mLm5iX2Rlc2MgPSBSVEVfTUlOKHJpbmdfc2l6ZSwgaW5mby5t YXhfZGVzYyk7DQo+ID4gKwlpZiAocnRlX2RtYV92Y2hhbl9zZXR1cChkbWFfaWQsIDAsICZxY29u ZikgIT0gMCkgew0KPiA+ICsJCVZIT1NUX0xPRyhFUlIsICJkbWEgJXUgcXVldWUgc2V0dXAgZmFp bGVkXG4iLCBkbWFfaWQpOw0KPiA+ICsJCXJldCA9IC0xOw0KPiA+ICsJCWdvdG8gb3V0Ow0KPiA+ ICsJfQ0KPiA+ICsNCj4gPiArCWlmIChydGVfZG1hX3N0YXJ0KGRtYV9pZCkgIT0gMCkgew0KPiA+ ICsJCVZIT1NUX0xPRyhFUlIsICJkbWEgJXUgc3RhcnQgZmFpbGVkXG4iLCBkbWFfaWQpOw0KPiA+ ICsJCXJldCA9IC0xOw0KPiA+ICsJCWdvdG8gb3V0Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWNv bmZpZ3VyZWRfZG1hc1tkbWFfY291bnQrK10gPSBkbWFfaWQ7DQo+ID4gKw0KPiA+ICtvdXQ6DQo+ ID4gKwlyZXR1cm4gcmV0Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50DQo+ID4gK29w ZW5fZG1hKGNvbnN0IGNoYXIgKmtleSBfX3J0ZV91bnVzZWQsIGNvbnN0IGNoYXIgKnZhbHVlLCB2 b2lkDQo+ID4gKypleHRyYV9hcmdzKSB7DQo+ID4gKwlzdHJ1Y3QgZG1hX2lucHV0X2luZm8gKmRt YV9pbnB1dCA9IGV4dHJhX2FyZ3M7DQo+ID4gKwljaGFyICppbnB1dCA9IHN0cm5kdXAodmFsdWUs IHN0cmxlbih2YWx1ZSkgKyAxKTsNCj4gPiArCWNoYXIgKmFkZHJzID0gaW5wdXQ7DQo+ID4gKwlj aGFyICpwdHJzWzJdOw0KPiA+ICsJY2hhciAqc3RhcnQsICplbmQsICpzdWJzdHI7DQo+ID4gKwl1 aW50MTZfdCBxaWQsIHZpcnRxdWV1ZV9pZDsNCj4gPiArCWludDE2X3QgZG1hX2lkOw0KPiA+ICsJ aW50IGksIHJldCA9IDA7DQo+ID4gKw0KPiA+ICsJd2hpbGUgKGlzYmxhbmsoKmFkZHJzKSkNCj4g PiArCQlhZGRycysrOw0KPiA+ICsJaWYgKCphZGRycyA9PSAnXDAnKSB7DQo+ID4gKwkJVkhPU1Rf TE9HKEVSUiwgIk5vIGlucHV0IERNQSBhZGRyZXNzZXNcbiIpOw0KPiA+ICsJCXJldCA9IC0xOw0K PiA+ICsJCWdvdG8gb3V0Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCS8qIHByb2Nlc3MgRE1BIGRl dmljZXMgd2l0aGluIGJyYWNrZXQuICovDQo+ID4gKwlhZGRycysrOw0KPiA+ICsJc3Vic3RyID0g c3RydG9rKGFkZHJzLCAiO10iKTsNCj4gPiArCWlmICghc3Vic3RyKSB7DQo+ID4gKwkJVkhPU1Rf TE9HKEVSUiwgIk5vIGlucHV0IERNQSBhZGRyZXNzZVxuIik7DQo+ID4gKwkJcmV0ID0gLTE7DQo+ ID4gKwkJZ290byBvdXQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJZG8gew0KPiA+ICsJCXJ0ZV9z dHJzcGxpdChzdWJzdHIsIHN0cmxlbihzdWJzdHIpLCBwdHJzLCAyLCAnQCcpOw0KPiA+ICsNCj4g PiArCQljaGFyICp0eHEsICpyeHE7DQo+ID4gKwkJYm9vbCBpc190eHE7DQo+ID4gKw0KPiA+ICsJ CXR4cSA9IHN0cnN0cihwdHJzWzBdLCAidHhxIik7DQo+ID4gKwkJcnhxID0gc3Ryc3RyKHB0cnNb MF0sICJyeHEiKTsNCj4gPiArCQlpZiAodHhxID09IE5VTEwgJiYgcnhxID09IE5VTEwpIHsNCj4g PiArCQkJVkhPU1RfTE9HKEVSUiwgIklsbGVnYWwgcXVldWVcbiIpOw0KPiA+ICsJCQlyZXQgPSAt MTsNCj4gPiArCQkJZ290byBvdXQ7DQo+ID4gKwkJfSBlbHNlIGlmICh0eHEpIHsNCj4gPiArCQkJ aXNfdHhxID0gdHJ1ZTsNCj4gPiArCQkJc3RhcnQgPSB0eHE7DQo+ID4gKwkJfSBlbHNlIHsNCj4g PiArCQkJaXNfdHhxID0gZmFsc2U7DQo+ID4gKwkJCXN0YXJ0ID0gcnhxOw0KPiA+ICsJCX0NCj4g PiArDQo+ID4gKwkJc3RhcnQgKz0gMzsNCj4gPiArCQlxaWQgPSBzdHJ0b2woc3RhcnQsICZlbmQs IDApOw0KPiA+ICsJCWlmIChlbmQgPT0gc3RhcnQpIHsNCj4gPiArCQkJVkhPU1RfTE9HKEVSUiwg Ik5vIGlucHV0IHF1ZXVlIElEXG4iKTsNCj4gPiArCQkJcmV0ID0gLTE7DQo+ID4gKwkJCWdvdG8g b3V0Ow0KPiA+ICsJCX0NCj4gPiArDQo+ID4gKwkJdmlydHF1ZXVlX2lkID0gaXNfdHhxID8gcWlk ICogMiArIFZJUlRJT19SWFEgOiBxaWQgKiAyICsNCj4gPiArVklSVElPX1RYUTsNCj4gPiArDQo+ ID4gKwkJZG1hX2lkID0gcnRlX2RtYV9nZXRfZGV2X2lkX2J5X25hbWUocHRyc1sxXSk7DQo+ID4g KwkJaWYgKGRtYV9pZCA8IDApIHsNCj4gPiArCQkJVkhPU1RfTE9HKEVSUiwgIkZhaWwgdG8gZmlu ZCBETUEgZGV2aWNlICVzLlxuIiwNCj4gcHRyc1sxXSk7DQo+ID4gKwkJCXJldCA9IC0xOw0KPiA+ ICsJCQlnb3RvIG91dDsNCj4gPiArCQl9DQo+ID4gKw0KPiA+ICsJCXJldCA9IGluaXRfZG1hKGRt YV9pZCwgZG1hX2lucHV0LT5kbWFfcmluZ19zaXplKTsNCj4gPiArCQlpZiAocmV0ICE9IDApIHsN Cj4gPiArCQkJVkhPU1RfTE9HKEVSUiwgIkZhaWwgdG8gaW5pdGlhbGl6ZSBETUEgJXVcbiIsDQo+ IGRtYV9pZCk7DQo+ID4gKwkJCXJldCA9IC0xOw0KPiA+ICsJCQlicmVhazsNCj4gPiArCQl9DQo+ ID4gKw0KPiA+ICsJCWRtYV9pbnB1dC0+ZG1hc1t2aXJ0cXVldWVfaWRdID0gZG1hX2lkOw0KPiA+ ICsNCj4gPiArCQlzdWJzdHIgPSBzdHJ0b2soTlVMTCwgIjtdIik7DQo+ID4gKwl9IHdoaWxlIChz dWJzdHIpOw0KPiA+ICsNCj4gPiArCWZvciAoaSA9IDA7IGkgPCBkbWFfY291bnQ7IGkrKykgew0K PiA+ICsJCWlmIChydGVfdmhvc3RfYXN5bmNfZG1hX2NvbmZpZ3VyZShjb25maWd1cmVkX2RtYXNb aV0sIDApIDwNCj4gMCkgew0KPiA+ICsJCQlWSE9TVF9MT0coRVJSLCAiRmFpbCB0byBjb25maWd1 cmUgRE1BICV1IHRvDQo+IHZob3N0XG4iLCBjb25maWd1cmVkX2RtYXNbaV0pOw0KPiA+ICsJCQly ZXQgPSAtMTsNCj4gPiArCQl9DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICtvdXQ6DQo+ID4gKwlmcmVl KGlucHV0KTsNCj4gPiArCXJldHVybiByZXQ7DQo+ID4gK30NCj4gPiArDQo+ID4gICBzdGF0aWMg aW50DQo+ID4gICBydGVfcG1kX3Zob3N0X3Byb2JlKHN0cnVjdCBydGVfdmRldl9kZXZpY2UgKmRl dikNCj4gPiAgIHsNCj4gPiBAQCAtMTYyMSw2ICsyMDI0LDEwIEBAIHJ0ZV9wbWRfdmhvc3RfcHJv YmUoc3RydWN0IHJ0ZV92ZGV2X2RldmljZQ0KPiAqZGV2KQ0KPiA+ICAgCWludCBsZWdhY3lfb2xf ZmxhZ3MgPSAwOw0KPiA+ICAgCXN0cnVjdCBydGVfZXRoX2RldiAqZXRoX2RldjsNCj4gPiAgIAlj b25zdCBjaGFyICpuYW1lID0gcnRlX3ZkZXZfZGV2aWNlX25hbWUoZGV2KTsNCj4gPiArCXN0cnVj dCBkbWFfaW5wdXRfaW5mbyBkbWFfaW5wdXQ7DQo+ID4gKw0KPiA+ICsJbWVtc2V0KGRtYV9pbnB1 dC5kbWFzLCBJTlZBTElEX0RNQV9JRCwNCj4gc2l6ZW9mKGRtYV9pbnB1dC5kbWFzKSk7DQo+ID4g KwlkbWFfaW5wdXQuZG1hX3Jpbmdfc2l6ZSA9IERFRkFVTFRfRE1BX1JJTkdfU0laRTsNCj4gPg0K PiA+ICAgCVZIT1NUX0xPRyhJTkZPLCAiSW5pdGlhbGl6aW5nIHBtZF92aG9zdCBmb3IgJXNcbiIs IG5hbWUpOw0KPiA+DQo+ID4gQEAgLTE3MzYsNiArMjE0Myw0MyBAQCBydGVfcG1kX3Zob3N0X3By b2JlKHN0cnVjdCBydGVfdmRldl9kZXZpY2UNCj4gKmRldikNCj4gPiAgIAkJCWdvdG8gb3V0X2Zy ZWU7DQo+ID4gICAJfQ0KPiA+DQo+ID4gKwlpZiAocnRlX2t2YXJnc19jb3VudChrdmxpc3QsIEVU SF9WSE9TVF9ETUFfUklOR19TSVpFKSA9PSAxKSB7DQo+ID4gKwkJaWYgKHJ0ZV9rdmFyZ3NfY291 bnQoa3ZsaXN0LCBFVEhfVkhPU1RfRE1BX0FSRykgPT0gMSkgew0KPiA+ICsJCQlyZXQgPSBydGVf a3ZhcmdzX3Byb2Nlc3Moa3ZsaXN0LA0KPiBFVEhfVkhPU1RfRE1BX1JJTkdfU0laRSwNCj4gPiAr CQkJCQkmb3Blbl9pbnQsDQo+ICZkbWFfaW5wdXQuZG1hX3Jpbmdfc2l6ZSk7DQo+ID4gKwkJCWlm IChyZXQgPCAwKQ0KPiA+ICsJCQkJZ290byBvdXRfZnJlZTsNCj4gPiArDQo+ID4gKwkJCWlmICgh cnRlX2lzX3Bvd2VyX29mXzIoZG1hX2lucHV0LmRtYV9yaW5nX3NpemUpKSB7DQo+ID4gKwkJCQlk bWFfaW5wdXQuZG1hX3Jpbmdfc2l6ZSA9DQo+IHJ0ZV9hbGlnbjMycG93MihkbWFfaW5wdXQuZG1h X3Jpbmdfc2l6ZSk7DQo+ID4gKwkJCQlWSE9TVF9MT0coSU5GTywgIkNvbnZlcnQgZG1hX3Jpbmdf c2l6ZSB0bw0KPiB0aGUgcG93ZXIgb2YgdHdvICV1XG4iLA0KPiA+ICsJCQkJCQlkbWFfaW5wdXQu ZG1hX3Jpbmdfc2l6ZSk7DQo+ID4gKwkJCX0NCj4gPiArCQl9IGVsc2Ugew0KPiA+ICsJCQlWSE9T VF9MT0coV0FSTklORywgIiVzIGlzIG5vdCBzcGVjaWZpZWQsIHNraXAgdG8NCj4gcGFyc2UgJXNc biIsDQo+ID4gKwkJCQkJRVRIX1ZIT1NUX0RNQV9BUkcsDQo+IEVUSF9WSE9TVF9ETUFfUklOR19T SVpFKTsNCj4gPiArCQl9DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJaWYgKHJ0ZV9rdmFyZ3NfY291 bnQoa3ZsaXN0LCBFVEhfVkhPU1RfRE1BX0FSRykgPT0gMSkgew0KPiA+ICsJCWlmIChydGVfa3Zh cmdzX2NvdW50KGt2bGlzdCwgRVRIX1ZIT1NUX0RNQV9SSU5HX1NJWkUpID09DQo+IDApDQo+ID4g KwkJCVZIT1NUX0xPRyhJTkZPLCAiVXNlIGRlZmF1bHQgZG1hIHJpbmcgc2l6ZSAlZFxuIiwNCj4g PiArREVGQVVMVF9ETUFfUklOR19TSVpFKTsNCj4gPiArDQo+ID4gKwkJcmV0ID0gcnRlX2t2YXJn c19wcm9jZXNzKGt2bGlzdCwgRVRIX1ZIT1NUX0RNQV9BUkcsDQo+ID4gKwkJCQkJICZvcGVuX2Rt YSwgJmRtYV9pbnB1dCk7DQo+ID4gKwkJaWYgKHJldCA8IDApIHsNCj4gPiArCQkJVkhPU1RfTE9H KEVSUiwgIkZhaWxlZCB0byBwYXJzZSAlc1xuIiwNCj4gRVRIX1ZIT1NUX0RNQV9BUkcpOw0KPiA+ ICsJCQlnb3RvIG91dF9mcmVlOw0KPiA+ICsJCX0NCj4gPiArDQo+ID4gKwkJZmxhZ3MgfD0gUlRF X1ZIT1NUX1VTRVJfQVNZTkNfQ09QWTsNCj4gPiArCQkvKioNCj4gPiArCQkgKiBEb24ndCBzdXBw b3J0IGxpdmUgbWlncmF0aW9uIHdoZW4gZW5hYmxlDQo+ID4gKwkJICogRE1BIGFjY2VsZXJhdGlv bi4NCj4gPiArCQkgKi8NCj4gPiArCQlkaXNhYmxlX2ZsYWdzIHw9ICgxVUxMIDw8IFZIT1NUX0Zf TE9HX0FMTCk7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICAgCWlmIChsZWdhY3lfb2xfZmxhZ3MgPT0g MCkNCj4gPiAgIAkJZmxhZ3MgfD0gUlRFX1ZIT1NUX1VTRVJfTkVUX0NPTVBMSUFOVF9PTF9GTEFH UzsNCj4gPg0KPiA+IEBAIC0xNzQzLDcgKzIxODcsNyBAQCBydGVfcG1kX3Zob3N0X3Byb2JlKHN0 cnVjdCBydGVfdmRldl9kZXZpY2UNCj4gKmRldikNCj4gPiAgIAkJZGV2LT5kZXZpY2UubnVtYV9u b2RlID0gcnRlX3NvY2tldF9pZCgpOw0KPiA+DQo+ID4gICAJcmV0ID0gZXRoX2Rldl92aG9zdF9j cmVhdGUoZGV2LCBpZmFjZV9uYW1lLCBxdWV1ZXMsDQo+ID4gLQkJCQkgICBkZXYtPmRldmljZS5u dW1hX25vZGUsIGZsYWdzLA0KPiBkaXNhYmxlX2ZsYWdzKTsNCj4gPiArCQkJZGV2LT5kZXZpY2Uu bnVtYV9ub2RlLCBmbGFncywgZGlzYWJsZV9mbGFncywNCj4gJmRtYV9pbnB1dCk7DQo+ID4gICAJ aWYgKHJldCA9PSAtMSkNCj4gPiAgIAkJVkhPU1RfTE9HKEVSUiwgIkZhaWxlZCB0byBjcmVhdGUg JXNcbiIsIG5hbWUpOw0KPiA+DQo+ID4gQEAgLTE3ODcsNCArMjIzMSw2IEBAIFJURV9QTURfUkVH SVNURVJfUEFSQU1fU1RSSU5HKG5ldF92aG9zdCwNCj4gPiAgIAkicG9zdGNvcHktc3VwcG9ydD08 MHwxPiAiDQo+ID4gICAJInRzbz08MHwxPiAiDQo+ID4gICAJImxpbmVhci1idWZmZXI9PDB8MT4g Ig0KPiA+IC0JImV4dC1idWZmZXI9PDB8MT4iKTsNCj4gPiArCSJleHQtYnVmZmVyPTwwfDE+ICIN Cj4gPiArCSJkbWEtcmluZy1zaXplPTxpbnQ+ICINCj4gPiArCSJkbWFzPVt0eHEwQGRtYV9hZGRy O3J4cTBAZG1hX2FkZHJdIik7DQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Zob3N0L3J0 ZV9ldGhfdmhvc3QuaA0KPiA+IGIvZHJpdmVycy9uZXQvdmhvc3QvcnRlX2V0aF92aG9zdC5oDQo+ ID4gaW5kZXggMGU2OGI5ZjY2OC4uMTQ2Yzk4ODAzZCAxMDA2NDQNCj4gPiAtLS0gYS9kcml2ZXJz L25ldC92aG9zdC9ydGVfZXRoX3Zob3N0LmgNCj4gPiArKysgYi9kcml2ZXJzL25ldC92aG9zdC9y dGVfZXRoX3Zob3N0LmgNCj4gPiBAQCAtNTIsNiArNTIsMjEgQEAgaW50IHJ0ZV9ldGhfdmhvc3Rf Z2V0X3F1ZXVlX2V2ZW50KHVpbnQxNl90IHBvcnRfaWQsDQo+ID4gICAgKi8NCj4gPiAgIGludCBy dGVfZXRoX3Zob3N0X2dldF92aWRfZnJvbV9wb3J0X2lkKHVpbnQxNl90IHBvcnRfaWQpOw0KPiA+ DQo+ID4gKy8qKg0KPiA+ICsgKiBAd2FybmluZw0KPiA+ICsgKiBAYiBFWFBFUklNRU5UQUw6IHRo aXMgQVBJIG1heSBjaGFuZ2UsIG9yIGJlIHJlbW92ZWQsIHdpdGhvdXQgcHJpb3INCj4gPiArbm90 aWNlDQo+ID4gKyAqDQo+ID4gKyAqIEJ5IGRlZmF1bHQsIHJ0ZV92aG9zdF9wb2xsX2VucXVldWVf Y29tcGxldGVkKCkgaXMgY2FsbGVkIGluIFJ4IHBhdGguDQo+ID4gKyAqIFRoaXMgZnVuY3Rpb24g ZW5hYmxlcyBUeCBwYXRoLCByYXRoZXIgdGhhbiBSeCBwYXRoLCB0byBwb2xsDQo+ID4gK2NvbXBs ZXRlZA0KPiA+ICsgKiBwYWNrZXRzIGZvciB2aG9zdCBhc3luYyBlbnF1ZXVlIG9wZXJhdGlvbnMu IE5vdGUgdGhhdCB2aXJ0aW8gbWF5DQo+ID4gK25ldmVyDQo+ID4gKyAqIHJlY2VpdmUgRE1BIGNv bXBsZXRlZCBwYWNrZXRzIGlmIHRoZXJlIGFyZSBubyBtb3JlIFR4IG9wZXJhdGlvbnMuDQo+ID4g KyAqDQo+ID4gKyAqIEBwYXJhbSBlbmFibGUNCj4gPiArICogIFRydWUgaW5kaWNhdGVzIFR4IHBh dGggdG8gY2FsbCBydGVfdmhvc3RfcG9sbF9lbnF1ZXVlX2NvbXBsZXRlZCgpLg0KPiA+ICsgKi8N Cj4gPiArX19ydGVfZXhwZXJpbWVudGFsDQo+ID4gK3ZvaWQgcnRlX2V0aF92aG9zdF9hc3luY190 eF9wb2xsX2NvbXBsZXRlZChib29sIGVuYWJsZSk7DQo+ID4gKw0KPiA+ICAgI2lmZGVmIF9fY3Bs dXNwbHVzDQo+ID4gICB9DQo+ID4gICAjZW5kaWYNCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9u ZXQvdmhvc3QvdmVyc2lvbi5tYXANCj4gPiBiL2RyaXZlcnMvbmV0L3Zob3N0L3ZlcnNpb24ubWFw IGluZGV4IGU0MmM4OWYxZWIuLjBhNDA0NDEyMjcgMTAwNjQ0DQo+ID4gLS0tIGEvZHJpdmVycy9u ZXQvdmhvc3QvdmVyc2lvbi5tYXANCj4gPiArKysgYi9kcml2ZXJzL25ldC92aG9zdC92ZXJzaW9u Lm1hcA0KPiA+IEBAIC02LDMgKzYsMTAgQEAgRFBES18yMyB7DQo+ID4NCj4gPiAgIAlsb2NhbDog KjsNCj4gPiAgIH07DQo+ID4gKw0KPiA+ICtFWFBFUklNRU5UQUwgew0KPiA+ICsJZ2xvYmFsOg0K PiA+ICsNCj4gPiArCSMgYWRkZWQgaW4gMjIuMTENCj4gPiArCXJ0ZV9ldGhfdmhvc3RfYXN5bmNf dHhfcG9sbF9jb21wbGV0ZWQ7DQo+IA0KPiBJJ20gbm90IGluIGZhdm9yIG9mIGFkZGluZyBkcml2 ZXItc3BlY2lmaWMgQVBJLg0KPiBJTUhPLCB5b3Ugc2hvdWxkIGp1c3QgZGVjaWRlIHdoZXRoZXIg ZG9pbmcgY29tcGxldGlvbiBvbiBUeCBvciBSeCBwYXRoDQo+IGFuZCBzdGljayB3aXRoIGl0Lg0K PiANCj4gRG9pbmcgY29tcGxldGlvbiBvbiB0aGUgVHggcGF0aCBub3QgYmVpbmcgcmVsaWFibGUg KGkuZS4gaWYgbm90IG90aGVyIHBhY2tldHMNCj4gYXJlIHNlbnQsIGxhc3QgZW5xdWV1ZWQgcGFj a2V0cyBhcmUgbm90IGNvbXBsZXRlZCksIEkgZ3Vlc3Mgb25seSBkb2luZw0KPiBjb21wbGV0aW9u IGluIFJ4IHBhdGggaXMgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvLg0KDQpJdCdzIGdvb2QgdG8ga25v dyB5b3VyIHRob3VnaHRzLiBCdXQgaWYgd2UgcmVtb3ZlIHRoZSBkcml2ZXItc3BlY2lmaWMgQVBJ IGFuZA0KcHV0IHBvbGxfZW5xdWV1ZV9jb21wbGV0ZWQgaW4gUnggcGF0aCwgVGVzdHBtZCB0eG9u bHkgbW9kZSBjYW5ub3Qgd29yaw0Kd2l0aCBETUEgYWNjZWxlcmF0ZWQgZW5xdWV1ZSwgYXMgbm8g b25lIHdpbGwgY2FsbCBwb2xsX2VucXVldWVfY29tcGxldGVkLg0KQW55IHRob3VnaHRzPw0KDQpU aGFua3MsDQpKaWF5dQ0K