From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by mx.groups.io with SMTP id smtpd.web11.19.1573838488515891783 for ; Fri, 15 Nov 2019 09:21:28 -0800 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: intel.com, ip: 134.134.136.20, mailfrom: michael.d.kinney@intel.com) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by orsmga101.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 15 Nov 2019 09:21:27 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.68,308,1569308400"; d="scan'208";a="405399468" Received: from orsmsx102.amr.corp.intel.com ([10.22.225.129]) by fmsmga005.fm.intel.com with ESMTP; 15 Nov 2019 09:21:25 -0800 Received: from orsmsx157.amr.corp.intel.com (10.22.240.23) by ORSMSX102.amr.corp.intel.com (10.22.225.129) with Microsoft SMTP Server (TLS) id 14.3.439.0; Fri, 15 Nov 2019 09:21:26 -0800 Received: from orsmsx113.amr.corp.intel.com ([169.254.9.200]) by ORSMSX157.amr.corp.intel.com ([169.254.9.64]) with mapi id 14.03.0439.000; Fri, 15 Nov 2019 09:21:26 -0800 From: "Michael D Kinney" To: Ard Biesheuvel , edk2-devel-groups-io , "Wang, Jian J" , "Kinney, Michael D" CC: "Yao, Jiewen" , "Zhang, Chao B" , "Gao, Liming" , "Ni, Ray" Subject: Re: [edk2-devel] [PATCH 05/11] SecurityPkg/RngLibRdSeed: add an instance of RngLib to make use rdseed Thread-Topic: [edk2-devel] [PATCH 05/11] SecurityPkg/RngLibRdSeed: add an instance of RngLib to make use rdseed Thread-Index: AQHVmpHE5JqzCEV5U0OXDdrNrON6KKeKET0QgACKloCAAiZLAP//urMg Date: Fri, 15 Nov 2019 17:21:26 +0000 Message-ID: References: <20191114021743.3876-1-jian.j.wang@intel.com> <20191114021743.3876-6-jian.j.wang@intel.com> In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-version: 11.2.0.6 dlp-reaction: no-action x-originating-ip: [10.22.254.138] MIME-Version: 1.0 Return-Path: michael.d.kinney@intel.com Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SGkgQXJkLA0KDQpXaGF0IHdvdWxkIHlvdSByZWNvbW1lbmQgYXMgd2F5IHRvIHByb3ZpZGUgdGhl c2UgZGlmZmVyZW50DQp0eXBlcyBvZiBzZXJ2aWNlcz8gIFNvbWUgbW9yZSBuZXcgbGliIGNsYXNz ZXMgYW5kIGluc3RhbmNlcz8NCg0KVGhhbmtzLA0KDQpNaWtlDQoNCj4gLS0tLS1PcmlnaW5hbCBN ZXNzYWdlLS0tLS0NCj4gRnJvbTogQXJkIEJpZXNoZXV2ZWwgPGFyZC5iaWVzaGV1dmVsQGxpbmFy by5vcmc+DQo+IFNlbnQ6IEZyaWRheSwgTm92ZW1iZXIgMTUsIDIwMTkgNToyOSBBTQ0KPiBUbzog ZWRrMi1kZXZlbC1ncm91cHMtaW8gPGRldmVsQGVkazIuZ3JvdXBzLmlvPjsgV2FuZywNCj4gSmlh biBKIDxqaWFuLmoud2FuZ0BpbnRlbC5jb20+DQo+IENjOiBLaW5uZXksIE1pY2hhZWwgRCA8bWlj aGFlbC5kLmtpbm5leUBpbnRlbC5jb20+Ow0KPiBZYW8sIEppZXdlbiA8amlld2VuLnlhb0BpbnRl bC5jb20+OyBaaGFuZywgQ2hhbyBCDQo+IDxjaGFvLmIuemhhbmdAaW50ZWwuY29tPjsgR2FvLCBM aW1pbmcNCj4gPGxpbWluZy5nYW9AaW50ZWwuY29tPjsgTmksIFJheSA8cmF5Lm5pQGludGVsLmNv bT4NCj4gU3ViamVjdDogUmU6IFtlZGsyLWRldmVsXSBbUEFUQ0ggMDUvMTFdDQo+IFNlY3VyaXR5 UGtnL1JuZ0xpYlJkU2VlZDogYWRkIGFuIGluc3RhbmNlIG9mIFJuZ0xpYiB0bw0KPiBtYWtlIHVz ZSByZHNlZWQNCj4gDQo+IE9uIFRodSwgMTQgTm92IDIwMTkgYXQgMDQ6MzksIFdhbmcsIEppYW4g Sg0KPiA8amlhbi5qLndhbmdAaW50ZWwuY29tPiB3cm90ZToNCj4gPg0KPiA+IE1pa2UsDQo+ID4N Cj4gPiBJIGZpZ3VyZWQgdGhhdCByZHNlZWQgaXMgb25seSBuZWVkZWQgaW4gY2FzZXMNCj4gZGVt YW5kaW5nIGhpZ2hlc3QNCj4gPiBlbnRyb3B5LCBsaWtlIHNlZWRpbmcgb3RoZXIgcHNldWRvLVJO Ry4gSXQncyBub3QgZm9yDQo+IGdlbmVyYWwgcHVycG9zZSByYW5kb21uZXNzLg0KPiA+IFRoZW4g SSBwdXQgaXQgaW4gU2VjdXJpdHlQa2cuIEJ1dCBJJ20gb2sgdG8gcHV0IGl0DQo+IGludG8gTWRl UGtnLiBJIGhhdmUNCj4gPiBubyBzdHJvbmcgb3BpbmlvbiBmb3IgdGhpcy4NCj4gPg0KPiANCj4g SSB0aGluayBpdCBpcyBhIGJhZCBpZGVhIHRvIHVzZSB0aGUgc2FtZSBsaWJyYXJ5DQo+IGFic3Ry YWN0aW9uIFtSbmdMaWJdIGZvciBleHBvc2luZw0KPiBhKSBlbnRyb3B5IHNvdXJjZXMgdXNlZCBm b3Igc2VlZGluZyBkZXRlcm1pbmlzdGljDQo+IHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9ycw0KPiBi KSBkZXRlcm1pbmlzdGljIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9ycyB0aGVtc2VsdmVzDQo+IGMp IGxvdyBlbnRyb3B5IHBzZXVkby1STkdzIGJhc2VkIG9uIHRpbWVzdGFtcCBjb3VudGVycywNCj4g ZXRjDQo+IA0KPiBnaXZlbiB0aGF0IHRoZSB1c2UgY2FzZXMgZG9uJ3QgdXN1YWxseSBvdmVybGFw LiBJLmUuLA0KPiBvbmx5IGEgRFJCRyBpbXBsZW1lbnRhdGlvbiByZXF1aXJlcyBhKSwgYW5kIGV4 cG9ydHMNCj4gUm5nTGliIGl0c2VsZiBiYXNlZCBvbiB0aGF0Lg0KPiBVc2UgY2FzZXMgdGhhdCBj YW4gdG9sZXJhdGUgYykgW2xpa2UgSVYgZ2VuZXJhdG9ycyBmb3INCj4gYmxvY2sgZW5jcnlwdGlv bl0gYXJlIHR5cGljYWxseSBkaXNqb2ludCBmcm9tIG9uZXMgdGhhdA0KPiByZXF1aXJlIGIpIFtm b3Iga2V5IGdlbmVyYXRpb25dLiBUaGUgaWRlYSB0aGF0IHlvdSBjYW4NCj4gdXNlIFJuZ0xpYiBm b3IgYWxsIG9mIHRoZW0sIGFuZCBwbHVnIGFyYml0cmFyeQ0KPiBpbnN0YW50aWF0aW9ucyBvZiBp dCBpbnRvIGVhY2ggaXMgbWlzZ3VpZGVkIElNSE8uDQo+IA0KPiANCj4gDQo+ID4gPiAtLS0tLU9y aWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+ID4gRnJvbTogS2lubmV5LCBNaWNoYWVsIEQNCj4gPG1p Y2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPg0KPiA+ID4gU2VudDogVGh1cnNkYXksIE5vdmVtYmVy IDE0LCAyMDE5IDEyOjI1IFBNDQo+ID4gPiBUbzogZGV2ZWxAZWRrMi5ncm91cHMuaW87IFdhbmcs IEppYW4gSg0KPiA8amlhbi5qLndhbmdAaW50ZWwuY29tPjsNCj4gPiA+IEtpbm5leSwgTWljaGFl bCBEIDxtaWNoYWVsLmQua2lubmV5QGludGVsLmNvbT4NCj4gPiA+IENjOiBZYW8sIEppZXdlbiA8 amlld2VuLnlhb0BpbnRlbC5jb20+OyBaaGFuZywgQ2hhbw0KPiBCDQo+ID4gPiA8Y2hhby5iLnpo YW5nQGludGVsLmNvbT47IEdhbywgTGltaW5nDQo+IDxsaW1pbmcuZ2FvQGludGVsLmNvbT47IE5p LA0KPiA+ID4gUmF5IDxyYXkubmlAaW50ZWwuY29tPg0KPiA+ID4gU3ViamVjdDogUkU6IFtlZGsy LWRldmVsXSBbUEFUQ0ggMDUvMTFdDQo+IFNlY3VyaXR5UGtnL1JuZ0xpYlJkU2VlZDoNCj4gPiA+ IGFkZCBhbiBpbnN0YW5jZSBvZiBSbmdMaWIgdG8gbWFrZSB1c2UgcmRzZWVkDQo+ID4gPg0KPiA+ ID4gSmlhbiwNCj4gPiA+DQo+ID4gPiBXaHkgaXMgdGhpcyBsaWIgaW5zdGFuY2UgaW4gdGhlIFNl Y3VyaXR5UGtnPyAgSXQNCj4gb25seSBkZXBlbmRzIG9uIHRoZQ0KPiA+ID4gTWRlUGtnLiAgQ2Fu J3Qgbm9uIHNlY3VyaXR5IGZlYXR1cmUgcmVsYXRlZCBtb2R1bGVzDQo+IHRoYXQgd2FudCB0byBh DQo+ID4gPiByYW5kb20gbnVtYmVyIHVzZSB0aGlzIGxpYiB3aXRob3V0IHVzaW5nIHRoZQ0KPiBT ZWN1cml0eVBrZz8gIENvdWxkDQo+ID4gPiB0aGlzIGxpYiBpbnN0YW5jZSBiZSBhZGRlZCB0byBN ZGVQa2c/DQo+ID4gPg0KPiA+ID4gVGhhbmtzLA0KPiA+ID4NCj4gPiA+IE1pa2UNCj4gPiA+DQo+ ID4gPiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4gPiA+IEZyb206IGRldmVsQGVk azIuZ3JvdXBzLmlvIDxkZXZlbEBlZGsyLmdyb3Vwcy5pbz4NCj4gT24gQmVoYWxmIE9mDQo+ID4g PiA+IFdhbmcsIEppYW4gSg0KPiA+ID4gPiBTZW50OiBXZWRuZXNkYXksIE5vdmVtYmVyIDEzLCAy MDE5IDY6MTggUE0NCj4gPiA+ID4gVG86IGRldmVsQGVkazIuZ3JvdXBzLmlvDQo+ID4gPiA+IENj OiBZYW8sIEppZXdlbiA8amlld2VuLnlhb0BpbnRlbC5jb20+OyBaaGFuZywNCj4gQ2hhbyBCDQo+ ID4gPiA+IDxjaGFvLmIuemhhbmdAaW50ZWwuY29tPjsgS2lubmV5LCBNaWNoYWVsIEQNCj4gPiA+ ID4gPG1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPjsgR2FvLCBMaW1pbmcNCj4gPGxpbWluZy5n YW9AaW50ZWwuY29tPjsNCj4gPiA+ID4gTmksIFJheSA8cmF5Lm5pQGludGVsLmNvbT4NCj4gPiA+ ID4gU3ViamVjdDogW2VkazItZGV2ZWxdIFtQQVRDSCAwNS8xMV0NCj4gPiA+ID4gU2VjdXJpdHlQ a2cvUm5nTGliUmRTZWVkOiBhZGQgYW4gaW5zdGFuY2Ugb2YNCj4gUm5nTGliIHRvIG1ha2UgdXNl DQo+ID4gPiA+IHJkc2VlZA0KPiA+ID4gPg0KPiA+ID4gPiBUaGlzIHZlcnNpb24gb2YgUm5nTGli IG1ha2VzIHVzZSBvZiBBc21SZFNlZWQgdG8NCj4gZ2V0DQo+ID4gPiA+IG5vbi1kZXRlcm1pbmlz dGljIHJhbmRvbSBudW1iZXIsIHdoaWNoIGNhbiBiZQ0KPiB1c2VkIGZvciBzZWVkaW5nDQo+ID4g PiA+IG90aGVyIHNvZnR3YXJlIERSTkcgbGlrZSByYW5kIGludGVyZmFjZSBpbg0KPiBvcGVuc3Ns LiBJdCBjYW4gYmUgdXNlZA0KPiA+ID4gPiBvbmx5IG9uIElBMzIvWDY0IHByb2Nlc3NvcnMgd2hp Y2ggc3VwcG9ydHMgcmRzZWVkDQo+IGluc3RydWN0aW9uLg0KPiA+ID4gPg0KPiA+ID4gPiBSZWY6 DQo+ID4gPiA+DQo+IGh0dHBzOi8vYnVnemlsbGEudGlhbm9jb3JlLm9yZy9zaG93X2J1Zy5jZ2k/ aWQ9MTg3MQ0KPiA+ID4gPiBDYzogSmlld2VuIFlhbyA8amlld2VuLnlhb0BpbnRlbC5jb20+DQo+ ID4gPiA+IENjOiBDaGFvIFpoYW5nIDxjaGFvLmIuemhhbmdAaW50ZWwuY29tPg0KPiA+ID4gPiBD YzogTWljaGFlbCBEIEtpbm5leSA8bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb20+DQo+ID4gPiA+ IENjOiBMaW1pbmcgR2FvIDxsaW1pbmcuZ2FvQGludGVsLmNvbT4NCj4gPiA+ID4gQ2M6IFJheSBO aSA8cmF5Lm5pQGludGVsLmNvbT4NCj4gPiA+ID4gU2lnbmVkLW9mZi1ieTogSmlhbiBKIFdhbmcN Cj4gPGppYW4uai53YW5nQGludGVsLmNvbT4NCj4gPiA+ID4gLS0tDQo+ID4gPiA+ICAuLi4vUm5n TGliUmRTZWVkL1JuZ0xpYlJkU2VlZC5pbmYgICAgICAgICAgICAgfA0KPiAzNw0KPiA+ID4gPiAr KysrDQo+ID4gPiA+ICAuLi4vUm5nTGliUmRTZWVkL1JuZ0xpYlJkU2VlZC51bmkgICAgICAgICAg ICAgfA0KPiAxOCArKw0KPiA+ID4gPiAgLi4uL1JuZ0xpYlJkU2VlZC9SbmdSZFNlZWQuYyAgICAg ICAgICAgICAgICAgIHwNCj4gMTg5DQo+ID4gPiA+ICsrKysrKysrKysrKysrKysrKw0KPiA+ID4g PiAgMyBmaWxlcyBjaGFuZ2VkLCAyNDQgaW5zZXJ0aW9ucygrKSAgY3JlYXRlIG1vZGUNCj4gMTAw NjQ0DQo+ID4gPiA+DQo+IFNlY3VyaXR5UGtnL1JhbmRvbU51bWJlckdlbmVyYXRvci9SbmdMaWJS ZFNlZWQvUm5nTGliUmQNCj4gPiA+ID4gU2VlZC5pbmYNCj4gPiA+ID4gIGNyZWF0ZSBtb2RlIDEw MDY0NA0KPiA+ID4gPg0KPiBTZWN1cml0eVBrZy9SYW5kb21OdW1iZXJHZW5lcmF0b3IvUm5nTGli UmRTZWVkL1JuZ0xpYlJkDQo+ID4gPiA+IFNlZWQudW5pDQo+ID4gPiA+ICBjcmVhdGUgbW9kZSAx MDA2NDQNCj4gPiA+ID4NCj4gU2VjdXJpdHlQa2cvUmFuZG9tTnVtYmVyR2VuZXJhdG9yL1JuZ0xp YlJkU2VlZC9SbmdSZFNlZQ0KPiA+ID4gPiBkLmMNCj4gPiA+ID4NCj4gPiA+ID4gZGlmZiAtLWdp dA0KPiA+ID4gPg0KPiBhL1NlY3VyaXR5UGtnL1JhbmRvbU51bWJlckdlbmVyYXRvci9SbmdMaWJS ZFNlZWQvUm5nTGliDQo+ID4gPiA+IFJkU2VlZC5pbmYNCj4gPiA+ID4NCj4gYi9TZWN1cml0eVBr Zy9SYW5kb21OdW1iZXJHZW5lcmF0b3IvUm5nTGliUmRTZWVkL1JuZ0xpYg0KPiA+ID4gPiBSZFNl ZWQuaW5mDQo+ID4gPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gPiA+IGluZGV4IDAwMDAw MDAwMDAuLjgxNjI0MDg3NzUNCj4gPiA+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ID4gPiArKysNCj4g PiA+ID4NCj4gYi9TZWN1cml0eVBrZy9SYW5kb21OdW1iZXJHZW5lcmF0b3IvUm5nTGliUmRTZWVk L1JuZ0xpYg0KPiA+ID4gPiBSZFNlZWQuaW5mDQo+ID4gPiA+IEBAIC0wLDAgKzEsMzcgQEANCj4g PiA+ID4gKyMjIEBmaWxlDQo+ID4gPiA+ICsjICBJbnN0YW5jZSBvZiBSTkcgKFJhbmRvbSBOdW1i ZXIgR2VuZXJhdG9yKQ0KPiBMaWJyYXJ5Lg0KPiA+ID4gPiArIw0KPiA+ID4gPiArIyAgUm5nIFJk U2VlZCBMaWJyYXJ5IHRoYXQgdXNlcyBDUFUgUmRTZWVkDQo+IGluc3RydWN0aW9uDQo+ID4gPiA+ IGFjY2VzcyB0bw0KPiA+ID4gPiArcHJvdmlkZSAjICBub24tZGV0ZXJtaW5pc3RpYyByYW5kb20g bnVtYmVyIHdoaWNoDQo+IGNhbg0KPiA+ID4gPiBiZSB1c2VkIGFzIHNlZWQNCj4gPiA+ID4gK2Zv ciBvdGhlciAjICBzb2Z0d2FyZSBkZXRlcm1pbmlzdGljIFJOR3MuDQo+ID4gPiA+ICsjDQo+ID4g PiA+ICsjICBDb3B5cmlnaHQgKGMpIDIwMTksIEludGVsIENvcnBvcmF0aW9uLiBBbGwNCj4gcmln aHRzDQo+ID4gPiA+IHJlc2VydmVkLjxCUj4gIyAjDQo+ID4gPiA+ICtTUERYLUxpY2Vuc2UtSWRl bnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudCAjICMNCj4gIyMNCj4gPiA+ID4gKw0KPiA+ID4g PiArW0RlZmluZXNdDQo+ID4gPiA+ICsgIElORl9WRVJTSU9OICAgICAgICAgICAgICAgICAgICA9 IDB4MDAwMTAwMjkNCj4gPiA+ID4gKyAgQkFTRV9OQU1FICAgICAgICAgICAgICAgICAgICAgID0g Um5nTGliUmRTZWVkDQo+ID4gPiA+ICsgIE1PRFVMRV9VTklfRklMRSAgICAgICAgICAgICAgICA9 DQo+IFJuZ0xpYlJkU2VlZC51bmkNCj4gPiA+ID4gKyAgRklMRV9HVUlEICAgICAgICAgICAgICAg ICAgICAgID0gOEI2MTNCMkUtDQo+IEI5NDQtNDBGOS0NCj4gPiA+ID4gQjk3OS0xQjYwRDdDQUE3 M0MNCj4gPiA+ID4gKyAgTU9EVUxFX1RZUEUgICAgICAgICAgICAgICAgICAgID0gQkFTRQ0KPiA+ ID4gPiArICBWRVJTSU9OX1NUUklORyAgICAgICAgICAgICAgICAgPSAxLjANCj4gPiA+ID4gKyAg TElCUkFSWV9DTEFTUyAgICAgICAgICAgICAgICAgID0gUm5nTGliDQo+ID4gPiA+ICsgIENPTlNU UlVDVE9SICAgICAgICAgICAgICAgICAgICA9DQo+ID4gPiA+IFJuZ0xpYlJkU2VlZENvbnN0cnVj dG9yDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyMNCj4gPiA+ID4gKyMgIFZBTElEX0FSQ0hJVEVDVFVS RVMgICAgICAgICAgID0gSUEzMiBYNjQNCj4gPiA+ID4gKyMNCj4gPiA+ID4gKw0KPiA+ID4gPiAr W1NvdXJjZXMuSWEzMiwgU291cmNlcy5YNjRdDQo+ID4gPiA+ICsgIFJuZ1JkU2VlZC5jDQo+ID4g PiA+ICsNCj4gPiA+ID4gK1tQYWNrYWdlc10NCj4gPiA+ID4gKyAgTWRlUGtnL01kZVBrZy5kZWMN Cj4gPiA+ID4gKw0KPiA+ID4gPiArW0xpYnJhcnlDbGFzc2VzXQ0KPiA+ID4gPiArICBCYXNlTGli DQo+ID4gPiA+ICsgIERlYnVnTGliDQo+ID4gPiA+IGRpZmYgLS1naXQNCj4gPiA+ID4NCj4gYS9T ZWN1cml0eVBrZy9SYW5kb21OdW1iZXJHZW5lcmF0b3IvUm5nTGliUmRTZWVkL1JuZ0xpYg0KPiA+ ID4gPiBSZFNlZWQudW5pDQo+ID4gPiA+DQo+IGIvU2VjdXJpdHlQa2cvUmFuZG9tTnVtYmVyR2Vu ZXJhdG9yL1JuZ0xpYlJkU2VlZC9SbmdMaWINCj4gPiA+ID4gUmRTZWVkLnVuaQ0KPiA+ID4gPiBu ZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+ID4gPiBpbmRleCAwMDAwMDAwMDAwLi4wNTFhMzAxOWJj DQo+ID4gPiA+IC0tLSAvZGV2L251bGwNCj4gPiA+ID4gKysrDQo+ID4gPiA+DQo+IGIvU2VjdXJp dHlQa2cvUmFuZG9tTnVtYmVyR2VuZXJhdG9yL1JuZ0xpYlJkU2VlZC9SbmdMaWINCj4gPiA+ID4g UmRTZWVkLnVuaQ0KPiA+ID4gPiBAQCAtMCwwICsxLDE4IEBADQo+ID4gPiA+ICsvLyAvKiogQGZp bGUNCj4gPiA+ID4gKy8vIEluc3RhbmNlIG9mIFJORyAoUmFuZG9tIE51bWJlciBHZW5lcmF0b3Ip DQo+IExpYnJhcnkuDQo+ID4gPiA+ICsvLw0KPiA+ID4gPiArLy8gUm5nIFJkU2VlZCBMaWJyYXJ5 IHRoYXQgdXNlcyBDUFUgUmRTZWVkDQo+IGluc3RydWN0aW9uDQo+ID4gPiA+IGFjY2VzcyB0bw0K PiA+ID4gPiArcHJvdmlkZSAvLyBub24tZGV0ZXJtaW5pc3RpYyByYW5kb20gbnVtYmVyIHdoaWNo DQo+IGNhbg0KPiA+ID4gPiBiZSB1c2VkIGFzIHNlZWQNCj4gPiA+ID4gK2ZvciBvdGhlciAvLyBz b2Z0d2FyZSBkZXRlcm1pbmlzdGljIFJOR3MuDQo+ID4gPiA+ICsvLw0KPiA+ID4gPiArLy8gQ29w eXJpZ2h0IChjKSAyMDE5LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsDQo+IHJpZ2h0cw0KPiA+ID4g PiByZXNlcnZlZC48QlI+IC8vDQo+ID4gPiA+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog QlNELTItQ2xhdXNlLVBhdGVudA0KPiAvLyAvLw0KPiA+ID4gPiAqKi8NCj4gPiA+ID4gKw0KPiA+ ID4gPiArDQo+ID4gPiA+ICsjc3RyaW5nIFNUUl9NT0RVTEVfQUJTVFJBQ1QNCj4gI2xhbmd1YWdl IGVuLQ0KPiA+ID4gPiBVUyAiSW5zdGFuY2Ugb2YgUk5HIExpYnJhcnkiDQo+ID4gPiA+ICsNCj4g PiA+ID4gKyNzdHJpbmcgU1RSX01PRFVMRV9ERVNDUklQVElPTg0KPiAjbGFuZ3VhZ2UgZW4tDQo+ ID4gPiA+IFVTICJSbmdSZFNlZWQgTGlicmFyeSB0aGF0IHVzZXMgQ1BVIFJkU2VlZA0KPiBpbnN0 cnVjdGlvbiBhY2Nlc3MgdG8NCj4gPiA+ID4gcHJvdmlkZSBub24tZGV0ZXJtaW5pc3RpYyByYW5k b20gbnVtYmVycy4iDQo+ID4gPiA+ICsNCj4gPiA+ID4gZGlmZiAtLWdpdA0KPiA+ID4gPg0KPiBh L1NlY3VyaXR5UGtnL1JhbmRvbU51bWJlckdlbmVyYXRvci9SbmdMaWJSZFNlZWQvUm5nUmRTDQo+ ID4gPiA+IGVlZC5jDQo+ID4gPiA+DQo+IGIvU2VjdXJpdHlQa2cvUmFuZG9tTnVtYmVyR2VuZXJh dG9yL1JuZ0xpYlJkU2VlZC9SbmdSZFMNCj4gPiA+ID4gZWVkLmMNCj4gPiA+ID4gbmV3IGZpbGUg bW9kZSAxMDA2NDQNCj4gPiA+ID4gaW5kZXggMDAwMDAwMDAwMC4uMDAzNmZhYTA1MA0KPiA+ID4g PiAtLS0gL2Rldi9udWxsDQo+ID4gPiA+ICsrKw0KPiA+ID4gPg0KPiBiL1NlY3VyaXR5UGtnL1Jh bmRvbU51bWJlckdlbmVyYXRvci9SbmdMaWJSZFNlZWQvUm5nUmRTDQo+ID4gPiA+IGVlZC5jDQo+ ID4gPiA+IEBAIC0wLDAgKzEsMTg5IEBADQo+ID4gPiA+ICsvKiogQGZpbGUNCj4gPiA+ID4gKyAg UmFuZG9tIG51bWJlciBnZW5lcmF0b3Igc2VydmljZXMgdGhhdCB1c2VzDQo+IFJkU2VlZA0KPiA+ ID4gPiBpbnN0cnVjdGlvbiBhY2Nlc3MNCj4gPiA+ID4gKyAgdG8gcHJvdmlkZSBub24tZGV0ZXJt aW5pc3RpYyByYW5kb20gbnVtYmVycywNCj4gd2hpY2gNCj4gPiA+ID4gYXJlIHVzdWFsbHkgdXNl ZA0KPiA+ID4gPiArICBmb3Igc2VlZGluZyBvdGhlciBwc2V1ZG8tcmFuZG9tIG51bWJlcg0KPiBn ZW5lcmF0b3JzLg0KPiA+ID4gPiArDQo+ID4gPiA+ICtDb3B5cmlnaHQgKGMpIDIwMTksIEludGVs IENvcnBvcmF0aW9uLiBBbGwNCj4gcmlnaHRzDQo+ID4gPiA+IHJlc2VydmVkLjxCUj4NCj4gPiA+ ID4gK1NQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ID4gPiA+ ICsNCj4gPiA+ID4gKyoqLw0KPiA+ID4gPiArDQo+ID4gPiA+ICsjaW5jbHVkZSA8TGlicmFyeS9C YXNlTGliLmg+DQo+ID4gPiA+ICsjaW5jbHVkZSA8TGlicmFyeS9EZWJ1Z0xpYi5oPg0KPiA+ID4g PiArI2luY2x1ZGUgPExpYnJhcnkvUm5nTGliLmg+DQo+ID4gPiA+ICsNCj4gPiA+ID4gKy8vDQo+ ID4gPiA+ICsvLyBCaXQgbWFzayB1c2VkIHRvIGRldGVybWluZSBpZiBSZFNlZWQNCj4gaW5zdHJ1 Y3Rpb24gaXMNCj4gPiA+ID4gc3VwcG9ydGVkLg0KPiA+ID4gPiArLy8NCj4gPiA+ID4gKyNkZWZp bmUgUkRTRUVEX01BU0sgICAgICAgICAgICAgICAgICBCSVQxOA0KPiA+ID4gPiArDQo+ID4gPiA+ ICsvLw0KPiA+ID4gPiArLy8gTGltaXRlZCByZXRyeSBudW1iZXIgd2hlbiB2YWxpZCByYW5kb20g ZGF0YQ0KPiBpcw0KPiA+ID4gPiByZXR1cm5lZC4NCj4gPiA+ID4gKy8vIEl0IHZhcmllcyBiZXR3 ZWVuIDEgYW5kIDEwMCBhY2NvcmRpbmcgdG8NCj4gIkludGVsKFIpDQo+ID4gPiA+IERSR04gU29m dHdhcmUNCj4gPiA+ID4gK0ltcGxlbWVudGF0aW9uIC8vIEd1aWRlIi4gTGV0J3MgdXNlIHRoZSBz YW1lDQo+IHZhbHVlIGFzDQo+ID4gPiA+IFJEUkFORCBpbiBCYXNlUm5nTGliLg0KPiA+ID4gPiAr Ly8NCj4gPiA+ID4gKyNkZWZpbmUgUkRTRUVEX1JFVFJZX0xJTUlUICAgICAgICAgICAxMA0KPiA+ ID4gPiArDQo+ID4gPiA+ICsvKioNCj4gPiA+ID4gKyAgVGhlIGNvbnN0cnVjdG9yIGZ1bmN0aW9u IGNoZWNrcyB3aGV0aGVyIG9yIG5vdA0KPiA+ID4gPiBSRFNFRUQgaW5zdHJ1Y3Rpb24gaXMNCj4g PiA+ID4gK3N1cHBvcnRlZA0KPiA+ID4gPiArICBieSB0aGUgaG9zdCBoYXJkd2FyZS4NCj4gPiA+ ID4gKw0KPiA+ID4gPiArICBUaGUgY29uc3RydWN0b3IgZnVuY3Rpb24gY2hlY2tzIHdoZXRoZXIg b3Igbm90DQo+ID4gPiA+IFJEU0VFRCBpbnN0cnVjdGlvbiBpcyBzdXBwb3J0ZWQuDQo+ID4gPiA+ ICsgIEl0IHdpbGwgQVNTRVJUKCkgaWYgUkRTRUVEIGluc3RydWN0aW9uIGlzIG5vdA0KPiA+ID4g PiBzdXBwb3J0ZWQuDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgQHJldHZhbCBSRVRVUk5fU1VDQ0VT UyAgICAgIFRoZSBwcm9jZXNzb3INCj4gc3VwcG9ydHMNCj4gPiA+ID4gUkRTRUVEIGluc3RydWN0 aW9uLg0KPiA+ID4gPiArICBAcmV0dmFsIFJFVFVSTl9VTlNVUFBPUlRFRCAgUkRTRUVEIGluc3Ry dWN0aW9uDQo+IGlzDQo+ID4gPiA+IG5vdCBzdXBwb3J0ZWQuDQo+ID4gPiA+ICsNCj4gPiA+ID4g KyoqLw0KPiA+ID4gPiArUkVUVVJOX1NUQVRVUw0KPiA+ID4gPiArRUZJQVBJDQo+ID4gPiA+ICtS bmdMaWJSZFNlZWRDb25zdHJ1Y3RvciAoDQo+ID4gPiA+ICsgIFZPSUQNCj4gPiA+ID4gKyAgKQ0K PiA+ID4gPiArew0KPiA+ID4gPiArICBVSU5UMzIgIFJlZ0VieDsNCj4gPiA+ID4gKw0KPiA+ID4g PiArICAvLw0KPiA+ID4gPiArICAvLyBEZXRlcm1pbmUgUkRTRUVEIHN1cHBvcnQgYnkgZXhhbWlu aW5nIGJpdA0KPiAxOCBvZg0KPiA+ID4gPiB0aGUgRUJYIHJlZ2lzdGVyDQo+ID4gPiA+ICsgcmV0 dXJuZWQgYnkgIC8vIENQVUlEKEVBWD03LCBFQ1g9MCkuIEJJVDE4IG9mDQo+IEVCWA0KPiA+ID4g PiBpbmRpY2F0ZXMgdGhhdA0KPiA+ID4gPiArIHByb2Nlc3NvciBzdXBwb3J0IFJEU0VFRCAgLy8g aW5zdHJ1Y3Rpb24uDQo+ID4gPiA+ICsgIC8vDQo+ID4gPiA+ICsgIEFzbUNwdWlkRXggKDcsIDAs IE5VTEwsICZSZWdFYngsIE5VTEwsIE5VTEwpOw0KPiBpZg0KPiA+ID4gPiAoKFJlZ0VieCAmDQo+ ID4gPiA+ICsgUkRTRUVEX01BU0spICE9IFJEU0VFRF9NQVNLKSB7DQo+ID4gPiA+ICsgICAgQVNT RVJUICgoUmVnRWJ4ICYgUkRTRUVEX01BU0spID09DQo+IFJEU0VFRF9NQVNLKTsNCj4gPiA+ID4g KyAgICByZXR1cm4gUkVUVVJOX1VOU1VQUE9SVEVEOw0KPiA+ID4gPiArICB9DQo+ID4gPiA+ICsN Cj4gPiA+ID4gKyAgcmV0dXJuIFJFVFVSTl9TVUNDRVNTOw0KPiA+ID4gPiArfQ0KPiA+ID4gPiAr DQo+ID4gPiA+ICsvKioNCj4gPiA+ID4gKyAgR2VuZXJhdGVzIGEgMTYtYml0IHJhbmRvbSBudW1i ZXIuDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgaWYgUmFuZCBpcyBOVUxMLCB0aGVuIEFTU0VSVCgp Lg0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIEBwYXJhbVtvdXRdIFJhbmQgICAgIEJ1ZmZlciBwb2lu dGVyIHRvIHN0b3JlDQo+IHRoZSAxNi0NCj4gPiA+ID4gYml0IHJhbmRvbSB2YWx1ZS4NCj4gPiA+ ID4gKw0KPiA+ID4gPiArICBAcmV0dmFsIFRSVUUgICAgICAgICBSYW5kb20gbnVtYmVyIGdlbmVy YXRlZA0KPiA+ID4gPiBzdWNjZXNzZnVsbHkuDQo+ID4gPiA+ICsgIEByZXR2YWwgRkFMU0UgICAg ICAgIEZhaWxlZCB0byBnZW5lcmF0ZSB0aGUNCj4gcmFuZG9tDQo+ID4gPiA+IG51bWJlci4NCj4g PiA+ID4gKw0KPiA+ID4gPiArKiovDQo+ID4gPiA+ICtCT09MRUFODQo+ID4gPiA+ICtFRklBUEkN Cj4gPiA+ID4gK0dldFJhbmRvbU51bWJlcjE2ICgNCj4gPiA+ID4gKyAgT1VUICAgICBVSU5UMTYg ICAgICAgICAgICAgICAgICAgICpSYW5kDQo+ID4gPiA+ICsgICkNCj4gPiA+ID4gK3sNCj4gPiA+ ID4gKyAgVUlOVDMyICBJbmRleDsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICBBU1NFUlQgKFJhbmQg IT0gTlVMTCk7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgLy8NCj4gPiA+ID4gKyAgLy8gQSBsb29w IHRvIGZldGNoIGEgMTYgYml0IHJhbmRvbSB2YWx1ZSB3aXRoDQo+IGENCj4gPiA+ID4gcmV0cnkg Y291bnQgbGltaXQuDQo+ID4gPiA+ICsgIC8vDQo+ID4gPiA+ICsgIGZvciAoSW5kZXggPSAwOyBJ bmRleCA8IFJEU0VFRF9SRVRSWV9MSU1JVDsNCj4gSW5kZXgrKykNCj4gPiA+ID4gew0KPiA+ID4g PiArICAgIGlmIChBc21SZFNlZWQxNiAoUmFuZCkpIHsNCj4gPiA+ID4gKyAgICAgIHJldHVybiBU UlVFOw0KPiA+ID4gPiArICAgIH0NCj4gPiA+ID4gKyAgfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsg IHJldHVybiBGQUxTRTsNCj4gPiA+ID4gK30NCj4gPiA+ID4gKw0KPiA+ID4gPiArLyoqDQo+ID4g PiA+ICsgIEdlbmVyYXRlcyBhIDMyLWJpdCByYW5kb20gbnVtYmVyLg0KPiA+ID4gPiArDQo+ID4g PiA+ICsgIGlmIFJhbmQgaXMgTlVMTCwgdGhlbiBBU1NFUlQoKS4NCj4gPiA+ID4gKw0KPiA+ID4g PiArICBAcGFyYW1bb3V0XSBSYW5kICAgICBCdWZmZXIgcG9pbnRlciB0byBzdG9yZQ0KPiB0aGUg MzItDQo+ID4gPiA+IGJpdCByYW5kb20gdmFsdWUuDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgQHJl dHZhbCBUUlVFICAgICAgICAgUmFuZG9tIG51bWJlciBnZW5lcmF0ZWQNCj4gPiA+ID4gc3VjY2Vz c2Z1bGx5Lg0KPiA+ID4gPiArICBAcmV0dmFsIEZBTFNFICAgICAgICBGYWlsZWQgdG8gZ2VuZXJh dGUgdGhlDQo+IHJhbmRvbQ0KPiA+ID4gPiBudW1iZXIuDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyoq Lw0KPiA+ID4gPiArQk9PTEVBTg0KPiA+ID4gPiArRUZJQVBJDQo+ID4gPiA+ICtHZXRSYW5kb21O dW1iZXIzMiAoDQo+ID4gPiA+ICsgIE9VVCAgICAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAq UmFuZA0KPiA+ID4gPiArICApDQo+ID4gPiA+ICt7DQo+ID4gPiA+ICsgIFVJTlQzMiAgSW5kZXg7 DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgQVNTRVJUIChSYW5kICE9IE5VTEwpOw0KPiA+ID4gPiAr DQo+ID4gPiA+ICsgIC8vDQo+ID4gPiA+ICsgIC8vIEEgbG9vcCB0byBmZXRjaCBhIDMyIGJpdCBy YW5kb20gdmFsdWUgd2l0aA0KPiBhDQo+ID4gPiA+IHJldHJ5IGNvdW50IGxpbWl0Lg0KPiA+ID4g PiArICAvLw0KPiA+ID4gPiArICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBSRFNFRURfUkVUUllf TElNSVQ7DQo+IEluZGV4KyspDQo+ID4gPiA+IHsNCj4gPiA+ID4gKyAgICBpZiAoQXNtUmRTZWVk MzIgKFJhbmQpKSB7DQo+ID4gPiA+ICsgICAgICByZXR1cm4gVFJVRTsNCj4gPiA+ID4gKyAgICB9 DQo+ID4gPiA+ICsgIH0NCj4gPiA+ID4gKw0KPiA+ID4gPiArICByZXR1cm4gRkFMU0U7DQo+ID4g PiA+ICt9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKy8qKg0KPiA+ID4gPiArICBHZW5lcmF0ZXMgYSA2 NC1iaXQgcmFuZG9tIG51bWJlci4NCj4gPiA+ID4gKw0KPiA+ID4gPiArICBpZiBSYW5kIGlzIE5V TEwsIHRoZW4gQVNTRVJUKCkuDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgQHBhcmFtW291dF0gUmFu ZCAgICAgQnVmZmVyIHBvaW50ZXIgdG8gc3RvcmUNCj4gdGhlIDY0LQ0KPiA+ID4gPiBiaXQgcmFu ZG9tIHZhbHVlLg0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIEByZXR2YWwgVFJVRSAgICAgICAgIFJh bmRvbSBudW1iZXIgZ2VuZXJhdGVkDQo+ID4gPiA+IHN1Y2Nlc3NmdWxseS4NCj4gPiA+ID4gKyAg QHJldHZhbCBGQUxTRSAgICAgICAgRmFpbGVkIHRvIGdlbmVyYXRlIHRoZQ0KPiByYW5kb20NCj4g PiA+ID4gbnVtYmVyLg0KPiA+ID4gPiArDQo+ID4gPiA+ICsqKi8NCj4gPiA+ID4gK0JPT0xFQU4N Cj4gPiA+ID4gK0VGSUFQSQ0KPiA+ID4gPiArR2V0UmFuZG9tTnVtYmVyNjQgKA0KPiA+ID4gPiAr ICBPVVQgICAgIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgKlJhbmQNCj4gPiA+ID4gKyAgKQ0K PiA+ID4gPiArew0KPiA+ID4gPiArICBVSU5UMzIgIEluZGV4Ow0KPiA+ID4gPiArDQo+ID4gPiA+ ICsgIEFTU0VSVCAoUmFuZCAhPSBOVUxMKTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArICAvLw0KPiA+ ID4gPiArICAvLyBBIGxvb3AgdG8gZmV0Y2ggYSA2NCBiaXQgcmFuZG9tIHZhbHVlIHdpdGgNCj4g YQ0KPiA+ID4gPiByZXRyeSBjb3VudCBsaW1pdC4NCj4gPiA+ID4gKyAgLy8NCj4gPiA+ID4gKyAg Zm9yIChJbmRleCA9IDA7IEluZGV4IDwgUkRTRUVEX1JFVFJZX0xJTUlUOw0KPiBJbmRleCsrKQ0K PiA+ID4gPiB7DQo+ID4gPiA+ICsgICAgaWYgKEFzbVJkU2VlZDY0IChSYW5kKSkgew0KPiA+ID4g PiArICAgICAgcmV0dXJuIFRSVUU7DQo+ID4gPiA+ICsgICAgfQ0KPiA+ID4gPiArICB9DQo+ID4g PiA+ICsNCj4gPiA+ID4gKyAgcmV0dXJuIEZBTFNFOw0KPiA+ID4gPiArfQ0KPiA+ID4gPiArDQo+ ID4gPiA+ICsvKioNCj4gPiA+ID4gKyAgR2VuZXJhdGVzIGEgMTI4LWJpdCByYW5kb20gbnVtYmVy Lg0KPiA+ID4gPiArDQo+ID4gPiA+ICsgIGlmIFJhbmQgaXMgTlVMTCwgdGhlbiBBU1NFUlQoKS4N Cj4gPiA+ID4gKw0KPiA+ID4gPiArICBAcGFyYW1bb3V0XSBSYW5kICAgICBCdWZmZXIgcG9pbnRl ciB0byBzdG9yZQ0KPiB0aGUNCj4gPiA+ID4gMTI4LWJpdCByYW5kb20gdmFsdWUuDQo+ID4gPiA+ ICsNCj4gPiA+ID4gKyAgQHJldHZhbCBUUlVFICAgICAgICAgUmFuZG9tIG51bWJlciBnZW5lcmF0 ZWQNCj4gPiA+ID4gc3VjY2Vzc2Z1bGx5Lg0KPiA+ID4gPiArICBAcmV0dmFsIEZBTFNFICAgICAg ICBGYWlsZWQgdG8gZ2VuZXJhdGUgdGhlDQo+IHJhbmRvbQ0KPiA+ID4gPiBudW1iZXIuDQo+ID4g PiA+ICsNCj4gPiA+ID4gKyoqLw0KPiA+ID4gPiArQk9PTEVBTg0KPiA+ID4gPiArRUZJQVBJDQo+ ID4gPiA+ICtHZXRSYW5kb21OdW1iZXIxMjggKA0KPiA+ID4gPiArICBPVVQgICAgIFVJTlQ2NCAg ICAgICAgICAgICAgICAgICAgKlJhbmQNCj4gPiA+ID4gKyAgKQ0KPiA+ID4gPiArew0KPiA+ID4g PiArICBBU1NFUlQgKFJhbmQgIT0gTlVMTCk7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgLy8NCj4g PiA+ID4gKyAgLy8gUmVhZCBmaXJzdCA2NCBiaXRzDQo+ID4gPiA+ICsgIC8vDQo+ID4gPiA+ICsg IGlmICghR2V0UmFuZG9tTnVtYmVyNjQgKFJhbmQpKSB7DQo+ID4gPiA+ICsgICAgcmV0dXJuIEZB TFNFOw0KPiA+ID4gPiArICB9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyAgLy8NCj4gPiA+ID4gKyAg Ly8gUmVhZCBzZWNvbmQgNjQgYml0cw0KPiA+ID4gPiArICAvLw0KPiA+ID4gPiArICByZXR1cm4g R2V0UmFuZG9tTnVtYmVyNjQgKCsrUmFuZCk7IH0NCj4gPiA+ID4gLS0NCj4gPiA+ID4gMi4xNy4x LndpbmRvd3MuMg0KPiA+ID4gPg0KPiA+ID4gPg0KPiA+ID4gPg0KPiA+DQo+ID4NCj4gPiANCj4g Pg0K