From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8058B1AA1FF; Wed, 30 Apr 2025 17:45:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746035146; cv=none; b=NI6FDDAfskkObhrABAJt6VStnT6u7oc01dSlckbR8/KKgsoV1NIoaInjcV89VdGvSoIVqwRA9QaO+5nawW66CtYQnDDYKIM7UrKexFcJRWRId+MVj+wJHwh520O/gAbnxNwOZkG9WLsd0vC1NzDMBZ7IPMaDwywyCg685ioXpHs= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746035146; c=relaxed/simple; bh=KRq3ObS+7bPSh5npZvFvh2C1vvjoanHB8ALoJ0Lw5oY=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=Du3c3FSuKyvh5v1i/hqNTxLmgiXx5XNJofJh3p/+eBOfoF803zZcf+ngoQo4f9r+m+wIDc06uX6FjXKDiEXXWVa6OM077xH0qHm+rc1Ohk61RgHzjpf/trk6U6Rq7wGopJDC8rwuqTgOMoS26CkWzz/zKB1su5fLdsENKWsXA04= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=b5Ki7Zeo; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="b5Ki7Zeo" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 7027EC4CEE7; Wed, 30 Apr 2025 17:45:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1746035146; bh=KRq3ObS+7bPSh5npZvFvh2C1vvjoanHB8ALoJ0Lw5oY=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=b5Ki7ZeoUb9ZN4LPaDEoM1o1bvfVz7fD1oztts7rOpVhwqg4oS5OvcmfJCGu3gxUH fT26UoXeSWagXlFQb3TkXpFnlFx9pI6CdXses/373TH68nkQ5m1XnkeCZyjTB3pjL8 hB2unDN1O+ZToSdOpBH6aVt6DnPXIiit23u0m97zhbqweH/oPbGvmEvxIZXP3/PGuI fXfOoMh+QT2xdYboklbx8EcmahcftGMdK+N5ysjtRDWRo5qH2CA9yak25NsdYdhKlS 5Unk+mvpoO/hy1QMjlUYCjybEmTkDQ2xbgxYdXD5WmCQ7eiojk/2fQ1VOdLNWLhrd4 FfCKW0EMC7VFg== Date: Wed, 30 Apr 2025 10:45:43 -0700 From: Eric Biggers To: Herbert Xu Cc: Linux Crypto Mailing List , linux-kernel@vger.kernel.org, linux-arch@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mips@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-riscv@lists.infradead.org, sparclinux@vger.kernel.org, linux-s390@vger.kernel.org, x86@kernel.org, Ard Biesheuvel , "Jason A . Donenfeld" , Linus Torvalds Subject: Re: [PATCH 00/12] crypto: sha256 - Use partial block API Message-ID: <20250430174543.GB1958@sol.localdomain> References: Precedence: bulk X-Mailing-List: linux-arch@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: [Added back Cc's that were dropped] On Wed, Apr 30, 2025 at 02:06:15PM +0800, Herbert Xu wrote: > This is based on > > https://patchwork.kernel.org/project/linux-crypto/list/?series=957785 I'm assuming that you mean that with your diff https://lore.kernel.org/r/aBGdiv17ztQnhAps@gondor.apana.org.au folded into my first patch, since otherwise your patch series doesn't apply. But even with that done, your patch series doesn't build: In file included from ./include/crypto/hash_info.h:12, from crypto/hash_info.c:9: ./include/crypto/sha2.h: In function ‘sha256_init’: ./include/crypto/sha2.h:101:32: error: ‘struct sha256_state’ has no member named ‘ctx’ 101 | sha256_block_init(&sctx->ctx); | ^~ > Rather than going through the lib/sha256 partial block handling, > use the native shash partial block API. Add two extra shash > algorithms to provide testing coverage for lib/sha256. > > Herbert Xu (12): > crypto: lib/sha256 - Restore lib_sha256 finup code > crypto: sha256 - Use the partial block API for generic > crypto: arm/sha256 - Add simd block function > crypto: arm64/sha256 - Add simd block function > crypto: mips/sha256 - Export block functions as GPL only > crypto: powerpc/sha256 - Export block functions as GPL only > crypto: riscv/sha256 - Add simd block function > crypto: s390/sha256 - Export block functions as GPL only > crypto: sparc/sha256 - Export block functions as GPL only > crypto: x86/sha256 - Add simd block function > crypto: lib/sha256 - Use generic block helper > crypto: sha256 - Use the partial block API > > arch/arm/lib/crypto/Kconfig | 1 + > arch/arm/lib/crypto/sha256-armv4.pl | 20 +-- > arch/arm/lib/crypto/sha256.c | 16 +-- > arch/arm64/crypto/sha512-glue.c | 6 +- > arch/arm64/lib/crypto/Kconfig | 1 + > arch/arm64/lib/crypto/sha2-armv8.pl | 2 +- > arch/arm64/lib/crypto/sha256.c | 16 +-- > .../mips/cavium-octeon/crypto/octeon-sha256.c | 4 +- > arch/powerpc/lib/crypto/sha256.c | 4 +- > arch/riscv/lib/crypto/Kconfig | 1 + > arch/riscv/lib/crypto/sha256.c | 17 ++- > arch/s390/lib/crypto/sha256.c | 4 +- > arch/sparc/lib/crypto/sha256.c | 4 +- > arch/x86/lib/crypto/Kconfig | 1 + > arch/x86/lib/crypto/sha256.c | 16 ++- > crypto/sha256.c | 134 +++++++++++------- > include/crypto/internal/sha2.h | 46 ++++++ > include/crypto/sha2.h | 14 +- > lib/crypto/Kconfig | 8 ++ > lib/crypto/sha256.c | 100 +++---------- > 20 files changed, 232 insertions(+), 183 deletions(-) The EXPORT_SYMBOL => EXPORT_SYMBOL_GPL changes are fine and should just be one patch. I was just trying to be consistent with lib/crypto/sha256.c which uses EXPORT_SYMBOL, but EXPORT_SYMBOL_GPL is fine too. Everything else in this series is harmful, IMO. I already covered why crypto_shash should simply use the library and not do anything special. As for your sha256_finup "optimization", it's an interesting idea, but unfortunately it slightly slows down the common case which is count % 64 < 56, due to the unnecessary copy to the stack and the following zeroization. In the uncommon case where count % 64 >= 56 you do get to pass nblocks=2 to sha256_blocks_*(), but ultimately SHA-256 is serialized block-by-block anyway, so it ends up being only slightly faster in that case, which again is the uncommon case. So while it's an interesting idea, it doesn't seem to actually be better. And the fact that that patch is also being used to submit unrelated, more dubious changes isn't very helpful, of course. - Eric 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 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 2DDA3C369D9 for ; Wed, 30 Apr 2025 17:47:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References: Message-ID:Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=4oOn3PE+4o9TLv/iR1IlMRcbwooB6INoPsRACRqTsbo=; b=V6YD1840u7kQ4U k9mou7HWxpY/GbI+AbA9fIZ6+jnp4nIEz0pDeU/oMIV7lQsU9gtCad0vYFiOnBHXZUyfxe18lPLKq SLrmqntMbJRecMOm3xnrHQDLV89ORfgv/hM0qbmwa/bcftYRKIWwYp3TcopzECAmSTGwHzzHOa7w+ knXuf4GIKfLosmjin6Jo7f3hbKDNOIvG2oz7fIVp9S8DaVklCBmw4NTAqyY5Syjam5GDmo/EebyWn tvRfSAG8sduvQpunbyekksP8geBwsEO1fXPDdhvvr46mq+0gLWmC21xYizrONR/eIhL6rkJJ6HDYq 5H9gynToN/wAWDDeDxuQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1uABX7-0000000DZxK-2XcW; Wed, 30 Apr 2025 17:47:45 +0000 Received: from tor.source.kernel.org ([172.105.4.254]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1uABVC-0000000DZnF-3gYB; Wed, 30 Apr 2025 17:45:46 +0000 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by tor.source.kernel.org (Postfix) with ESMTP id 39BE86842A; Wed, 30 Apr 2025 17:45:19 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 7027EC4CEE7; Wed, 30 Apr 2025 17:45:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1746035146; bh=KRq3ObS+7bPSh5npZvFvh2C1vvjoanHB8ALoJ0Lw5oY=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=b5Ki7ZeoUb9ZN4LPaDEoM1o1bvfVz7fD1oztts7rOpVhwqg4oS5OvcmfJCGu3gxUH fT26UoXeSWagXlFQb3TkXpFnlFx9pI6CdXses/373TH68nkQ5m1XnkeCZyjTB3pjL8 hB2unDN1O+ZToSdOpBH6aVt6DnPXIiit23u0m97zhbqweH/oPbGvmEvxIZXP3/PGuI fXfOoMh+QT2xdYboklbx8EcmahcftGMdK+N5ysjtRDWRo5qH2CA9yak25NsdYdhKlS 5Unk+mvpoO/hy1QMjlUYCjybEmTkDQ2xbgxYdXD5WmCQ7eiojk/2fQ1VOdLNWLhrd4 FfCKW0EMC7VFg== Date: Wed, 30 Apr 2025 10:45:43 -0700 From: Eric Biggers To: Herbert Xu Cc: Linux Crypto Mailing List , linux-kernel@vger.kernel.org, linux-arch@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mips@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-riscv@lists.infradead.org, sparclinux@vger.kernel.org, linux-s390@vger.kernel.org, x86@kernel.org, Ard Biesheuvel , "Jason A . Donenfeld" , Linus Torvalds Subject: Re: [PATCH 00/12] crypto: sha256 - Use partial block API Message-ID: <20250430174543.GB1958@sol.localdomain> References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org W0FkZGVkIGJhY2sgQ2MncyB0aGF0IHdlcmUgZHJvcHBlZF0KCk9uIFdlZCwgQXByIDMwLCAyMDI1 IGF0IDAyOjA2OjE1UE0gKzA4MDAsIEhlcmJlcnQgWHUgd3JvdGU6Cj4gVGhpcyBpcyBiYXNlZCBv bgo+IAo+IAlodHRwczovL3BhdGNod29yay5rZXJuZWwub3JnL3Byb2plY3QvbGludXgtY3J5cHRv L2xpc3QvP3Nlcmllcz05NTc3ODUKCkknbSBhc3N1bWluZyB0aGF0IHlvdSBtZWFuIHRoYXQgd2l0 aCB5b3VyIGRpZmYKaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvci9hQkdkaXYxN3p0UW5oQXBzQGdv bmRvci5hcGFuYS5vcmcuYXUgZm9sZGVkIGludG8gbXkKZmlyc3QgcGF0Y2gsIHNpbmNlIG90aGVy d2lzZSB5b3VyIHBhdGNoIHNlcmllcyBkb2Vzbid0IGFwcGx5LiAgQnV0IGV2ZW4gd2l0aAp0aGF0 IGRvbmUsIHlvdXIgcGF0Y2ggc2VyaWVzIGRvZXNuJ3QgYnVpbGQ6CgogICAgSW4gZmlsZSBpbmNs dWRlZCBmcm9tIC4vaW5jbHVkZS9jcnlwdG8vaGFzaF9pbmZvLmg6MTIsCiAgICAgICAgICAgICAg ICAgICAgIGZyb20gY3J5cHRvL2hhc2hfaW5mby5jOjk6CiAgICAuL2luY2x1ZGUvY3J5cHRvL3No YTIuaDogSW4gZnVuY3Rpb24g4oCYc2hhMjU2X2luaXTigJk6CiAgICAuL2luY2x1ZGUvY3J5cHRv L3NoYTIuaDoxMDE6MzI6IGVycm9yOiDigJhzdHJ1Y3Qgc2hhMjU2X3N0YXRl4oCZIGhhcyBubyBt ZW1iZXIgbmFtZWQg4oCYY3R44oCZCiAgICAgIDEwMSB8ICAgICAgICAgc2hhMjU2X2Jsb2NrX2lu aXQoJnNjdHgtPmN0eCk7CiAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBefgoKPiBSYXRoZXIgdGhhbiBnb2luZyB0aHJvdWdoIHRoZSBsaWIvc2hhMjU2IHBhcnRpYWwg YmxvY2sgaGFuZGxpbmcsCj4gdXNlIHRoZSBuYXRpdmUgc2hhc2ggcGFydGlhbCBibG9jayBBUEku ICBBZGQgdHdvIGV4dHJhIHNoYXNoCj4gYWxnb3JpdGhtcyB0byBwcm92aWRlIHRlc3RpbmcgY292 ZXJhZ2UgZm9yIGxpYi9zaGEyNTYuCj4gCj4gSGVyYmVydCBYdSAoMTIpOgo+ICAgY3J5cHRvOiBs aWIvc2hhMjU2IC0gUmVzdG9yZSBsaWJfc2hhMjU2IGZpbnVwIGNvZGUKPiAgIGNyeXB0bzogc2hh MjU2IC0gVXNlIHRoZSBwYXJ0aWFsIGJsb2NrIEFQSSBmb3IgZ2VuZXJpYwo+ICAgY3J5cHRvOiBh cm0vc2hhMjU2IC0gQWRkIHNpbWQgYmxvY2sgZnVuY3Rpb24KPiAgIGNyeXB0bzogYXJtNjQvc2hh MjU2IC0gQWRkIHNpbWQgYmxvY2sgZnVuY3Rpb24KPiAgIGNyeXB0bzogbWlwcy9zaGEyNTYgLSBF eHBvcnQgYmxvY2sgZnVuY3Rpb25zIGFzIEdQTCBvbmx5Cj4gICBjcnlwdG86IHBvd2VycGMvc2hh MjU2IC0gRXhwb3J0IGJsb2NrIGZ1bmN0aW9ucyBhcyBHUEwgb25seQo+ICAgY3J5cHRvOiByaXNj di9zaGEyNTYgLSBBZGQgc2ltZCBibG9jayBmdW5jdGlvbgo+ICAgY3J5cHRvOiBzMzkwL3NoYTI1 NiAtIEV4cG9ydCBibG9jayBmdW5jdGlvbnMgYXMgR1BMIG9ubHkKPiAgIGNyeXB0bzogc3BhcmMv c2hhMjU2IC0gRXhwb3J0IGJsb2NrIGZ1bmN0aW9ucyBhcyBHUEwgb25seQo+ICAgY3J5cHRvOiB4 ODYvc2hhMjU2IC0gQWRkIHNpbWQgYmxvY2sgZnVuY3Rpb24KPiAgIGNyeXB0bzogbGliL3NoYTI1 NiAtIFVzZSBnZW5lcmljIGJsb2NrIGhlbHBlcgo+ICAgY3J5cHRvOiBzaGEyNTYgLSBVc2UgdGhl IHBhcnRpYWwgYmxvY2sgQVBJCj4KPiAgYXJjaC9hcm0vbGliL2NyeXB0by9LY29uZmlnICAgICAg ICAgICAgICAgICAgIHwgICAxICsKPiAgYXJjaC9hcm0vbGliL2NyeXB0by9zaGEyNTYtYXJtdjQu cGwgICAgICAgICAgIHwgIDIwICstLQo+ICBhcmNoL2FybS9saWIvY3J5cHRvL3NoYTI1Ni5jICAg ICAgICAgICAgICAgICAgfCAgMTYgKy0tCj4gIGFyY2gvYXJtNjQvY3J5cHRvL3NoYTUxMi1nbHVl LmMgICAgICAgICAgICAgICB8ICAgNiArLQo+ICBhcmNoL2FybTY0L2xpYi9jcnlwdG8vS2NvbmZp ZyAgICAgICAgICAgICAgICAgfCAgIDEgKwo+ICBhcmNoL2FybTY0L2xpYi9jcnlwdG8vc2hhMi1h cm12OC5wbCAgICAgICAgICAgfCAgIDIgKy0KPiAgYXJjaC9hcm02NC9saWIvY3J5cHRvL3NoYTI1 Ni5jICAgICAgICAgICAgICAgIHwgIDE2ICstLQo+ICAuLi4vbWlwcy9jYXZpdW0tb2N0ZW9uL2Ny eXB0by9vY3Rlb24tc2hhMjU2LmMgfCAgIDQgKy0KPiAgYXJjaC9wb3dlcnBjL2xpYi9jcnlwdG8v c2hhMjU2LmMgICAgICAgICAgICAgIHwgICA0ICstCj4gIGFyY2gvcmlzY3YvbGliL2NyeXB0by9L Y29uZmlnICAgICAgICAgICAgICAgICB8ICAgMSArCj4gIGFyY2gvcmlzY3YvbGliL2NyeXB0by9z aGEyNTYuYyAgICAgICAgICAgICAgICB8ICAxNyArKy0KPiAgYXJjaC9zMzkwL2xpYi9jcnlwdG8v c2hhMjU2LmMgICAgICAgICAgICAgICAgIHwgICA0ICstCj4gIGFyY2gvc3BhcmMvbGliL2NyeXB0 by9zaGEyNTYuYyAgICAgICAgICAgICAgICB8ICAgNCArLQo+ICBhcmNoL3g4Ni9saWIvY3J5cHRv L0tjb25maWcgICAgICAgICAgICAgICAgICAgfCAgIDEgKwo+ICBhcmNoL3g4Ni9saWIvY3J5cHRv L3NoYTI1Ni5jICAgICAgICAgICAgICAgICAgfCAgMTYgKystCj4gIGNyeXB0by9zaGEyNTYuYyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEzNCArKysrKysrKysrKy0tLS0tLS0KPiAg aW5jbHVkZS9jcnlwdG8vaW50ZXJuYWwvc2hhMi5oICAgICAgICAgICAgICAgIHwgIDQ2ICsrKysr Kwo+ICBpbmNsdWRlL2NyeXB0by9zaGEyLmggICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTQg Ky0KPiAgbGliL2NyeXB0by9LY29uZmlnICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA4 ICsrCj4gIGxpYi9jcnlwdG8vc2hhMjU2LmMgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEw MCArKystLS0tLS0tLS0tCj4gIDIwIGZpbGVzIGNoYW5nZWQsIDIzMiBpbnNlcnRpb25zKCspLCAx ODMgZGVsZXRpb25zKC0pCgpUaGUgRVhQT1JUX1NZTUJPTCA9PiBFWFBPUlRfU1lNQk9MX0dQTCBj aGFuZ2VzIGFyZSBmaW5lIGFuZCBzaG91bGQganVzdCBiZSBvbmUKcGF0Y2guICBJIHdhcyBqdXN0 IHRyeWluZyB0byBiZSBjb25zaXN0ZW50IHdpdGggbGliL2NyeXB0by9zaGEyNTYuYyB3aGljaCB1 c2VzCkVYUE9SVF9TWU1CT0wsIGJ1dCBFWFBPUlRfU1lNQk9MX0dQTCBpcyBmaW5lIHRvby4KCkV2 ZXJ5dGhpbmcgZWxzZSBpbiB0aGlzIHNlcmllcyBpcyBoYXJtZnVsLCBJTU8uCgpJIGFscmVhZHkg Y292ZXJlZCB3aHkgY3J5cHRvX3NoYXNoIHNob3VsZCBzaW1wbHkgdXNlIHRoZSBsaWJyYXJ5IGFu ZCBub3QgZG8KYW55dGhpbmcgc3BlY2lhbC4KCkFzIGZvciB5b3VyIHNoYTI1Nl9maW51cCAib3B0 aW1pemF0aW9uIiwgaXQncyBhbiBpbnRlcmVzdGluZyBpZGVhLCBidXQKdW5mb3J0dW5hdGVseSBp dCBzbGlnaHRseSBzbG93cyBkb3duIHRoZSBjb21tb24gY2FzZSB3aGljaCBpcyBjb3VudCAlIDY0 IDwgNTYsCmR1ZSB0byB0aGUgdW5uZWNlc3NhcnkgY29weSB0byB0aGUgc3RhY2sgYW5kIHRoZSBm b2xsb3dpbmcgemVyb2l6YXRpb24uICBJbiB0aGUKdW5jb21tb24gY2FzZSB3aGVyZSBjb3VudCAl IDY0ID49IDU2IHlvdSBkbyBnZXQgdG8gcGFzcyBuYmxvY2tzPTIgdG8Kc2hhMjU2X2Jsb2Nrc18q KCksIGJ1dCB1bHRpbWF0ZWx5IFNIQS0yNTYgaXMgc2VyaWFsaXplZCBibG9jay1ieS1ibG9jayBh bnl3YXksCnNvIGl0IGVuZHMgdXAgYmVpbmcgb25seSBzbGlnaHRseSBmYXN0ZXIgaW4gdGhhdCBj YXNlLCB3aGljaCBhZ2FpbiBpcyB0aGUKdW5jb21tb24gY2FzZS4gIFNvIHdoaWxlIGl0J3MgYW4g aW50ZXJlc3RpbmcgaWRlYSwgaXQgZG9lc24ndCBzZWVtIHRvIGFjdHVhbGx5CmJlIGJldHRlci4g IEFuZCB0aGUgZmFjdCB0aGF0IHRoYXQgcGF0Y2ggaXMgYWxzbyBiZWluZyB1c2VkIHRvIHN1Ym1p dCB1bnJlbGF0ZWQsCm1vcmUgZHViaW91cyBjaGFuZ2VzIGlzbid0IHZlcnkgaGVscGZ1bCwgb2Yg Y291cnNlLgoKLSBFcmljCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwpsaW51eC1yaXNjdiBtYWlsaW5nIGxpc3QKbGludXgtcmlzY3ZAbGlzdHMuaW5mcmFk ZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4 LXJpc2N2Cg==