From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by mx.groups.io with SMTP id smtpd.web11.21658.1658103166063221221 for ; Sun, 17 Jul 2022 17:12:46 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="unable to parse pub key" header.i=@intel.com header.s=intel header.b=LIH2dPYY; spf=pass (domain: intel.com, ip: 192.55.52.120, mailfrom: michael.d.kinney@intel.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1658103166; x=1689639166; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=TWxIH5/1ZvqpG2W0XJzJG51TjZ5zGmxjd/xDpjdGrFc=; b=LIH2dPYYRybgVwYJlulbgpdu5oM53ggUoCur5oJmkMyWTyGqPeBC9O44 BEMABIkdXuIR1NbirbR2B/A0rnh56bej1AwnZxfMGM8Ky3s5yLDcb1jdq ewRmdbViteGxqAX36VWrNFGs6Sqenb8P5Z+bCUSlTAE+GZKY/Oe0O7RmI CwPsxDHc4qNUDBs7zCjBFuAwwa9aOpmavcgJ/u9jhdRyGSvOTeQK4JRFD mzOeh6UjTklDzWvbmU7IkT3x6JWeO24Kntnh85m0/dN58AirCT5R6RGvH gRhvhnwgDLuzwr4qAMgZ1CNv9jS/4Tp6FB17KXDVIKlMcbiPogNw42BVg Q==; X-IronPort-AV: E=McAfee;i="6400,9594,10411"; a="284857349" X-IronPort-AV: E=Sophos;i="5.92,280,1650956400"; d="scan'208";a="284857349" Received: from orsmga005.jf.intel.com ([10.7.209.41]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 Jul 2022 17:12:45 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.92,280,1650956400"; d="scan'208";a="773547620" Received: from fmsmsx606.amr.corp.intel.com ([10.18.126.86]) by orsmga005.jf.intel.com with ESMTP; 17 Jul 2022 17:12:45 -0700 Received: from fmsmsx601.amr.corp.intel.com (10.18.126.81) by fmsmsx606.amr.corp.intel.com (10.18.126.86) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.27; Sun, 17 Jul 2022 17:12:44 -0700 Received: from fmsedg601.ED.cps.intel.com (10.1.192.135) by fmsmsx601.amr.corp.intel.com (10.18.126.81) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.27 via Frontend Transport; Sun, 17 Jul 2022 17:12:44 -0700 Received: from NAM10-DM6-obe.outbound.protection.outlook.com (104.47.58.103) by edgegateway.intel.com (192.55.55.70) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2308.27; Sun, 17 Jul 2022 17:12:44 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=BrWQlYcxaH1JVLeDlJRhHz8G3dCWxNzACsXWcmHfYSvHiUV6gBSZVYZr42NsFOk5T1n7YT9o/+Y578TFM5Wq/PumCRGTOV5QrOCpLAQRJN3A4jRRJldiF93FIc0SVl29UZetpOC9vaUpGZJN850mkVrlcm8Kzikjv5jKIsz0MrPckiK930DjkFLMQbgfZTfZVGnbe63YNEH7PDQZ3wpLi2YdoUNU/7IARaX21eoQ9gtof+0EEEYHcRABUJdSYbc+Ok7nYBKRjbuAgzt9FGQoB4RzmtRG11eMGjF7mdQJEooNoUP4GMag/cYndlvyTLHjfXS1+VnzxaZELboTfY2rwg== 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=TWxIH5/1ZvqpG2W0XJzJG51TjZ5zGmxjd/xDpjdGrFc=; b=ZwFMp2UzemNDZV7VLHtx9aPYOZPrCA/SGVuMxfJjHCwJw5ZH9Np+k56tdtPIL7hQutDHjts+AA3+98GofjAvfsNFcO5blnbMc13K1It9bIHRqSUlaD3p9JDcd2Zp1ZEB/T19OPtLd6oNsynHCS1PUBENtc5pHzxmR+C0/jV82G93XZfxuBKHG5RI2leNgNdWa0izKxmXIIMF/Eex/e8RNaW5LcT4ldnTyKJBy9hbDZlG35/vE7WM4A1Ebbm/HVO0d0RX8tOdOd5lcf2whaYlltz1KJHbIK24p0x110wuVWRXMZDbYcERcuPD4iOgrdYyK6+DjcdcqtTziJPrGB2Q3w== 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 CO1PR11MB4929.namprd11.prod.outlook.com (2603:10b6:303:6d::19) by MWHPR11MB1790.namprd11.prod.outlook.com (2603:10b6:300:10e::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5438.20; Mon, 18 Jul 2022 00:12:42 +0000 Received: from CO1PR11MB4929.namprd11.prod.outlook.com ([fe80::99d7:f73:c72c:12f3]) by CO1PR11MB4929.namprd11.prod.outlook.com ([fe80::99d7:f73:c72c:12f3%6]) with mapi id 15.20.5438.023; Mon, 18 Jul 2022 00:12:42 +0000 From: "Michael D Kinney" To: "devel@edk2.groups.io" , "Wu, Jiaxin" , "Kinney, Michael D" CC: "Dong, Eric" , "Ni, Ray" Subject: Re: [edk2-devel] [PATCH v1] UefiCpuPkg: Dynamic check SMRR enable & SmmFeatureControl capability Thread-Topic: [edk2-devel] [PATCH v1] UefiCpuPkg: Dynamic check SMRR enable & SmmFeatureControl capability Thread-Index: AQHYmbiKOQsTqMFJWU+FBSyPJMmyWq2DQbHQ Date: Mon, 18 Jul 2022 00:12:42 +0000 Message-ID: References: <20220717083747.21076-1-jiaxin.wu@intel.com> In-Reply-To: <20220717083747.21076-1-jiaxin.wu@intel.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-reaction: no-action dlp-version: 11.6.500.17 authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 408fe751-960f-4595-00c1-08da68523bc9 x-ms-traffictypediagnostic: MWHPR11MB1790:EE_ x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: rivKLBK9dHJljDJNe9TU21MfPBiwUfbI1zhvoTrVDgPoc//nRJC/Ba+t4o/KyPPhhb98FYD0OviF31d5lnwDkfYPfb6NzXuSHhIubTrOuRSpsCEU0pZRctlRakaLRwqBU01k4QNblfuz2HNlsOBET/gbogvITLccpcPizexFNuAPxMFXBHh62aEDUcB1hFbnK02Nf429Y07YCXK2nlDo5C5EBskLDEbsbtpOUOD+8rjemmqN4lUHtsWtLT5s2rMTnBkNm5uZa0WHWE5anmyLmYzabomXsuIZh6IZeG0dW8BER5LTHhb+L2XeK3++t1kMS73XptfnMQ3wQABTFTVxCDdUVjp4+kVWM8GgQjMdkuC2QYRzEuqZHOuBfuoNwUNGE+IjoO41YJ5NnVQs1OHSPAVa8DOZfCyyN4B63GqEZXagP12Tv0WHEUsq4cE+48QHsrXRGijROWlqXyWCr/KFmYyvh7sZP6AqJAQSuBbLuw56u1R9hWW0iA4oU/ko3A5hKjO5wmJ9kWeoNycz12oe0+MiPmD2twVxDMrWeIvN/TEHLHfEMgOoQTfraQ/43dYAOOzeBUkKsVKxUJe6KMa8x0sYooNWTpxx9oDQhKSOCIYNB7XKI0bLfq2qD/fqT/2WcAF4OP2LTYfzbKxk65tgcNO4GVr+TbL3VKeRoQXsfWgsvJ23iZK7gS38msrwlFKOztxNKlx6LlFR4SqKaLvHMmBbIksfIWu6wo21n1JYMP/HCfi9VMt65obmnS26eD9loKHpcfOpBRQVInqd/y0fRe7XiFMvK6/iNL44+0bF0FfqIhUwu0FkywACnjcpBT7zeyEi0PeBGGMGp0MKrm1qWFbg3UdQhtLmVkudroSdXBjmuKa+rPUtyOR0wJkPRWWQ x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CO1PR11MB4929.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230016)(39860400002)(376002)(396003)(366004)(136003)(346002)(186003)(83380400001)(76116006)(55016003)(71200400001)(4326008)(66446008)(478600001)(54906003)(110136005)(66556008)(66946007)(66476007)(64756008)(8676002)(26005)(9686003)(107886003)(2906002)(53546011)(7696005)(6506007)(33656002)(38070700005)(38100700002)(86362001)(5660300002)(30864003)(41300700001)(316002)(82960400001)(122000001)(52536014)(966005)(8936002);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?WlZhSWUvR0VSZmt1dk9NZk9tY0pmYmZaSzBJMGhFSjdwZFZSdmJ5ZWRyL09H?= =?utf-8?B?cmxPWC9aNTVhajBjNjNBUW5Qak9ybitmSXJyU0dGVmVycTlaWVJtSlg3SmRB?= =?utf-8?B?ZDM5WmtncEhTN3I0bEtrWG5ZNHM5UWhWNHZhYks5eWFaaDZ1TGR6U3N2WlRM?= =?utf-8?B?WnV6eCthcHNZbURNUVVWN2g3NWFFM08xMVJsWFEwSGp1R1ZqWXFRcGZxbW9E?= =?utf-8?B?QUJnVWVFUFdMNitDLzV5dWhabUlZSnQ0ZGZ4UmZ3a2JLWjQrVm5FT0NoUG5l?= =?utf-8?B?R2c4OVNkMHp1aVByU0EwaHZmM0kzQ3h0Vzhtd1JBa3pmSG5lbjdQbjdMRERy?= =?utf-8?B?YTczalNLSFQxLzNHS2t4MDBPWU1GUWZ6MnlFbzM0NFpWeExNMjJWaFdXNHpy?= =?utf-8?B?UFNZcTZacXJEb3UvNTFKeTYzODZISkh3UTY0bjZJYjkwUEkwNFFLVVhQNW81?= =?utf-8?B?ZXpNZU1xbUVkZk9sVHdkS0xpU3NnMzZEUXpLNTZEOHdCSmFLSkFiVG80b1g0?= =?utf-8?B?a0ptcDY3bFJkWDZSek1oZFB0M21wQU5GdUhhOHQweHpiZk9XbTVtQkV5Smw5?= =?utf-8?B?R2QyRmY1NVdlSysySG8vTlBjSVFJa2ozZWZIU2d4SmNRNk5wZW9tKzViSUZp?= =?utf-8?B?dC9wK3pSZitpNnZLS1Z6WXcwRnpFZkFhZURTd2puVFBZaUFPTnZpYi9EOHc2?= =?utf-8?B?eFNWSExDWTVmdzVXcStTNi96WE92M3llWXM2N254Z3BVaGZyeVphcnNIL0Fs?= =?utf-8?B?MHE2RGxGNDNoVUpFYTFxU1VCMnJ5cXpHMEl4STFLQ01rVjdValZud0JpejB6?= =?utf-8?B?aXRQSGdaUzhkeE4vMVNJYytsTEhGZFRDUWFsMDJWMG5rNUo2RDY3MlpxSDN5?= =?utf-8?B?bmJUNk9wcGsxTDJ1eVhHOWFndjVmaXJvM290VFczUmRlbUVkL1V6dTU5NlFT?= =?utf-8?B?VjZlTEpBN2YrNHIvWnpXSDltL0V6TDA1dnFGWjVMbmRrV2pmN2VIK1NOY01q?= =?utf-8?B?SEpJZ2JFNGRSZW9nK2liczhxWkVhZVJGTVFuOG1FVUtkd3k2M1NWamZjdzJ5?= =?utf-8?B?cUNrTmFqZnNhSHd6bHlTQytsbWFGcjR1dkhnR2RSRUYzSnhtUHFDZzUrVDAv?= =?utf-8?B?ak42cVV3VXNpendSNGt6NjU1dDBEVXVNQUlicXRRYUM1YzFjdTJweXNGdFlL?= =?utf-8?B?WjdzRzRRZlR2b255K3FVVWtEVmtzL1oyWGJjWjZRdExLNUt2YWwvOFNsYVcv?= =?utf-8?B?VTRzZTZSMDlmQ0U0VTYzZnpBdmIwVi9rb3dKb2lLUVpoUlZOZzNOUmJac3dL?= =?utf-8?B?c1B6MGE4eTRCNXlLZFVQZjhFWERZOXNZdmIxdnNIQmlJQzUrT21XWkU0ZWw1?= =?utf-8?B?Z2ZsclkzSWJZZnRPMDErNnpVWHZIYWVBR1ptUCtjSjJqeXdlUkR3U3VJYXM0?= =?utf-8?B?ZzhhTkhRSzl2aWJ6K0tBRkhtdk5ZdGx2QWs4MWJEUUxlWUNjUVNBNmpqellV?= =?utf-8?B?c3Q4RXY4VkpIZnQxd25zNlg5dEwxKzhuTU9ZcXFJRXZGQUI2bEUxN1JoczFK?= =?utf-8?B?TUtIditQb296YVhGb3BPMjMxUHVjbVFzWkl4Nlc4K2VaNGlpU2dEbzh1bDdi?= =?utf-8?B?VG5BNFFNQVBGMVJuNStBeUV4MHJlb1lZYXQwOVk1SlpKQUFtcGpQSmcrSDZS?= =?utf-8?B?YU9EemRQbEpJNGRMZ01PQzVSYWZwL282S1FoMVIvcHJhMDNpcGNPbjgvdXpN?= =?utf-8?B?dU80UjB1WjFrT0ZMSndmYXQrZ0YyY2xPd3RCeENsK2tQeURGUE94S0N2OUxR?= =?utf-8?B?RkYzUUxodVRoSW5TMDZIK3JBTUhQeWQ4VHMvbHhCUVRDM0d5Z3NQOCthSnRy?= =?utf-8?B?elBCSm14ZGdTcTN2NXBnSnI4NlZab3dhRHVkRXFjbVhMWm5kT3lkNzVNaHJp?= =?utf-8?B?M3JscUlCZ2tGUlV2bndaaWJoUXgwYjlEVm4raXZtdllaQVBxUnJYRmtHVCty?= =?utf-8?B?TDhWZFlGams5aXQ2Q1dON0dCeG5qYkNUZDJYVytvSWdJaU8rNllRWnhCVE1B?= =?utf-8?B?Tk1ZSkltSXhWR0R2YkhUYjY3L0NNdGl2RDZMUXlyeTVBRDliai9ycjViWE40?= =?utf-8?Q?BpiqmfE7BiHRy4u+vEJIKF7Qg?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CO1PR11MB4929.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 408fe751-960f-4595-00c1-08da68523bc9 X-MS-Exchange-CrossTenant-originalarrivaltime: 18 Jul 2022 00:12:42.5357 (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: 2FZUhH10ZtugNw+BoGSRT4y0lR5TsHQzm3eVznuL70uKki4p3y/FEVSmEr1NV9S5EUQriT6lrHJOFw0Nw2hSc1EeGoDzfvuA+ctEY6lR3+o= X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR11MB1790 Return-Path: michael.d.kinney@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 QXJlIHRoZXNlIGNoZWNrcyBtYWRlIG9uIGV2ZXJ5IFNNST8NCg0KV2hhdCBpcyB0aGUgaW1wYWN0 IHRvIFNNSSBsYXRlbmN5IHRvIGRvIHRoZSBjaGVjayBkeW5hbWljYWxseT8NCg0KRmVhdHVyZUZs YWcgYW5kIEZpeGVkQXRCdWlsZCBQQ0RzIGFyZSBkZWNsYXJlZCBhcyBjb25zdCBnbG9iYWwgdmFy aWFibGVzDQp3aGljaCBhcmUgdXNlZCBieSBvcHRpbWl6aW5nIGNvbXBpbGVyIGFzIGNvbnN0YW50 cyBpbiBpbnN0cnVjdGlvbnMgb3INCm9wdGltaXplIGF3YXkgY29uZGl0aW9uIGNoZWNrcyBhbGwg dG9nZXRoZXIuICBUaGlzIG9wdGlvbiBzaG91bGQgc3RpbGwNCmJlIGNvbnNpZGVyZWQuDQoNCk1p a2UNCg0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBkZXZlbEBlZGsyLmdy b3Vwcy5pbyA8ZGV2ZWxAZWRrMi5ncm91cHMuaW8+IE9uIEJlaGFsZiBPZiBXdSwgSmlheGluDQo+ IFNlbnQ6IFN1bmRheSwgSnVseSAxNywgMjAyMiAxOjM4IEFNDQo+IFRvOiBkZXZlbEBlZGsyLmdy b3Vwcy5pbw0KPiBDYzogRG9uZywgRXJpYyA8ZXJpYy5kb25nQGludGVsLmNvbT47IE5pLCBSYXkg PHJheS5uaUBpbnRlbC5jb20+DQo+IFN1YmplY3Q6IFtlZGsyLWRldmVsXSBbUEFUQ0ggdjFdIFVl ZmlDcHVQa2c6IER5bmFtaWMgY2hlY2sgU01SUiBlbmFibGUgJiBTbW1GZWF0dXJlQ29udHJvbCBj YXBhYmlsaXR5DQo+IA0KPiBSRUY6IGh0dHBzOi8vYnVnemlsbGEudGlhbm9jb3JlLm9yZy9zaG93 X2J1Zy5jZ2k/aWQ9Mzk2Mg0KPiANCj4gVHdvIFNNTSB2YXJpYWJsZXMgKG1TbXJyU3VwcG9ydGVk ICYgbVNtbUZlYXR1cmVDb250cm9sU3VwcG9ydGVkKSBhcmUgZ2xvYmFsDQo+IHZhcmlhYmxlcywg dGhleSBjb250cm9sIHdoZXRoZXIgdGhlIFNNUlIgYW5kIFNNTSBGZWF0dXJlIENvbnRyb2wgTVNS IHdpbGwNCj4gYmUgcmVzdG9yZWQgcmVzcGVjdGl2ZWx5Lg0KPiBUbyBhdm9pZCB0aGUgVE9DVE9V LCBkeW5hbWljIGNoZWNrIFNNUlIgZW5hYmxlICYgU21tRmVhdHVyZUNvbnRyb2wgY2FwYWJpbGl0 eS4NCj4gDQo+IENoYW5nZS1JZDogSTY4MzVlNGIwZTEyYzVlNmY1MmVmZmI2MGZkOTIyNGUzZWI5 N2ZjMGQNCj4gQ2M6IEVyaWMgRG9uZyA8ZXJpYy5kb25nQGludGVsLmNvbT4NCj4gQ2M6IFJheSBO aSA8cmF5Lm5pQGludGVsLmNvbT4NCj4gU2lnbmVkLW9mZi1ieTogSmlheGluIFd1IDxqaWF4aW4u d3VAaW50ZWwuY29tPg0KPiAtLS0NCj4gIC4uLi9TbW1DcHVGZWF0dXJlc0xpYi9TbW1DcHVGZWF0 dXJlc0xpYkNvbW1vbi5jICAgIHwgMjQ4ICsrKysrKysrKysrKy0tLS0tLS0tLQ0KPiAgMSBmaWxl IGNoYW5nZWQsIDE0MSBpbnNlcnRpb25zKCspLCAxMDcgZGVsZXRpb25zKC0pDQo+IA0KPiBkaWZm IC0tZ2l0IGEvVWVmaUNwdVBrZy9MaWJyYXJ5L1NtbUNwdUZlYXR1cmVzTGliL1NtbUNwdUZlYXR1 cmVzTGliQ29tbW9uLmMNCj4gYi9VZWZpQ3B1UGtnL0xpYnJhcnkvU21tQ3B1RmVhdHVyZXNMaWIv U21tQ3B1RmVhdHVyZXNMaWJDb21tb24uYw0KPiBpbmRleCA3OGRlN2Y4NDA3Li5iMmYzMWM5OTNm IDEwMDY0NA0KPiAtLS0gYS9VZWZpQ3B1UGtnL0xpYnJhcnkvU21tQ3B1RmVhdHVyZXNMaWIvU21t Q3B1RmVhdHVyZXNMaWJDb21tb24uYw0KPiArKysgYi9VZWZpQ3B1UGtnL0xpYnJhcnkvU21tQ3B1 RmVhdHVyZXNMaWIvU21tQ3B1RmVhdHVyZXNMaWJDb21tb24uYw0KPiBAQCAtMzUsMjYgKzM1LDEw IEBAIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ICAvLyBN U1JzIHJlcXVpcmVkIGZvciBjb25maWd1cmF0aW9uIG9mIFNNTSBDb2RlIEFjY2VzcyBDaGVjaw0K PiAgLy8NCj4gICNkZWZpbmUgU01NX0ZFQVRVUkVTX0xJQl9JQTMyX01DQV9DQVAgIDB4MTdEDQo+ ICAjZGVmaW5lICAgU01NX0NPREVfQUNDRVNTX0NIS19CSVQgICAgICBCSVQ1OA0KPiANCj4gLS8v DQo+IC0vLyBTZXQgZGVmYXVsdCB2YWx1ZSB0byBhc3N1bWUgU01SUiBpcyBub3Qgc3VwcG9ydGVk DQo+IC0vLw0KPiAtQk9PTEVBTiAgbVNtcnJTdXBwb3J0ZWQgPSBGQUxTRTsNCj4gLQ0KPiAtLy8N Cj4gLS8vIFNldCBkZWZhdWx0IHZhbHVlIHRvIGFzc3VtZSBNU1JfU01NX0ZFQVRVUkVfQ09OVFJP TCBpcyBub3Qgc3VwcG9ydGVkDQo+IC0vLw0KPiAtQk9PTEVBTiAgbVNtbUZlYXR1cmVDb250cm9s U3VwcG9ydGVkID0gRkFMU0U7DQo+IC0NCj4gLS8vDQo+IC0vLyBTZXQgZGVmYXVsdCB2YWx1ZSB0 byBhc3N1bWUgSUEtMzIgQXJjaGl0ZWN0dXJhbCBNU1JzIGFyZSB1c2VkDQo+IC0vLw0KPiAtVUlO VDMyICBtU21yclBoeXNCYXNlTXNyID0gU01NX0ZFQVRVUkVTX0xJQl9JQTMyX1NNUlJfUEhZU0JB U0U7DQo+IC1VSU5UMzIgIG1TbXJyUGh5c01hc2tNc3IgPSBTTU1fRkVBVFVSRVNfTElCX0lBMzJf U01SUl9QSFlTTUFTSzsNCj4gLQ0KPiAgLy8NCj4gIC8vIFNldCBkZWZhdWx0IHZhbHVlIHRvIGFz c3VtZSBNVFJScyBuZWVkIHRvIGJlIGNvbmZpZ3VyZWQgb24gZWFjaCBTTUkNCj4gIC8vDQo+ICBC T09MRUFOICBtTmVlZENvbmZpZ3VyZU10cnJzID0gVFJVRTsNCj4gDQo+IEBAIC02MiwyNiArNDYs MzkgQEAgQk9PTEVBTiAgbU5lZWRDb25maWd1cmVNdHJycyA9IFRSVUU7DQo+ICAvLyBBcnJheSBm b3Igc3RhdGUgb2YgU01SUiBlbmFibGUgb24gYWxsIENQVXMNCj4gIC8vDQo+ICBCT09MRUFOICAq bVNtcnJFbmFibGVkOw0KPiANCj4gIC8qKg0KPiAtICBQZXJmb3JtcyBsaWJyYXJ5IGluaXRpYWxp emF0aW9uLg0KPiArICBSZXR1cm4gaWYgU01SUiBpcyBzdXBwb3J0ZWQNCj4gDQo+IC0gIFRoaXMg aW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gY29udGFpbnMgY29tbW9uIGZ1bmN0aW9uYWxpdHkgc2hh cmVkIGJldHdlbiBhbGwNCj4gLSAgbGlicmFyeSBpbnN0YW5jZSBjb25zdHJ1Y3RvcnMuDQo+ICsg IEBwYXJhbVtpbl0gU21yclBoeXNCYXNlTXNyICAgUG9pbnRlciB0byBTbXJyUGh5c0Jhc2VNc3Iu DQo+ICsgIEBwYXJhbVtpbl0gU21yclBoeXNNYXNrTXNyICAgUG9pbnRlciB0byBTbXJyUGh5c01h c2tNc3IuDQo+ICsNCj4gKyAgQHJldHZhbCBUUlVFICBTTVJSIGlzIHN1cHBvcnRlZC4NCj4gKyAg QHJldHZhbCBGQUxTRSBTTVJSIGlzIG5vdCBzdXBwb3J0ZWQuDQo+IA0KPiAgKiovDQo+IC1WT0lE DQo+IC1DcHVGZWF0dXJlc0xpYkluaXRpYWxpemF0aW9uICgNCj4gLSAgVk9JRA0KPiArQk9PTEVB Tg0KPiArSXNTbXJyU3VwcG9ydGVkICgNCj4gKyAgSU4gVUlOVDMyICAqU21yclBoeXNCYXNlTXNy ICAgIE9QVElPTkFMLA0KPiArICBJTiBVSU5UMzIgICpTbXJyUGh5c01hc2tNc3IgICAgT1BUSU9O QUwNCj4gICAgKQ0KPiAgew0KPiArICBCT09MRUFOICBSZXR1cm5WYWx1ZTsNCj4gKw0KPiAgICBV SU5UMzIgIFJlZ0VheDsNCj4gICAgVUlOVDMyICBSZWdFZHg7DQo+ICAgIFVJTlROICAgRmFtaWx5 SWQ7DQo+ICAgIFVJTlROICAgTW9kZWxJZDsNCj4gDQo+ICsgIFVJTlQ2NCAgRmVhdHVyZUNvbnRy b2w7DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gU2V0IGRlZmF1bHQgdmFsdWUgdG8gYXNzdW1lIFNN UlIgaXMgbm90IHN1cHBvcnRlZA0KPiArICAvLw0KPiArICBSZXR1cm5WYWx1ZSA9IEZBTFNFOw0K PiArDQo+ICAgIC8vDQo+ICAgIC8vIFJldHJpZXZlIENQVSBGYW1pbHkgYW5kIE1vZGVsDQo+ICAg IC8vDQo+ICAgIEFzbUNwdWlkIChDUFVJRF9WRVJTSU9OX0lORk8sICZSZWdFYXgsIE5VTEwsIE5V TEwsICZSZWdFZHgpOw0KPiAgICBGYW1pbHlJZCA9IChSZWdFYXggPj4gOCkgJiAweGY7DQo+IEBA IC05NiwxMSArOTMsMTEgQEAgQ3B1RmVhdHVyZXNMaWJJbml0aWFsaXphdGlvbiAoDQo+ICAgIGlm ICgoUmVnRWR4ICYgQklUMTIpICE9IDApIHsNCj4gICAgICAvLw0KPiAgICAgIC8vIENoZWNrIE1U UlJfQ0FQIE1TUiBiaXQgMTEgZm9yIFNNUlIgc3VwcG9ydA0KPiAgICAgIC8vDQo+ICAgICAgaWYg KChBc21SZWFkTXNyNjQgKFNNTV9GRUFUVVJFU19MSUJfSUEzMl9NVFJSX0NBUCkgJiBCSVQxMSkg IT0gMCkgew0KPiAtICAgICAgbVNtcnJTdXBwb3J0ZWQgPSBUUlVFOw0KPiArICAgICAgUmV0dXJu VmFsdWUgPSBUUlVFOw0KPiAgICAgIH0NCj4gICAgfQ0KPiANCj4gICAgLy8NCj4gICAgLy8gSW50 ZWwoUikgNjQgYW5kIElBLTMyIEFyY2hpdGVjdHVyZXMgU29mdHdhcmUgRGV2ZWxvcGVyJ3MgTWFu dWFsDQo+IEBAIC0xMDksMjggKzEwNiw3OSBAQCBDcHVGZWF0dXJlc0xpYkluaXRpYWxpemF0aW9u ICgNCj4gICAgLy8gSWYgQ1BVIEZhbWlseS9Nb2RlbCBpcyAwNl8xQ0gsIDA2XzI2SCwgMDZfMjdI LCAwNl8zNUggb3IgMDZfMzZILCB0aGVuDQo+ICAgIC8vIFNNUlIgUGh5c2ljYWwgQmFzZSBhbmQg U01NIFBoeXNpY2FsIE1hc2sgTVNScyBhcmUgbm90IGF2YWlsYWJsZS4NCj4gICAgLy8NCj4gICAg aWYgKEZhbWlseUlkID09IDB4MDYpIHsNCj4gICAgICBpZiAoKE1vZGVsSWQgPT0gMHgxQykgfHwg KE1vZGVsSWQgPT0gMHgyNikgfHwgKE1vZGVsSWQgPT0gMHgyNykgfHwgKE1vZGVsSWQgPT0gMHgz NSkgfHwgKE1vZGVsSWQgPT0gMHgzNikpIHsNCj4gLSAgICAgIG1TbXJyU3VwcG9ydGVkID0gRkFM U0U7DQo+ICsgICAgICBSZXR1cm5WYWx1ZSA9IEZBTFNFOw0KPiAgICAgIH0NCj4gICAgfQ0KPiAN Cj4gLSAgLy8NCj4gLSAgLy8gSW50ZWwoUikgNjQgYW5kIElBLTMyIEFyY2hpdGVjdHVyZXMgU29m dHdhcmUgRGV2ZWxvcGVyJ3MgTWFudWFsDQo+IC0gIC8vIFZvbHVtZSAzQywgU2VjdGlvbiAzNS4y IE1TUnMgaW4gdGhlIEludGVsKFIpIENvcmUoVE0pIDIgUHJvY2Vzc29yIEZhbWlseQ0KPiAtICAv Lw0KPiAtICAvLyBJZiBDUFUgRmFtaWx5L01vZGVsIGlzIDA2XzBGIG9yIDA2XzE3LCB0aGVuIHVz ZSBJbnRlbChSKSBDb3JlKFRNKSAyDQo+IC0gIC8vIFByb2Nlc3NvciBGYW1pbHkgTVNScw0KPiAt ICAvLw0KPiAtICBpZiAoRmFtaWx5SWQgPT0gMHgwNikgew0KPiAtICAgIGlmICgoTW9kZWxJZCA9 PSAweDE3KSB8fCAoTW9kZWxJZCA9PSAweDBmKSkgew0KPiAtICAgICAgbVNtcnJQaHlzQmFzZU1z ciA9IFNNTV9GRUFUVVJFU19MSUJfSUEzMl9DT1JFX1NNUlJfUEhZU0JBU0U7DQo+IC0gICAgICBt U21yclBoeXNNYXNrTXNyID0gU01NX0ZFQVRVUkVTX0xJQl9JQTMyX0NPUkVfU01SUl9QSFlTTUFT SzsNCj4gKyAgaWYgKFJldHVyblZhbHVlKSB7DQo+ICsgICAgLy8NCj4gKyAgICAvLyBSZXR1cm4g dGhlIFNtcnJQaHlzQmFzZU1zciAmIFNtcnJQaHlzTWFza01zciBpZiByZXF1aXJlZCAmIFNtcnIg U3VwcG9ydGVkDQo+ICsgICAgLy8NCj4gKyAgICBpZiAoU21yclBoeXNCYXNlTXNyICE9IE5VTEwp IHsNCj4gKyAgICAgICpTbXJyUGh5c0Jhc2VNc3IgPSBTTU1fRkVBVFVSRVNfTElCX0lBMzJfU01S Ul9QSFlTQkFTRTsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBpZiAoU21yclBoeXNCYXNlTXNyICE9 IE5VTEwpIHsNCj4gKyAgICAgICpTbXJyUGh5c01hc2tNc3IgPSBTTU1fRkVBVFVSRVNfTElCX0lB MzJfU01SUl9QSFlTTUFTSzsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICAvLw0KPiArICAgIC8vIElu dGVsKFIpIDY0IGFuZCBJQS0zMiBBcmNoaXRlY3R1cmVzIFNvZnR3YXJlIERldmVsb3BlcidzIE1h bnVhbA0KPiArICAgIC8vIFZvbHVtZSAzQywgU2VjdGlvbiAzNS4yIE1TUnMgaW4gdGhlIEludGVs KFIpIENvcmUoVE0pIDIgUHJvY2Vzc29yIEZhbWlseQ0KPiArICAgIC8vDQo+ICsgICAgLy8gSWYg Q1BVIEZhbWlseS9Nb2RlbCBpcyAwNl8wRiBvciAwNl8xNywgdGhlbiB1c2UgSW50ZWwoUikgQ29y ZShUTSkgMg0KPiArICAgIC8vIFByb2Nlc3NvciBGYW1pbHkgTVNScw0KPiArICAgIC8vDQo+ICsg ICAgaWYgKEZhbWlseUlkID09IDB4MDYpIHsNCj4gKyAgICAgIGlmICgoTW9kZWxJZCA9PSAweDE3 KSB8fCAoTW9kZWxJZCA9PSAweDBmKSkgew0KPiArICAgICAgICBpZiAoU21yclBoeXNCYXNlTXNy ICE9IE5VTEwpIHsNCj4gKyAgICAgICAgICAqU21yclBoeXNCYXNlTXNyID0gU01NX0ZFQVRVUkVT X0xJQl9JQTMyX0NPUkVfU01SUl9QSFlTQkFTRTsNCj4gKyAgICAgICAgfQ0KPiArDQo+ICsgICAg ICAgIGlmIChTbXJyUGh5c01hc2tNc3IgIT0gTlVMTCkgew0KPiArICAgICAgICAgICpTbXJyUGh5 c01hc2tNc3IgPSBTTU1fRkVBVFVSRVNfTElCX0lBMzJfQ09SRV9TTVJSX1BIWVNNQVNLOw0KPiAr ICAgICAgICB9DQo+ICsNCj4gKyAgICAgICAgLy8NCj4gKyAgICAgICAgLy8gSW50ZWwoUikgNjQg YW5kIElBLTMyIEFyY2hpdGVjdHVyZXMgU29mdHdhcmUgRGV2ZWxvcGVyJ3MgTWFudWFsDQo+ICsg ICAgICAgIC8vIFZvbHVtZSAzQywgU2VjdGlvbiAzNS4yIE1TUnMgaW4gdGhlIEludGVsKFIpIENv cmUoVE0pIDIgUHJvY2Vzc29yIEZhbWlseQ0KPiArICAgICAgICAvLw0KPiArICAgICAgICAvLyBJ ZiBJbnRlbChSKSBDb3JlKFRNKSBDb3JlKFRNKSAyIFByb2Nlc3NvciBGYW1pbHkgTVNScyBhcmUg YmVpbmcgdXNlZCwgdGhlbg0KPiArICAgICAgICAvLyBtYWtlIHN1cmUgU01SUiBFbmFibGUoQklU Mykgb2YgTVNSX0ZFQVRVUkVfQ09OVFJPTCBNU1IoMHgzQSkgaXMgc2V0IGJlZm9yZQ0KPiArICAg ICAgICAvLyBhY2Nlc3NpbmcgU01SUiBiYXNlL21hc2sgTVNScy4gIElmIExvY2soQklUMCkgb2Yg TVNSX0ZFQVRVUkVfQ09OVFJPTCBNU1IoMHgzQSkNCj4gKyAgICAgICAgLy8gaXMgc2V0LCB0aGVu IHRoZSBNU1IgaXMgbG9ja2VkIGFuZCBjYW4gbm90IGJlIG1vZGlmaWVkLg0KPiArICAgICAgICAv Lw0KPiArDQo+ICsgICAgICAgIEZlYXR1cmVDb250cm9sID0gQXNtUmVhZE1zcjY0IChTTU1fRkVB VFVSRVNfTElCX0lBMzJfRkVBVFVSRV9DT05UUk9MKTsNCj4gKyAgICAgICAgaWYgKCgoRmVhdHVy ZUNvbnRyb2wgJiBCSVQzKSA9PSAwKSAmJiAoKEZlYXR1cmVDb250cm9sICYgQklUMCkgPT0gMSkp IHsNCj4gKyAgICAgICAgICBSZXR1cm5WYWx1ZSA9IEZBTFNFOw0KPiArICAgICAgICB9DQo+ICsg ICAgICB9DQo+ICAgICAgfQ0KPiAgICB9DQo+IA0KPiArICByZXR1cm4gUmV0dXJuVmFsdWU7DQo+ ICt9DQo+ICsNCj4gKy8qKg0KPiArICBQZXJmb3JtcyBsaWJyYXJ5IGluaXRpYWxpemF0aW9uLg0K PiArDQo+ICsgIFRoaXMgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gY29udGFpbnMgY29tbW9uIGZ1 bmN0aW9uYWxpdHkgc2hhcmVkIGJldHdlbiBhbGwNCj4gKyAgbGlicmFyeSBpbnN0YW5jZSBjb25z dHJ1Y3RvcnMuDQo+ICsNCj4gKyoqLw0KPiArVk9JRA0KPiArQ3B1RmVhdHVyZXNMaWJJbml0aWFs aXphdGlvbiAoDQo+ICsgIFZPSUQNCj4gKyAgKQ0KPiArew0KPiArICBVSU5UMzIgIFJlZ0VheDsN Cj4gKyAgVUlOVDMyICBSZWdFZHg7DQo+ICsNCj4gICAgLy8NCj4gICAgLy8gSW50ZWwoUikgNjQg YW5kIElBLTMyIEFyY2hpdGVjdHVyZXMgU29mdHdhcmUgRGV2ZWxvcGVyJ3MgTWFudWFsDQo+ICAg IC8vIFZvbHVtZSAzQywgU2VjdGlvbiAzNC40LjIgU01SQU0gQ2FjaGluZw0KPiAgICAvLyAgIEFu IElBLTMyIHByb2Nlc3NvciBkb2VzIG5vdCBhdXRvbWF0aWNhbGx5IHdyaXRlIGJhY2sgYW5kIGlu dmFsaWRhdGUgaXRzDQo+ICAgIC8vICAgY2FjaGVzIGJlZm9yZSBlbnRlcmluZyBTTU0gb3IgYmVm b3JlIGV4aXRpbmcgU01NLiBCZWNhdXNlIG9mIHRoaXMgYmVoYXZpb3IsDQo+IEBAIC0xOTMsNTAg KzI0MSwyNyBAQCBTbW1DcHVGZWF0dXJlc0luaXRpYWxpemVQcm9jZXNzb3IgKA0KPiAgICBJTiBF RklfUFJPQ0VTU09SX0lORk9STUFUSU9OICAqUHJvY2Vzc29ySW5mbywNCj4gICAgSU4gQ1BVX0hP VF9QTFVHX0RBVEEgICAgICAgICAgKkNwdUhvdFBsdWdEYXRhDQo+ICAgICkNCj4gIHsNCj4gICAg U01SQU1fU0FWRV9TVEFURV9NQVAgICpDcHVTdGF0ZTsNCj4gLSAgVUlOVDY0ICAgICAgICAgICAg ICAgIEZlYXR1cmVDb250cm9sOw0KPiAtICBVSU5UMzIgICAgICAgICAgICAgICAgUmVnRWF4Ow0K PiAtICBVSU5UMzIgICAgICAgICAgICAgICAgUmVnRWR4Ow0KPiAtICBVSU5UTiAgICAgICAgICAg ICAgICAgRmFtaWx5SWQ7DQo+IC0gIFVJTlROICAgICAgICAgICAgICAgICBNb2RlbElkOw0KPiAr ICBVSU5UMzIgICAgICAgICAgICAgICAgU21yclBoeXNCYXNlTXNyOw0KPiArICBVSU5UMzIgICAg ICAgICAgICAgICAgU21yclBoeXNNYXNrTXNyOw0KPiANCj4gICAgLy8NCj4gICAgLy8gQ29uZmln dXJlIFNNQkFTRS4NCj4gICAgLy8NCj4gICAgQ3B1U3RhdGUgICAgICAgICAgICAgPSAoU01SQU1f U0FWRV9TVEFURV9NQVAgKikoVUlOVE4pKFNNTV9ERUZBVUxUX1NNQkFTRSArIFNNUkFNX1NBVkVf U1RBVEVfTUFQX09GRlNFVCk7DQo+ICAgIENwdVN0YXRlLT54ODYuU01CQVNFID0gKFVJTlQzMilD cHVIb3RQbHVnRGF0YS0+U21CYXNlW0NwdUluZGV4XTsNCj4gDQo+IC0gIC8vDQo+IC0gIC8vIElu dGVsKFIpIDY0IGFuZCBJQS0zMiBBcmNoaXRlY3R1cmVzIFNvZnR3YXJlIERldmVsb3BlcidzIE1h bnVhbA0KPiAtICAvLyBWb2x1bWUgM0MsIFNlY3Rpb24gMzUuMiBNU1JzIGluIHRoZSBJbnRlbChS KSBDb3JlKFRNKSAyIFByb2Nlc3NvciBGYW1pbHkNCj4gLSAgLy8NCj4gLSAgLy8gSWYgSW50ZWwo UikgQ29yZShUTSkgQ29yZShUTSkgMiBQcm9jZXNzb3IgRmFtaWx5IE1TUnMgYXJlIGJlaW5nIHVz ZWQsIHRoZW4NCj4gLSAgLy8gbWFrZSBzdXJlIFNNUlIgRW5hYmxlKEJJVDMpIG9mIE1TUl9GRUFU VVJFX0NPTlRST0wgTVNSKDB4M0EpIGlzIHNldCBiZWZvcmUNCj4gLSAgLy8gYWNjZXNzaW5nIFNN UlIgYmFzZS9tYXNrIE1TUnMuICBJZiBMb2NrKEJJVDApIG9mIE1TUl9GRUFUVVJFX0NPTlRST0wg TVNSKDB4M0EpDQo+IC0gIC8vIGlzIHNldCwgdGhlbiB0aGUgTVNSIGlzIGxvY2tlZCBhbmQgY2Fu IG5vdCBiZSBtb2RpZmllZC4NCj4gLSAgLy8NCj4gLSAgaWYgKG1TbXJyU3VwcG9ydGVkICYmICht U21yclBoeXNCYXNlTXNyID09IFNNTV9GRUFUVVJFU19MSUJfSUEzMl9DT1JFX1NNUlJfUEhZU0JB U0UpKSB7DQo+IC0gICAgRmVhdHVyZUNvbnRyb2wgPSBBc21SZWFkTXNyNjQgKFNNTV9GRUFUVVJF U19MSUJfSUEzMl9GRUFUVVJFX0NPTlRST0wpOw0KPiAtICAgIGlmICgoRmVhdHVyZUNvbnRyb2wg JiBCSVQzKSA9PSAwKSB7DQo+IC0gICAgICBpZiAoKEZlYXR1cmVDb250cm9sICYgQklUMCkgPT0g MCkgew0KPiAtICAgICAgICBBc21Xcml0ZU1zcjY0IChTTU1fRkVBVFVSRVNfTElCX0lBMzJfRkVB VFVSRV9DT05UUk9MLCBGZWF0dXJlQ29udHJvbCB8IEJJVDMpOw0KPiAtICAgICAgfSBlbHNlIHsN Cj4gLSAgICAgICAgbVNtcnJTdXBwb3J0ZWQgPSBGQUxTRTsNCj4gLSAgICAgIH0NCj4gLSAgICB9 DQo+IC0gIH0NCj4gLQ0KPiAgICAvLw0KPiAgICAvLyBJZiBTTVJSIGlzIHN1cHBvcnRlZCwgdGhl biBwcm9ncmFtIFNNUlIgYmFzZS9tYXNrIE1TUnMuDQo+ICAgIC8vIFRoZSBFRklfTVNSX1NNUlJf UEhZU19NQVNLX1ZBTElEIGJpdCBpcyBub3Qgc2V0IHVudGlsIHRoZSBmaXJzdCBub3JtYWwgU01J Lg0KPiAgICAvLyBUaGUgY29kZSB0aGF0IGluaXRpYWxpemVzIFNNTSBlbnZpcm9ubWVudCBpcyBy dW5uaW5nIGluIG5vcm1hbCBtb2RlDQo+ICAgIC8vIGZyb20gU01SQU0gcmVnaW9uLiAgSWYgU01S UiBpcyBlbmFibGVkIGhlcmUsIHRoZW4gdGhlIFNNUkFNIHJlZ2lvbg0KPiAgICAvLyBpcyBwcm90 ZWN0ZWQgYW5kIHRoZSBub3JtYWwgbW9kZSBjb2RlIGV4ZWN1dGlvbiB3aWxsIGZhaWwuDQo+ICAg IC8vDQo+IC0gIGlmIChtU21yclN1cHBvcnRlZCkgew0KPiArICBpZiAoSXNTbXJyU3VwcG9ydGVk ICgmU21yclBoeXNCYXNlTXNyLCAmU21yclBoeXNNYXNrTXNyKSkgew0KPiAgICAgIC8vDQo+ICAg ICAgLy8gU01SUiBzaXplIGNhbm5vdCBiZSBsZXNzIHRoYW4gNC1LQnl0ZXMNCj4gICAgICAvLyBT TVJSIHNpemUgbXVzdCBiZSBvZiBsZW5ndGggMl5uDQo+ICAgICAgLy8gU01SUiBiYXNlIGFsaWdu bWVudCBjYW5ub3QgYmUgbGVzcyB0aGFuIFNNUlIgbGVuZ3RoDQo+ICAgICAgLy8NCj4gQEAgLTI1 MCw1MCArMjc1LDE2IEBAIFNtbUNwdUZlYXR1cmVzSW5pdGlhbGl6ZVByb2Nlc3NvciAoDQo+ICAg ICAgICBpZiAoSXNNb25hcmNoKSB7DQo+ICAgICAgICAgIERFQlVHICgoREVCVUdfRVJST1IsICJT TU0gQmFzZS9TaXplIGRvZXMgbm90IG1lZXQgYWxpZ25tZW50L3NpemUgcmVxdWlyZW1lbnQhXG4i KSk7DQo+ICAgICAgICAgIENwdURlYWRMb29wICgpOw0KPiAgICAgICAgfQ0KPiAgICAgIH0gZWxz ZSB7DQo+IC0gICAgICBBc21Xcml0ZU1zcjY0IChtU21yclBoeXNCYXNlTXNyLCBDcHVIb3RQbHVn RGF0YS0+U21yckJhc2UgfCBNVFJSX0NBQ0hFX1dSSVRFX0JBQ0spOw0KPiAtICAgICAgQXNtV3Jp dGVNc3I2NCAobVNtcnJQaHlzTWFza01zciwgKH4oQ3B1SG90UGx1Z0RhdGEtPlNtcnJTaXplIC0g MSkgJiBFRklfTVNSX1NNUlJfTUFTSykpOw0KPiArICAgICAgQXNtV3JpdGVNc3I2NCAoU21yclBo eXNCYXNlTXNyLCBDcHVIb3RQbHVnRGF0YS0+U21yckJhc2UgfCBNVFJSX0NBQ0hFX1dSSVRFX0JB Q0spOw0KPiArICAgICAgQXNtV3JpdGVNc3I2NCAoU21yclBoeXNNYXNrTXNyLCAofihDcHVIb3RQ bHVnRGF0YS0+U21yclNpemUgLSAxKSAmIEVGSV9NU1JfU01SUl9NQVNLKSk7DQo+ICAgICAgICBt U21yckVuYWJsZWRbQ3B1SW5kZXhdID0gRkFMU0U7DQo+ICAgICAgfQ0KPiAgICB9DQo+IA0KPiAt ICAvLw0KPiAtICAvLyBSZXRyaWV2ZSBDUFUgRmFtaWx5IGFuZCBNb2RlbA0KPiAtICAvLw0KPiAt ICBBc21DcHVpZCAoQ1BVSURfVkVSU0lPTl9JTkZPLCAmUmVnRWF4LCBOVUxMLCBOVUxMLCAmUmVn RWR4KTsNCj4gLSAgRmFtaWx5SWQgPSAoUmVnRWF4ID4+IDgpICYgMHhmOw0KPiAtICBNb2RlbElk ICA9IChSZWdFYXggPj4gNCkgJiAweGY7DQo+IC0gIGlmICgoRmFtaWx5SWQgPT0gMHgwNikgfHwg KEZhbWlseUlkID09IDB4MGYpKSB7DQo+IC0gICAgTW9kZWxJZCA9IE1vZGVsSWQgfCAoKFJlZ0Vh eCA+PiAxMikgJiAweGYwKTsNCj4gLSAgfQ0KPiAtDQo+IC0gIC8vDQo+IC0gIC8vIEludGVsKFIp IDY0IGFuZCBJQS0zMiBBcmNoaXRlY3R1cmVzIFNvZnR3YXJlIERldmVsb3BlcidzIE1hbnVhbA0K PiAtICAvLyBWb2x1bWUgM0MsIFNlY3Rpb24gMzUuMTAuMSBNU1JzIGluIDR0aCBHZW5lcmF0aW9u IEludGVsKFIpIENvcmUoVE0pDQo+IC0gIC8vIFByb2Nlc3NvciBGYW1pbHkuDQo+IC0gIC8vDQo+ IC0gIC8vIElmIENQVSBGYW1pbHkvTW9kZWwgaXMgMDZfM0MsIDA2XzQ1LCBvciAwNl80NiB0aGVu IHVzZSA0dGggR2VuZXJhdGlvbg0KPiAtICAvLyBJbnRlbChSKSBDb3JlKFRNKSBQcm9jZXNzb3Ig RmFtaWx5IE1TUnMuDQo+IC0gIC8vDQo+IC0gIGlmIChGYW1pbHlJZCA9PSAweDA2KSB7DQo+IC0g ICAgaWYgKChNb2RlbElkID09IDB4M0MpIHx8IChNb2RlbElkID09IDB4NDUpIHx8IChNb2RlbElk ID09IDB4NDYpIHx8DQo+IC0gICAgICAgIChNb2RlbElkID09IDB4M0QpIHx8IChNb2RlbElkID09 IDB4NDcpIHx8IChNb2RlbElkID09IDB4NEUpIHx8IChNb2RlbElkID09IDB4NEYpIHx8DQo+IC0g ICAgICAgIChNb2RlbElkID09IDB4M0YpIHx8IChNb2RlbElkID09IDB4NTYpIHx8IChNb2RlbElk ID09IDB4NTcpIHx8IChNb2RlbElkID09IDB4NUMpIHx8DQo+IC0gICAgICAgIChNb2RlbElkID09 IDB4OEMpKQ0KPiAtICAgIHsNCj4gLSAgICAgIC8vDQo+IC0gICAgICAvLyBDaGVjayB0byBzZWUg aWYgdGhlIENQVSBzdXBwb3J0cyB0aGUgU01NIENvZGUgQWNjZXNzIENoZWNrIGZlYXR1cmUNCj4g LSAgICAgIC8vIERvIG5vdCBhY2Nlc3MgdGhpcyBNU1IgdW5sZXNzIHRoZSBDUFUgc3VwcG9ydHMg dGhlIFNtbVJlZ0ZlYXR1cmVDb250cm9sDQo+IC0gICAgICAvLw0KPiAtICAgICAgaWYgKChBc21S ZWFkTXNyNjQgKFNNTV9GRUFUVVJFU19MSUJfSUEzMl9NQ0FfQ0FQKSAmIFNNTV9DT0RFX0FDQ0VT U19DSEtfQklUKSAhPSAwKSB7DQo+IC0gICAgICAgIG1TbW1GZWF0dXJlQ29udHJvbFN1cHBvcnRl ZCA9IFRSVUU7DQo+IC0gICAgICB9DQo+IC0gICAgfQ0KPiAtICB9DQo+IC0NCj4gICAgLy8NCj4g ICAgLy8gIENhbGwgaW50ZXJuYWwgd29ya2VyIGZ1bmN0aW9uIHRoYXQgY29tcGxldGVzIHRoZSBD UFUgaW5pdGlhbGl6YXRpb24NCj4gICAgLy8NCj4gICAgRmluaXNoU21tQ3B1RmVhdHVyZXNJbml0 aWFsaXplUHJvY2Vzc29yICgpOw0KPiAgfQ0KPiBAQCAtMzgxLDEyICszNzIsMTQgQEAgVk9JRA0K PiAgRUZJQVBJDQo+ICBTbW1DcHVGZWF0dXJlc0Rpc2FibGVTbXJyICgNCj4gICAgVk9JRA0KPiAg ICApDQo+ICB7DQo+IC0gIGlmIChtU21yclN1cHBvcnRlZCAmJiBtTmVlZENvbmZpZ3VyZU10cnJz KSB7DQo+IC0gICAgQXNtV3JpdGVNc3I2NCAobVNtcnJQaHlzTWFza01zciwgQXNtUmVhZE1zcjY0 IChtU21yclBoeXNNYXNrTXNyKSAmIH5FRklfTVNSX1NNUlJfUEhZU19NQVNLX1ZBTElEKTsNCj4g KyAgVUlOVDMyICBTbXJyUGh5c01hc2tNc3I7DQo+ICsNCj4gKyAgaWYgKElzU21yclN1cHBvcnRl ZCAoTlVMTCwgJlNtcnJQaHlzTWFza01zcikgJiYgbU5lZWRDb25maWd1cmVNdHJycykgew0KPiAr ICAgIEFzbVdyaXRlTXNyNjQgKFNtcnJQaHlzTWFza01zciwgQXNtUmVhZE1zcjY0IChTbXJyUGh5 c01hc2tNc3IpICYgfkVGSV9NU1JfU01SUl9QSFlTX01BU0tfVkFMSUQpOw0KPiAgICB9DQo+ICB9 DQo+IA0KPiAgLyoqDQo+ICAgIEVuYWJsZSBTTVJSIHJlZ2lzdGVyIGlmIFNNUlIgaXMgc3VwcG9y dGVkIGFuZCBTbW1DcHVGZWF0dXJlc05lZWRDb25maWd1cmVNdHJycygpDQo+IEBAIC0zOTYsMTIg KzM4OSwxNCBAQCBWT0lEDQo+ICBFRklBUEkNCj4gIFNtbUNwdUZlYXR1cmVzUmVlbmFibGVTbXJy ICgNCj4gICAgVk9JRA0KPiAgICApDQo+ICB7DQo+IC0gIGlmIChtU21yclN1cHBvcnRlZCAmJiBt TmVlZENvbmZpZ3VyZU10cnJzKSB7DQo+IC0gICAgQXNtV3JpdGVNc3I2NCAobVNtcnJQaHlzTWFz a01zciwgQXNtUmVhZE1zcjY0IChtU21yclBoeXNNYXNrTXNyKSB8IEVGSV9NU1JfU01SUl9QSFlT X01BU0tfVkFMSUQpOw0KPiArICBVSU5UMzIgIFNtcnJQaHlzTWFza01zcjsNCj4gKw0KPiArICBp ZiAoSXNTbXJyU3VwcG9ydGVkIChOVUxMLCAmU21yclBoeXNNYXNrTXNyKSAmJiBtTmVlZENvbmZp Z3VyZU10cnJzKSB7DQo+ICsgICAgQXNtV3JpdGVNc3I2NCAoU21yclBoeXNNYXNrTXNyLCBBc21S ZWFkTXNyNjQgKFNtcnJQaHlzTWFza01zcikgfCBFRklfTVNSX1NNUlJfUEhZU19NQVNLX1ZBTElE KTsNCj4gICAgfQ0KPiAgfQ0KPiANCj4gIC8qKg0KPiAgICBQcm9jZXNzb3Igc3BlY2lmaWMgaG9v ayBwb2ludCBlYWNoIHRpbWUgYSBDUFUgZW50ZXJzIFN5c3RlbSBNYW5hZ2VtZW50IE1vZGUuDQo+ IEBAIC00MTQsMTUgKzQwOSwxNyBAQCBWT0lEDQo+ICBFRklBUEkNCj4gIFNtbUNwdUZlYXR1cmVz UmVuZGV6dm91c0VudHJ5ICgNCj4gICAgSU4gVUlOVE4gIENwdUluZGV4DQo+ICAgICkNCj4gIHsN Cj4gKyAgVUlOVDMyICBTbXJyUGh5c01hc2tNc3I7DQo+ICsNCj4gICAgLy8NCj4gICAgLy8gSWYg U01SUiBpcyBzdXBwb3J0ZWQgYW5kIHRoaXMgaXMgdGhlIGZpcnN0IG5vcm1hbCBTTUksIHRoZW4g ZW5hYmxlIFNNUlINCj4gICAgLy8NCj4gLSAgaWYgKG1TbXJyU3VwcG9ydGVkICYmICFtU21yckVu YWJsZWRbQ3B1SW5kZXhdKSB7DQo+IC0gICAgQXNtV3JpdGVNc3I2NCAobVNtcnJQaHlzTWFza01z ciwgQXNtUmVhZE1zcjY0IChtU21yclBoeXNNYXNrTXNyKSB8IEVGSV9NU1JfU01SUl9QSFlTX01B U0tfVkFMSUQpOw0KPiArICBpZiAoIW1TbXJyRW5hYmxlZFtDcHVJbmRleF0gJiYgSXNTbXJyU3Vw cG9ydGVkIChOVUxMLCAmU21yclBoeXNNYXNrTXNyKSkgew0KPiArICAgIEFzbVdyaXRlTXNyNjQg KFNtcnJQaHlzTWFza01zciwgQXNtUmVhZE1zcjY0IChTbXJyUGh5c01hc2tNc3IpIHwgRUZJX01T Ul9TTVJSX1BIWVNfTUFTS19WQUxJRCk7DQo+ICAgICAgbVNtcnJFbmFibGVkW0NwdUluZGV4XSA9 IFRSVUU7DQo+ICAgIH0NCj4gIH0NCj4gDQo+ICAvKioNCj4gQEAgLTQ1OCwxMiArNDU1LDQ5IEBA IEVGSUFQSQ0KPiAgU21tQ3B1RmVhdHVyZXNJc1NtbVJlZ2lzdGVyU3VwcG9ydGVkICgNCj4gICAg SU4gVUlOVE4gICAgICAgICBDcHVJbmRleCwNCj4gICAgSU4gU01NX1JFR19OQU1FICBSZWdOYW1l DQo+ICAgICkNCj4gIHsNCj4gLSAgaWYgKG1TbW1GZWF0dXJlQ29udHJvbFN1cHBvcnRlZCAmJiAo UmVnTmFtZSA9PSBTbW1SZWdGZWF0dXJlQ29udHJvbCkpIHsNCj4gLSAgICByZXR1cm4gVFJVRTsN Cj4gKyAgVUlOVDMyICBSZWdFYXg7DQo+ICsgIFVJTlQzMiAgUmVnRWR4Ow0KPiArICBVSU5UTiAg IEZhbWlseUlkOw0KPiArICBVSU5UTiAgIE1vZGVsSWQ7DQo+ICsNCj4gKyAgaWYgKFJlZ05hbWUg PT0gU21tUmVnRmVhdHVyZUNvbnRyb2wpIHsNCj4gKyAgICAvLw0KPiArICAgIC8vIFJldHJpZXZl IENQVSBGYW1pbHkgYW5kIE1vZGVsDQo+ICsgICAgLy8NCj4gKyAgICBBc21DcHVpZCAoQ1BVSURf VkVSU0lPTl9JTkZPLCAmUmVnRWF4LCBOVUxMLCBOVUxMLCAmUmVnRWR4KTsNCj4gKyAgICBGYW1p bHlJZCA9IChSZWdFYXggPj4gOCkgJiAweGY7DQo+ICsgICAgTW9kZWxJZCAgPSAoUmVnRWF4ID4+ IDQpICYgMHhmOw0KPiArICAgIGlmICgoRmFtaWx5SWQgPT0gMHgwNikgfHwgKEZhbWlseUlkID09 IDB4MGYpKSB7DQo+ICsgICAgICBNb2RlbElkID0gTW9kZWxJZCB8ICgoUmVnRWF4ID4+IDEyKSAm IDB4ZjApOw0KPiArICAgIH0NCj4gKw0KPiArICAgIC8vDQo+ICsgICAgLy8gSW50ZWwoUikgNjQg YW5kIElBLTMyIEFyY2hpdGVjdHVyZXMgU29mdHdhcmUgRGV2ZWxvcGVyJ3MgTWFudWFsDQo+ICsg ICAgLy8gVm9sdW1lIDNDLCBTZWN0aW9uIDM1LjEwLjEgTVNScyBpbiA0dGggR2VuZXJhdGlvbiBJ bnRlbChSKSBDb3JlKFRNKQ0KPiArICAgIC8vIFByb2Nlc3NvciBGYW1pbHkuDQo+ICsgICAgLy8N Cj4gKyAgICAvLyBJZiBDUFUgRmFtaWx5L01vZGVsIGlzIDA2XzNDLCAwNl80NSwgb3IgMDZfNDYg dGhlbiB1c2UgNHRoIEdlbmVyYXRpb24NCj4gKyAgICAvLyBJbnRlbChSKSBDb3JlKFRNKSBQcm9j ZXNzb3IgRmFtaWx5IE1TUnMuDQo+ICsgICAgLy8NCj4gKyAgICBpZiAoRmFtaWx5SWQgPT0gMHgw Nikgew0KPiArICAgICAgaWYgKChNb2RlbElkID09IDB4M0MpIHx8IChNb2RlbElkID09IDB4NDUp IHx8IChNb2RlbElkID09IDB4NDYpIHx8DQo+ICsgICAgICAgICAgKE1vZGVsSWQgPT0gMHgzRCkg fHwgKE1vZGVsSWQgPT0gMHg0NykgfHwgKE1vZGVsSWQgPT0gMHg0RSkgfHwgKE1vZGVsSWQgPT0g MHg0RikgfHwNCj4gKyAgICAgICAgICAoTW9kZWxJZCA9PSAweDNGKSB8fCAoTW9kZWxJZCA9PSAw eDU2KSB8fCAoTW9kZWxJZCA9PSAweDU3KSB8fCAoTW9kZWxJZCA9PSAweDVDKSB8fA0KPiArICAg ICAgICAgIChNb2RlbElkID09IDB4OEMpKQ0KPiArICAgICAgew0KPiArICAgICAgICAvLw0KPiAr ICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhlIENQVSBzdXBwb3J0cyB0aGUgU01NIENvZGUg QWNjZXNzIENoZWNrIGZlYXR1cmUNCj4gKyAgICAgICAgLy8gRG8gbm90IGFjY2VzcyB0aGlzIE1T UiB1bmxlc3MgdGhlIENQVSBzdXBwb3J0cyB0aGUgU21tUmVnRmVhdHVyZUNvbnRyb2wNCj4gKyAg ICAgICAgLy8NCj4gKyAgICAgICAgaWYgKChBc21SZWFkTXNyNjQgKFNNTV9GRUFUVVJFU19MSUJf SUEzMl9NQ0FfQ0FQKSAmIFNNTV9DT0RFX0FDQ0VTU19DSEtfQklUKSAhPSAwKSB7DQo+ICsgICAg ICAgICAgcmV0dXJuIFRSVUU7DQo+ICsgICAgICAgIH0NCj4gKyAgICAgIH0NCj4gKyAgICB9DQo+ ICAgIH0NCj4gDQo+ICAgIHJldHVybiBGQUxTRTsNCj4gIH0NCj4gDQo+IEBAIC00ODQsMTEgKzUx OCwxMSBAQCBFRklBUEkNCj4gIFNtbUNwdUZlYXR1cmVzR2V0U21tUmVnaXN0ZXIgKA0KPiAgICBJ TiBVSU5UTiAgICAgICAgIENwdUluZGV4LA0KPiAgICBJTiBTTU1fUkVHX05BTUUgIFJlZ05hbWUN Cj4gICAgKQ0KPiAgew0KPiAtICBpZiAobVNtbUZlYXR1cmVDb250cm9sU3VwcG9ydGVkICYmIChS ZWdOYW1lID09IFNtbVJlZ0ZlYXR1cmVDb250cm9sKSkgew0KPiArICBpZiAoU21tQ3B1RmVhdHVy ZXNJc1NtbVJlZ2lzdGVyU3VwcG9ydGVkIChDcHVJbmRleCwgUmVnTmFtZSkpIHsNCj4gICAgICBy ZXR1cm4gQXNtUmVhZE1zcjY0IChTTU1fRkVBVFVSRVNfTElCX1NNTV9GRUFUVVJFX0NPTlRST0wp Ow0KPiAgICB9DQo+IA0KPiAgICByZXR1cm4gMDsNCj4gIH0NCj4gQEAgLTUxMCwxMSArNTQ0LDEx IEBAIFNtbUNwdUZlYXR1cmVzU2V0U21tUmVnaXN0ZXIgKA0KPiAgICBJTiBVSU5UTiAgICAgICAg IENwdUluZGV4LA0KPiAgICBJTiBTTU1fUkVHX05BTUUgIFJlZ05hbWUsDQo+ICAgIElOIFVJTlQ2 NCAgICAgICAgVmFsdWUNCj4gICAgKQ0KPiAgew0KPiAtICBpZiAobVNtbUZlYXR1cmVDb250cm9s U3VwcG9ydGVkICYmIChSZWdOYW1lID09IFNtbVJlZ0ZlYXR1cmVDb250cm9sKSkgew0KPiArICBp ZiAoU21tQ3B1RmVhdHVyZXNJc1NtbVJlZ2lzdGVyU3VwcG9ydGVkIChDcHVJbmRleCwgUmVnTmFt ZSkpIHsNCj4gICAgICBBc21Xcml0ZU1zcjY0IChTTU1fRkVBVFVSRVNfTElCX1NNTV9GRUFUVVJF X0NPTlRST0wsIFZhbHVlKTsNCj4gICAgfQ0KPiAgfQ0KPiANCj4gIC8qKg0KPiAtLQ0KPiAyLjE2 LjIud2luZG93cy4xDQo+IA0KPiANCj4gDQo+IA0KPiANCg0K