From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.0 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 45053C04EB8 for ; Thu, 6 Dec 2018 08:51:46 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id DAF9320989 for ; Thu, 6 Dec 2018 08:51:45 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org DAF9320989 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-security-module-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727806AbeLFIvp (ORCPT ); Thu, 6 Dec 2018 03:51:45 -0500 Received: from mga14.intel.com ([192.55.52.115]:10009 "EHLO mga14.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727763AbeLFIvp (ORCPT ); Thu, 6 Dec 2018 03:51:45 -0500 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by fmsmga103.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 06 Dec 2018 00:51:43 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.56,321,1539673200"; d="scan'208";a="301504932" Received: from irsmsx103.ger.corp.intel.com ([163.33.3.157]) by fmsmga005.fm.intel.com with ESMTP; 06 Dec 2018 00:51:41 -0800 Received: from irsmsx101.ger.corp.intel.com ([169.254.1.237]) by IRSMSX103.ger.corp.intel.com ([169.254.3.253]) with mapi id 14.03.0415.000; Thu, 6 Dec 2018 08:51:36 +0000 From: "Sakkinen, Jarkko" To: "tglx@linutronix.de" , "Schofield, Alison" , "dhowells@redhat.com" CC: "kirill.shutemov@linux.intel.com" , "peterz@infradead.org" , "jmorris@namei.org" , "Huang, Kai" , "keyrings@vger.kernel.org" , "linux-mm@kvack.org" , "linux-security-module@vger.kernel.org" , "Williams, Dan J" , "x86@kernel.org" , "hpa@zytor.com" , "mingo@redhat.com" , "luto@kernel.org" , "bp@alien8.de" , "Hansen, Dave" , "Nakajima, Jun" Subject: Re: [RFC v2 10/13] keys/mktme: Add the MKTME Key Service type for memory encryption Thread-Topic: [RFC v2 10/13] keys/mktme: Add the MKTME Key Service type for memory encryption Thread-Index: AQHUi6Q5JnWIrpZPbkiPRmUuwjKRWKVxanuA Date: Thu, 6 Dec 2018 08:51:36 +0000 Message-ID: References: <42d44fb5ddbbf7241a2494fc688e274ade641965.1543903910.git.alison.schofield@intel.com> In-Reply-To: <42d44fb5ddbbf7241a2494fc688e274ade641965.1543903910.git.alison.schofield@intel.com> Accept-Language: fi-FI, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.254.207.188] Content-Type: text/plain; charset="utf-8" Content-ID: <71ECDC03E4DA584D8F3E6C8AD2939330@intel.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 Sender: owner-linux-security-module@vger.kernel.org Precedence: bulk List-ID: T24gTW9uLCAyMDE4LTEyLTAzIGF0IDIzOjM5IC0wODAwLCBBbGlzb24gU2Nob2ZpZWxkIHdyb3Rl Og0KPiBNS1RNRSAoTXVsdGktS2V5IFRvdGFsIE1lbW9yeSBFbmNyeXB0aW9uKSBpcyBhIHRlY2hu b2xvZ3kgdGhhdCBhbGxvd3MNCj4gdHJhbnNwYXJlbnQgbWVtb3J5IGVuY3J5cHRpb24gaW4gdXBj b21pbmcgSW50ZWwgcGxhdGZvcm1zLiBNS1RNRSB3aWxsDQo+IHN1cHBvcnQgbXVsaXRwbGUgZW5j cnlwdGlvbiBkb21haW5zLCBlYWNoIGhhdmluZyB0aGVpciBvd24ga2V5LiBUaGUgbWFpbg0KPiB1 c2UgY2FzZSBmb3IgdGhlIGZlYXR1cmUgaXMgdmlydHVhbCBtYWNoaW5lIGlzb2xhdGlvbi4gVGhl IEFQSSBuZWVkcyB0aGUNCj4gZmxleGliaWxpdHkgdG8gd29yayBmb3IgYSB3aWRlIHJhbmdlIG9m IHVzZXMuDQoNClNvbWUsIG1heWJlIGJydXRhbCwgaG9uZXN0eSAoYXBvbG9naWVzKS4uLg0KDQpI YXZlIG5ldmVyIHJlYWxseSBnb3QgdGhlIGdyaXAgd2h5IGVpdGhlciBTTUUgb3IgVE1FIHdvdWxk IG1ha2UNCmlzb2xhdGlvbiBhbnkgYmV0dGVyLiBJZiB5b3UgY2FuIGJyZWFrIGludG8gaHlwZXJ2 aXNvciwgeW91J2xsDQpoYXZlIHRoZXNlIHRvb2xzIGF2YWlsYWJlOg0KDQoxLiBSZWFkIHBhZ2Ug KGluIGVuY3J5cHRlZCBmb3JtKS4NCjIuIFdyaXRlIHBhZ2UgKGZvciBleGFtcGxlIHJlcGxheSBh cyBwYWdlcyBhcmUgbm90IHZlcnNpb25lZCkuDQoNCndpdGggYWxsIHRoZSBzaWRlLWNoYW5uZWwg cG9zc2liaWxpdGllcyBvZiBjb3Vyc2Ugc2luY2UgeW91IGNhbg0KY29udHJvbCB0aGUgVk1zIChp biB3aGljaCBjb3JlIHRoZXkgZXhlY3V0ZSBldGMuKS4NCg0KSSd2ZSBzZWVuIG5vdyBTTUUgcHJl c2VudGF0aW9uIHRocmVlIHRpbWVzIGFuZCBpdCBhbHdheXMgbGVhdmVzDQptZSBhbiBlbXB0eSBm ZWVsaW5nLiBUaGlzIGZlZWxzIHRoZSBzYW1lIHNhbWUuDQoNCj4gVGhlIE1LVE1FIGtleSBzZXJ2 aWNlIHR5cGUgbWFuYWdlcyB0aGUgYWRkaXRpb24gYW5kIHJlbW92YWwgb2YgdGhlIG1lbW9yeQ0K PiBlbmNyeXB0aW9uIGtleXMuIEl0IG1hcHMgVXNlcnNwYWNlIEtleXMgdG8gaGFyZHdhcmUgS2V5 SURzLiBJdCBwcm9ncmFtcw0KPiB0aGUgaGFyZHdhcmUgd2l0aCB0aGUgdXNlciByZXF1ZXN0ZWQg ZW5jcnlwdGlvbiBvcHRpb25zLg0KPiANCj4gVGhlIG9ubHkgc3VwcG9ydGVkIGVuY3J5cHRpb24g YWxnb3JpdGhtIGlzIEFFUy1YVFMgMTI4Lg0KPiANCj4gVGhlIE1LVE1FIGtleSBzZXJ2aWNlIGlz IGhhbGYgb2YgdGhlIE1LVE1FIEFQSSBsZXZlbCBzb2x1dGlvbi4gSXQgcGFpcnMNCj4gd2l0aCBh IG5ldyBtZW1vcnkgZW5jcnlwdGlvbiBzeXN0ZW0gY2FsbDogZW5jcnlwdF9tcHJvdGVjdCgpIHRo YXQgdXNlcw0KPiB0aGUga2V5cyB0byBlbmNyeXB0IG1lbW9yeS4NCj4gDQo+IFNlZSBEb2N1bWVu dGF0aW9uL3g4Ni9ta3RtZS9ta3RtZS5yc3QNCj4gDQo+IENoYW5nZS1JZDogSWRkYTRhZjJiZWFi YjczOWM3NzcxOTg5N2FmZmZmMTgzZWU5ZmE3MTYNCj4gU2lnbmVkLW9mZi1ieTogQWxpc29uIFNj aG9maWVsZCA8YWxpc29uLnNjaG9maWVsZEBpbnRlbC5jb20+DQo+IFNpZ25lZC1vZmYtYnk6IEtp cmlsbCBBLiBTaHV0ZW1vdiA8a2lyaWxsLnNodXRlbW92QGxpbnV4LmludGVsLmNvbT4NCj4gLS0t DQo+ICBhcmNoL3g4Ni9LY29uZmlnICAgICAgICAgICB8ICAgMSArDQo+ICBpbmNsdWRlL2tleXMv bWt0bWUtdHlwZS5oICB8ICA0MSArKysrKysNCj4gIHNlY3VyaXR5L2tleXMvS2NvbmZpZyAgICAg IHwgIDExICsrDQo+ICBzZWN1cml0eS9rZXlzL01ha2VmaWxlICAgICB8ICAgMSArDQo+ICBzZWN1 cml0eS9rZXlzL21rdG1lX2tleXMuYyB8IDMzOQ0KPiArKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysNCj4gIDUgZmlsZXMgY2hhbmdlZCwgMzkzIGluc2VydGlvbnMo KykNCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL2tleXMvbWt0bWUtdHlwZS5oDQo+ICBj cmVhdGUgbW9kZSAxMDA2NDQgc2VjdXJpdHkva2V5cy9ta3RtZV9rZXlzLmMNCj4gDQo+IGRpZmYg LS1naXQgYS9hcmNoL3g4Ni9LY29uZmlnIGIvYXJjaC94ODYvS2NvbmZpZw0KPiBpbmRleCA3YWM3 OGUyODU2YzcuLmMyZTNiYjVhZjA3NyAxMDA2NDQNCj4gLS0tIGEvYXJjaC94ODYvS2NvbmZpZw0K PiArKysgYi9hcmNoL3g4Ni9LY29uZmlnDQo+IEBAIC0xNTMxLDYgKzE1MzEsNyBAQCBjb25maWcg WDg2X0lOVEVMX01LVE1FDQo+ICAJYm9vbCAiSW50ZWwgTXVsdGktS2V5IFRvdGFsIE1lbW9yeSBF bmNyeXB0aW9uIg0KPiAgCXNlbGVjdCBEWU5BTUlDX1BIWVNJQ0FMX01BU0sNCj4gIAlzZWxlY3Qg UEFHRV9FWFRFTlNJT04NCj4gKwlzZWxlY3QgTUtUTUVfS0VZUw0KPiAgCWRlcGVuZHMgb24gWDg2 XzY0ICYmIENQVV9TVVBfSU5URUwNCj4gIAktLS1oZWxwLS0tDQo+ICAJICBTYXkgeWVzIHRvIGVu YWJsZSBzdXBwb3J0IGZvciBNdWx0aS1LZXkgVG90YWwgTWVtb3J5IEVuY3J5cHRpb24uDQo+IGRp ZmYgLS1naXQgYS9pbmNsdWRlL2tleXMvbWt0bWUtdHlwZS5oIGIvaW5jbHVkZS9rZXlzL21rdG1l LXR5cGUuaA0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwMDAuLmM2 M2M2NTY4MDg3Zg0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL2luY2x1ZGUva2V5cy9ta3RtZS10 eXBlLmgNCj4gQEAgLTAsMCArMSw0MSBAQA0KPiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6 IEdQTC0yLjAgKi8NCj4gKw0KPiArLyogS2V5IHNlcnZpY2UgZm9yIE11bHRpLUtFWSBUb3RhbCBN ZW1vcnkgRW5jcnlwdGlvbiAqLw0KPiArDQo+ICsjaWZuZGVmIF9LRVlTX01LVE1FX1RZUEVfSA0K PiArI2RlZmluZSBfS0VZU19NS1RNRV9UWVBFX0gNCj4gKw0KPiArI2luY2x1ZGUgPGxpbnV4L2tl eS5oPg0KPiArDQo+ICsvKg0KPiArICogVGhlIEFFUy1YVFMgMTI4IGVuY3J5cHRpb24gYWxnb3Jp dGhtIHJlcXVpcmVzIDEyOCBiaXRzIGZvciBlYWNoDQo+ICsgKiB1c2VyIHN1cHBsaWVkIGRhdGEg a2V5IGFuZCB0d2VhayBrZXkuDQo+ICsgKi8NCj4gKyNkZWZpbmUgTUtUTUVfQUVTX1hUU19TSVpF CTE2CS8qIDE2IGJ5dGVzLCAxMjggYml0cyAqLw0KPiArDQo+ICtlbnVtIG1rdG1lX2FsZyB7DQo+ ICsJTUtUTUVfQUxHX0FFU19YVFNfMTI4LA0KPiArfTsNCj4gKw0KPiArY29uc3QgY2hhciAqY29u c3QgbWt0bWVfYWxnX25hbWVzW10gPSB7DQo+ICsJW01LVE1FX0FMR19BRVNfWFRTXzEyOF0JPSAi YWVzLXh0cy0xMjgiLA0KPiArfTsNCj4gKw0KPiArZW51bSBta3RtZV90eXBlIHsNCj4gKwlNS1RN RV9UWVBFX0VSUk9SID0gLTEsDQo+ICsJTUtUTUVfVFlQRV9VU0VSLA0KPiArCU1LVE1FX1RZUEVf Q1BVLA0KPiArCU1LVE1FX1RZUEVfQ0xFQVIsDQo+ICsJTUtUTUVfVFlQRV9OT19FTkNSWVBULA0K PiArfTsNCj4gKw0KPiArY29uc3QgY2hhciAqY29uc3QgbWt0bWVfdHlwZV9uYW1lc1tdID0gew0K PiArCVtNS1RNRV9UWVBFX1VTRVJdCT0gInVzZXIiLA0KPiArCVtNS1RNRV9UWVBFX0NQVV0JPSAi Y3B1IiwNCj4gKwlbTUtUTUVfVFlQRV9DTEVBUl0JPSAiY2xlYXIiLA0KPiArCVtNS1RNRV9UWVBF X05PX0VOQ1JZUFRdCT0gIm5vLWVuY3J5cHQiLA0KPiArfTsNCj4gKw0KPiArZXh0ZXJuIHN0cnVj dCBrZXlfdHlwZSBrZXlfdHlwZV9ta3RtZTsNCj4gKw0KPiArI2VuZGlmIC8qIF9LRVlTX01LVE1F X1RZUEVfSCAqLw0KPiBkaWZmIC0tZ2l0IGEvc2VjdXJpdHkva2V5cy9LY29uZmlnIGIvc2VjdXJp dHkva2V5cy9LY29uZmlnDQo+IGluZGV4IDY0NjJlNjY1NGNjZi4uYzM2OTcyMTEzZTY3IDEwMDY0 NA0KPiAtLS0gYS9zZWN1cml0eS9rZXlzL0tjb25maWcNCj4gKysrIGIvc2VjdXJpdHkva2V5cy9L Y29uZmlnDQo+IEBAIC0xMDEsMyArMTAxLDE0IEBAIGNvbmZpZyBLRVlfREhfT1BFUkFUSU9OUw0K PiAgCSBpbiB0aGUga2VybmVsLg0KPiAgDQo+ICAJIElmIHlvdSBhcmUgdW5zdXJlIGFzIHRvIHdo ZXRoZXIgdGhpcyBpcyByZXF1aXJlZCwgYW5zd2VyIE4uDQo+ICsNCj4gK2NvbmZpZyBNS1RNRV9L RVlTDQo+ICsJYm9vbCAiTXVsdGktS2V5IFRvdGFsIE1lbW9yeSBFbmNyeXB0aW9uIEtleXMiDQo+ ICsJZGVwZW5kcyBvbiBLRVlTICYmIFg4Nl9JTlRFTF9NS1RNRQ0KPiArCWhlbHANCj4gKwkgIFRo aXMgb3B0aW9uIHByb3ZpZGVzIHN1cHBvcnQgZm9yIE11bHRpLUtleSBUb3RhbCBNZW1vcnkNCj4g KwkgIEVuY3J5cHRpb24gKE1LVE1FKSBvbiBJbnRlbCBwbGF0Zm9ybXMgb2ZmZXJpbmcgdGhlIGZl YXR1cmUuDQo+ICsJICBNS1RNRSBhbGxvd3MgdXNlcnNwYWNlIHRvIG1hbmFnZSB0aGUgaGFyZHdh cmUgZW5jcnlwdGlvbg0KPiArCSAga2V5cyB0aHJvdWdoIHRoZSBrZXJuZWwga2V5IHNlcnZpY2Vz Lg0KPiArDQo+ICsJICBJZiB5b3UgYXJlIHVuc3VyZSBhcyB0byB3aGV0aGVyIHRoaXMgaXMgcmVx dWlyZWQsIGFuc3dlciBOLg0KPiBkaWZmIC0tZ2l0IGEvc2VjdXJpdHkva2V5cy9NYWtlZmlsZSBi L3NlY3VyaXR5L2tleXMvTWFrZWZpbGUNCj4gaW5kZXggOWNlZjU0MDY0ZjYwLi45NGM4NGYxMGE4 NTcgMTAwNjQ0DQo+IC0tLSBhL3NlY3VyaXR5L2tleXMvTWFrZWZpbGUNCj4gKysrIGIvc2VjdXJp dHkva2V5cy9NYWtlZmlsZQ0KPiBAQCAtMzAsMyArMzAsNCBAQCBvYmotJChDT05GSUdfQVNZTU1F VFJJQ19LRVlfVFlQRSkgKz0ga2V5Y3RsX3BrZXkubw0KPiAgb2JqLSQoQ09ORklHX0JJR19LRVlT KSArPSBiaWdfa2V5Lm8NCj4gIG9iai0kKENPTkZJR19UUlVTVEVEX0tFWVMpICs9IHRydXN0ZWQu bw0KPiAgb2JqLSQoQ09ORklHX0VOQ1JZUFRFRF9LRVlTKSArPSBlbmNyeXB0ZWQta2V5cy8NCj4g K29iai0kKENPTkZJR19NS1RNRV9LRVlTKSArPSBta3RtZV9rZXlzLm8NCj4gZGlmZiAtLWdpdCBh L3NlY3VyaXR5L2tleXMvbWt0bWVfa2V5cy5jIGIvc2VjdXJpdHkva2V5cy9ta3RtZV9rZXlzLmMN Cj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMDAwLi5lNjE1ZWI1OGU2 MDANCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9zZWN1cml0eS9rZXlzL21rdG1lX2tleXMuYw0K PiBAQCAtMCwwICsxLDMzOSBAQA0KPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0z LjANCj4gKw0KPiArLyogRG9jdW1lbnRhdGlvbi94ODYvbWt0bWUvbWt0bWVfa2V5cy5yc3QgKi8N Cj4gKw0KPiArI2luY2x1ZGUgPGxpbnV4L2NyZWQuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9jcHUu aD4NCj4gKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+ DQo+ICsjaW5jbHVkZSA8bGludXgva2V5Lmg+DQo+ICsjaW5jbHVkZSA8bGludXgva2V5LXR5cGUu aD4NCj4gKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+DQo+ICsjaW5jbHVkZSA8bGludXgvcGFyc2Vy Lmg+DQo+ICsjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvc2xh Yi5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPg0KPiArI2luY2x1ZGUgPGFzbS9pbnRl bF9wY29uZmlnLmg+DQo+ICsjaW5jbHVkZSA8YXNtL21rdG1lLmg+DQo+ICsjaW5jbHVkZSA8a2V5 cy9ta3RtZS10eXBlLmg+DQo+ICsjaW5jbHVkZSA8a2V5cy91c2VyLXR5cGUuaD4NCj4gKw0KPiAr I2luY2x1ZGUgImludGVybmFsLmgiDQo+ICsNCj4gK3N0cnVjdCBrbWVtX2NhY2hlICpta3RtZV9w cm9nX2NhY2hlOwkvKiBIYXJkd2FyZSBwcm9ncmFtbWluZyBjYWNoZSAqLw0KPiArDQo+ICtzdGF0 aWMgY29uc3QgY2hhciAqIGNvbnN0IG1rdG1lX3Byb2dyYW1fZXJyW10gPSB7DQo+ICsJIktleUlE IHdhcyBzdWNjZXNzZnVsbHkgcHJvZ3JhbW1lZCIsCS8qIDAgKi8NCj4gKwkiSW52YWxpZCBLZXlJ RCBwcm9ncmFtbWluZyBjb21tYW5kIiwJLyogMSAqLw0KPiArCSJJbnN1ZmZpY2llbnQgZW50cm9w eSIsCQkJLyogMiAqLw0KPiArCSJLZXlJRCBub3QgdmFsaWQiLAkJCS8qIDMgKi8NCj4gKwkiSW52 YWxpZCBlbmNyeXB0aW9uIGFsZ29yaXRobSBjaG9zZW4iLAkvKiA0ICovDQo+ICsJIkZhaWx1cmUg dG8gYWNjZXNzIGtleSB0YWJsZSIsCQkvKiA1ICovDQo+ICt9Ow0KPiArDQo+ICtlbnVtIG1rdG1l X29wdF9pZCB7DQo+ICsJT1BUX0VSUk9SID0gLTEsDQo+ICsJT1BUX1RZUEUsDQo+ICsJT1BUX0tF WSwNCj4gKwlPUFRfVFdFQUssDQo+ICsJT1BUX0FMR09SSVRITSwNCj4gK307DQo+ICsNCj4gK3N0 YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IG1rdG1lX3Rva2VuID0gew0KPiArCXtPUFRfVFlQRSwg InR5cGU9JXMifSwNCj4gKwl7T1BUX0tFWSwgImtleT0lcyJ9LA0KPiArCXtPUFRfVFdFQUssICJ0 d2Vhaz0lcyJ9LA0KPiArCXtPUFRfQUxHT1JJVEhNLCAiYWxnb3JpdGhtPSVzIn0sDQo+ICsJe09Q VF9FUlJPUiwgTlVMTH0NCj4gK307DQo+ICsNCj4gK3N0cnVjdCBta3RtZV9wYXlsb2FkIHsNCj4g Kwl1MzIJCWtleWlkX2N0cmw7CS8qIENvbW1hbmQgJiBFbmNyeXB0aW9uIEFsZ29yaXRobSAqLw0K PiArCXU4CQlkYXRhX2tleVtNS1RNRV9BRVNfWFRTX1NJWkVdOw0KPiArCXU4CQl0d2Vha19rZXlb TUtUTUVfQUVTX1hUU19TSVpFXTsNCj4gK307DQo+ICsNCj4gKy8qIEtleSBTZXJ2aWNlIE1ldGhv ZCBjYWxsZWQgd2hlbiBLZXkgaXMgZ2FyYmFnZSBjb2xsZWN0ZWQuICovDQo+ICtzdGF0aWMgdm9p ZCBta3RtZV9kZXN0cm95X2tleShzdHJ1Y3Qga2V5ICprZXkpDQo+ICt7DQo+ICsJa2V5X3B1dF9l bmNyeXB0X3JlZihta3RtZV9tYXBfa2V5aWRfZnJvbV9rZXkoa2V5KSk7DQo+ICt9DQo+ICsNCj4g Ky8qIENvcHkgdGhlIHBheWxvYWQgdG8gdGhlIEhXIHByb2dyYW1taW5nIHN0cnVjdHVyZSBhbmQg cHJvZ3JhbSB0aGlzIEtleUlEICovDQo+ICtzdGF0aWMgaW50IG1rdG1lX3Byb2dyYW1fa2V5aWQo aW50IGtleWlkLCBzdHJ1Y3QgbWt0bWVfcGF5bG9hZCAqcGF5bG9hZCkNCj4gK3sNCj4gKwlzdHJ1 Y3QgbWt0bWVfa2V5X3Byb2dyYW0gKmtwcm9nID0gTlVMTDsNCj4gKwl1OCBrZXJuX2VudHJvcHlb TUtUTUVfQUVTX1hUU19TSVpFXTsNCj4gKwlpbnQgaSwgcmV0Ow0KPiArDQo+ICsJa3Byb2cgPSBr bWVtX2NhY2hlX3phbGxvYyhta3RtZV9wcm9nX2NhY2hlLCBHRlBfS0VSTkVMKTsNCj4gKwlpZiAo IWtwcm9nKQ0KPiArCQlyZXR1cm4gLUVOT01FTTsNCj4gKw0KPiArCS8qIEhhcmR3YXJlIHByb2dy YW1taW5nIHJlcXVpcmVzIGNhY2hlZCBhbGlnbmVkIHN0cnVjdCAqLw0KPiArCWtwcm9nLT5rZXlp ZCA9IGtleWlkOw0KPiArCWtwcm9nLT5rZXlpZF9jdHJsID0gcGF5bG9hZC0+a2V5aWRfY3RybDsN Cj4gKwltZW1jcHkoa3Byb2ctPmtleV9maWVsZF8xLCBwYXlsb2FkLT5kYXRhX2tleSwgTUtUTUVf QUVTX1hUU19TSVpFKTsNCj4gKwltZW1jcHkoa3Byb2ctPmtleV9maWVsZF8yLCBwYXlsb2FkLT50 d2Vha19rZXksIE1LVE1FX0FFU19YVFNfU0laRSk7DQo+ICsNCj4gKwkvKiBTdHJlbmd0aGVuIHRo ZSBlbnRyb3B5IGZpZWxkcyBmb3IgQ1BVIGdlbmVyYXRlZCBrZXlzICovDQo+ICsJaWYgKChwYXls b2FkLT5rZXlpZF9jdHJsICYgMHhmZikgPT0gTUtUTUVfS0VZSURfU0VUX0tFWV9SQU5ET00pIHsN Cj4gKwkJZ2V0X3JhbmRvbV9ieXRlcygma2Vybl9lbnRyb3B5LCBzaXplb2Yoa2Vybl9lbnRyb3B5 KSk7DQo+ICsJCWZvciAoaSA9IDA7IGkgPCAoTUtUTUVfQUVTX1hUU19TSVpFKTsgaSsrKSB7DQo+ ICsJCQlrcHJvZy0+a2V5X2ZpZWxkXzFbaV0gXj0ga2Vybl9lbnRyb3B5W2ldOw0KPiArCQkJa3By b2ctPmtleV9maWVsZF8yW2ldIF49IGtlcm5fZW50cm9weVtpXTsNCj4gKwkJfQ0KPiArCX0NCj4g KwlyZXQgPSBta3RtZV9rZXlfcHJvZ3JhbShrcHJvZyk7DQo+ICsJa21lbV9jYWNoZV9mcmVlKG1r dG1lX3Byb2dfY2FjaGUsIGtwcm9nKTsNCj4gKwlyZXR1cm4gcmV0Ow0KPiArfQ0KPiArDQo+ICsv KiBLZXkgU2VydmljZSBNZXRob2QgdG8gdXBkYXRlIGFuIGV4aXN0aW5nIGtleS4gKi8NCj4gK3N0 YXRpYyBpbnQgbWt0bWVfdXBkYXRlX2tleShzdHJ1Y3Qga2V5ICprZXksDQo+ICsJCQkgICAgc3Ry dWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAqcHJlcCkNCj4gK3sNCj4gKwlzdHJ1Y3QgbWt0bWVf cGF5bG9hZCAqcGF5bG9hZCA9IHByZXAtPnBheWxvYWQuZGF0YVswXTsNCj4gKwlpbnQga2V5aWQs IHJlZl9jb3VudDsNCj4gKwlpbnQgcmV0Ow0KPiArDQo+ICsJbWt0bWVfbWFwX2xvY2soKTsNCj4g KwlrZXlpZCA9IG1rdG1lX21hcF9rZXlpZF9mcm9tX2tleShrZXkpOw0KPiArCWlmIChrZXlpZCA8 PSAwKQ0KPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gKwkvKg0KPiArCSAqIHJlZl9jb3VudCB3aWxs IGJlIGF0IGxlYXN0IG9uZSB3aGVuIHdlIGdldCBoZXJlIGJlY2F1c2UgdGhlDQo+ICsJICoga2V5 IGFscmVhZHkgZXhpc3RzLiBJZiByZWZfY291bnQgaXMgbm90ID4gMSwgaXQgaXMgc2FmZSB0bw0K PiArCSAqIHVwZGF0ZSB0aGUga2V5IHdoaWxlIGhvbGRpbmcgdGhlIG1rdG1lX21hcF9sb2NrLg0K PiArCSAqLw0KPiArCXJlZl9jb3VudCA9IG1rdG1lX3JlYWRfZW5jcnlwdF9yZWYoa2V5aWQpOw0K PiArCWlmIChyZWZfY291bnQgPiAxKSB7DQo+ICsJCXByX2RlYnVnKCJta3RtZSBub3QgdXBkYXRp bmcga2V5aWRbJWRdIGVuY3J5cHRfY291bnRbJWRdXG4iLA0KPiArCQkJIGtleWlkLCByZWZfY291 bnQpOw0KPiArCQlyZXR1cm4gLUVCVVNZOw0KPiArCX0NCj4gKwlyZXQgPSBta3RtZV9wcm9ncmFt X2tleWlkKGtleWlkLCBwYXlsb2FkKTsNCj4gKwlpZiAocmV0ICE9IE1LVE1FX1BST0dfU1VDQ0VT Uykgew0KPiArCQlwcl9kZWJ1ZygiJXM6ICVzXG4iLCBfX2Z1bmNfXywgbWt0bWVfcHJvZ3JhbV9l cnJbcmV0XSk7DQo+ICsJCXJldCA9IC1FTk9LRVk7DQo+ICsJfQ0KPiArCW1rdG1lX21hcF91bmxv Y2soKTsNCj4gKwlyZXR1cm4gcmV0Ow0KPiArfQ0KPiArDQo+ICsvKiBLZXkgU2VydmljZSBNZXRo b2QgdG8gY3JlYXRlIGEgbmV3IGtleS4gUGF5bG9hZCBpcyBwcmVwYXJzZWQuICovDQo+ICtpbnQg bWt0bWVfaW5zdGFudGlhdGVfa2V5KHN0cnVjdCBrZXkgKmtleSwgc3RydWN0IGtleV9wcmVwYXJz ZWRfcGF5bG9hZA0KPiAqcHJlcCkNCj4gK3sNCj4gKwlzdHJ1Y3QgbWt0bWVfcGF5bG9hZCAqcGF5 bG9hZCA9IHByZXAtPnBheWxvYWQuZGF0YVswXTsNCj4gKwlpbnQga2V5aWQsIHJldDsNCj4gKw0K PiArCW1rdG1lX21hcF9sb2NrKCk7DQo+ICsJa2V5aWQgPSBta3RtZV9tYXBfZ2V0X2ZyZWVfa2V5 aWQoKTsNCj4gKwlpZiAoa2V5aWQgPT0gMCkgew0KPiArCQlyZXQgPSAtRU5PS0VZOw0KPiArCQln b3RvIG91dDsNCj4gKwl9DQo+ICsJcmV0ID0gbWt0bWVfcHJvZ3JhbV9rZXlpZChrZXlpZCwgcGF5 bG9hZCk7DQo+ICsJaWYgKHJldCAhPSBNS1RNRV9QUk9HX1NVQ0NFU1MpIHsNCj4gKwkJcHJfZGVi dWcoIiVzOiAlc1xuIiwgX19mdW5jX18sIG1rdG1lX3Byb2dyYW1fZXJyW3JldF0pOw0KPiArCQly ZXQgPSAtRU5PS0VZOw0KPiArCQlnb3RvIG91dDsNCj4gKwl9DQo+ICsJbWt0bWVfbWFwX3NldF9r ZXlpZChrZXlpZCwga2V5KTsNCj4gKwlrZXlfZ2V0X2VuY3J5cHRfcmVmKGtleWlkKTsNCj4gK291 dDoNCj4gKwlta3RtZV9tYXBfdW5sb2NrKCk7DQo+ICsJcmV0dXJuIHJldDsNCj4gK30NCj4gKw0K PiArLyogVmVyaWZ5IHRoZSB1c2VyIHByb3ZpZGVkIHRoZSBuZWVkZWQgYXJndW1lbnRzIGZvciB0 aGUgVFlQRSBvZiBLZXkgKi8NCj4gK3N0YXRpYyBpbnQgbWt0bWVfY2hlY2tfb3B0aW9ucyhzdHJ1 Y3QgbWt0bWVfcGF5bG9hZCAqcGF5bG9hZCwNCj4gKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIHRv a2VuX21hc2ssIGVudW0gbWt0bWVfdHlwZSB0eXBlKQ0KPiArew0KPiArCWlmICghdG9rZW5fbWFz aykNCj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ICsNCj4gKwlzd2l0Y2ggKHR5cGUpIHsNCj4gKwlj YXNlIE1LVE1FX1RZUEVfVVNFUjoNCj4gKwkJaWYgKHRlc3RfYml0KE9QVF9BTEdPUklUSE0sICZ0 b2tlbl9tYXNrKSkNCj4gKwkJCXBheWxvYWQtPmtleWlkX2N0cmwgfD0gTUtUTUVfQUVTX1hUU18x Mjg7DQo+ICsJCWVsc2UNCj4gKwkJCXJldHVybiAtRUlOVkFMOw0KPiArDQo+ICsJCWlmICgodGVz dF9iaXQoT1BUX0tFWSwgJnRva2VuX21hc2spKSAmJg0KPiArCQkgICAgKHRlc3RfYml0KE9QVF9U V0VBSywgJnRva2VuX21hc2spKSkNCj4gKwkJCXBheWxvYWQtPmtleWlkX2N0cmwgfD0gTUtUTUVf S0VZSURfU0VUX0tFWV9ESVJFQ1Q7DQo+ICsJCWVsc2UNCj4gKwkJCXJldHVybiAtRUlOVkFMOw0K PiArCQlicmVhazsNCj4gKw0KPiArCWNhc2UgTUtUTUVfVFlQRV9DUFU6DQo+ICsJCWlmICh0ZXN0 X2JpdChPUFRfQUxHT1JJVEhNLCAmdG9rZW5fbWFzaykpDQo+ICsJCQlwYXlsb2FkLT5rZXlpZF9j dHJsIHw9IE1LVE1FX0FFU19YVFNfMTI4Ow0KPiArCQllbHNlDQo+ICsJCQlyZXR1cm4gLUVJTlZB TDsNCj4gKw0KPiArCQlwYXlsb2FkLT5rZXlpZF9jdHJsIHw9IE1LVE1FX0tFWUlEX1NFVF9LRVlf UkFORE9NOw0KPiArCQlicmVhazsNCj4gKw0KPiArCWNhc2UgTUtUTUVfVFlQRV9DTEVBUjoNCj4g KwkJcGF5bG9hZC0+a2V5aWRfY3RybCB8PSBNS1RNRV9LRVlJRF9DTEVBUl9LRVk7DQo+ICsJCWJy ZWFrOw0KPiArDQo+ICsJY2FzZSBNS1RNRV9UWVBFX05PX0VOQ1JZUFQ6DQo+ICsJCXBheWxvYWQt PmtleWlkX2N0cmwgfD0gTUtUTUVfS0VZSURfTk9fRU5DUllQVDsNCj4gKwkJYnJlYWs7DQo+ICsN Cj4gKwlkZWZhdWx0Og0KPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gKwl9DQo+ICsJcmV0dXJuIDA7 DQo+ICt9DQo+ICsNCj4gKy8qIFBhcnNlIHRoZSBvcHRpb25zIGFuZCBzdG9yZSB0aGUga2V5IHBy b2dyYW1taW5nIGRhdGEgaW4gdGhlIHBheWxvYWQuICovDQo+ICtzdGF0aWMgaW50IG1rdG1lX2dl dF9vcHRpb25zKGNoYXIgKm9wdGlvbnMsIHN0cnVjdCBta3RtZV9wYXlsb2FkICpwYXlsb2FkKQ0K PiArew0KPiArCWVudW0gbWt0bWVfdHlwZSB0eXBlID0gTUtUTUVfVFlQRV9FUlJPUjsNCj4gKwlz dWJzdHJpbmdfdCBhcmdzW01BWF9PUFRfQVJHU107DQo+ICsJdW5zaWduZWQgbG9uZyB0b2tlbl9t YXNrID0gMDsNCj4gKwljaGFyICpwID0gb3B0aW9uczsNCj4gKwlpbnQgcmV0LCB0b2tlbjsNCj4g Kw0KPiArCXdoaWxlICgocCA9IHN0cnNlcCgmb3B0aW9ucywgIiBcdCIpKSkgew0KPiArCQlpZiAo KnAgPT0gJ1wwJyB8fCAqcCA9PSAnICcgfHwgKnAgPT0gJ1x0JykNCj4gKwkJCWNvbnRpbnVlOw0K PiArCQl0b2tlbiA9IG1hdGNoX3Rva2VuKHAsIG1rdG1lX3Rva2VuLCBhcmdzKTsNCj4gKwkJaWYg KHRlc3RfYW5kX3NldF9iaXQodG9rZW4sICZ0b2tlbl9tYXNrKSkNCj4gKwkJCXJldHVybiAtRUlO VkFMOw0KPiArDQo+ICsJCXN3aXRjaCAodG9rZW4pIHsNCj4gKwkJY2FzZSBPUFRfS0VZOg0KPiAr CQkJcmV0ID0gaGV4MmJpbihwYXlsb2FkLT5kYXRhX2tleSwgYXJnc1swXS5mcm9tLA0KPiArCQkJ CSAgICAgIE1LVE1FX0FFU19YVFNfU0laRSk7DQo+ICsJCQlpZiAocmV0IDwgMCkNCj4gKwkJCQly ZXR1cm4gLUVJTlZBTDsNCj4gKwkJCWJyZWFrOw0KPiArDQo+ICsJCWNhc2UgT1BUX1RXRUFLOg0K PiArCQkJcmV0ID0gaGV4MmJpbihwYXlsb2FkLT50d2Vha19rZXksIGFyZ3NbMF0uZnJvbSwNCj4g KwkJCQkgICAgICBNS1RNRV9BRVNfWFRTX1NJWkUpOw0KPiArCQkJaWYgKHJldCA8IDApDQo+ICsJ CQkJcmV0dXJuIC1FSU5WQUw7DQo+ICsJCQlicmVhazsNCj4gKw0KPiArCQljYXNlIE9QVF9UWVBF Og0KPiArCQkJdHlwZSA9IG1hdGNoX3N0cmluZyhta3RtZV90eXBlX25hbWVzLA0KPiArCQkJCQkg ICAgQVJSQVlfU0laRShta3RtZV90eXBlX25hbWVzKSwNCj4gKwkJCQkJICAgIGFyZ3NbMF0uZnJv bSk7DQo+ICsJCQlpZiAodHlwZSA8IDApDQo+ICsJCQkJcmV0dXJuIC1FSU5WQUw7DQo+ICsJCQli cmVhazsNCj4gKw0KPiArCQljYXNlIE9QVF9BTEdPUklUSE06DQo+ICsJCQlyZXQgPSBtYXRjaF9z dHJpbmcobWt0bWVfYWxnX25hbWVzLA0KPiArCQkJCQkgICBBUlJBWV9TSVpFKG1rdG1lX2FsZ19u YW1lcyksDQo+ICsJCQkJCSAgIGFyZ3NbMF0uZnJvbSk7DQo+ICsJCQlpZiAocmV0IDwgMCkNCj4g KwkJCQlyZXR1cm4gLUVJTlZBTDsNCj4gKwkJCWJyZWFrOw0KPiArDQo+ICsJCWRlZmF1bHQ6DQo+ ICsJCQlyZXR1cm4gLUVJTlZBTDsNCj4gKwkJfQ0KPiArCX0NCj4gKwlyZXR1cm4gbWt0bWVfY2hl Y2tfb3B0aW9ucyhwYXlsb2FkLCB0b2tlbl9tYXNrLCB0eXBlKTsNCj4gK30NCj4gKw0KPiArdm9p ZCBta3RtZV9mcmVlX3ByZXBhcnNlZF9rZXkoc3RydWN0IGtleV9wcmVwYXJzZWRfcGF5bG9hZCAq cHJlcCkNCj4gK3sNCj4gKwlremZyZWUocHJlcC0+cGF5bG9hZC5kYXRhWzBdKTsNCj4gK30NCj4g Kw0KPiArLyoNCj4gKyAqIEtleSBTZXJ2aWNlIE1ldGhvZCB0byBwcmVwYXJzZSBhIHBheWxvYWQg YmVmb3JlIGEga2V5IGlzIGNyZWF0ZWQuDQo+ICsgKiBDaGVjayBwZXJtaXNzaW9ucyBhbmQgdGhl IG9wdGlvbnMuIExvYWQgdGhlIHByb3Bvc2VkIGtleSBmaWVsZA0KPiArICogZGF0YSBpbnRvIHRo ZSBwYXlsb2FkIGZvciB1c2UgYnkgaW5zdGFudGlhdGUgYW5kIHVwZGF0ZSBtZXRob2RzLg0KPiAr ICovDQo+ICtpbnQgbWt0bWVfcHJlcGFyc2Vfa2V5KHN0cnVjdCBrZXlfcHJlcGFyc2VkX3BheWxv YWQgKnByZXApDQo+ICt7DQo+ICsJc3RydWN0IG1rdG1lX3BheWxvYWQgKm1rdG1lX3BheWxvYWQ7 DQo+ICsJc2l6ZV90IGRhdGFsZW4gPSBwcmVwLT5kYXRhbGVuOw0KPiArCWNoYXIgKm9wdGlvbnM7 DQo+ICsJaW50IHJldDsNCj4gKw0KPiArCWlmICghY2FwYWJsZShDQVBfU1lTX1JFU09VUkNFKSAm JiAhY2FwYWJsZShDQVBfU1lTX0FETUlOKSkNCj4gKwkJcmV0dXJuIC1FQUNDRVM7DQo+ICsNCj4g KwlpZiAoZGF0YWxlbiA8PSAwIHx8IGRhdGFsZW4gPiAxMDI0IHx8ICFwcmVwLT5kYXRhKQ0KPiAr CQlyZXR1cm4gLUVJTlZBTDsNCj4gKw0KPiArCW9wdGlvbnMgPSBrbWVtZHVwKHByZXAtPmRhdGEs IGRhdGFsZW4gKyAxLCBHRlBfS0VSTkVMKTsNCj4gKwlpZiAoIW9wdGlvbnMpDQo+ICsJCXJldHVy biAtRU5PTUVNOw0KPiArDQo+ICsJb3B0aW9uc1tkYXRhbGVuXSA9ICdcMCc7DQo+ICsNCj4gKwlt a3RtZV9wYXlsb2FkID0ga3phbGxvYyhzaXplb2YoKm1rdG1lX3BheWxvYWQpLCBHRlBfS0VSTkVM KTsNCj4gKwlpZiAoIW1rdG1lX3BheWxvYWQpIHsNCj4gKwkJcmV0ID0gLUVOT01FTTsNCj4gKwkJ Z290byBvdXQ7DQo+ICsJfQ0KPiArCXJldCA9IG1rdG1lX2dldF9vcHRpb25zKG9wdGlvbnMsIG1r dG1lX3BheWxvYWQpOw0KPiArCWlmIChyZXQgPCAwKQ0KPiArCQlnb3RvIG91dDsNCj4gKw0KPiAr CXByZXAtPnF1b3RhbGVuID0gc2l6ZW9mKG1rdG1lX3BheWxvYWQpOw0KPiArCXByZXAtPnBheWxv YWQuZGF0YVswXSA9IG1rdG1lX3BheWxvYWQ7DQo+ICtvdXQ6DQo+ICsJa3pmcmVlKG9wdGlvbnMp Ow0KPiArCXJldHVybiByZXQ7DQo+ICt9DQo+ICsNCj4gK3N0cnVjdCBrZXlfdHlwZSBrZXlfdHlw ZV9ta3RtZSA9IHsNCj4gKwkubmFtZQkJPSAibWt0bWUiLA0KPiArCS5wcmVwYXJzZQk9IG1rdG1l X3ByZXBhcnNlX2tleSwNCj4gKwkuZnJlZV9wcmVwYXJzZQk9IG1rdG1lX2ZyZWVfcHJlcGFyc2Vk X2tleSwNCj4gKwkuaW5zdGFudGlhdGUJPSBta3RtZV9pbnN0YW50aWF0ZV9rZXksDQo+ICsJLnVw ZGF0ZQkJPSBta3RtZV91cGRhdGVfa2V5LA0KPiArCS5kZXNjcmliZQk9IHVzZXJfZGVzY3JpYmUs DQo+ICsJLmRlc3Ryb3kJPSBta3RtZV9kZXN0cm95X2tleSwNCj4gK307DQo+ICsNCj4gKy8qDQo+ ICsgKiBBbGxvY2F0ZSB0aGUgZ2xvYmFsIG1rdG1lX21hcCBzdHJ1Y3R1cmUgYmFzZWQgb24gdGhl IGF2YWlsYWJsZSBrZXlpZHMuDQo+ICsgKiBDcmVhdGUgYSBjYWNoZSBmb3IgdGhlIGhhcmR3YXJl IHN0cnVjdHVyZS4gSW5pdGlhbGl6ZSB0aGUgZW5jcnlwdF9jb3VudA0KPiArICogYXJyYXkgdG8g dHJhY2sgKiBWTUEncyBwZXIga2V5aWQuIE9uY2UgYWxsIHRoYXQgc3VjY2VlZHMsIHJlZ2lzdGVy IHRoZQ0KPiArICogJ21rdG1lJyBrZXkgdHlwZS4NCj4gKyAqLw0KPiArc3RhdGljIGludCBfX2lu aXQgaW5pdF9ta3RtZSh2b2lkKQ0KPiArew0KPiArCWludCByZXQ7DQo+ICsNCj4gKwkvKiBWZXJp Znkga2V5cyBhcmUgcHJlc2VudCAqLw0KPiArCWlmICghKG1rdG1lX25yX2tleWlkcyA+IDApKQ0K PiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gKw0KPiArCWlmICghbWt0bWVfbWFwX2FsbG9jKCkpDQo+ ICsJCXJldHVybiAtRU5PTUVNOw0KPiArDQo+ICsJbWt0bWVfcHJvZ19jYWNoZSA9IEtNRU1fQ0FD SEUobWt0bWVfa2V5X3Byb2dyYW0sIFNMQUJfUEFOSUMpOw0KPiArCWlmICghbWt0bWVfcHJvZ19j YWNoZSkNCj4gKwkJZ290byBmcmVlX21hcDsNCj4gKw0KPiArCWlmIChta3RtZV9hbGxvY19lbmNy eXB0X2FycmF5KCkgPCAwKQ0KPiArCQlnb3RvIGZyZWVfY2FjaGU7DQo+ICsNCj4gKwlyZXQgPSBy ZWdpc3Rlcl9rZXlfdHlwZSgma2V5X3R5cGVfbWt0bWUpOw0KPiArCWlmICghcmV0KQ0KPiArCQly ZXR1cm4gcmV0OwkJCS8qIFNVQ0NFU1MgKi8NCj4gKw0KPiArCW1rdG1lX2ZyZWVfZW5jcnlwdF9h cnJheSgpOw0KPiArZnJlZV9jYWNoZToNCj4gKwlrbWVtX2NhY2hlX2Rlc3Ryb3kobWt0bWVfcHJv Z19jYWNoZSk7DQo+ICtmcmVlX21hcDoNCg0KTWF5YmUgZXJyX2ZyZWVfY2FjaGUgYW5kIGVycl9t YXAgKG1vcmUgdGhhbiBjb3NtZXRpYyk/DQoNCj4gKwlta3RtZV9tYXBfZnJlZSgpOw0KPiArDQo+ ICsJcmV0dXJuIC1FTk9NRU07DQo+ICt9DQo+ICsNCj4gK2xhdGVfaW5pdGNhbGwoaW5pdF9ta3Rt ZSk7DQoNCkFzIGZvciBjb2RlIGNoYW5nZS4gT3ZlcmFsbHksIGl0IGxvb2tzIGdvb2QhIEJ1dCBi ZWZvcmUgdXNpbmcgdGltZQ0KZm9yIGRldGFpbGVkIHJldmlldyBvciB0ZXN0aW5nIChvbmNlIEkg Z2V0IGEgY2hhbmNlIHRvIGFjcXVpcmUNCnNvbWV0aGluZyB0byB0ZXN0IGl0KSBsZXRzIGdvIHRo cm91Z2ggdGhlIGRvY3VtZW50YXRpb24gZGlzY3Vzc2lvbi4NCkNsZWFybHkgdGhlcmUgaXMgYnVu Y2ggb2Ygc3R1ZmYgdGhhdCBjYW4gYmUgY3V0Li4uDQoNCi9KYXJra28NCg==