From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by spool.mail.gandi.net (Postfix) with ESMTPS id 46976AC12E3 for ; Wed, 20 Dec 2023 09:44:10 +0000 (UTC) DKIM-Signature: a=rsa-sha256; bh=R6QkSozdJ18MD26Pp2xeH5j1S7jAdxta5dgtuizYZlw=; c=relaxed/simple; d=groups.io; h=ARC-Seal:ARC-Message-Signature:ARC-Authentication-Results:From:To:CC:Subject:Thread-Topic:Thread-Index:Date:Message-ID:References:In-Reply-To:Accept-Language:MIME-Version:Precedence:List-Subscribe:List-Help:Sender:List-Id:Mailing-List:Delivered-To:Reply-To:List-Unsubscribe-Post:List-Unsubscribe:Content-Language:Content-Type:Content-Transfer-Encoding; s=20140610; t=1703065449; v=1; b=EZN0V9D8TmR6Rqe7QPw0X25oHa5TCHgzX6Li1Bblnn923jL+2WVcX62ns1rbZXeWlV3tanLj RDb524JhzN6gjqWQ7Kfm21c9/uOcT3PY1RkcghM5Rj9zh/iFmShSj6t2wr9jD8zfOF0ezQWStuK oD0cHL19SZ5k0ZH9N56cXlf4= X-Received: by 127.0.0.2 with SMTP id 8AacYY7687511x4a8mYv4Yyz; Wed, 20 Dec 2023 01:44:09 -0800 X-Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.13]) by mx.groups.io with SMTP id smtpd.web11.18294.1703065448275659788 for ; Wed, 20 Dec 2023 01:44:08 -0800 X-IronPort-AV: E=McAfee;i="6600,9927,10929"; a="2880884" X-IronPort-AV: E=Sophos;i="6.04,291,1695711600"; d="scan'208";a="2880884" X-Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orvoesa105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 20 Dec 2023 01:44:07 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10929"; a="899666987" X-IronPort-AV: E=Sophos;i="6.04,291,1695711600"; d="scan'208";a="899666987" X-Received: from orsmsx601.amr.corp.intel.com ([10.22.229.14]) by orsmga004.jf.intel.com with ESMTP/TLS/AES256-GCM-SHA384; 20 Dec 2023 01:44:07 -0800 X-Received: from orsmsx611.amr.corp.intel.com (10.22.229.24) 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.35; Wed, 20 Dec 2023 01:44:06 -0800 X-Received: from orsedg603.ED.cps.intel.com (10.7.248.4) by orsmsx611.amr.corp.intel.com (10.22.229.24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35 via Frontend Transport; Wed, 20 Dec 2023 01:44:06 -0800 X-Received: from NAM12-BN8-obe.outbound.protection.outlook.com (104.47.55.168) by edgegateway.intel.com (134.134.137.100) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.35; Wed, 20 Dec 2023 01:44:06 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Oo+p03Sbtqyk0IN6qcx9FsuE4hOlS75bL6IBhUy4armpHZ016FLXyd+t+qycoGT72G8ussGdRQchYckhVY1/YLpZEO1iwT7m8+aQ2phk4PKeZ0stb2jCJQD+oIbPv3e5cYDKmFm42b6sFs3aqY8WdiR1MH5gV4eR0ZP0BJ3mO2fT1k0+NNcgH8vLLSBLHgmsdsURDEJ5SlFyedAgY0erOxSUC9eMZzNIroKT0n+XJEiVrXQr1D1zIgwgWB8atpDLQA04MdzzBnn1hVQLLpWbc6bjRxHm3ZZ7oIdaVJkZirmamd4a8tYbm8YpBzuE2M/fv5I6/vlphMzQ/zKu5t0NbQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=sj/2I6liJkgaysBPNPqJ+HEB90YhpuXW2XsfHoG3UFU=; b=cenHK+2NRhG2AUoaVi38y0HF634dl87CfLIfQBOOQKeWPtVJRgdDzzBAN21JLwRrxNSfD25s8ATBqBtK+Q3y6+DUibS4DPwRjisK5C2S0CqkG48ih+5N09wPnZyedmBaKweGGb3sKyVsjAW1zbJ9nYo8/IFN/y3UqpvH1D/C0ssPpZuN9VK05OLaJH7lfZTiha9yJXlhVCcx6FDbo8p0uKRzWtzTODv1Q7Agqhez/5PYzUgSsa2oFaWJwJYbUF40a5eTtS++YlT204SQbBPaH/gs8fe+DGvj2SdXXbdKrpNBgXDF3vI1GQr9TyiqKPrZ8Dxpp0yciAjtvMEYWgWnyg== 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 X-Received: from MN6PR11MB8244.namprd11.prod.outlook.com (2603:10b6:208:470::14) by SJ0PR11MB4813.namprd11.prod.outlook.com (2603:10b6:a03:2df::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7113.18; Wed, 20 Dec 2023 09:44:03 +0000 X-Received: from MN6PR11MB8244.namprd11.prod.outlook.com ([fe80::b614:1f5e:8b0c:9858]) by MN6PR11MB8244.namprd11.prod.outlook.com ([fe80::b614:1f5e:8b0c:9858%4]) with mapi id 15.20.7091.034; Wed, 20 Dec 2023 09:44:03 +0000 From: "Ni, Ray" To: Ard Biesheuvel , "devel@edk2.groups.io" CC: "lichao@loongson.cn" , "Kumar, Rahul R" , Gerd Hoffmann , Leif Lindholm , Ard Biesheuvel , Sami Mujawar Subject: Re: [edk2-devel] [PATCH v4 19/37] UefiCpuPkg: Add MMIO method in CpuIo2Dxe Thread-Topic: [edk2-devel] [PATCH v4 19/37] UefiCpuPkg: Add MMIO method in CpuIo2Dxe Thread-Index: AQHaMnwmrO5JQp/6yES0lV3La77QdbCxZvoggABj1QCAAB61MA== Date: Wed, 20 Dec 2023 09:44:03 +0000 Message-ID: References: <20231212130932.2467028-1-lichao@loongson.cn> <17A017C201FEB90D.32321@groups.io> <9014a7b3-095c-42b1-a9ef-5a388818385d@loongson.cn> In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: MN6PR11MB8244:EE_|SJ0PR11MB4813:EE_ x-ms-office365-filtering-correlation-id: d402c8ff-0c2a-4715-3cf9-08dc014033ae x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam-message-info: Df+Q4XSOX78Rnb+0ErwC4hMN+kzN/yF9vSaoxm+4rAYRVNnoW+JCCMvFlNQ7WScgMQCUIFbusw8IITSl/f8oYpNS3SNWFL/KEW27lDgCvznBwmqZ96aVs7ZlSILEM6CpV3XQHL6Ar7dYDGS3PBuo4Jru3cOPpdohjTe96LFRrSxpljIpO1K465tlQXitxF+Ak8XjOOBdxpVHRu/8Fhww0MV33xpleWmy9TkM5J6UkEAPTFgHnWEyYnH9OsvaOIQtsjUdJR6XF6JlgnifPQ0Ris0UBo72sQHrko0qA+zdEoNp6wGu0ejVoD4i7ZPtBsKdy0ZD7DHx0P8ZLGuKZuV1QRSdGlqjc1a+EIY20jQbXgfaks19R9ggQCHpfSBREgboGNXOo//+/BDfQEBVanw6ip8tsZrMpPk3Q+sH/nzjpsmadDc4/HP7hPh9Glsm4TgCukSgLCrHW9u4/7HHlFVrNK4mq0e5LKaD9BPs1KW6z5CNXu/5Ibe/qNAn5fAFNTXV+/wsvXFKfBwvPOfV2K3D731jXxCUe7NHTWOiILHGPmRVLL4IVW032VAtg4SZ8TymOzhLNkQ9sj/GTncJgQXTu6SbaWvUMbyda0Ak2RzdpEo= x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?REV0ektXOVd3UTJFN2ZqVEtISG1HZFdvbVJUR2RCMitEZGsxMHZvVXhld0FZ?= =?utf-8?B?czgvUkpiY010ZnhKUlF2WllCTnhCVG9EbEhuWHpLNlQzNnRVb01vK3ZZZ1lY?= =?utf-8?B?cC8zOXllZzBTejVvdTZxYWpMZk1QZlpKK3FOZmV4VFp3VXZTWHF4SmZHbDVq?= =?utf-8?B?TWpzTkFtWXhoZ2hEUXh3VDV2WmFKTGNENGw1bXVQcy85SjkxL2VreVNhUURS?= =?utf-8?B?VTNYbDJrSUgzSnJINWNHMjNkQi93SkVvVTBQSFc0RW5CRUtoK2t4SDFtNTds?= =?utf-8?B?d2dzdWVLc2JrMWppK1VCL1diRFZZZnpsZTdvLzRYa1RWcVl4TzJhRUJRTGxU?= =?utf-8?B?NXB5QnBtUFlzTXkwaUhHM1Y5bW1kUkFyQzRIbDdzMkhlQVhvQzY3Vno0OFho?= =?utf-8?B?QkFnYjFZdVpuSy9GWDNkdHZnYzJVRW5udFRNZEx1blBlYkxMS2RGSGdLZ2lL?= =?utf-8?B?Ny9FcnZUMVdzcTlhL1c2clE2dkhjRk8xUkRnVzlaWWVFWWpqamh3VzR5dk41?= =?utf-8?B?UG02VWtMTElTKysxRjgvV2VBZHk2YnNlMEdhc0xVM0NLcDVTbjRyMTIwYy83?= =?utf-8?B?cklnb24vWlFpQ2VueGV6N2JrdTUrZXk5ZDluc1JLSVU1Smkyamd6S1VYMVZU?= =?utf-8?B?RmpkNU9TMWlnVWszR3VBRkhkK0JNK1UvTGsra1JGb3ZKaDNSOSthbUFNeEkv?= =?utf-8?B?QmF1Uko1T1hSNHhlSUxrSzA0b3hJbFJIN2ZmVmViYkdNZ2ZrNFJFemVhMitX?= =?utf-8?B?bkh4U0l5MDBrQmdrTG1yQ0NsZkcrUGdGYTJnWjdkaXVPYzB4WG5TNkxkMDNG?= =?utf-8?B?b294VjhIU2xlZjRYam9rYVVtdGNqelY0Nm82WjBFRVA2aDBTVmxxQzlpWGs5?= =?utf-8?B?VW1aeFJIb1JCSjZNNktBU0JpVlNNVEk5TDRPalU4WndTbVZyc2dGZnQrNExO?= =?utf-8?B?Qi8xWTV2cTVPMXphU0J0SXRkWXdrbkVUOWZiUUd0Z3BUTFFQMWs3YkRTSzlx?= =?utf-8?B?Y1NXM2FWUUtVb1lTNjc4cXNHaWZSREczZVF3Y1Q0TGF0TEdmWktpcEtmUVVE?= =?utf-8?B?TWlHYmhGQWNHS1JrSTFsUUYwWE5lY21sTVNQYnQ0NTVmVnI3UGJkQW9wK3R1?= =?utf-8?B?Q2RHeStKNnEzSWcraDViTVc3QVp0bml0WkJZUnVOUUppM1dWNThZdFlqeHUz?= =?utf-8?B?ZVJnK0cwbFcwcmNoOUlhKzFWdXB5MUsrbDdUM0ZSRTNMRUFremo1SXVmazk2?= =?utf-8?B?cmErY0R5Q3ROaVA0bGdqajVieGdrQ1NWOGpKeDRnVjQ2V2hvaEg4MVQ1SFRs?= =?utf-8?B?RlFocHJHVXVKTXZnK1FZZUFxcXEwRzV4ZE9SbFhrUlUzenM2ckNoZVRyR01z?= =?utf-8?B?WGpzOTZ4c2x6aVJENEQ2c0g0UDZxTm15TWZ0NGk5UFRsK2JLRGUvNHpVTmxO?= =?utf-8?B?L2VoanhzVHVuWlMyNFQ3MTgwU2ZwLzY0M1FDVFY0SE52NnFQTWhNVjRYWDB2?= =?utf-8?B?a3pYOEh0MWpRUSt2NndSbnovSzg0SGd2elJ5Z3RKY0NzK3VBWDE5ZUpjSGgx?= =?utf-8?B?cStvQXQwYWp5c2luSkxzWGxRZ3pZT09XcWdQQlZWVC9za201RmRrS0l6ZVU5?= =?utf-8?B?U1kxVFQ1M2pOcmxrR2haK0d1czd6NFdNZm5VcENYMUR6R2w0dmVUamRzanRz?= =?utf-8?B?c1NSanFYUnVkbFd2TU5YM1RpMG9NdzRDSmZTL001TnNiMHA4TzdFcWtYQ1Z0?= =?utf-8?B?N2dXTFRUQjBITVRUd1N4WU9rOWw5VHdwdWVMODVsT0lRNCtXVXh3cEdXNXF2?= =?utf-8?B?U1VmZHRUUjdmcHBEd2FaaTlSKzg2RWJ4S0tpSStwLzZVWDJVai9MQmEzSjZ4?= =?utf-8?B?TzlNVTViU0M2MlRKbFVva3Zwa25VZFJjdnBDNWRtb1RHUFAya2JpQjNSU1dT?= =?utf-8?B?T1BPMzBkVHlLbGdYTUVnaUZGRnhxZWczYjhGRDRWa2JxWXhzQ2sxUURMMkNI?= =?utf-8?B?aHpUMHREZ25tb1NERTRBWlR3ZVNmTmxYc3F0eDhONC9nUisxcWhsT2p4eTNK?= =?utf-8?B?TWpvOHZsREZNOHBXSlhQM29CSm9EYnVMZ1ZRcS94NzhLbTFuNlNYT29kcTd5?= =?utf-8?Q?WCjQ=3D?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MN6PR11MB8244.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: d402c8ff-0c2a-4715-3cf9-08dc014033ae X-MS-Exchange-CrossTenant-originalarrivaltime: 20 Dec 2023 09:44:03.5884 (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: TtecdKvnBwANrsl/8mz1HkRah7y9F1QvCNiPLjtrNef1UH266AgrTawaL3X9d+IItNBbtnRl4O5AWrBGJeFFbg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR11MB4813 X-OriginatorOrg: intel.com Precedence: Bulk List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,ray.ni@intel.com List-Unsubscribe-Post: List-Unsubscribe=One-Click List-Unsubscribe: X-Gm-Message-State: NbHUMhWJr1MDeL7kqrx1xapOx7686176AA= Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 X-GND-Status: LEGIT Authentication-Results: spool.mail.gandi.net; dkim=pass header.d=groups.io header.s=20140610 header.b=EZN0V9D8; arc=reject ("signature check failed: fail, {[1] = sig:microsoft.com:reject}"); dmarc=fail reason="SPF not aligned (relaxed), DKIM not aligned (relaxed)" header.from=intel.com (policy=none); spf=pass (spool.mail.gandi.net: domain of bounce@groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce@groups.io QXJkLA0KTGV0IG1lIHRyeSB0byB1bmRlcnN0YW5kOg0KDQoxLiBDUFUgZG9lcyBub3Qgc3VwcG9y dCBJTyBpbnN0cnVjdGlvbnMgdG8gYWNjZXNzIElPIHBvcnRzLg0KMi4gUENJIGRldmljZXMgY29u dGFpbiBJTyBzcGFjZS4NCjMuIEEgc3BlY2lhbCBQQ0kgaG9zdCBicmlkZ2UgY2FuIGJlIGNvbmZp Z3VyZWQgdG8gbWFwIGEgcmFuZ2Ugb2YgTU1JTyBzcGFjZSBmcm9tIENQVSBzaWRlIHRvIGFub3Ro ZXIgcmFuZ2Ugb2YgSU8gc3BhY2UgdG8gUENJIGRldmljZSBzaWRlLg0KDQpJZiBhYm92ZSBpcyBy aWdodCwgSSBjYW4gaW1hZ2luZSB3aGF0IHByb2JsZW0gQ2hhbyBpcyB0cnlpbmcgdG8gc29sdmUu DQpUaGVyZSBhcmUgZm9sbG93aW5nIGZhY3RzOg0KNC4gTWRlTW9kdWxlUGtnL1BjaUhvc3RCcmlk Z2UgZHJpdmVyIHByb2R1Y2VzIFBjaVJvb3RCcmlkZ2VJby0+SW8oKSBzZXJ2aWNlIHdoaWNoIGRp cmVjdGx5IGNhbGxzIHRvIENwdUlvLT5JbygpDQoNCkkgZ3Vlc3MgQ2hhbyBhcmUgdXNpbmcgTWRl TW9kdWxlUGtnL1BjaUhvc3RCcmlkZ2UgZHJpdmVyLg0KDQpJIGFncmVlIHdpdGggQXJkIHRoYXQg dGhlIHByb3BlciBwbGFjZSB0byBjaGFuZ2UvaG9vayB0aGUgSU8gYWNjZXNzIGlzIGluc2lkZSBQ Y2lIb3N0QnJpZGdlIGRyaXZlciBpbnN0ZWFkIG9mIENwdUlvMkR4ZSBpZiB0aGUgb25seSBJTyBh Y2Nlc3MgaXMgZnJvbSBQQ0kgZGV2aWNlIGRyaXZlci4NCg0KVGhlbiBQY2lIb3N0QnJpZGdlRHhl IGRyaXZlciBjb3VsZCBiZSBlbmhhbmNlZCB0byBob25vciB0aGUgTU1JTy10by1JTyBtYXBwaW5n IGFuZCBvbmx5IHRyYW5zbGF0ZSB0aGUgSU8gcmVxdWVzdCB0byBNTUlPIHdoaWNoIGJlbG9uZ3Mg dG8gdGhlIElPIHdpbmRvdy4NCg0KVGhhbmtzLA0KUmF5DQo+IC0tLS0tT3JpZ2luYWwgTWVzc2Fn ZS0tLS0tDQo+IEZyb206IEFyZCBCaWVzaGV1dmVsIDxhcmRiQGtlcm5lbC5vcmc+DQo+IFNlbnQ6 IFdlZG5lc2RheSwgRGVjZW1iZXIgMjAsIDIwMjMgMzo0MSBQTQ0KPiBUbzogZGV2ZWxAZWRrMi5n cm91cHMuaW87IE5pLCBSYXkgPHJheS5uaUBpbnRlbC5jb20+DQo+IENjOiBsaWNoYW9AbG9vbmdz b24uY247IEt1bWFyLCBSYWh1bCBSIDxyYWh1bC5yLmt1bWFyQGludGVsLmNvbT47IEdlcmQNCj4g SG9mZm1hbm4gPGtyYXhlbEByZWRoYXQuY29tPjsgTGVpZiBMaW5kaG9sbSA8cXVpY19sbGluZGhv bEBxdWljaW5jLmNvbT47DQo+IEFyZCBCaWVzaGV1dmVsIDxhcmRiK3RpYW5vY29yZUBrZXJuZWwu b3JnPjsgU2FtaSBNdWphd2FyDQo+IDxzYW1pLm11amF3YXJAYXJtLmNvbT4NCj4gU3ViamVjdDog UmU6IFtlZGsyLWRldmVsXSBbUEFUQ0ggdjQgMTkvMzddIFVlZmlDcHVQa2c6IEFkZCBNTUlPIG1l dGhvZA0KPiBpbiBDcHVJbzJEeGUNCj4gDQo+IE9uIFdlZCwgMjAgRGVjIDIwMjMgYXQgMDI6NTcs IE5pLCBSYXkgPHJheS5uaUBpbnRlbC5jb20+IHdyb3RlOg0KPiA+DQo+ID4gSXTigJlzIG5ldyB0 byBtZSB0aGF0IFBDSSBJTyAobm90IE1NSU8pIHNwYWNlIGlzIGFjY2Vzc2VkIHRocm91Z2ggTU1J Ty4NCj4gPg0KPiA+IFBDSUUgc3BlYyBkZWZpbmVzIGRpZmZlcmVudCBUTFAgdHlwZXMgZm9yIE1l bW9yeSBhbmQgSS9PIHJlcXVlc3QgaW4NCj4gVHJhbnNhY3Rpb24gTGF5ZXIgY2hhcHRlci4NCj4g Pg0KPiA+IElmIENwdUlvRHhlIGRyaXZlciBpc3N1ZXMgTWVtb3J5IHJlcXVlc3QgdG8gYSBJTyBz cGFjZSBpbnNpZGUgYSBQQ0lFIGRldmljZSwNCj4gaG93IGRvZXMgUENJRSBkZXZpY2UgY2xhaW0g dGhlIFRQTCBwYWNrZXQgYW5kIHJlc3BvbnNlPw0KPiA+DQo+IA0KPiBIZWxsbyBSYXksDQo+IA0K PiBPbiB0aGUgb3Bwb3NpdGUgc2lkZSBvZiB0aGUgUENJIGhvc3QgYnJpZGdlLCB0aGVzZSBhcmUg YWxsIHBvcnQgSS9PDQo+IHRyYW5zYWN0aW9ucywgYW5kIHRoZSBlbmRwb2ludCBpcyBub3QgYXdh cmUgb2YgdGhlIGRpc3RpbmN0aW9uIGJldHdlZW4NCj4gbmF0aXZlIHBvcnQgSS9PIGFuZCB0cmFu c2xhdGVkIHBvcnQgSS9PLg0KPiANCj4gQVJNIENQVXMgZG8gbm90IGltcGxlbWVudCBwb3J0IEkv TyBhdCBhbGwsIGFuZCBzbyBldmVyeSBob3N0IGJyaWRnZQ0KPiB0aGF0IGltcGxlbWVudHMgcG9y dCBJL08gc3VwcG9ydCBvbiB0aGUgUENJIHNpZGUgZG9lcyBzbyBieSBleHBvc2luZyBhDQo+IHNw ZWNpYWwgTU1JTyByZXNvdXJjZSB3aW5kb3cgaW4gdGhlIENQVSBwaHlzaWNhbCBhZGRyZXNzIHNw YWNlIHRoYXQNCj4gZ2V0cyB0cmFuc2xhdGVkIHRvIHBvcnQgSS9PIGFjY2Vzc2VzIGF0IHRoZSBv cHBvc2l0ZSBzaWRlLg0KPiANCj4gVGhpcyBtZWFucyB0aGF0IGFuIGltcGxlbWVudGF0aW9uIG9m IHRoZSBDcHVJbzIgcHJvdG9jb2wgY2FuIG9ubHkgYmUNCj4gcHJvdmlkZWQgaW4gYSBtZWFuaW5n ZnVsIHdheSBpZiB0aGVyZSBhcmUgcG9ydCBJL08gY2FwYWJsZSBQQ0kgaG9zdA0KPiBicmlkZ2Vz IGluIHRoZSBzeXN0ZW0sIGFuZCBzb21lIGJvb2trZWVwaW5nIGlzIG5lZWRlZCB0byBrZWVwIHRy YWNrIG9mDQo+IHRoZSBtYXBwaW5nIGJldHdlZW4gdGhlIHNwZWNpYWwgTU1JTyByYW5nZXMgb24g dGhlIENQVSBzaWRlIGFuZCB0aGUNCj4gcG9ydCBJL08gcmFuZ2VzIG9uIHRoZSBQQ0kgc2lkZS4g Tm90ZSB0aGF0IHRoaXMgaXMgbm90IHNvIGRpZmZlcmVudA0KPiBmcm9tIE1NSU8gdHJhbnNsYXRp b24sIHdoZXJlIHRoZSBtYXBwaW5nIGJldHdlZW4gTU1JTyBpcyBub3QgMToxDQo+IGJldHdlZW4g Q1BVIGFuZCBQQ0kuDQo+IA0KPiBUaGF0IHNhaWQsIEkgYW0gbm90IHN1cmUgSSBmb2xsb3cgd2h5 IFBjZFBjaUlvVHJhbnNsYXRpb25Jc0VuYWJsZWQgaXMNCj4gbmVlZGVkLiBNTUlPIHRyYW5zbGF0 aW9uIGFuZCBJTyB0cmFuc2xhdGlvbiBhcmUgYm90aCBwcm9wZXJ0aWVzIG9mIHRoZQ0KPiBQQ0kg aG9zdCBicmlkZ2UgaW1wbGVtZW50YXRpb24sIHNvIGhhdmluZyBhIHN5c3RlbSB3aWRlIFBDRCBm b3IgdGhpcw0KPiBzZWVtcyB1bm5lY2Vzc2FyeSB0byBtZS4gQnV0IHBlcmhhcHMgSSBtaXNzZWQg c29tZXRoaW5nPw0KPiANCj4gDQo+IA0KPiA+DQo+ID4gRnJvbTogQ2hhbyBMaSA8bGljaGFvQGxv b25nc29uLmNuPg0KPiA+IFNlbnQ6IFR1ZXNkYXksIERlY2VtYmVyIDE5LCAyMDIzIDk6MDQgUE0N Cj4gPiBUbzogZGV2ZWxAZWRrMi5ncm91cHMuaW87IE5pLCBSYXkgPHJheS5uaUBpbnRlbC5jb20+ DQo+ID4gQ2M6IEt1bWFyLCBSYWh1bCBSIDxyYWh1bC5yLmt1bWFyQGludGVsLmNvbT47IEdlcmQg SG9mZm1hbm4NCj4gPGtyYXhlbEByZWRoYXQuY29tPjsgTGVpZiBMaW5kaG9sbSA8cXVpY19sbGlu ZGhvbEBxdWljaW5jLmNvbT47IEFyZA0KPiBCaWVzaGV1dmVsIDxhcmRiK3RpYW5vY29yZUBrZXJu ZWwub3JnPjsgU2FtaSBNdWphd2FyDQo+IDxzYW1pLm11amF3YXJAYXJtLmNvbT4NCj4gPiBTdWJq ZWN0OiBSZTogW2VkazItZGV2ZWxdIFtQQVRDSCB2NCAxOS8zN10gVWVmaUNwdVBrZzogQWRkIE1N SU8gbWV0aG9kDQo+IGluIENwdUlvMkR4ZQ0KPiA+DQo+ID4NCj4gPg0KPiA+IEhpIFJheSwNCj4g Pg0KPiA+IENhbiB5b3UgcGxlYXNlIHJldmlldyB0aGlzIHBhdGNoPyBUaGFuayB5b3UhDQo+ID4N Cj4gPg0KPiA+DQo+ID4gVGhhbmtzLA0KPiA+IENoYW8NCj4gPg0KPiA+IE9uIDIwMjMvMTIvMTIg MjE6MTIsIENoYW8gTGkgd3JvdGU6DQo+ID4NCj4gPiBDcHVJbzJEeGUgb25seSBzdXBwb3J0cyBJ TyB0byBhY2Nlc3MgUENJIElPLiBTb21lIEFSQ0ggcmVxdWlyZXMNCj4gPg0KPiA+IE1NSU8gdG8g YWNjZXNzIFBDSSBJTywgYWRkIHRoZSBNTUlPIGFjY2VzcyBtZXRob2QgaW4gQ3B1SW8yRHhlLg0K PiA+DQo+ID4NCj4gPg0KPiA+IFRoZSBNTUlPIG1ldGhvZHMgZGVwZW5kIG9uIFBjZFBjaUlvVHJh bnNsYXRpb25Jc0VuYWJsZWQgYW5kDQo+ID4NCj4gPiBQY2RQY2lJb1RyYW5zTGF0aW9uLiBUaGUg Y29kZSBpcyByZWZlcmVuY2VkIGZyb20gQXJtUGtnLg0KPiA+DQo+ID4NCj4gPg0KPiA+IEJ1aWxk LXRlc3RlZCBvbmx5ICh3aXRoICJPdm1mUGtnWDY0LmRzYyIpLg0KPiA+DQo+ID4NCj4gPg0KPiA+ IEJaOiBodHRwczovL2J1Z3ppbGxhLnRpYW5vY29yZS5vcmcvc2hvd19idWcuY2dpP2lkPTQ1ODQN Cj4gPg0KPiA+DQo+ID4NCj4gPiBDYzogUmF5IE5pIDxyYXkubmlAaW50ZWwuY29tPg0KPiA+DQo+ ID4gQ2M6IFJhaHVsIEt1bWFyIDxyYWh1bDEua3VtYXJAaW50ZWwuY29tPg0KPiA+DQo+ID4gQ2M6 IEdlcmQgSG9mZm1hbm4gPGtyYXhlbEByZWRoYXQuY29tPg0KPiA+DQo+ID4gQ2M6IExlaWYgTGlu ZGhvbG0gPHF1aWNfbGxpbmRob2xAcXVpY2luYy5jb20+DQo+ID4NCj4gPiBDYzogQXJkIEJpZXNo ZXV2ZWwgPGFyZGIrdGlhbm9jb3JlQGtlcm5lbC5vcmc+DQo+ID4NCj4gPiBDYzogU2FtaSBNdWph d2FyIDxzYW1pLm11amF3YXJAYXJtLmNvbT4NCj4gPg0KPiA+IFNpZ25lZC1vZmYtYnk6IENoYW8g TGkgPGxpY2hhb0Bsb29uZ3Nvbi5jbj4NCj4gPg0KPiA+IC0tLQ0KPiA+DQo+ID4gIFVlZmlDcHVQ a2cvQ3B1SW8yRHhlL0NwdUlvMkR4ZS5jICAgfCAxNDkNCj4gKysrKysrKysrKysrKysrKysrKy0t LS0tLS0tLS0NCj4gPg0KPiA+ICBVZWZpQ3B1UGtnL0NwdUlvMkR4ZS9DcHVJbzJEeGUuaCAgIHwg ICAyICsNCj4gPg0KPiA+ICBVZWZpQ3B1UGtnL0NwdUlvMkR4ZS9DcHVJbzJEeGUuaW5mIHwgICA4 ICstDQo+ID4NCj4gPiAgVWVmaUNwdVBrZy9DcHVJbzJEeGUvQ3B1SW8yRHhlLnVuaSB8ICAgMiAr DQo+ID4NCj4gPiAgNCBmaWxlcyBjaGFuZ2VkLCAxMTEgaW5zZXJ0aW9ucygrKSwgNTAgZGVsZXRp b25zKC0pDQo+ID4NCj4gPg0KPiA+DQo+ID4gZGlmZiAtLWdpdCBhL1VlZmlDcHVQa2cvQ3B1SW8y RHhlL0NwdUlvMkR4ZS5jDQo+IGIvVWVmaUNwdVBrZy9DcHVJbzJEeGUvQ3B1SW8yRHhlLmMNCj4g Pg0KPiA+IGluZGV4IDg3ZjRmODA1Y2EuLmNkMzE5NzdhZjIgMTAwNjQ0DQo+ID4NCj4gPiAtLS0g YS9VZWZpQ3B1UGtnL0NwdUlvMkR4ZS9DcHVJbzJEeGUuYw0KPiA+DQo+ID4gKysrIGIvVWVmaUNw dVBrZy9DcHVJbzJEeGUvQ3B1SW8yRHhlLmMNCj4gPg0KPiA+IEBAIC0zLDYgKzMsOCBAQA0KPiA+ DQo+ID4NCj4gPg0KPiA+ICBDb3B5cmlnaHQgKGMpIDIwMDkgLSAyMDE4LCBJbnRlbCBDb3Jwb3Jh dGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ID4NCj4gPiAgQ29weXJpZ2h0IChjKSAy MDE3LCBBTUQgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gPg0KPiA+ ICtDb3B5cmlnaHQgKGMpIDIwMTYsIExpbmFybyBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJS Pg0KPiA+DQo+ID4gK0NvcHlyaWdodCAoYykgMjAyMyBMb29uZ3NvbiBUZWNobm9sb2d5IENvcnBv cmF0aW9uIExpbWl0ZWQuIEFsbCByaWdodHMNCj4gcmVzZXJ2ZWQuPEJSPg0KPiA+DQo+ID4NCj4g Pg0KPiA+ICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiA+ DQo+ID4NCj4gPg0KPiA+IEBAIC0xNDksNyArMTUxLDcgQEAgQ3B1SW9DaGVja1BhcmFtZXRlciAo DQo+ID4NCj4gPiAgICAvLw0KPiA+DQo+ID4gICAgLy8gU2luY2UgTUFYX0FERFJFU1MgY2FuIGJl IHRoZSBtYXhpbXVtIGludGVnZXIgdmFsdWUgc3VwcG9ydGVkDQo+IGJ5IHRoZSBDUFUgYW5kIENv dW50DQo+ID4NCj4gPiAgICAvLyBjYW4gYWxzbyBiZSB0aGUgbWF4aW11bSBpbnRlZ2VyIHZhbHVl IHN1cHBvcnRlZCBieSB0aGUgQ1BVLCB0aGlzDQo+IHJhbmdlDQo+ID4NCj4gPiAtICAvLyBjaGVj ayBtdXN0IGJlIGFkanVzdGVkIHRvIGF2b2lkIGFsbCBvdmVmbG93IGNvbmRpdGlvbnMuDQo+ID4N Cj4gPiArICAvLyBjaGVjayBtdXN0IGJlIGFkanVzdGVkIHRvIGF2b2lkIGFsbCBvdmVyZmxvdyBj b25kaXRpb25zLg0KPiA+DQo+ID4gICAgLy8NCj4gPg0KPiA+ICAgIC8vIFRoZSBmb2xsb3dpbmcg Zm9ybSBvZiB0aGUgcmFuZ2UgY2hlY2sgaXMgZXF1aXZhbGVudCBidXQgYXNzdW1lcyB0aGF0DQo+ ID4NCj4gPiAgICAvLyBNQVhfQUREUkVTUyBhbmQgTUFYX0lPX1BPUlRfQUREUkVTUyBhcmUgb2Yg dGhlIGZvcm0gKDJebiAtDQo+IDEpLg0KPiA+DQo+ID4gQEAgLTM5OCw2ICs0MDAsMTggQEAgQ3B1 SW9TZXJ2aWNlUmVhZCAoDQo+ID4NCj4gPiAgICBFRklfQ1BVX0lPX1BST1RPQ09MX1dJRFRIICBP cGVyYXRpb25XaWR0aDsNCj4gPg0KPiA+ICAgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICpV aW50OEJ1ZmZlcjsNCj4gPg0KPiA+DQo+ID4NCj4gPiArICBVSU5UOCBFRklBUEkgICgqQ3B1SW9S ZWFkOCkgKA0KPiA+DQo+ID4gKyAgICBVSU5UTg0KPiA+DQo+ID4gKyAgICApOw0KPiA+DQo+ID4g Kw0KPiA+DQo+ID4gKyAgVUlOVDE2IEVGSUFQSSAgKCpDcHVJb1JlYWQxNikgKA0KPiA+DQo+ID4g KyAgICBVSU5UTg0KPiA+DQo+ID4gKyAgICApOw0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgVUlO VDMyIEVGSUFQSSAgKCpDcHVJb1JlYWQzMikgKA0KPiA+DQo+ID4gKyAgICBVSU5UTg0KPiA+DQo+ ID4gKyAgICApOw0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gICAgU3RhdHVzID0gQ3B1SW9DaGVja1Bh cmFtZXRlciAoRkFMU0UsIFdpZHRoLCBBZGRyZXNzLCBDb3VudCwgQnVmZmVyKTsNCj4gPg0KPiA+ ICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPg0KPiA+ICAgICAgcmV0dXJuIFN0YXR1 czsNCj4gPg0KPiA+IEBAIC00MTAsMzcgKzQyNCw0OCBAQCBDcHVJb1NlcnZpY2VSZWFkICgNCj4g Pg0KPiA+ICAgIE91dFN0cmlkZSAgICAgID0gbU91dFN0cmlkZVtXaWR0aF07DQo+ID4NCj4gPiAg ICBPcGVyYXRpb25XaWR0aCA9IChFRklfQ1BVX0lPX1BST1RPQ09MX1dJRFRIKShXaWR0aCAmIDB4 MDMpOw0KPiA+DQo+ID4NCj4gPg0KPiA+IC0gIC8vDQo+ID4NCj4gPiAtICAvLyBGaWZvIG9wZXJh dGlvbnMgc3VwcG9ydGVkIGZvciAobUluU3RyaWRlW1dpZHRoXSA9PSAwKQ0KPiA+DQo+ID4gLSAg Ly8NCj4gPg0KPiA+IC0gIGlmIChJblN0cmlkZSA9PSAwKSB7DQo+ID4NCj4gPiAtICAgIHN3aXRj aCAoT3BlcmF0aW9uV2lkdGgpIHsNCj4gPg0KPiA+IC0gICAgICBjYXNlIEVmaUNwdUlvV2lkdGhV aW50ODoNCj4gPg0KPiA+IC0gICAgICAgIElvUmVhZEZpZm84ICgoVUlOVE4pQWRkcmVzcywgQ291 bnQsIEJ1ZmZlcik7DQo+ID4NCj4gPiAtICAgICAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ID4N Cj4gPiAtICAgICAgY2FzZSBFZmlDcHVJb1dpZHRoVWludDE2Og0KPiA+DQo+ID4gLSAgICAgICAg SW9SZWFkRmlmbzE2ICgoVUlOVE4pQWRkcmVzcywgQ291bnQsIEJ1ZmZlcik7DQo+ID4NCj4gPiAt ICAgICAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ID4NCj4gPiAtICAgICAgY2FzZSBFZmlDcHVJ b1dpZHRoVWludDMyOg0KPiA+DQo+ID4gLSAgICAgICAgSW9SZWFkRmlmbzMyICgoVUlOVE4pQWRk cmVzcywgQ291bnQsIEJ1ZmZlcik7DQo+ID4NCj4gPiAtICAgICAgICByZXR1cm4gRUZJX1NVQ0NF U1M7DQo+ID4NCj4gPiAtICAgICAgZGVmYXVsdDoNCj4gPg0KPiA+IC0gICAgICAgIC8vDQo+ID4N Cj4gPiAtICAgICAgICAvLyBUaGUgQ3B1SW9DaGVja1BhcmFtZXRlciBjYWxsIGFib3ZlIHdpbGwg ZW5zdXJlIHRoYXQgdGhpcw0KPiA+DQo+ID4gLSAgICAgICAgLy8gcGF0aCBpcyBub3QgdGFrZW4u DQo+ID4NCj4gPiAtICAgICAgICAvLw0KPiA+DQo+ID4gLSAgICAgICAgQVNTRVJUIChGQUxTRSk7 DQo+ID4NCj4gPiAtICAgICAgICBicmVhazsNCj4gPg0KPiA+ICsgIGlmIChGZWF0dXJlUGNkR2V0 IChQY2RQY2lJb1RyYW5zbGF0aW9uSXNFbmFibGVkKSA9PSBGQUxTRSkgew0KPiA+DQo+ID4gKyAg ICAvLw0KPiA+DQo+ID4gKyAgICAvLyBGaWZvIG9wZXJhdGlvbnMgc3VwcG9ydGVkIGZvciAobUlu U3RyaWRlW1dpZHRoXSA9PSAwKQ0KPiA+DQo+ID4gKyAgICAvLw0KPiA+DQo+ID4gKyAgICBpZiAo SW5TdHJpZGUgPT0gMCkgew0KPiA+DQo+ID4gKyAgICAgIHN3aXRjaCAoT3BlcmF0aW9uV2lkdGgp IHsNCj4gPg0KPiA+ICsgICAgICAgIGNhc2UgRWZpQ3B1SW9XaWR0aFVpbnQ4Og0KPiA+DQo+ID4g KyAgICAgICAgICBJb1JlYWRGaWZvOCAoKFVJTlROKUFkZHJlc3MsIENvdW50LCBCdWZmZXIpOw0K PiA+DQo+ID4gKyAgICAgICAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ID4NCj4gPiArICAgICAg ICBjYXNlIEVmaUNwdUlvV2lkdGhVaW50MTY6DQo+ID4NCj4gPiArICAgICAgICAgIElvUmVhZEZp Zm8xNiAoKFVJTlROKUFkZHJlc3MsIENvdW50LCBCdWZmZXIpOw0KPiA+DQo+ID4gKyAgICAgICAg ICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ID4NCj4gPiArICAgICAgICBjYXNlIEVmaUNwdUlvV2lk dGhVaW50MzI6DQo+ID4NCj4gPiArICAgICAgICAgIElvUmVhZEZpZm8zMiAoKFVJTlROKUFkZHJl c3MsIENvdW50LCBCdWZmZXIpOw0KPiA+DQo+ID4gKyAgICAgICAgICByZXR1cm4gRUZJX1NVQ0NF U1M7DQo+ID4NCj4gPiArICAgICAgICBkZWZhdWx0Og0KPiA+DQo+ID4gKyAgICAgICAgICAvLw0K PiA+DQo+ID4gKyAgICAgICAgICAvLyBUaGUgQ3B1SW9DaGVja1BhcmFtZXRlciBjYWxsIGFib3Zl IHdpbGwgZW5zdXJlIHRoYXQgdGhpcw0KPiA+DQo+ID4gKyAgICAgICAgICAvLyBwYXRoIGlzIG5v dCB0YWtlbi4NCj4gPg0KPiA+ICsgICAgICAgICAgLy8NCj4gPg0KPiA+ICsgICAgICAgICAgQVNT RVJUIChGQUxTRSk7DQo+ID4NCj4gPiArICAgICAgICAgIGJyZWFrOw0KPiA+DQo+ID4gKyAgICAg IH0NCj4gPg0KPiA+ICAgICAgfQ0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgICBDcHVJb1JlYWQ4 ICA9IElvUmVhZDg7DQo+ID4NCj4gPiArICAgIENwdUlvUmVhZDE2ID0gSW9SZWFkMTY7DQo+ID4N Cj4gPiArICAgIENwdUlvUmVhZDMyID0gSW9SZWFkMzI7DQo+ID4NCj4gPiArICB9IGVsc2Ugew0K PiA+DQo+ID4gKyAgICBBZGRyZXNzICAgICs9IFBjZEdldDY0IChQY2RQY2lJb1RyYW5zbGF0aW9u KTsNCj4gPg0KPiA+ICsgICAgQ3B1SW9SZWFkOCAgPSBNbWlvUmVhZDg7DQo+ID4NCj4gPiArICAg IENwdUlvUmVhZDE2ID0gTW1pb1JlYWQxNjsNCj4gPg0KPiA+ICsgICAgQ3B1SW9SZWFkMzIgPSBN bWlvUmVhZDMyOw0KPiA+DQo+ID4gICAgfQ0KPiA+DQo+ID4NCj4gPg0KPiA+ICAgIGZvciAoVWlu dDhCdWZmZXIgPSBCdWZmZXI7IENvdW50ID4gMDsgQWRkcmVzcyArPSBJblN0cmlkZSwgVWludDhC dWZmZXIgKz0NCj4gT3V0U3RyaWRlLCBDb3VudC0tKSB7DQo+ID4NCj4gPiAgICAgIGlmIChPcGVy YXRpb25XaWR0aCA9PSBFZmlDcHVJb1dpZHRoVWludDgpIHsNCj4gPg0KPiA+IC0gICAgICAqVWlu dDhCdWZmZXIgPSBJb1JlYWQ4ICgoVUlOVE4pQWRkcmVzcyk7DQo+ID4NCj4gPiArICAgICAgKlVp bnQ4QnVmZmVyID0gQ3B1SW9SZWFkOCAoKFVJTlROKUFkZHJlc3MpOw0KPiA+DQo+ID4gICAgICB9 IGVsc2UgaWYgKE9wZXJhdGlvbldpZHRoID09IEVmaUNwdUlvV2lkdGhVaW50MTYpIHsNCj4gPg0K PiA+IC0gICAgICAqKChVSU5UMTYgKilVaW50OEJ1ZmZlcikgPSBJb1JlYWQxNiAoKFVJTlROKUFk ZHJlc3MpOw0KPiA+DQo+ID4gKyAgICAgICooKFVJTlQxNiAqKVVpbnQ4QnVmZmVyKSA9IENwdUlv UmVhZDE2ICgoVUlOVE4pQWRkcmVzcyk7DQo+ID4NCj4gPiAgICAgIH0gZWxzZSBpZiAoT3BlcmF0 aW9uV2lkdGggPT0gRWZpQ3B1SW9XaWR0aFVpbnQzMikgew0KPiA+DQo+ID4gLSAgICAgICooKFVJ TlQzMiAqKVVpbnQ4QnVmZmVyKSA9IElvUmVhZDMyICgoVUlOVE4pQWRkcmVzcyk7DQo+ID4NCj4g PiArICAgICAgKigoVUlOVDMyICopVWludDhCdWZmZXIpID0gQ3B1SW9SZWFkMzIgKChVSU5UTilB ZGRyZXNzKTsNCj4gPg0KPiA+ICAgICAgfQ0KPiA+DQo+ID4gICAgfQ0KPiA+DQo+ID4NCj4gPg0K PiA+IEBAIC01MDIsNiArNTI3LDIxIEBAIENwdUlvU2VydmljZVdyaXRlICgNCj4gPg0KPiA+ICAg IEVGSV9DUFVfSU9fUFJPVE9DT0xfV0lEVEggIE9wZXJhdGlvbldpZHRoOw0KPiA+DQo+ID4gICAg VUlOVDggICAgICAgICAgICAgICAgICAgICAgKlVpbnQ4QnVmZmVyOw0KPiA+DQo+ID4NCj4gPg0K PiA+ICsgIFVJTlQ4IEVGSUFQSSAgKCpDcHVJb1dyaXRlOCkgKA0KPiA+DQo+ID4gKyAgICBVSU5U TiwNCj4gPg0KPiA+ICsgICAgVUlOVDgNCj4gPg0KPiA+ICsgICAgKTsNCj4gPg0KPiA+ICsNCj4g Pg0KPiA+ICsgIFVJTlQxNiBFRklBUEkgICgqQ3B1SW9Xcml0ZTE2KSAoDQo+ID4NCj4gPiArICAg IFVJTlROLA0KPiA+DQo+ID4gKyAgICBVSU5UMTYNCj4gPg0KPiA+ICsgICAgKTsNCj4gPg0KPiA+ ICsNCj4gPg0KPiA+ICsgIFVJTlQzMiBFRklBUEkgICgqQ3B1SW9Xcml0ZTMyKSAoDQo+ID4NCj4g PiArICAgIFVJTlROLA0KPiA+DQo+ID4gKyAgICBVSU5UMzINCj4gPg0KPiA+ICsgICAgKTsNCj4g Pg0KPiA+ICsNCj4gPg0KPiA+ICAgIC8vDQo+ID4NCj4gPiAgICAvLyBNYWtlIHN1cmUgdGhlIHBh cmFtZXRlcnMgYXJlIHZhbGlkDQo+ID4NCj4gPiAgICAvLw0KPiA+DQo+ID4gQEAgLTUxNywzNyAr NTU3LDQ4IEBAIENwdUlvU2VydmljZVdyaXRlICgNCj4gPg0KPiA+ICAgIE91dFN0cmlkZSAgICAg ID0gbU91dFN0cmlkZVtXaWR0aF07DQo+ID4NCj4gPiAgICBPcGVyYXRpb25XaWR0aCA9IChFRklf Q1BVX0lPX1BST1RPQ09MX1dJRFRIKShXaWR0aCAmIDB4MDMpOw0KPiA+DQo+ID4NCj4gPg0KPiA+ IC0gIC8vDQo+ID4NCj4gPiAtICAvLyBGaWZvIG9wZXJhdGlvbnMgc3VwcG9ydGVkIGZvciAobUlu U3RyaWRlW1dpZHRoXSA9PSAwKQ0KPiA+DQo+ID4gLSAgLy8NCj4gPg0KPiA+IC0gIGlmIChJblN0 cmlkZSA9PSAwKSB7DQo+ID4NCj4gPiAtICAgIHN3aXRjaCAoT3BlcmF0aW9uV2lkdGgpIHsNCj4g Pg0KPiA+IC0gICAgICBjYXNlIEVmaUNwdUlvV2lkdGhVaW50ODoNCj4gPg0KPiA+IC0gICAgICAg IElvV3JpdGVGaWZvOCAoKFVJTlROKUFkZHJlc3MsIENvdW50LCBCdWZmZXIpOw0KPiA+DQo+ID4g LSAgICAgICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiA+DQo+ID4gLSAgICAgIGNhc2UgRWZpQ3B1 SW9XaWR0aFVpbnQxNjoNCj4gPg0KPiA+IC0gICAgICAgIElvV3JpdGVGaWZvMTYgKChVSU5UTilB ZGRyZXNzLCBDb3VudCwgQnVmZmVyKTsNCj4gPg0KPiA+IC0gICAgICAgIHJldHVybiBFRklfU1VD Q0VTUzsNCj4gPg0KPiA+IC0gICAgICBjYXNlIEVmaUNwdUlvV2lkdGhVaW50MzI6DQo+ID4NCj4g PiAtICAgICAgICBJb1dyaXRlRmlmbzMyICgoVUlOVE4pQWRkcmVzcywgQ291bnQsIEJ1ZmZlcik7 DQo+ID4NCj4gPiAtICAgICAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ID4NCj4gPiAtICAgICAg ZGVmYXVsdDoNCj4gPg0KPiA+IC0gICAgICAgIC8vDQo+ID4NCj4gPiAtICAgICAgICAvLyBUaGUg Q3B1SW9DaGVja1BhcmFtZXRlciBjYWxsIGFib3ZlIHdpbGwgZW5zdXJlIHRoYXQgdGhpcw0KPiA+ DQo+ID4gLSAgICAgICAgLy8gcGF0aCBpcyBub3QgdGFrZW4uDQo+ID4NCj4gPiAtICAgICAgICAv Lw0KPiA+DQo+ID4gLSAgICAgICAgQVNTRVJUIChGQUxTRSk7DQo+ID4NCj4gPiAtICAgICAgICBi cmVhazsNCj4gPg0KPiA+ICsgIGlmIChGZWF0dXJlUGNkR2V0IChQY2RQY2lJb1RyYW5zbGF0aW9u SXNFbmFibGVkKSA9PSBGQUxTRSkgew0KPiA+DQo+ID4gKyAgICAvLw0KPiA+DQo+ID4gKyAgICAv LyBGaWZvIG9wZXJhdGlvbnMgc3VwcG9ydGVkIGZvciAobUluU3RyaWRlW1dpZHRoXSA9PSAwKQ0K PiA+DQo+ID4gKyAgICAvLw0KPiA+DQo+ID4gKyAgICBpZiAoSW5TdHJpZGUgPT0gMCkgew0KPiA+ DQo+ID4gKyAgICAgIHN3aXRjaCAoT3BlcmF0aW9uV2lkdGgpIHsNCj4gPg0KPiA+ICsgICAgICAg IGNhc2UgRWZpQ3B1SW9XaWR0aFVpbnQ4Og0KPiA+DQo+ID4gKyAgICAgICAgICBJb1dyaXRlRmlm bzggKChVSU5UTilBZGRyZXNzLCBDb3VudCwgQnVmZmVyKTsNCj4gPg0KPiA+ICsgICAgICAgICAg cmV0dXJuIEVGSV9TVUNDRVNTOw0KPiA+DQo+ID4gKyAgICAgICAgY2FzZSBFZmlDcHVJb1dpZHRo VWludDE2Og0KPiA+DQo+ID4gKyAgICAgICAgICBJb1dyaXRlRmlmbzE2ICgoVUlOVE4pQWRkcmVz cywgQ291bnQsIEJ1ZmZlcik7DQo+ID4NCj4gPiArICAgICAgICAgIHJldHVybiBFRklfU1VDQ0VT UzsNCj4gPg0KPiA+ICsgICAgICAgIGNhc2UgRWZpQ3B1SW9XaWR0aFVpbnQzMjoNCj4gPg0KPiA+ ICsgICAgICAgICAgSW9Xcml0ZUZpZm8zMiAoKFVJTlROKUFkZHJlc3MsIENvdW50LCBCdWZmZXIp Ow0KPiA+DQo+ID4gKyAgICAgICAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ID4NCj4gPiArICAg ICAgICBkZWZhdWx0Og0KPiA+DQo+ID4gKyAgICAgICAgICAvLw0KPiA+DQo+ID4gKyAgICAgICAg ICAvLyBUaGUgQ3B1SW9DaGVja1BhcmFtZXRlciBjYWxsIGFib3ZlIHdpbGwgZW5zdXJlIHRoYXQg dGhpcw0KPiA+DQo+ID4gKyAgICAgICAgICAvLyBwYXRoIGlzIG5vdCB0YWtlbi4NCj4gPg0KPiA+ ICsgICAgICAgICAgLy8NCj4gPg0KPiA+ICsgICAgICAgICAgQVNTRVJUIChGQUxTRSk7DQo+ID4N Cj4gPiArICAgICAgICAgIGJyZWFrOw0KPiA+DQo+ID4gKyAgICAgIH0NCj4gPg0KPiA+ICAgICAg fQ0KPiA+DQo+ID4gKw0KPiA+DQo+ID4gKyAgICBDcHVJb1dyaXRlOCAgPSBJb1dyaXRlODsNCj4g Pg0KPiA+ICsgICAgQ3B1SW9Xcml0ZTE2ID0gSW9Xcml0ZTE2Ow0KPiA+DQo+ID4gKyAgICBDcHVJ b1dyaXRlMzIgPSBJb1dyaXRlMzI7DQo+ID4NCj4gPiArICB9IGVsc2Ugew0KPiA+DQo+ID4gKyAg ICBBZGRyZXNzICAgICArPSBQY2RHZXQ2NCAoUGNkUGNpSW9UcmFuc2xhdGlvbik7DQo+ID4NCj4g PiArICAgIENwdUlvV3JpdGU4ICA9IE1taW9Xcml0ZTg7DQo+ID4NCj4gPiArICAgIENwdUlvV3Jp dGUxNiA9IE1taW9Xcml0ZTE2Ow0KPiA+DQo+ID4gKyAgICBDcHVJb1dyaXRlMzIgPSBNbWlvV3Jp dGUzMjsNCj4gPg0KPiA+ICAgIH0NCj4gPg0KPiA+DQo+ID4NCj4gPiAgICBmb3IgKFVpbnQ4QnVm ZmVyID0gKFVJTlQ4ICopQnVmZmVyOyBDb3VudCA+IDA7IEFkZHJlc3MgKz0gSW5TdHJpZGUsDQo+ IFVpbnQ4QnVmZmVyICs9IE91dFN0cmlkZSwgQ291bnQtLSkgew0KPiA+DQo+ID4gICAgICBpZiAo T3BlcmF0aW9uV2lkdGggPT0gRWZpQ3B1SW9XaWR0aFVpbnQ4KSB7DQo+ID4NCj4gPiAtICAgICAg SW9Xcml0ZTggKChVSU5UTilBZGRyZXNzLCAqVWludDhCdWZmZXIpOw0KPiA+DQo+ID4gKyAgICAg IENwdUlvV3JpdGU4ICgoVUlOVE4pQWRkcmVzcywgKlVpbnQ4QnVmZmVyKTsNCj4gPg0KPiA+ICAg ICAgfSBlbHNlIGlmIChPcGVyYXRpb25XaWR0aCA9PSBFZmlDcHVJb1dpZHRoVWludDE2KSB7DQo+ ID4NCj4gPiAtICAgICAgSW9Xcml0ZTE2ICgoVUlOVE4pQWRkcmVzcywgKigoVUlOVDE2ICopVWlu dDhCdWZmZXIpKTsNCj4gPg0KPiA+ICsgICAgICBDcHVJb1dyaXRlMTYgKChVSU5UTilBZGRyZXNz LCAqKChVSU5UMTYgKilVaW50OEJ1ZmZlcikpOw0KPiA+DQo+ID4gICAgICB9IGVsc2UgaWYgKE9w ZXJhdGlvbldpZHRoID09IEVmaUNwdUlvV2lkdGhVaW50MzIpIHsNCj4gPg0KPiA+IC0gICAgICBJ b1dyaXRlMzIgKChVSU5UTilBZGRyZXNzLCAqKChVSU5UMzIgKilVaW50OEJ1ZmZlcikpOw0KPiA+ DQo+ID4gKyAgICAgIENwdUlvV3JpdGUzMiAoKFVJTlROKUFkZHJlc3MsICooKFVJTlQzMiAqKVVp bnQ4QnVmZmVyKSk7DQo+ID4NCj4gPiAgICAgIH0NCj4gPg0KPiA+ICAgIH0NCj4gPg0KPiA+DQo+ ID4NCj4gPiBkaWZmIC0tZ2l0IGEvVWVmaUNwdVBrZy9DcHVJbzJEeGUvQ3B1SW8yRHhlLmgNCj4g Yi9VZWZpQ3B1UGtnL0NwdUlvMkR4ZS9DcHVJbzJEeGUuaA0KPiA+DQo+ID4gaW5kZXggN2ViZGUw NzU5Yi4uNTI1NmE1ODNlMSAxMDA2NDQNCj4gPg0KPiA+IC0tLSBhL1VlZmlDcHVQa2cvQ3B1SW8y RHhlL0NwdUlvMkR4ZS5oDQo+ID4NCj4gPiArKysgYi9VZWZpQ3B1UGtnL0NwdUlvMkR4ZS9DcHVJ bzJEeGUuaA0KPiA+DQo+ID4gQEAgLTIsNiArMiw4IEBADQo+ID4NCj4gPiAgICBJbnRlcm5hbCBp bmNsdWRlIGZpbGUgZm9yIHRoZSBDUFUgSS9PIDIgUHJvdG9jb2wuDQo+ID4NCj4gPg0KPiA+DQo+ ID4gIENvcHlyaWdodCAoYykgMjAwOSAtIDIwMTgsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmln aHRzIHJlc2VydmVkLjxCUj4NCj4gPg0KPiA+ICtDb3B5cmlnaHQgKGMpIDIwMTYsIExpbmFybyBM dGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiA+DQo+ID4gK0NvcHlyaWdodCAoYykgMjAy MyBMb29uZ3NvbiBUZWNobm9sb2d5IENvcnBvcmF0aW9uIExpbWl0ZWQuIEFsbCByaWdodHMNCj4g cmVzZXJ2ZWQuPEJSPg0KPiA+DQo+ID4gIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1D bGF1c2UtUGF0ZW50DQo+ID4NCj4gPg0KPiA+DQo+ID4gICoqLw0KPiA+DQo+ID4gZGlmZiAtLWdp dCBhL1VlZmlDcHVQa2cvQ3B1SW8yRHhlL0NwdUlvMkR4ZS5pbmYNCj4gYi9VZWZpQ3B1UGtnL0Nw dUlvMkR4ZS9DcHVJbzJEeGUuaW5mDQo+ID4NCj4gPiBpbmRleCA0OTkyNTg0OTFmLi4yNzFjNDcz NzFiIDEwMDY0NA0KPiA+DQo+ID4gLS0tIGEvVWVmaUNwdVBrZy9DcHVJbzJEeGUvQ3B1SW8yRHhl LmluZg0KPiA+DQo+ID4gKysrIGIvVWVmaUNwdVBrZy9DcHVJbzJEeGUvQ3B1SW8yRHhlLmluZg0K PiA+DQo+ID4gQEAgLTMsNiArMyw4IEBADQo+ID4NCj4gPiAgIw0KPiA+DQo+ID4gICMgQ29weXJp Z2h0IChjKSAyMDA5IC0gMjAxOCwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2 ZWQuPEJSPg0KPiA+DQo+ID4gICMgQ29weXJpZ2h0IChjKSAyMDE3LCBBTUQgSW5jb3Jwb3JhdGVk LiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gPg0KPiA+ICsjIENvcHlyaWdodCAoYykgMjAx NiwgTGluYXJvIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ID4NCj4gPiArIyBDb3B5 cmlnaHQgKGMpIDIwMjMgTG9vbmdzb24gVGVjaG5vbG9neSBDb3Jwb3JhdGlvbiBMaW1pdGVkLiBB bGwgcmlnaHRzDQo+IHJlc2VydmVkLjxCUj4NCj4gPg0KPiA+ICAjDQo+ID4NCj4gPiAgIyBTUERY LUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiA+DQo+ID4gICMNCj4g Pg0KPiA+IEBAIC0yMCw3ICsyMiw3IEBADQo+ID4NCj4gPiAgIw0KPiA+DQo+ID4gICMgVGhlIGZv bGxvd2luZyBpbmZvcm1hdGlvbiBpcyBmb3IgcmVmZXJlbmNlIG9ubHkgYW5kIG5vdCByZXF1aXJl ZCBieSB0aGUNCj4gYnVpbGQgdG9vbHMuDQo+ID4NCj4gPiAgIw0KPiA+DQo+ID4gLSMgIFZBTElE X0FSQ0hJVEVDVFVSRVMgICAgICAgICAgID0gSUEzMiBYNjQgRUJDDQo+ID4NCj4gPiArIyAgVkFM SURfQVJDSElURUNUVVJFUyAgICAgICAgICAgPSBJQTMyIFg2NCBFQkMgQVJNIEFBUkNINjQNCj4g TE9PTkdBUkNINjQNCj4gPg0KPiA+ICAjDQo+ID4NCj4gPg0KPiA+DQo+ID4gIFtTb3VyY2VzXQ0K PiA+DQo+ID4gQEAgLTM3LDYgKzM5LDEwIEBADQo+ID4NCj4gPiAgICBJb0xpYg0KPiA+DQo+ID4g ICAgVWVmaUJvb3RTZXJ2aWNlc1RhYmxlTGliDQo+ID4NCj4gPg0KPiA+DQo+ID4gK1tQY2RdDQo+ ID4NCj4gPiArICBnRWZpTWRlUGtnVG9rZW5TcGFjZUd1aWQuUGNkUGNpSW9UcmFuc2xhdGlvbklz RW5hYmxlZA0KPiA+DQo+ID4gKyAgZ0VmaU1kZVBrZ1Rva2VuU3BhY2VHdWlkLlBjZFBjaUlvVHJh bnNsYXRpb24NCj4gPg0KPiA+ICsNCj4gPg0KPiA+ICBbUHJvdG9jb2xzXQ0KPiA+DQo+ID4gICAg Z0VmaUNwdUlvMlByb3RvY29sR3VpZCAgICAgICAgICAgICAgICAgICAgICAgICAjIyBQUk9EVUNF Uw0KPiA+DQo+ID4NCj4gPg0KPiA+IGRpZmYgLS1naXQgYS9VZWZpQ3B1UGtnL0NwdUlvMkR4ZS9D cHVJbzJEeGUudW5pDQo+IGIvVWVmaUNwdVBrZy9DcHVJbzJEeGUvQ3B1SW8yRHhlLnVuaQ0KPiA+ DQo+ID4gaW5kZXggOGQ0ZTVkZDZiNC4uMTRhMzZmZjg4OCAxMDA2NDQNCj4gPg0KPiA+IC0tLSBh L1VlZmlDcHVQa2cvQ3B1SW8yRHhlL0NwdUlvMkR4ZS51bmkNCj4gPg0KPiA+ICsrKyBiL1VlZmlD cHVQa2cvQ3B1SW8yRHhlL0NwdUlvMkR4ZS51bmkNCj4gPg0KPiA+IEBAIC00LDYgKzQsOCBAQA0K PiA+DQo+ID4gIC8vIFByb2R1Y2VzIHRoZSBDUFUgSS9PIDIgUHJvdG9jb2wgYnkgdXNpbmcgdGhl IHNlcnZpY2VzIG9mIHRoZSBJL08NCj4gTGlicmFyeS4NCj4gPg0KPiA+ICAvLw0KPiA+DQo+ID4g IC8vIENvcHlyaWdodCAoYykgMjAwOSAtIDIwMTgsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmln aHRzIHJlc2VydmVkLjxCUj4NCj4gPg0KPiA+ICsvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIExpbmFy byBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiA+DQo+ID4gKy8vIENvcHlyaWdodCAo YykgMjAyMyBMb29uZ3NvbiBUZWNobm9sb2d5IENvcnBvcmF0aW9uIExpbWl0ZWQuIEFsbCByaWdo dHMNCj4gcmVzZXJ2ZWQuPEJSPg0KPiA+DQo+ID4gIC8vDQo+ID4NCj4gPiAgLy8gU1BEWC1MaWNl bnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCj4gPg0KPiA+ICAvLw0KPiA+DQo+ ID4gDQoNCgotPS09LT0tPS09LT0tPS09LT0tPS09LQpHcm91cHMuaW8gTGlua3M6IFlvdSByZWNl aXZlIGFsbCBtZXNzYWdlcyBzZW50IHRvIHRoaXMgZ3JvdXAuClZpZXcvUmVwbHkgT25saW5lICgj MTEyNzU4KTogaHR0cHM6Ly9lZGsyLmdyb3Vwcy5pby9nL2RldmVsL21lc3NhZ2UvMTEyNzU4Ck11 dGUgVGhpcyBUb3BpYzogaHR0cHM6Ly9ncm91cHMuaW8vbXQvMTAzMjYxNjkzLzc2ODYxNzYKR3Jv dXAgT3duZXI6IGRldmVsK293bmVyQGVkazIuZ3JvdXBzLmlvClVuc3Vic2NyaWJlOiBodHRwczov L2VkazIuZ3JvdXBzLmlvL2cvZGV2ZWwvbGVhdmUvMTIzNjcxMTEvNzY4NjE3Ni8xOTEzNDU2MjEy L3h5enp5IFtyZWJlY2NhQG9wZW5mdy5pb10KLT0tPS09LT0tPS09LT0tPS09LT0tPS0KCg0K