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 6C3C3D41C11 for ; Wed, 13 Nov 2024 07:53:37 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 2493210E352; Wed, 13 Nov 2024 07:53:37 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=intel.com header.i=@intel.com header.b="M1r5DG+8"; dkim-atps=neutral Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.9]) by gabe.freedesktop.org (Postfix) with ESMTPS id 7C61110E352 for ; Wed, 13 Nov 2024 07:53:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1731484415; x=1763020415; h=from:to:subject:date:message-id:references:in-reply-to: content-id:content-transfer-encoding:mime-version; bh=xigYnhWOv/xQe6fEI3ODxpjULnevhuEvRNXlZ/87Rx4=; b=M1r5DG+8vO02EBf/5QPoM3sz9/O2WLzc6ZdgrZvE6yJwGbJU+w8x53VG yR95tTKDe8LU4+N4h8p/dcKoFwQ0+29JqmGvn0wepkd7gNFPoEHWS1+m4 vO09JCHIkKtAm6CQCE0f93+b7bRp5ZGW7R7eTv7ILcVLs7w6XquaFwSMm klJtXKHnYgeoXVRedzntPvB/PaysF/3jDmXkn6lBOL3IzOFQLBnweduhm LF4dnL8mst31wetS2nql4cSxy62WLVgdR3KyzucGFwOFel7bRt8ZwVxzy wW3Ia2d2VyceroGv3LsDhY5NujZHH1OzkboFTPAipliUJbCIU2XU8PRtW g==; X-CSE-ConnectionGUID: REiL8/teRIuOlqGiweHVgg== X-CSE-MsgGUID: rYp0rVYCRK2UjWS3D+uAiQ== X-IronPort-AV: E=McAfee;i="6700,10204,11254"; a="41978373" X-IronPort-AV: E=Sophos;i="6.12,150,1728975600"; d="scan'208";a="41978373" Received: from fmviesa010.fm.intel.com ([10.60.135.150]) by fmvoesa103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Nov 2024 23:48:45 -0800 X-CSE-ConnectionGUID: yPkl2GHPRF6AbLosa4jlNA== X-CSE-MsgGUID: MN6gxWsFQyePWgFvcp/tBw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.12,150,1728975600"; d="scan'208";a="88211664" Received: from fmsmsx603.amr.corp.intel.com ([10.18.126.83]) by fmviesa010.fm.intel.com with ESMTP/TLS/AES256-GCM-SHA384; 12 Nov 2024 23:48:45 -0800 Received: from fmsmsx603.amr.corp.intel.com (10.18.126.83) by fmsmsx603.amr.corp.intel.com (10.18.126.83) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Tue, 12 Nov 2024 23:48:45 -0800 Received: from fmsedg601.ED.cps.intel.com (10.1.192.135) by fmsmsx603.amr.corp.intel.com (10.18.126.83) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39 via Frontend Transport; Tue, 12 Nov 2024 23:48:45 -0800 Received: from NAM04-DM6-obe.outbound.protection.outlook.com (104.47.73.40) 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.2507.39; Tue, 12 Nov 2024 23:48:44 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Jh9VeTnMQaRd4MXQAhZiA+lgorgDHF8SPZAn+3P04zDow4QuPScM48tOew9rlDemtJTBcP3NG3lLLK4myppFA5wLFMECa7kYB9Y8d7G7rDyoNAc9zIlt/52jd/6LS/+aFUowthY7Qcgw+h0JmsXSNUg0ATeKrzRlH1atCui1CINv8WTdEYwav1m6bR9cQc7XAdZq5dCloKjooXIwiJHAd4VwA371s7f1VIsmUoR+MP0Bybn/Q511AJOTsQXuPttqvlxB4WxM2mvJtSWlq2jS82jLCrdcecanFPv3CxcGHkp2ptmM+hTRot+0QS69Ad3XMnXJZORYmhjlf1+1e+j1Iw== 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=xigYnhWOv/xQe6fEI3ODxpjULnevhuEvRNXlZ/87Rx4=; b=pMzNW3kq97lxJTkPgOxuK3VT1LN3ZWk8WA44yKJRjnAlxJqMxV3blf4j7s+NJlw17/J+lLkoI+eoc5e3X8s3pvJGg5BIl7oPVlB2nfkaGAkKyq90m0i7y8odhR9vk9kt6WyfYsuEko12Of+ozuQH/tN+Oqzq1puWXH/HEUOAf+RdApr8vLqe/LtCxobHIDUlRzTgAT+0SKtKL8cCaX+hCeT3hhBe/6nzbnhUOgGRJTN8c4YDNVyWWsAN7t92VRmK+fg6vV5hPrQi2XmVengTV8B+xR3zE/2I/5snTra9wXUnqiOZMyr03/VBXdu6w0VnU5gNzhYFLdOfn0yIIIyBkQ== 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 DM8PR11MB5751.namprd11.prod.outlook.com (2603:10b6:8:12::16) by BY1PR11MB8128.namprd11.prod.outlook.com (2603:10b6:a03:52c::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8137.28; Wed, 13 Nov 2024 07:48:42 +0000 Received: from DM8PR11MB5751.namprd11.prod.outlook.com ([fe80::4046:430d:f16c:b842]) by DM8PR11MB5751.namprd11.prod.outlook.com ([fe80::4046:430d:f16c:b842%6]) with mapi id 15.20.8137.027; Wed, 13 Nov 2024 07:48:42 +0000 From: "Teres Alexis, Alan Previn" To: "Dong, Zhanjun" , "igt-dev@lists.freedesktop.org" Subject: Re: [PATCH i-g-t v4 1/1] tests/intel/xe_exec_capture: Add xe_exec_capture test Thread-Topic: [PATCH i-g-t v4 1/1] tests/intel/xe_exec_capture: Add xe_exec_capture test Thread-Index: AQHbJKAwRZeOQB+rLUSti19LYcdEBbK096gA Date: Wed, 13 Nov 2024 07:48:42 +0000 Message-ID: References: <20241022163324.383145-1-zhanjun.dong@intel.com> <20241022163324.383145-2-zhanjun.dong@intel.com> In-Reply-To: <20241022163324.383145-2-zhanjun.dong@intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Evolution 3.44.4-0ubuntu2 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: DM8PR11MB5751:EE_|BY1PR11MB8128:EE_ x-ms-office365-filtering-correlation-id: b14c1c79-2681-4822-2660-08dd03b7982a x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|376014|366016|1800799024|38070700018; x-microsoft-antispam-message-info: =?utf-8?B?TDlKbm44Mlpqa01MODNtMExQZEx1dXpKRE5mK2Y5V0VTWTJibWhNTjJXck5I?= =?utf-8?B?MldIRDdFQVhzRVl3dm85eU5Qa2wrdVpkZHh1WkQ2d0IxT0ZZS09qN1Iwd3JB?= =?utf-8?B?UmRhRjVsZk1CK1hGZ3RreU8yd1piQ2ZsbUtRRkgxTlVUbWd0L0xDbEdHcHps?= =?utf-8?B?Unp1MEJUWWQyZHY0bFhMc2tKVXZNc09rZUFIZXdMY0NZT09IT3Z6UHNMbU1a?= =?utf-8?B?SnlxMWxzdnVFK25mOTNDQXVkWWtPWjBNQXVJVW5HNC9yZ3VGUi9MUDJPeks0?= =?utf-8?B?eUh2eGRIT3J4b0RUTHFuVFhTTDVzUFFlOUxjRGdPaE9VZWR5MmkxM3pSVVZ6?= =?utf-8?B?bTRybml4L3A4SGN3NzdsM0F3eFJaSTM2NDRGeFVoS2FXNXFNOU1kdW5xVmdD?= =?utf-8?B?eVJ1ZFM4am9zUUNMaE9peFF4QXMrRWszMEZYTG5GbHpzcTl0UTlhN2JYVWxr?= =?utf-8?B?T2N1Q3pUdFJBblpnN01wNmVWZXFVMCtwZ2pHMGNyZzhKc0oyRTMyMVkxTlo3?= =?utf-8?B?V2VEbURDL2J2QmFLY3dBTmhzWHhld1pPM1kxY3dQeG9vZDV0aFNHb3A2NU12?= =?utf-8?B?ajlTWC9GSkllekZGalZaSGxhYnlWT0V0VEdPNm9GSU8zZ1lseUFCeWdUeWZL?= =?utf-8?B?cDdxellKbnQ5bHNzazRtcWdUeHd0N2dNaElZV08zNHcrUUZpbU1CVFVCRFlX?= =?utf-8?B?dmVKZXRDdk9GeHRGS29vN29tU3d6OHBqSFMxMmUrbWZka3hMRnhNTmtRRGJZ?= =?utf-8?B?Rm80S3o0dTJQUk41Y2MzZ3RNZEkvNlUvaVdYNVQwZE9TNmJweVhPbkpScUFL?= =?utf-8?B?bnBhWThlMkU4WjQraW9zR1k0NGtueEFic0l1OXp0K2xpeTdMeUI4Y0NlMkRH?= =?utf-8?B?STJmdkxDYXQ1L2FRSnUrekRnd3hnVW01a1ZHRTJaODB3d0lBRndMajFoOXY5?= =?utf-8?B?cVNjSmp1OTREL2VORy92aVNqSmZCQmdTQS9DZEtHN2toQTVmR0svMzVWZGxq?= =?utf-8?B?VFUvcVFJY2MzQ2J6TUorWFI0WXp6MzJFQSt2SVhCRzR6QkdCdXNFYWJ2R1VN?= =?utf-8?B?TmJiMkppS05YRkRMUDlCOXpPSDVwZ2MrdS95b21LSXRmaVplbGxRNGd4V3py?= =?utf-8?B?V1I3S2NQVDVPZC9CY1liSmhBaW9rbTdjR0FYRVpXZVdHSEhFcGxWMXJTbTdX?= =?utf-8?B?UFhxNlM1V0NQS0pXMVA2R3hGRFE1QlYvbGJHd0svWEJjS0Zhc1c0UlVtd3hU?= =?utf-8?B?cTJxZnZCdTJxRzV4L1BPMUJSM1R0NTFmUU1YdE5ySEJ4UFZ1N3JVZ0p2dHU5?= =?utf-8?B?NHpZUXJWMXhVRkdrWmR3UWJLeFlzaVUyamtka0NYVFZ0aU1hSmF5bFBRaUtq?= =?utf-8?B?M2djL0xQaGFMNGhxWFZCRG90azltUGVjVy9JYWJyUkxaVFZLSUpWSlVBajIx?= =?utf-8?B?ZDlGTWVwZktXa0xVYWVob3NwRk9KdVdRU3V6RitEQ2ErazVuUGZJUUxQclRJ?= =?utf-8?B?SllRb1Exem1yS1lEa2tRcmlDQng0Z1BRZTNUeHpPbVBBTWhyS1JlYTZVVnJl?= =?utf-8?B?SkJWeFE3OTNWVCtoSENIYW1mWlBlN3QvZ0RweVhRTjFFYTJxWnluLzdZVVVP?= =?utf-8?B?QldicU04NlQyYm9rdDFvV1JTTUhqSTVtVC9IWmNUd3lkNHpKTUMrbzZ4cno0?= =?utf-8?B?YzJzZ1lhbU5VbytxT2owODBPd0MvYXBES3hpWEZia3pGQ09pL08va3BWRXJw?= =?utf-8?B?MUlVdFpKNm1QRkt0alF0MTlwSG0zYnlrTEpkd1NocVlFaVNpc1RwWWUxYnpN?= =?utf-8?Q?bMzzI4h9GmXRqjrrywFurCC/PAaDql2k6PGbI=3D?= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DM8PR11MB5751.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(376014)(366016)(1800799024)(38070700018); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?d1dKa1ByZnhIOWFoRER3SDJVaERhZG1DeWlMSVBkUnlBQWkyaDZvR0lhZWlN?= =?utf-8?B?b1dTVFIzTjVPcVpBSzVwWjl3aWwySmIwOFYyTk53US96ekRibmxMMEs4cEZL?= =?utf-8?B?VGtJTHdOam5vWHhWMzR4UTEwNitJRWIrMU9nTWRJeFNUZ1ZLNHdKQWVmMjcz?= =?utf-8?B?RE1FQm1NZWtyNys1Q0RBdjBHSmxoNnUrL0EwWGV4TnArWS9teFpDSXQ1TVFQ?= =?utf-8?B?anNtNWNPS2o5OXMxNGZNQTdscWFTbTkxTWFHL2pXekF5Sy9VSXZCbWdOU0NL?= =?utf-8?B?QmYvSDMvNzdzQnRsK1B6YTRHamNFSXBmRnVGWWZBQytXcXJTZll2OGdlMmNO?= =?utf-8?B?bWI0cU5wcldwTFB3SzFaSUFKb2dGNWk3UnUxMXJJVE9EL2c1dnRKZ25QZkRm?= =?utf-8?B?Y0xtTUx1RmdJUysxZThGZHpCUkRVRTcwVG1qSkVnNUpvbUdsaU8vUGhZd2ZJ?= =?utf-8?B?YW1rYlhuUktCZ0llTWNUQWxtZEZtbzNaNHUyc0dkOG1tT2pNc1FwVnNNdXhT?= =?utf-8?B?eGNqVERtYVowdC9PUi9NZG1CNDIvYmVCU0d6TDJSQ3V5L25qa2ZUY1RyRWk4?= =?utf-8?B?TmdpY0M2NDVHUFBhWjhYZ3pWaXZvY0t6UG81VTdLakhnUU92THlqMXhubk4x?= =?utf-8?B?alQ1c3RzUmlOZ3hpdm1GZ25pcnQ3NXhMZ3ZSRDVKbzZzWVlRNU1EU3JqVTVM?= =?utf-8?B?a2duVXpLU0tERFFWRU9tYndvWFRtQWxaMkRZQUhhdWFYVE9lMUUycXo4OHBJ?= =?utf-8?B?TXFUUHBwa05wSGFGeWd5NUtERTNibWdzT1BwZG1lUlRsSVo2ak9tK0JhMDlz?= =?utf-8?B?d0ozQnhtWHhLSU8zZGttY1Y1TFliQm96NDhlMEFZZHBUR202T1M3dis2TXo0?= =?utf-8?B?UUhwSGVMQmF4THh2OXhlbURBZzhPVDVqMTRJUHZnbkorQTl1VTV0ank2VlFv?= =?utf-8?B?UE56VWxnRjQ3NGYrcDF5bE5rNDRzS3YybzV2ZU9pamYvNThyRE53NEw1djYv?= =?utf-8?B?clgybzRZVUJDWGJwbUJ5ZGRqaVJ0OHRoblh1QWYzaUhDd1YvbjBsRU5DaFNG?= =?utf-8?B?NnhEZk5lKzVoTi9MOVQzc2g0VDZQcXR1OFA5Q3V6eWtzWUFHaS82L09mS2th?= =?utf-8?B?OXUvbGQ5OHcrZ3ByRjcreXlsTHJiWFJCYjZUcFNNdVVyUWRqOG8zMktibEJ6?= =?utf-8?B?cHdJWWpRM0FRbXd0REcyNThPMnRvNS95cnN1cSs3Ykt3R05qcUdnN2Z4N0p4?= =?utf-8?B?VGZ6TTFmckdPajVXNFREVlNKNkh4eGJsVDRKWW81NkN4end2NXlJcUlHbUkx?= =?utf-8?B?WEhvUTJZR2h5ZnJ3N2N3NklKM2hWVGZSVzMzNG1wMG5IZFlwMW5MV2J5OXlC?= =?utf-8?B?b0IwWXdoMmIwZVBGakQ3Uzl3Vy9Za1hEbHFFcTZxaVVvMGMwMXYrd2tGOXQ5?= =?utf-8?B?SjBmalZwaGg2akEyM0dHRFh5a2ZnNmt2MzBKd2hwc3RJR1JEN3ljc3dOTWth?= =?utf-8?B?TXI1Zi9ybDNFaW13eXlOeUhURnVsd010WSt1RG5lS0FaSllkRVpvZXEzcEJt?= =?utf-8?B?VE9xVkhuNHV4bk5zZkxZZHIxQjJUb1pwUHZYWkNDTEJlbitMMm9ab25CZExq?= =?utf-8?B?TlVORGd4UCtUYnh2eXVOL3lBVzRENUJKYytrK3lyUG1IOVc2eWhySWdFNk9o?= =?utf-8?B?TUtRa09yVHpaRWtsNnVwWExUS0E4YURvaUx1MXZjQ2FIMXZDR21OT0ovSjVQ?= =?utf-8?B?cUEyTDlwd25kOHFNQXdRQjNjWEZVeDhvQlpyYytCNnpacG1FaFUzV1VHSG5L?= =?utf-8?B?MDROMUd4U1Bka0RDMTR6U212UWxseXR4SnNCMjBncEZDNC9pemk5MVRaYnI4?= =?utf-8?B?M2QybHp4UkNxMDB2bVlQbUlVbDhsQzZuUzNwT1B2UXcyMy9GeTU1MnYxZkE3?= =?utf-8?B?UUlIdVlWcVVDTWpyQ1BkVjJQWWVpMkZCem00d1Uya1l2K3hucXBzbDFyZldo?= =?utf-8?B?M1dnZGRyTVhHdTlQVlo4VUFwZGllYStBSThkM0hsL1B5dlRyVkdPZDNFV2VN?= =?utf-8?B?cXN5ejV6OE9iTXZOSklOdFFqcmtPMkdXbS8xL1hpT3NjYkx3T2NkZm1RaW9J?= =?utf-8?B?TGZpN1RYWVAzYTR0YnE1cFIwcUZFc0Vsd2lQVHl1c0lPdUFKNGd0cTUvelIr?= =?utf-8?Q?733RWbj3UBZYwZdZUiGYT1g=3D?= Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DM8PR11MB5751.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: b14c1c79-2681-4822-2660-08dd03b7982a X-MS-Exchange-CrossTenant-originalarrivaltime: 13 Nov 2024 07:48:42.3035 (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: +ZxLmFGqsiBhKGRL9M/h3miXNuxobMeNfNa9OMh1GRjHc4p169Z/kbMDB0VdWbHxe6yZHMg/Rti9oa1ClxJWvpGm/TQyReaMBeoXgVPUh1vyYScuruP14k2Sol1P1k1Z X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR11MB8128 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" T24gVHVlLCAyMDI0LTEwLTIyIGF0IDA5OjMzIC0wNzAwLCBaaGFuanVuIERvbmcgd3JvdGU6Cj4g VGVzdCB3aXRoIEd1QyByZXNldCwgY2hlY2sgaWYgZGV2Y29yZWR1bXAgcmVnaXN0ZXIgZHVtcCBp cyB3aXRoaW4gdGhlCmFsYW46IG5pdDogbW9yZSBjbGFyaWZpY2F0aW9uPyAtPiAiU3VibWl0IGNt ZHMgdG8gdGhlIEdQVSB0aGF0IHJlc3VsdCBpbiBhIEd1QyBlbmdpbmUgcmVzZXQgYW5kIGNoZWNr IHRoYXQgZGV2Y29yZWR1bXAKcmVnaXN0ZXIgZHVtcCBpcyBnZW5lcmF0ZWQsIGJ5IHRoZSBHdUMs IGFuZCBpbmNsdWRlcyB0aGUgZnVsbCByZWdpc3RlciByYW5nZSI/Cj4gcmFuZ2UuCj4gCj4gU2ln bmVkLW9mZi1ieTogWmhhbmp1biBEb25nIDx6aGFuanVuLmRvbmdAaW50ZWwuY29tPgo+IC0tLQo+ IMKgdGVzdHMvaW50ZWwveGVfZXhlY19jYXB0dXJlLmMgfCAzNjUgKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKwo+IMKgdGVzdHMvbWVzb24uYnVpbGTCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgfMKgwqAgMSArCj4gwqAyIGZpbGVzIGNoYW5nZWQsIDM2NiBpbnNlcnRpb25zKCspCj4g wqBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdHMvaW50ZWwveGVfZXhlY19jYXB0dXJlLmMKPiAKPiBk aWZmIC0tZ2l0IGEvdGVzdHMvaW50ZWwveGVfZXhlY19jYXB0dXJlLmMgYi90ZXN0cy9pbnRlbC94 ZV9leGVjX2NhcHR1cmUuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAw Li4zYThmYTY4ZjIKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvdGVzdHMvaW50ZWwveGVfZXhlY19j YXB0dXJlLmMKPiBAQCAtMCwwICsxLDM2NSBAQAo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogTUlUCj4gKy8qCj4gKyAqIENvcHlyaWdodCDCqSAyMDI0IEludGVsIENvcnBvcmF0aW9uCj4g KyAqLwo+ICsKPiArLyoqCj4gKyAqIFRFU1Q6IEJhc2ljIHRlc3RzIGZvciBHdUMgYmFzZWQgcmVn aXN0ZXIgY2FwdHVyZQo+ICsgKiBDYXRlZ29yeTogQ29yZQo+ICsgKiBNZWdhIGZlYXR1cmU6IEdl bmVyYWwgQ29yZSBmZWF0dXJlcwo+ICsgKiBTdWItY2F0ZWdvcnk6IENNRCBzdWJtaXNzaW9uCj4g KyAqIEZ1bmN0aW9uYWxpdHk6IERlYnVnCj4gKyAqIFRlc3QgY2F0ZWdvcnk6IGZ1bmN0aW9uYWxp dHkgdGVzdAo+ICsgKi8KPiArCj4gKyNpbmNsdWRlIDxjdHlwZS5oPgo+ICsjaW5jbHVkZSA8ZmNu dGwuaD4KPiArI2luY2x1ZGUgPHN0ZGlvLmg+Cj4gKyNpbmNsdWRlIDxyZWdleC5oPgphbGFuOm5p dDogYWxwaGFiZXRpY2FsPyAoSSdtIG5vdCBzdXJlIGlmIHRoaXMgaXMgYSBoYXJkIHJ1bGUgZm9y IHN0ZCBoZWFkZXJzKQo+ICsKPiArI2luY2x1ZGUgImlndC5oIgo+ICsjaW5jbHVkZSAiaWd0X2Rl dmljZS5oIgo+ICsjaW5jbHVkZSAibGliL2lndF9zeW5jb2JqLmgiCj4gKyNpbmNsdWRlICJsaWIv aW50ZWxfcmVnLmgiCj4gKyNpbmNsdWRlICJ4ZV9kcm0uaCIKPiArI2luY2x1ZGUgInhlL3hlX2lv Y3RsLmgiCj4gKyNpbmNsdWRlICJ4ZS94ZV9xdWVyeS5oIgo+ICsjaW5jbHVkZSAieGUveGVfc3Bp bi5oIgo+ICsKPiArI2RlZmluZSBNQVhfTl9FWEVDUVVFVUVTwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgMTYKPiArI2RlZmluZSBNQVhfSU5TVEFOQ0XCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoDkKPiArI2RlZmluZSBHVF9SRVNFVMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAoMHgxIDw8IDApCj4gKyNkZWZpbmUgQ0xPU0VfRkTC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKDB4MSA8PCAxKQo+ ICsjZGVmaW5lIENMT1NFX0VYRUNfUVVFVUVTwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCgw eDEgPDwgMikKPiArI2RlZmluZSBWSVJUVUFMwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCgweDEgPDwgMykKPiArI2RlZmluZSBQ QVJBTExFTMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAoMHgx IDw8IDQpCj4gKyNkZWZpbmUgQ0FUX0VSUk9SwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAoMHgxIDw8IDUpCj4gKwo+ICsjZGVmaW5lIEJBU0VfQUREUkVTU8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMHgxYTAwMDAKPiArLyogQmF0Y2ggYnVm ZmVyIGVsZW1lbnQgY291bnQsIGluIG51bWJlciBvZiBkd29yZHModWludDMyX3QpICovCj4gKyNk ZWZpbmUgQkFUQ0hfRFdfQ09VTlTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMTYK PiArCj4gKyNkZWZpbmUgTUFYX1BBVEhfTkFNRV9MRU7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgNTEyCj4gKyNkZWZpbmUgTUFYX0xJTkVTwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqA0MDk2Cj4gKy8qIEtlZXAgbGluZSBjb250ZW50IHVwIHRvIHRoaXMgbGVu Z3RoICovCj4gKyNkZWZpbmUgTUFYX0xJTkVfTEVOwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAxMDI0Cj4gKyNkZWZpbmUgTUFJTl9CVUZfU0laRcKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoChNQVhfTElORVMgKiBNQVhfTElORV9MRU4gKiBzaXplb2YoY2hh cikpCj4gKy8qIEJ1ZmZlciBzaXplIHRvIHJlYWQgYSBsaW5lICovCj4gKyNkZWZpbmUgTElORV9C VUZfU0laRcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCg2NCAqIDEwMjQpCj4g KwphbGFuOiB0aGUgYWJvdmUgc2V0IG9mIGRlZmluaXRpb25zIGFyZSBiZWluZyB1c2VkIGZvciB0 aGUgc29sZSBwdXJwb3NlIG9mIAp0cnlpbmcgdG8gZ2V0IGFsbCBvZiB0aGUgZGV2Y29yZWR1bXAg ZmlsZSBpbnRvIGEgYnVmZmVyIHRoYXQgeW91IGNhbiB0aGVuIGdvIHRocm91Z2gKYW4gZmluZCBz b21lIHNwZWNpZmljIGtleXdvcmRzIHVzaW5nIHN0cnN0ciBpbiBnZXRfY29yZWR1bXBfaXRlbS4g SG93ZXZlciwgaW5zdGVhZApvZiB1c2luZyBhbGwgdGhlc2UgZGVmaW5pdGlvbnMgYW5kIGNyZWF0 aW5nIGFsbG9jX2xpbmVzX2J1ZmZlciwgbG9hZF9hbGwgYW5kIGdldF9jb3JlZHVtcF9pdGVtLAp3 aHkgbm90IHJldXNlIGlndF9zeXNmc19nZXQgZnVuY3Rpb24/IGlzIHRoZXJlIGEgcmVhc29uIHdl IGFyZSBub3QgdXNpbmcgdGhhdD8KCkFsdGVybmF0aXZlbHksIGkgYW0gd29uZGVyaW5nIGlmIHdl IGNhbiBjb25zaWRlciB0aGUgdG9wIHBhcnQgb2YgdGhlIGRldmNvcmVkdW1wIGxheW91dAppcyBw ZXJzaXN0ZW50IGFuZCBzbyBtYXliZSB3ZSBkb250IGV2ZW4gbmVlZCB0byBsb2FkIHNvIG11Y2gg b2YgdGhlIGRldmNvcmVkdW1wPwppLmUuIGlmIHdlIGRvbnQgZ2V0IGFueSB2YXJpYWJsZSBsZW5n dGggcHJpbnRvdXRzIG9yIGJ1ZmZlciBvYmplY3QgZHVtcHMKYmVmb3JlIHRoZSBndWMgZXJyb3Ig Y2FwdHVyZSB0aGVuIHdlIGNvdWxkIHNpbXBseSByZWFkIHRoZSBtaW5pbWFsIGJ1ZmZlciBzaXpl IG5lZWRlZAp0byBnZXQgdGhlIGluaXRpYWwga2V5d29yZHMgb2YgdGhlIGd1YyBlcnJvciBjYXB0 dXJlIGR1bXAuCgoKPiArI2RlZmluZSBEVU1QX1BBVEjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCIvc3lzL2NsYXNzL2RybS9jYXJkJWQvZGV2aWNlL2RldmNvcmVk dW1wL2RhdGEiCj4gKyNkZWZpbmUgU1RBUlRfVEFHwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAiKioqKiBKb2IgKioqKiIKPiArI2RlZmluZSBSRUdFWF9LRVlfVkFM VUVfUEFJUsKgwqDCoMKgwqDCoMKgwqDCoMKgwqAiXlsgXHRdKihbXjpdKyk6WyBcdF0qKFteIFx0 XSspWyBcdF0qJCIKPiArI2RlZmluZSBSRUdFWF9LRVlfSU5ERVjCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAxCj4gKyNkZWZpbmUgUkVHRVhfVkFMVUVfSU5E RVjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMgo+ICsjZGVmaW5lIFJFR0VYX0tFWV9WQUxV RV9HUk9VUF9DT1VOVMKgwqDCoMKgMwo+ICsKPiArc3RhdGljIHZvaWQKPiArdGVzdF9sZWdhY3lf bW9kZShpbnQgZmQsIHN0cnVjdCBkcm1feGVfZW5naW5lX2NsYXNzX2luc3RhbmNlICplY2ksCj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpbnQgbl9leGVjX3F1ZXVlcywgaW50IG5f ZXhlY3MsIHVuc2lnbmVkIGludCBmbGFncykKPiArCmFsYW46IGp1c3QgYSBxdWVzdGlvbjogd2h5 IGFyZSB5b3UgY2FsbGluZyBpdCAidGVzdF9sZWdhY3lfbW9kZSI/wqAKaSBrbm93IHlvdSBhcmUg cmUtdXNpbmcgdGhpcyBmdW5jdGlvbiBmcm9tIG90aGVyIHRlc3RzLApidXQgSSdtIGN1cmlvdXMg b24gdGhlIGhpc3Rvcnkgb2YgdGhpcyBuYW1lLgoKYWxhbjogZnV0dXJlIGZvbGxvdyB1cDogQXMg YSBzaWRlIG5vdGUsIHdlIHNob3VsZCBjcmVhdGUgYSBzZXBhcmF0ZSB0YXNrCml0ZW0gdG8gY29u c29saWRhdGUgdGhlIG11bHRpcGxlIGluc3RhbmNlcyBvZiB0aGlzIGZ1bmN0aW9uIGN1cnJlbnRs eQpiZWluZyB1c2VkIGJ5IG90aGVyIHRlc3RzIGFuZCByZS1wdXJwb3NlIGl0IGFzIGFuIHhlIGxp YnJhcnkgaGVscGVyLgpUaGlzIHdpbGwgc3VyZSByZXF1aXJlIGFkZGl0aW9uYWwgaW4tb3V0IHBh cmFtcyBtb3JlIGlucHV0IHZhbGlkYXRpb25zCkhvd2V2ZXIsIHNpbmNlIHdlIG5lZWQgdGhpcyB0 ZXN0IHRvIGVuc3VyZSB3ZSBnZXQgZ3VjLWVycm9yLWNhcHR1cmUgdGVzdGVkCmluIENJIGEgbGl0 dGxlIHVyZ2VudGx5LCBjcmVhdGUgYSBzZXBhcmV0ZSBpbnRlcm5hbCB0YXNrIGZvciB0aGF0Lgo+ IHsKPiArwqDCoMKgwqDCoMKgwqB1aW50MzJfdCB2bTsKPiArwqDCoMKgwqDCoMKgwqBjb25zdCB1 aW50NjRfdCBhZGRyID0gQkFTRV9BRERSRVNTOwo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1f eGVfc3luYyBzeW5jWzJdID0gewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB7IC50 eXBlID0gRFJNX1hFX1NZTkNfVFlQRV9TWU5DT0JKLCAuZmxhZ3MgPSBEUk1fWEVfU1lOQ19GTEFH X1NJR05BTCwgfSwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgeyAudHlwZSA9IERS TV9YRV9TWU5DX1RZUEVfU1lOQ09CSiwgLmZsYWdzID0gRFJNX1hFX1NZTkNfRkxBR19TSUdOQUws IH0sCj4gK8KgwqDCoMKgwqDCoMKgfTsKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJtX3hlX2V4 ZWMgZXhlYyA9IHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLm51bV9iYXRjaF9i dWZmZXIgPSAxLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAubnVtX3N5bmNzID0g MiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLnN5bmNzID0gdG9fdXNlcl9wb2lu dGVyKHN5bmMpLAo+ICvCoMKgwqDCoMKgwqDCoH07Cj4gK8KgwqDCoMKgwqDCoMKgdWludDMyX3Qg ZXhlY19xdWV1ZXNbTUFYX05fRVhFQ1FVRVVFU107Cj4gK8KgwqDCoMKgwqDCoMKgdWludDMyX3Qg c3luY29ianNbTUFYX05fRVhFQ1FVRVVFU107Cj4gK8KgwqDCoMKgwqDCoMKgc2l6ZV90IGJvX3Np emU7Cj4gK8KgwqDCoMKgwqDCoMKgdWludDMyX3QgYm8gPSAwOwo+ICvCoMKgwqDCoMKgwqDCoHN0 cnVjdCB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCB4ZV9zcGluIHNw aW47Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHVpbnQzMl90IGJhdGNoW0JBVENI X0RXX0NPVU5UXTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdWludDY0X3QgcGFk Owo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1aW50MzJfdCBkYXRhOwo+ICvCoMKg wqDCoMKgwqDCoH0gKmRhdGE7Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IHhlX3NwaW5fb3B0cyBz cGluX29wdHMgPSB7IC5wcmVlbXB0ID0gZmFsc2UgfTsKPiArwqDCoMKgwqDCoMKgwqBpbnQgaSwg YjsKPiArCj4gK8KgwqDCoMKgwqDCoMKgaWd0X2Fzc2VydChuX2V4ZWNfcXVldWVzIDw9IE1BWF9O X0VYRUNRVUVVRVMpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqB2bSA9IHhlX3ZtX2NyZWF0ZShmZCwg MCwgMCk7Cj4gK8KgwqDCoMKgwqDCoMKgYm9fc2l6ZSA9IHNpemVvZigqZGF0YSkgKiBuX2V4ZWNz Owo+ICvCoMKgwqDCoMKgwqDCoGJvX3NpemUgPSB4ZV9iYl9zaXplKGZkLCBib19zaXplKTsKPiAr Cj4gK8KgwqDCoMKgwqDCoMKgYm8gPSB4ZV9ib19jcmVhdGUoZmQsIHZtLCBib19zaXplLAo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdnJhbV9pZl9w b3NzaWJsZShmZCwgZWNpLT5ndF9pZCksCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBEUk1fWEVfR0VNX0NSRUFURV9GTEFHX05FRURTX1ZJU0lCTEVf VlJBTSk7Cj4gK8KgwqDCoMKgwqDCoMKgZGF0YSA9IHhlX2JvX21hcChmZCwgYm8sIGJvX3NpemUp Owo+ICsKPiArwqDCoMKgwqDCoMKgwqBmb3IgKGkgPSAwOyBpIDwgbl9leGVjX3F1ZXVlczsgaSsr KSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGV4ZWNfcXVldWVzW2ldID0geGVf ZXhlY19xdWV1ZV9jcmVhdGUoZmQsIHZtLCBlY2ksIDApOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBzeW5jb2Jqc1tpXSA9IHN5bmNvYmpfY3JlYXRlKGZkLCAwKTsKPiArwqDCoMKg wqDCoMKgwqB9Owo+ICsKPiArwqDCoMKgwqDCoMKgwqBzeW5jWzBdLmhhbmRsZSA9IHN5bmNvYmpf Y3JlYXRlKGZkLCAwKTsKPiArwqDCoMKgwqDCoMKgwqB4ZV92bV9iaW5kX2FzeW5jKGZkLCB2bSwg MCwgYm8sIDAsIGFkZHIsIGJvX3NpemUsIHN5bmMsIDEpOwo+ICsKYWxhbjogbml0IHNvIHlvdSBj YW4gaWdub3JlLCBidXQgaXQgd291bGQgYmUgcmVhbGx5IG5pY2UgaWYgdGhlIGZsb3cgaXMKc3Vt bWFyaXplZCBpbiBhIGNvbmNpc2UgY29tbWVudC4gUGVyaGFwcyBiZXR0ZXIgdG8gZG8gdGhhdCB3 aGVuIHdlIGdldAp0byBkb2luZyB0aGUgY29uc2xpZGF0aW9uIGludG8gYSBoZWxwZXIgaW4gZnV0 dXJlLgoKPiArwqDCoMKgwqDCoMKgwqBmb3IgKGkgPSAwOyBpIDwgbl9leGVjczsgaSsrKSB7Cj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHVpbnQ2NF90IGJhc2VfYWRkciA9IGFkZHI7 CmFsYW46IGkgc2VlIHRoYXQgZm9yIGV2ZXJ5IHNpbmdsZSBiYXRjaCBvbiBhbGwgZW5naW5lcyAo YXMgcGVyIHRoZSBjYWxsZXIgdGhhdCBsb29wcwpjYWxsaW5nIHRoaXMgInRlc3RfbGVnYWN5X21v ZGUiIHBlciBlbmdpbmUsIHdlIGFsd2F5cyB1c2UgdGhlIHNhbWUgYmF0Y2ggYWRkcmVzcy4KCkhv d2V2ZXIsIHdpdGggdGhlIHNhbWUgYmF0Y2ggYWRkcmVzcyBhY3Jvc3MgYWxsIHJ1bnMgb2YgdGhp cyBsb29wLCBpdCBtZWFucyB0aGF0CndlIGhhdmUgbm8gd2F5IHRvIGNhdGNoIHRoZSBmb2xsb3dp bmc6CgoxLiBpZiB3ZSBlbmNvdW50ZXIgYSBjYXNlIHdoZXJlIHRoZSBkZXZjb3JlZHVtcCByZXRy aWV2ZWQgY29udGFpbmVkIGEgZ3VjLWVycm9yLWNhcHR1cmUKdGhhdCBkaWRudCBjb3JyZWxhdGUg d2l0aCB0aGUgYmF0Y2ggd2Ugd2VyZSBleHBlY3RpbmcgdG8gZ2V0IHJlc2V0IG9uIChpLmUuIHRo ZSBmaXJzdApiYXRjaCBvZiBhIGdpdmVuIGN1cnJlbnQgbmVlZHMgdG8gYmUgb25lIGdldHRpbmcg cmVzZXQsIGJ1dCB3ZSBlbmQgdXAgd2l0aCBhbm90aGVyIG9uZSksCnRoZW4gd2UgbmVlZCB0byBm bGFnIHRoYXQgYXMgYSB3YXJuaW5nIG9yIGZhaWx1cmUuIChJJ20gYXNzdW1pbmcgdGhlIGV4ZWN1 dGlvbiBvZiBiYXRjaGVzCm9uIGEgZ2l2ZW4gcXVldWUgaXMgZ3VhcmFudGVlZCB0byBiZSBpbiBv cmRlcikuCgoyLiBpZiB3ZSBlbmNvdW50ZXIgYSBjYXNlIHdoZXJlIHRoZSBkZXZjb3JlZHVtcCBy ZXRyaWV2ZWQgY29udGFpbmVkIGEgZ3VjLWVycm9yLWNhcHR1cmUKb2Ygc29tZSBvdGhlciBlbmdp bmUgc3VjaCBhcyB0aGUgcHJpb3IgZW5naW5lIHRoYXQgd2FzIGJlaW5nIHRlc3RlZCB0aGF0IHdl IHNob3VsZCBhbHNvICAKZmxhZyB0aGF0IGFzIGEgd2FybmluZyBvciBmYWlsdXJlLgoKVGhhdCBz YWlkLCBpIHRoaW5rIHRoZSBiYXRjaCBiYXNlIGFkZHJlc3MgcmVhbGx5IHNob3VsZCBiZSBuZXZl ciBjb25zaXN0ZW50IGZvciBhbnkKdHdvIGVuZ2luZXMgYW5kIG5ldmVyIGNvbnNpc3RlbnQgZm9y IGFueSB0d28gYmF0Y2hlcy4gc28gbWF5YmUuLi4gLT4KCgljb25zdCB1aW50NjRfdCBhZGRyID0g QkFTRV9BRERSRVNTICsgKGVuZ2luZV9pZCAqICgweDEwMCkpOwoKCS4uLiB0aGVuIGluIHRoZSBs b29wLi4uCglpbnQgZSA9IGkgJSBuX2V4ZWNfcXVldWVzOwoJdWludDY0X3QgYmFzZV9hZGRyID0g YWRkciArIGUgKiAweDg7Cgp0aGlzIHdheSwgd2hlbiB3ZSBnZXQgYSBkZXZjb3JlZHVtcCwgd2Ug c2hvdWxkIGVuc3VyZSB0aGF0IHRoZSBiYXRjaCBhZGRyZXNzCm1hdGNoZXMgdGhlIGVuZ2luZV9p ZCB3ZSBqdXN0IHRlc3RlZCBhbmQgZW5zdXJlIGl0cyBsYXN0IG5pYmJsZSBpcyBhbHdheXMgMHg4 PwoKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdWludDY0X3QgYmF0Y2hfb2Zmc2V0 ID0gKGNoYXIgKikmZGF0YVtpXS5iYXRjaCAtIChjaGFyICopZGF0YTsKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgdWludDY0X3QgYmF0Y2hfYWRkciA9IGJhc2VfYWRkciArIGJhdGNo X29mZnNldDsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdWludDY0X3Qgc3Bpbl9v ZmZzZXQgPSAoY2hhciAqKSZkYXRhW2ldLnNwaW4gLSAoY2hhciAqKWRhdGE7Cj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHVpbnQ2NF90IHNkaV9vZmZzZXQgPSAoY2hhciAqKSZkYXRh W2ldLmRhdGEgLSAoY2hhciAqKWRhdGE7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oHVpbnQ2NF90IHNkaV9hZGRyID0gYmFzZV9hZGRyICsgc2RpX29mZnNldDsKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgdWludDY0X3QgZXhlY19hZGRyOwo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBpbnQgZSA9IGkgJSBuX2V4ZWNfcXVldWVzOwo+ICsKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKCFpKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzcGluX29wdHMuYWRkciA9IGJhc2VfYWRkciArIHNw aW5fb2Zmc2V0Owo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgeGVfc3Bpbl9pbml0KCZkYXRhW2ldLnNwaW4sICZzcGluX29wdHMpOwo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZXhlY19hZGRyID0gc3Bpbl9vcHRz LmFkZHI7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0gZWxzZSB7Cj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBiID0gMDsKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRhdGFbaV0uYmF0Y2hbYisr XSA9IE1JX1NUT1JFX0RXT1JEX0lNTV9HRU40Owo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgZGF0YVtpXS5iYXRjaFtiKytdID0gc2RpX2FkZHI7Cj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkYXRhW2ldLmJhdGNo W2IrK10gPSBzZGlfYWRkciA+PiAzMjsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGRhdGFbaV0uYmF0Y2hbYisrXSA9IDB4YzBmZmVlOwo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGF0YVtpXS5iYXRjaFtiKytd ID0gTUlfQkFUQ0hfQlVGRkVSX0VORDsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGlndF9hc3NlcnQoYiA8PSBBUlJBWV9TSVpFKGRhdGFbaV0uYmF0Y2gp KTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBl eGVjX2FkZHIgPSBiYXRjaF9hZGRyOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9 Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzeW5jWzBdLmZsYWdzICY9IH5E Uk1fWEVfU1lOQ19GTEFHX1NJR05BTDsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg c3luY1sxXS5mbGFncyB8PSBEUk1fWEVfU1lOQ19GTEFHX1NJR05BTDsKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgc3luY1sxXS5oYW5kbGUgPSBzeW5jb2Jqc1tlXTsKPiArCj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGV4ZWMuZXhlY19xdWV1ZV9pZCA9IGV4ZWNfcXVl dWVzW2VdOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBleGVjLmFkZHJlc3MgPSBl eGVjX2FkZHI7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChlICE9IGkpCj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzeW5jb2JqX3Jl c2V0KGZkLCAmc3luY29ianNbZV0sIDEpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqB4ZV9leGVjKGZkLCAmZXhlYyk7Cj4gK8KgwqDCoMKgwqDCoMKgfQphbGFuOiBzbyB0aGlzIGNv ZGUgaXMgbmV3IHRvIG1lIC0gc28gdG8gaGVscCBtZSB1bmRlcnN0YW5kLCBjYW4geW91IGV4cGxh aW4KaWYgaSBnb3QgdGhpcyByaWdodCBpbiB0ZXJtcyBvZiB3aGF0IGFib3ZlIGxvb3AgYW5kIGJl bG93IHN5bmMtd2FpdHMgYXJlIGRvaW5nPzoKMS4gc28gZSBzZW5kIG5fZXhlY3MgbnVtYmVyIG9m IGJhdGNoZXMgYWNyb3NzIG5fZXhlY19xdWV1ZXMgbnVtYmVyIG9mIHF1ZXVlcyAob24gdGhlIHNh bWUgZW5naW5lKQoyLiB0aGVuLCBiZWxvdywgd2Ugd2FpdCBvbiBlYWNoIG9uZSBvZiB0aG9zZSBi YXRjaGVzIHRvIHN0YXJ0LsKgCjMuIEFuZCBmaW5hbGx5IHdlIHdhaXQgZm9yIHRoZSB2bSB0byB1 bmJpbmQ/CgpIb3dldmVyLCBpIG5vdGljZSBmcm9tIHRoZSBjYWxsZXIgdGhhdCB5b3UgYXJlIG9u bHkgZG9pbmcgY291bnQgYmF0Y2ggb2Ygb25lIGFuZCBxdWV1ZSBjb3VudCBvZiBvbmUuClRoYXQg c2FpZCwgaSBhbSBraW5kYSB3b25kZXJpbmcgdGhhdCBpZiB0aGUgYmF0Y2ggYnVmZmVyIGlzIGRv aW5nIGEgc3Bpbm5lciwgYW5kIGlmIHRoaXMgaWd0CnRlc3QgY291bGUgcG90ZW50aWFsbHkgYmUg cnVubmluZyBhbG9uZSB3aXRob3V0IGFueSBvdGhlciB3b3JrbG9hZHMsIHRoZW4gaG93IHdvdWxk IGEgcmVzZXQgYmUKdHJpZ2dlcmVkPyBpIHRob3VnaHQgaWYgd2Ugb25seSBoYXZlIDEgd29ya2xv YWQgcnVubmluZyB3aXRoIG5vdGhpbmcgZWxzZSBiZWluZyBxdWV1ZWQsIHRoZW4KdGhlIEd1QyB3 b250IGhhdmUgYSByZWFzb24gdG8gcHJlZW1wdCB0aGUgd29yay4gSSBhbHNvIHRob3VnaHQgd2Ug ZG9udCBoYXZlIGhlYXJ0YmVhdCBpbiB4ZS4uLgphbSBpIG1pc3Rha2VuPyBob3cgZG8gd2UgZ3Vh cmFudGVlIHRoYXQgYW4gZW5naW5lIHJlc2V0IG9jY3Vycz8KCmxldHMgY29ubmVjdCBvZmZsaW5l IGFzIGkgYW0gYSBiaXQgbG9zdCBpbiBzb21lIG9mIHRoZXNlIGNvZGVzLgo+ICsKPiArwqDCoMKg wqDCoMKgwqBmb3IgKGkgPSAwOyBpIDwgbl9leGVjX3F1ZXVlcyAmJiBuX2V4ZWNzOyBpKyspCj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlndF9hc3NlcnQoc3luY29ial93YWl0KGZk LCAmc3luY29ianNbaV0sIDEsIElOVDY0X01BWCwgMCwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg TlVMTCkpOwo+ICvCoMKgwqDCoMKgwqDCoGlndF9hc3NlcnQoc3luY29ial93YWl0KGZkLCAmc3lu Y1swXS5oYW5kbGUsIDEsIElOVDY0X01BWCwgMCwgTlVMTCkpOwo+ICsKPiArwqDCoMKgwqDCoMKg wqBzeW5jWzBdLmZsYWdzIHw9IERSTV9YRV9TWU5DX0ZMQUdfU0lHTkFMOwo+ICvCoMKgwqDCoMKg wqDCoHhlX3ZtX3VuYmluZF9hc3luYyhmZCwgdm0sIDAsIDAsIGFkZHIsIGJvX3NpemUsIHN5bmMs IDEpOwo+ICvCoMKgwqDCoMKgwqDCoGlndF9hc3NlcnQoc3luY29ial93YWl0KGZkLCAmc3luY1sw XS5oYW5kbGUsIDEsIElOVDY0X01BWCwgMCwgTlVMTCkpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBz eW5jb2JqX2Rlc3Ryb3koZmQsIHN5bmNbMF0uaGFuZGxlKTsKPiArwqDCoMKgwqDCoMKgwqBmb3Ig KGkgPSAwOyBpIDwgbl9leGVjX3F1ZXVlczsgaSsrKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHN5bmNvYmpfZGVzdHJveShmZCwgc3luY29ianNbaV0pOwo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqB4ZV9leGVjX3F1ZXVlX2Rlc3Ryb3koZmQsIGV4ZWNfcXVldWVz W2ldKTsKPiArwqDCoMKgwqDCoMKgwqB9Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoG11bm1hcChkYXRh LCBib19zaXplKTsKPiArwqDCoMKgwqDCoMKgwqBnZW1fY2xvc2UoZmQsIGJvKTsKPiArwqDCoMKg wqDCoMKgwqB4ZV92bV9kZXN0cm95KGZkLCB2bSk7Cj4gK30KPiArCj4gK3N0YXRpYyBjaGFyICoq YWxsb2NfbGluZXNfYnVmZmVyKHZvaWQpCj4gK3sKPiArwqDCoMKgwqDCoMKgwqBpbnQgaTsKPiAr wqDCoMKgwqDCoMKgwqBjaGFyICoqbGluZXMgPSAoY2hhciAqKiltYWxsb2MoTUFYX0xJTkVTICog c2l6ZW9mKGNoYXIgKikpOwo+ICvCoMKgwqDCoMKgwqDCoGNoYXIgKm1haW5fYnVmID3CoCAoY2hh ciAqKW1hbGxvYyhNQUlOX0JVRl9TSVpFKTsKCj4gKwo+ICvCoMKgwqDCoMKgwqDCoGlndF9hc3Nl cnRfZihsaW5lcywgIk91dCBvZiBtZW1vcnkuXG4iKTsKPiArwqDCoMKgwqDCoMKgwqBpZ3RfYXNz ZXJ0X2YobWFpbl9idWYsICJPdXQgb2YgbWVtb3J5LlxuIik7Cj4gKwo+ICvCoMKgwqDCoMKgwqDC oC8qIHNldCBzdHJpbmcgYXJyYXkgcG9pbnRlcnMgKi8KPiArwqDCoMKgwqDCoMKgwqBmb3IgKGkg PSAwOyBpIDwgTUFYX0xJTkVTOyBpKyspCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGxpbmVzW2ldID0gbWFpbl9idWYgKyBpICogTUFYX0xJTkVfTEVOOwo+ICsKPiArwqDCoMKgwqDC oMKgwqByZXR1cm4gbGluZXM7Cj4gK30KPiArCj4gK3N0YXRpYyBjaGFyICpnZXRfZGV2Y29yZWR1 bXBfcGF0aChpbnQgY2FyZF9pZCwgY2hhciAqYnVmKQo+ICt7Cj4gK8KgwqDCoMKgwqDCoMKgc3By aW50ZihidWYsIERVTVBfUEFUSCwgY2FyZF9pZCk7Cj4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIGJ1 ZjsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgbG9hZF9hbGwoRklMRSAqZmQsIGNoYXIgKipsaW5l cywgY2hhciAqYnVmKQo+ICt7Cj4gK8KgwqDCoMKgwqDCoMKgaW50IGkgPSAwOwo+ICsKPiArwqDC oMKgwqDCoMKgwqBtZW1zZXQobGluZXNbMF0sIDAsIE1BSU5fQlVGX1NJWkUpOwo+ICvCoMKgwqDC oMKgwqDCoHdoaWxlICghZmVvZihmZCkgJiYgaSA8IE1BWF9MSU5FUykgewo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAvKgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg KiBEZXZjb3JlZHVtcCBtaWdodCBoYXZlIGxvbmcgbGluZXMsIGxvYWQgdXAgdG8KPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICogTElORV9CVUZfU0laRSBmb3IgYSBzaW5nbGUgbGlu ZSwgYnVmZmVyIHJldXNlZAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKi8KPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZmdldHMoYnVmLCBMSU5FX0JVRl9TSVpFLCBm ZCk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qIE9ubHkgc2F2ZSB1cCB0byBN QVhfTElORV9MRU4gdG8gYnVmZmVyICovCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oHN0cm5jcHkobGluZXNbaSsrXSwgYnVmLCBNQVhfTElORV9MRU4pOwo+ICvCoMKgwqDCoMKgwqDC oH0KPiArfQo+ICsKPiArc3RhdGljIGJvb2wgYWNjZXNzX2RldmNvcmVkdW1wKGNoYXIgKnBhdGgs IGNoYXIgKipsaW5lcywgY2hhciAqbGluZV9idWYpCj4gK3sKPiArwqDCoMKgwqDCoMKgwqBGSUxF ICpmZCA9IGZvcGVuKHBhdGgsICJyIik7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGlmICghZmQpCj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBmYWxzZTsKPiArCj4gK8KgwqDC oMKgwqDCoMKgaWd0X2RlYnVnKCJEZXZjb3JlZHVtcCBmb3VuZDogJXNcbiIsIHBhdGgpOwo+ICsK PiArwqDCoMKgwqDCoMKgwqAvKiBDbGVhciBtZW1vcnkgYmVmb3JlIGxvYWQgZmlsZSAqLwo+ICvC oMKgwqDCoMKgwqDCoGlmIChsaW5lcykKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg bG9hZF9hbGwoZmQsIGxpbmVzLCBsaW5lX2J1Zik7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGZjbG9z ZShmZCk7Cj4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIHRydWU7Cj4gK30KPiArCj4gK3N0YXRpYyBi b29sIHJtX2RldmNvcmVkdW1wKGNoYXIgKnBhdGgpCj4gK3sKPiArwqDCoMKgwqDCoMKgwqBpbnQg ZmQgPSBvcGVuKHBhdGgsIE9fV1JPTkxZKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgaWYgKGZkICE9 IC0xKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlndF9kZWJ1ZygiQ2xlYXJp bmcgZGV2Y29yZWR1bXAuXG4iKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgd3Jp dGUoZmQsICIwIiwgMSk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNsb3NlKGZk KTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHRydWU7Cj4gK8KgwqDC oMKgwqDCoMKgfQo+ICsKPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gZmFsc2U7Cj4gK30KPiArCj4g K3N0YXRpYyBjaGFyICpnZXRfY29yZWR1bXBfaXRlbShyZWdleF90ICpyZWdleCwgY2hhciAqKmxp bmVzLCBjb25zdCBjaGFyICp0YWcpCj4gK3sKPiArwqDCoMKgwqDCoMKgwqBpbnQgaTsKPiArwqDC oMKgwqDCoMKgwqByZWdtYXRjaF90IG1hdGNoW1JFR0VYX0tFWV9WQUxVRV9HUk9VUF9DT1VOVF07 Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGZvciAoaSA9IDA7IGkgPCBNQVhfTElORVM7IGkrKykgewo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjaGFyICpsaW5lID0gbGluZXNbaV07Cj4g Kwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKiBTa2lwIGxpbmVzIHdpdGhvdXQg dGFnICovCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICghc3Ryc3RyKGxpbmUs IHRhZykpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBj b250aW51ZTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChyZWdleGVj KHJlZ2V4LCBsaW5lLCBSRUdFWF9LRVlfVkFMVUVfR1JPVVBfQ09VTlQsIG1hdGNoLCAwKSA9PSAw KSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjaGFy ICprZXksICp2YWx1ZTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBrZXkgPSAmbGluZVttYXRjaFtSRUdFWF9LRVlfSU5ERVhdLnJtX3NvXTsKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGxpbmVbbWF0Y2hb UkVHRVhfS0VZX0lOREVYXS5ybV9lb10gPSAnXDAnOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdmFsdWUgPSAmbGluZVttYXRjaFtSRUdFWF9WQUxVRV9J TkRFWF0ucm1fc29dOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgbGluZVttYXRjaFtSRUdFWF9WQUxVRV9JTkRFWF0ucm1fZW9dID0gJ1wwJzsKPiArCj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoc3RyY21w KHRhZywga2V5KSA9PSAwKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiB2YWx1ZTsKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qIGlmIGtleSAhPSB0YWcswqAga2VlcCBz ZWFyY2hpbmcgYW5kIGxvb3AgdG8gbmV4dCBsaW5lICovCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoH0KPiArwqDCoMKgwqDCoMKgwqB9Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoHJldHVy biBOVUxMOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBjaGVja19pdGVtX3U2NChyZWdleF90ICpy ZWdleCwgY2hhciAqKmxpbmVzLCBjb25zdCBjaGFyICp0YWcsIHVpbnQ2NF90IGFkZHJfbG8sCj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHVpbnQ2 NF90IGFkZHJfaGkpCj4gK3sKPiArwqDCoMKgwqDCoMKgwqB1aW50NjRfdCByZXN1bHQ7Cj4gK8Kg wqDCoMKgwqDCoMKgY2hhciAqb3V0cHV0Owo+ICsKPiArwqDCoMKgwqDCoMKgwqBpZ3RfYXNzZXJ0 X2Yob3V0cHV0ID0gZ2V0X2NvcmVkdW1wX2l0ZW0ocmVnZXgsIGxpbmVzLCB0YWcpLCAiVGFyZ2V0 IG5vdCBmb3VuZDolcyIsIHRhZyk7Cj4gK8KgwqDCoMKgwqDCoMKgcmVzdWx0ID0gc3RydG91bChv dXRwdXQsIE5VTEwsIDE2KTsKPiArwqDCoMKgwqDCoMKgwqBpZ3RfZGVidWcoIkNvbXBhcmUgJXM6 ICVzIHZzIFsweCVsWC0weCVsWF1cbiIsIHRhZywgb3V0cHV0LCBhZGRyX2xvLCBhZGRyX2hpKTsK PiArwqDCoMKgwqDCoMKgwqBpZ3RfYXNzZXJ0X2YoKGFkZHJfbG8gPD0gcmVzdWx0KSAmJiAocmVz dWx0IDw9IGFkZHJfaGkpLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCAidmFsdWUgJWxYIG91dCBvZiByYW5nZVsweCVsWC0weCVsWF1cbiIsIHJlc3VsdCwgYWRkcl9s bywgYWRkcl9oaSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGNoZWNrX2l0ZW1fc3RyKHJlZ2V4 X3QgKnJlZ2V4LCBjaGFyICoqbGluZXMsIGNvbnN0IGNoYXIgKnRhZywgY29uc3QgY2hhciAqdGFy Z2V0KQo+ICt7Cj4gK8KgwqDCoMKgwqDCoMKgY2hhciAqb3V0cHV0Owo+ICsKPiArwqDCoMKgwqDC oMKgwqBpZ3RfYXNzZXJ0X2Yob3V0cHV0ID0gZ2V0X2NvcmVkdW1wX2l0ZW0ocmVnZXgsIGxpbmVz LCB0YWcpLCAiVGFyZ2V0IG5vdCBmb3VuZDolcyIsIHRhZyk7Cj4gK8KgwqDCoMKgwqDCoMKgaWd0 X2RlYnVnKCJDb21wYXJlICVzOiAlcyB2cyAlc1xuIiwgdGFnLCBvdXRwdXQsIHRhcmdldCk7Cj4g K8KgwqDCoMKgwqDCoMKgaWd0X2Fzc2VydF9mKCFzdHJjbXAob3V0cHV0LCB0YXJnZXQpLCAiRXhw ZWN0ZWQgdmFsdWU6JXMsIHJlY2VpdmVkOiVzXG4iLCB0YXJnZXQsIG91dHB1dCk7Cj4gK30KPiAr Cj4gK3N0YXRpYyB2b2lkIGNoZWNrX2NhcHR1cmVfb3V0KHJlZ2V4X3QgKnJlZ2V4LCBjaGFyICoq bGluZXMpCj4gK3sKPiArwqDCoMKgwqDCoMKgwqBjaGVja19pdGVtX3N0cihyZWdleCwgbGluZXMs ICJDYXB0dXJlX3NvdXJjZSIsICJHdUMiKTsKPiArwqDCoMKgwqDCoMKgwqBjaGVja19pdGVtX3U2 NChyZWdleCwgbGluZXMsICJBQ1RIRCIsIEJBU0VfQUREUkVTUywKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEJBU0VfQUREUkVTUyArIEJBVENIX0RXX0NPVU5U ICogc2l6ZW9mKHVpbnQzMl90KSk7Cj4gK8KgwqDCoMKgwqDCoMKgY2hlY2tfaXRlbV91NjQocmVn ZXgsIGxpbmVzLCAiUklOR19CQkFERFIiLCBCQVNFX0FERFJFU1MsCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBCQVNFX0FERFJFU1MgKyBCQVRDSF9EV19DT1VO VCAqIHNpemVvZih1aW50MzJfdCkpOwphbGFuOiB3aHkgYXJlIHdlIG5vdCBjaGVja2luZyB0aGUg ZW5naW5lIGluc3RhbmNlIC0gZW5zdXJlIHRoZSBkcm1fcXVldWUncyBlbmdpbmUgKHRoZSBvbmUg d2UganVzdAp0ZXN0ZWQgdG8gaGFuZykgbWF0Y2hlcyB3aGF0ICB0aGUgZGV2Y29yZWR1bXAgZHVt cGVkPwoKPiArfQo+ICsKPiArLyoqCj4gKyAqIFNVQlRFU1Q6IHJlc2V0Cj4gKyAqIERlc2NyaXB0 aW9uOiBSZXNldCBHdUMsIGNoZWNrIGRldmNvcmVkdW1wIG91dHB1dCB2YWx1ZXMKPiArICovCj4g K3N0YXRpYyB2b2lkIHRlc3RfY2FyZChpbnQgZmQpCmFsYW46IG5pdDogbWF5YmUgcmVuYW1lIGZy b20gInRlc3RfY2FyZCIgdG8gc29tZSBhIGJpdCBtb3JlIGRlc2NyaXB0aXZlIGxpa2UKInRyaWdn ZXJfaHdlX3Jlc2V0c19hbmRfdmVyaWZ5X2RldmNvcmVkdW1wIj8KPiArewo+ICvCoMKgwqDCoMKg wqDCoHN0cnVjdCBkcm1feGVfZW5naW5lX2NsYXNzX2luc3RhbmNlICpod2U7Cj4gK8KgwqDCoMKg wqDCoMKgcmVnZXhfdCByZWdleDsKPiArwqDCoMKgwqDCoMKgwqBjaGFyICoqbGluZXM7Cj4gK8Kg wqDCoMKgwqDCoMKgY2hhciAqc2luZ2xlX2xpbmVfYnVmID3CoCAoY2hhciAqKW1hbGxvYyhMSU5F X0JVRl9TSVpFKTsKPiArwqDCoMKgwqDCoMKgwqBjaGFyIHBhdGhbTUFYX1BBVEhfTkFNRV9MRU5d Owo+ICsKPiArwqDCoMKgwqDCoMKgwqBpZ3RfYXNzZXJ0X2Yoc2luZ2xlX2xpbmVfYnVmLCAiT3V0 IG9mIG1lbW9yeS5cbiIpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqByZWdjb21wKCZyZWdleCwgUkVH RVhfS0VZX1ZBTFVFX1BBSVIsIFJFR19FWFRFTkRFRCB8IFJFR19ORVdMSU5FKTsKPiArwqDCoMKg wqDCoMKgwqBnZXRfZGV2Y29yZWR1bXBfcGF0aChpZ3RfZGV2aWNlX2dldF9jYXJkX2luZGV4KGZk KSwgcGF0aCk7Cj4gK8KgwqDCoMKgwqDCoMKgbGluZXMgPSBhbGxvY19saW5lc19idWZmZXIoKTsK PiArCj4gK8KgwqDCoMKgwqDCoMKgLyogY2xlYXIgb2xkIGRldmNvcmVkdW1wLCBpZiBhbnkgKi8K PiArwqDCoMKgwqDCoMKgwqBybV9kZXZjb3JlZHVtcChwYXRoKTsKPiArCj4gK8KgwqDCoMKgwqDC oMKgeGVfZm9yX2VhY2hfZW5naW5lKGZkLCBod2UpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgaWd0X2RlYnVnKCJSdW5uaW5nIG9uIGVuZ2luZSBjbGFzczogJXggaW5zdGFuY2U6 ICV4XG4iLCBod2UtPmVuZ2luZV9jbGFzcywKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGh3ZS0+ZW5naW5lX2luc3RhbmNlKTsKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgdGVzdF9sZWdhY3lfbW9kZShmZCwgaHdlLCAxLCAxLCAwKTsK YWxhbjogbml0OiBtYXliZSByZW5hbWUgdGVzdF9sZWdhY3lfbW9kZSB0byB0cmlnZ2VyX3Jlc2V0 PwphY3R1YWxseSBpIHdvbmRlciBpZiB0aGlzIGVudGlyZSBzdWJ0ZXN0IGNhbiByZXVzZSB0aGUg Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKiBhc3NlcnQgZGV2Y29yZWR1 bXAgY3JlYXRlZCAqLwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZ3RfYXNzZXJ0 X2YoYWNjZXNzX2RldmNvcmVkdW1wKHBhdGgsIGxpbmVzLCBzaW5nbGVfbGluZV9idWYpLAo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgIkRl dmNvcmVkdW1wIG5vdCBleGlzdCwgZXJybm89JWQuXG4iLCBlcnJubyk7Cj4gKwo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjaGVja19jYXB0dXJlX291dCgmcmVnZXgsIGxpbmVzKTsK PiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qIGNsZWFyIGRldmNvcmVkdW1w ICovCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJtX2RldmNvcmVkdW1wKHBhdGgp Owo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzbGVlcCgxKTsKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgLyogQXNzZXJ0IGRldmNvcmVkdW1wIHJlbW92ZWQgKi8KPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWd0X2Fzc2VydF9mKCFhY2Nlc3NfZGV2Y29y ZWR1bXAocGF0aCwgTlVMTCwgTlVMTCksICJEZXZjb3JlZHVtcCBub3QgcmVtb3ZlZFxuIik7Cj4g K8KgwqDCoMKgwqDCoMKgfQo+ICvCoMKgwqDCoMKgwqDCoC8qIEZyZWUgbGluZXMgYnVmZmVyICov Cj4gK8KgwqDCoMKgwqDCoMKgZnJlZShsaW5lcyk7Cj4gK8KgwqDCoMKgwqDCoMKgZnJlZShzaW5n bGVfbGluZV9idWYpOwo+ICvCoMKgwqDCoMKgwqDCoHJlZ2ZyZWUoJnJlZ2V4KTsKPiArfQo+ICsK PiAraWd0X21haW4KPiArewo+ICvCoMKgwqDCoMKgwqDCoGludCB4ZTsKPiArCj4gK8KgwqDCoMKg wqDCoMKgaWd0X2ZpeHR1cmUKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgeGUgPSBk cm1fb3Blbl9kcml2ZXIoRFJJVkVSX1hFKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgaWd0X3N1YnRl c3QoInJlc2V0Iikgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpbnQgZ3B1X2Nv dW50ID0gZHJtX3ByZXBhcmVfZmlsdGVyZWRfbXVsdGlncHUoRFJJVkVSX1hFKTsKPiArCj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlndF9yZXF1aXJlKHhlID4gMCk7Cj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChncHVfY291bnQgPj0gMikgewo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWd0X211bHRpX2ZvcmsoY2hp bGQsIGdwdV9jb3VudCkgewphbGFuOiBpZiB3ZSB3YW50IHRvIGZvcmssIHRoZW4gd2Ugb3VnaHQg dG8gZW5zdXJlIHRoYXQgYW55IGlndF9kZWJ1Zy93YXJuL2Vycm9yL3ByaW50IGZ1bmN0aW9ucwp0 aGF0IHJlcG9ydCBpbXBvcnRhbnQgaW5mbyAoZHVyaW5nIHRoZSBiYXRjaCBidWZmZXIgZXhlY3V0 aW9uIGFuZCByZXRyaWV2YWwgKyB2ZXJpZmljYXRpb24gb2YKdGhlIGRldmNvcmVkdW1wcykgY29u dGFpbiBhIHdheSB0byBkaWZmZXJlbnRpYXRlIHdoaWNoIGZkIHdlIGFyZSByZWZlcmluZyB0by4K UGxlYXNlIGlnbm9yZSB0aGlzIGNvbW1lbnQgaWYgaW4gZmFjdCBpZ3RfZGVidWcgYWxyZWFkeSBo YXMgdGhhdCBidWlsdC1pbi4KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpbnQgZ3B1X2ZkOwo+ICsKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBncHVfZmQg PSBkcm1fb3Blbl9maWx0ZXJlZF9jYXJkKGNoaWxkKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZ3RfYXNzZXJ0X2YoZ3B1 X2ZkID4gMCwgImNhbm5vdCBvcGVuIGdwdS0lZCwgZXJybm89JWRcbiIsIGNoaWxkLAo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBlcnJubyk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWd0X2Fzc2VydChpc194 ZV9kZXZpY2UoZ3B1X2ZkKSk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHRlc3RfY2FyZChncHVfZmQpOwo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGRybV9jbG9zZV9kcml2ZXIoZ3B1X2ZkKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoH0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGlndF93YWl0Y2hpbGRyZW4oKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgfSBlbHNlIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHRlc3RfY2FyZCh4ZSk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oH0KPiArwqDCoMKgwqDCoMKgwqB9Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGlndF9maXh0dXJlCj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRybV9jbG9zZV9kcml2ZXIoeGUpOwo+ICt9 Cj4gZGlmZiAtLWdpdCBhL3Rlc3RzL21lc29uLmJ1aWxkIGIvdGVzdHMvbWVzb24uYnVpbGQKPiBp bmRleCAyZDhjYjg3ZDUuLmI3MjRhN2M2ZCAxMDA2NDQKPiAtLS0gYS90ZXN0cy9tZXNvbi5idWls ZAo+ICsrKyBiL3Rlc3RzL21lc29uLmJ1aWxkCj4gQEAgLTI4NCw2ICsyODQsNyBAQCBpbnRlbF94 ZV9wcm9ncyA9IFsKPiDCoMKgwqDCoMKgwqDCoMKgJ3hlX2V4ZWNfYXRvbWljJywKPiDCoMKgwqDC oMKgwqDCoMKgJ3hlX2V4ZWNfYmFsYW5jZXInLAo+IMKgwqDCoMKgwqDCoMKgwqAneGVfZXhlY19i YXNpYycsCj4gK8KgwqDCoMKgwqDCoMKgJ3hlX2V4ZWNfY2FwdHVyZScsCj4gwqDCoMKgwqDCoMKg wqDCoCd4ZV9leGVjX2NvbXB1dGVfbW9kZScsCj4gwqDCoMKgwqDCoMKgwqDCoCd4ZV9leGVjX2Zh dWx0X21vZGUnLAo+IMKgwqDCoMKgwqDCoMKgwqAneGVfZXhlY19taXhfbW9kZXMnLAo+IC0tIAo+ IDIuMzQuMQo+IAoK