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 280A0A04FF; Thu, 31 Mar 2022 13:20:47 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id B9EF0410FA; Thu, 31 Mar 2022 13:20:46 +0200 (CEST) Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by mails.dpdk.org (Postfix) with ESMTP id 96B4440DF6 for ; Thu, 31 Mar 2022 13:20:44 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1648725644; x=1680261644; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=5yL0nbI3xjvotHSJA64HB5sQAH15ochEGW7QaYUecuo=; b=lTBPe8eL9aXKv10KKFFTdKiZB4hyE+PDqZPihBU56CGenC24AfFT48xV j70NKxeaf1buYaQsCPQ0Cvv6H4IOOg3NmLwc+B86sJg1if0oXPukkMI8f Gg9iZojsd/0hab/4vd1kFVpcRVuIYET1Q/PpaC5+pOoPSF5OIoQsHdOza 0LChPf6sFCcgGp3TKw3NzXLJPUAf6EDPq6ld57cG28zPQWc6AGviVS3xl nWYjUsshFWwFRZkxuE+ChXAxkiXfe1zIzisbVDVlzWsWmsV8zxaeRDDGN 1TtoCDp9doGS8NT/ks64ZX29my3t864sCjbpNkJ0BFbZxMBPUnl21k/+D Q==; X-IronPort-AV: E=McAfee;i="6200,9189,10302"; a="284718332" X-IronPort-AV: E=Sophos;i="5.90,225,1643702400"; d="scan'208";a="284718332" Received: from orsmga007.jf.intel.com ([10.7.209.58]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 31 Mar 2022 04:20:43 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.90,225,1643702400"; d="scan'208";a="547283168" Received: from fmsmsx601.amr.corp.intel.com ([10.18.126.81]) by orsmga007.jf.intel.com with ESMTP; 31 Mar 2022 04:20:43 -0700 Received: from fmsmsx607.amr.corp.intel.com (10.18.126.87) by fmsmsx601.amr.corp.intel.com (10.18.126.81) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.27; Thu, 31 Mar 2022 04:20:42 -0700 Received: from fmsmsx602.amr.corp.intel.com (10.18.126.82) by fmsmsx607.amr.corp.intel.com (10.18.126.87) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.27; Thu, 31 Mar 2022 04:20:42 -0700 Received: from fmsedg601.ED.cps.intel.com (10.1.192.135) by fmsmsx602.amr.corp.intel.com (10.18.126.82) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.27 via Frontend Transport; Thu, 31 Mar 2022 04:20:42 -0700 Received: from NAM10-MW2-obe.outbound.protection.outlook.com (104.47.55.109) by edgegateway.intel.com (192.55.55.70) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2308.27; Thu, 31 Mar 2022 04:20:42 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=NKoyn0ujGVkcVJtFDaVvHtu6awEj7SCbIH2G7hluYDBHy1EnBQwcbCOHwTlF6PP92l8HT/jO8YT+MahY8Hn+JLlzux8KDz6yHMW8jZYTUCF5vJdRYwrH7bDRiqZ5NfPH0cj8Yqv4oYfel1RwBTA0HOy1l73DXF9kiICpEiCGbgNfH90HBGCCv38tQhBrffmZXRPVbD7z/o1t1HI3UN77JaGs5Tp1uSWw3USrdRGpsmcYNoQEW2DbQ6lWlhT/Y7PY4/0b17o2GohG+9X6TMSmWdm9BWmglRqsnxDsXxm8CnSt7vQsXu3QVVgvPlakzHQy9wB4kKuFCeCAUnz32FoPSg== 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=5yL0nbI3xjvotHSJA64HB5sQAH15ochEGW7QaYUecuo=; b=WHAncQfZBVQzXoRCdHAv0jvV9k66iBcdk41Bf5RV8fGxCzWGwEXn4cPyCQ62pKlcTvnWE+8eXBd6T0hSGI1XjJZg4aFy/Zv9GUdajFDigXpwXZqifwy/Bd4quJcqcEUP6BFaAs3JemBxuSiCO8tQPOVb44c9B7TdXAMoQ7FqdCb4lNmfMv8s5pwfmDHBtlfvGZuKCeztEYXak8SBeGt+N13UpYAv3vi52uoJc/Sl3FtzHBgRgMiI2K1CNyh0ziwBjx6C8oDofirKN7fTDi+TysAazCaTQ1MMfCqg+Op7zpuwC+v2aPmn55s82rkakIVQ3wsOQoSkpxDVWtSGAK0SLw== 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 BN9PR11MB5513.namprd11.prod.outlook.com (2603:10b6:408:102::11) by MN2PR11MB4287.namprd11.prod.outlook.com (2603:10b6:208:189::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5102.17; Thu, 31 Mar 2022 11:20:38 +0000 Received: from BN9PR11MB5513.namprd11.prod.outlook.com ([fe80::d50f:97f6:7376:7400]) by BN9PR11MB5513.namprd11.prod.outlook.com ([fe80::d50f:97f6:7376:7400%4]) with mapi id 15.20.5123.020; Thu, 31 Mar 2022 11:20:38 +0000 From: "Ding, Xuan" To: Maxime Coquelin , "Xia, Chenbo" CC: "dev@dpdk.org" , "Hu, Jiayu" , "Jiang, Cheng1" , "Pai G, Sunil" , "liangma@liangbit.com" , "Wang, YuanX" Subject: RE: [RFC,v3 1/2] vhost: support async dequeue for split ring Thread-Topic: [RFC,v3 1/2] vhost: support async dequeue for split ring Thread-Index: AQHYNEwX8fOvbPECbkWlGAmd2Ga/l6zZVw4AgAAdz+A= Date: Thu, 31 Mar 2022 11:20:38 +0000 Message-ID: References: <20220101001244.90147-1-xuan.ding@intel.com> <20220310065407.17145-1-xuan.ding@intel.com> <20220310065407.17145-2-xuan.ding@intel.com> <38827506-7d29-9081-bb48-dbe01bd69b72@redhat.com> In-Reply-To: <38827506-7d29-9081-bb48-dbe01bd69b72@redhat.com> Accept-Language: zh-CN, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-reaction: no-action dlp-version: 11.6.401.20 authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 54742571-0ad3-44a6-af56-08da13087bdb x-ms-traffictypediagnostic: MN2PR11MB4287:EE_ x-ld-processed: 46c98d88-e344-4ed4-8496-4ed7712e255d,ExtAddr x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: 580m+o299vJwWwFfcmzilj2yob03m7oJo7IefL4cKe+M1SANeoBsQgGAEH4jTOgizyVqLZbSN89YBkORE3xif+FIkVdYL6jVil1pORx5ggX7Gm4Uis0toP4S0o3hRy61aFwQrvTA6tyTk/j3i74GCc6WiIhBtwKpsc5aohYvM05PnkgaZfrmaD7AAiMrcw7DK/bJX40AVN0MZFGRqY6eZahxAYP14xgmmEWoK8IxSMS8AUhkeBUm/ZsJBZzeBrVbo9wyYPK6vJoNx7h2zJEfhQlOv+7uLNMqQGnsfkfSQfVjW7auaNW54Vx+WcJQi8e8YijwMsW+2j09OCMGkCr8PiMuNAga72ZBMH5aVWayYyvKu1WiTrstO4RRCmWlfk48zJup7Htt9Q7CLQXhzodYyWKNCATZWBN1P6/iB0C1JQLnEWXhRienfAlKgUoC9sAkkbcvwCc3loyd5P12ejvN44UJhqvmNk5jZgmnQpMoo0uqSM37iNZF6gOjrPsfihqmqQggxtR2A3ok7TdpxeA/cog+O4UaSEVY8r6xIUCOTBJMws9J1q0PlAodOgEbJXwpN1dBqNSrGGV+bHYErvpXVo1LP6ERSsSjZsrXmGte+07TXWZNShtazPgWeTaDwYsKQ4Qmh0tvGQXQa9KzryCvc0C+0Wb3wK0fyBL6f5sNNQsvgwVXAMDe1dkIh+a44+RMm14BW3RzkxRDayHkwegS3Q== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BN9PR11MB5513.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230001)(366004)(4326008)(6506007)(8676002)(186003)(76116006)(7696005)(110136005)(64756008)(86362001)(9686003)(66946007)(53546011)(55016003)(66476007)(26005)(71200400001)(508600001)(83380400001)(54906003)(66556008)(33656002)(316002)(107886003)(66446008)(6636002)(122000001)(8936002)(5660300002)(38100700002)(82960400001)(2906002)(30864003)(38070700005)(52536014)(579004)(559001); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?M1pJeTdsb204MzU3NEk4eXE5MDBweHBCQ3Uzbzd2cG5ZVHZiVmRwOElXYzRu?= =?utf-8?B?Y3dYNitPVW9QVStIeDVVS0hVVmZhT1ZSMGxVcnRJOHN0UzZvQUlkbEhnNDY1?= =?utf-8?B?TXVrZlR5bHV0cS8zZzJlQjB6RWpnTFlDWmIzUnIwUkNYWkx6VFFxV2ZpOXBQ?= =?utf-8?B?Mnp2USsrMVcwWWNEVU80NTgzeStOTUFWSXpHMjZNelR0a3FkZnZKY3g4Vkl4?= =?utf-8?B?aGNxQUFqM2ZVZDZtenpZR2NibWJCNUhvRVRuZU1IdExrMG5KT09jTDE4WkN3?= =?utf-8?B?TzE1UEN1Q3VZZXk1Ty9MODh4SnJEd2JlRVMvN2tFRHRxNkdCYXN0eTBsZHlV?= =?utf-8?B?T2JSUkV5empHRE5iOFZURTZ2YmdFMnNLMXBGNjJBVUtWS3pyQ0JFT0hmWisw?= =?utf-8?B?Y3Y4QyszdzhYMVZTcXhPaUhzTWt5bVlvR29jYWhXSFhmUkxyazFBMzl6TUcz?= =?utf-8?B?TEpzMG1LdHFidlFRWWJqaWR1WWV3UGJzZmozRmQ4RUpvUy9ncExBeW9kNmRT?= =?utf-8?B?R0lBU0h1V1ZBZXA4UkJxcjcyVkpiMVJIWGs1bFlNdlZtd0V6dzFYaW9MZUhM?= =?utf-8?B?OEpoeSthSkJzTlRkZ3RPekg4dVJlbXpYakpWZVh0K1FEc29jeVgrNVhOc3BG?= =?utf-8?B?eHEyejU4bGFvRkpvbDN2T0VOd3VnWGt6RXd6YVpJU1NZOUpFbjlpNTFvaWd4?= =?utf-8?B?K2o2UjloYnRkTzlFWnNUeC95Tnlmdm1MZ1N6dDNYUUhlaXQwMERSQWtWU3JJ?= =?utf-8?B?QzJGeXF0Y21RaFdKRU51ZHZlSFpPY2FIS2RUSzNHeXQvTmF3ZjdnOG42R3dJ?= =?utf-8?B?bkNjS1BLdGN6OVUrTDNycU9adzZGMDBHLytCanduVzQ4bVVTU3ZCVStBd3pZ?= =?utf-8?B?em1vM2NyQkRBZjhWVkxxN2VsZ2xrbkxuMEc1V0RsdmNIZ3lZcmZsbk5FK2ha?= =?utf-8?B?dmZJWU5OQWtiYUk4OUFnVi9YZXRmVFQ2Y1JyNytBLzBmWXVwTGFvZ2lDTm9m?= =?utf-8?B?R2wvV1lXTnE4eUhOYThJd0lvK1RabU0yN3hjWCs2azBGU3pObkt0eEQ2RFNw?= =?utf-8?B?bms2bXBWa0pCUXR0Z2p4amtuKzNkcisyWWRpNFBQaTJ0emQxSFN2OGMrT0Qv?= =?utf-8?B?bmNCdkFiRVJCSWw3YWQ1cmZBM0VhVG5NejZTRUxta3JhdmNpWGFSQVo5S2hp?= =?utf-8?B?Yll5WDEwS09DQlBEYThtR0NFV2plSWd2YWlrTnEvWWxpL2Q1eDRIS0ZaWWhp?= =?utf-8?B?OHQyRWQ2YnpUNDZLSGpjcFN5MVFLclhhWno3SkYzcytjNDZqSnlCS0YwTnAr?= =?utf-8?B?b2JPNDB6eFRrSTAxa1ZDMVZiMWdqSnQ4cEd4V2JZc05JZFkxVjNUM2diU2Fw?= =?utf-8?B?ZlY3dTdIQ2lYcDhmQktibTdJbHROK3hYK3B4b2NKaEJzeEpQZGV2eFYyTGpF?= =?utf-8?B?bUYrY1VQeEVvUHBGd3AwRkpFek9YMERVQ0hQNU1mVlE2QXNiYW1LTE9vbndh?= =?utf-8?B?dHk1ZUF4bWMrekFZTzRCeFRvd1BYb1RpMTBQOS9nbC9aSEFwNkdLeDFuSktm?= =?utf-8?B?bG1MUmNSNFdJV0d1Z1gzL3BuQ1k2THNEOHlzM2ZRdGZmZ2ZkaitRR0VSQVRJ?= =?utf-8?B?WitwNFNIbkp0Z3hCRXRvTzlwcmpSSnBRcU1zc2tXUjNiZlQrNHdJTTVzdmZj?= =?utf-8?B?REpQN0pENXJRZ3Z2WFFmenlvdE13dnBabm9RZEJPaTlJb2xhaXYxdlFNc3ll?= =?utf-8?B?QWlsaWY2U09UMmkzOWM3TGZKOEVwbmFhSDBrL0w0VjlYeWFLd1FkRVZrMGhH?= =?utf-8?B?elRXWEtqbjVtbW5VekFoUVk2SVpXSElaZE43WkZ3YVpTcmZRQm1XRG1nQlJT?= =?utf-8?B?SXdMQXhEMlNKVDBnc2NTRE1tbmh6eXZWOXp1NDNHa2hQVW1TaW0yOGJqWTdC?= =?utf-8?B?VW04dUxxMlpnSUdvR3lZdWR3dGFiTDdnTHRLQWFONTlvb3BWMHQwbDBSWldI?= =?utf-8?B?MURtRHdiYU9pQnN5U1U5WW9ncEtYVDdOTnp1cjlQem5XZEF6ME5zVlBPUG5k?= =?utf-8?B?c2lTbG51bndWVGxBTXE2Z3dFcUljOWpJRmxlNVlhdmx2aDFHeVVnSytFdmo4?= =?utf-8?B?WWxtRHBJRUFMRGl1bndKTUtwQUF5QmloSWhnOCtTMmNxclUvWGxKaklDV3VZ?= =?utf-8?B?YmwxT2RiNEFmUWlFck9ESzduQmJINVl0SVYydDNXVWFMWEl3K2g4a0VEU3Ev?= =?utf-8?B?K0M4RmlJOU4wVG14WnNXSStPeGY3UVlzL01pdGsyb0NwRUYyandvWVk4Zm5r?= =?utf-8?B?YnJKYzYrTFliWUp1WGVoZ1J2dEU3TldvYVdib25CVndpUWpmZE4rUT09?= 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: BN9PR11MB5513.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 54742571-0ad3-44a6-af56-08da13087bdb X-MS-Exchange-CrossTenant-originalarrivaltime: 31 Mar 2022 11:20:38.2976 (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: /gcBQMdNFoW2rPQufpGdes+Kd0RI6CYE+QFRbhwu3ktN2UR70V0iW8GSdzkCv1xkTO2Akrd67dkpxSayI6Fk9g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR11MB4287 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 SGkgTWF4aW1lLA0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IE1heGlt ZSBDb3F1ZWxpbiA8bWF4aW1lLmNvcXVlbGluQHJlZGhhdC5jb20+DQo+IFNlbnQ6IFRodXJzZGF5 LCBNYXJjaCAzMSwgMjAyMiA1OjE1IFBNDQo+IFRvOiBEaW5nLCBYdWFuIDx4dWFuLmRpbmdAaW50 ZWwuY29tPjsgWGlhLCBDaGVuYm8gPGNoZW5iby54aWFAaW50ZWwuY29tPg0KPiBDYzogZGV2QGRw ZGsub3JnOyBIdSwgSmlheXUgPGppYXl1Lmh1QGludGVsLmNvbT47IEppYW5nLCBDaGVuZzENCj4g PGNoZW5nMS5qaWFuZ0BpbnRlbC5jb20+OyBQYWkgRywgU3VuaWwgPHN1bmlsLnBhaS5nQGludGVs LmNvbT47DQo+IGxpYW5nbWFAbGlhbmdiaXQuY29tOyBXYW5nLCBZdWFuWCA8eXVhbngud2FuZ0Bp bnRlbC5jb20+DQo+IFN1YmplY3Q6IFJlOiBbUkZDLHYzIDEvMl0gdmhvc3Q6IHN1cHBvcnQgYXN5 bmMgZGVxdWV1ZSBmb3Igc3BsaXQgcmluZw0KPiANCj4gDQo+IA0KPiBPbiAzLzEwLzIyIDA3OjU0 LCB4dWFuLmRpbmdAaW50ZWwuY29tIHdyb3RlOg0KPiA+IEZyb206IFh1YW4gRGluZyA8eHVhbi5k aW5nQGludGVsLmNvbT4NCj4gPg0KPiA+IFRoaXMgcGF0Y2ggaW1wbGVtZW50cyBhc3luY2hyb25v dXMgZGVxdWV1ZSBkYXRhIHBhdGggZm9yIHZob3N0IHNwbGl0DQo+ID4gcmluZywgd2l0aCBkbWFk ZXYgbGlicmFyeSBpbnRlZ3JhdGVkLg0KPiA+DQo+ID4gU2lnbmVkLW9mZi1ieTogWHVhbiBEaW5n IDx4dWFuLmRpbmdAaW50ZWwuY29tPg0KPiA+IFNpZ25lZC1vZmYtYnk6IFl1YW4gV2FuZyA8eXVh bngud2FuZ0BpbnRlbC5jb20+DQo+ID4gLS0tDQo+ID4gICBsaWIvdmhvc3QvcnRlX3Zob3N0X2Fz eW5jLmggfCAgMzcgKystDQo+ID4gICBsaWIvdmhvc3QvdmVyc2lvbi5tYXAgICAgICAgfCAgIDEg Kw0KPiA+ICAgbGliL3Zob3N0L3Zob3N0LmggICAgICAgICAgIHwgICAxICsNCj4gPiAgIGxpYi92 aG9zdC92aXJ0aW9fbmV0LmMgICAgICB8IDUwNCArKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysNCj4gPiAgIDQgZmlsZXMgY2hhbmdlZCwgNTQxIGluc2VydGlvbnMoKyksIDIgZGVs ZXRpb25zKC0pDQo+ID4NCj4gPiBkaWZmIC0tZ2l0IGEvbGliL3Zob3N0L3J0ZV92aG9zdF9hc3lu Yy5oIGIvbGliL3Zob3N0L3J0ZV92aG9zdF9hc3luYy5oDQo+ID4gaW5kZXggZjEyOTNjNmE5ZC4u YjZhYjBiMDZhMiAxMDA2NDQNCj4gPiAtLS0gYS9saWIvdmhvc3QvcnRlX3Zob3N0X2FzeW5jLmgN Cj4gPiArKysgYi9saWIvdmhvc3QvcnRlX3Zob3N0X2FzeW5jLmgNCj4gPiBAQCAtMTU1LDkgKzE1 NSw5IEBAIGludCBydGVfdmhvc3RfYXN5bmNfZ2V0X2luZmxpZ2h0KGludCB2aWQsIHVpbnQxNl90 DQo+IHF1ZXVlX2lkKTsNCj4gPiAgICAqIEBwYXJhbSBjb3VudA0KPiA+ICAgICogIFNpemUgb2Yg dGhlIHBhY2tldCBhcnJheQ0KPiA+ICAgICogQHBhcmFtIGRtYV9pZA0KPiA+IC0gKiAgdGhlIGlk ZW50aWZpZXIgb2YgRE1BIGRldmljZQ0KPiA+ICsgKiAgVGhlIGlkZW50aWZpZXIgb2YgRE1BIGRl dmljZQ0KPiA+ICAgICogQHBhcmFtIHZjaGFuX2lkDQo+ID4gLSAqICB0aGUgaWRlbnRpZmllciBv ZiB2aXJ0dWFsIERNQSBjaGFubmVsDQo+ID4gKyAqICBUaGUgaWRlbnRpZmllciBvZiB2aXJ0dWFs IERNQSBjaGFubmVsDQo+IA0KPiBUaGlzIGlzIHVucmVsYXRlZCB0byB0aGUgcHVycG9zZSBvZiB0 aGlzIHBhdGNoLCBpdCBjYW4gYmUgbW92ZWQgaW4gYSBkZWRpY2F0ZWQNCj4gdHJpdmlhbCBwYXRj aC4NCg0KT2theSwgSSB3aWxsIHJlbW92ZSBpdCBmcm9tIHRoaXMgcGF0Y2ggc2V0Lg0KDQo+IA0K PiA+ICAgICogQHJldHVybg0KPiA+ICAgICogIE51bWJlciBvZiBwYWNrZXRzIHJldHVybmVkDQo+ ID4gICAgKi8NCj4gPiBAQCAtMTg3LDYgKzE4NywzOSBAQCB1aW50MTZfdA0KPiBydGVfdmhvc3Rf Y2xlYXJfcXVldWVfdGhyZWFkX3Vuc2FmZShpbnQgdmlkLCB1aW50MTZfdCBxdWV1ZV9pZCwNCj4g PiAgIF9fcnRlX2V4cGVyaW1lbnRhbA0KPiA+ICAgaW50IHJ0ZV92aG9zdF9hc3luY19kbWFfY29u ZmlndXJlKGludDE2X3QgZG1hX2lkLCB1aW50MTZfdA0KPiA+IHZjaGFuX2lkKTsNCj4gPg0KPiA+ ICsvKioNCj4gPiArICogVGhpcyBmdW5jdGlvbiB0cmllcyB0byByZWNlaXZlIHBhY2tldHMgZnJv bSB0aGUgZ3Vlc3Qgd2l0aA0KPiA+ICtvZmZsb2FkaW5nDQo+ID4gKyAqIGNvcGllcyB0byB0aGUg YXN5bmMgY2hhbm5lbC4gVGhlIHBhY2tldHMgdGhhdCBhcmUgdHJhbnNmZXINCj4gPiArY29tcGxl dGVkDQo+ID4gKyAqIGFyZSByZXR1cm5lZCBpbiAicGt0cyIuIFRoZSBvdGhlciBwYWNrZXRzIHRo YXQgdGhlaXIgY29waWVzIGFyZQ0KPiA+ICtzdWJtaXR0ZWQgdG8NCj4gPiArICogdGhlIGFzeW5j IGNoYW5uZWwgYnV0IG5vdCBjb21wbGV0ZWQgYXJlIGNhbGxlZCAiaW4tZmxpZ2h0IHBhY2tldHMi Lg0KPiA+ICsgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgbm90IHJldHVybiBpbi1mbGlnaHQgcGFja2V0 cyB1bnRpbCB0aGVpciBjb3BpZXMNCj4gPiArYXJlDQo+ID4gKyAqIGNvbXBsZXRlZCBieSB0aGUg YXN5bmMgY2hhbm5lbC4NCj4gPiArICoNCj4gPiArICogQHBhcmFtIHZpZA0KPiA+ICsgKiAgSUQg b2Ygdmhvc3QgZGV2aWNlIHRvIGRlcXVldWUgZGF0YQ0KPiA+ICsgKiBAcGFyYW0gcXVldWVfaWQN Cj4gPiArICogIElEIG9mIHZpcnRxdWV1ZSB0byBkZXF1ZXVlIGRhdGENCj4gPiArICogQHBhcmFt IG1idWZfcG9vbA0KPiA+ICsgKiAgTWJ1Zl9wb29sIHdoZXJlIGhvc3QgbWJ1ZiBpcyBhbGxvY2F0 ZWQNCj4gPiArICogQHBhcmFtIHBrdHMNCj4gPiArICogIEJsYW5rIGFycmF5IHRvIGtlZXAgc3Vj Y2Vzc2Z1bGx5IGRlcXVldWVkIHBhY2tldHMNCj4gPiArICogQHBhcmFtIGNvdW50DQo+ID4gKyAq ICBTaXplIG9mIHRoZSBwYWNrZXQgYXJyYXkNCj4gPiArICogQHBhcmFtIG5yX2luZmxpZ2h0DQo+ ID4gKyAqICBUaGUgYW1vdW50IG9mIGluLWZsaWdodCBwYWNrZXRzLiBJZiBlcnJvciBvY2N1cnJl ZCwgaXRzIHZhbHVlIGlzIHNldCB0byAtMS4NCj4gPiArICogQHBhcmFtIGRtYV9pZA0KPiA+ICsg KiAgVGhlIGlkZW50aWZpZXIgb2YgRE1BIGRldmljZQ0KPiA+ICsgKiBAcGFyYW0gdmNoYW5faWQN Cj4gPiArICogIFRoZSBpZGVudGlmaWVyIG9mIHZpcnR1YWwgRE1BIGNoYW5uZWwNCj4gPiArICog QHJldHVybg0KPiA+ICsgKiAgTnVtYmVyIG9mIHN1Y2Nlc3NmdWxseSBkZXF1ZXVlZCBwYWNrZXRz ICAqLyBfX3J0ZV9leHBlcmltZW50YWwNCj4gPiArdWludDE2X3QgcnRlX3Zob3N0X2FzeW5jX3Ry eV9kZXF1ZXVlX2J1cnN0KGludCB2aWQsIHVpbnQxNl90DQo+ID4gK3F1ZXVlX2lkLA0KPiA+ICsJ c3RydWN0IHJ0ZV9tZW1wb29sICptYnVmX3Bvb2wsIHN0cnVjdCBydGVfbWJ1ZiAqKnBrdHMsIHVp bnQxNl90DQo+IGNvdW50LA0KPiA+ICsJaW50ICpucl9pbmZsaWdodCwgdWludDE2X3QgZG1hX2lk LCB1aW50MTZfdCB2Y2hhbl9pZCk7DQo+ID4gKw0KPiA+ICAgI2lmZGVmIF9fY3BsdXNwbHVzDQo+ ID4gICB9DQo+ID4gICAjZW5kaWYNCj4gPiBkaWZmIC0tZ2l0IGEvbGliL3Zob3N0L3ZlcnNpb24u bWFwIGIvbGliL3Zob3N0L3ZlcnNpb24ubWFwIGluZGV4DQo+ID4gMGE2NmM1ODQwYy4uOTY4ZDZk NDI5MCAxMDA2NDQNCj4gPiAtLS0gYS9saWIvdmhvc3QvdmVyc2lvbi5tYXANCj4gPiArKysgYi9s aWIvdmhvc3QvdmVyc2lvbi5tYXANCj4gPiBAQCAtODcsNiArODcsNyBAQCBFWFBFUklNRU5UQUwg ew0KPiA+DQo+ID4gICAJIyBhZGRlZCBpbiAyMi4wMw0KPiA+ICAgCXJ0ZV92aG9zdF9hc3luY19k bWFfY29uZmlndXJlOw0KPiANCj4gIyBhZGRlZCBpbiAyMi4wNw0KDQpTdXJlLCBJIHdpbGwgYWRk IGluIDIyLjA3IGluIG5ldyB2ZXJzaW9uLg0KDQo+IA0KPiA+ICsJcnRlX3Zob3N0X2FzeW5jX3Ry eV9kZXF1ZXVlX2J1cnN0Ow0KPiA+ICAgfTsNCj4gPg0KPiA+ICAgSU5URVJOQUwgew0KPiA+IGRp ZmYgLS1naXQgYS9saWIvdmhvc3Qvdmhvc3QuaCBiL2xpYi92aG9zdC92aG9zdC5oIGluZGV4DQo+ ID4gYTllZGMyNzFhYS4uMzc5OWQ0MTA4OSAxMDA2NDQNCj4gPiAtLS0gYS9saWIvdmhvc3Qvdmhv c3QuaA0KPiA+ICsrKyBiL2xpYi92aG9zdC92aG9zdC5oDQo+ID4gQEAgLTE3OCw2ICsxNzgsNyBA QCBleHRlcm4gc3RydWN0IGFzeW5jX2RtYV9pbmZvDQo+IGRtYV9jb3B5X3RyYWNrW1JURV9ETUFE RVZfREVGQVVMVF9NQVhdOw0KPiA+ICAgICovDQo+ID4gICBzdHJ1Y3QgYXN5bmNfaW5mbGlnaHRf aW5mbyB7DQo+ID4gICAJc3RydWN0IHJ0ZV9tYnVmICptYnVmOw0KPiA+ICsJc3RydWN0IHZpcnRp b19uZXRfaGRyIG5ldGhkcjsNCj4gPiAgIAl1aW50MTZfdCBkZXNjczsgLyogbnVtIG9mIGRlc2Nz IGluZmxpZ2h0ICovDQo+ID4gICAJdWludDE2X3QgbnJfYnVmZmVyczsgLyogbnVtIG9mIGJ1ZmZl cnMgaW5mbGlnaHQgZm9yIHBhY2tlZCByaW5nICovDQo+ID4gICB9Ow0KPiA+IGRpZmYgLS1naXQg YS9saWIvdmhvc3QvdmlydGlvX25ldC5jIGIvbGliL3Zob3N0L3ZpcnRpb19uZXQuYyBpbmRleA0K PiA+IDVmNDMyYjBkNzcuLjM4MTZjYWNhNzkgMTAwNjQ0DQo+ID4gLS0tIGEvbGliL3Zob3N0L3Zp cnRpb19uZXQuYw0KPiA+ICsrKyBiL2xpYi92aG9zdC92aXJ0aW9fbmV0LmMNCj4gPiBAQCAtMzE0 MSwzICszMTQxLDUwNyBAQCBydGVfdmhvc3RfZGVxdWV1ZV9idXJzdChpbnQgdmlkLCB1aW50MTZf dA0KPiA+IHF1ZXVlX2lkLA0KPiA+DQo+ID4gICAJcmV0dXJuIGNvdW50Ow0KPiA+ICAgfQ0KPiA+ ICsNCj4gPiArc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgaW50DQo+ID4gK2FzeW5jX2Rlc2Nf dG9fbWJ1Zl9zZWcoc3RydWN0IHZpcnRpb19uZXQgKmRldiwgc3RydWN0IHZob3N0X3ZpcnRxdWV1 ZQ0KPiAqdnEsDQo+ID4gKwkJCXN0cnVjdCBydGVfbWJ1ZiAqbSwgdWludDMyX3QgbWJ1Zl9vZmZz ZXQsDQo+ID4gKwkJCXVpbnQ2NF90IGJ1Zl9pb3ZhLCB1aW50MzJfdCBjcHlfbGVuKSB7DQo+ID4g KwlzdHJ1Y3Qgdmhvc3RfYXN5bmMgKmFzeW5jID0gdnEtPmFzeW5jOw0KPiA+ICsJdWludDY0X3Qg bWFwcGVkX2xlbjsNCj4gPiArCXVpbnQzMl90IGJ1Zl9vZmZzZXQgPSAwOw0KPiA+ICsJdm9pZCAq aG9zdF9pb3ZhOw0KPiA+ICsNCj4gPiArCXdoaWxlIChjcHlfbGVuKSB7DQo+ID4gKwkJaG9zdF9p b3ZhID0gKHZvaWQgKikodWludHB0cl90KWdwYV90b19maXJzdF9ocGEoZGV2LA0KPiA+ICsJCQkJ CWJ1Zl9pb3ZhICsgYnVmX29mZnNldCwgY3B5X2xlbiwNCj4gPiArCQkJCQkmbWFwcGVkX2xlbik7 DQo+ID4gKwkJaWYgKHVubGlrZWx5KCFob3N0X2lvdmEpKSB7DQo+ID4gKwkJCVZIT1NUX0xPR19E QVRBKEVSUiwgIiglcykgJXM6IGZhaWxlZCB0byBnZXQNCj4gaG9zdF9pb3ZhLlxuIiwNCj4gPiAr CQkJCWRldi0+aWZuYW1lLCBfX2Z1bmNfXyk7DQo+ID4gKwkJCXJldHVybiAtMTsNCj4gPiArCQl9 DQo+ID4gKw0KPiA+ICsJCWlmICh1bmxpa2VseShhc3luY19pdGVyX2FkZF9pb3ZlYyhkZXYsIGFz eW5jLCBob3N0X2lvdmEsDQo+ID4gKwkJCQkodm9pZCAqKSh1aW50cHRyX3QpcnRlX3BrdG1idWZf aW92YV9vZmZzZXQobSwNCj4gbWJ1Zl9vZmZzZXQpLA0KPiA+ICsJCQkJKHNpemVfdCltYXBwZWRf bGVuKSkpDQo+ID4gKwkJCXJldHVybiAtMTsNCj4gPiArDQo+ID4gKwkJY3B5X2xlbiAtPSAodWlu dDMyX3QpbWFwcGVkX2xlbjsNCj4gPiArCQltYnVmX29mZnNldCArPSAodWludDMyX3QpbWFwcGVk X2xlbjsNCj4gPiArCQlidWZfb2Zmc2V0ICs9ICh1aW50MzJfdCltYXBwZWRfbGVuOw0KPiA+ICsJ fQ0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+IA0KPiBJdCBsb29rcyByZWFsbHkg c2ltaWxhciB0byBhc3luY19tYnVmX3RvX2Rlc2Nfc2VnKCksIGp1c3QgdGhlIGRpcmVjdGlvbiBv ZiB0aGUNCj4gRE1BIGNvcG95IGlzIGNoYW5nZWQuDQo+IA0KPiBNYXliZSB3ZSBjb3VsZCByZWZh Y3RvciB0aGUgdHdvIGZ1bmN0aW9ucyBpbiBhIHNpbmdsZSBvbmUgd2l0aCBhZGRpbmcgYQ0KPiBw YXJhbWV0ZXIgZm9yIHRoZSBkaXJlY3Rpb24uIFNvbWV0aGluZyBsaWtlIHRoaXM6DQo+IA0KPiBz dGF0aWMgX19ydGVfYWx3YXlzX2lubGluZSBpbnQNCj4gYXN5bmNfZmlsbF9zZWcoc3RydWN0IHZp cnRpb19uZXQgKmRldiwgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsDQo+IAkJc3RydWN0IHJ0 ZV9tYnVmICptLCB1aW50MzJfdCBtYnVmX29mZnNldCwNCj4gCQl1aW50NjRfdCBidWZfaW92YSwg dWludDMyX3QgY3B5X2xlbiwgYm9vbCB0b19kZXNjKSB7DQo+IAlzdHJ1Y3Qgdmhvc3RfYXN5bmMg KmFzeW5jID0gdnEtPmFzeW5jOw0KPiAJdWludDY0X3QgbWFwcGVkX2xlbjsNCj4gCXVpbnQzMl90 IGJ1Zl9vZmZzZXQgPSAwOw0KPiAJdm9pZCAqc3JjLCAqZHN0DQo+IAl2b2lkICpob3N0X2lvdmE7 DQo+IA0KPiAJd2hpbGUgKGNweV9sZW4pIHsNCj4gCQlob3N0X2lvdmEgPSAodm9pZCAqKSh1aW50 cHRyX3QpZ3BhX3RvX2ZpcnN0X2hwYShkZXYsDQo+IAkJCQlidWZfaW92YSArIGJ1Zl9vZmZzZXQs IGNweV9sZW4sDQo+ICZtYXBwZWRfbGVuKTsNCj4gCQlpZiAodW5saWtlbHkoIWhvc3RfaW92YSkp IHsNCj4gCQkJVkhPU1RfTE9HX0RBVEEoRVJSLCAiKCVzKSAlczogZmFpbGVkIHRvIGdldCBob3N0 DQo+IGlvdmEuXG4iLA0KPiAJCQkJICAgICAgIGRldi0+aWZuYW1lLCBfX2Z1bmNfXyk7DQo+IAkJ CXJldHVybiAtMTsNCj4gCQl9DQo+IA0KPiAJCWlmICh0b19kZXNjKSB7DQo+IAkJCXNyYyA9ICh2 b2lkICopKHVpbnRwdHJfdClydGVfcGt0bWJ1Zl9pb3ZhX29mZnNldChtLA0KPiBtYnVmZl9vZmZz ZXQpOw0KPiAJCQlkc3QgPSBob3N0X2lvdmENCj4gCQl9IGVsc2Ugew0KPiAJCQlkc3QgPSBob3N0 X2lvdmENCj4gCQkJc3JjID0gKHZvaWQgKikodWludHB0cl90KXJ0ZV9wa3RtYnVmX2lvdmFfb2Zm c2V0KG0sDQo+IG1idWZmX29mZnNldCk7DQo+IAkJfQ0KPiANCj4gCQlpZiAodW5saWtlbHkoYXN5 bmNfaXRlcl9hZGRfaW92ZWMoZGV2LCBhc3luYywgc3JjLCBkc3QsDQo+IChzaXplX3QpbWFwcGVk X2xlbikpKQ0KPiAJCQlyZXR1cm4gLTE7DQo+IA0KPiAJCWNweV9sZW4gLT0gKHVpbnQzMl90KW1h cHBlZF9sZW47DQo+IAkJbWJ1Zl9vZmZzZXQgKz0gKHVpbnQzMl90KW1hcHBlZF9sZW47DQo+IAkJ YnVmX29mZnNldCArPSAodWludDMyX3QpbWFwcGVkX2xlbjsNCj4gCX0NCj4gDQo+IAlyZXR1cm4g MDsNCj4gfQ0KPiANCj4gDQo+IFRoZW4gaWYgeW91IGRvbid0IHBhc3MgYSB2YXJpYWJsZSBidXQg YSBzdGF0aWMgdHJ1ZS9mYWxzZSB2YWx1ZSBmb3IgdG9fZGVzYywgdGhlDQo+IGNvbXBpbGVyIHNo b3VsZCBnZW5lcmF0ZSB0aGUgc2FtZSBjb2RlLCBzbyBubyBwZXJmb3JtYW5jZSBkZWdyYWRhdGlv bi4NCg0KVGhhbmtzIHNvIG11Y2ggZm9yIHRoZSBzdWdnZXN0aW9uLg0KSSBub3RpY2VkIHRoZSBh c3luY19tYnVmX3RvX2Rlc2Nfc2VnKCkgcmVmYWN0b3JpbmcgaW4gZW5xdWV1ZSBwYXRoLA0Kc28g SSByZWZhY3RvcmVkIHRoZSBwcmV2aW91cyBkZXF1ZXVlIGNvZGUgdG8gYXN5bmNfZGVzY190b19t YnVmX3NlZygpLg0KVGhlc2UgdHdvIGZ1bmN0aW9ucyBjYW4gaW5kZWVkIGJlIGNvbWJpbmVkIGlu dG8gb25lLCBpdCBpcyBhIGdvb2QgaWRlYS4NCg0KPiANCj4gPiArDQo+ID4gK3N0YXRpYyBfX3J0 ZV9hbHdheXNfaW5saW5lIGludA0KPiA+ICthc3luY19kZXNjX3RvX21idWYoc3RydWN0IHZpcnRp b19uZXQgKmRldiwgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsDQo+ID4gKwkJICBzdHJ1Y3Qg YnVmX3ZlY3RvciAqYnVmX3ZlYywgdWludDE2X3QgbnJfdmVjLA0KPiA+ICsJCSAgc3RydWN0IHJ0 ZV9tYnVmICptLCBzdHJ1Y3QgcnRlX21lbXBvb2wgKm1idWZfcG9vbCwNCj4gPiArCQkgIHN0cnVj dCB2aXJ0aW9fbmV0X2hkciAqbmV0aGRyKQ0KPiA+ICt7DQo+ID4gKwl1aW50NjRfdCBidWZfYWRk ciwgYnVmX2lvdmE7DQo+ID4gKwl1aW50MzJfdCBidWZfYXZhaWwsIGJ1Zl9vZmZzZXQsIGJ1Zl9s ZW47DQo+ID4gKwl1aW50MzJfdCBtYnVmX2F2YWlsLCBtYnVmX29mZnNldDsNCj4gPiArCXVpbnQz Ml90IGNweV9sZW47DQo+ID4gKwkvKiBBIGNvdW50ZXIgdG8gYXZvaWQgZGVzYyBkZWFkIGxvb3Ag Y2hhaW4gKi8NCj4gPiArCXVpbnQxNl90IHZlY19pZHggPSAwOw0KPiA+ICsJc3RydWN0IHJ0ZV9t YnVmICpjdXIgPSBtLCAqcHJldiA9IG07DQo+ID4gKwlzdHJ1Y3QgdmlydGlvX25ldF9oZHIgdG1w X2hkcjsNCj4gPiArCXN0cnVjdCB2aXJ0aW9fbmV0X2hkciAqaGRyID0gTlVMTDsNCj4gPiArCXN0 cnVjdCB2aG9zdF9hc3luYyAqYXN5bmMgPSB2cS0+YXN5bmM7DQo+ID4gKw0KPiA+ICsJYnVmX2Fk ZHIgPSBidWZfdmVjW3ZlY19pZHhdLmJ1Zl9hZGRyOw0KPiA+ICsJYnVmX2xlbiA9IGJ1Zl92ZWNb dmVjX2lkeF0uYnVmX2xlbjsNCj4gPiArCWJ1Zl9pb3ZhID0gYnVmX3ZlY1t2ZWNfaWR4XS5idWZf aW92YTsNCj4gPiArDQo+ID4gKwlpZiAodW5saWtlbHkoYnVmX2xlbiA8IGRldi0+dmhvc3RfaGxl biAmJiBucl92ZWMgPD0gMSkpDQo+ID4gKwkJcmV0dXJuIC0xOw0KPiA+ICsNCj4gPiArCWlmICh2 aXJ0aW9fbmV0X3dpdGhfaG9zdF9vZmZsb2FkKGRldikpIHsNCj4gPiArCQlpZiAodW5saWtlbHko YnVmX2xlbiA8IHNpemVvZihzdHJ1Y3QgdmlydGlvX25ldF9oZHIpKSkgew0KPiA+ICsJCQkvKg0K PiA+ICsJCQkgKiBObyBsdWNrLCB0aGUgdmlydGlvLW5ldCBoZWFkZXIgZG9lc24ndCBmaXQNCj4g PiArCQkJICogaW4gYSBjb250aWd1b3VzIHZpcnR1YWwgYXJlYS4NCj4gPiArCQkJICovDQo+ID4g KwkJCWNvcHlfdm5ldF9oZHJfZnJvbV9kZXNjKCZ0bXBfaGRyLCBidWZfdmVjKTsNCj4gPiArCQkJ aGRyID0gJnRtcF9oZHI7DQo+ID4gKwkJfSBlbHNlIHsNCj4gPiArCQkJaGRyID0gKHN0cnVjdCB2 aXJ0aW9fbmV0X2hkciAqKSgodWludHB0cl90KWJ1Zl9hZGRyKTsNCj4gPiArCQl9DQo+ID4gKwl9 DQo+ID4gKw0KPiA+ICsJLyoNCj4gPiArCSAqIEEgdmlydGlvIGRyaXZlciBub3JtYWxseSB1c2Vz IGF0IGxlYXN0IDIgZGVzYyBidWZmZXJzDQo+ID4gKwkgKiBmb3IgVHg6IHRoZSBmaXJzdCBmb3Ig c3RvcmluZyB0aGUgaGVhZGVyLCBhbmQgb3RoZXJzDQo+ID4gKwkgKiBmb3Igc3RvcmluZyB0aGUg ZGF0YS4NCj4gPiArCSAqLw0KPiA+ICsJaWYgKHVubGlrZWx5KGJ1Zl9sZW4gPCBkZXYtPnZob3N0 X2hsZW4pKSB7DQo+ID4gKwkJYnVmX29mZnNldCA9IGRldi0+dmhvc3RfaGxlbiAtIGJ1Zl9sZW47 DQo+ID4gKwkJdmVjX2lkeCsrOw0KPiA+ICsJCWJ1Zl9hZGRyID0gYnVmX3ZlY1t2ZWNfaWR4XS5i dWZfYWRkcjsNCj4gPiArCQlidWZfaW92YSA9IGJ1Zl92ZWNbdmVjX2lkeF0uYnVmX2lvdmE7DQo+ ID4gKwkJYnVmX2xlbiA9IGJ1Zl92ZWNbdmVjX2lkeF0uYnVmX2xlbjsNCj4gPiArCQlidWZfYXZh aWwgID0gYnVmX2xlbiAtIGJ1Zl9vZmZzZXQ7DQo+ID4gKwl9IGVsc2UgaWYgKGJ1Zl9sZW4gPT0g ZGV2LT52aG9zdF9obGVuKSB7DQo+ID4gKwkJaWYgKHVubGlrZWx5KCsrdmVjX2lkeCA+PSBucl92 ZWMpKQ0KPiA+ICsJCQlyZXR1cm4gLTE7DQo+ID4gKwkJYnVmX2FkZHIgPSBidWZfdmVjW3ZlY19p ZHhdLmJ1Zl9hZGRyOw0KPiA+ICsJCWJ1Zl9pb3ZhID0gYnVmX3ZlY1t2ZWNfaWR4XS5idWZfaW92 YTsNCj4gPiArCQlidWZfbGVuID0gYnVmX3ZlY1t2ZWNfaWR4XS5idWZfbGVuOw0KPiA+ICsNCj4g PiArCQlidWZfb2Zmc2V0ID0gMDsNCj4gPiArCQlidWZfYXZhaWwgPSBidWZfbGVuOw0KPiA+ICsJ fSBlbHNlIHsNCj4gPiArCQlidWZfb2Zmc2V0ID0gZGV2LT52aG9zdF9obGVuOw0KPiA+ICsJCWJ1 Zl9hdmFpbCA9IGJ1Zl92ZWNbdmVjX2lkeF0uYnVmX2xlbiAtIGRldi0+dmhvc3RfaGxlbjsNCj4g PiArCX0NCj4gPiArDQo+ID4gKwlQUklOVF9QQUNLRVQoZGV2LCAodWludHB0cl90KShidWZfYWRk ciArIGJ1Zl9vZmZzZXQpLA0KPiA+ICsodWludDMyX3QpYnVmX2F2YWlsLCAwKTsNCj4gPiArDQo+ ID4gKwltYnVmX29mZnNldCA9IDA7DQo+ID4gKwltYnVmX2F2YWlsICA9IG0tPmJ1Zl9sZW4gLSBS VEVfUEtUTUJVRl9IRUFEUk9PTTsNCj4gPiArDQo+ID4gKwlpZiAoYXN5bmNfaXRlcl9pbml0aWFs aXplKGRldiwgYXN5bmMpKQ0KPiA+ICsJCXJldHVybiAtMTsNCj4gPiArDQo+ID4gKwl3aGlsZSAo MSkgew0KPiA+ICsJCWNweV9sZW4gPSBSVEVfTUlOKGJ1Zl9hdmFpbCwgbWJ1Zl9hdmFpbCk7DQo+ ID4gKw0KPiA+ICsJCWlmIChhc3luY19kZXNjX3RvX21idWZfc2VnKGRldiwgdnEsIGN1ciwgbWJ1 Zl9vZmZzZXQsDQo+IGJ1Zl9pb3ZhICsgYnVmX29mZnNldCwNCj4gPiArCQkJCQkgICBjcHlfbGVu KSA8IDApDQo+ID4gKwkJCWdvdG8gZXJyb3I7DQo+ID4gKw0KPiA+ICsJCW1idWZfYXZhaWwgLT0g Y3B5X2xlbjsNCj4gPiArCQlidWZfYXZhaWwgLT0gY3B5X2xlbjsNCj4gPiArCQltYnVmX29mZnNl dCArPSBjcHlfbGVuOw0KPiA+ICsJCWJ1Zl9vZmZzZXQgKz0gY3B5X2xlbjsNCj4gPiArDQo+ID4g KwkJLyogVGhpcyBidWYgcmVhY2hlcyB0byBpdHMgZW5kLCBnZXQgdGhlIG5leHQgb25lICovDQo+ ID4gKwkJaWYgKGJ1Zl9hdmFpbCA9PSAwKSB7DQo+ID4gKwkJCWlmICgrK3ZlY19pZHggPj0gbnJf dmVjKQ0KPiA+ICsJCQkJYnJlYWs7DQo+ID4gKw0KPiA+ICsJCQlidWZfYWRkciA9IGJ1Zl92ZWNb dmVjX2lkeF0uYnVmX2FkZHI7DQo+ID4gKwkJCWJ1Zl9pb3ZhID0gYnVmX3ZlY1t2ZWNfaWR4XS5i dWZfaW92YTsNCj4gPiArCQkJYnVmX2xlbiA9IGJ1Zl92ZWNbdmVjX2lkeF0uYnVmX2xlbjsNCj4g PiArDQo+ID4gKwkJCWJ1Zl9vZmZzZXQgPSAwOw0KPiA+ICsJCQlidWZfYXZhaWwgPSBidWZfbGVu Ow0KPiA+ICsNCj4gPiArCQkJUFJJTlRfUEFDS0VUKGRldiwgKHVpbnRwdHJfdClidWZfYWRkciwN Cj4gKHVpbnQzMl90KWJ1Zl9hdmFpbCwgMCk7DQo+ID4gKwkJfQ0KPiA+ICsNCj4gPiArCQkvKg0K PiA+ICsJCSAqIFRoaXMgbWJ1ZiByZWFjaGVzIHRvIGl0cyBlbmQsIGdldCBhIG5ldyBvbmUNCj4g PiArCQkgKiB0byBob2xkIG1vcmUgZGF0YS4NCj4gPiArCQkgKi8NCj4gPiArCQlpZiAobWJ1Zl9h dmFpbCA9PSAwKSB7DQo+ID4gKwkJCWN1ciA9IHJ0ZV9wa3RtYnVmX2FsbG9jKG1idWZfcG9vbCk7 DQo+ID4gKwkJCWlmICh1bmxpa2VseShjdXIgPT0gTlVMTCkpIHsNCj4gPiArCQkJCVZIT1NUX0xP R19EQVRBKEVSUiwNCj4gPiArCQkJCQkiKCVzKSAlczogZmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9y eQ0KPiBmb3IgbWJ1Zi5cbiIsDQo+ID4gKwkJCQkJZGV2LT5pZm5hbWUsIF9fZnVuY19fKTsNCj4g PiArCQkJCWdvdG8gZXJyb3I7DQo+ID4gKwkJCX0NCj4gPiArDQo+ID4gKwkJCXByZXYtPm5leHQg PSBjdXI7DQo+ID4gKwkJCXByZXYtPmRhdGFfbGVuID0gbWJ1Zl9vZmZzZXQ7DQo+ID4gKwkJCW0t Pm5iX3NlZ3MgKz0gMTsNCj4gPiArCQkJbS0+cGt0X2xlbiArPSBtYnVmX29mZnNldDsNCj4gPiAr CQkJcHJldiA9IGN1cjsNCj4gPiArDQo+ID4gKwkJCW1idWZfb2Zmc2V0ID0gMDsNCj4gPiArCQkJ bWJ1Zl9hdmFpbCA9IGN1ci0+YnVmX2xlbiAtDQo+IFJURV9QS1RNQlVGX0hFQURST09NOw0KPiA+ ICsJCX0NCj4gPiArCX0NCj4gPiArDQo+ID4gKwlwcmV2LT5kYXRhX2xlbiA9IG1idWZfb2Zmc2V0 Ow0KPiA+ICsJbS0+cGt0X2xlbiArPSBtYnVmX29mZnNldDsNCj4gPiArDQo+ID4gKwlhc3luY19p dGVyX2ZpbmFsaXplKGFzeW5jKTsNCj4gPiArCWlmIChoZHIpDQo+ID4gKwkJKm5ldGhkciA9ICpo ZHI7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gKw0KPiA+ICtlcnJvcjoNCj4gPiArCWFz eW5jX2l0ZXJfY2FuY2VsKGFzeW5jKTsNCj4gPiArCXJldHVybiAtMTsNCj4gPiArfQ0KPiANCj4g DQo+IFlvdSBjYW4gZG8gaGVyZSB0aGUgc2FtZSByZWZhY3RvcmluZyBJIGRpZCBmb3IgdGhlIGVu cXVldWUgcGF0aCwgaS5lLg0KPiBtZXJnaW5nIGNvcHlfZGVzY190b19tYnVmIGFuZCBhc3luY19k ZXNjX3RvX21idWYgaW4gYSBzaW5nbGUgZnVuY3Rpb24uDQoNClllcywgSSBhbSBwcmVwYXJpbmcg dGhlIHYxIHBhdGNoIGluIDIyLjA3LCBpbmNsdWRpbmcgdGhlIHJlZmFjdG9yaW5nIGhlcmUuDQpQ bGVhc2Ugc2VlIG5leHQgdmVyc2lvbi4NCg0KVGhhbmtzLA0KWHVhbg0KDQo+IA0KPiA+ICtzdGF0 aWMgX19ydGVfYWx3YXlzX2lubGluZSB1aW50MTZfdA0KPiA+ICthc3luY19wb2xsX2RlcXVldWVf Y29tcGxldGVkX3NwbGl0KHN0cnVjdCB2aXJ0aW9fbmV0ICpkZXYsIHVpbnQxNl90DQo+IHF1ZXVl X2lkLA0KPiA+ICsJCXN0cnVjdCBydGVfbWJ1ZiAqKnBrdHMsIHVpbnQxNl90IGNvdW50LCB1aW50 MTZfdCBkbWFfaWQsDQo+ID4gKwkJdWludDE2X3QgdmNoYW5faWQsIGJvb2wgbGVnYWN5X29sX2Zs YWdzKSB7DQo+ID4gKwl1aW50MTZfdCBzdGFydF9pZHgsIGZyb20sIGk7DQo+ID4gKwl1aW50MTZf dCBucl9jcGxfcGt0cyA9IDA7DQo+ID4gKwlzdHJ1Y3QgYXN5bmNfaW5mbGlnaHRfaW5mbyAqcGt0 c19pbmZvOw0KPiA+ICsJc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEgPSBkZXYtPnZpcnRxdWV1 ZVtxdWV1ZV9pZF07DQo+ID4gKw0KPiA+ICsJcGt0c19pbmZvID0gdnEtPmFzeW5jLT5wa3RzX2lu Zm87DQo+ID4gKw0KPiA+ICsJdmhvc3RfYXN5bmNfZG1hX2NoZWNrX2NvbXBsZXRlZChkZXYsIGRt YV9pZCwgdmNoYW5faWQsDQo+ID4gK1ZIT1NUX0RNQV9NQVhfQ09QWV9DT01QTEVURSk7DQo+ID4g Kw0KPiA+ICsJc3RhcnRfaWR4ID0gYXN5bmNfZ2V0X2ZpcnN0X2luZmxpZ2h0X3BrdF9pZHgodnEp Ow0KPiA+ICsNCj4gPiArCWZyb20gPSBzdGFydF9pZHg7DQo+ID4gKwl3aGlsZSAodnEtPmFzeW5j LT5wa3RzX2NtcGxfZmxhZ1tmcm9tXSAmJiBjb3VudC0tKSB7DQo+ID4gKwkJdnEtPmFzeW5jLT5w a3RzX2NtcGxfZmxhZ1tmcm9tXSA9IGZhbHNlOw0KPiA+ICsJCWZyb20gPSAoZnJvbSArIDEpICYg KHZxLT5zaXplIC0gMSk7DQo+ID4gKwkJbnJfY3BsX3BrdHMrKzsNCj4gPiArCX0NCj4gPiArDQo+ ID4gKwlpZiAobnJfY3BsX3BrdHMgPT0gMCkNCj4gPiArCQlyZXR1cm4gMDsNCj4gPiArDQo+ID4g Kwlmb3IgKGkgPSAwOyBpIDwgbnJfY3BsX3BrdHM7IGkrKykgew0KPiA+ICsJCWZyb20gPSAoc3Rh cnRfaWR4ICsgaSkgJiAodnEtPnNpemUgLSAxKTsNCj4gPiArCQlwa3RzW2ldID0gcGt0c19pbmZv W2Zyb21dLm1idWY7DQo+ID4gKw0KPiA+ICsJCWlmICh2aXJ0aW9fbmV0X3dpdGhfaG9zdF9vZmZs b2FkKGRldikpDQo+ID4gKwkJCXZob3N0X2RlcXVldWVfb2ZmbG9hZChkZXYsDQo+ICZwa3RzX2lu Zm9bZnJvbV0ubmV0aGRyLCBwa3RzW2ldLA0KPiA+ICsJCQkJCSAgICAgIGxlZ2FjeV9vbF9mbGFn cyk7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJLyogd3JpdGUgYmFjayBjb21wbGV0ZWQgZGVzY3Mg dG8gdXNlZCByaW5nIGFuZCB1cGRhdGUgdXNlZCBpZHggKi8NCj4gPiArCXdyaXRlX2JhY2tfY29t cGxldGVkX2Rlc2NzX3NwbGl0KHZxLCBucl9jcGxfcGt0cyk7DQo+ID4gKwlfX2F0b21pY19hZGRf ZmV0Y2goJnZxLT51c2VkLT5pZHgsIG5yX2NwbF9wa3RzLA0KPiBfX0FUT01JQ19SRUxFQVNFKTsN Cj4gPiArCXZob3N0X3ZyaW5nX2NhbGxfc3BsaXQoZGV2LCB2cSk7DQo+ID4gKw0KPiA+ICsJdnEt PmFzeW5jLT5wa3RzX2luZmxpZ2h0X24gLT0gbnJfY3BsX3BrdHM7DQo+ID4gKw0KPiA+ICsJcmV0 dXJuIG5yX2NwbF9wa3RzOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgX19ydGVfYWx3YXlz X2lubGluZSB1aW50MTZfdA0KPiA+ICt2aXJ0aW9fZGV2X3R4X2FzeW5jX3NwbGl0KHN0cnVjdCB2 aXJ0aW9fbmV0ICpkZXYsIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUNCj4gKnZxLA0KPiA+ICsJCXVp bnQxNl90IHF1ZXVlX2lkLCBzdHJ1Y3QgcnRlX21lbXBvb2wgKm1idWZfcG9vbCwgc3RydWN0DQo+ IHJ0ZV9tYnVmICoqcGt0cywNCj4gPiArCQl1aW50MTZfdCBjb3VudCwgdWludDE2X3QgZG1hX2lk LCB1aW50MTZfdCB2Y2hhbl9pZCwgYm9vbA0KPiA+ICtsZWdhY3lfb2xfZmxhZ3MpIHsNCj4gPiAr CXN0YXRpYyBib29sIGFsbG9jZXJyX3dhcm5lZDsNCj4gPiArCWJvb2wgZHJvcHBlZCA9IGZhbHNl Ow0KPiA+ICsJdWludDE2X3QgZnJlZV9lbnRyaWVzOw0KPiA+ICsJdWludDE2X3QgcGt0X2lkeCwg c2xvdF9pZHggPSAwOw0KPiA+ICsJdWludDE2X3QgbnJfZG9uZV9wa3RzID0gMDsNCj4gPiArCXVp bnQxNl90IHBrdF9lcnIgPSAwOw0KPiA+ICsJdWludDE2X3Qgbl94ZmVyOw0KPiA+ICsJc3RydWN0 IHZob3N0X2FzeW5jICphc3luYyA9IHZxLT5hc3luYzsNCj4gPiArCXN0cnVjdCBhc3luY19pbmZs aWdodF9pbmZvICpwa3RzX2luZm8gPSBhc3luYy0+cGt0c19pbmZvOw0KPiA+ICsJc3RydWN0IHJ0 ZV9tYnVmICpwa3RzX3ByZWFsbG9jW01BWF9QS1RfQlVSU1RdOw0KPiA+ICsJdWludDE2X3QgcGt0 c19zaXplID0gY291bnQ7DQo+ID4gKw0KPiA+ICsJLyoqDQo+ID4gKwkgKiBUaGUgb3JkZXJpbmcg YmV0d2VlbiBhdmFpbCBpbmRleCBhbmQNCj4gPiArCSAqIGRlc2MgcmVhZHMgbmVlZHMgdG8gYmUg ZW5mb3JjZWQuDQo+ID4gKwkgKi8NCj4gPiArCWZyZWVfZW50cmllcyA9IF9fYXRvbWljX2xvYWRf bigmdnEtPmF2YWlsLT5pZHgsDQo+IF9fQVRPTUlDX0FDUVVJUkUpIC0gdnEtPmxhc3RfYXZhaWxf aWR4Ow0KPiA+ICsJaWYgKGZyZWVfZW50cmllcyA9PSAwKQ0KPiA+ICsJCWdvdG8gb3V0Ow0KPiA+ ICsNCj4gPiArCXJ0ZV9wcmVmZXRjaDAoJnZxLT5hdmFpbC0+cmluZ1t2cS0+bGFzdF9hdmFpbF9p ZHggJiAodnEtPnNpemUgLQ0KPiA+ICsxKV0pOw0KPiA+ICsNCj4gPiArCWFzeW5jX2l0ZXJfcmVz ZXQoYXN5bmMpOw0KPiA+ICsNCj4gPiArCWNvdW50ID0gUlRFX01JTihjb3VudCwgTUFYX1BLVF9C VVJTVCk7DQo+ID4gKwljb3VudCA9IFJURV9NSU4oY291bnQsIGZyZWVfZW50cmllcyk7DQo+ID4g KwlWSE9TVF9MT0dfREFUQShERUJVRywgIiglcykgYWJvdXQgdG8gZGVxdWV1ZSAldSBidWZmZXJz XG4iLA0KPiA+ICtkZXYtPmlmbmFtZSwgY291bnQpOw0KPiA+ICsNCj4gPiArCWlmIChydGVfcGt0 bWJ1Zl9hbGxvY19idWxrKG1idWZfcG9vbCwgcGt0c19wcmVhbGxvYywgY291bnQpKQ0KPiA+ICsJ CWdvdG8gb3V0Ow0KPiA+ICsNCj4gPiArCWZvciAocGt0X2lkeCA9IDA7IHBrdF9pZHggPCBjb3Vu dDsgcGt0X2lkeCsrKSB7DQo+ID4gKwkJdWludDE2X3QgaGVhZF9pZHggPSAwOw0KPiA+ICsJCXVp bnQxNl90IG5yX3ZlYyA9IDA7DQo+ID4gKwkJdWludDE2X3QgdG87DQo+ID4gKwkJdWludDMyX3Qg YnVmX2xlbjsNCj4gPiArCQlpbnQgZXJyOw0KPiA+ICsJCXN0cnVjdCBidWZfdmVjdG9yIGJ1Zl92 ZWNbQlVGX1ZFQ1RPUl9NQVhdOw0KPiA+ICsJCXN0cnVjdCBydGVfbWJ1ZiAqcGt0ID0gcGt0c19w cmVhbGxvY1twa3RfaWR4XTsNCj4gPiArDQo+ID4gKwkJaWYgKHVubGlrZWx5KGZpbGxfdmVjX2J1 Zl9zcGxpdChkZXYsIHZxLCB2cS0+bGFzdF9hdmFpbF9pZHgsDQo+ID4gKwkJCQkJCSZucl92ZWMs IGJ1Zl92ZWMsDQo+ID4gKwkJCQkJCSZoZWFkX2lkeCwgJmJ1Zl9sZW4sDQo+ID4gKwkJCQkJCVZI T1NUX0FDQ0VTU19STykgPCAwKSkgew0KPiA+ICsJCQlkcm9wcGVkID0gdHJ1ZTsNCj4gPiArCQkJ YnJlYWs7DQo+ID4gKwkJfQ0KPiA+ICsNCj4gPiArCQllcnIgPSB2aXJ0aW9fZGV2X3BrdG1idWZf cHJlcChkZXYsIHBrdCwgYnVmX2xlbik7DQo+ID4gKwkJaWYgKHVubGlrZWx5KGVycikpIHsNCj4g PiArCQkJLyoqDQo+ID4gKwkJCSAqIG1idWYgYWxsb2NhdGlvbiBmYWlscyBmb3IganVtYm8gcGFj a2V0cyB3aGVuDQo+IGV4dGVybmFsDQo+ID4gKwkJCSAqIGJ1ZmZlciBhbGxvY2F0aW9uIGlzIG5v dCBhbGxvd2VkIGFuZCBsaW5lYXIgYnVmZmVyDQo+ID4gKwkJCSAqIGlzIHJlcXVpcmVkLiBEcm9w IHRoaXMgcGFja2V0Lg0KPiA+ICsJCQkgKi8NCj4gPiArCQkJaWYgKCFhbGxvY2Vycl93YXJuZWQp IHsNCj4gPiArCQkJCVZIT1NUX0xPR19EQVRBKEVSUiwNCj4gPiArCQkJCQkiKCVzKSAlczogRmFp bGVkIG1idWYgYWxsb2Mgb2Ygc2l6ZSAlZA0KPiBmcm9tICVzXG4iLA0KPiA+ICsJCQkJCWRldi0+ aWZuYW1lLCBfX2Z1bmNfXywgYnVmX2xlbiwNCj4gbWJ1Zl9wb29sLT5uYW1lKTsNCj4gPiArCQkJ CWFsbG9jZXJyX3dhcm5lZCA9IHRydWU7DQo+ID4gKwkJCX0NCj4gPiArCQkJZHJvcHBlZCA9IHRy dWU7DQo+ID4gKwkJCWJyZWFrOw0KPiA+ICsJCX0NCj4gPiArDQo+ID4gKwkJc2xvdF9pZHggPSAo YXN5bmMtPnBrdHNfaWR4ICsgcGt0X2lkeCkgJiAodnEtPnNpemUgLSAxKTsNCj4gPiArCQllcnIg PSBhc3luY19kZXNjX3RvX21idWYoZGV2LCB2cSwgYnVmX3ZlYywgbnJfdmVjLCBwa3QsDQo+IG1i dWZfcG9vbCwNCj4gPiArCQkJCQkmcGt0c19pbmZvW3Nsb3RfaWR4XS5uZXRoZHIpOw0KPiA+ICsJ CWlmICh1bmxpa2VseShlcnIpKSB7DQo+ID4gKwkJCWlmICghYWxsb2NlcnJfd2FybmVkKSB7DQo+ ID4gKwkJCQlWSE9TVF9MT0dfREFUQShFUlIsDQo+ID4gKwkJCQkJIiglcykgJXM6IEZhaWxlZCB0 byBvZmZsb2FkIGNvcGllcyB0bw0KPiBhc3luYyBjaGFubmVsLlxuIiwNCj4gPiArCQkJCQlkZXYt PmlmbmFtZSwgX19mdW5jX18pOw0KPiA+ICsJCQkJYWxsb2NlcnJfd2FybmVkID0gdHJ1ZTsNCj4g PiArCQkJfQ0KPiA+ICsJCQlkcm9wcGVkID0gdHJ1ZTsNCj4gPiArCQkJYnJlYWs7DQo+ID4gKwkJ fQ0KPiA+ICsNCj4gPiArCQlwa3RzX2luZm9bc2xvdF9pZHhdLm1idWYgPSBwa3Q7DQo+ID4gKw0K PiA+ICsJCS8qIHN0b3JlIHVzZWQgZGVzY3MgKi8NCj4gPiArCQl0byA9IGFzeW5jLT5kZXNjX2lk eF9zcGxpdCAmICh2cS0+c2l6ZSAtIDEpOw0KPiA+ICsJCWFzeW5jLT5kZXNjc19zcGxpdFt0b10u aWQgPSBoZWFkX2lkeDsNCj4gPiArCQlhc3luYy0+ZGVzY3Nfc3BsaXRbdG9dLmxlbiA9IDA7DQo+ ID4gKwkJYXN5bmMtPmRlc2NfaWR4X3NwbGl0Kys7DQo+ID4gKw0KPiA+ICsJCXZxLT5sYXN0X2F2 YWlsX2lkeCsrOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWlmICh1bmxpa2VseShkcm9wcGVkKSkN Cj4gPiArCQlydGVfcGt0bWJ1Zl9mcmVlX2J1bGsoJnBrdHNfcHJlYWxsb2NbcGt0X2lkeF0sIGNv dW50IC0NCj4gcGt0X2lkeCk7DQo+ID4gKw0KPiA+ICsJbl94ZmVyID0gdmhvc3RfYXN5bmNfZG1h X3RyYW5zZmVyKGRldiwgdnEsIGRtYV9pZCwgdmNoYW5faWQsDQo+IGFzeW5jLT5wa3RzX2lkeCwN Cj4gPiArCQkJCQkgIGFzeW5jLT5pb3ZfaXRlciwgcGt0X2lkeCk7DQo+ID4gKw0KPiA+ICsJYXN5 bmMtPnBrdHNfaW5mbGlnaHRfbiArPSBuX3hmZXI7DQo+ID4gKw0KPiA+ICsJcGt0X2VyciA9IHBr dF9pZHggLSBuX3hmZXI7DQo+ID4gKwlpZiAodW5saWtlbHkocGt0X2VycikpIHsNCj4gPiArCQlW SE9TVF9MT0dfREFUQShERUJVRywNCj4gPiArCQkJIiglcykgJXM6IGZhaWxlZCB0byB0cmFuc2Zl ciBkYXRhIGZvciBxdWV1ZSBpZCAlZC5cbiIsDQo+ID4gKwkJCWRldi0+aWZuYW1lLCBfX2Z1bmNf XywgcXVldWVfaWQpOw0KPiA+ICsNCj4gPiArCQlwa3RfaWR4ID0gbl94ZmVyOw0KPiA+ICsJCS8q IHJlY292ZXIgYXZhaWxhYmxlIHJpbmcgKi8NCj4gPiArCQl2cS0+bGFzdF9hdmFpbF9pZHggLT0g cGt0X2VycjsNCj4gPiArDQo+ID4gKwkJLyoqDQo+ID4gKwkJICogcmVjb3ZlciBhc3luYyBjaGFu bmVsIGNvcHkgcmVsYXRlZCBzdHJ1Y3R1cmVzIGFuZCBmcmVlDQo+IHBrdG1idWZzDQo+ID4gKwkJ ICogZm9yIGVycm9yIHBrdHMuDQo+ID4gKwkJICovDQo+ID4gKwkJYXN5bmMtPmRlc2NfaWR4X3Nw bGl0IC09IHBrdF9lcnI7DQo+ID4gKwkJd2hpbGUgKHBrdF9lcnItLSA+IDApIHsNCj4gPiArCQkJ cnRlX3BrdG1idWZfZnJlZShwa3RzX2luZm9bc2xvdF9pZHggJiAodnEtPnNpemUgLQ0KPiAxKV0u bWJ1Zik7DQo+ID4gKwkJCXNsb3RfaWR4LS07DQo+ID4gKwkJfQ0KPiA+ICsJfQ0KPiA+ICsNCj4g PiArCWFzeW5jLT5wa3RzX2lkeCArPSBwa3RfaWR4Ow0KPiA+ICsJaWYgKGFzeW5jLT5wa3RzX2lk eCA+PSB2cS0+c2l6ZSkNCj4gPiArCQlhc3luYy0+cGt0c19pZHggLT0gdnEtPnNpemU7DQo+ID4g Kw0KPiA+ICtvdXQ6DQo+ID4gKwkvKiBETUEgZGV2aWNlIG1heSBzZXJ2ZSBvdGhlciBxdWV1ZXMs IHVuY29uZGl0aW9uYWxseSBjaGVjaw0KPiBjb21wbGV0ZWQuICovDQo+ID4gKwlucl9kb25lX3Br dHMgPSBhc3luY19wb2xsX2RlcXVldWVfY29tcGxldGVkX3NwbGl0KGRldiwgcXVldWVfaWQsDQo+ IHBrdHMsIHBrdHNfc2l6ZSwNCj4gPiArCQkJCQkJCSAgZG1hX2lkLCB2Y2hhbl9pZCwNCj4gbGVn YWN5X29sX2ZsYWdzKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gbnJfZG9uZV9wa3RzOw0KPiA+ICt9 DQo+ID4gKw0KPiA+ICtfX3J0ZV9ub2lubGluZQ0KPiA+ICtzdGF0aWMgdWludDE2X3QNCj4gPiAr dmlydGlvX2Rldl90eF9hc3luY19zcGxpdF9sZWdhY3koc3RydWN0IHZpcnRpb19uZXQgKmRldiwN Cj4gPiArCQlzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSwgdWludDE2X3QgcXVldWVfaWQsDQo+ ID4gKwkJc3RydWN0IHJ0ZV9tZW1wb29sICptYnVmX3Bvb2wsIHN0cnVjdCBydGVfbWJ1ZiAqKnBr dHMsDQo+ID4gKwkJdWludDE2X3QgY291bnQsIHVpbnQxNl90IGRtYV9pZCwgdWludDE2X3QgdmNo YW5faWQpIHsNCj4gPiArCXJldHVybiB2aXJ0aW9fZGV2X3R4X2FzeW5jX3NwbGl0KGRldiwgdnEs IHF1ZXVlX2lkLCBtYnVmX3Bvb2wsDQo+ID4gKwkJCQlwa3RzLCBjb3VudCwgZG1hX2lkLCB2Y2hh bl9pZCwgdHJ1ZSk7IH0NCj4gPiArDQo+ID4gK19fcnRlX25vaW5saW5lDQo+ID4gK3N0YXRpYyB1 aW50MTZfdA0KPiA+ICt2aXJ0aW9fZGV2X3R4X2FzeW5jX3NwbGl0X2NvbXBsaWFudChzdHJ1Y3Qg dmlydGlvX25ldCAqZGV2LA0KPiA+ICsJCXN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLCB1aW50 MTZfdCBxdWV1ZV9pZCwNCj4gPiArCQlzdHJ1Y3QgcnRlX21lbXBvb2wgKm1idWZfcG9vbCwgc3Ry dWN0IHJ0ZV9tYnVmICoqcGt0cywNCj4gPiArCQl1aW50MTZfdCBjb3VudCwgdWludDE2X3QgZG1h X2lkLCB1aW50MTZfdCB2Y2hhbl9pZCkgew0KPiA+ICsJcmV0dXJuIHZpcnRpb19kZXZfdHhfYXN5 bmNfc3BsaXQoZGV2LCB2cSwgcXVldWVfaWQsIG1idWZfcG9vbCwNCj4gPiArCQkJCXBrdHMsIGNv dW50LCBkbWFfaWQsIHZjaGFuX2lkLCBmYWxzZSk7IH0NCj4gPiArDQo+ID4gK3VpbnQxNl90DQo+ ID4gK3J0ZV92aG9zdF9hc3luY190cnlfZGVxdWV1ZV9idXJzdChpbnQgdmlkLCB1aW50MTZfdCBx dWV1ZV9pZCwNCj4gPiArCXN0cnVjdCBydGVfbWVtcG9vbCAqbWJ1Zl9wb29sLCBzdHJ1Y3QgcnRl X21idWYgKipwa3RzLCB1aW50MTZfdA0KPiBjb3VudCwNCj4gPiArCWludCAqbnJfaW5mbGlnaHQs IHVpbnQxNl90IGRtYV9pZCwgdWludDE2X3QgdmNoYW5faWQpIHsNCj4gPiArCXN0cnVjdCB2aXJ0 aW9fbmV0ICpkZXY7DQo+ID4gKwlzdHJ1Y3QgcnRlX21idWYgKnJhcnBfbWJ1ZiA9IE5VTEw7DQo+ ID4gKwlzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cTsNCj4gPiArCWludDE2X3Qgc3VjY2VzcyA9 IDE7DQo+ID4gKw0KPiA+ICsJKm5yX2luZmxpZ2h0ID0gLTE7DQo+ID4gKw0KPiA+ICsJZGV2ID0g Z2V0X2RldmljZSh2aWQpOw0KPiA+ICsJaWYgKCFkZXYpDQo+ID4gKwkJcmV0dXJuIDA7DQo+ID4g Kw0KPiA+ICsJaWYgKHVubGlrZWx5KCEoZGV2LT5mbGFncyAmIFZJUlRJT19ERVZfQlVJTFRJTl9W SVJUSU9fTkVUKSkpIHsNCj4gPiArCQlWSE9TVF9MT0dfREFUQShFUlIsDQo+ID4gKwkJCSIoJXMp ICVzOiBidWlsdC1pbiB2aG9zdCBuZXQgYmFja2VuZCBpcyBkaXNhYmxlZC5cbiIsDQo+ID4gKwkJ CWRldi0+aWZuYW1lLCBfX2Z1bmNfXyk7DQo+ID4gKwkJcmV0dXJuIDA7DQo+ID4gKwl9DQo+ID4g Kw0KPiA+ICsJaWYgKHVubGlrZWx5KCFpc192YWxpZF92aXJ0X3F1ZXVlX2lkeChxdWV1ZV9pZCwg MSwgZGV2LT5ucl92cmluZykpKSB7DQo+ID4gKwkJVkhPU1RfTE9HX0RBVEEoRVJSLA0KPiA+ICsJ CQkiKCVzKSAlczogaW52YWxpZCB2aXJ0cXVldWUgaWR4ICVkLlxuIiwNCj4gPiArCQkJZGV2LT5p Zm5hbWUsIF9fZnVuY19fLCBxdWV1ZV9pZCk7DQo+ID4gKwkJcmV0dXJuIDA7DQo+ID4gKwl9DQo+ ID4gKw0KPiA+ICsJaWYgKHVubGlrZWx5KCFkbWFfY29weV90cmFja1tkbWFfaWRdLnZjaGFucyB8 fA0KPiA+ICsNCj4gCSFkbWFfY29weV90cmFja1tkbWFfaWRdLnZjaGFuc1t2Y2hhbl9pZF0ucGt0 c19jbXBsX2ZsYWdfYWRkcikpIHsNCj4gPiArCQlWSE9TVF9MT0dfREFUQShFUlIsICIoJXMpICVz OiBpbnZhbGlkIGNoYW5uZWwgJWQ6JXUuXG4iLA0KPiBkZXYtPmlmbmFtZSwgX19mdW5jX18sDQo+ ID4gKwkJCSAgICAgICBkbWFfaWQsIHZjaGFuX2lkKTsNCj4gPiArCQlyZXR1cm4gMDsNCj4gPiAr CX0NCj4gPiArDQo+ID4gKwl2cSA9IGRldi0+dmlydHF1ZXVlW3F1ZXVlX2lkXTsNCj4gPiArDQo+ ID4gKwlpZiAodW5saWtlbHkocnRlX3NwaW5sb2NrX3RyeWxvY2soJnZxLT5hY2Nlc3NfbG9jaykg PT0gMCkpDQo+ID4gKwkJcmV0dXJuIDA7DQo+ID4gKw0KPiA+ICsJaWYgKHVubGlrZWx5KHZxLT5l bmFibGVkID09IDApKSB7DQo+ID4gKwkJY291bnQgPSAwOw0KPiA+ICsJCWdvdG8gb3V0X2FjY2Vz c191bmxvY2s7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJaWYgKHVubGlrZWx5KCF2cS0+YXN5bmMp KSB7DQo+ID4gKwkJVkhPU1RfTE9HX0RBVEEoRVJSLCAiKCVzKSAlczogYXN5bmMgbm90IHJlZ2lz dGVyZWQgZm9yDQo+IHF1ZXVlIGlkICVkLlxuIiwNCj4gPiArCQkJZGV2LT5pZm5hbWUsIF9fZnVu Y19fLCBxdWV1ZV9pZCk7DQo+ID4gKwkJY291bnQgPSAwOw0KPiA+ICsJCWdvdG8gb3V0X2FjY2Vz c191bmxvY2s7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJaWYgKGRldi0+ZmVhdHVyZXMgJiAoMVVM TCA8PCBWSVJUSU9fRl9JT01NVV9QTEFURk9STSkpDQo+ID4gKwkJdmhvc3RfdXNlcl9pb3RsYl9y ZF9sb2NrKHZxKTsNCj4gPiArDQo+ID4gKwlpZiAodW5saWtlbHkodnEtPmFjY2Vzc19vayA9PSAw KSkNCj4gPiArCQlpZiAodW5saWtlbHkodnJpbmdfdHJhbnNsYXRlKGRldiwgdnEpIDwgMCkpIHsN Cj4gPiArCQkJY291bnQgPSAwOw0KPiA+ICsJCQlnb3RvIG91dDsNCj4gPiArCQl9DQo+ID4gKw0K PiA+ICsJLyoNCj4gPiArCSAqIENvbnN0cnVjdCBhIFJBUlAgYnJvYWRjYXN0IHBhY2tldCwgYW5k IGluamVjdCBpdCB0byB0aGUgInBrdHMiDQo+ID4gKwkgKiBhcnJheSwgdG8gbG9va3MgbGlrZSB0 aGF0IGd1ZXN0IGFjdHVhbGx5IHNlbmQgc3VjaCBwYWNrZXQuDQo+ID4gKwkgKg0KPiA+ICsJICog Q2hlY2sgdXNlcl9zZW5kX3JhcnAoKSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4NCj4gPiArCSAqDQo+ ID4gKwkgKiBicm9hZGNhc3RfcmFycCBzaGFyZXMgYSBjYWNoZWxpbmUgaW4gdGhlIHZpcnRpb19u ZXQgc3RydWN0dXJlDQo+ID4gKwkgKiB3aXRoIHNvbWUgZmllbGRzIHRoYXQgYXJlIGFjY2Vzc2Vk IGR1cmluZyBlbnF1ZXVlIGFuZA0KPiA+ICsJICogX19hdG9taWNfY29tcGFyZV9leGNoYW5nZV9u IGNhdXNlcyBhIHdyaXRlIGlmIHBlcmZvcm1lZA0KPiBjb21wYXJlDQo+ID4gKwkgKiBhbmQgZXhj aGFuZ2UuIFRoaXMgY291bGQgcmVzdWx0IGluIGZhbHNlIHNoYXJpbmcgYmV0d2VlbiBlbnF1ZXVl DQo+ID4gKwkgKiBhbmQgZGVxdWV1ZS4NCj4gPiArCSAqDQo+ID4gKwkgKiBQcmV2ZW50IHVubmVj ZXNzYXJ5IGZhbHNlIHNoYXJpbmcgYnkgcmVhZGluZyBicm9hZGNhc3RfcmFycCBmaXJzdA0KPiA+ ICsJICogYW5kIG9ubHkgcGVyZm9ybWluZyBjb21wYXJlIGFuZCBleGNoYW5nZSBpZiB0aGUgcmVh ZCBpbmRpY2F0ZXMgaXQNCj4gPiArCSAqIGlzIGxpa2VseSB0byBiZSBzZXQuDQo+ID4gKwkgKi8N Cj4gPiArCWlmICh1bmxpa2VseShfX2F0b21pY19sb2FkX24oJmRldi0+YnJvYWRjYXN0X3JhcnAs DQo+IF9fQVRPTUlDX0FDUVVJUkUpICYmDQo+ID4gKwkJCV9fYXRvbWljX2NvbXBhcmVfZXhjaGFu Z2VfbigmZGV2LQ0KPiA+YnJvYWRjYXN0X3JhcnAsDQo+ID4gKwkJCSZzdWNjZXNzLCAwLCAwLCBf X0FUT01JQ19SRUxFQVNFLA0KPiBfX0FUT01JQ19SRUxBWEVEKSkpIHsNCj4gPiArDQo+ID4gKwkJ cmFycF9tYnVmID0gcnRlX25ldF9tYWtlX3JhcnBfcGFja2V0KG1idWZfcG9vbCwgJmRldi0NCj4g Pm1hYyk7DQo+ID4gKwkJaWYgKHJhcnBfbWJ1ZiA9PSBOVUxMKSB7DQo+ID4gKwkJCVZIT1NUX0xP R19EQVRBKEVSUiwgIkZhaWxlZCB0byBtYWtlIFJBUlANCj4gcGFja2V0LlxuIik7DQo+ID4gKwkJ CWNvdW50ID0gMDsNCj4gPiArCQkJZ290byBvdXQ7DQo+ID4gKwkJfQ0KPiA+ICsJCS8qDQo+ID4g KwkJICogSW5qZWN0IGl0IHRvIHRoZSBoZWFkIG9mICJwa3RzIiBhcnJheSwgc28gdGhhdCBzd2l0 Y2gncyBtYWMNCj4gPiArCQkgKiBsZWFybmluZyB0YWJsZSB3aWxsIGdldCB1cGRhdGVkIGZpcnN0 Lg0KPiA+ICsJCSAqLw0KPiA+ICsJCXBrdHNbMF0gPSByYXJwX21idWY7DQo+ID4gKwkJcGt0cysr Ow0KPiA+ICsJCWNvdW50IC09IDE7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJaWYgKHVubGlrZWx5 KHZxX2lzX3BhY2tlZChkZXYpKSkgew0KPiA+ICsJCXN0YXRpYyBib29sIG5vdF9zdXBwb3J0X3Bh Y2tfbG9nOw0KPiA+ICsJCWlmICghbm90X3N1cHBvcnRfcGFja19sb2cpIHsNCj4gPiArCQkJVkhP U1RfTE9HX0RBVEEoRVJSLA0KPiA+ICsJCQkJIiglcykgJXM6IGFzeW5jIGRlcXVldWUgZG9lcyBu b3Qgc3VwcG9ydA0KPiBwYWNrZWQgcmluZy5cbiIsDQo+ID4gKwkJCQlkZXYtPmlmbmFtZSwgX19m dW5jX18pOw0KPiA+ICsJCQlub3Rfc3VwcG9ydF9wYWNrX2xvZyA9IHRydWU7DQo+ID4gKwkJfQ0K PiA+ICsJCWNvdW50ID0gMDsNCj4gPiArCQlnb3RvIG91dDsNCj4gPiArCX0NCj4gPiArDQo+ID4g KwlpZiAoZGV2LT5mbGFncyAmIFZJUlRJT19ERVZfTEVHQUNZX09MX0ZMQUdTKQ0KPiA+ICsJCWNv dW50ID0gdmlydGlvX2Rldl90eF9hc3luY19zcGxpdF9sZWdhY3koZGV2LCB2cSwgcXVldWVfaWQs DQo+ID4gKwkJCQltYnVmX3Bvb2wsIHBrdHMsIGNvdW50LCBkbWFfaWQsIHZjaGFuX2lkKTsNCj4g PiArCWVsc2UNCj4gPiArCQljb3VudCA9IHZpcnRpb19kZXZfdHhfYXN5bmNfc3BsaXRfY29tcGxp YW50KGRldiwgdnEsDQo+IHF1ZXVlX2lkLA0KPiA+ICsJCQkJbWJ1Zl9wb29sLCBwa3RzLCBjb3Vu dCwgZG1hX2lkLCB2Y2hhbl9pZCk7DQo+ID4gKw0KPiA+ICsJKm5yX2luZmxpZ2h0ID0gdnEtPmFz eW5jLT5wa3RzX2luZmxpZ2h0X247DQo+ID4gKw0KPiA+ICtvdXQ6DQo+ID4gKwlpZiAoZGV2LT5m ZWF0dXJlcyAmICgxVUxMIDw8IFZJUlRJT19GX0lPTU1VX1BMQVRGT1JNKSkNCj4gPiArCQl2aG9z dF91c2VyX2lvdGxiX3JkX3VubG9jayh2cSk7DQo+ID4gKw0KPiA+ICtvdXRfYWNjZXNzX3VubG9j azoNCj4gPiArCXJ0ZV9zcGlubG9ja191bmxvY2soJnZxLT5hY2Nlc3NfbG9jayk7DQo+ID4gKw0K PiA+ICsJaWYgKHVubGlrZWx5KHJhcnBfbWJ1ZiAhPSBOVUxMKSkNCj4gPiArCQljb3VudCArPSAx Ow0KPiA+ICsNCj4gPiArCXJldHVybiBjb3VudDsNCj4gPiArfQ0KDQo=