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.11396.1597329488478118165 for ; Thu, 13 Aug 2020 07:38:08 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@intel.onmicrosoft.com header.s=selector2-intel-onmicrosoft-com header.b=gvHUtSst; spf=pass (domain: intel.com, ip: 192.55.52.120, mailfrom: jiewen.yao@intel.com) IronPort-SDR: JHXs1oGxx4jcqL6M/dww2xQgSwIae4XJcf0UfExh9lHvM+Pi2Au4TqQ0aDIONbyq5Lsc42/wCs PYbQjqiHEhiw== X-IronPort-AV: E=McAfee;i="6000,8403,9711"; a="151646066" X-IronPort-AV: E=Sophos;i="5.76,308,1592895600"; d="scan'208";a="151646066" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga004.jf.intel.com ([10.7.209.38]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Aug 2020 07:38:07 -0700 IronPort-SDR: tCMWnR9izIOnWHKYrwMIf78k2pHL/PNCVFXVBCIASJmHrVMVJhjlLNaTurRH0VQbcm2phFVd3s Fay48kB/9r9Q== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.76,308,1592895600"; d="scan'208";a="439795263" Received: from orsmsx601-2.jf.intel.com (HELO ORSMSX601.amr.corp.intel.com) ([10.22.229.81]) by orsmga004.jf.intel.com with ESMTP; 13 Aug 2020 07:38:07 -0700 Received: from orsmsx601.amr.corp.intel.com (10.22.229.14) 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.1713.5; Thu, 13 Aug 2020 07:38:06 -0700 Received: from ORSEDG001.ED.cps.intel.com (10.7.248.4) by orsmsx601.amr.corp.intel.com (10.22.229.14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256) id 15.1.1713.5 via Frontend Transport; Thu, 13 Aug 2020 07:38:06 -0700 Received: from NAM11-BN8-obe.outbound.protection.outlook.com (104.47.58.177) by edgegateway.intel.com (134.134.137.100) with Microsoft SMTP Server (TLS) id 14.3.439.0; Thu, 13 Aug 2020 07:38:06 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Le8ZoCefE7KfFrnFR36zMK/4djGiSRkXW5t72HzpD4CwSsiOoEXtsf635qQTJXNGBiDXjOS72WqKha2c/Lig5ovW83CxUN1TlTsPr+p7mtnmd+qf0BIzr5aSeroSq1UQv+dVmHCucnreuksMV5Jn+aVkDyKqWAxIsCTLEubUVL07rgjbCGuSyPzj8o7xzXxcm9QFjOX7qj6aWvtJkJDdtQn68rgaS/DHOqtbuatFq4xTc/VvNUaciGSh+JnGwq4IU2X2RGA2msti9hBCLN62rPRGmnDIML5HVPRSsjGf/2uKholkrXbKEwW2EWhNRPVQ8J1cEVp3ohU02n1Gc5DF4A== 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-SenderADCheck; bh=pVWM8LLzElB5Msiw/SfvY9/qDwsAkWt5vaCMEjUvcsc=; b=aqlIIy+o1VrWYHXsujDvEtVUOGi/Oj6st/G0YtcCElH7clDKmCF9XZM7V3OMZgQPwKjkUUiGA6cy1NKAeTp57d4eY/Q2kBLorjrnmVlZbArg2qpGRi1S3bE0i1CNG2W+bw1cGbMNeDMfeypRTI/MaGUff1g3vRJo5LY87ZTlGwsWAMzkkO6mcrKhEeSoMq9CPv5hu/eYwOmBMM0R/eIfjYo120f/wDiN2JQ/ieg/GsVjNldH6QuGqFpt+CoM0H3X/oTv8FM4svMR9By4VfdHcSCD1xdiLG+mH8UkBNhNKmvcz+OzWvXxQf+1uFXrUwVWGx7HldCISuJmGaFCpjFLoA== 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 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=intel.onmicrosoft.com; s=selector2-intel-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=pVWM8LLzElB5Msiw/SfvY9/qDwsAkWt5vaCMEjUvcsc=; b=gvHUtSstLT+gRdqTEpMnLRDdPOPQJVZ2YNrXWz5lWxKqE6XgWQNbvcXargT/L/5G/Vv7Cp67VJyYVCr2qgdKrYBAlqyAjXtE7LolXhN4b6vzM2wPZiIahXcqQstdfDKampHze1p6f1crBV+Py6eREXK4mniPMxEOm+WABHS3Rhc= Received: from CY4PR11MB1288.namprd11.prod.outlook.com (2603:10b6:903:23::8) by CY4PR11MB1736.namprd11.prod.outlook.com (2603:10b6:903:120::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3261.16; Thu, 13 Aug 2020 14:38:04 +0000 Received: from CY4PR11MB1288.namprd11.prod.outlook.com ([fe80::163:9209:a92d:812]) by CY4PR11MB1288.namprd11.prod.outlook.com ([fe80::163:9209:a92d:812%6]) with mapi id 15.20.3283.018; Thu, 13 Aug 2020 14:38:04 +0000 From: "Yao, Jiewen" To: Laszlo Ersek , "devel@edk2.groups.io" , "Zurcher, Christopher J" CC: "Wang, Jian J" , "Lu, XiaoyuX" Subject: Re: [edk2-devel] [PATCH 1/1] CryptoPkg/BaseCryptLib: Add EVP (Envelope) Digest interface Thread-Topic: [edk2-devel] [PATCH 1/1] CryptoPkg/BaseCryptLib: Add EVP (Envelope) Digest interface Thread-Index: AQHWcRAJAJ4ANxZ7akyEMBMrvZEkH6k1yx6AgABQ20A= Date: Thu, 13 Aug 2020 14:38:04 +0000 Message-ID: References: <20200813012049.7402-1-christopher.j.zurcher@intel.com> <20200813012049.7402-2-christopher.j.zurcher@intel.com> <15d6f379-9dd2-e6d7-5901-4b23e78c7794@redhat.com> In-Reply-To: <15d6f379-9dd2-e6d7-5901-4b23e78c7794@redhat.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiMTYzOTViMjgtMGM5Mi00ZWQyLWI4MmMtMDQ3ZTk2YTVhOTYxIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoiTjlRSlAyKzdWY1BGWWlHMmU1S2NDXC92U0poSW5HRnVWM3NHeG91SUJHUnZHbnBtbW03TlNlM3RtMmQ5RG5JVHAifQ== x-ctpclassification: CTP_NT dlp-version: 11.5.1.3 dlp-product: dlpe-windows dlp-reaction: no-action authentication-results: redhat.com; dkim=none (message not signed) header.d=none;redhat.com; dmarc=none action=none header.from=intel.com; x-originating-ip: [192.198.147.198] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 0500e74a-ee96-4e70-ffb9-08d83f967cf7 x-ms-traffictypediagnostic: CY4PR11MB1736: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:10000; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: y4raG9HAJb0wiGAlh8zyiikhEj1C6UYkMqAjDlwVTSuaxYerYCi6o+ZYEGe8WSEPneo1Bt5gz/DQ0OQn1k/JitxlQPTttnXYsPYRzDk/rT6KuhSVMgK6vqhCdiBHVqzrQW1RcipJPwlMAskxlfaIOD69+ssHnvibgyy2yX5DRvf4i4mtGiGUbbki4BCLhPekIKkUaLh85p372rayiOlOQV9FsqXjV7QoPwxtrOUMapMR67a32xcxW9JPAosrfvg3BJsNAGu2THAybWo6s101PRrnUv2debZH30EaHQ5YhZ90gW0rD/JIGr1kRGcFbYoQl9MqIAE4SBiCCNFrzfbb8mCKbdoA0EftQ+7kr2EylxWxGdf6iXtuTh5myMiVojJLh4fodutCgDcr2SVVYopeQw== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CY4PR11MB1288.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFTY:;SFS:(4636009)(396003)(39860400002)(376002)(346002)(366004)(136003)(71200400001)(6636002)(52536014)(83380400001)(9686003)(33656002)(30864003)(55016002)(5660300002)(186003)(478600001)(26005)(66946007)(76116006)(54906003)(107886003)(110136005)(4326008)(7696005)(66446008)(64756008)(66556008)(86362001)(966005)(8936002)(316002)(8676002)(53546011)(6506007)(2906002)(66476007);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata: dwZ+U3G+zdBYC5fRmm+HY73cfyZJj6jEUwilaGgpzMrSUuTvfgOGpAx2cPwI/KSoJYO3rwrJxeaeuBDnjG5Bewb1W1K2Q7bgFFASI2HFlYYLs49EcNu4EOP6315SHRZYR4DIGaAGHJ1XH1bBKZ0f20h3x7lqcfy8ZHqqv+NpIKuMDoJYeX42VIMmkN86cbG5JmWSEPiNoBtcRrTn48tQyCkW6F1kescjRoZzbRN2S4o85U+SITn0C/1/VtJteDeGiZgWXXpTybeKzXlV93EZh8aJm6/iRxN6UTuA4PIRRkkIDd6q/X06LW4UVt4u68pfn06HQ5UEEiY9iEpwdVinT7yqKk/7xrODxdLJastI8xsi3LbhDYnP0qCAhgEdZaCojzmReeENkrOeyG7mcuOffuyy4izBtbXhQkAYskcsWrCm2Qh8Dl+wRv6AyWFHoM7O7slZw8e1mb+QH6EvaDsboESEEeZs9Ti93F+hsQksyrEe+Ux4mGHZ9elr1SK/EC+wco4vhsDldbYBm4aNgrCGpL2G2JTJgB8SYOoqAdFfyCBHGUikh/J8tdQGKdb4EGsb7nY4taVFr1cJwBG2TFCfh11PhBAFN9O4JJ8Q6r/ln+YmEp40f20rmFSJHELH17KjzTdrXQrEMiaiQf2DJJbS/A== MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CY4PR11MB1288.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0500e74a-ee96-4e70-ffb9-08d83f967cf7 X-MS-Exchange-CrossTenant-originalarrivaltime: 13 Aug 2020 14:38:04.5307 (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: FANUEqbMsOjkCfAK9R0yrVRKkWWp59Zl90j3tOI218ptn1K+5X/aJNxNG89i4XWoVupyjUXFtz9iPtP6iR2edg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR11MB1736 Return-Path: jiewen.yao@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MSkgQWdyZWUgd2l0aCBMYXN6bG8uDQpXZSBuZWVkIGV4dGVuZCBpbnRlcm5hbCBwcm90b2NvbC9w cGkgZm9yIHRoaXMgbmV3IEFQSS4NCg0KMikgRG8geW91IGhhdmUgYW55IGRhdGEgb24gdGhlIHNp emUgZGlmZmVyZW5jZSBiZXR3ZWVuIG9sZCBTSEEgaW1wbGVtZW50YXRpb24gb3IgbmV3IE1EIGlt cGxlbWVudGF0aW9uPw0KDQpUaGFuayB5b3UNCllhbyBKaWV3ZW4NCg0KPiAtLS0tLU9yaWdpbmFs IE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBMYXN6bG8gRXJzZWsgPGxlcnNla0ByZWRoYXQuY29tPg0K PiBTZW50OiBUaHVyc2RheSwgQXVndXN0IDEzLCAyMDIwIDU6NDcgUE0NCj4gVG86IGRldmVsQGVk azIuZ3JvdXBzLmlvOyBadXJjaGVyLCBDaHJpc3RvcGhlciBKDQo+IDxjaHJpc3RvcGhlci5qLnp1 cmNoZXJAaW50ZWwuY29tPg0KPiBDYzogWWFvLCBKaWV3ZW4gPGppZXdlbi55YW9AaW50ZWwuY29t PjsgV2FuZywgSmlhbiBKIDxqaWFuLmoud2FuZ0BpbnRlbC5jb20+Ow0KPiBMdSwgWGlhb3l1WCA8 eGlhb3l1eC5sdUBpbnRlbC5jb20+DQo+IFN1YmplY3Q6IFJlOiBbZWRrMi1kZXZlbF0gW1BBVENI IDEvMV0gQ3J5cHRvUGtnL0Jhc2VDcnlwdExpYjogQWRkIEVWUA0KPiAoRW52ZWxvcGUpIERpZ2Vz dCBpbnRlcmZhY2UNCj4gDQo+IEhpIENocmlzdG9waGVyLA0KPiANCj4gKCtNaWtlLA0KPiANCj4g T24gMDgvMTMvMjAgMDM6MjAsIFp1cmNoZXIsIENocmlzdG9waGVyIEogd3JvdGU6DQo+ID4gQlo6 IGh0dHBzOi8vYnVnemlsbGEudGlhbm9jb3JlLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjU0NQ0KPiA+ DQo+ID4gVGhlIEVWUCBpbnRlcmZhY2Ugc2hvdWxkIGJlIHVzZWQgaW4gcGxhY2Ugb2YgZGlzY3Jl dGUgZGlnZXN0IGZ1bmN0aW9uDQo+ID4gY2FsbHMuDQo+ID4NCj4gPiBDYzogSmlld2VuIFlhbyA8 amlld2VuLnlhb0BpbnRlbC5jb20+DQo+ID4gQ2M6IEppYW4gSiBXYW5nIDxqaWFuLmoud2FuZ0Bp bnRlbC5jb20+DQo+ID4gQ2M6IFhpYW95dSBMdSA8eGlhb3l1eC5sdUBpbnRlbC5jb20+DQo+ID4g U2lnbmVkLW9mZi1ieTogQ2hyaXN0b3BoZXIgSiBadXJjaGVyIDxjaHJpc3RvcGhlci5qLnp1cmNo ZXJAaW50ZWwuY29tPg0KPiA+IC0tLQ0KPiA+ICBDcnlwdG9Qa2cvTGlicmFyeS9CYXNlQ3J5cHRM aWIvQmFzZUNyeXB0TGliLmluZiAgICB8ICAgMSArDQo+ID4gIENyeXB0b1BrZy9MaWJyYXJ5L0Jh c2VDcnlwdExpYi9QZWlDcnlwdExpYi5pbmYgICAgIHwgICAxICsNCj4gPiAgQ3J5cHRvUGtnL0xp YnJhcnkvQmFzZUNyeXB0TGliL1J1bnRpbWVDcnlwdExpYi5pbmYgfCAgIDEgKw0KPiA+ICBDcnlw dG9Qa2cvTGlicmFyeS9CYXNlQ3J5cHRMaWIvU21tQ3J5cHRMaWIuaW5mICAgICB8ICAgMSArDQo+ ID4gIENyeXB0b1BrZy9JbmNsdWRlL0xpYnJhcnkvQmFzZUNyeXB0TGliLmggICAgICAgICAgIHwg MTIyICsrKysrKysrKysrDQo+ID4gIENyeXB0b1BrZy9MaWJyYXJ5L0Jhc2VDcnlwdExpYi9FdnAv Q3J5cHRFdnBNZC5jICAgIHwgMjI4DQo+ICsrKysrKysrKysrKysrKysrKysrDQo+ID4gIDYgZmls ZXMgY2hhbmdlZCwgMzU0IGluc2VydGlvbnMoKykNCj4gDQo+ICgxKSBUaGlzIHBhdGNoIGV4dGVu ZHMgdGhlIGxpYnJhcnkgY2xhc3MgaGVhZGVyLCBidXQgdXBkYXRlcyBvbmx5IG9uZQ0KPiAqc2V0 KiBvZiB0aGUgdGhyZWUgbGlicmFyeSBpbnN0YW5jZSAqc2V0cyouIFRoZSBvdGhlciB0d28gaW5z dGFuY2UNCj4gKnNldHMqIGFyZToNCj4gDQo+IC0gQmFzZUNyeXB0TGliTnVsbCAoanVzdCBvbmUg aW5zdGFuY2UpLCBmb3Igd2hpY2ggaXQgc2hvdWxkIG5vdCBiZSBoYXJkDQo+IHRvIHByb3ZpZGUg TnVsbCBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIG5ldyBmdW5jdGlvbnM7DQo+IA0KPiAtIEJhc2VD cnlwdExpYk9uUHJvdG9jb2xQcGkgKHRocmVlIGluc3RhbmNlcyAtLSBQZWksIER4ZSwgU21tKS4N Cj4gDQo+IA0KPiBCYXNlQ3J5cHRMaWJPblByb3RvY29sUHBpIGlzIGEgdG91Z2ggbnV0LCBiZWNh dXNlIGl0IHNlZW1zIHRvIHJlcXVpcmUNCj4gZXh0ZW5kaW5nOg0KPiANCj4gLSB0aGUgY3J5cHRv IHNlcnZpY2UgZHJpdmVyIGF0IENyeXB0b1BrZy9Ecml2ZXIvLA0KPiANCj4gLSB0aGUgaW50ZXJm YWNlIHRvIHRoYXQgZHJpdmVyIChDcnlwdG9Qa2cvUHJpdmF0ZS9Qcm90b2NvbC9DcnlwdG8uaCAt LQ0KPiByZXVzZWQgYnkgYm90aCAiQ3J5cHRvUGtnL1ByaXZhdGUvUHBpL0NyeXB0by5oIiBhbmQN Cj4gIkNyeXB0b1BrZy9Qcml2YXRlL1Byb3RvY29sL1NtbUNyeXB0by5oIiksDQo+IA0KPiAtIHRo ZSBQQ0RfQ1JZUFRPX1NFUlZJQ0VfRkFNSUxZX0VOQUJMRSBzdHJ1Y3R1cmUgYXQNCj4gIkNyeXB0 b1BrZy9JbmNsdWRlL1BjZC9QY2RDcnlwdG9TZXJ2aWNlRmFtaWx5RW5hYmxlLmgiLCBmb3IgY29u ZmlndXJpbmcNCj4gdGhlIGRyaXZlciwNCj4gDQo+IC0gdGhlIHZhcmlvdXMgUGNkQ3J5cHRvU2Vy dmljZUZhbWlseUVuYWJsZSBzZXR0aW5ncyAvIGJ1aWxkIHByb2ZpbGVzIGluDQo+IENyeXB0b1Br Zy9DcnlwdG9Qa2cuZHNjLg0KPiANCj4gDQo+ID4NCj4gPiBkaWZmIC0tZ2l0IGEvQ3J5cHRvUGtn L0xpYnJhcnkvQmFzZUNyeXB0TGliL0Jhc2VDcnlwdExpYi5pbmYNCj4gYi9DcnlwdG9Qa2cvTGli cmFyeS9CYXNlQ3J5cHRMaWIvQmFzZUNyeXB0TGliLmluZg0KPiA+IGluZGV4IDRhYWUyYWJhOTUu LjM5NjhmMjk0MTIgMTAwNjQ0DQo+ID4gLS0tIGEvQ3J5cHRvUGtnL0xpYnJhcnkvQmFzZUNyeXB0 TGliL0Jhc2VDcnlwdExpYi5pbmYNCj4gPiArKysgYi9DcnlwdG9Qa2cvTGlicmFyeS9CYXNlQ3J5 cHRMaWIvQmFzZUNyeXB0TGliLmluZg0KPiA+IEBAIC01MCw2ICs1MCw3IEBADQo+ID4gICAgUGsv Q3J5cHRBdXRoZW50aWNvZGUuYw0KPiA+ICAgIFBrL0NyeXB0VHMuYw0KPiA+ICAgIFBlbS9Dcnlw dFBlbS5jDQo+ID4gKyAgRXZwL0NyeXB0RXZwTWQuYw0KPiA+DQo+ID4gICAgU3lzQ2FsbC9DcnRX cmFwcGVyLmMNCj4gPiAgICBTeXNDYWxsL1RpbWVyV3JhcHBlci5jDQo+ID4gZGlmZiAtLWdpdCBh L0NyeXB0b1BrZy9MaWJyYXJ5L0Jhc2VDcnlwdExpYi9QZWlDcnlwdExpYi5pbmYNCj4gYi9Dcnlw dG9Qa2cvTGlicmFyeS9CYXNlQ3J5cHRMaWIvUGVpQ3J5cHRMaWIuaW5mDQo+ID4gaW5kZXggZGMy OGUzYTExZC4uZDBiOTE3MTZkMCAxMDA2NDQNCj4gPiAtLS0gYS9DcnlwdG9Qa2cvTGlicmFyeS9C YXNlQ3J5cHRMaWIvUGVpQ3J5cHRMaWIuaW5mDQo+ID4gKysrIGIvQ3J5cHRvUGtnL0xpYnJhcnkv QmFzZUNyeXB0TGliL1BlaUNyeXB0TGliLmluZg0KPiA+IEBAIC01Nyw2ICs1Nyw3IEBADQo+ID4g ICAgUGsvQ3J5cHRUc051bGwuYw0KPiA+ICAgIFBlbS9DcnlwdFBlbU51bGwuYw0KPiA+ICAgIFJh bmQvQ3J5cHRSYW5kTnVsbC5jDQo+ID4gKyAgRXZwL0NyeXB0RXZwTWQuYw0KPiA+DQo+ID4gICAg U3lzQ2FsbC9DcnRXcmFwcGVyLmMNCj4gPiAgICBTeXNDYWxsL0NvbnN0YW50VGltZUNsb2NrLmMN Cj4gPiBkaWZmIC0tZ2l0IGEvQ3J5cHRvUGtnL0xpYnJhcnkvQmFzZUNyeXB0TGliL1J1bnRpbWVD cnlwdExpYi5pbmYNCj4gYi9DcnlwdG9Qa2cvTGlicmFyeS9CYXNlQ3J5cHRMaWIvUnVudGltZUNy eXB0TGliLmluZg0KPiA+IGluZGV4IDUwMDViZWVkMDIuLjlmM2FjY2QzNWIgMTAwNjQ0DQo+ID4g LS0tIGEvQ3J5cHRvUGtnL0xpYnJhcnkvQmFzZUNyeXB0TGliL1J1bnRpbWVDcnlwdExpYi5pbmYN Cj4gPiArKysgYi9DcnlwdG9Qa2cvTGlicmFyeS9CYXNlQ3J5cHRMaWIvUnVudGltZUNyeXB0TGli LmluZg0KPiA+IEBAIC01Niw2ICs1Niw3IEBADQo+ID4gICAgUGsvQ3J5cHRBdXRoZW50aWNvZGVO dWxsLmMNCj4gPiAgICBQay9DcnlwdFRzTnVsbC5jDQo+ID4gICAgUGVtL0NyeXB0UGVtLmMNCj4g PiArICBFdnAvQ3J5cHRFdnBNZC5jDQo+ID4NCj4gPiAgICBTeXNDYWxsL0NydFdyYXBwZXIuYw0K PiA+ICAgIFN5c0NhbGwvVGltZXJXcmFwcGVyLmMNCj4gPiBkaWZmIC0tZ2l0IGEvQ3J5cHRvUGtn L0xpYnJhcnkvQmFzZUNyeXB0TGliL1NtbUNyeXB0TGliLmluZg0KPiBiL0NyeXB0b1BrZy9MaWJy YXJ5L0Jhc2VDcnlwdExpYi9TbW1DcnlwdExpYi5pbmYNCj4gPiBpbmRleCA5MWVjM2UwM2JmLi40 MjA2MjNjZGM2IDEwMDY0NA0KPiA+IC0tLSBhL0NyeXB0b1BrZy9MaWJyYXJ5L0Jhc2VDcnlwdExp Yi9TbW1DcnlwdExpYi5pbmYNCj4gPiArKysgYi9DcnlwdG9Qa2cvTGlicmFyeS9CYXNlQ3J5cHRM aWIvU21tQ3J5cHRMaWIuaW5mDQo+ID4gQEAgLTU0LDYgKzU0LDcgQEANCj4gPiAgICBQay9Dcnlw dEF1dGhlbnRpY29kZU51bGwuYw0KPiA+ICAgIFBrL0NyeXB0VHNOdWxsLmMNCj4gPiAgICBQZW0v Q3J5cHRQZW0uYw0KPiA+ICsgIEV2cC9DcnlwdEV2cE1kLmMNCj4gPg0KPiA+ICAgIFN5c0NhbGwv Q3J0V3JhcHBlci5jDQo+ID4gICAgU3lzQ2FsbC9Db25zdGFudFRpbWVDbG9jay5jDQo+ID4gZGlm ZiAtLWdpdCBhL0NyeXB0b1BrZy9JbmNsdWRlL0xpYnJhcnkvQmFzZUNyeXB0TGliLmgNCj4gYi9D cnlwdG9Qa2cvSW5jbHVkZS9MaWJyYXJ5L0Jhc2VDcnlwdExpYi5oDQo+ID4gaW5kZXggYWU5YmRl OWUzNy4uZjNiZjhhYWMwYyAxMDA2NDQNCj4gPiAtLS0gYS9DcnlwdG9Qa2cvSW5jbHVkZS9MaWJy YXJ5L0Jhc2VDcnlwdExpYi5oDQo+ID4gKysrIGIvQ3J5cHRvUGtnL0luY2x1ZGUvTGlicmFyeS9C YXNlQ3J5cHRMaWIuaA0KPiA+IEBAIC0xMDEyLDYgKzEwMTIsMTI4IEBAIEhtYWNTaGEyNTZGaW5h bCAoDQo+ID4gICAgT1VUICAgICBVSU5UOCAgKkhtYWNWYWx1ZQ0KPiA+ICAgICk7DQo+ID4NCj4g Pg0KPiArLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQ0KPiA9PT09PT09PT09PT09PT09PT09PT09PQ0KPiA+ICsvLyAgICBFVlAg KEVudmVsb3BlKSBQcmltaXRpdmUNCj4gPg0KPiArLy89PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KPiA9PT09PT09PT09PT09PT09 PT09PT09PQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgQWxsb2NhdGVzIGFuZCBpbml0aWFsaXpl cyBvbmUgRVZQX01EX0NUWCBjb250ZXh0IGZvciBzdWJzZXF1ZW50IEVWUF9NRA0KPiB1c2UuDQo+ ID4gKw0KPiA+ICsgIEByZXR1cm4gIFBvaW50ZXIgdG8gdGhlIEVWUF9NRF9DVFggY29udGV4dCB0 aGF0IGhhcyBiZWVuIGluaXRpYWxpemVkLg0KPiA+ICsgICAgICAgICAgIElmIHRoZSBhbGxvY2F0 aW9ucyBmYWlscywgRXZwTWROZXcoKSByZXR1cm5zIE5VTEwuDQo+ID4gKw0KPiA+ICsqKi8NCj4g PiArVk9JRCAqDQo+ID4gK0VGSUFQSQ0KPiA+ICtFdnBNZE5ldyAoDQo+ID4gKyAgVk9JRA0KPiA+ ICsgICk7DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBSZWxlYXNlIHRoZSBzcGVjaWZpZWQgRVZQ X01EX0NUWCBjb250ZXh0Lg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICBFdnBNZENvbnRleHQg IFBvaW50ZXIgdG8gdGhlIEVWUF9NRF9DVFggY29udGV4dCB0byBiZQ0KPiByZWxlYXNlZC4NCj4g PiArDQo+ID4gKyoqLw0KPiA+ICtWT0lEDQo+ID4gK0VGSUFQSQ0KPiA+ICtFdnBNZEZyZWUgKA0K PiA+ICsgIElOICBWT0lEICAqRXZwTWRDb250ZXh0DQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gKy8q Kg0KPiA+ICsgIEluaXRpYWxpemVzIHVzZXItc3VwcGxpZWQgbWVtb3J5IHBvaW50ZWQgdG8gYnkg RXZwTWRDb250ZXh0IGFzDQo+IEVWUF9NRF9DVFgNCj4gPiArICBjb250ZXh0IGZvciBzdWJzZXF1 ZW50IHVzZS4NCj4gPiArDQo+ID4gKyAgSWYgRXZwTWRDb250ZXh0IGlzIE5VTEwsIHRoZW4gcmV0 dXJuIEZBTFNFLg0KPiA+ICsgIElmIERpZ2VzdE5hbWUgaXMgTlVMTCwgdGhlbiByZXR1cm4gRkFM U0UuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtvdXRdICAgRXZwTWRDb250ZXh0ICBQb2ludGVyIHRv IEVWUF9NRF9DVFggY29udGV4dCBiZWluZw0KPiBpbml0aWFsaXplZC4NCj4gPiArICBAcGFyYW1b aW5dICAgIERpZ2VzdE5hbWUgICAgUG9pbnRlciB0byB0aGUgZGlnZXN0IG5hbWUuDQo+ID4gKw0K PiA+ICsgIEByZXR2YWwgVFJVRSAgIEVWUF9NRF9DVFggY29udGV4dCBpbml0aWFsaXphdGlvbiBz dWNjZWVkZWQuDQo+ID4gKyAgQHJldHZhbCBGQUxTRSAgRVZQX01EX0NUWCBjb250ZXh0IGluaXRp YWxpemF0aW9uIGZhaWxlZC4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ICtCT09MRUFODQo+ID4gK0VG SUFQSQ0KPiA+ICtFdnBNZEluaXQgKA0KPiA+ICsgIE9VVCBWT0lEICAgICAgICAgICpFdnBNZENv bnRleHQsDQo+ID4gKyAgSU4gIENPTlNUIENIQVI4ICAgKkRpZ2VzdE5hbWUNCj4gPiArICApOw0K PiANCj4gKDIpIEkgc3VnZ2VzdCBtZXJnaW5nIHRoZSBOZXcoKSBhbmQgSW5pdCgpIGZ1bmN0aW9u cyBpbnRvIG9uZSAtLSB3ZQ0KPiBzaG91bGQgb25seSBoYXZlIGEgTmV3KCkgZnVuY3Rpb246DQo+ IA0KPiBWT0lEICoNCj4gRUZJQVBJDQo+IEV2cE1kTmV3ICgNCj4gICBJTiAgQ09OU1QgQ0hBUjgg KkRpZ2VzdE5hbWUNCj4gICApOw0KPiANCj4gQW5kIHRoaXMgZnVuY3Rpb24gd291bGQgY29sbGVj dCB0aGUgYWN0aW9ucyBmcm9tIGJvdGggdGhlIGN1cnJlbnQgTmV3KCkNCj4gYW5kIEluaXQoKSBm dW5jdGlvbnMuDQo+IA0KPiBJJ20gcHJvcG9zaW5nIHRoaXMgYmVjYXVzZToNCj4gDQo+ICgyYSkg SW5pdCgpIGlzIG5vdCByZWFsbHkgdXNlZnVsLiBJbiB0aGVvcnkgd2UgbWlnaHQgYmUgYWJsZSB0 byBjYWxsDQo+IEluaXQoKSByaWdodCBhZnRlciBGaW5hbCgpLCBidXQgdGhhdCBzZWVtcyBsaWtl IGEgdmVyeSBvYnNjdXJlIHVzZSBjYXNlLg0KPiANCj4gKDJiKSBOZXcoKSBpcyB1c2VsZXNzIHdp dGhvdXQgSW5pdCgpOyBpdCBtYWtlcyBubyBzZW5zZSBmb3IgYSBjb250ZXh0IHRvDQo+IGV4aXN0 LCBzb21ld2hlcmUgaW4gdGhlIGVkazIgY29kZWJhc2UsICpiZXR3ZWVuKiBOZXcoKSBhbmQgSW5p dCgpLg0KPiANCj4gKDJjKSBJbml0KCkgdXNlZCB0byBlbmNvdXJhZ2UgYSB1c2FnZSBwYXR0ZXJu IChhdCBsZWFzdCB3aXRoIEhNQUNzKQ0KPiB3aGVyZSB0aGUgY2FsbGVyIHdvdWxkIGFsbG9jYXRl IGl0cyBvd24gY29udGV4dCBzdG9yYWdlIGZpcnN0LiBUaGlzDQo+IHVzYWdlIHdhcyBmcmF1Z2h0 IHdpdGggYSBtZW1vcnkgbGVhaw0KPiA8aHR0cHM6Ly9idWd6aWxsYS50aWFub2NvcmUub3JnL3No b3dfYnVnLmNnaT9pZD0yMDk1I2M3Pi4gVGhpcyBpc24ndCBhDQo+IHByYWN0aWNhbCBwcm9ibGVt IGluIHRoaXMgY2FzZSwgYmVjYXVzZSB3ZSdyZSAtLSBjb3JyZWN0bHkgLS0gbm90DQo+IG9mZmVy aW5nIGEgR2V0Q29udGV4dFNpemUoKSBpbiB0aGlzIHBhdGNoLCBidXQgSW5pdCgpIGlzIHN0aWxs IGEgdmVzdGlnZQ0KPiBvZiBhIGJhZCBwYXR0ZXJuLg0KPiANCj4gQmFzaWNhbGx5IGEgY2FsbGVy IHNob3VsZCBnbyB0aHJvdWdoIE5ldyAtPiBVcGRhdGVbbl0gLT4gRmluYWwgLT4gRnJlZSwNCj4g cG9zc2libHkgY2FsbGluZyBEdXBsaWNhdGUgYmVmb3JlIG9yIGFmdGVyIFVwZGF0ZS4NCj4gDQo+ IC4uLiBJIGNvdWxkIGV2ZW4gZW50ZXJ0YWluIG1lcmdpbmcgIkZpbmFsIiBpbnRvICJGcmVlIiwg YXMgdGhlcmUgc2VlbXMNCj4gdG8gYmUgbm8gcG9pbnQgZm9yIGEgY29udGV4dCB0byBleGlzdCwg aW4gZWRrMiwgYmV0d2VlbiBGaW5hbCBhbmQgRnJlZS4NCj4gVGhhdCB3b3VsZCBtYWtlIGZvciBO ZXcgLT4gVXBkYXRlW25dIC0+IEZyZWUuDQo+IA0KPiBJIHVuZGVyc3RhbmQgdGhhdCB0aGlzIHdv dWxkIGRpdmVyZ2UgZnJvbSB0aGUgY3VycmVudCBtb2RlbCBvZiB0aGUNCj4gImRpZ2VzdCBmdW5j dGlvbiBmYW1pbHkiLCBidXQgSSBzZWUgaXQgYXMgYW4gaW1wcm92ZW1lbnQuDQo+IA0KPiANCj4g PiArDQo+ID4gKy8qKg0KPiA+ICsgIE1ha2VzIGEgY29weSBvZiBhbiBleGlzdGluZyBFVlBfTUQg Y29udGV4dC4NCj4gPiArDQo+ID4gKyAgSWYgRXZwTWRDb250ZXh0IGlzIE5VTEwsIHRoZW4gcmV0 dXJuIEZBTFNFLg0KPiA+ICsgIElmIE5ld0V2cE1kQ29udGV4dCBpcyBOVUxMLCB0aGVuIHJldHVy biBGQUxTRS4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgRXZwTWRDb250ZXh0ICAgICBQb2lu dGVyIHRvIEVWUF9NRCBjb250ZXh0IGJlaW5nIGNvcGllZC4NCj4gPiArICBAcGFyYW1bb3V0XSBO ZXdFdnBNZENvbnRleHQgIFBvaW50ZXIgdG8gbmV3IEVWUF9NRCBjb250ZXh0Lg0KPiA+ICsNCj4g PiArICBAcmV0dmFsIFRSVUUgICBFVlBfTUQgY29udGV4dCBjb3B5IHN1Y2NlZWRlZC4NCj4gPiAr ICBAcmV0dmFsIEZBTFNFICBFVlBfTUQgY29udGV4dCBjb3B5IGZhaWxlZC4NCj4gPiArDQo+ID4g KyoqLw0KPiA+ICtCT09MRUFODQo+ID4gK0VGSUFQSQ0KPiA+ICtFdnBNZER1cGxpY2F0ZSAoDQo+ ID4gKyAgSU4gIENPTlNUIFZPSUQgICAgKkV2cE1kQ29udGV4dCwNCj4gPiArICBPVVQgVk9JRCAg ICAgICAgICAqTmV3RXZwTWRDb250ZXh0DQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ ICsgIERpZ2VzdHMgdGhlIGlucHV0IGRhdGEgYW5kIHVwZGF0ZXMgRVZQX01EIGNvbnRleHQuDQo+ ID4gKw0KPiA+ICsgIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgRVZQIGRpZ2VzdCBvbiBhIGRhdGEg YnVmZmVyIG9mIHRoZSBzcGVjaWZpZWQgc2l6ZS4NCj4gPiArICBJdCBjYW4gYmUgY2FsbGVkIG11 bHRpcGxlIHRpbWVzIHRvIGNvbXB1dGUgdGhlIGRpZ2VzdCBvZiBsb25nIG9yDQo+IGRpc2NvbnRp bnVvdXMgZGF0YSBzdHJlYW1zLg0KPiA+ICsgIEVWUF9NRCBjb250ZXh0IHNob3VsZCBiZSBhbHJl YWR5IGNvcnJlY3RseSBpbml0aWFsaXplZCBieSBFdnBNZEluaXQoKSwgYW5kDQo+IHNob3VsZCBu b3QNCj4gPiArICBiZSBmaW5hbGl6ZWQgYnkgRXZwTWRGaW5hbCgpLiBCZWhhdmlvciB3aXRoIGlu dmFsaWQgY29udGV4dCBpcyB1bmRlZmluZWQuDQo+ID4gKw0KPiA+ICsgIElmIEV2cE1kQ29udGV4 dCBpcyBOVUxMLCB0aGVuIHJldHVybiBGQUxTRS4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luLCBv dXRdICBFdnBNZENvbnRleHQgICAgICAgUG9pbnRlciB0byB0aGUgRVZQX01EIGNvbnRleHQuDQo+ ID4gKyAgQHBhcmFtW2luXSAgICAgICBEYXRhICAgICAgICAgICAgICAgUG9pbnRlciB0byB0aGUg YnVmZmVyIGNvbnRhaW5pbmcgdGhlIGRhdGEgdG8gYmUNCj4gZGlnZXN0ZWQuDQo+ID4gKyAgQHBh cmFtW2luXSAgICAgICBEYXRhU2l6ZSAgICAgICAgICAgU2l6ZSBvZiBEYXRhIGJ1ZmZlciBpbiBi eXRlcy4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCBUUlVFICAgRVZQIGRhdGEgZGlnZXN0IHN1Y2Nl ZWRlZC4NCj4gPiArICBAcmV0dmFsIEZBTFNFICBFVlAgZGF0YSBkaWdlc3QgZmFpbGVkLg0KPiA+ ICsNCj4gPiArKiovDQo+ID4gK0JPT0xFQU4NCj4gPiArRUZJQVBJDQo+ID4gK0V2cE1kVXBkYXRl ICgNCj4gPiArICBJTiBPVVQgIFZPSUQgICAgICAgICpFdnBNZENvbnRleHQsDQo+ID4gKyAgSU4g ICAgICBDT05TVCBWT0lEICAqRGF0YSwNCj4gPiArICBJTiAgICAgIFVJTlROICAgICAgIERhdGFT aXplDQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIENvbXBsZXRlcyBjb21wdXRh dGlvbiBvZiB0aGUgRVZQIGRpZ2VzdCB2YWx1ZS4NCj4gPiArDQo+ID4gKyAgVGhpcyBmdW5jdGlv biBjb21wbGV0ZXMgRVZQIGhhc2ggY29tcHV0YXRpb24gYW5kIHJldHJpZXZlcyB0aGUgZGlnZXN0 DQo+IHZhbHVlIGludG8NCj4gPiArICB0aGUgc3BlY2lmaWVkIG1lbW9yeS4gQWZ0ZXIgdGhpcyBm dW5jdGlvbiBoYXMgYmVlbiBjYWxsZWQsIHRoZSBFVlAgY29udGV4dA0KPiBjYW5ub3QNCj4gPiAr ICBiZSB1c2VkIGFnYWluLg0KPiA+ICsgIEVWUCBjb250ZXh0IHNob3VsZCBiZSBhbHJlYWR5IGNv cnJlY3RseSBpbml0aWFsaXplZCBieSBFdnBNZEluaXQoKSwgYW5kDQo+IHNob3VsZA0KPiA+ICsg IG5vdCBiZSBmaW5hbGl6ZWQgYnkgRXZwTWRGaW5hbCgpLiBCZWhhdmlvciB3aXRoIGludmFsaWQg RVZQIGNvbnRleHQgaXMNCj4gdW5kZWZpbmVkLg0KPiA+ICsNCj4gPiArICBJZiBFdnBNZENvbnRl eHQgaXMgTlVMTCwgdGhlbiByZXR1cm4gRkFMU0UuDQo+ID4gKyAgSWYgRGlnZXN0IGlzIE5VTEws IHRoZW4gcmV0dXJuIEZBTFNFLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW4sIG91dF0gIEV2cE1k Q29udGV4dCAgIFBvaW50ZXIgdG8gdGhlIEVWUCBjb250ZXh0Lg0KPiA+ICsgIEBwYXJhbVtvdXRd ICAgICAgRGlnZXN0ICAgICAgICAgUG9pbnRlciB0byBhIGJ1ZmZlciB0aGF0IHJlY2VpdmVzIHRo ZSBFVlAgZGlnZXN0DQo+IHZhbHVlLg0KPiA+ICsNCj4gPiArICBAcmV0dmFsIFRSVUUgICBFVlAg ZGlnZXN0IGNvbXB1dGF0aW9uIHN1Y2NlZWRlZC4NCj4gPiArICBAcmV0dmFsIEZBTFNFICBFVlAg ZGlnZXN0IGNvbXB1dGF0aW9uIGZhaWxlZC4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ICtCT09MRUFO DQo+ID4gK0VGSUFQSQ0KPiA+ICtFdnBNZEZpbmFsICgNCj4gPiArICBJTiBPVVQgIFZPSUQgICAq RXZwTWRDb250ZXh0LA0KPiA+ICsgIE9VVCAgICAgVUlOVDggICpEaWdlc3RWYWx1ZQ0KPiA+ICsg ICk7DQo+ID4gKw0KPiA+DQo+IC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09DQo+ID09PT09PT09PT09PT09PT09PT09PT0NCj4g PiAgLy8gICAgU3ltbWV0cmljIENyeXB0b2dyYXBoeSBQcmltaXRpdmUNCj4gPg0KPiAvLz09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQ0KPiA9PT09PT09PT09PT09PT09PT09PT09DQo+ID4gZGlmZiAtLWdpdCBhL0NyeXB0b1BrZy9M aWJyYXJ5L0Jhc2VDcnlwdExpYi9FdnAvQ3J5cHRFdnBNZC5jDQo+IGIvQ3J5cHRvUGtnL0xpYnJh cnkvQmFzZUNyeXB0TGliL0V2cC9DcnlwdEV2cE1kLmMNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0 NA0KPiA+IGluZGV4IDAwMDAwMDAwMDAuLmEzOGMzMDBlYjgNCj4gPiAtLS0gL2Rldi9udWxsDQo+ ID4gKysrIGIvQ3J5cHRvUGtnL0xpYnJhcnkvQmFzZUNyeXB0TGliL0V2cC9DcnlwdEV2cE1kLmMN Cj4gPiBAQCAtMCwwICsxLDIyOCBAQA0KPiA+ICsvKiogQGZpbGUNCj4gPiArICBFVlAgTUQgV3Jh cHBlciBJbXBsZW1lbnRhdGlvbiBmb3IgT3BlblNTTC4NCj4gPiArDQo+ID4gK0NvcHlyaWdodCAo YykgMjAyMCwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiA+ ICtTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiA+ICsNCj4g PiArKiovDQo+ID4gKw0KPiA+ICsjaW5jbHVkZSAiSW50ZXJuYWxDcnlwdExpYi5oIg0KPiA+ICsj aW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIEFsbG9jYXRl cyBhbmQgaW5pdGlhbGl6ZXMgb25lIEVWUF9NRF9DVFggY29udGV4dCBmb3Igc3Vic2VxdWVudCBF VlBfTUQNCj4gdXNlLg0KPiA+ICsNCj4gPiArICBAcmV0dXJuICBQb2ludGVyIHRvIHRoZSBFVlBf TURfQ1RYIGNvbnRleHQgdGhhdCBoYXMgYmVlbiBpbml0aWFsaXplZC4NCj4gPiArICAgICAgICAg ICBJZiB0aGUgYWxsb2NhdGlvbnMgZmFpbHMsIEV2cE1kTmV3KCkgcmV0dXJucyBOVUxMLg0KPiA+ ICsNCj4gPiArKiovDQo+ID4gK1ZPSUQgKg0KPiA+ICtFRklBUEkNCj4gPiArRXZwTWROZXcgKA0K PiA+ICsgIFZPSUQNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICAvLw0KPiA+ICsgIC8vIEFsbG9j YXRlcyAmIEluaXRpYWxpemVzIEVWUF9NRF9DVFggQ29udGV4dCBieSBPcGVuU1NMDQo+IEVWUF9N RF9DVFhfbmV3KCkNCj4gPiArICAvLw0KPiA+ICsgIHJldHVybiAoVk9JRCAqKSBFVlBfTURfQ1RY X25ldyAoKTsNCj4gPiArfQ0KPiANCj4gKDMpIFRoaXMgKFZPSUQqKSBjYXN0IGlzIG5vdCBuZWVk ZWQsIGFuZCBtYWtlcyB0aGUgY29kZSBoYXJkZXIgdG8gcmVhZCwNCj4gaW4gbXkgb3Bpbmlvbi4N Cj4gDQo+IA0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgUmVsZWFzZSB0aGUgc3BlY2lmaWVkIEVW UF9NRF9DVFggY29udGV4dC4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luXSAgRXZwTWRDb250ZXh0 ICBQb2ludGVyIHRvIHRoZSBFVlBfTURfQ1RYIGNvbnRleHQgdG8gYmUNCj4gcmVsZWFzZWQuDQo+ ID4gKw0KPiA+ICsqKi8NCj4gPiArVk9JRA0KPiA+ICtFRklBUEkNCj4gPiArRXZwTWRGcmVlICgN Cj4gPiArICBJTiAgVk9JRCAgKkV2cE1kQ29udGV4dA0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsg IC8vDQo+ID4gKyAgLy8gRnJlZSBPcGVuU1NMIEVWUF9NRF9DVFggQ29udGV4dA0KPiA+ICsgIC8v DQo+ID4gKyAgRVZQX01EX0NUWF9mcmVlICgoRVZQX01EX0NUWCAqKUV2cE1kQ29udGV4dCk7DQo+ ID4gK30NCj4gDQo+ICg0KSBTYW1lIGFzICgzKSwganVzdCBpbiB0aGUgcmV2ZXJzZSBkaXJlY3Rp b24gLS0gSSBzdWdnZXN0IGRyb3BwaW5nIHRoZQ0KPiAoRVZQX01EX0NUWCAqKSBjYXN0Lg0KPiAN Cj4gKFBvaW50cyAoMykgYW5kICg0KSBhcHBseSB0byBzb21lIG1vcmUgbG9jYXRpb25zIGluIHRo aXMgcGF0Y2g7IGlmIHlvdQ0KPiBhZ3JlZSB3aXRoIG15IGNvbW1lbnRzLCBwbGVhc2UgcmV2aWV3 IHRoZSByZXN0IGZvciB0aGVzZSBzdXBlcmZsdW91cyBjYXN0cy4pDQo+IA0KPiANCj4gKDUpIElm IHBvc3NpYmxlLCBJJ2Qgc3VnZ2VzdCBhcHBlbmRpbmcgYXQgbGVhc3Qgb25lIG90aGVyIHBhdGNo IHRvIHRoaXMNCj4gc2VyaWVzLCBmb3IgcHV0dGluZyB0aGUgbmV3IGludGVyZmFjZXMgdG8gdXNl IGF0IG9uY2UuIFdlIHNob3VsZCBwaWNrIGENCj4gbGlicmFyeSBvciBkcml2ZXIgaW4gZWRrMiB0 aGF0IGN1cnJlbnRseSBjb25zdW1lcyBTaGEyNTZJbml0KCkgYW5kIGl0cw0KPiBmcmllbmRzLCBh bmQgY29udmVydCB0aG9zZSBjYWxscyB0byBFdnBNZCooKS4NCj4gDQo+IFRoYW5rcywNCj4gTGFz emxvDQo+IA0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgSW5pdGlhbGl6ZXMgdXNlci1zdXBwbGll ZCBtZW1vcnkgcG9pbnRlZCB0byBieSBFdnBNZENvbnRleHQgYXMNCj4gRVZQX01EX0NUWA0KPiA+ ICsgIGNvbnRleHQgZm9yIHN1YnNlcXVlbnQgdXNlLg0KPiA+ICsNCj4gPiArICBJZiBFdnBNZENv bnRleHQgaXMgTlVMTCwgdGhlbiByZXR1cm4gRkFMU0UuDQo+ID4gKyAgSWYgRGlnZXN0TmFtZSBp cyBOVUxMLCB0aGVuIHJldHVybiBGQUxTRS4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW291dF0gICBF dnBNZENvbnRleHQgIFBvaW50ZXIgdG8gRVZQX01EX0NUWCBjb250ZXh0IGJlaW5nDQo+IGluaXRp YWxpemVkLg0KPiA+ICsgIEBwYXJhbVtpbl0gICAgRGlnZXN0TmFtZSAgICBQb2ludGVyIHRvIHRo ZSBkaWdlc3QgbmFtZS4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCBUUlVFICAgRVZQX01EX0NUWCBj b250ZXh0IGluaXRpYWxpemF0aW9uIHN1Y2NlZWRlZC4NCj4gPiArICBAcmV0dmFsIEZBTFNFICBF VlBfTURfQ1RYIGNvbnRleHQgaW5pdGlhbGl6YXRpb24gZmFpbGVkLg0KPiA+ICsNCj4gPiArKiov DQo+ID4gK0JPT0xFQU4NCj4gPiArRUZJQVBJDQo+ID4gK0V2cE1kSW5pdCAoDQo+ID4gKyAgT1VU IFZPSUQgICAgICAgICAgKkV2cE1kQ29udGV4dCwNCj4gPiArICBJTiAgQ09OU1QgQ0hBUjggICAq RGlnZXN0TmFtZQ0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIENPTlNUIEVWUF9NRCAgICAqRGln ZXN0Ow0KPiA+ICsNCj4gPiArICAvLw0KPiA+ICsgIC8vIENoZWNrIGlucHV0IHBhcmFtZXRlcnMu DQo+ID4gKyAgLy8NCj4gPiArICBpZiAoRXZwTWRDb250ZXh0ID09IE5VTEwgfHwgRGlnZXN0TmFt ZSA9PSBOVUxMKSB7DQo+ID4gKyAgICByZXR1cm4gRkFMU0U7DQo+ID4gKyAgfQ0KPiA+ICsNCj4g PiArICAvLw0KPiA+ICsgIC8vIE9wZW5TU0wgRVZQX01EIENvbnRleHQgSW5pdGlhbGl6YXRpb24N Cj4gPiArICAvLw0KPiA+ICsgIGlmIChFVlBfTURfQ1RYX3Jlc2V0ICgoRVZQX01EX0NUWCAqKUV2 cE1kQ29udGV4dCkgIT0gMSkgew0KPiA+ICsgICAgcmV0dXJuIEZBTFNFOw0KPiA+ICsgIH0NCj4g PiArDQo+ID4gKyAgRGlnZXN0ID0gRVZQX2dldF9kaWdlc3RieW5hbWUgKERpZ2VzdE5hbWUpOw0K PiA+ICsgIGlmIChEaWdlc3QgPT0gTlVMTCkgew0KPiA+ICsgICAgcmV0dXJuIEZBTFNFOw0KPiA+ ICsgIH0NCj4gPiArDQo+ID4gKyAgaWYgKEVWUF9EaWdlc3RJbml0X2V4ICgoRVZQX01EX0NUWCAq KUV2cE1kQ29udGV4dCwgRGlnZXN0LCBOVUxMKSAhPSAxKSB7DQo+ID4gKyAgICByZXR1cm4gRkFM U0U7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICByZXR1cm4gVFJVRTsNCj4gPiArfQ0KPiA+ICsN Cj4gPiArLyoqDQo+ID4gKyAgTWFrZXMgYSBjb3B5IG9mIGFuIGV4aXN0aW5nIEVWUF9NRCBjb250 ZXh0Lg0KPiA+ICsNCj4gPiArICBJZiBFdnBNZENvbnRleHQgaXMgTlVMTCwgdGhlbiByZXR1cm4g RkFMU0UuDQo+ID4gKyAgSWYgTmV3RXZwTWRDb250ZXh0IGlzIE5VTEwsIHRoZW4gcmV0dXJuIEZB TFNFLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICBFdnBNZENvbnRleHQgICAgIFBvaW50ZXIg dG8gRVZQX01EIGNvbnRleHQgYmVpbmcgY29waWVkLg0KPiA+ICsgIEBwYXJhbVtvdXRdIE5ld0V2 cE1kQ29udGV4dCAgUG9pbnRlciB0byBuZXcgRVZQX01EIGNvbnRleHQuDQo+ID4gKw0KPiA+ICsg IEByZXR2YWwgVFJVRSAgIEVWUF9NRCBjb250ZXh0IGNvcHkgc3VjY2VlZGVkLg0KPiA+ICsgIEBy ZXR2YWwgRkFMU0UgIEVWUF9NRCBjb250ZXh0IGNvcHkgZmFpbGVkLg0KPiA+ICsNCj4gPiArKiov DQo+ID4gK0JPT0xFQU4NCj4gPiArRUZJQVBJDQo+ID4gK0V2cE1kRHVwbGljYXRlICgNCj4gPiAr ICBJTiAgQ09OU1QgVk9JRCAgICAqRXZwTWRDb250ZXh0LA0KPiA+ICsgIE9VVCBWT0lEICAgICAg ICAgICpOZXdFdnBNZENvbnRleHQNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICAvLw0KPiA+ICsg IC8vIENoZWNrIGlucHV0IHBhcmFtZXRlcnMuDQo+ID4gKyAgLy8NCj4gPiArICBpZiAoRXZwTWRD b250ZXh0ID09IE5VTEwgfHwgTmV3RXZwTWRDb250ZXh0ID09IE5VTEwpIHsNCj4gPiArICAgIHJl dHVybiBGQUxTRTsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIGlmIChFVlBfTURfQ1RYX2NvcHkg KChFVlBfTURfQ1RYICopTmV3RXZwTWRDb250ZXh0LCAoRVZQX01EX0NUWA0KPiAqKUV2cE1kQ29u dGV4dCkgIT0gMSkgew0KPiA+ICsgICAgcmV0dXJuIEZBTFNFOw0KPiA+ICsgIH0NCj4gPiArDQo+ ID4gKyAgcmV0dXJuIFRSVUU7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIERpZ2Vz dHMgdGhlIGlucHV0IGRhdGEgYW5kIHVwZGF0ZXMgRVZQX01EIGNvbnRleHQuDQo+ID4gKw0KPiA+ ICsgIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgRVZQIGRpZ2VzdCBvbiBhIGRhdGEgYnVmZmVyIG9m IHRoZSBzcGVjaWZpZWQgc2l6ZS4NCj4gPiArICBJdCBjYW4gYmUgY2FsbGVkIG11bHRpcGxlIHRp bWVzIHRvIGNvbXB1dGUgdGhlIGRpZ2VzdCBvZiBsb25nIG9yDQo+IGRpc2NvbnRpbnVvdXMgZGF0 YSBzdHJlYW1zLg0KPiA+ICsgIEVWUF9NRCBjb250ZXh0IHNob3VsZCBiZSBhbHJlYWR5IGNvcnJl Y3RseSBpbml0aWFsaXplZCBieSBFdnBNZEluaXQoKSwgYW5kDQo+IHNob3VsZCBub3QNCj4gPiAr ICBiZSBmaW5hbGl6ZWQgYnkgRXZwTWRGaW5hbCgpLiBCZWhhdmlvciB3aXRoIGludmFsaWQgY29u dGV4dCBpcyB1bmRlZmluZWQuDQo+ID4gKw0KPiA+ICsgIElmIEV2cE1kQ29udGV4dCBpcyBOVUxM LCB0aGVuIHJldHVybiBGQUxTRS4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2luLCBvdXRdICBFdnBN ZENvbnRleHQgICAgICAgUG9pbnRlciB0byB0aGUgRVZQX01EIGNvbnRleHQuDQo+ID4gKyAgQHBh cmFtW2luXSAgICAgICBEYXRhICAgICAgICAgICAgICAgUG9pbnRlciB0byB0aGUgYnVmZmVyIGNv bnRhaW5pbmcgdGhlIGRhdGEgdG8gYmUNCj4gZGlnZXN0ZWQuDQo+ID4gKyAgQHBhcmFtW2luXSAg ICAgICBEYXRhU2l6ZSAgICAgICAgICAgU2l6ZSBvZiBEYXRhIGJ1ZmZlciBpbiBieXRlcy4NCj4g PiArDQo+ID4gKyAgQHJldHZhbCBUUlVFICAgRVZQIGRhdGEgZGlnZXN0IHN1Y2NlZWRlZC4NCj4g PiArICBAcmV0dmFsIEZBTFNFICBFVlAgZGF0YSBkaWdlc3QgZmFpbGVkLg0KPiA+ICsNCj4gPiAr KiovDQo+ID4gK0JPT0xFQU4NCj4gPiArRUZJQVBJDQo+ID4gK0V2cE1kVXBkYXRlICgNCj4gPiAr ICBJTiBPVVQgIFZPSUQgICAgICAgICpFdnBNZENvbnRleHQsDQo+ID4gKyAgSU4gICAgICBDT05T VCBWT0lEICAqRGF0YSwNCj4gPiArICBJTiAgICAgIFVJTlROICAgICAgIERhdGFTaXplDQo+ID4g KyAgKQ0KPiA+ICt7DQo+ID4gKyAgLy8NCj4gPiArICAvLyBDaGVjayBpbnB1dCBwYXJhbWV0ZXJz Lg0KPiA+ICsgIC8vDQo+ID4gKyAgaWYgKEV2cE1kQ29udGV4dCA9PSBOVUxMKSB7DQo+ID4gKyAg ICByZXR1cm4gRkFMU0U7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICAvLw0KPiA+ICsgIC8vIENo ZWNrIGludmFsaWQgcGFyYW1ldGVycywgaW4gY2FzZSBvbmx5IERhdGFMZW5ndGggd2FzIGNoZWNr ZWQgaW4NCj4gT3BlblNTTA0KPiA+ICsgIC8vDQo+ID4gKyAgaWYgKERhdGEgPT0gTlVMTCAmJiBE YXRhU2l6ZSAhPSAwKSB7DQo+ID4gKyAgICByZXR1cm4gRkFMU0U7DQo+ID4gKyAgfQ0KPiA+ICsN Cj4gPiArICAvLw0KPiA+ICsgIC8vIE9wZW5TU0wgRVZQIGRpZ2VzdCB1cGRhdGUNCj4gPiArICAv Lw0KPiA+ICsgIGlmIChFVlBfRGlnZXN0VXBkYXRlICgoRVZQX01EX0NUWCAqKUV2cE1kQ29udGV4 dCwgRGF0YSwgRGF0YVNpemUpICE9IDEpDQo+IHsNCj4gPiArICAgIHJldHVybiBGQUxTRTsNCj4g PiArICB9DQo+ID4gKw0KPiA+ICsgIHJldHVybiBUUlVFOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsv KioNCj4gPiArICBDb21wbGV0ZXMgY29tcHV0YXRpb24gb2YgdGhlIEVWUCBkaWdlc3QgdmFsdWUu DQo+ID4gKw0KPiA+ICsgIFRoaXMgZnVuY3Rpb24gY29tcGxldGVzIEVWUCBoYXNoIGNvbXB1dGF0 aW9uIGFuZCByZXRyaWV2ZXMgdGhlIGRpZ2VzdA0KPiB2YWx1ZSBpbnRvDQo+ID4gKyAgdGhlIHNw ZWNpZmllZCBtZW1vcnkuIEFmdGVyIHRoaXMgZnVuY3Rpb24gaGFzIGJlZW4gY2FsbGVkLCB0aGUg RVZQIGNvbnRleHQNCj4gY2Fubm90DQo+ID4gKyAgYmUgdXNlZCBhZ2Fpbi4NCj4gPiArICBFVlAg Y29udGV4dCBzaG91bGQgYmUgYWxyZWFkeSBjb3JyZWN0bHkgaW5pdGlhbGl6ZWQgYnkgRXZwTWRJ bml0KCksIGFuZA0KPiBzaG91bGQNCj4gPiArICBub3QgYmUgZmluYWxpemVkIGJ5IEV2cE1kRmlu YWwoKS4gQmVoYXZpb3Igd2l0aCBpbnZhbGlkIEVWUCBjb250ZXh0IGlzDQo+IHVuZGVmaW5lZC4N Cj4gPiArDQo+ID4gKyAgSWYgRXZwTWRDb250ZXh0IGlzIE5VTEwsIHRoZW4gcmV0dXJuIEZBTFNF Lg0KPiA+ICsgIElmIERpZ2VzdCBpcyBOVUxMLCB0aGVuIHJldHVybiBGQUxTRS4NCj4gPiArDQo+ ID4gKyAgQHBhcmFtW2luLCBvdXRdICBFdnBNZENvbnRleHQgICBQb2ludGVyIHRvIHRoZSBFVlAg Y29udGV4dC4NCj4gPiArICBAcGFyYW1bb3V0XSAgICAgIERpZ2VzdCAgICAgICAgIFBvaW50ZXIg dG8gYSBidWZmZXIgdGhhdCByZWNlaXZlcyB0aGUgRVZQIGRpZ2VzdA0KPiB2YWx1ZS4NCj4gPiAr DQo+ID4gKyAgQHJldHZhbCBUUlVFICAgRVZQIGRpZ2VzdCBjb21wdXRhdGlvbiBzdWNjZWVkZWQu DQo+ID4gKyAgQHJldHZhbCBGQUxTRSAgRVZQIGRpZ2VzdCBjb21wdXRhdGlvbiBmYWlsZWQuDQo+ ID4gKw0KPiA+ICsqKi8NCj4gPiArQk9PTEVBTg0KPiA+ICtFRklBUEkNCj4gPiArRXZwTWRGaW5h bCAoDQo+ID4gKyAgSU4gT1VUICBWT0lEICAgKkV2cE1kQ29udGV4dCwNCj4gPiArICBPVVQgICAg IFVJTlQ4ICAqRGlnZXN0VmFsdWUNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBVSU5UMzIgIExl bmd0aDsNCj4gPiArDQo+ID4gKyAgLy8NCj4gPiArICAvLyBDaGVjayBpbnB1dCBwYXJhbWV0ZXJz Lg0KPiA+ICsgIC8vDQo+ID4gKyAgaWYgKEV2cE1kQ29udGV4dCA9PSBOVUxMIHx8IERpZ2VzdFZh bHVlID09IE5VTEwpIHsNCj4gPiArICAgIHJldHVybiBGQUxTRTsNCj4gPiArICB9DQo+ID4gKw0K PiA+ICsgIC8vDQo+ID4gKyAgLy8gT3BlblNTTCBFVlAgZGlnZXN0IGZpbmFsaXphdGlvbg0KPiA+ ICsgIC8vDQo+ID4gKyAgaWYgKEVWUF9EaWdlc3RGaW5hbF9leCAoKEVWUF9NRF9DVFggKilFdnBN ZENvbnRleHQsIERpZ2VzdFZhbHVlLA0KPiAmTGVuZ3RoKSAhPSAxKSB7DQo+ID4gKyAgICByZXR1 cm4gRkFMU0U7DQo+ID4gKyAgfQ0KPiA+ICsgIGlmIChFVlBfTURfQ1RYX3Jlc2V0ICgoRVZQX01E X0NUWCAqKUV2cE1kQ29udGV4dCkgIT0gMSkgew0KPiA+ICsgICAgcmV0dXJuIEZBTFNFOw0KPiA+ ICsgIH0NCj4gPiArDQo+ID4gKyAgcmV0dXJuIFRSVUU7DQo+ID4gK30NCj4gPg0KDQo=