From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id BFD8CC52D7C for ; Mon, 19 Aug 2024 08:31:02 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 7AB6D10E1F9; Mon, 19 Aug 2024 08:31:02 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=intel.com header.i=@intel.com header.b="MxZHn71k"; dkim-atps=neutral Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.8]) by gabe.freedesktop.org (Postfix) with ESMTPS id 3B89410E1F8 for ; Mon, 19 Aug 2024 08:31:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1724056261; x=1755592261; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-id:content-transfer-encoding: mime-version; bh=KKi5GNHPmykPvUYlswNc9QASKYWsnbgzAMknW+dumEw=; b=MxZHn71kCTjgPhm03EUpxdUmFcGGtjI6DmvZjVwz4v7x8nwP8HrO/q1M 4dJiJag8/FL7nWYko0dfQIRKfINIJ9IWxCXe54HJsMBzpJ8Hu13hvK56w uvQ7JfYf/CDDgfTn1woIK0AHyHo9wnhh4/2C59zv/mVu2bx8rl63Rj14O 9mPpsoEV2S30Ka110TCdhC/6UKSGF+fu0SsSeK7lo7RoW2eIFkzcrbe1T 1MA2LGwjpJQRIDyDzuDkhFoGtc9ADfJMMtJ8QWAwi7esGWEzDmUC68BdI gWftqckELNHtY0/lh9dAnVcvKjqI7Z1qgfi5K5TM43LykYJdr13L31QwV A==; X-CSE-ConnectionGUID: j6HYFJnpTBuP86xfgWwwcg== X-CSE-MsgGUID: V5czvyAETuOER/GFKsbkjg== X-IronPort-AV: E=McAfee;i="6700,10204,11168"; a="39804815" X-IronPort-AV: E=Sophos;i="6.10,158,1719903600"; d="scan'208";a="39804815" Received: from fmviesa002.fm.intel.com ([10.60.135.142]) by fmvoesa102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 19 Aug 2024 01:31:01 -0700 X-CSE-ConnectionGUID: LGYM/B98Tym4ucR8uRwZWw== X-CSE-MsgGUID: mv+SikfhQY+PeQDyLqROwA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.10,158,1719903600"; d="scan'208";a="83519985" Received: from orsmsx601.amr.corp.intel.com ([10.22.229.14]) by fmviesa002.fm.intel.com with ESMTP/TLS/AES256-GCM-SHA384; 19 Aug 2024 01:31:00 -0700 Received: from orsmsx610.amr.corp.intel.com (10.22.229.23) by ORSMSX601.amr.corp.intel.com (10.22.229.14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Mon, 19 Aug 2024 01:31:00 -0700 Received: from orsmsx612.amr.corp.intel.com (10.22.229.25) 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.2507.39; Mon, 19 Aug 2024 01:30:59 -0700 Received: from ORSEDG601.ED.cps.intel.com (10.7.248.6) by orsmsx612.amr.corp.intel.com (10.22.229.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39 via Frontend Transport; Mon, 19 Aug 2024 01:30:59 -0700 Received: from NAM11-CO1-obe.outbound.protection.outlook.com (104.47.56.175) 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.2507.39; Mon, 19 Aug 2024 01:30:59 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=R57u6exJfHOtNYv16fm7NEzFkoonvTAmFGpA1YjDOdHgXBcNwvsATezYltnwOwQ/cOJVMnIrMja0QGVc1d0kjuEq8HuRkV4TpwsgNIWKKH3n2ZuTLDCQ5VQgv/ZWt3y1K9QnJjYbyYze4J+fRxDHUdRdz5HRQx0Qf56Ka8QqFV35/AFZo09pRDs/QBNzRDsDuUvkgz0cKJcefd1zHl89LjIR6YY/2aNvs7WCQB34d2dh8FJx3qtUqelYBVcVF/a5MBQUqAJer/7JuPUo32O+FAp5MKM8WyPLKgFkRWFedpby3+AWeExcHDfMnirXcdmISzlB5tojCz5wbSsMyI/5ng== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=KKi5GNHPmykPvUYlswNc9QASKYWsnbgzAMknW+dumEw=; b=ceVz3OYIAnWbOay81rLxpntDExGXIpff8rqU2crQT0abhlZiCjpRhxKqH6VzHjwhDqhDpm2SSatmvy1IXmM+1D/n58Ti3DbAVsB3AX7LgmO39va3ruyaHEBJawAyBsatax18/tlqmrfFHKyqWhI9K1H1SbJkZhMvu2unGIYIW5SmKJge/RMlNEGJCQpxLl37rwwR6652d9464e2R/LYRZnOzKVsVpJi2w59W3FE2XAr38eV1eIW5sTMkl/StAlCXOlcrOn8jESPdfvgZ4SIGpSGYCv15CZFaYPbyERayUcgrOyd6G6CmMeYhJ5NJOU334j3Tdscs6IrWaAAExTHOXQ== 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 IA0PR11MB7864.namprd11.prod.outlook.com (2603:10b6:208:3df::14) by PH7PR11MB6554.namprd11.prod.outlook.com (2603:10b6:510:1a8::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7875.21; Mon, 19 Aug 2024 08:30:56 +0000 Received: from IA0PR11MB7864.namprd11.prod.outlook.com ([fe80::9333:15de:faa8:4cf9]) by IA0PR11MB7864.namprd11.prod.outlook.com ([fe80::9333:15de:faa8:4cf9%5]) with mapi id 15.20.7875.019; Mon, 19 Aug 2024 08:30:19 +0000 From: "Grzegorzek, Dominik" To: "igt-dev@lists.freedesktop.org" , "Manszewski, Christoph" CC: "Patelczyk, Maciej" , "Hajda, Andrzej" , "karolina.stolarek@intel.com" , "Kempczynski, Zbigniew" , "Piatkowski, Dominik Karol" , "Sikora, Pawel" , "Kuoppala, Mika" , "Mun, Gwan-gyeong" , "kamil.konieczny@linux.intel.com" , "mika.kuaoppala@linux.intel.com" , Kolanupaka Naveena Subject: Re: [PATCH i-g-t v3 04/14] lib/xe_eudebug: Introduce eu debug testing framework Thread-Topic: [PATCH i-g-t v3 04/14] lib/xe_eudebug: Introduce eu debug testing framework Thread-Index: AQHa6lkqiQacwaVVdUqEH7GJOPSZrrIuT1kA Date: Mon, 19 Aug 2024 08:30:19 +0000 Message-ID: <7b486d72c81225e6f747f99636f908f3503a3578.camel@intel.com> References: <20240809123813.109365-1-christoph.manszewski@intel.com> <20240809123813.109365-5-christoph.manszewski@intel.com> In-Reply-To: <20240809123813.109365-5-christoph.manszewski@intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: IA0PR11MB7864:EE_|PH7PR11MB6554:EE_ x-ms-office365-filtering-correlation-id: dd109987-b433-4627-7e6a-08dcc0292951 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|1800799024|376014|366016|38070700018; x-microsoft-antispam-message-info: =?utf-8?B?VUtLcy9vTWNpTjNKb05LeUJGTHRNdDFVRDh2REE2RWozaFB2TzZyeDdEd0Ny?= =?utf-8?B?d2pBbEFROXEyT1pHdWdQTXdiQzNnSTQ1K1NobkZZYTBFWXhaMFNXWk1EMExT?= =?utf-8?B?STJZYlF3MzdlVjZoU01wSXBMb3E2aDFxWnB1dzJVc05aWHBHN2hJRGRoZ08r?= =?utf-8?B?bTk3cEd0VDM1K2JZckFyTzUrU3dQSTJMMGlxTS9HcnQ5dnd1VUp5L3BtVlF1?= =?utf-8?B?bDE2SXdTemRxR0ZWY3lGaFo2WE9LY01wUitpZVp2OVd3VEwreVhNK09SMkg5?= =?utf-8?B?c1V0dDFXNWRjU2t4cndpUnBuYXJkUVRKamtpK2tYREl3allSeGlwZFEzaTNY?= =?utf-8?B?U1ZtdTdRRy9LOHF2MTlhWFA0RkNqNks2ZjFpMUdEeWU2T011SDBVM29NTStG?= =?utf-8?B?c3NCZ29Qc1Z5Y0V4YURIZTRXcDdyQ3ovdk03Nk1rQzEyWVVub1oxdnZhSTBS?= =?utf-8?B?d2dId2VyeDBWT3VaNXlWbzF5cE4yWFNLNWt6SGh3elJiMWhGeUNHUWRoR2dq?= =?utf-8?B?cngwMEQvdDJuaUk1TVVucWRUQ1l0M0dIT1J2Q2FQR0xkOTJ5Szhsamc0bnlZ?= =?utf-8?B?bmI2S1lHNVNKUUczeHBQUGRwVXhpRnREZmxIZlZ2d1QveG1ucEhNL0JhaDZS?= =?utf-8?B?bjdVWTcvUXhFaWhvKzR0UXBhUnJRNnd3K213T2pvdDdnT0g1TnhlZ1UrYjkv?= =?utf-8?B?dVcwZzdJR0dhNzI0UnVKeFhaS2hSeFhlL2w2SnU4Mll6Mk1iYzdTL2p1YXNm?= =?utf-8?B?TXFtMTlSd1lRL0xTY0xtbDRFS3NMMmp3TzJLYmx1YU9oWXB4QlFiU3o1UlRO?= =?utf-8?B?QTV2SnpydlZiRThHNEUzTTU3NmRDNXA3Ri9mNVhvSnN6dC9zdy94MjBTZTdF?= =?utf-8?B?VGJsWjJyb0NtK0NCUEdiQytpNktXaVI0UjB3Njk0Vko3VGM3dXVqVkVndHda?= =?utf-8?B?Y3V3ZlJkMDZyUnNGQUZPT0hZWVNjNWV6QVBXOWZYeWNOaFFFdmMwcS9WMERP?= =?utf-8?B?U0xWekgyYmJ1OTc0STlTVWJINmhEWHIzMlBaUkI4RlJiR080VGxIbi9YaU5I?= =?utf-8?B?Z1gvV1NzWUZRc015RitjOWh4Q3pSaXZYb0JFbldMck9EVXpMOTBScWNEdm82?= =?utf-8?B?TngwSXlpOEpaWVVwa0xHZkFqcFhkK1RTeVJmM2RhM0VENm0vaEhua2QvVUE0?= =?utf-8?B?STVqdW5PSktML2EwanNpWDg5UzNsMW8zV1N4VDFTZE9xZ2o2VTdZcUhHTlhD?= =?utf-8?B?QXZ4dndzR0FScGVUblBTOXQwVjhkakxsVWZ3QVdDeEhEM2Q5M0NiZGZYcjla?= =?utf-8?B?NkhkRExuMDRBUzRwb2V6YWtMaUh0TVh0aDlqOVc3WVgvb2pqK0dCRHh5UjBl?= =?utf-8?B?STBzTkJTTnR4ZEF3ZWt4Z2h2QS9JL1M0YlRUQ29MNVJOMHU5NU5MS29yMjlG?= =?utf-8?B?Rm9hZE9kcGJpUHo2dkkxTzBudUhQUTc1SXJSMnZnbkJHeHNsTGJ3NGRLSnVu?= =?utf-8?B?aXhLL2JFOEo4emhIakV2RFVIOHd3RFFxODFRV3kyTFJOMFlLLzhNcWNnV25Y?= =?utf-8?B?SExzVFkreFZ3dUJqV3ZuQXVGQUtlR3R2TmZnRWRnRUNkMWs2MkEwZ1d6czBX?= =?utf-8?B?TFRTVmI5Q3RQc0lZYm16VjFrL1F1TW9hUWt0enJBZWtxNGRaamZlYVNCOTVw?= =?utf-8?B?c0lQMy91VzhKRXFsWSs0bVJRZ214R1Zqdmg4Z0FkQkRnWjZRMmhrNmZiY1ll?= =?utf-8?B?MlI3YTJYZE1FKzJjTjBEZERsbTRoMkhIenhhbFBoSGxTZkZ4d05ZakdjenVw?= =?utf-8?B?ekxiQzNqRk96RnhSVjd1REtIekNZN3crS3g2dXBBaDhleE1jU0FLajBZdFJU?= =?utf-8?B?QlZCQlgzR2o5d2cyUi9sQlBtb0g5NUtSUHJhWTA2Q0hYekE9PQ==?= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:IA0PR11MB7864.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(1800799024)(376014)(366016)(38070700018); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?U1NhK0RxQnl1d213SVlTMjU5YXRVc3VCc2IvdHcwWTB5UjN6cFFrcXNLZCsx?= =?utf-8?B?L2pQS2NmSGpjSjlBc3E3am1JdWJhNjVXN21FNnBsS09Odnk2MEdUdHJUSjJq?= =?utf-8?B?am96TWhCRW4yRUdwTS9McFpIMDlJK21iby9FSkpVa2xTNjhPM1BpMEpYTVM3?= =?utf-8?B?Y0h3MmtwcVlES2lvcmk3aElZVW9TU1lqRUdia1F2OFdtdmNia0c2RjdObno2?= =?utf-8?B?bWRENW1jSmpENjVXWEVBLytDVmgvZDkveU9aOTd1KzZLRFZJYnE2ZUFXL1Q5?= =?utf-8?B?Ym9ud2pRMnNXdzdsdkNYYW44LzVyVlROTm9DRFlxSXhCdXFybTVSTC9OU21t?= =?utf-8?B?TmRRaXQxNFp1VmRvaThLOEJuWU8rUFdCTU1BL1Vxa1VBWnZpcHlObzBjL0tt?= =?utf-8?B?UHBMOHRjTy9OemdYZVRDbGZUcThLT1ZUN0hZV01xemxnaEpjbno3Zm56K3NF?= =?utf-8?B?RlV6RWpmbjNWSDZTZTJCd3crT3U0b0hmZEZyZXlZUGhLbE05WFFFU2J5N1Nx?= =?utf-8?B?dGFSb2t0NXRTWUk1a0pmMlgwcENkQUxsOVh6L3lFVXFuTEFrV3hEWGxadkVa?= =?utf-8?B?Tm1RbmFzTkppUmh1cEt1TkVsT00vd1Y0bmQ2c2tMK25CUSt5dUNJc21ldWt3?= =?utf-8?B?WlZnL0RIRWt5YTZkc0RyTGkvN2dCZmhiVjZxUyszSEFHa1hjY1B3OGEwcStm?= =?utf-8?B?SXNlQjJYbUU3Vko4WFUrTURLK0FoUFFwZ00vSUpIenRqSEJEME1ZVHlWY1pt?= =?utf-8?B?VkZQMktvWWppa3RuVkJwS3JkL3ZjQzQ2cTUxdHE3MkVaVmlZUmJOTGZpcVVY?= =?utf-8?B?aHRTZVErdkhQd3JxRm05WE1ZNGgwTU50SjlTeTh6ZzZBQVVpbDlFVjN2MXZQ?= =?utf-8?B?LzNIeTN2WVNFUUNNWWRXWEhTbXlCQTR5dldhUnR2MHRNMmNMWWRQa3F2QTFh?= =?utf-8?B?cDJHWkFSUm9IOWZod2xKWUhDaE1TcnYwU0dZdjVRMzNHRXNyb25lSTVhRVVR?= =?utf-8?B?K2tzMnpOZHkwNjVyS1lXMThIcmRVcHdHVmVhamRpMmM2T3NYVkNYMzdXeXVP?= =?utf-8?B?TFZQS2lIdURXSmxBVThlaDVVbkdSL0tNeEhQZmsxaW1UTk1HSGh2V21CcURl?= =?utf-8?B?MVlLTzJrWWI2NGV0VCs4ZGFub0tKQ0xUTkN5K0RFZ0tFcDcxbnIrNzNmQXBG?= =?utf-8?B?S1l3elMyRmpJdUkwQnB1UHFYMTZmTVZFN2Z4ODhFRU5OaUVqbllzZnVFa3dh?= =?utf-8?B?WHdwR1ovWnNMclBhZlNMRWdFNFhEQWNveFEya3o4Z2pBUW9WdDZuVitham9K?= =?utf-8?B?R1lycjNFVnFSbEFOOHFJTEF5YmZhR2pGL1RKUFJud29hNzlsL24xQmJqL3N2?= =?utf-8?B?elkvczU5QlpBc3FWYTY1THhKTDZCNTgrT25DYTR3UVIzL3kzRjIxUHNFUHJU?= =?utf-8?B?VjRIUDEzTmJjbmJxL2t5MEZTSHROYmdLYmZvckxjd3krdmVzL0x2SnVtRzJy?= =?utf-8?B?eU1CaWRwSi9aa05hN1ozT3d1bEY2SDhETncxWGFHeVJsRmpodTFkNjFaMlg2?= =?utf-8?B?YnZIS1QzWVoyaEVrQ2RyYkFIYmN4K0VEY2Q0VmFVUEJxVWwyMEZvaGlKQmdp?= =?utf-8?B?Zk5zTHNCUEt1UFplV1VwblI1aHI4OElJKzB3dHBYVnU4Z0VPZ1k2eFRkbDg0?= =?utf-8?B?cDRLRDNxN2JwK044SURtVHhTNWpuWTZZbkwyV0F3SmJQWEd1amlSc0JRakhE?= =?utf-8?B?NTlUWWZid0lIU2tXeUJTUjA4bW9xekkxTnFnN2J2Sm85b2p4dlpOQ3FYczVs?= =?utf-8?B?Qm8rRFNmUzdpUGdEOVVFSGFmdHozaWY5d3RMMC83Z1ZSMGVvVVFVQkFSbzEz?= =?utf-8?B?RlJ5OVkwVlQ4cWdremU3S0RLZ3pkejJ2UlU5bDl0SUpTZ2ZWRjM1T0FTcTYw?= =?utf-8?B?YllUaU51VTBvd3RtYklDaEk5R2VjbC9wVlZpK2V2TFBXcHZKUUR4dDdOZHRm?= =?utf-8?B?eE1NNzRZcXErSFBsZWZUdCtBZVBralVHQklsYWN1ZFdXNXlONlArZnZ3QnlI?= =?utf-8?B?SnRGeG00QVQvTENvT2luWEhlclhOMjN0R3ZjY0UreXlBOTE3SWxsdDNsV1Nw?= =?utf-8?B?WnlrTXU3UFJxY0Q5L0t2Znk3QVNmOTFNak9qMzdqMkROS1Y0UlVNbHAzK0E5?= =?utf-8?Q?EB8MAYYJq7h8+k1iz9OsoEU=3D?= Content-Type: text/plain; charset="utf-8" Content-ID: <4FF4D4D4E13E544A852A30A43C558867@namprd11.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: IA0PR11MB7864.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: dd109987-b433-4627-7e6a-08dcc0292951 X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Aug 2024 08:30:19.8734 (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: tfWgRXI/69xrvWyxEtn+gBs4+c131leTihda4NQButGN+HSMMFnzEyr7zPXDIw6YIyznB+Gp09xSBOLKh8zQdZmqiASKCFcWskDm7W04PLU= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR11MB6554 X-OriginatorOrg: intel.com X-BeenThere: igt-dev@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Development mailing list for IGT GPU Tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" T24gRnJpLCAyMDI0LTA4LTA5IGF0IDE0OjM4ICswMjAwLCBDaHJpc3RvcGggTWFuc3pld3NraSB3 cm90ZToNCj4gRnJvbTogRG9taW5payBHcnplZ29yemVrIDxkb21pbmlrLmdyemVnb3J6ZWtAaW50 ZWwuY29tPg0KPiANCj4gSW50cm9kdWNlIGxpYnJhcnkgd2hpY2ggc2ltcGxpZmllcyB0ZXN0aW5n IG9mIGV1IGRlYnVnIGNhcGFiaWxpdHkuDQo+IFRoZSBsaWJyYXJ5IHByb3ZpZGVzIGV2ZW50IGxv ZyBoZWxwZXJzIHRvZ2V0aGVyIHdpdGggYXN5bmNocm9ub3VzDQo+IGFic3RyYWN0aW9uIGZvciBj bGllbnQgcHJvY2Nlc3MgYW5kIHRoZSBkZWJ1Z2dlciBpdHNlbGYuDQo+IA0KPiB4ZV9ldWRlYnVn X2NsaWVudCBjcmVhdGVzIGl0cyBvd24gcHJvY2Nlc3Mgd2l0aCB1c2VyJ3Mgd29yayBmdW5jdGlv biwNCj4gYW5kIGdpdmVzIG1hY2hhbmlzbXMgdG8gc3luY2hyb25pemUgYmVnaW5uaW5nIG9mIGV4 ZWN1dGlvbiBhbmQgZXZlbnQNCj4gbG9nZ2luZy4NCj4gDQo+IHhlX2V1ZGVidWdfZGVidWdnZXIg YWxsb3dzIHRvIGF0dGFjaCB0byB0aGUgZ2l2ZW4gcHJvY2Nlc3MsIHByb3ZpZGVzDQo+IGFzeW5j aHJvbm91cyB0aHJlYWQgZm9yIGV2ZW50IHJlYWRpbmcgYW5kIGludHJvZHVjZXMgdHJpZ2dlcnMg LQ0KPiBhIGNhbGxiYWNrIG1lY2hhbmlzbSB0cmlnZ2VyZWQgZXZlcnkgdGltZSBzdWJzY3JpYmVk IGV2ZW50IHdhcyByZWFkLg0KPiANCj4gU2lnbmVkLW9mZi1ieTogRG9taW5payBHcnplZ29yemVr IDxkb21pbmlrLmdyemVnb3J6ZWtAaW50ZWwuY29tPg0KPiBTaWduZWQtb2ZmLWJ5OiBNaWthIEt1 b3BwYWxhIDxtaWthLmt1YW9wcGFsYUBsaW51eC5pbnRlbC5jb20+DQo+IFNpZ25lZC1vZmYtYnk6 IENocmlzdG9waCBNYW5zemV3c2tpIDxjaHJpc3RvcGgubWFuc3pld3NraUBpbnRlbC5jb20+DQo+ IFNpZ25lZC1vZmYtYnk6IE1hY2llaiBQYXRlbGN6eWsgPG1hY2llai5wYXRlbGN6eWtAaW50ZWwu Y29tPg0KPiBTaWduZWQtb2ZmLWJ5OiBQYXdlbCBTaWtvcmEgPHBhd2VsLnNpa29yYUBpbnRlbC5j b20+DQo+IFNpZ25lZC1vZmYtYnk6IEthcm9saW5hIFN0b2xhcmVrIDxrYXJvbGluYS5zdG9sYXJl a0BpbnRlbC5jb20+DQo+IC0tLQ0KPiAgbGliL21lc29uLmJ1aWxkICAgICB8ICAgIDEgKw0KPiAg bGliL3hlL3hlX2V1ZGVidWcuYyB8IDIxOTIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKw0KPiAgbGliL3hlL3hlX2V1ZGVidWcuaCB8ICAyMDYgKysrKw0KPiAgMyBm aWxlcyBjaGFuZ2VkLCAyMzk5IGluc2VydGlvbnMoKykNCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBs aWIveGUveGVfZXVkZWJ1Zy5jDQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL3hlL3hlX2V1ZGVi dWcuaA0KPiANCj4gZGlmZiAtLWdpdCBhL2xpYi9tZXNvbi5idWlsZCBiL2xpYi9tZXNvbi5idWls ZA0KPiBpbmRleCBmNzExZTYwYTcuLjk2OWNhNDEwMSAxMDA2NDQNCj4gLS0tIGEvbGliL21lc29u LmJ1aWxkDQo+ICsrKyBiL2xpYi9tZXNvbi5idWlsZA0KPiBAQCAtMTExLDYgKzExMSw3IEBAIGxp Yl9zb3VyY2VzID0gWw0KPiAgCSdpZ3RfbXNtLmMnLA0KPiAgCSdpZ3RfZHNjLmMnLA0KPiAgCSd4 ZS94ZV9ndC5jJywNCj4gKwkneGUveGVfZXVkZWJ1Zy5jJywNCj4gIAkneGUveGVfaW9jdGwuYycs DQo+ICAJJ3hlL3hlX21taW8uYycsDQo+ICAJJ3hlL3hlX3F1ZXJ5LmMnLA0KPiBkaWZmIC0tZ2l0 IGEvbGliL3hlL3hlX2V1ZGVidWcuYyBiL2xpYi94ZS94ZV9ldWRlYnVnLmMNCj4gbmV3IGZpbGUg bW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwLi40ZWFjODc0NzYNCj4gLS0tIC9kZXYvbnVs bA0KPiArKysgYi9saWIveGUveGVfZXVkZWJ1Zy5jDQo+IEBAIC0wLDAgKzEsMjE5MiBAQA0KPiAr Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVA0KPiArLyoNCj4gKyAqIENvcHlyaWdodCDC qSAyMDIzIEludGVsIENvcnBvcmF0aW9uDQo+ICsgKi8NCj4gKw0KPiArI2luY2x1ZGUgPGZjbnRs Lmg+DQo+ICsjaW5jbHVkZSA8cG9sbC5oPg0KPiArI2luY2x1ZGUgPHNpZ25hbC5oPg0KPiArI2lu Y2x1ZGUgPHN5cy9zZWxlY3QuaD4NCj4gKyNpbmNsdWRlIDxzeXMvc3RhdC5oPg0KPiArI2luY2x1 ZGUgPHN5cy90eXBlcy5oPg0KPiArI2luY2x1ZGUgPHN5cy93YWl0Lmg+DQo+ICsNCj4gKyNpbmNs dWRlICJpZ3QuaCINCj4gKyNpbmNsdWRlICJpZ3Rfc3lzZnMuaCINCj4gKyNpbmNsdWRlICJpbnRl bF9wYXQuaCINCj4gKyNpbmNsdWRlICJ4ZV9ldWRlYnVnLmgiDQo+ICsjaW5jbHVkZSAieGVfaW9j dGwuaCINCj4gKw0KPiArc3RydWN0IGV2ZW50X3RyaWdnZXIgew0KPiArCXhlX2V1ZGVidWdfdHJp Z2dlcl9mbiBmbjsNCj4gKwlpbnQgdHlwZTsNCj4gKwlzdHJ1Y3QgaWd0X2xpc3RfaGVhZCBsaW5r Ow0KPiArfTsNCj4gKw0KPiArc3RydWN0IHNlcW5vX2xpc3RfZW50cnkgew0KPiArCXN0cnVjdCBp Z3RfbGlzdF9oZWFkIGxpbms7DQo+ICsJdWludDY0X3Qgc2Vxbm87DQo+ICt9Ow0KPiArDQo+ICtz dHJ1Y3QgbWF0Y2hfZHRvIHsNCj4gKwlzdHJ1Y3QgZHJtX3hlX2V1ZGVidWdfZXZlbnQgKnRhcmdl dDsNCj4gKwlzdHJ1Y3QgaWd0X2xpc3RfaGVhZCAqc2Vxbm9fbGlzdDsNCj4gKwl1aW50NjRfdCBj bGllbnRfaGFuZGxlOw0KPiArCXVpbnQzMl90IGZpbHRlcjsNCj4gKw0KPiArCS8qIHN0b3JlIGxh dGVzdCAnRVZFTlRfVk1fQklORCcgc2Vxbm8gKi8NCj4gKwl1aW50NjRfdCAqYmluZF9zZXFubzsN Cj4gKwkvKiBsYXRlc3Qgdm1fYmluZF9vcCBzZXFubyBtYXRjaGluZyBiaW5kX3NlcW5vICovDQo+ ICsJdWludDY0X3QgKmJpbmRfb3Bfc2Vxbm87DQo+ICt9Ow0KPiArDQo+ICsjZGVmaW5lIENMSUVO VF9QSUQgIDENCj4gKyNkZWZpbmUgQ0xJRU5UX1JVTiAgMg0KPiArI2RlZmluZSBDTElFTlRfRklO SSAzDQo+ICsjZGVmaW5lIENMSUVOVF9TVE9QIDQNCj4gKyNkZWZpbmUgQ0xJRU5UX1NUQUdFIDUN Cj4gKyNkZWZpbmUgREVCVUdHRVJfU1RBR0UgNg0KPiArDQo+ICsjZGVmaW5lIERFQlVHR0VSX1dP UktFUl9JTkFDVElWRSAgMA0KPiArI2RlZmluZSBERUJVR0dFUl9XT1JLRVJfQUNUSVZFICAxDQo+ ICsjZGVmaW5lIERFQlVHR0VSX1dPUktFUl9RVUlUVElORyAyDQo+ICsNCj4gK3N0YXRpYyBjb25z dCBjaGFyICp0eXBlX3RvX3N0cih1bnNpZ25lZCBpbnQgdHlwZSkNCj4gK3sNCj4gKwlzd2l0Y2gg KHR5cGUpIHsNCj4gKwljYXNlIERSTV9YRV9FVURFQlVHX0VWRU5UX05PTkU6DQo+ICsJCXJldHVy biAibm9uZSI7DQo+ICsJY2FzZSBEUk1fWEVfRVVERUJVR19FVkVOVF9SRUFEOg0KPiArCQlyZXR1 cm4gInJlYWQiOw0KPiArCWNhc2UgRFJNX1hFX0VVREVCVUdfRVZFTlRfT1BFTjoNCj4gKwkJcmV0 dXJuICJjbGllbnQiOw0KPiArCWNhc2UgRFJNX1hFX0VVREVCVUdfRVZFTlRfVk06DQo+ICsJCXJl dHVybiAidm0iOw0KPiArCWNhc2UgRFJNX1hFX0VVREVCVUdfRVZFTlRfRVhFQ19RVUVVRToNCj4g KwkJcmV0dXJuICJleGVjX3F1ZXVlIjsNCj4gKwljYXNlIERSTV9YRV9FVURFQlVHX0VWRU5UX0VV X0FUVEVOVElPTjoNCj4gKwkJcmV0dXJuICJhdHRlbnRpb24iOw0KPiArCWNhc2UgRFJNX1hFX0VV REVCVUdfRVZFTlRfVk1fQklORDoNCj4gKwkJcmV0dXJuICJ2bV9iaW5kIjsNCj4gKwljYXNlIERS TV9YRV9FVURFQlVHX0VWRU5UX1ZNX0JJTkRfT1A6DQo+ICsJCXJldHVybiAidm1fYmluZF9vcCI7 DQo+ICsJY2FzZSBEUk1fWEVfRVVERUJVR19FVkVOVF9WTV9CSU5EX1VGRU5DRToNCj4gKwkJcmV0 dXJuICJ2bV9iaW5kX3VmZW5jZSI7DQo+ICsJY2FzZSBEUk1fWEVfRVVERUJVR19FVkVOVF9NRVRB REFUQToNCj4gKwkJcmV0dXJuICJtZXRhZGF0YSI7DQo+ICsJY2FzZSBEUk1fWEVfRVVERUJVR19F VkVOVF9WTV9CSU5EX09QX01FVEFEQVRBOg0KPiArCQlyZXR1cm4gInZtX2JpbmRfb3BfbWV0YWRh dGEiOw0KPiArCX0NCj4gKw0KPiArCXJldHVybiAiVU5LTk9XTiI7DQo+ICt9DQo+ICsNCj4gK3N0 YXRpYyBjb25zdCBjaGFyICpldmVudF90eXBlX3RvX3N0cihzdHJ1Y3QgZHJtX3hlX2V1ZGVidWdf ZXZlbnQgKmUsIGNoYXIgKmJ1ZikNCj4gK3sNCj4gKwlzcHJpbnRmKGJ1ZiwgIiVzKCVkKSIsIHR5 cGVfdG9fc3RyKGUtPnR5cGUpLCBlLT50eXBlKTsNCj4gKw0KPiArCXJldHVybiBidWY7DQo+ICt9 DQo+ICsNCj4gK3N0YXRpYyBjb25zdCBjaGFyICpmbGFnc190b19zdHIodW5zaWduZWQgaW50IGZs YWdzKQ0KPiArew0KPiArCWlmIChmbGFncyAmIERSTV9YRV9FVURFQlVHX0VWRU5UX0NSRUFURSkg ew0KPiArCQlpZiAoZmxhZ3MgJiBEUk1fWEVfRVVERUJVR19FVkVOVF9ORUVEX0FDSykNCj4gKwkJ CXJldHVybiAiY3JlYXRlfGFjayI7DQo+ICsJCWVsc2UNCj4gKwkJCXJldHVybiAiY3JlYXRlIjsN Cj4gKwl9DQo+ICsJaWYgKGZsYWdzICYgRFJNX1hFX0VVREVCVUdfRVZFTlRfREVTVFJPWSkNCj4g KwkJcmV0dXJuICJkZXN0cm95IjsNCj4gKw0KPiArCWlmIChmbGFncyAmIERSTV9YRV9FVURFQlVH X0VWRU5UX1NUQVRFX0NIQU5HRSkNCj4gKwkJcmV0dXJuICJzdGF0ZS1jaGFuZ2UiOw0KPiArDQo+ ICsJaWd0X2Fzc2VydCghKGZsYWdzICYgRFJNX1hFX0VVREVCVUdfRVZFTlRfTkVFRF9BQ0spKTsN Cj4gKw0KPiArCXJldHVybiAiZmxhZ3MgdW5rbm93biI7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBj b25zdCBjaGFyICpldmVudF9tZW1iZXJzX3RvX3N0cihzdHJ1Y3QgZHJtX3hlX2V1ZGVidWdfZXZl bnQgKmUsIGNoYXIgKmIpDQo+ICt7DQo+ICsJc3dpdGNoIChlLT50eXBlKSB7DQo+ICsJY2FzZSBE Uk1fWEVfRVVERUJVR19FVkVOVF9PUEVOOiB7DQo+ICsJCXN0cnVjdCBkcm1feGVfZXVkZWJ1Z19l dmVudF9jbGllbnQgKmVjID0gKHN0cnVjdCBkcm1feGVfZXVkZWJ1Z19ldmVudF9jbGllbnQgKill Ow0KPiArDQo+ICsJCXNwcmludGYoYiwgImhhbmRsZT0lbGx1IiwgZWMtPmNsaWVudF9oYW5kbGUp Ow0KPiArCQlicmVhazsNCj4gKwl9DQo+ICsJY2FzZSBEUk1fWEVfRVVERUJVR19FVkVOVF9WTTog ew0KPiArCQlzdHJ1Y3QgZHJtX3hlX2V1ZGVidWdfZXZlbnRfdm0gKmV2bSA9IChzdHJ1Y3QgZHJt X3hlX2V1ZGVidWdfZXZlbnRfdm0gKillOw0KPiArDQo+ICsJCXNwcmludGYoYiwgImNsaWVudF9o YW5kbGU9JWxsdSwgaGFuZGxlPSVsbHUiLA0KPiArCQkJZXZtLT5jbGllbnRfaGFuZGxlLCBldm0t PnZtX2hhbmRsZSk7DQo+ICsJCWJyZWFrOw0KPiArCX0NCj4gKwljYXNlIERSTV9YRV9FVURFQlVH X0VWRU5UX0VYRUNfUVVFVUU6IHsNCj4gKwkJc3RydWN0IGRybV94ZV9ldWRlYnVnX2V2ZW50X2V4 ZWNfcXVldWUgKmVlID0gKHZvaWQgKillOw0KPiArDQo+ICsJCXNwcmludGYoYiwgImNsaWVudF9o YW5kbGU9JWxsdSwgdm1faGFuZGxlPSVsbHUsICINCj4gKwkJCSAgICJleGVjX3F1ZXVlX2hhbmRs ZT0lbGx1LCBlbmdpbmVfY2xhc3M9JWQsIGV4ZWNfcXVldWVfd2lkdGg9JWQiLA0KPiArCQkJZWUt PmNsaWVudF9oYW5kbGUsIGVlLT52bV9oYW5kbGUsDQo+ICsJCQllZS0+ZXhlY19xdWV1ZV9oYW5k bGUsIGVlLT5lbmdpbmVfY2xhc3MsIGVlLT53aWR0aCk7DQo+ICsJCWJyZWFrOw0KPiArCX0NCj4g KwljYXNlIERSTV9YRV9FVURFQlVHX0VWRU5UX0VVX0FUVEVOVElPTjogew0KPiArCQlzdHJ1Y3Qg ZHJtX3hlX2V1ZGVidWdfZXZlbnRfZXVfYXR0ZW50aW9uICplYSA9ICh2b2lkICopZTsNCj4gKw0K PiArCQlzcHJpbnRmKGIsICJjbGllbnRfaGFuZGxlPSVsbHUsIGV4ZWNfcXVldWVfaGFuZGxlPSVs bHUsICINCj4gKwkJCSAgICJscmNfaGFuZGxlPSVsbHUsIGJpdG1hc2tfc2l6ZT0lZCIsDQo+ICsJ CQllYS0+Y2xpZW50X2hhbmRsZSwgZWEtPmV4ZWNfcXVldWVfaGFuZGxlLA0KPiArCQkJZWEtPmxy Y19oYW5kbGUsIGVhLT5iaXRtYXNrX3NpemUpOw0KPiArCQlicmVhazsNCj4gKwl9DQo+ICsJY2Fz ZSBEUk1fWEVfRVVERUJVR19FVkVOVF9WTV9CSU5EOiB7DQo+ICsJCXN0cnVjdCBkcm1feGVfZXVk ZWJ1Z19ldmVudF92bV9iaW5kICpldm1iID0gKHZvaWQgKillOw0KPiArDQo+ICsJCXNwcmludGYo YiwgImNsaWVudF9oYW5kbGU9JWxsdSwgdm1faGFuZGxlPSVsbHUsIGZsYWdzPTB4JXgsIG51bV9i aW5kcz0ldSIsDQo+ICsJCQlldm1iLT5jbGllbnRfaGFuZGxlLCBldm1iLT52bV9oYW5kbGUsIGV2 bWItPmZsYWdzLCBldm1iLT5udW1fYmluZHMpOw0KPiArCQlicmVhazsNCj4gKwl9DQo+ICsJY2Fz ZSBEUk1fWEVfRVVERUJVR19FVkVOVF9WTV9CSU5EX09QOiB7DQo+ICsJCXN0cnVjdCBkcm1feGVf ZXVkZWJ1Z19ldmVudF92bV9iaW5kX29wICpvcCA9ICh2b2lkICopZTsNCj4gKw0KPiArCQlzcHJp bnRmKGIsICJ2bV9iaW5kX3JlZl9zZXFubz0lbGxkLCBhZGRyPSUwMTZsbHgsIHJhbmdlPSVsbHUg bnVtX2V4dGVuc2lvbnM9JWxsdSIsDQo+ICsJCQlvcC0+dm1fYmluZF9yZWZfc2Vxbm8sIG9wLT5h ZGRyLCBvcC0+cmFuZ2UsIG9wLT5udW1fZXh0ZW5zaW9ucyk7DQo+ICsJCWJyZWFrOw0KPiArCX0N Cj4gKwljYXNlIERSTV9YRV9FVURFQlVHX0VWRU5UX1ZNX0JJTkRfVUZFTkNFOiB7DQo+ICsJCXN0 cnVjdCBkcm1feGVfZXVkZWJ1Z19ldmVudF92bV9iaW5kX3VmZW5jZSAqZiA9ICh2b2lkICopZTsN Cj4gKw0KPiArCQlzcHJpbnRmKGIsICJ2bV9iaW5kX3JlZl9zZXFubz0lbGxkIiwgZi0+dm1fYmlu ZF9yZWZfc2Vxbm8pOw0KPiArCQlicmVhazsNCj4gKwl9DQo+ICsJY2FzZSBEUk1fWEVfRVVERUJV R19FVkVOVF9NRVRBREFUQTogew0KPiArCQlzdHJ1Y3QgZHJtX3hlX2V1ZGVidWdfZXZlbnRfbWV0 YWRhdGEgKmVtID0gKHZvaWQgKillOw0KPiArDQo+ICsJCXNwcmludGYoYiwgImNsaWVudF9oYW5k bGU9JWxsdSwgbWV0YWRhdGFfaGFuZGxlPSVsbHUsIHR5cGU9JWxsdSwgbGVuPSVsbHUiLA0KPiAr CQkJZW0tPmNsaWVudF9oYW5kbGUsIGVtLT5tZXRhZGF0YV9oYW5kbGUsIGVtLT50eXBlLCBlbS0+ bGVuKTsNCj4gKwkJYnJlYWs7DQo+ICsJfQ0KPiArCWNhc2UgRFJNX1hFX0VVREVCVUdfRVZFTlRf Vk1fQklORF9PUF9NRVRBREFUQTogew0KPiArCQlzdHJ1Y3QgZHJtX3hlX2V1ZGVidWdfZXZlbnRf dm1fYmluZF9vcF9tZXRhZGF0YSAqb3AgPSAodm9pZCAqKWU7DQo+ICsNCj4gKwkJc3ByaW50Zihi LCAidm1fYmluZF9vcF9yZWZfc2Vxbm89JWxsZCwgbWV0YWRhdGFfaGFuZGxlPSVsbHUsIG1ldGFk YXRhX2Nvb2tpZT0lbGx1IiwNCj4gKwkJCW9wLT52bV9iaW5kX29wX3JlZl9zZXFubywgb3AtPm1l dGFkYXRhX2hhbmRsZSwgb3AtPm1ldGFkYXRhX2Nvb2tpZSk7DQo+ICsJCWJyZWFrOw0KPiArCX0N Cj4gKwlkZWZhdWx0Og0KPiArCQlzdHJjcHkoYiwgIjwuLi4+Iik7DQo+ICsJfQ0KPiArDQo+ICsJ cmV0dXJuIGI7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICogeGVfZXVkZWJ1Z19ldmVudF90b19z dHI6DQo+ICsgKiBAZTogcG9pbnRlciB0byBldmVudA0KPiArICogQGJ1ZjogdGFyZ2V0IHRvIHdy aXRlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBAZQ0KPiArICogQGxlbjogc2l6ZSBvZiB0YXJn ZXQgYnVmZmVyIEBidWYNCj4gKyAqDQo+ICsgKiBDcmVhdGVzIHN0cmluZyByZXByZXNlbnRhdGlv biBmb3IgZ2l2ZW4gZXZlbnQuDQo+ICsgKg0KPiArICogUmV0dXJuczogdGhlIHdyaXR0ZW4gaW5w dXQgYnVmZmVyIHBvaW50ZWQgYnkgQGJ1Zi4NCj4gKyAqLw0KPiArY29uc3QgY2hhciAqeGVfZXVk ZWJ1Z19ldmVudF90b19zdHIoc3RydWN0IGRybV94ZV9ldWRlYnVnX2V2ZW50ICplLCBjaGFyICpi dWYsIHNpemVfdCBsZW4pDQo+ICt7DQo+ICsJY2hhciBhWzI1Nl07DQo+ICsJY2hhciBiWzI1Nl07 DQo+ICsNCj4gKwlzbnByaW50ZihidWYsIGxlbiwgIiglbGx1KSAlMTVzOiVzOiAlcyIsDQo+ICsJ CSBlLT5zZXFubywNCj4gKwkJIGV2ZW50X3R5cGVfdG9fc3RyKGUsIGEpLA0KPiArCQkgZmxhZ3Nf dG9fc3RyKGUtPmZsYWdzKSwNCj4gKwkJIGV2ZW50X21lbWJlcnNfdG9fc3RyKGUsIGIpKTsNCj4g Kw0KPiArCXJldHVybiBidWY7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGNhdGNoX2NoaWxk X2ZhaWx1cmUodm9pZCkNCj4gK3sNCj4gKwlwaWRfdCBwaWQ7DQo+ICsJaW50IHN0YXR1czsNCj4g Kw0KPiArCXBpZCA9IHdhaXRwaWQoLTEsICZzdGF0dXMsIFdOT0hBTkcpOw0KPiArDQo+ICsJaWYg KHBpZCA9PSAwIHx8IHBpZCA9PSAtMSkNCj4gKwkJcmV0dXJuOw0KPiArDQo+ICsJaWYgKCFXSUZF WElURUQoc3RhdHVzKSkNCj4gKwkJcmV0dXJuOw0KPiArDQo+ICsJaWd0X2Fzc2VydF9mKFdFWElU U1RBVFVTKHN0YXR1cykgPT0gMCwgIkNsaWVudCBmYWlsZWQhXG4iKTsNCj4gK30NCj4gKw0KPiAr c3RhdGljIGludCBzYWZlX3BpcGVfcmVhZChpbnQgcGlwZVsyXSwgdm9pZCAqYnVmLCBpbnQgbmJ5 dGVzLCBpbnQgdGltZW91dF9tcykNCj4gK3sNCj4gKwlpbnQgcmV0Ow0KPiArCWludCB0ID0gMDsN Cj4gKwlzdHJ1Y3QgcG9sbGZkIGZkID0gew0KPiArCQkuZmQgPSBwaXBlWzBdLA0KPiArCQkuZXZl bnRzID0gUE9MTElOLA0KPiArCQkucmV2ZW50cyA9IDANCj4gKwl9Ow0KPiArDQo+ICsJLyogV2hl biBjaGlsZCBmYWlscyB3ZSBtYXkgZ2V0IHN0dWNrIGZvcmV2ZXIuIENoZWNrIHdoZXRoZXINCj4g KwkgKiB0aGUgY2hpbGQgcHJvY2VzcyBlbmRlZCB3aXRoIGFuIGVycm9yLg0KPiArCSAqLw0KPiAr CWRvIHsNCj4gKwkJY29uc3QgaW50IGludGVydmFsX21zID0gMTAwMDsNCj4gKw0KPiArCQlyZXQg PSBwb2xsKCZmZCwgMSwgaW50ZXJ2YWxfbXMpOw0KPiArDQo+ICsJCWlmICghcmV0KSB7DQo+ICsJ CQljYXRjaF9jaGlsZF9mYWlsdXJlKCk7DQo+ICsJCQl0ICs9IGludGVydmFsX21zOw0KPiArCQl9 DQo+ICsJfSB3aGlsZSAoIXJldCAmJiB0IDwgdGltZW91dF9tcyk7DQo+ICsNCj4gKwlpZiAocmV0 ID4gMCkNCj4gKwkJcmV0dXJuIHJlYWQocGlwZVswXSwgYnVmLCBuYnl0ZXMpOw0KPiArDQo+ICsJ cmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB1aW50NjRfdCBwaXBlX3JlYWQoaW50IHBp cGVbMl0sIGludCB0aW1lb3V0X21zKQ0KPiArew0KPiArCXVpbnQ2NF90IGluOw0KPiArCXVpbnQ2 NF90IHJldDsNCj4gKw0KPiArCXJldCA9IHNhZmVfcGlwZV9yZWFkKHBpcGUsICZpbiwgc2l6ZW9m KGluKSwgdGltZW91dF9tcyk7DQo+ICsJaWd0X2Fzc2VydChyZXQgPT0gc2l6ZW9mKGluKSk7DQo+ ICsNCj4gKwlyZXR1cm4gaW47DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIHBpcGVfc2lnbmFs KGludCBwaXBlWzJdLCB1aW50NjRfdCB0b2tlbikNCj4gK3sNCj4gKwlpZ3RfYXNzZXJ0KHdyaXRl KHBpcGVbMV0sICZ0b2tlbiwgc2l6ZW9mKHRva2VuKSkgPT0gc2l6ZW9mKHRva2VuKSk7DQo+ICt9 DQo+ICsNCj4gK3N0YXRpYyB2b2lkIHBpcGVfY2xvc2UoaW50IHBpcGVbMl0pDQo+ICt7DQo+ICsJ aWYgKHBpcGVbMF0gIT0gLTEpDQo+ICsJCWNsb3NlKHBpcGVbMF0pOw0KPiArDQo+ICsJaWYgKHBp cGVbMV0gIT0gLTEpDQo+ICsJCWNsb3NlKHBpcGVbMV0pOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMg dWludDY0X3QgX193YWl0X3Rva2VuKGludCBwWzJdLCBjb25zdCB1aW50NjRfdCB0b2tlbiwgaW50 IHRpbWVvdXRfbXMpDQo+ICt7DQo+ICsJdWludDY0X3QgaW47DQo+ICsNCj4gKwlpbiA9IHBpcGVf cmVhZChwLCB0aW1lb3V0X21zKTsNCj4gKw0KPiArCWlndF9hc3NlcnRfZXEoaW4sIHRva2VuKTsN Cj4gKw0KPiArCXJldHVybiBwaXBlX3JlYWQocCwgdGltZW91dF9tcyk7DQo+ICt9DQo+ICsNCj4g K3N0YXRpYyB1aW50NjRfdCBjbGllbnRfd2FpdF90b2tlbihzdHJ1Y3QgeGVfZXVkZWJ1Z19jbGll bnQgKmMsDQo+ICsJCQkJIGNvbnN0IHVpbnQ2NF90IHRva2VuKQ0KPiArew0KPiArCXJldHVybiBf X3dhaXRfdG9rZW4oYy0+cF9pbiwgdG9rZW4sIGMtPnRpbWVvdXRfbXMpOw0KPiArfQ0KPiArDQo+ ICtzdGF0aWMgdWludDY0X3Qgd2FpdF9mcm9tX2NsaWVudChzdHJ1Y3QgeGVfZXVkZWJ1Z19jbGll bnQgKmMsDQo+ICsJCQkJIGNvbnN0IHVpbnQ2NF90IHRva2VuKQ0KPiArew0KPiArCXJldHVybiBf X3dhaXRfdG9rZW4oYy0+cF9vdXQsIHRva2VuLCBjLT50aW1lb3V0X21zKTsNCj4gK30NCj4gKw0K PiArc3RhdGljIHZvaWQgdG9rZW5fc2lnbmFsKGludCBwWzJdLCBjb25zdCB1aW50NjRfdCB0b2tl biwgY29uc3QgdWludDY0X3QgdmFsdWUpDQo+ICt7DQo+ICsJcGlwZV9zaWduYWwocCwgdG9rZW4p Ow0KPiArCXBpcGVfc2lnbmFsKHAsIHZhbHVlKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQg Y2xpZW50X3NpZ25hbChzdHJ1Y3QgeGVfZXVkZWJ1Z19jbGllbnQgKmMsDQo+ICsJCQkgIGNvbnN0 IHVpbnQ2NF90IHRva2VuLA0KPiArCQkJICBjb25zdCB1aW50NjRfdCB2YWx1ZSkNCj4gK3sNCj4g Kwl0b2tlbl9zaWduYWwoYy0+cF9vdXQsIHRva2VuLCB2YWx1ZSk7DQo+ICt9DQo+ICsNCj4gK3N0 YXRpYyBpbnQgX194ZV9ldWRlYnVnX2Nvbm5lY3QoaW50IGZkLCBwaWRfdCBwaWQsIHVpbnQzMl90 IGZsYWdzLCB1aW50NjRfdCBldmVudHMpDQo+ICt7DQo+ICsJc3RydWN0IGRybV94ZV9ldWRlYnVn X2Nvbm5lY3QgcGFyYW0gPSB7DQo+ICsJCS5waWQgPSBwaWQsDQo+ICsJCS5mbGFncyA9IGZsYWdz LA0KPiArCX07DQo+ICsJaW50IGRlYnVnZmQ7DQo+ICsNCj4gKwlkZWJ1Z2ZkID0gaWd0X2lvY3Rs KGZkLCBEUk1fSU9DVExfWEVfRVVERUJVR19DT05ORUNULCAmcGFyYW0pOw0KPiArDQo+ICsJaWYg KGRlYnVnZmQgPCAwKQ0KPiArCQlyZXR1cm4gLWVycm5vOw0KPiArDQo+ICsJcmV0dXJuIGRlYnVn ZmQ7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGV2ZW50X2xvZ193cml0ZV90b19mZChzdHJ1 Y3QgeGVfZXVkZWJ1Z19ldmVudF9sb2cgKmwsIGludCBmZCkNCj4gK3sNCj4gKwlpZ3RfYXNzZXJ0 X2VxKHdyaXRlKGZkLCAmbC0+aGVhZCwgc2l6ZW9mKGwtPmhlYWQpKSwNCj4gKwkJICAgICAgc2l6 ZW9mKGwtPmhlYWQpKTsNCj4gKw0KPiArCWlndF9hc3NlcnRfZXEod3JpdGUoZmQsIGwtPmxvZywg bC0+aGVhZCksIGwtPmhlYWQpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCByZWFkX2FsbChp bnQgZmQsIHZvaWQgKmJ1Ziwgc2l6ZV90IG5ieXRlcykNCj4gK3sNCj4gKwlzc2l6ZV90IHJlbWFp bmluZ19zaXplID0gbmJ5dGVzOw0KPiArCXNzaXplX3QgY3VycmVudF9zaXplID0gMDsNCj4gKwlz c2l6ZV90IHJlYWRfc2l6ZSA9IDA7DQo+ICsNCj4gKwlkbyB7DQo+ICsJCXJlYWRfc2l6ZSA9IHJl YWQoZmQsIGJ1ZiArIGN1cnJlbnRfc2l6ZSwgcmVtYWluaW5nX3NpemUpOw0KPiArCQlpZ3RfYXNz ZXJ0X2YocmVhZF9zaXplID49IDAsICJyZWFkIGZhaWxlZDogJXNcbiIsIHN0cmVycm9yKGVycm5v KSk7DQo+ICsNCj4gKwkJY3VycmVudF9zaXplICs9IHJlYWRfc2l6ZTsNCj4gKwkJcmVtYWluaW5n X3NpemUgLT0gcmVhZF9zaXplOw0KPiArCX0gd2hpbGUgKHJlbWFpbmluZ19zaXplID4gMCAmJiBy ZWFkX3NpemUgPiAwKTsNCj4gKw0KPiArCWlndF9hc3NlcnRfZXEoY3VycmVudF9zaXplLCBuYnl0 ZXMpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBldmVudF9sb2dfcmVhZF9mcm9tX2ZkKHN0 cnVjdCB4ZV9ldWRlYnVnX2V2ZW50X2xvZyAqbCwgaW50IGZkKQ0KPiArew0KPiArCXJlYWRfYWxs KGZkLCAmbC0+aGVhZCwgc2l6ZW9mKGwtPmhlYWQpKTsNCj4gKwlpZ3RfYXNzZXJ0X2x0KGwtPmhl YWQsIGwtPm1heF9zaXplKTsNCj4gKw0KPiArCXJlYWRfYWxsKGZkLCBsLT5sb2csIGwtPmhlYWQp Ow0KPiArfQ0KPiArDQo+ICt0eXBlZGVmIGludCAoKmNtcF9mbl90KShzdHJ1Y3QgZHJtX3hlX2V1 ZGVidWdfZXZlbnQgKiwgdm9pZCAqKTsNCj4gKw0KPiArc3RhdGljIHN0cnVjdCBkcm1feGVfZXVk ZWJ1Z19ldmVudCAqDQo+ICtldmVudF9jbXAoc3RydWN0IHhlX2V1ZGVidWdfZXZlbnRfbG9nICps LA0KPiArCSAgc3RydWN0IGRybV94ZV9ldWRlYnVnX2V2ZW50ICpjdXJyZW50LA0KPiArCSAgY21w X2ZuX3QgbWF0Y2gsDQo+ICsJICB2b2lkICpkYXRhKQ0KPiArew0KPiArCXN0cnVjdCBkcm1feGVf ZXVkZWJ1Z19ldmVudCAqZSA9IGN1cnJlbnQ7DQo+ICsNCj4gKwl4ZV9ldWRlYnVnX2Zvcl9lYWNo X2V2ZW50KGUsIGwpIHsNCj4gKwkJaWYgKG1hdGNoKGUsIGRhdGEpKQ0KPiArCQkJcmV0dXJuIGU7 DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJuIE5VTEw7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQg bWF0Y2hfdHlwZV9hbmRfZmxhZ3Moc3RydWN0IGRybV94ZV9ldWRlYnVnX2V2ZW50ICphLCB2b2lk ICpkYXRhKQ0KPiArew0KPiArCXN0cnVjdCBkcm1feGVfZXVkZWJ1Z19ldmVudCAqYiA9IGRhdGE7 DQo+ICsNCj4gKwlpZiAoYS0+dHlwZSA9PSBiLT50eXBlICYmDQo+ICsJICAgIGEtPmZsYWdzID09 IGItPmZsYWdzKQ0KPiArCQlyZXR1cm4gMTsNCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiAr DQo+ICtzdGF0aWMgaW50IG1hdGNoX2ZpZWxkcyhzdHJ1Y3QgZHJtX3hlX2V1ZGVidWdfZXZlbnQg KmEsIHZvaWQgKmRhdGEpDQo+ICt7DQo+ICsJc3RydWN0IGRybV94ZV9ldWRlYnVnX2V2ZW50ICpi ID0gZGF0YTsNCj4gKwlpbnQgcmV0ID0gMDsNCj4gKw0KPiArCXJldCA9IG1hdGNoX3R5cGVfYW5k X2ZsYWdzKGEsIGRhdGEpOw0KPiArCWlmICghcmV0KQ0KPiArCQlyZXR1cm4gcmV0Ow0KPiArDQo+ ICsJcmV0ID0gMDsNCj4gKw0KPiArCXN3aXRjaCAoYS0+dHlwZSkgew0KPiArCWNhc2UgRFJNX1hF X0VVREVCVUdfRVZFTlRfRVhFQ19RVUVVRTogew0KPiArCQlzdHJ1Y3QgZHJtX3hlX2V1ZGVidWdf ZXZlbnRfZXhlY19xdWV1ZSAqYWUgPSAodm9pZCAqKWE7DQo+ICsJCXN0cnVjdCBkcm1feGVfZXVk ZWJ1Z19ldmVudF9leGVjX3F1ZXVlICpiZSA9ICh2b2lkICopYjsNCj4gKw0KPiArCQlpZiAoYWUt PmVuZ2luZV9jbGFzcyA9PSBiZS0+ZW5naW5lX2NsYXNzICYmIGFlLT53aWR0aCA9PSBiZS0+d2lk dGgpDQo+ICsJCQlyZXQgPSAxOw0KPiArCQlicmVhazsNCj4gKwl9DQo+ICsJY2FzZSBEUk1fWEVf RVVERUJVR19FVkVOVF9WTV9CSU5EOiB7DQo+ICsJCXN0cnVjdCBkcm1feGVfZXVkZWJ1Z19ldmVu dF92bV9iaW5kICplYSA9ICh2b2lkICopYTsNCj4gKwkJc3RydWN0IGRybV94ZV9ldWRlYnVnX2V2 ZW50X3ZtX2JpbmQgKmViID0gKHZvaWQgKiliOw0KPiArDQo+ICsJCWlmIChlYS0+bnVtX2JpbmRz ID09IGViLT5udW1fYmluZHMpDQo+ICsJCQlyZXQgPSAxOw0KPiArCQlicmVhazsNCj4gKwl9DQo+ ICsJY2FzZSBEUk1fWEVfRVVERUJVR19FVkVOVF9WTV9CSU5EX09QOiB7DQo+ICsJCXN0cnVjdCBk cm1feGVfZXVkZWJ1Z19ldmVudF92bV9iaW5kX29wICplYSA9ICh2b2lkICopYTsNCj4gKwkJc3Ry dWN0IGRybV94ZV9ldWRlYnVnX2V2ZW50X3ZtX2JpbmRfb3AgKmViID0gKHZvaWQgKiliOw0KPiAr DQo+ICsJCWlmIChlYS0+YWRkciA9PSBlYi0+YWRkciAmJiBlYS0+cmFuZ2UgPT0gZWItPnJhbmdl ICYmDQo+ICsJCSAgICBlYS0+bnVtX2V4dGVuc2lvbnMgPT0gZWItPm51bV9leHRlbnNpb25zKQ0K PiArCQkJcmV0ID0gMTsNCj4gKwkJYnJlYWs7DQo+ICsJfQ0KPiArCWNhc2UgRFJNX1hFX0VVREVC VUdfRVZFTlRfVk1fQklORF9PUF9NRVRBREFUQTogew0KPiArCQlzdHJ1Y3QgZHJtX3hlX2V1ZGVi dWdfZXZlbnRfdm1fYmluZF9vcF9tZXRhZGF0YSAqZWEgPSAodm9pZCAqKWE7DQo+ICsJCXN0cnVj dCBkcm1feGVfZXVkZWJ1Z19ldmVudF92bV9iaW5kX29wX21ldGFkYXRhICplYiA9ICh2b2lkICop YjsNCj4gKw0KPiArCQlpZiAoZWEtPm1ldGFkYXRhX2hhbmRsZSA9PSBlYi0+bWV0YWRhdGFfaGFu ZGxlICYmDQo+ICsJCSAgICBlYS0+bWV0YWRhdGFfY29va2llID09IGViLT5tZXRhZGF0YV9jb29r aWUpDQo+ICsJCQlyZXQgPSAxOw0KPiArCQlicmVhazsNCj4gKwl9DQo+ICsNCj4gKwlkZWZhdWx0 Og0KPiArCQlyZXQgPSAxOw0KPiArCQlicmVhazsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gcmV0 Ow0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IG1hdGNoX2NsaWVudF9oYW5kbGUoc3RydWN0IGRy bV94ZV9ldWRlYnVnX2V2ZW50ICplLCB2b2lkICpkYXRhKQ0KPiArew0KPiArCXN0cnVjdCBtYXRj aF9kdG8gKm1kID0gKHZvaWQgKilkYXRhOw0KPiArCXVpbnQ2NF90ICpiaW5kX3NlcW5vID0gbWQt PmJpbmRfc2Vxbm87DQo+ICsJdWludDY0X3QgKmJpbmRfb3Bfc2Vxbm8gPSBtZC0+YmluZF9vcF9z ZXFubzsNCj4gKwl1aW50NjRfdCBoID0gbWQtPmNsaWVudF9oYW5kbGU7DQo+ICsNCj4gKwlpZiAo WEVfRVVERUJVR19FVkVOVF9JU19GSUxURVJFRChlLT50eXBlLCBtZC0+ZmlsdGVyKSkNCj4gKwkJ cmV0dXJuIDA7DQo+ICsNCj4gKwlzd2l0Y2ggKGUtPnR5cGUpIHsNCj4gKwljYXNlIERSTV9YRV9F VURFQlVHX0VWRU5UX09QRU46IHsNCj4gKwkJc3RydWN0IGRybV94ZV9ldWRlYnVnX2V2ZW50X2Ns aWVudCAqY2xpZW50ID0gKHN0cnVjdCBkcm1feGVfZXVkZWJ1Z19ldmVudF9jbGllbnQgKillOw0K PiArDQo+ICsJCWlmIChjbGllbnQtPmNsaWVudF9oYW5kbGUgPT0gaCkNCj4gKwkJCXJldHVybiAx Ow0KPiArCQlicmVhazsNCj4gKwl9DQo+ICsJY2FzZSBEUk1fWEVfRVVERUJVR19FVkVOVF9WTTog ew0KPiArCQlzdHJ1Y3QgZHJtX3hlX2V1ZGVidWdfZXZlbnRfdm0gKnZtID0gKHN0cnVjdCBkcm1f eGVfZXVkZWJ1Z19ldmVudF92bSAqKWU7DQo+ICsNCj4gKwkJaWYgKHZtLT5jbGllbnRfaGFuZGxl ID09IGgpDQo+ICsJCQlyZXR1cm4gMTsNCj4gKwkJYnJlYWs7DQo+ICsJfQ0KPiArCWNhc2UgRFJN X1hFX0VVREVCVUdfRVZFTlRfRVhFQ19RVUVVRTogew0KPiArCQlzdHJ1Y3QgZHJtX3hlX2V1ZGVi dWdfZXZlbnRfZXhlY19xdWV1ZSAqZWUgPSAoc3RydWN0IGRybV94ZV9ldWRlYnVnX2V2ZW50X2V4 ZWNfcXVldWUgKillOw0KPiArDQo+ICsJCWlmIChlZS0+Y2xpZW50X2hhbmRsZSA9PSBoKQ0KPiAr CQkJcmV0dXJuIDE7DQo+ICsJCWJyZWFrOw0KPiArCX0NCj4gKwljYXNlIERSTV9YRV9FVURFQlVH X0VWRU5UX1ZNX0JJTkQ6IHsNCj4gKwkJc3RydWN0IGRybV94ZV9ldWRlYnVnX2V2ZW50X3ZtX2Jp bmQgKmV2bWIgPSAoc3RydWN0IGRybV94ZV9ldWRlYnVnX2V2ZW50X3ZtX2JpbmQgKillOw0KPiAr DQo+ICsJCWlmIChldm1iLT5jbGllbnRfaGFuZGxlID09IGgpIHsNCj4gKwkJCSpiaW5kX3NlcW5v ID0gZXZtYi0+YmFzZS5zZXFubzsNCj4gKwkJCXJldHVybiAxOw0KPiArCQl9DQo+ICsJCWJyZWFr Ow0KPiArCX0NCj4gKwljYXNlIERSTV9YRV9FVURFQlVHX0VWRU5UX1ZNX0JJTkRfT1A6IHsNCj4g KwkJc3RydWN0IGRybV94ZV9ldWRlYnVnX2V2ZW50X3ZtX2JpbmRfb3AgKmVvID0gKHN0cnVjdCBk cm1feGVfZXVkZWJ1Z19ldmVudF92bV9iaW5kX29wICopZTsNCj4gKw0KPiArCQlpZiAoZW8tPnZt X2JpbmRfcmVmX3NlcW5vID09ICpiaW5kX3NlcW5vKSB7DQo+ICsJCQkqYmluZF9vcF9zZXFubyA9 IGVvLT5iYXNlLnNlcW5vOw0KPiArCQkJcmV0dXJuIDE7DQo+ICsJCX0NCj4gKwkJYnJlYWs7DQo+ ICsJfQ0KPiArCWNhc2UgRFJNX1hFX0VVREVCVUdfRVZFTlRfVk1fQklORF9VRkVOQ0U6IHsNCj4g KwkJc3RydWN0IGRybV94ZV9ldWRlYnVnX2V2ZW50X3ZtX2JpbmRfdWZlbmNlICplZiAgPSAoc3Ry dWN0IGRybV94ZV9ldWRlYnVnX2V2ZW50X3ZtX2JpbmRfdWZlbmNlICopZTsNCj4gKw0KPiArCQlp ZiAoZWYtPnZtX2JpbmRfcmVmX3NlcW5vID09ICpiaW5kX3NlcW5vKQ0KPiArCQkJcmV0dXJuIDE7 DQo+ICsNCj4gKwkJYnJlYWs7DQo+ICsJfQ0KPiArCWNhc2UgRFJNX1hFX0VVREVCVUdfRVZFTlRf TUVUQURBVEE6IHsNCj4gKwkJc3RydWN0IGRybV94ZV9ldWRlYnVnX2V2ZW50X21ldGFkYXRhICpl bSA9IChzdHJ1Y3QgZHJtX3hlX2V1ZGVidWdfZXZlbnRfbWV0YWRhdGEgKillOw0KPiArDQo+ICsJ CWlmIChlbS0+Y2xpZW50X2hhbmRsZSA9PSBoKQ0KPiArCQkJcmV0dXJuIDE7DQo+ICsJCWJyZWFr Ow0KPiArCX0NCj4gKwljYXNlIERSTV9YRV9FVURFQlVHX0VWRU5UX1ZNX0JJTkRfT1BfTUVUQURB VEE6IHsNCj4gKwkJc3RydWN0IGRybV94ZV9ldWRlYnVnX2V2ZW50X3ZtX2JpbmRfb3BfbWV0YWRh dGEgKmVvID0gKHN0cnVjdCBkcm1feGVfZXVkZWJ1Z19ldmVudF92bV9iaW5kX29wX21ldGFkYXRh ICopZTsNCj4gKw0KPiArCQlpZiAoZW8tPnZtX2JpbmRfb3BfcmVmX3NlcW5vID09ICpiaW5kX29w X3NlcW5vKQ0KPiArCQkJcmV0dXJuIDE7DQo+ICsJCWJyZWFrOw0KPiArCX0NCj4gKwlkZWZhdWx0 Og0KPiArCQlicmVhazsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiAr c3RhdGljIGludCBtYXRjaF9vcHBvc2l0ZV9yZXNvdXJjZShzdHJ1Y3QgZHJtX3hlX2V1ZGVidWdf ZXZlbnQgKmUsIHZvaWQgKmRhdGEpDQo+ICt7DQo+ICsNCj4gKwlzdHJ1Y3QgZHJtX3hlX2V1ZGVi dWdfZXZlbnQgKmQgPSAodm9pZCAqKWRhdGE7DQo+ICsJaW50IHJldDsNCj4gKw0KPiArCWQtPmZs YWdzIF49IERSTV9YRV9FVURFQlVHX0VWRU5UX0NSRUFURSB8IERSTV9YRV9FVURFQlVHX0VWRU5U X0RFU1RST1k7DQo+ICsJZC0+ZmxhZ3MgJj0gfihEUk1fWEVfRVVERUJVR19FVkVOVF9ORUVEX0FD Syk7DQo+ICsJcmV0ID0gbWF0Y2hfdHlwZV9hbmRfZmxhZ3MoZSwgZGF0YSk7DQo+ICsJZC0+Zmxh Z3MgXj0gRFJNX1hFX0VVREVCVUdfRVZFTlRfQ1JFQVRFIHwgRFJNX1hFX0VVREVCVUdfRVZFTlRf REVTVFJPWTsNCj4gKw0KPiArCWlmICghcmV0KQ0KPiArCQlyZXR1cm4gMDsNCj4gKw0KPiArCXN3 aXRjaCAoZS0+dHlwZSkgew0KPiArCWNhc2UgRFJNX1hFX0VVREVCVUdfRVZFTlRfT1BFTjogew0K PiArCQlzdHJ1Y3QgZHJtX3hlX2V1ZGVidWdfZXZlbnRfY2xpZW50ICpjbGllbnQgPSAoc3RydWN0 IGRybV94ZV9ldWRlYnVnX2V2ZW50X2NsaWVudCAqKWU7DQo+ICsJCXN0cnVjdCBkcm1feGVfZXVk ZWJ1Z19ldmVudF9jbGllbnQgKmZpbHRlciA9IChzdHJ1Y3QgZHJtX3hlX2V1ZGVidWdfZXZlbnRf Y2xpZW50ICopZGF0YTsNCj4gKw0KPiArCQlpZiAoY2xpZW50LT5jbGllbnRfaGFuZGxlID09IGZp bHRlci0+Y2xpZW50X2hhbmRsZSkNCj4gKwkJCXJldHVybiAxOw0KPiArCQlicmVhazsNCj4gKwl9 DQo+ICsJY2FzZSBEUk1fWEVfRVVERUJVR19FVkVOVF9WTTogew0KPiArCQlzdHJ1Y3QgZHJtX3hl X2V1ZGVidWdfZXZlbnRfdm0gKnZtID0gKHN0cnVjdCBkcm1feGVfZXVkZWJ1Z19ldmVudF92bSAq KWU7DQo+ICsJCXN0cnVjdCBkcm1feGVfZXVkZWJ1Z19ldmVudF92bSAqZmlsdGVyID0gKHN0cnVj dCBkcm1feGVfZXVkZWJ1Z19ldmVudF92bSAqKWRhdGE7DQo+ICsNCj4gKwkJaWYgKHZtLT52bV9o YW5kbGUgPT0gZmlsdGVyLT52bV9oYW5kbGUpDQo+ICsJCQlyZXR1cm4gMTsNCj4gKwkJYnJlYWs7 DQo+ICsJfQ0KPiArCWNhc2UgRFJNX1hFX0VVREVCVUdfRVZFTlRfRVhFQ19RVUVVRTogew0KPiAr CQlzdHJ1Y3QgZHJtX3hlX2V1ZGVidWdfZXZlbnRfZXhlY19xdWV1ZSAqZWUgPSAodm9pZCAqKWU7 DQo+ICsJCXN0cnVjdCBkcm1feGVfZXVkZWJ1Z19ldmVudF9leGVjX3F1ZXVlICpmaWx0ZXIgPSAo c3RydWN0IGRybV94ZV9ldWRlYnVnX2V2ZW50X2V4ZWNfcXVldWUgKilkYXRhOw0KPiArDQo+ICsJ CWlmIChlZS0+ZXhlY19xdWV1ZV9oYW5kbGUgPT0gZmlsdGVyLT5leGVjX3F1ZXVlX2hhbmRsZSkN Cj4gKwkJCXJldHVybiAxOw0KPiArCQlicmVhazsNCj4gKwl9DQo+ICsJY2FzZSBEUk1fWEVfRVVE RUJVR19FVkVOVF9WTV9CSU5EOiB7DQo+ICsJCXN0cnVjdCBkcm1feGVfZXVkZWJ1Z19ldmVudF92 bV9iaW5kICpldm1iID0gKHZvaWQgKillOw0KPiArCQlzdHJ1Y3QgZHJtX3hlX2V1ZGVidWdfZXZl bnRfdm1fYmluZCAqZmlsdGVyID0gKHN0cnVjdCBkcm1feGVfZXVkZWJ1Z19ldmVudF92bV9iaW5k ICopZGF0YTsNCj4gKw0KPiArCQlpZiAoZXZtYi0+dm1faGFuZGxlID09IGZpbHRlci0+dm1faGFu ZGxlICYmDQo+ICsJCSAgICBldm1iLT5udW1fYmluZHMgPT0gZmlsdGVyLT5udW1fYmluZHMpDQo+ ICsJCQlyZXR1cm4gMTsNCj4gKwkJYnJlYWs7DQo+ICsJfQ0KPiArCWNhc2UgRFJNX1hFX0VVREVC VUdfRVZFTlRfVk1fQklORF9PUDogew0KPiArCQlzdHJ1Y3QgZHJtX3hlX2V1ZGVidWdfZXZlbnRf dm1fYmluZF9vcCAqYXZtYiA9ICh2b2lkICopZTsNCj4gKwkJc3RydWN0IGRybV94ZV9ldWRlYnVn X2V2ZW50X3ZtX2JpbmRfb3AgKmZpbHRlciA9IChzdHJ1Y3QgZHJtX3hlX2V1ZGVidWdfZXZlbnRf dm1fYmluZF9vcCAqKWRhdGE7DQo+ICsNCj4gKwkJaWYgKGF2bWItPmFkZHIgPT0gZmlsdGVyLT5h ZGRyICYmDQo+ICsJCSAgICBhdm1iLT5yYW5nZSA9PSBmaWx0ZXItPnJhbmdlKQ0KPiArCQkJcmV0 dXJuIDE7DQo+ICsJCWJyZWFrOw0KPiArCX0NCj4gKwljYXNlIERSTV9YRV9FVURFQlVHX0VWRU5U X01FVEFEQVRBOiB7DQo+ICsJCXN0cnVjdCBkcm1feGVfZXVkZWJ1Z19ldmVudF9tZXRhZGF0YSAq ZW0gPSAodm9pZCAqKWU7DQo+ICsJCXN0cnVjdCBkcm1feGVfZXVkZWJ1Z19ldmVudF9tZXRhZGF0 YSAqZmlsdGVyID0gKHN0cnVjdCBkcm1feGVfZXVkZWJ1Z19ldmVudF9tZXRhZGF0YSAqKWRhdGE7 DQo+ICsNCj4gKwkJaWYgKGVtLT5tZXRhZGF0YV9oYW5kbGUgPT0gZmlsdGVyLT5tZXRhZGF0YV9o YW5kbGUpDQo+ICsJCQlyZXR1cm4gMTsNCj4gKwkJYnJlYWs7DQo+ICsJfQ0KPiArCWNhc2UgRFJN X1hFX0VVREVCVUdfRVZFTlRfVk1fQklORF9PUF9NRVRBREFUQTogew0KPiArCQlzdHJ1Y3QgZHJt X3hlX2V1ZGVidWdfZXZlbnRfdm1fYmluZF9vcF9tZXRhZGF0YSAqYXZtYiA9ICh2b2lkICopZTsN Cj4gKwkJc3RydWN0IGRybV94ZV9ldWRlYnVnX2V2ZW50X3ZtX2JpbmRfb3BfbWV0YWRhdGEgKmZp bHRlciA9IChzdHJ1Y3QgZHJtX3hlX2V1ZGVidWdfZXZlbnRfdm1fYmluZF9vcF9tZXRhZGF0YSAq KWRhdGE7DQo+ICsNCj4gKwkJaWYgKGF2bWItPm1ldGFkYXRhX2hhbmRsZSA9PSBmaWx0ZXItPm1l dGFkYXRhX2hhbmRsZSAmJg0KPiArCQkgICAgYXZtYi0+bWV0YWRhdGFfY29va2llID09IGZpbHRl ci0+bWV0YWRhdGFfY29va2llKQ0KPiArCQkJcmV0dXJuIDE7DQo+ICsJCWJyZWFrOw0KPiArCX0N Cj4gKw0KPiArCWRlZmF1bHQ6DQo+ICsJCWJyZWFrOw0KPiArCX0NCj4gKwlyZXR1cm4gMDsNCj4g K30NCj4gKw0KPiArc3RhdGljIGludCBtYXRjaF9mdWxsKHN0cnVjdCBkcm1feGVfZXVkZWJ1Z19l dmVudCAqZSwgdm9pZCAqZGF0YSkNCj4gK3sNCj4gKwlzdHJ1Y3Qgc2Vxbm9fbGlzdF9lbnRyeSAq c2w7DQo+ICsNCj4gKwlzdHJ1Y3QgbWF0Y2hfZHRvICptZCA9ICh2b2lkICopZGF0YTsNCj4gKwlp bnQgcmV0ID0gMDsNCj4gKw0KPiArCXJldCA9IG1hdGNoX2NsaWVudF9oYW5kbGUoZSwgbWQpOw0K PiArCWlmICghcmV0KQ0KPiArCQlyZXR1cm4gMDsNCj4gKw0KPiArCXJldCA9IG1hdGNoX2ZpZWxk cyhlLCBtZC0+dGFyZ2V0KTsNCj4gKwlpZiAoIXJldCkNCj4gKwkJcmV0dXJuIDA7DQo+ICsNCj4g KwlpZ3RfbGlzdF9mb3JfZWFjaF9lbnRyeShzbCwgbWQtPnNlcW5vX2xpc3QsIGxpbmspIHsNCj4g KwkJaWYgKHNsLT5zZXFubyA9PSBlLT5zZXFubykNCj4gKwkJCXJldHVybiAwOw0KPiArCX0NCj4g Kw0KPiArCXJldHVybiAxOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgc3RydWN0IGRybV94ZV9ldWRl YnVnX2V2ZW50ICoNCj4gK2V2ZW50X3R5cGVfbWF0Y2goc3RydWN0IHhlX2V1ZGVidWdfZXZlbnRf bG9nICpsLA0KPiArCQkgc3RydWN0IGRybV94ZV9ldWRlYnVnX2V2ZW50ICp0YXJnZXQsDQo+ICsJ CSBzdHJ1Y3QgZHJtX3hlX2V1ZGVidWdfZXZlbnQgKmN1cnJlbnQpDQo+ICt7DQo+ICsJcmV0dXJu IGV2ZW50X2NtcChsLCBjdXJyZW50LCBtYXRjaF90eXBlX2FuZF9mbGFncywgdGFyZ2V0KTsNCj4g K30NCj4gKw0KPiArc3RhdGljIHN0cnVjdCBkcm1feGVfZXVkZWJ1Z19ldmVudCAqDQo+ICtjbGll bnRfbWF0Y2goc3RydWN0IHhlX2V1ZGVidWdfZXZlbnRfbG9nICpsLA0KPiArCSAgICAgdWludDY0 X3QgY2xpZW50X2hhbmRsZSwNCj4gKwkgICAgIHN0cnVjdCBkcm1feGVfZXVkZWJ1Z19ldmVudCAq Y3VycmVudCwNCj4gKwkgICAgIHVpbnQzMl90IGZpbHRlciwNCj4gKwkgICAgIHVpbnQ2NF90ICpi aW5kX3NlcW5vLA0KPiArCSAgICAgdWludDY0X3QgKmJpbmRfb3Bfc2Vxbm8pDQo+ICt7DQo+ICsJ c3RydWN0IG1hdGNoX2R0byBtZCA9IHsNCj4gKwkJLmNsaWVudF9oYW5kbGUgPSBjbGllbnRfaGFu ZGxlLA0KPiArCQkuZmlsdGVyID0gZmlsdGVyLA0KPiArCQkuYmluZF9zZXFubyA9IGJpbmRfc2Vx bm8sDQo+ICsJCS5iaW5kX29wX3NlcW5vID0gYmluZF9vcF9zZXFubywNCj4gKwl9Ow0KPiArDQo+ ICsJcmV0dXJuIGV2ZW50X2NtcChsLCBjdXJyZW50LCBtYXRjaF9jbGllbnRfaGFuZGxlLCAmbWQp Ow0KPiArfQ0KPiArDQo+ICtzdGF0aWMgc3RydWN0IGRybV94ZV9ldWRlYnVnX2V2ZW50ICoNCj4g K29wcG9zaXRlX2V2ZW50X21hdGNoKHN0cnVjdCB4ZV9ldWRlYnVnX2V2ZW50X2xvZyAqbCwNCj4g KwkJICAgIHN0cnVjdCBkcm1feGVfZXVkZWJ1Z19ldmVudCAqdGFyZ2V0LA0KPiArCQkgICAgc3Ry dWN0IGRybV94ZV9ldWRlYnVnX2V2ZW50ICpjdXJyZW50KQ0KPiArew0KPiArCXJldHVybiBldmVu dF9jbXAobCwgY3VycmVudCwgbWF0Y2hfb3Bwb3NpdGVfcmVzb3VyY2UsIHRhcmdldCk7DQo+ICt9 DQo+ICsNCj4gK3N0YXRpYyBzdHJ1Y3QgZHJtX3hlX2V1ZGVidWdfZXZlbnQgKg0KPiArZXZlbnRf bWF0Y2goc3RydWN0IHhlX2V1ZGVidWdfZXZlbnRfbG9nICpsLA0KPiArCSAgICBzdHJ1Y3QgZHJt X3hlX2V1ZGVidWdfZXZlbnQgKnRhcmdldCwNCj4gKwkgICAgdWludDY0X3QgY2xpZW50X2hhbmRs ZSwNCj4gKwkgICAgc3RydWN0IGlndF9saXN0X2hlYWQgKnNlcW5vX2xpc3QsDQo+ICsJICAgIHVp bnQ2NF90ICpiaW5kX3NlcW5vLA0KPiArCSAgICB1aW50NjRfdCAqYmluZF9vcF9zZXFubykNCj4g K3sNCj4gKwlzdHJ1Y3QgbWF0Y2hfZHRvIG1kID0gew0KPiArCQkudGFyZ2V0ID0gdGFyZ2V0LA0K PiArCQkuY2xpZW50X2hhbmRsZSA9IGNsaWVudF9oYW5kbGUsDQo+ICsJCS5zZXFub19saXN0ID0g c2Vxbm9fbGlzdCwNCj4gKwkJLmJpbmRfc2Vxbm8gPSBiaW5kX3NlcW5vLA0KPiArCQkuYmluZF9v cF9zZXFubyA9IGJpbmRfb3Bfc2Vxbm8sDQo+ICsJfTsNCj4gKw0KPiArCXJldHVybiBldmVudF9j bXAobCwgTlVMTCwgbWF0Y2hfZnVsbCwgJm1kKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQg Y29tcGFyZV9jbGllbnQoc3RydWN0IHhlX2V1ZGVidWdfZXZlbnRfbG9nICpjLCBzdHJ1Y3QgZHJt X3hlX2V1ZGVidWdfZXZlbnQgKl9jZSwNCj4gKwkJCSAgIHN0cnVjdCB4ZV9ldWRlYnVnX2V2ZW50 X2xvZyAqZCwgc3RydWN0IGRybV94ZV9ldWRlYnVnX2V2ZW50ICpfZGUsDQo+ICsJCQkgICB1aW50 MzJfdCBmaWx0ZXIpDQo+ICt7DQo+ICsJc3RydWN0IGRybV94ZV9ldWRlYnVnX2V2ZW50X2NsaWVu dCAqY2UgPSAodm9pZCAqKV9jZTsNCj4gKwlzdHJ1Y3QgZHJtX3hlX2V1ZGVidWdfZXZlbnRfY2xp ZW50ICpkZSA9ICh2b2lkICopX2RlOw0KPiArCXVpbnQ2NF90IGNicyA9IDAsIGRicyA9IDAsIGNi c28gPSAwLCBkYnNvID0gMDsNCj4gKw0KPiArCXN0cnVjdCBpZ3RfbGlzdF9oZWFkIG1hdGNoZWRf c2Vxbm9fbGlzdDsNCj4gKwlzdHJ1Y3QgZHJtX3hlX2V1ZGVidWdfZXZlbnQgKmhjLCAqaGQ7DQo+ ICsJc3RydWN0IHNlcW5vX2xpc3RfZW50cnkgKmVudHJ5LCAqdG1wOw0KPiArDQo+ICsJaWd0X2Fz c2VydChjZSk7DQo+ICsJaWd0X2Fzc2VydChkZSk7DQo+ICsNCj4gKwlpZ3RfZGVidWcoImNsaWVu dDogJWxsdSAtPiAlbGx1XG4iLCBjZS0+Y2xpZW50X2hhbmRsZSwgZGUtPmNsaWVudF9oYW5kbGUp Ow0KPiArDQo+ICsJaGMgPSBOVUxMOw0KPiArCWhkID0gTlVMTDsNCj4gKwlJR1RfSU5JVF9MSVNU X0hFQUQoJm1hdGNoZWRfc2Vxbm9fbGlzdCk7DQo+ICsNCj4gKwlkbyB7DQo+ICsJCWhjID0gY2xp ZW50X21hdGNoKGMsIGNlLT5jbGllbnRfaGFuZGxlLCBoYywgZmlsdGVyLCAmY2JzLCAmY2Jzbyk7 DQo+ICsJCWlmICghaGMpDQo+ICsJCQlicmVhazsNCj4gKw0KPiArCQloZCA9IGV2ZW50X21hdGNo KGQsIGhjLCBkZS0+Y2xpZW50X2hhbmRsZSwgJm1hdGNoZWRfc2Vxbm9fbGlzdCwgJmRicywgJmRi c28pOw0KPiArDQo+ICsJCWlndF9hc3NlcnRfZihoZCwgIiVzICglbGx1KTogbm8gbWF0Y2hpbmcg ZXZlbnQgdHlwZSAldSBmb3VuZCBmb3IgY2xpZW50ICVsbHVcbiIsDQo+ICsJCQkgICAgIGMtPm5h bWUsDQo+ICsJCQkgICAgIGhjLT5zZXFubywNCj4gKwkJCSAgICAgaGMtPnR5cGUsDQo+ICsJCQkg ICAgIGNlLT5jbGllbnRfaGFuZGxlKTsNCj4gKw0KPiArCQlpZ3RfZGVidWcoImNvbXBhcmluZyAl cyAlbGx1IHZzICVzICVsbHVcbiIsDQo+ICsJCQkgIGMtPm5hbWUsIGhjLT5zZXFubywgZC0+bmFt ZSwgaGQtPnNlcW5vKTsNCj4gKw0KPiArCQkvKg0KPiArCQkgKiBTdG9yZSB0aGUgc2Vxbm8gb2Yg dGhlIGV2ZW50IHRoYXQgd2FzIG1hdGNoZWQgYWJvdmUsDQo+ICsJCSAqIGluc2lkZSAnbWF0Y2hl ZF9zZXFub19saXN0JywgdG8gYXZvaWQgaXQgZ2V0dGluZyBtYXRjaGVkDQo+ICsJCSAqIGJ5IHN1 YnNlcXVlbnQgJ2V2ZW50X21hdGNoJyBjYWxscy4NCj4gKwkJICovDQo+ICsJCWVudHJ5ID0gbWFs bG9jKHNpemVvZigqZW50cnkpKTsNCj4gKwkJZW50cnktPnNlcW5vID0gaGQtPnNlcW5vOw0KPiAr CQlpZ3RfbGlzdF9hZGQoJmVudHJ5LT5saW5rLCAmbWF0Y2hlZF9zZXFub19saXN0KTsNCj4gKwl9 IHdoaWxlIChoYyk7DQo+ICsNCj4gKwlpZ3RfbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVudHJ5 LCB0bXAsICZtYXRjaGVkX3NlcW5vX2xpc3QsIGxpbmspDQo+ICsJCWZyZWUoZW50cnkpOw0KPiAr fQ0KPiArDQo+ICsvKioNCj4gKyAqIHhlX2V1ZGVidWdfZXZlbnRfbG9nX2ZpbmRfc2Vxbm86DQo+ ICsgKiBAbDogZXZlbnQgbG9nIHBvaW50ZXINCj4gKyAqIEBzZXFubzogc2Vxbm8gb2YgZXZlbnQg dG8gYmUgZm91bmQNCj4gKyAqDQo+ICsgKiBGaW5kcyB0aGUgZXZlbnQgd2l0aCBnaXZlbiBzZXFu byBpbiB0aGUgZXZlbnQgbG9nLg0KPiArICoNCj4gKyAqIFJldHVybnM6IHBvaW50ZXIgdG8gdGhl IGV2ZW50IHdpdGggZ2l2ZW4gc2Vxbm8gd2l0aGluIEBsIG9yIE5VTEwgc2Vxbm8gaXMNCj4gKyAq IG5vdCBwcmVzZW50Lg0KPiArICovDQo+ICtzdHJ1Y3QgZHJtX3hlX2V1ZGVidWdfZXZlbnQgKg0K PiAreGVfZXVkZWJ1Z19ldmVudF9sb2dfZmluZF9zZXFubyhzdHJ1Y3QgeGVfZXVkZWJ1Z19ldmVu dF9sb2cgKmwsIHVpbnQ2NF90IHNlcW5vKQ0KPiArew0KPiArCXN0cnVjdCBkcm1feGVfZXVkZWJ1 Z19ldmVudCAqZSA9IE5VTEwsICpmb3VuZCA9IE5VTEw7DQo+ICsNCj4gKwlpZ3RfYXNzZXJ0X25l cShzZXFubywgMCk7DQo+ICsJLyoNCj4gKwkgKiBUcnkgdG8gY2F0Y2ggaWYgc2Vxbm8gaXMgY29y cnVwdGVkIGFuZCBwcmV2ZW50IHRvbyBsb25nIHRlc3RzLA0KPiArCSAqIGFzIG91ciBwb3N0IHBy b2Nlc3Npbmcgb2YgZXZlbnRzIGlzIG5vdCBvcHRpbWl6ZWQuDQo+ICsJICovDQo+ICsJaWd0X2Fz c2VydF9sdChzZXFubywgMTAgKiAxMDAwICogMTAwMCk7DQo+ICsNCj4gKwl4ZV9ldWRlYnVnX2Zv cl9lYWNoX2V2ZW50KGUsIGwpIHsNCj4gKwkJaWYgKGUtPnNlcW5vID09IHNlcW5vKSB7DQo+ICsJ CQlpZiAoZm91bmQpIHsNCj4gKwkJCQlpZ3Rfd2FybigiRm91bmQgbXVsdGlwbGUgZXZlbnRzIHdp dGggdGhlIHNhbWUgc2Vxbm8gJWx1XG4iLCBzZXFubyk7DQo+ICsJCQkJeGVfZXVkZWJ1Z19ldmVu dF9sb2dfcHJpbnQobCwgZmFsc2UpOw0KPiArCQkJCWlndF9hc3NlcnQoIWZvdW5kKTsNCj4gKwkJ CX0NCj4gKwkJCWZvdW5kID0gZTsNCj4gKwkJfQ0KPiArCX0NCj4gKw0KPiArCXJldHVybiBmb3Vu ZDsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgZXZlbnRfbG9nX3NvcnQoc3RydWN0IHhlX2V1 ZGVidWdfZXZlbnRfbG9nICpsKQ0KPiArew0KPiArCXN0cnVjdCB4ZV9ldWRlYnVnX2V2ZW50X2xv ZyAqdG1wOw0KPiArCXN0cnVjdCBkcm1feGVfZXVkZWJ1Z19ldmVudCAqZSA9IE5VTEw7DQo+ICsJ dWludDY0X3QgZmlyc3Rfc2Vxbm8gPSAwOw0KPiArCXVpbnQ2NF90IGxhc3Rfc2Vxbm8gPSAwOw0K PiArCXVpbnQ2NF90IGV2ZW50cyA9IDAsIGFkZGVkID0gMDsNCj4gKwl1aW50NjRfdCBpOw0KPiAr DQo+ICsJeGVfZXVkZWJ1Z19mb3JfZWFjaF9ldmVudChlLCBsKSB7DQo+ICsJCWlmIChlLT5zZXFu byA+IGxhc3Rfc2Vxbm8pDQo+ICsJCQlsYXN0X3NlcW5vID0gZS0+c2Vxbm87DQo+ICsNCj4gKwkJ aWYgKGUtPnNlcW5vIDwgZmlyc3Rfc2Vxbm8pDQo+ICsJCQlmaXJzdF9zZXFubyA9IGUtPnNlcW5v Ow0KPiArDQo+ICsJCWV2ZW50cysrOw0KPiArCX0NCj4gKw0KPiArCXRtcCA9IHhlX2V1ZGVidWdf ZXZlbnRfbG9nX2NyZWF0ZSgidG1wIiwgbC0+bWF4X3NpemUpOw0KPiArDQo+ICsJZm9yIChpID0g MTsgaSA8PSBsYXN0X3NlcW5vOyBpKyspIHsNCj4gKwkJZSA9IHhlX2V1ZGVidWdfZXZlbnRfbG9n X2ZpbmRfc2Vxbm8obCwgaSk7DQo+ICsJCWlmIChlKSB7DQo+ICsJCQl4ZV9ldWRlYnVnX2V2ZW50 X2xvZ193cml0ZSh0bXAsIGUpOw0KPiArCQkJYWRkZWQrKzsNCj4gKwkJfQ0KPiArCX0NCj4gKw0K PiArCWlndF9hc3NlcnRfZXEoZXZlbnRzLCBhZGRlZCk7DQo+ICsJaWd0X2Fzc2VydF9lcSh0bXAt PmhlYWQsIGwtPmhlYWQpOw0KPiArDQo+ICsJbWVtY3B5KGwtPmxvZywgdG1wLT5sb2csIHRtcC0+ aGVhZCk7DQo+ICsNCj4gKwl4ZV9ldWRlYnVnX2V2ZW50X2xvZ19kZXN0cm95KHRtcCk7DQo+ICt9 DQo+ICsNCj4gKy8qKg0KPiArICogeGVfZXVkZWJ1Z19jb25uZWN0Og0KPiArICogQGZkOiBYZSBm aWxlIGRlc2NyaXB0b3INCj4gKyAqIEBwaWQ6IGNsaWVudCBQSUQNCj4gKyAqIEBmbGFnczogY29u bmVjdGlvbiBmbGFncw0KPiArICoNCj4gKyAqIE9wZW5zIHRoZSB4ZSBldSBkZWJ1Z2dlciBjb25u ZWN0aW9uIHRvIHRoZSBwcm9jZXNzIGRlc2NyaWJlZCBieSBAcGlkDQo+ICsgKg0KPiArICogUmV0 dXJuczogMCBpZiB0aGUgZGVidWdnZXIgd2FzIHN1Y2Nlc3NmdWxseSBhdHRhY2hlZCwgLWVycm5v IG90aGVyd2lzZS4NCj4gKyAqLw0KPiAraW50IHhlX2V1ZGVidWdfY29ubmVjdChpbnQgZmQsIHBp ZF90IHBpZCwgdWludDMyX3QgZmxhZ3MpDQo+ICt7DQo+ICsJaW50IHJldDsNCj4gKwl1aW50NjRf dCBldmVudHMgPSAwOyAvKiBldmVudHMgZmlsdGVyaW5nIG5vdCBzdXBwb3J0ZWQgeWV0ISAqLw0K PiArDQo+ICsJcmV0ID0gX194ZV9ldWRlYnVnX2Nvbm5lY3QoZmQsIHBpZCwgZmxhZ3MsIGV2ZW50 cyk7DQo+ICsNCj4gKwlyZXR1cm4gcmV0Ow0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAqIHhlX2V1 ZGVidWdfZXZlbnRfbG9nX2NyZWF0ZToNCj4gKyAqIEBuYW1lOiBldmVudCBsb2cgaWRlbnRpZmll cg0KPiArICogQG1heF9zaXplOiBtYXhpbXVtIHNpemUgb2YgY3JlYXRlZCBsb2cNCj4gKyAqDQo+ ICsgKiBGdW5jdGlvbiBjcmVhdGVzIGFuIEV1IERlYnVnZ2VyIGV2ZW50IGxvZyB3aXRoIHNpemUg ZXF1YWwgdG8gQG1heF9zaXplLg0KPiArICoNCj4gKyAqIFJldHVybnM6IHBvaW50ZXIgdG8ganVz dCBjcmVhdGVkIGxvZw0KPiArICovDQo+ICsjZGVmaW5lIE1BWF9FVkVOVF9MT0dfU0laRSAoMzIg KiAxMDI0ICogMTAyNCkNCj4gK3N0cnVjdCB4ZV9ldWRlYnVnX2V2ZW50X2xvZyAqeGVfZXVkZWJ1 Z19ldmVudF9sb2dfY3JlYXRlKGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludCBtYXhfc2l6 ZSkNCj4gK3sNCj4gKwlzdHJ1Y3QgeGVfZXVkZWJ1Z19ldmVudF9sb2cgKmw7DQo+ICsNCj4gKwls ID0gY2FsbG9jKDEsIHNpemVvZigqbCkpOw0KPiArCWlndF9hc3NlcnQobCk7DQo+ICsJbC0+bG9n ID0gY2FsbG9jKDEsIG1heF9zaXplKTsNCj4gKwlpZ3RfYXNzZXJ0KGwtPmxvZyk7DQo+ICsJbC0+ bWF4X3NpemUgPSBtYXhfc2l6ZTsNCj4gKwlzdHJuY3B5KGwtPm5hbWUsIG5hbWUsIHNpemVvZihs LT5uYW1lKSAtIDEpOw0KPiArCXB0aHJlYWRfbXV0ZXhfaW5pdCgmbC0+bG9jaywgTlVMTCk7DQo+ ICsNCj4gKwlyZXR1cm4gbDsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiB4ZV9ldWRlYnVnX2V2 ZW50X2xvZ19kZXN0cm95Og0KPiArICogQGw6IGV2ZW50IGxvZyBwb2ludGVyDQo+ICsgKg0KPiAr ICogRnJlZXMgZ2l2ZW4gZXZlbnQgbG9nIEBsLg0KPiArICovDQo+ICt2b2lkIHhlX2V1ZGVidWdf ZXZlbnRfbG9nX2Rlc3Ryb3koc3RydWN0IHhlX2V1ZGVidWdfZXZlbnRfbG9nICpsKQ0KPiArew0K PiArCXB0aHJlYWRfbXV0ZXhfZGVzdHJveSgmbC0+bG9jayk7DQo+ICsJZnJlZShsLT5sb2cpOw0K PiArCWZyZWUobCk7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICogeGVfZXVkZWJ1Z19ldmVudF9s b2dfd3JpdGU6DQo+ICsgKiBAbDogZXZlbnQgbG9nIHBvaW50ZXINCj4gKyAqIEBlOiBldmVudCB0 byBiZSB3cml0dGVuIHRvIGV2ZW50IGxvZw0KPiArICoNCj4gKyAqIFdyaXRlcyBldmVudCBAZSB0 byB0aGUgZXZlbnQgbG9nLCB0aHJlYWQtc2FmZS4NCj4gKyAqLw0KPiArdm9pZCB4ZV9ldWRlYnVn X2V2ZW50X2xvZ193cml0ZShzdHJ1Y3QgeGVfZXVkZWJ1Z19ldmVudF9sb2cgKmwsIHN0cnVjdCBk cm1feGVfZXVkZWJ1Z19ldmVudCAqZSkNCj4gK3sNCj4gKwlpZ3RfYXNzZXJ0KGUtPnNlcW5vKTsN Cj4gKwkvKg0KPiArCSAqIFRyeSB0byBjYXRjaCBpZiBzZXFubyBpcyBjb3JydXB0ZWQgYW5kIHBy ZXZlbnQgdG9vIGxvbmcgdGVzdHMsDQo+ICsJICogYXMgb3VyIHBvc3QgcHJvY2Vzc2luZyBvZiBl dmVudHMgaXMgbm90IG9wdGltaXplZC4NCj4gKwkgKi8NCj4gKwlpZ3RfYXNzZXJ0X2x0KGUtPnNl cW5vLCAxMCAqIDEwMDAgKiAxMDAwKTsNCj4gKw0KPiArCXB0aHJlYWRfbXV0ZXhfbG9jaygmbC0+ bG9jayk7DQo+ICsJaWd0X2Fzc2VydF9sdChsLT5oZWFkICsgZS0+bGVuLCBsLT5tYXhfc2l6ZSk7 DQo+ICsJbWVtY3B5KGwtPmxvZyArIGwtPmhlYWQsIGUsIGUtPmxlbik7DQo+ICsJbC0+aGVhZCAr PSBlLT5sZW47DQo+ICsNCj4gKyNpZmRlZiBERUJVR19MT0cNCj4gKwlpZ3RfaW5mbygiJXM6IHdy b3RlICV1IGJ5dGVzIHRvIGV2ZW50bG9nLCBmcmVlICV1IGJ5dGVzXG4iLA0KPiArCQkgbC0+bmFt ZSwgZS0+bGVuLCBsLT5tYXhfc2l6ZSAtIGwtPmhlYWQpOw0KPiArI2VuZGlmDQo+ICsJcHRocmVh ZF9tdXRleF91bmxvY2soJmwtPmxvY2spOw0KSSdtIG5vdCBmYW4gb2YgI2lmZGVmIGRlYnVnIGxv Z3MuIEFzIHRoZSBldmVudCBsb2cgaGFzIGJlZW4gcHJvdmVuIGluIGFjdGlvbiwNCmNhbiB3ZSBq dXN0IHN0cmlwIGl0IG91dD8gDQo8Y3V0Pg0KDQpSZWdhcmRzLA0KRG9taW5paw0KDQo=