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 smtp2.osuosl.org (smtp2.osuosl.org [140.211.166.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 A270AC433EF for ; Sat, 14 May 2022 00:59:58 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp2.osuosl.org (Postfix) with ESMTP id 51141404AB; Sat, 14 May 2022 00:59:58 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp2.osuosl.org ([127.0.0.1]) by localhost (smtp2.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id Lqs-V0ujpyul; Sat, 14 May 2022 00:59:55 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [IPv6:2605:bc80:3010:104::8cd3:938]) by smtp2.osuosl.org (Postfix) with ESMTPS id 0BB4040516; Sat, 14 May 2022 00:59:55 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id DA714C0039; Sat, 14 May 2022 00:59:54 +0000 (UTC) Received: from smtp3.osuosl.org (smtp3.osuosl.org [140.211.166.136]) by lists.linuxfoundation.org (Postfix) with ESMTP id 87C5AC002D for ; Sat, 14 May 2022 00:59:53 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp3.osuosl.org (Postfix) with ESMTP id 5EF3460DE5 for ; Sat, 14 May 2022 00:59:53 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Authentication-Results: smtp3.osuosl.org (amavisd-new); dkim=pass (2048-bit key) header.d=bytedance-com.20210112.gappssmtp.com Received: from smtp3.osuosl.org ([127.0.0.1]) by localhost (smtp3.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id kTcQANpdt4Q4 for ; Sat, 14 May 2022 00:59:50 +0000 (UTC) X-Greylist: whitelisted by SQLgrey-1.8.0 Received: from mail-pj1-x102c.google.com (mail-pj1-x102c.google.com [IPv6:2607:f8b0:4864:20::102c]) by smtp3.osuosl.org (Postfix) with ESMTPS id 665DC60E87 for ; Sat, 14 May 2022 00:59:50 +0000 (UTC) Received: by mail-pj1-x102c.google.com with SMTP id b12so138159pju.3 for ; Fri, 13 May 2022 17:59:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance-com.20210112.gappssmtp.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=HOe8OKHjGjgPipHcmR/wxbQN3SkgDrKMtAbPYd9GV+w=; b=HwzUT3y+ysp7SPjqrm2c+6/Zsi0wNe1HWeML3gsK6LJfIuDdKmTgjYTRFeR0qmFOSS 80s0mJecgKt+2wfG9QM4tFkMowwvnr/W/rGlg2J6Ndiy7kl/yjarlMfLtdX+C6USVJ6s fvGRpMa0tlRh4diokGmBSh70a7PhOosZd5lKPKdwVIWj4c1aB3Y45V7+JNb7LSEbHtIW EfAz+ZTIrnvs8TZeRaI/tC5mDEbGuaSsePKuvw1CTCDp8DiK8IoOkc8UXrUyCTGULWK9 epIe3U5EEM4ZplsrMKzthrG1ylIqVG48zPlpxXI+8JRNd2mZ8aXSHg03dWCxEiRKfPMM lrRQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=HOe8OKHjGjgPipHcmR/wxbQN3SkgDrKMtAbPYd9GV+w=; b=HGixVClnA9ugRtWfhsxLynO3pRkXF4hy20AaBRvlLdt+rZ279OfdbIfHukiSFwkMeP aLAaeT8tapN16FH9ZkAzFAvlfIRvEDHC2y90TXYC3EBivm88ODf1kPx81II08WVI2cDx QK0JASRIeqdaT3tgkvhvZ5LQW8rMctQvvJbpntlYBKnn43lOKzdZFg8GZZd/TCS7dCQ+ YHF2WFX713+aLGrzpR35KQ7neV1wh/fg+FDz20kCXyBPcIlZXBp2+u8n32iUziSHtwbF HeTWriyuSnPsYlsjT71SueDAw33gmGTc79DK31MCcbz7JPBznTrbrhHb1F4Ins/X1WKH SIlQ== X-Gm-Message-State: AOAM531QMZDp1yr/zli1GQqOcvHftZkbFzY61IJXQabFDSheF2DUZnzI nchtyOb7P+LzLoXP5upauyQ9tA== X-Google-Smtp-Source: ABdhPJzAk3kGQ47kkxExJmyrv4nBMmRITRAUz+A+U11BqrgKh9DadPjHre5lwJ2U0H0QWSaM2SZZ0A== X-Received: by 2002:a17:90b:1d10:b0:1dc:dea8:d2ad with SMTP id on16-20020a17090b1d1000b001dcdea8d2admr18842038pjb.174.1652489989164; Fri, 13 May 2022 17:59:49 -0700 (PDT) Received: from always-x1.www.tendawifi.com ([139.177.225.239]) by smtp.gmail.com with ESMTPSA id t24-20020a170902b21800b0015e8d4eb1dbsm2466125plr.37.2022.05.13.17.59.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 13 May 2022 17:59:48 -0700 (PDT) From: zhenwei pi To: mst@redhat.com, arei.gonglei@huawei.com, berrange@redhat.com Subject: [PATCH v6 7/9] test/crypto: Add test suite for crypto akcipher Date: Sat, 14 May 2022 08:55:02 +0800 Message-Id: <20220514005504.1042884-8-pizhenwei@bytedance.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220514005504.1042884-1-pizhenwei@bytedance.com> References: <20220514005504.1042884-1-pizhenwei@bytedance.com> MIME-Version: 1.0 Cc: helei.sig11@bytedance.com, cohuck@redhat.com, qemu-devel@nongnu.org, pizhenwei@bytedance.com, virtualization@lists.linux-foundation.org, linux-crypto@vger.kernel.org X-BeenThere: virtualization@lists.linux-foundation.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: Linux virtualization List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: virtualization-bounces@lists.linux-foundation.org Sender: "Virtualization" RnJvbTogTGVpIEhlIDxoZWxlaS5zaWcxMUBieXRlZGFuY2UuY29tPgoKQWRkIHVuaXQgdGVzdCBh bmQgYmVuY2htYXJrIHRlc3QgZm9yIGNyeXB0byBha2NpcGhlci4KClNpZ25lZC1vZmYtYnk6IGxl aSBoZSA8aGVsZWkuc2lnMTFAYnl0ZWRhbmNlLmNvbT4KU2lnbmVkLW9mZi1ieTogemhlbndlaSBw aSA8cGl6aGVud2VpQGJ5dGVkYW5jZS5jb20+ClJldmlld2VkLWJ5OiBEYW5pZWwgUC4gQmVycmFu Z8OpIDxiZXJyYW5nZUByZWRoYXQuY29tPgotLS0KIHRlc3RzL2JlbmNoL2JlbmNobWFyay1jcnlw dG8tYWtjaXBoZXIuYyB8IDE1NyArKysrKysKIHRlc3RzL2JlbmNoL21lc29uLmJ1aWxkICAgICAg ICAgICAgICAgICB8ICAgMSArCiB0ZXN0cy9iZW5jaC90ZXN0X2FrY2lwaGVyX2tleXMuaW5jICAg ICAgfCA1MzcgKysrKysrKysrKysrKysrKysrCiB0ZXN0cy91bml0L21lc29uLmJ1aWxkICAgICAg ICAgICAgICAgICAgfCAgIDEgKwogdGVzdHMvdW5pdC90ZXN0LWNyeXB0by1ha2NpcGhlci5jICAg ICAgIHwgNzExICsrKysrKysrKysrKysrKysrKysrKysrKwogNSBmaWxlcyBjaGFuZ2VkLCAxNDA3 IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0cy9iZW5jaC9iZW5jaG1hcmst Y3J5cHRvLWFrY2lwaGVyLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0cy9iZW5jaC90ZXN0X2Fr Y2lwaGVyX2tleXMuaW5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdHMvdW5pdC90ZXN0LWNyeXB0 by1ha2NpcGhlci5jCgpkaWZmIC0tZ2l0IGEvdGVzdHMvYmVuY2gvYmVuY2htYXJrLWNyeXB0by1h a2NpcGhlci5jIGIvdGVzdHMvYmVuY2gvYmVuY2htYXJrLWNyeXB0by1ha2NpcGhlci5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmM2YzgwYzBiZTEKLS0tIC9kZXYvbnVs bAorKysgYi90ZXN0cy9iZW5jaC9iZW5jaG1hcmstY3J5cHRvLWFrY2lwaGVyLmMKQEAgLTAsMCAr MSwxNTcgQEAKKy8qCisgKiBRRU1VIENyeXB0byBha2NpcGhlciBzcGVlZCBiZW5jaG1hcmsKKyAq CisgKiBDb3B5cmlnaHQgKGMpIDIwMjIgQnl0ZWRhbmNlCisgKgorICogQXV0aG9yczoKKyAqICAg IGxlaSBoZSA8aGVsZWkuc2lnMTFAYnl0ZWRhbmNlLmNvbT4KKyAqCisgKiBUaGlzIHdvcmsgaXMg bGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMLCB2ZXJzaW9uIDIgb3IKKyAq IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICBTZWUgdGhlIENPUFlJTkcgZmls ZSBpbiB0aGUKKyAqIHRvcC1sZXZlbCBkaXJlY3RvcnkuCisgKi8KKworI2luY2x1ZGUgInFlbXUv b3NkZXAuaCIKKyNpbmNsdWRlICJjcnlwdG8vaW5pdC5oIgorI2luY2x1ZGUgImNyeXB0by9ha2Np cGhlci5oIgorI2luY2x1ZGUgInN0YW5kYXJkLWhlYWRlcnMvbGludXgvdmlydGlvX2NyeXB0by5o IgorCisjaW5jbHVkZSAidGVzdF9ha2NpcGhlcl9rZXlzLmluYyIKKworc3RhdGljIGJvb2wga2Vl cF9ydW5uaW5nOworCitzdGF0aWMgdm9pZCBhbGFybV9oYW5kbGVyKGludCBzaWcpCit7CisgICAg a2VlcF9ydW5uaW5nID0gZmFsc2U7Cit9CisKK3N0YXRpYyBRQ3J5cHRvQWtDaXBoZXIgKmNyZWF0 ZV9yc2FfYWtjaXBoZXIoY29uc3QgdWludDhfdCAqcHJpdl9rZXksCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBrZXlsZW4sCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFDcnlwdG9SU0FQYWRkaW5nQWxnb3JpdGht IHBhZGRpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFD cnlwdG9IYXNoQWxnb3JpdGhtIGhhc2gpCit7CisgICAgUUNyeXB0b0FrQ2lwaGVyT3B0aW9ucyBv cHQ7CisgICAgUUNyeXB0b0FrQ2lwaGVyICpyc2E7CisKKyAgICBvcHQuYWxnID0gUUNSWVBUT19B S0NJUEhFUl9BTEdfUlNBOworICAgIG9wdC51LnJzYS5wYWRkaW5nX2FsZyA9IHBhZGRpbmc7Cisg ICAgb3B0LnUucnNhLmhhc2hfYWxnID0gaGFzaDsKKyAgICByc2EgPSBxY3J5cHRvX2FrY2lwaGVy X25ldygmb3B0LCBRQ1JZUFRPX0FLQ0lQSEVSX0tFWV9UWVBFX1BSSVZBVEUsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcHJpdl9rZXksIGtleWxlbiwgJmVycm9yX2Fib3J0KTsKKyAg ICByZXR1cm4gcnNhOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X3JzYV9zcGVlZChjb25zdCB1aW50 OF90ICpwcml2X2tleSwgc2l6ZV90IGtleWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg IHNpemVfdCBrZXlfc2l6ZSkKK3sKKyNkZWZpbmUgQllURSA4CisjZGVmaW5lIFNIQTFfREdTVF9M RU4gMjAKKyNkZWZpbmUgRFVSQVRJT05fU0VDT05EUyAxMAorI2RlZmluZSBQQURESU5HIFFDUllQ VE9fUlNBX1BBRERJTkdfQUxHX1BLQ1MxCisjZGVmaW5lIEhBU0ggUUNSWVBUT19IQVNIX0FMR19T SEExCisKKyAgICBnX2F1dG9wdHIoUUNyeXB0b0FrQ2lwaGVyKSByc2EgPQorICAgICAgICBjcmVh dGVfcnNhX2FrY2lwaGVyKHByaXZfa2V5LCBrZXlsZW4sIFBBRERJTkcsIEhBU0gpOworICAgIGdf YXV0b2ZyZWUgdWludDhfdCAqZGdzdCA9IE5VTEw7CisgICAgZ19hdXRvZnJlZSB1aW50OF90ICpz aWduYXR1cmUgPSBOVUxMOworICAgIHNpemVfdCBjb3VudDsKKworICAgIGRnc3QgPSBnX25ldzAo dWludDhfdCwgU0hBMV9ER1NUX0xFTik7CisgICAgbWVtc2V0KGRnc3QsIGdfdGVzdF9yYW5kX2lu dCgpLCBTSEExX0RHU1RfTEVOKTsKKyAgICBzaWduYXR1cmUgPSBnX25ldzAodWludDhfdCwga2V5 X3NpemUgLyBCWVRFKTsKKworICAgIGdfdGVzdF9tZXNzYWdlKCJiZW5jaG1hcmsgcnNhJWx1ICgl cy0lcykgc2lnbiBpbiAlZCBzZWNvbmRzIiwga2V5X3NpemUsCisgICAgICAgICAgICAgICAgICAg UUNyeXB0b1JTQVBhZGRpbmdBbGdvcml0aG1fc3RyKFBBRERJTkcpLAorICAgICAgICAgICAgICAg ICAgIFFDcnlwdG9IYXNoQWxnb3JpdGhtX3N0cihIQVNIKSwKKyAgICAgICAgICAgICAgICAgICBE VVJBVElPTl9TRUNPTkRTKTsKKyAgICBhbGFybShEVVJBVElPTl9TRUNPTkRTKTsKKyAgICBnX3Rl c3RfdGltZXJfc3RhcnQoKTsKKyAgICBmb3IgKGtlZXBfcnVubmluZyA9IHRydWUsIGNvdW50ID0g MDsga2VlcF9ydW5uaW5nOyArK2NvdW50KSB7CisgICAgICAgIGdfYXNzZXJ0KHFjcnlwdG9fYWtj aXBoZXJfc2lnbihyc2EsIGRnc3QsIFNIQTFfREdTVF9MRU4sCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmUsIGtleV9zaXplIC8gQllURSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlcnJvcl9hYm9ydCkgPiAwKTsKKyAgICB9 CisgICAgZ190ZXN0X3RpbWVyX2VsYXBzZWQoKTsKKyAgICBnX3Rlc3RfbWVzc2FnZSgicnNhJWx1 ICglcy0lcykgc2lnbiAlbHUgdGltZXMgaW4gJS4yZiBzZWNvbmRzLCIKKyAgICAgICAgICAgICAg ICAgICAiICUuMmYgdGltZXMvc2VjICIsCisgICAgICAgICAgICAgICAgICAga2V5X3NpemUsICBR Q3J5cHRvUlNBUGFkZGluZ0FsZ29yaXRobV9zdHIoUEFERElORyksCisgICAgICAgICAgICAgICAg ICAgUUNyeXB0b0hhc2hBbGdvcml0aG1fc3RyKEhBU0gpLAorICAgICAgICAgICAgICAgICAgIGNv dW50LCBnX3Rlc3RfdGltZXJfbGFzdCgpLAorICAgICAgICAgICAgICAgICAgIChkb3VibGUpY291 bnQgLyBnX3Rlc3RfdGltZXJfbGFzdCgpKTsKKworICAgIGdfdGVzdF9tZXNzYWdlKCJiZW5jaG1h cmsgcnNhJWx1ICglcy0lcykgdmVyaWZ5IGluICVkIHNlY29uZHMiLCBrZXlfc2l6ZSwKKyAgICAg ICAgICAgICAgICAgICBRQ3J5cHRvUlNBUGFkZGluZ0FsZ29yaXRobV9zdHIoUEFERElORyksCisg ICAgICAgICAgICAgICAgICAgUUNyeXB0b0hhc2hBbGdvcml0aG1fc3RyKEhBU0gpLAorICAgICAg ICAgICAgICAgICAgIERVUkFUSU9OX1NFQ09ORFMpOworICAgIGFsYXJtKERVUkFUSU9OX1NFQ09O RFMpOworICAgIGdfdGVzdF90aW1lcl9zdGFydCgpOworICAgIGZvciAoa2VlcF9ydW5uaW5nID0g dHJ1ZSwgY291bnQgPSAwOyBrZWVwX3J1bm5pbmc7ICsrY291bnQpIHsKKyAgICAgICAgZ19hc3Nl cnQocWNyeXB0b19ha2NpcGhlcl92ZXJpZnkocnNhLCBzaWduYXR1cmUsIGtleV9zaXplIC8gQllU RSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGdzdCwgU0hBMV9E R1NUX0xFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVycm9y X2Fib3J0KSA9PSAwKTsKKyAgICB9CisgICAgZ190ZXN0X3RpbWVyX2VsYXBzZWQoKTsKKyAgICBn X3Rlc3RfbWVzc2FnZSgicnNhJWx1ICglcy0lcykgdmVyaWZ5ICVsdSB0aW1lcyBpbiAlLjJmIHNl Y29uZHMsIgorICAgICAgICAgICAgICAgICAgICIgJS4yZiB0aW1lcy9zZWMgIiwKKyAgICAgICAg ICAgICAgICAgICBrZXlfc2l6ZSwgUUNyeXB0b1JTQVBhZGRpbmdBbGdvcml0aG1fc3RyKFBBRERJ TkcpLAorICAgICAgICAgICAgICAgICAgIFFDcnlwdG9IYXNoQWxnb3JpdGhtX3N0cihIQVNIKSwK KyAgICAgICAgICAgICAgICAgICBjb3VudCwgZ190ZXN0X3RpbWVyX2xhc3QoKSwKKyAgICAgICAg ICAgICAgICAgICAoZG91YmxlKWNvdW50IC8gZ190ZXN0X3RpbWVyX2xhc3QoKSk7Cit9CisKK3N0 YXRpYyB2b2lkIHRlc3RfcnNhXzEwMjRfc3BlZWQoY29uc3Qgdm9pZCAqb3BhcXVlKQoreworICAg IHNpemVfdCBrZXlfc2l6ZSA9IChzaXplX3Qpb3BhcXVlOworICAgIHRlc3RfcnNhX3NwZWVkKHJz YTEwMjRfcHJpdl9rZXksIHNpemVvZihyc2ExMDI0X3ByaXZfa2V5KSwga2V5X3NpemUpOworfQor CitzdGF0aWMgdm9pZCB0ZXN0X3JzYV8yMDQ4X3NwZWVkKGNvbnN0IHZvaWQgKm9wYXF1ZSkKK3sK KyAgICBzaXplX3Qga2V5X3NpemUgPSAoc2l6ZV90KW9wYXF1ZTsKKyAgICB0ZXN0X3JzYV9zcGVl ZChyc2EyMDQ4X3ByaXZfa2V5LCBzaXplb2YocnNhMjA0OF9wcml2X2tleSksIGtleV9zaXplKTsK K30KKworc3RhdGljIHZvaWQgdGVzdF9yc2FfNDA5Nl9zcGVlZChjb25zdCB2b2lkICpvcGFxdWUp Cit7CisgICAgc2l6ZV90IGtleV9zaXplID0gKHNpemVfdClvcGFxdWU7CisgICAgdGVzdF9yc2Ff c3BlZWQocnNhNDA5Nl9wcml2X2tleSwgc2l6ZW9mKHJzYTQwOTZfcHJpdl9rZXkpLCBrZXlfc2l6 ZSk7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgICBjaGFyICph bGcgPSBOVUxMOworICAgIGNoYXIgKnNpemUgPSBOVUxMOworICAgIGdfdGVzdF9pbml0KCZhcmdj LCAmYXJndiwgTlVMTCk7CisgICAgZ19hc3NlcnQocWNyeXB0b19pbml0KE5VTEwpID09IDApOwor ICAgIHN0cnVjdCBzaWdhY3Rpb24gbmV3X2FjdGlvbiwgb2xkX2FjdGlvbjsKKworICAgIG5ld19h Y3Rpb24uc2FfaGFuZGxlciA9IGFsYXJtX2hhbmRsZXI7CisKKyAgICAvKiBTZXQgdXAgdGhlIHN0 cnVjdHVyZSB0byBzcGVjaWZ5IHRoZSBuZXcgYWN0aW9uLiAqLworICAgIHNpZ2VtcHR5c2V0KCZu ZXdfYWN0aW9uLnNhX21hc2spOworICAgIG5ld19hY3Rpb24uc2FfZmxhZ3MgPSAwOworICAgIHNp Z2FjdGlvbihTSUdBTFJNLCBOVUxMLCAmb2xkX2FjdGlvbik7CisgICAgZ19hc3NlcnQob2xkX2Fj dGlvbi5zYV9oYW5kbGVyICE9IFNJR19JR04pOworICAgIHNpZ2FjdGlvbihTSUdBTFJNLCAmbmV3 X2FjdGlvbiwgTlVMTCk7CisKKyNkZWZpbmUgQUREX1RFU1QoYXN5bV9hbGcsIGtleXNpemUpICAg ICAgICAgICAgICAgICAgICBcCisgICAgaWYgKCghYWxnIHx8IGdfc3RyX2VxdWFsKGFsZywgI2Fz eW1fYWxnKSkgJiYgICAgICAgXAorICAgICAgICAoIXNpemUgfHwgZ19zdHJfZXF1YWwoc2l6ZSwg I2tleXNpemUpKSkgICAgICAgIFwKKyAgICAgICAgZ190ZXN0X2FkZF9kYXRhX2Z1bmMoICAgICAg ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICIvY3J5cHRvL2FrY2lwaGVyLyIgI2FzeW1f YWxnICItIiAja2V5c2l6ZSwgICAgXAorICAgICAgICAodm9pZCAqKWtleXNpemUsICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgdGVzdF8gIyMgYXN5bV9hbGcgIyMgXyAj IyBrZXlzaXplICMjIF9zcGVlZCkKKworICAgIGlmIChhcmdjID49IDIpIHsKKyAgICAgICAgYWxn ID0gYXJndlsxXTsKKyAgICB9CisgICAgaWYgKGFyZ2MgPj0gMykgeworICAgICAgICBzaXplID0g YXJndlsyXTsKKyAgICB9CisKKyAgICBBRERfVEVTVChyc2EsIDEwMjQpOworICAgIEFERF9URVNU KHJzYSwgMjA0OCk7CisgICAgQUREX1RFU1QocnNhLCA0MDk2KTsKKworICAgIHJldHVybiBnX3Rl c3RfcnVuKCk7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9iZW5jaC9tZXNvbi5idWlsZCBiL3Rlc3Rz L2JlbmNoL21lc29uLmJ1aWxkCmluZGV4IDAwYjNjMjA5ZGMuLjI3OWE4ZmNjMzMgMTAwNjQ0Ci0t LSBhL3Rlc3RzL2JlbmNoL21lc29uLmJ1aWxkCisrKyBiL3Rlc3RzL2JlbmNoL21lc29uLmJ1aWxk CkBAIC0yMCw2ICsyMCw3IEBAIGlmIGhhdmVfYmxvY2sKICAgICAgJ2JlbmNobWFyay1jcnlwdG8t aGFzaCc6IFtjcnlwdG9dLAogICAgICAnYmVuY2htYXJrLWNyeXB0by1obWFjJzogW2NyeXB0b10s CiAgICAgICdiZW5jaG1hcmstY3J5cHRvLWNpcGhlcic6IFtjcnlwdG9dLAorICAgICAnYmVuY2ht YXJrLWNyeXB0by1ha2NpcGhlcic6IFtjcnlwdG9dLAogICB9CiBlbmRpZgogCmRpZmYgLS1naXQg YS90ZXN0cy9iZW5jaC90ZXN0X2FrY2lwaGVyX2tleXMuaW5jIGIvdGVzdHMvYmVuY2gvdGVzdF9h a2NpcGhlcl9rZXlzLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5k ZjNlY2NiNDVlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvYmVuY2gvdGVzdF9ha2NpcGhlcl9r ZXlzLmluYwpAQCAtMCwwICsxLDUzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAyMiBCeXRl ZGFuY2UsIGFuZC9vciBpdHMgYWZmaWxpYXRlcworICoKKyAqIFRoaXMgd29yayBpcyBsaWNlbnNl ZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwsIHZlcnNpb24gMiBvciBsYXRlci4KKyAq IFNlZSB0aGUgQ09QWUlORyBmaWxlIGluIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5LgorICoKKyAq IEF1dGhvcjogbGVpIGhlIDxoZWxlaS5zaWcxMUBieXRlZGFuY2UuY29tPgorICovCisKKy8qIFJT QSB0ZXN0IGtleXMsIGdlbmVyYXRlZCBieSBPcGVuU1NMICovCitzdGF0aWMgY29uc3QgdWludDhf dCByc2ExMDI0X3ByaXZfa2V5W10gPSB7CisgICAgMHgzMCwgMHg4MiwgMHgwMiwgMHg1YywgMHgw MiwgMHgwMSwgMHgwMCwgMHgwMiwKKyAgICAweDgxLCAweDgxLCAweDAwLCAweGU2LCAweDRkLCAw eDc2LCAweDRmLCAweGIyLAorICAgIDB4OTcsIDB4MDksIDB4YWQsIDB4OWQsIDB4MTcsIDB4MzMs IDB4ZjIsIDB4MzAsCisgICAgMHg0MiwgMHg4MywgMHhhOSwgMHhjYiwgMHg0OSwgMHhhNCwgMHgy ZSwgMHg1OSwKKyAgICAweDVlLCAweDc1LCAweDUxLCAweGQxLCAweGFjLCAweGM4LCAweDg2LCAw eDNlLAorICAgIDB4ZGIsIDB4NzIsIDB4MmUsIDB4YjIsIDB4ZjcsIDB4YzMsIDB4NWIsIDB4Yzcs CisgICAgMHhlYSwgMHhlZCwgMHgzMCwgMHhkMSwgMHhmNywgMHgzNywgMHhlZSwgMHg5ZCwKKyAg ICAweDM2LCAweDU5LCAweDZmLCAweGY4LCAweGNlLCAweGMwLCAweDVjLCAweDgyLAorICAgIDB4 ODAsIDB4MzcsIDB4ODMsIDB4ZDcsIDB4NDUsIDB4NmEsIDB4ZTksIDB4ZWEsCisgICAgMHhjNSwg MHgzYSwgMHg1OSwgMHg2YiwgMHgzNCwgMHgzMSwgMHg0NCwgMHgwMCwKKyAgICAweDc0LCAweGE3 LCAweDI5LCAweGFiLCAweDc5LCAweDRhLCAweGJkLCAweGU4LAorICAgIDB4MjUsIDB4MzUsIDB4 MDEsIDB4MTEsIDB4NDAsIDB4YmYsIDB4MzEsIDB4YmQsCisgICAgMHhkMywgMHhlMCwgMHg2OCwg MHgxZSwgMHhkNSwgMHg1YiwgMHgyZiwgMHhlOSwKKyAgICAweDIwLCAweGYyLCAweDlmLCAweDQ2 LCAweDM1LCAweDMwLCAweGE4LCAweGYxLAorICAgIDB4ZmUsIDB4ZWYsIDB4ZDgsIDB4NzYsIDB4 MjMsIDB4NDYsIDB4MzQsIDB4NzAsCisgICAgMHhhMSwgMHhjZSwgMHhjNiwgMHg2NSwgMHg2ZCwg MHhiMCwgMHg5NCwgMHg3ZSwKKyAgICAweGU1LCAweDkyLCAweDQ1LCAweDdiLCAweGFhLCAweGJi LCAweDk1LCAweDk3LAorICAgIDB4NzcsIDB4Y2QsIDB4ZDMsIDB4MDIsIDB4MDMsIDB4MDEsIDB4 MDAsIDB4MDEsCisgICAgMHgwMiwgMHg4MSwgMHg4MCwgMHgzMCwgMHg2YSwgMHhjNCwgMHg5ZSwg MHhjOCwKKyAgICAweGJhLCAweGZjLCAweDJiLCAweGU1LCAweGM0LCAweGM1LCAweDA0LCAweGZi LAorICAgIDB4YTQsIDB4NjAsIDB4MmQsIDB4YzgsIDB4MzEsIDB4MzksIDB4MzUsIDB4MGQsCisg ICAgMHg1MCwgMHhkMCwgMHg3NSwgMHg1ZCwgMHgxMSwgMHg2OCwgMHgyZSwgMHhlMCwKKyAgICAw eGY0LCAweDFkLCAweGIzLCAweDM3LCAweGE4LCAweGUzLCAweDA3LCAweDVlLAorICAgIDB4YTYs IDB4NDMsIDB4MmIsIDB4NmEsIDB4NTksIDB4MDEsIDB4MDcsIDB4NDcsCisgICAgMHg0MSwgMHhl ZiwgMHhkNywgMHg5YywgMHg4NSwgMHg0YSwgMHhlNywgMHhhNywKKyAgICAweGZmLCAweGYwLCAw eGFiLCAweGU1LCAweDBjLCAweDExLCAweDA4LCAweDEwLAorICAgIDB4NzUsIDB4NWEsIDB4Njgs IDB4YTAsIDB4MDgsIDB4MDMsIDB4YzksIDB4NDAsCisgICAgMHg3OSwgMHg2NywgMHgxZCwgMHg2 NSwgMHg4OSwgMHgyZCwgMHgwOCwgMHhmOSwKKyAgICAweGI1LCAweDFiLCAweDdkLCAweGQyLCAw eDQxLCAweDNiLCAweDMzLCAweGYyLAorICAgIDB4NDcsIDB4MmYsIDB4OWMsIDB4MGIsIDB4ZDUs IDB4YWYsIDB4Y2IsIDB4ZGIsCisgICAgMHhiYiwgMHgzNywgMHg2MywgMHgwMywgMHhmOCwgMHhl NywgMHgyZSwgMHhjNywKKyAgICAweDNjLCAweDg2LCAweDlmLCAweGMyLCAweDliLCAweGI0LCAw eDcwLCAweDZhLAorICAgIDB4NGQsIDB4N2MsIDB4ZTQsIDB4MWIsIDB4M2EsIDB4YTksIDB4YWUs IDB4ZDcsCisgICAgMHhjZSwgMHg3ZiwgMHg1NiwgMHhjMiwgMHg3MywgMHg1ZSwgMHg1OCwgMHg2 MywKKyAgICAweGQ1LCAweDg2LCAweDQxLCAweDAyLCAweDQxLCAweDAwLCAweGY2LCAweDU2LAor ICAgIDB4NjksIDB4ZWMsIDB4ZWYsIDB4NjUsIDB4OTUsIDB4ZGMsIDB4MjUsIDB4NDcsCisgICAg MHhlMCwgMHg2ZiwgMHhiMCwgMHg0ZiwgMHg3OSwgMHg3NywgMHgwYSwgMHg1ZSwKKyAgICAweDQ2 LCAweGNiLCAweGJkLCAweDBiLCAweDcxLCAweDUxLCAweDJhLCAweGE0LAorICAgIDB4NjUsIDB4 MjksIDB4MTgsIDB4YzYsIDB4MzAsIDB4YTAsIDB4OTUsIDB4NGMsCisgICAgMHg0YiwgMHhiZSwg MHg4YywgMHg0MCwgMHhlMywgMHg5YywgMHgyMywgMHgwMiwKKyAgICAweDE0LCAweDQzLCAweGU5 LCAweDY0LCAweGVhLCAweGUzLCAweGE4LCAweGUyLAorICAgIDB4MWEsIDB4ZDUsIDB4ZjksIDB4 NWMsIDB4ZTAsIDB4MzYsIDB4MmMsIDB4OTcsCisgICAgMHhkYSwgMHhkNSwgMHhjNywgMHg0Niwg MHhjZSwgMHgxMSwgMHgwMiwgMHg0MSwKKyAgICAweDAwLCAweGVmLCAweDU2LCAweDA4LCAweGI4 LCAweDI5LCAweGE1LCAweGE2LAorICAgIDB4N2MsIDB4ZjcsIDB4NWYsIDB4YjQsIDB4ZjUsIDB4 NjMsIDB4ZTcsIDB4ZWIsCisgICAgMHg0NSwgMHhmZCwgMHg4OSwgMHhhYSwgMHg5NCwgMHhhNiwg MHgzZCwgMHgwYiwKKyAgICAweGQ5LCAweDA0LCAweDZmLCAweDc4LCAweGUwLCAweGJiLCAweGEy LCAweGQ0LAorICAgIDB4MjksIDB4ODMsIDB4MTcsIDB4OTUsIDB4NmYsIDB4NTAsIDB4M2QsIDB4 NDAsCisgICAgMHg1ZCwgMHhlNSwgMHgyNCwgMHhkYSwgMHhjMiwgMHgyMywgMHg1MCwgMHg4NiwK KyAgICAweGE4LCAweDM0LCAweGM4LCAweDZmLCAweGVjLCAweDdmLCAweGI2LCAweDQ1LAorICAg IDB4M2EsIDB4ZGQsIDB4NzgsIDB4OWIsIDB4ZWUsIDB4YTEsIDB4ZTQsIDB4MDksCisgICAgMHhh MywgMHgwMiwgMHg0MCwgMHg1YywgMHhkNiwgMHg2NiwgMHg2NywgMHg1OCwKKyAgICAweDM1LCAw eGM1LCAweGNiLCAweGM4LCAweGY1LCAweDE0LCAweGJkLCAweGEzLAorICAgIDB4MDksIDB4ZTAs IDB4YjIsIDB4MWYsIDB4NjMsIDB4MzYsIDB4NzUsIDB4MzQsCisgICAgMHg1MiwgMHhlYSwgMHhh YSwgMHhmNywgMHg1MiwgMHgyYiwgMHg5OSwgMHhkOCwKKyAgICAweDZmLCAweDYxLCAweDA2LCAw eDM0LCAweDFlLCAweDIzLCAweGYxLCAweGI1LAorICAgIDB4MzQsIDB4MDMsIDB4NTMsIDB4ZTUs IDB4ZDEsIDB4YjMsIDB4YzcsIDB4ODAsCisgICAgMHg1ZiwgMHg3YiwgMHgzMiwgMHhiZiwgMHg4 NCwgMHgyZiwgMHgyZSwgMHhmMywKKyAgICAweDIyLCAweGIwLCAweDkxLCAweDVhLCAweDJmLCAw eDA0LCAweGQ3LCAweDRhLAorICAgIDB4OWEsIDB4MDEsIDB4YjEsIDB4MDIsIDB4NDAsIDB4MzQs IDB4MGIsIDB4MjYsCisgICAgMHg0YywgMHgzZCwgMHhhYSwgMHgyYSwgMHhjMCwgMHhlMywgMHhk ZCwgMHhlOCwKKyAgICAweGYwLCAweGFmLCAweDZmLCAweGUwLCAweDA2LCAweDUxLCAweDMyLCAw eDlkLAorICAgIDB4NjgsIDB4NDMsIDB4OTksIDB4ZTQsIDB4YjgsIDB4YTUsIDB4MzEsIDB4NDQs CisgICAgMHgzYywgMHhjMiwgMHgzMCwgMHg4ZiwgMHgyOCwgMHgxMywgMHhiYywgMHg4ZSwKKyAg ICAweDFmLCAweDJkLCAweDc4LCAweDk0LCAweDQ1LCAweDk2LCAweGFkLCAweDYzLAorICAgIDB4 ZjAsIDB4NzEsIDB4NTMsIDB4NzIsIDB4NjQsIDB4YTMsIDB4NGQsIDB4YWUsCisgICAgMHhhMCwg MHhlMywgMHhjOCwgMHg5MywgMHhkNywgMHg1MCwgMHgwZiwgMHg4OSwKKyAgICAweDAwLCAweGU0 LCAweDJkLCAweDNkLCAweDM3LCAweDAyLCAweDQxLCAweDAwLAorICAgIDB4YmUsIDB4YTYsIDB4 MDgsIDB4ZTAsIDB4YzgsIDB4MTUsIDB4MmEsIDB4NDcsCisgICAgMHhjYiwgMHhkNSwgMHhlYywg MHg5MywgMHhkMywgMHhhYSwgMHgxMiwgMHg4MiwKKyAgICAweGFmLCAweGFjLCAweDUxLCAweDVh LCAweDViLCAweGE3LCAweDkzLCAweDRiLAorICAgIDB4YjksIDB4YWIsIDB4MDAsIDB4ZmEsIDB4 NWEsIDB4ZWEsIDB4MzQsIDB4ZTQsCisgICAgMHg4MCwgMHhmMSwgMHg0NCwgMHg2YSwgMHg2NSwg MHhlNCwgMHgzMywgMHg5OSwKKyAgICAweGZiLCAweDU0LCAweGQ3LCAweDg5LCAweDVhLCAweDFi LCAweGQ2LCAweDJiLAorICAgIDB4Y2MsIDB4NmUsIDB4NGIsIDB4MTksIDB4YTAsIDB4NmQsIDB4 OTMsIDB4OWYsCisgICAgMHhjMywgMHg5MSwgMHg3YSwgMHhhNSwgMHhkOCwgMHg1OSwgMHgwZSwg MHg5ZSwKK307CisKK3N0YXRpYyBjb25zdCB1aW50OF90IHJzYTIwNDhfcHJpdl9rZXlbXSA9IHsK KyAgICAweDMwLCAweDgyLCAweDA0LCAweGE0LCAweDAyLCAweDAxLCAweDAwLCAweDAyLAorICAg IDB4ODIsIDB4MDEsIDB4MDEsIDB4MDAsIDB4YmQsIDB4OWMsIDB4ODMsIDB4NmIsCisgICAgMHgw ZSwgMHg4ZSwgMHhjZiwgMHhmYSwgMHhhYSwgMHg0ZiwgMHg2YSwgMHhmNCwKKyAgICAweGUzLCAw eDUyLCAweDBmLCAweGE1LCAweGQwLCAweGJlLCAweDVlLCAweDdmLAorICAgIDB4MDgsIDB4MjQs IDB4YmEsIDB4ODcsIDB4NDYsIDB4ZmIsIDB4MjgsIDB4OTMsCisgICAgMHhlNSwgMHhlNSwgMHg4 MSwgMHg0MiwgMHhjMCwgMHhmOSwgMHgxNywgMHhjNywKKyAgICAweDgxLCAweDAxLCAweGY0LCAw eDE4LCAweDZhLCAweDE3LCAweGY1LCAweDU3LAorICAgIDB4MjAsIDB4MzcsIDB4Y2YsIDB4Zjks IDB4NzQsIDB4NWUsIDB4ZTEsIDB4NDgsCisgICAgMHg2YSwgMHg3MSwgMHgwYSwgMHgwZiwgMHg3 OSwgMHg3MiwgMHgyYiwgMHg0NiwKKyAgICAweDEwLCAweDUzLCAweGRjLCAweDE0LCAweDQzLCAw eGJkLCAweGJjLCAweDZkLAorICAgIDB4MTUsIDB4NmYsIDB4MTUsIDB4NGUsIDB4ZjAsIDB4MGQs IDB4ODksIDB4MzksCisgICAgMHgwMiwgMHhjMywgMHg2OCwgMHg1YywgMHhhOCwgMHhmYywgMHhl ZCwgMHg2NCwKKyAgICAweDlkLCAweDk4LCAweGI3LCAweGNkLCAweDgzLCAweDY2LCAweDkzLCAw eGMzLAorICAgIDB4ZDksIDB4NTcsIDB4YTAsIDB4MjEsIDB4OTMsIDB4YWQsIDB4NWMsIDB4NzUs CisgICAgMHg2OSwgMHg4OCwgMHg5ZSwgMHg4MSwgMHhkYywgMHg3ZiwgMHgxZCwgMHhkNSwKKyAg ICAweGJkLCAweDFjLCAweGMxLCAweDMwLCAweDU2LCAweGE1LCAweGRhLCAweDk5LAorICAgIDB4 NDYsIDB4YTYsIDB4NmQsIDB4MGUsIDB4NmYsIDB4NWUsIDB4NTEsIDB4MzQsCisgICAgMHg0OSwg MHg3MywgMHhjMywgMHg2NywgMHg0OSwgMHg3ZSwgMHgyMSwgMHgyYSwKKyAgICAweDIwLCAweGE3 LCAweDJiLCAweDkyLCAweDczLCAweDFkLCAweGE1LCAweDI1LAorICAgIDB4MmEsIDB4ZDAsIDB4 M2EsIDB4ODksIDB4NzUsIDB4YjIsIDB4YmIsIDB4MTksCisgICAgMHgzNywgMHg3OCwgMHg0OCwg MHhkMiwgMHhmMiwgMHgyYSwgMHg2ZCwgMHg5ZSwKKyAgICAweGM2LCAweDI2LCAweGNhLCAweDQ2 LCAweDhjLCAweGYxLCAweDQyLCAweDJhLAorICAgIDB4MzEsIDB4YjIsIDB4ZmMsIDB4ZTcsIDB4 NTUsIDB4NTEsIDB4ZmYsIDB4MDcsCisgICAgMHgxMywgMHg1YiwgMHgzNiwgMHg1OSwgMHgyYiwg MHg0MywgMHgzMCwgMHg0YiwKKyAgICAweDA1LCAweDVjLCAweGQyLCAweDQ1LCAweGEwLCAweGEw LCAweDdjLCAweDE3LAorICAgIDB4NWIsIDB4MDcsIDB4YmIsIDB4NWQsIDB4ODMsIDB4ODAsIDB4 OTIsIDB4NmQsCisgICAgMHg4NywgMHgxYSwgMHg0MywgMHhhYywgMHhjNywgMHg2YiwgMHg4ZCwg MHgxMSwKKyAgICAweDYwLCAweDI3LCAweGQyLCAweGRmLCAweGRiLCAweDcxLCAweDAyLCAweDU1 LAorICAgIDB4NmUsIDB4YjUsIDB4Y2EsIDB4NGQsIDB4ZGEsIDB4NTksIDB4MGQsIDB4YjgsCisg ICAgMHg4YywgMHhjZCwgMHhkMywgMHgwZSwgMHg1NSwgMHhhMCwgMHhhNCwgMHg4ZCwKKyAgICAw eGEwLCAweDE0LCAweDEwLCAweDQ4LCAweDQyLCAweDM1LCAweDU2LCAweDA4LAorICAgIDB4Zjcs IDB4MjksIDB4NWYsIDB4YTIsIDB4ZWEsIDB4YTQsIDB4NWUsIDB4OGUsCisgICAgMHg5OSwgMHg1 NiwgMHhhYSwgMHg1YSwgMHg4YywgMHgyMywgMHg4ZiwgMHgzNSwKKyAgICAweDIyLCAweDhhLCAw eGZmLCAweGVkLCAweDAyLCAweDAzLCAweDAxLCAweDAwLAorICAgIDB4MDEsIDB4MDIsIDB4ODIs IDB4MDEsIDB4MDAsIDB4NGUsIDB4NGEsIDB4ZjMsCisgICAgMHg0NCwgMHhlMCwgMHg2NCwgMHhm ZCwgMHhlMSwgMHhkZSwgMHgzMywgMHgxZSwKKyAgICAweGQxLCAweGYxLCAweDhmLCAweDZmLCAw eGUwLCAweGEyLCAweGZhLCAweDA4LAorICAgIDB4NjAsIDB4ZTEsIDB4YzYsIDB4ZjAsIDB4YjIs IDB4NmQsIDB4MGYsIDB4YzYsCisgICAgMHgyOCwgMHg5MywgMHhiNCwgMHgxOSwgMHg5NCwgMHhh YiwgMHhjMywgMHhlZiwKKyAgICAweDFhLCAweGI0LCAweGRkLCAweDRlLCAweGEyLCAweDRhLCAw eDI0LCAweDhjLAorICAgIDB4NmMsIDB4YTYsIDB4NjQsIDB4MDUsIDB4NWYsIDB4NTYsIDB4YmEs IDB4ZGEsCisgICAgMHhjMSwgMHgyMSwgMHgxYSwgMHg3ZCwgMHhmMSwgMHhmNywgMHhjZSwgMHhi OSwKKyAgICAweGE5LCAweDliLCAweDkyLCAweDU0LCAweGZjLCAweDk1LCAweDIwLCAweDIyLAor ICAgIDB4NGUsIDB4ZDQsIDB4OWIsIDB4ZTIsIDB4YWIsIDB4OGUsIDB4OTksIDB4YjgsCisgICAg MHg0MCwgMHhhZiwgMHgzMCwgMHg2YSwgMHhjNiwgMHg2MCwgMHgwYywgMHhkOCwKKyAgICAweDI1 LCAweDQ0LCAweGExLCAweGNiLCAweGJiLCAweDczLCAweDc3LCAweDg2LAorICAgIDB4YWEsIDB4 NDYsIDB4ZjMsIDB4NTQsIDB4YWUsIDB4YTgsIDB4YTAsIDB4ZGIsCisgICAgMHhkZCwgMHhhYiwg MHg2ZSwgMHhmYiwgMHgyYywgMHg1YSwgMHgxNCwgMHhhZiwKKyAgICAweDA4LCAweDEzLCAweGE3 LCAweDZjLCAweGU5LCAweGZkLCAweGNkLCAweDRjLAorICAgIDB4MWYsIDB4MjAsIDB4M2EsIDB4 MTYsIDB4MmIsIDB4ZjAsIDB4YjYsIDB4N2MsCisgICAgMHg0NywgMHg1ZiwgMHhkMSwgMHgwYSwg MHgyYywgMHhjNCwgMHhhNSwgMHg2OCwKKyAgICAweGQwLCAweDQzLCAweDc1LCAweDZiLCAweDY1 LCAweGFhLCAweDMyLCAweGM2LAorICAgIDB4OTksIDB4MDYsIDB4Y2IsIDB4OGYsIDB4ZTYsIDB4 OGQsIDB4Y2UsIDB4YmYsCisgICAgMHg0ZCwgMHgwZCwgMHg3YiwgMHgyMiwgMHgyYSwgMHg4YSwg MHhjYiwgMHg3ZCwKKyAgICAweDdmLCAweDE2LCAweDQ4LCAweDg1LCAweGYxLCAweDg2LCAweGNi LCAweDU0LAorICAgIDB4YjksIDB4MzksIDB4ZDQsIDB4YmMsIDB4ZTMsIDB4MmQsIDB4MjcsIDB4 NTksCisgICAgMHhmNiwgMHg4MSwgMHg1ZSwgMHg5NCwgMHg0NSwgMHhkZiwgMHhiOSwgMHgyMiwK KyAgICAweGFmLCAweDY0LCAweDBkLCAweDE0LCAweGVjLCAweDhjLCAweGViLCAweDcxLAorICAg IDB4YWMsIDB4ZWUsIDB4MDksIDB4NGMsIDB4YmYsIDB4MzQsIDB4ZjksIDB4ZjQsCisgICAgMHg2 NiwgMHg3NywgMHgzNiwgMHgzYiwgMHg0MSwgMHg3NCwgMHgwMSwgMHg0ZiwKKyAgICAweGZjLCAw eDU2LCAweDgzLCAweGJhLCAweDE0LCAweGIwLCAweDJmLCAweGRkLAorICAgIDB4NGQsIDB4Yjks IDB4M2YsIDB4ZGYsIDB4NzEsIDB4YmUsIDB4N2IsIDB4YmEsCisgICAgMHg2NiwgMHhjOCwgMHhj NSwgMHg0MiwgMHhjOSwgMHhiYSwgMHgxOCwgMHg2MywKKyAgICAweDQ1LCAweDA3LCAweDJmLCAw eDg0LCAweDNlLCAweGMzLCAweGZiLCAweDQ3LAorICAgIDB4ZGEsIDB4ZDQsIDB4MWQsIDB4MGUs IDB4OWQsIDB4OTYsIDB4YzAsIDB4ZWEsCisgICAgMHhlZSwgMHg0NSwgMHgyZiwgMHhlMSwgMHg2 MiwgMHgyMywgMHhlZSwgMHhlZiwKKyAgICAweDNkLCAweDVlLCAweDU1LCAweGExLCAweDBkLCAw eDAyLCAweDgxLCAweDgxLAorICAgIDB4MDAsIDB4ZWIsIDB4NzYsIDB4ODgsIDB4ZDMsIDB4YWUs IDB4M2YsIDB4MWQsCisgICAgMHhmMiwgMHg0OSwgMHhlMCwgMHgzNywgMHg0OSwgMHg4MywgMHg4 MiwgMHg2YywKKyAgICAweGY3LCAweGYxLCAweDE3LCAweDMwLCAweDc1LCAweDJlLCAweDg5LCAw eDA2LAorICAgIDB4ODgsIDB4NTYsIDB4MzIsIDB4ZjYsIDB4ZmEsIDB4NTgsIDB4Y2IsIDB4M2Ms CisgICAgMHg5OCwgMHg2NywgMHhjMywgMHhkZSwgMHgxMCwgMHg4MiwgMHhlNSwgMHhmYSwKKyAg ICAweGZhLCAweDUyLCAweDQ3LCAweDhkLCAweGQ3LCAweDAwLCAweGM2LCAweGNiLAorICAgIDB4 ZjcsIDB4ZjYsIDB4NTcsIDB4OWIsIDB4NmUsIDB4MGMsIDB4YWMsIDB4ZTgsCisgICAgMHgzYiwg MHhkMSwgMHhkZSwgMHhiNSwgMHgzNCwgMHhhZiwgMHg4YiwgMHgyYSwKKyAgICAweGIwLCAweDJk LCAweDAxLCAweGViLCAweDdjLCAweGEwLCAweDQyLCAweDI2LAorICAgIDB4YmIsIDB4MmIsIDB4 NDMsIDB4MGUsIDB4MWQsIDB4ZTIsIDB4NGUsIDB4YzksCisgICAgMHhjMSwgMHgwYSwgMHg2Nywg MHgxZCwgMHhmYywgMHg4MywgMHgyNSwgMHhjZSwKKyAgICAweGIyLCAweDE4LCAweGQ5LCAweDBk LCAweDcwLCAweGY1LCAweGEzLCAweDVhLAorICAgIDB4OWMsIDB4OTksIDB4ZGQsIDB4NDcsIDB4 YTEsIDB4NTcsIDB4ZTcsIDB4MjAsCisgICAgMHhkZSwgMHhhMSwgMHgyOSwgMHg4ZCwgMHg5Niwg MHg2MiwgMHhmOSwgMHgyNiwKKyAgICAweDk1LCAweDUxLCAweGE2LCAweGU3LCAweDA5LCAweDhi LCAweGJhLCAweDE2LAorICAgIDB4OGIsIDB4MTksIDB4NWIsIDB4ZjksIDB4MjcsIDB4MGQsIDB4 YzUsIDB4ZDYsCisgICAgMHg1ZiwgMHgwMiwgMHg4MSwgMHg4MSwgMHgwMCwgMHhjZSwgMHgyNiwg MHgzMSwKKyAgICAweGI1LCAweDQzLCAweDUzLCAweDk1LCAweDM5LCAweGRkLCAweDAxLCAweDk4 LAorICAgIDB4OGIsIDB4M2QsIDB4MjcsIDB4ZWIsIDB4MGIsIDB4ODcsIDB4MWMsIDB4OTUsCisg ICAgMHhmYywgMHgzZSwgMHgzNiwgMHg1MSwgMHgzMSwgMHhiNSwgMHhlYSwgMHg1OSwKKyAgICAw eDU2LCAweGMwLCAweDk3LCAweDYyLCAweGYwLCAweDYzLCAweDJiLCAweGI2LAorICAgIDB4MzAs IDB4OWIsIDB4ZGYsIDB4MTksIDB4MTAsIDB4ZTksIDB4YTAsIDB4M2QsCisgICAgMHhlYSwgMHg1 NCwgMHg1YSwgMHhlNiwgMHhjNiwgMHg5ZSwgMHg3ZSwgMHhiNSwKKyAgICAweGYwLCAweGIwLCAw eDU0LCAweGVmLCAweGMzLCAweGUxLCAweDQ3LCAweGE2LAorICAgIDB4OTUsIDB4YzcsIDB4ZTQs IDB4YTMsIDB4NGEsIDB4MzAsIDB4NjgsIDB4MjQsCisgICAgMHg5OCwgMHg3ZCwgMHhjMSwgMHgz NCwgMHhhOSwgMHhjYiwgMHhiYywgMHgzYywKKyAgICAweDA4LCAweDljLCAweDdkLCAweDBjLCAw eGEyLCAweGI3LCAweDYwLCAweGFhLAorICAgIDB4MzgsIDB4MDgsIDB4MTYsIDB4YTYsIDB4N2Ys IDB4ZGIsIDB4ZDIsIDB4YjEsCisgICAgMHg2NywgMHhlNywgMHg5MywgMHg4ZSwgMHhiYiwgMHg3 ZSwgMHhiOSwgMHhiNSwKKyAgICAweGQwLCAweGQwLCAweDlmLCAweDdiLCAweGNjLCAweDQ2LCAw eGU2LCAweDc0LAorICAgIDB4NzgsIDB4MWEsIDB4OTYsIDB4ZDYsIDB4ZDcsIDB4NzQsIDB4MzQs IDB4NTQsCisgICAgMHgzYiwgMHg1NCwgMHg1NSwgMHg3ZiwgMHg4OSwgMHg4MSwgMHhiYywgMHg0 MCwKKyAgICAweDU1LCAweDg3LCAweDI0LCAweDk1LCAweDMzLCAweDAyLCAweDgxLCAweDgxLAor ICAgIDB4MDAsIDB4YjAsIDB4MTgsIDB4NWQsIDB4MmEsIDB4MWEsIDB4OTUsIDB4OWYsCisgICAg MHg5YSwgMHhkNSwgMHgzZiwgMHgzNywgMHg3OSwgMHhlNiwgMHgzZCwgMHg4MywKKyAgICAweGFi LCAweDQ2LCAweDg2LCAweDM2LCAweDNhLCAweDVkLCAweDBjLCAweDIzLAorICAgIDB4NzMsIDB4 OTEsIDB4MmIsIDB4ZGEsIDB4NjMsIDB4Y2UsIDB4NDYsIDB4NjgsCisgICAgMHhkMSwgMHhmZSwg MHg0MCwgMHg5MCwgMHhmMiwgMHgzZSwgMHg0MywgMHgyYiwKKyAgICAweDE5LCAweDRjLCAweGIx LCAweGIwLCAweGQ1LCAweDhjLCAweDAyLCAweDIxLAorICAgIDB4MDcsIDB4MTgsIDB4MTcsIDB4 ZGEsIDB4ZTksIDB4NDksIDB4ZDcsIDB4ODIsCisgICAgMHg3MywgMHg0MiwgMHg3OCwgMHhkMSwg MHg4MiwgMHg0ZSwgMHg4YSwgMHhjMCwKKyAgICAweGU5LCAweDMzLCAweDJmLCAweGNkLCAweDYy LCAweGNlLCAweDIzLCAweGNhLAorICAgIDB4ZmQsIDB4OGQsIDB4ZDQsIDB4M2YsIDB4NTksIDB4 ODAsIDB4MjcsIDB4YjYsCisgICAgMHg2MSwgMHg4NSwgMHg5YiwgMHgyYSwgMHhlNCwgMHhlZiwg MHg1YywgMHgzNiwKKyAgICAweDIyLCAweDIxLCAweGNkLCAweDJhLCAweDZkLCAweDQxLCAweDc3 LCAweGUyLAorICAgIDB4Y2IsIDB4NWQsIDB4OTMsIDB4MGQsIDB4MDAsIDB4MTAsIDB4NTIsIDB4 OGQsCisgICAgMHhkNSwgMHg5MiwgMHgyOCwgMHgxNiwgMHg3OCwgMHhkMywgMHgxYSwgMHg0YywK KyAgICAweDhkLCAweGJkLCAweDljLCAweDFhLCAweDBiLCAweDljLCAweDkxLCAweDE2LAorICAg IDB4NGMsIDB4ZmYsIDB4MzEsIDB4MzYsIDB4YmIsIDB4Y2IsIDB4NjQsIDB4MWEsCisgICAgMHhm NywgMHgwMiwgMHg4MSwgMHg4MCwgMHgzMiwgMHg2NSwgMHgwOSwgMHhkZiwKKyAgICAweGNhLCAw eGVlLCAweGEyLCAweGRiLCAweDNiLCAweDU4LCAweGM5LCAweDg2LAorICAgIDB4YjgsIDB4NTMs IDB4OGEsIDB4ZDUsIDB4MGQsIDB4OTksIDB4ODIsIDB4NWMsCisgICAgMHhlMCwgMHg4NCwgMHg3 YywgMHhjMiwgMHhjZiwgMHgzYSwgMHhkMywgMHhjZSwKKyAgICAweDJlLCAweDU0LCAweDkzLCAw eGJlLCAweDNhLCAweDMwLCAweDE0LCAweDYwLAorICAgIDB4YmIsIDB4YWEsIDB4MDUsIDB4NDEs IDB4YWEsIDB4MmIsIDB4MWYsIDB4MTcsCisgICAgMHhhYSwgMHhiOSwgMHg3MiwgMHgxMiwgMHhm OSwgMHhlOSwgMHhmNSwgMHhlNiwKKyAgICAweDM5LCAweGU0LCAweGY5LCAweDljLCAweDAzLCAw eGY1LCAweDc1LCAweDE2LAorICAgIDB4YzYsIDB4N2YsIDB4ZjEsIDB4MWYsIDB4MTAsIDB4Yzgs IDB4NTQsIDB4YjEsCisgICAgMHhlNiwgMHg4NCwgMHgxNSwgMHhiMCwgMHhiMCwgMHg3YSwgMHg3 YSwgMHg5ZSwKKyAgICAweDhjLCAweDRhLCAweGQxLCAweDhjLCAweGYxLCAweDkxLCAweDMyLCAw eGViLAorICAgIDB4NzEsIDB4YTYsIDB4YmYsIDB4ZGIsIDB4MWYsIDB4Y2MsIDB4ZDgsIDB4Y2Is CisgICAgMHg5MiwgMHhjMywgMHhmMiwgMHhhZiwgMHg4OSwgMHgyMiwgMHgzMiwgMHhmZCwKKyAg ICAweDMyLCAweDEyLCAweGRhLCAweGJiLCAweGFjLCAweDU1LCAweDY4LCAweDAxLAorICAgIDB4 NzgsIDB4NTYsIDB4ODksIDB4N2MsIDB4YjAsIDB4MGUsIDB4OWUsIDB4Y2MsCisgICAgMHhjNiwg MHgyOCwgMHgwNCwgMHg3ZSwgMHg4MywgMHhmNSwgMHg5NiwgMHgzMCwKKyAgICAweDkyLCAweDUx LCAweGYyLCAweDFiLCAweDAyLCAweDgxLCAweDgxLCAweDAwLAorICAgIDB4ODMsIDB4NmQsIDB4 ZDEsIDB4OTgsIDB4OTAsIDB4NDEsIDB4OGMsIDB4YTcsCisgICAgMHg5MiwgMHg4MywgMHhhYywg MHg4OSwgMHgwNSwgMHgwYywgMHg3OSwgMHg2NywKKyAgICAweDkwLCAweGI2LCAweGExLCAweGYz LCAweDJmLCAweGNhLCAweGYwLCAweDE1LAorICAgIDB4ZTAsIDB4MzAsIDB4NTgsIDB4ZTksIDB4 NGYsIDB4Y2IsIDB4NGMsIDB4NTYsCisgICAgMHg1NiwgMHg1NiwgMHgxNCwgMHgzZiwgMHgxYiwg MHg3OSwgMHhiNiwgMHhlZiwKKyAgICAweDU3LCAweDRiLCAweDI4LCAweGJkLCAweGIwLCAweGU2 LCAweDBjLCAweDQ5LAorICAgIDB4NGIsIDB4YmUsIDB4ZTEsIDB4NTcsIDB4MjgsIDB4MmEsIDB4 MjMsIDB4NWUsCisgICAgMHhjNCwgMHhhMiwgMHgxOSwgMHg0YiwgMHgwMCwgMHg2NywgMHg3OCwg MHhkOSwKKyAgICAweDI2LCAweDZlLCAweDE3LCAweDI1LCAweGNlLCAweGU0LCAweGZkLCAweGRl LAorICAgIDB4ODYsIDB4YTgsIDB4NWEsIDB4NjcsIDB4NDcsIDB4NmIsIDB4MTUsIDB4MDksCisg ICAgMHhlMSwgMHhlYywgMHg4ZSwgMHg2MiwgMHg5OCwgMHg5MSwgMHg2ZiwgMHhjMCwKKyAgICAw eDk4LCAweDBjLCAweDcwLCAweDBlLCAweDdkLCAweGJlLCAweDYzLCAweGJkLAorICAgIDB4MTIs IDB4NWEsIDB4OTgsIDB4MWMsIDB4ZTMsIDB4MGMsIDB4ZmIsIDB4YzcsCisgICAgMHhmYiwgMHgx YiwgMHhiZCwgMHgwMiwgMHg4NywgMHhjYywgMHgwYywgMHhiYiwKKyAgICAweGMyLCAweGQ0LCAw eGI2LCAweGMxLCAweGExLCAweDIzLCAweGQzLCAweDFlLAorICAgIDB4MjEsIDB4NmYsIDB4NDgs IDB4YmEsIDB4MGUsIDB4MmUsIDB4YzcsIDB4NDIKK307CisKK3N0YXRpYyBjb25zdCB1aW50OF90 IHJzYTQwOTZfcHJpdl9rZXlbXSA9IHsKKyAgICAweDMwLCAweDgyLCAweDA5LCAweDI5LCAweDAy LCAweDAxLCAweDAwLCAweDAyLAorICAgIDB4ODIsIDB4MDIsIDB4MDEsIDB4MDAsIDB4Y2MsIDB4 MzAsIDB4YzYsIDB4OTAsCisgICAgMHg0OSwgMHgyYiwgMHg4NiwgMHhlNywgMHg3YSwgMHhhNSwg MHg3YSwgMHg5YSwKKyAgICAweDRmLCAweGVlLCAweDBlLCAweGExLCAweDVjLCAweDQzLCAweDY0 LCAweGQwLAorICAgIDB4NzYsIDB4ZTEsIDB4ZmQsIDB4MGIsIDB4ZmQsIDB4NDMsIDB4N2EsIDB4 NjUsCisgICAgMHhlNiwgMHgyMCwgMHhiZCwgMHhmMiwgMHgwZSwgMHhiZSwgMHg3NiwgMHg1NCwK KyAgICAweGFlLCAweDM3LCAweGJlLCAweGEwLCAweDAyLCAweDk2LCAweGFlLCAweDhkLAorICAg IDB4OGEsIDB4YWUsIDB4M2IsIDB4ODgsIDB4YmIsIDB4NjcsIDB4Y2UsIDB4N2MsCisgICAgMHgy MCwgMHhiZiwgMHgxNCwgMHhjMywgMHg3MSwgMHg1MSwgMHg4NywgMHgwMywKKyAgICAweDM0LCAw eGFhLCAweDNjLCAweDA5LCAweGZmLCAweGU5LCAweGViLCAweGI3LAorICAgIDB4ODUsIDB4NWMs IDB4YmIsIDB4OGQsIDB4Y2UsIDB4OGUsIDB4M2YsIDB4ZDEsCisgICAgMHgxNiwgMHgzMCwgMHgw MCwgMHgzMiwgMHgyZiwgMHgyNSwgMHg4ZCwgMHhlZiwKKyAgICAweDcxLCAweGQ5LCAweGVhLCAw eDZiLCAweDQ1LCAweDUzLCAweDQ5LCAweGMzLAorICAgIDB4MDksIDB4NGYsIDB4YjAsIDB4YTgs IDB4YTUsIDB4ODksIDB4NzYsIDB4NTksCisgICAgMHgzMSwgMHhhNSwgMHhmMSwgMHg1YywgMHg0 MiwgMHg1NCwgMHg1NywgMHg3MCwKKyAgICAweDU3LCAweGFkLCAweGQ4LCAweGViLCAweDg5LCAw eGE2LCAweDg3LCAweGEyLAorICAgIDB4NmMsIDB4OTUsIDB4NTgsIDB4OGYsIDB4YjYsIDB4ODIs IDB4YzcsIDB4ZGUsCisgICAgMHhjMiwgMHgzYSwgMHhkYywgMHg1YiwgMHhlOCwgMHgwMiwgMHhj YywgMHgyNiwKKyAgICAweDRiLCAweDAxLCAweGFhLCAweGU2LCAweGYzLCAweDY2LCAweDRkLCAw eDkwLAorICAgIDB4ODUsIDB4ZGUsIDB4ZjQsIDB4NWQsIDB4ODAsIDB4OTgsIDB4YzYsIDB4NjUs CisgICAgMHhjZiwgMHg0NCwgMHg0YywgMHhkZSwgMHhiNSwgMHg0YSwgMHhmYywgMHhkYSwKKyAg ICAweDBhLCAweDBhLCAweDEwLCAweDI2LCAweGEzLCAweGNiLCAweDlkLCAweGU0LAorICAgIDB4 OGQsIDB4YWIsIDB4MmMsIDB4MDQsIDB4ZmQsIDB4YWEsIDB4ZmMsIDB4M2IsCisgICAgMHhhYywg MHg0ZSwgMHg1NiwgMHhiOCwgMHg0YywgMHg5ZiwgMHgyMiwgMHg0OSwKKyAgICAweGNiLCAweDc2 LCAweDQ1LCAweDI0LCAweDM2LCAweDJkLCAweGJiLCAweGU2LAorICAgIDB4N2UsIDB4YTksIDB4 OTMsIDB4MTMsIDB4OTYsIDB4MWUsIDB4ZmMsIDB4NGIsCisgICAgMHg3NSwgMHhkNCwgMHg1NCwg MHhjOCwgMHg4YywgMHg1NSwgMHhlNiwgMHgzZiwKKyAgICAweDA5LCAweDVhLCAweDAzLCAweDc0 LCAweDdjLCAweDhhLCAweGM4LCAweGU3LAorICAgIDB4NDksIDB4MGIsIDB4ODYsIDB4N2MsIDB4 OTcsIDB4YTAsIDB4ZjIsIDB4MGQsCisgICAgMHhmMSwgMHg1YywgMHgwZSwgMHg3YSwgMHhjMCwg MHgzZiwgMHg3OCwgMHgyZCwKKyAgICAweDliLCAweGUyLCAweDI2LCAweGEwLCAweDg5LCAweDQ5 LCAweDBjLCAweGFkLAorICAgIDB4NzksIDB4YTYsIDB4ODIsIDB4OTgsIDB4YTYsIDB4YjcsIDB4 NzQsIDB4YjQsCisgICAgMHg0NSwgMHhjOCwgMHhlZCwgMHhlYSwgMHg4MSwgMHhjZCwgMHhmMCwg MHgzYiwKKyAgICAweDhlLCAweDI0LCAweGZiLCAweDBjLCAweGQwLCAweDNhLCAweDE0LCAweGI5 LAorICAgIDB4YjQsIDB4M2IsIDB4NjksIDB4ZDksIDB4ZjIsIDB4NDIsIDB4NmUsIDB4N2YsCisg ICAgMHg2ZiwgMHg1ZSwgMHhiMSwgMHg1MiwgMHg1YiwgMHhhYSwgMHhlZiwgMHhhZSwKKyAgICAw eDFlLCAweDM0LCAweGNhLCAweGVkLCAweDBhLCAweDhkLCAweDU2LCAweGQ2LAorICAgIDB4ZGQs IDB4ZDQsIDB4MmMsIDB4NTQsIDB4N2EsIDB4NTcsIDB4Y2EsIDB4N2UsCisgICAgMHg0YSwgMHgx MSwgMHhkZSwgMHg0OCwgMHhkZiwgMHgyYiwgMHgwOSwgMHg5NywKKyAgICAweDM5LCAweDI0LCAw eGNlLCAweDQ1LCAweGUwLCAweDc1LCAweGIxLCAweDE5LAorICAgIDB4NDIsIDB4ZGIsIDB4NjMs IDB4NDAsIDB4OWIsIDB4YjksIDB4OTUsIDB4OTYsCisgICAgMHg3OCwgMHg5MSwgMHhkNSwgMHgx OSwgMHgxMiwgMHhhYiwgMHhlZiwgMHg1NSwKKyAgICAweDZmLCAweDBkLCAweDY1LCAweGMwLCAw eDhmLCAweDYyLCAweDk5LCAweDc4LAorICAgIDB4YzAsIDB4ZTAsIDB4ZTEsIDB4MzMsIDB4Yzcs IDB4NjgsIDB4ZmYsIDB4MjksCisgICAgMHg2NiwgMHgyMiwgMHgzYSwgMHg2ZiwgMHhhMCwgMHhm OCwgMHg1YywgMHg2OCwKKyAgICAweDliLCAweGE5LCAweDA1LCAweGFkLCAweDZiLCAweDFkLCAw eGFlLCAweGMxLAorICAgIDB4MzAsIDB4YmIsIDB4ZmUsIDB4YjcsIDB4MzEsIDB4ODUsIDB4MGQs IDB4ZDEsCisgICAgMHhkNSwgMHhmYywgMHg0MywgMHgxZSwgMHhiMywgMHg2MSwgMHg2ZiwgMHhj NCwKKyAgICAweDc1LCAweGVkLCAweDc2LCAweDlkLCAweDEzLCAweGIzLCAweDYxLCAweDU3LAor ICAgIDB4YzgsIDB4MzMsIDB4MGQsIDB4NzcsIDB4ODQsIDB4ZjAsIDB4YzcsIDB4NjIsCisgICAg MHhiOSwgMHg5ZSwgMHhkNSwgMHgwMSwgMHhmYSwgMHg4NywgMHg0YSwgMHhmNSwKKyAgICAweGQ3 LCAweDRmLCAweDVkLCAweGFlLCAweGU3LCAweDA4LCAweGQyLCAweDVhLAorICAgIDB4NjUsIDB4 MzAsIDB4YzksIDB4ZjAsIDB4MGEsIDB4MTEsIDB4ZjEsIDB4MmEsCisgICAgMHhkMywgMHg0Mywg MHg0MywgMHhjYSwgMHgwNSwgMHg5MCwgMHg4NSwgMHhmNCwKKyAgICAweGJjLCAweDM3LCAweDQ5 LCAweDQwLCAweDQ1LCAweDM1LCAweGQzLCAweDU2LAorICAgIDB4MDYsIDB4NGMsIDB4NjMsIDB4 OTMsIDB4MDcsIDB4MTQsIDB4OGIsIDB4ZDMsCisgICAgMHgxMiwgMHhkMCwgMHhlNSwgMHgwMCwg MHg0OCwgMHg3NiwgMHhkMiwgMHhkZiwKKyAgICAweDdjLCAweGVhLCAweGM3LCAweGZmLCAweGYw LCAweDg4LCAweGQ1LCAweGE0LAorICAgIDB4NjEsIDB4N2QsIDB4NzksIDB4YzIsIDB4ZGEsIDB4 NTMsIDB4MjQsIDB4ZGMsCisgICAgMHgyMCwgMHhhZSwgMHhlNiwgMHgwOCwgMHg2NSwgMHhlZiwg MHhjOSwgMHgwZCwKKyAgICAweDdkLCAweDY2LCAweDZkLCAweDFiLCAweDFjLCAweDVkLCAweDQ2 LCAweGUxLAorICAgIDB4MjYsIDB4OGEsIDB4MjksIDB4NzcsIDB4NzYsIDB4MTksIDB4ZTUsIDB4 MTksCisgICAgMHgyYSwgMHg3NSwgMHgyMSwgMHhmMSwgMHg5MiwgMHg4YSwgMHg5YywgMHg3YiwK KyAgICAweGU4LCAweDBiLCAweDM4LCAweGMxLCAweGJmLCAweDc2LCAweDIyLCAweDQ1LAorICAg IDB4NGEsIDB4ZDMsIDB4NDMsIDB4YzMsIDB4OGMsIDB4NzQsIDB4ZDgsIDB4ZDgsCisgICAgMHhl YywgMHgzZSwgMHgxNCwgMHhkZiwgMHgwMiwgMHgwMywgMHgwMSwgMHgwMCwKKyAgICAweDAxLCAw eDAyLCAweDgyLCAweDAyLCAweDAxLCAweDAwLCAweDllLCAweDEzLAorICAgIDB4NjQsIDB4YTUs IDB4NmUsIDB4ZmYsIDB4ZjMsIDB4ODAsIDB4NjAsIDB4YzIsCisgICAgMHg5YiwgMHgxNywgMHhi YiwgMHhhOSwgMHg2MCwgMHg0YSwgMHgyYiwgMHg1MywKKyAgICAweDQxLCAweDQ4LCAweGUxLCAw eGMwLCAweDMyLCAweDU2LCAweDg1LCAweGNiLAorICAgIDB4MjcsIDB4ODYsIDB4OWIsIDB4OTEs IDB4ZGQsIDB4N2EsIDB4ZjcsIDB4NGYsCisgICAgMHgxYiwgMHhlYywgMHg5MiwgMHhiMywgMHgz NSwgMHgzMCwgMHg0YSwgMHhkMCwKKyAgICAweGJjLCAweDcxLCAweDc3LCAweDViLCAweDRiLCAw eDViLCAweDlmLCAweDM5LAorICAgIDB4Y2QsIDB4ZjAsIDB4ZWEsIDB4YTksIDB4MDMsIDB4M2Es IDB4MGIsIDB4MTAsCisgICAgMHg0MiwgMHhhNSwgMHg4OCwgMHhiMCwgMHgwMSwgMHhhYSwgMHhm YywgMHgyMywKKyAgICAweGVjLCAweDA4LCAweDM3LCAweDg2LCAweDgyLCAweGVjLCAweDU1LCAw eDZjLAorICAgIDB4NmEsIDB4OWIsIDB4NDMsIDB4YzIsIDB4MDUsIDB4NjQsIDB4ZDQsIDB4N2Is CisgICAgMHgwZSwgMHg1NiwgMHhjMCwgMHg5ZCwgMHgyMywgMHg4ZCwgMHhjOCwgMHgyZCwKKyAg ICAweGEyLCAweDdkLCAweDBiLCAweDQ4LCAweDU2LCAweDRiLCAweDM5LCAweDVjLAorICAgIDB4 MjEsIDB4ZjMsIDB4MGIsIDB4MmMsIDB4OWMsIDB4OWQsIDB4ZmYsIDB4ZmIsCisgICAgMHhhYiwg MHg3NSwgMHg5ZCwgMHg2YiwgMHg0OCwgMHhmMywgMHg4ZiwgMHhhZCwKKyAgICAweDBjLCAweDc0 LCAweDAxLCAweGZiLCAweGRjLCAweDgzLCAweGU1LCAweDk3LAorICAgIDB4NzksIDB4ODQsIDB4 NGEsIDB4NzksIDB4YTYsIDB4ZmUsIDB4YmYsIDB4YWUsCisgICAgMHhlYSwgMHhiYywgMHhmYSwg MHg3NCwgMHg2MCwgMHgwYSwgMHg0YiwgMHg4NCwKKyAgICAweDc3LCAweGE3LCAweGRhLCAweGZi LCAweGFmLCAweGQyLCAweDczLCAweDJiLAorICAgIDB4ZDIsIDB4ZWMsIDB4MWUsIDB4NzksIDB4 OTEsIDB4YzksIDB4MTgsIDB4MzAsCisgICAgMHhlNSwgMHg2ZiwgMHgyNywgMHgzNiwgMHg4Mywg MHgyYSwgMHg2NiwgMHhjMywKKyAgICAweGNiLCAweDg4LCAweDk0LCAweGU0LCAweDVmLCAweDNm LCAweGJkLCAweGUyLAorICAgIDB4MTEsIDB4NDMsIDB4NjEsIDB4MzEsIDB4ODQsIDB4OTEsIDB4 NDksIDB4NDAsCisgICAgMHgyOSwgMHgxYiwgMHg1OCwgMHgxOCwgMHg0NywgMHg4ZSwgMHhiMSwg MHgyMiwKKyAgICAweGQ2LCAweGM0LCAweGFhLCAweDZhLCAweDNkLCAweDIyLCAweDdjLCAweGE1 LAorICAgIDB4YTAsIDB4NGMsIDB4MGEsIDB4ZmMsIDB4NDYsIDB4NjYsIDB4YmIsIDB4YmUsCisg ICAgMHgwNCwgMHg3MSwgMHhlOCwgMHg5YiwgMHg3NiwgMHhmMSwgMHg0NywgMHgzOSwKKyAgICAw eDZhLCAweDJmLCAweDIzLCAweGFkLCAweDc4LCAweDgwLCAweDFjLCAweDIyLAorICAgIDB4Y2Qs IDB4NDEsIDB4NWUsIDB4MDksIDB4MTYsIDB4NmMsIDB4OTEsIDB4NDgsCisgICAgMHg5MSwgMHg5 MSwgMHgzZCwgMHg4YywgMHhlNiwgMHhiYSwgMHg4MSwgMHg4ZCwKKyAgICAweGJiLCAweGYyLCAw eGQwLCAweGFhLCAweGM3LCAweDhmLCAweGM2LCAweDAxLAorICAgIDB4NjAsIDB4YTcsIDB4ZWYs IDB4MWUsIDB4OGUsIDB4OTEsIDB4NmQsIDB4Y2MsCisgICAgMHgzMCwgMHg5ZSwgMHhlYSwgMHg3 YywgMHg1NiwgMHg5ZCwgMHg0MiwgMHhjZiwKKyAgICAweDQ0LCAweDg1LCAweDUyLCAweGE4LCAw eGYyLCAweDM2LCAweDljLCAweDQ2LAorICAgIDB4ZmEsIDB4OWQsIDB4ZDMsIDB4NGUsIDB4MTMs IDB4NDYsIDB4ODEsIDB4Y2UsCisgICAgMHg5OSwgMHhjOSwgMHg1OCwgMHg0NywgMHhlNCwgMHhl YiwgMHgyNywgMHg1NiwKKyAgICAweDI5LCAweDYxLCAweDBmLCAweGI1LCAweGNiLCAweGYzLCAw eDQ4LCAweDU4LAorICAgIDB4OGYsIDB4YmMsIDB4YWYsIDB4MGEsIDB4YmYsIDB4NDAsIDB4ZDEs IDB4ZjYsCisgICAgMHg0ZiwgMHhkMiwgMHg4OSwgMHg0YSwgMHhmZiwgMHg2ZiwgMHg1NCwgMHg3 MCwKKyAgICAweDQ5LCAweDQyLCAweGY2LCAweGY4LCAweDBlLCAweDRmLCAweGE1LCAweGY2LAor ICAgIDB4OGIsIDB4NDksIDB4ODAsIDB4ZDQsIDB4ZjUsIDB4MDMsIDB4ZjgsIDB4NjUsCisgICAg MHhlNywgMHgxZiwgMHgwYSwgMHhjMCwgMHg4ZiwgMHhkMywgMHg3YSwgMHg3MCwKKyAgICAweGNh LCAweDY3LCAweGFmLCAweDcxLCAweGZkLCAweDRiLCAweGUxLCAweDE3LAorICAgIDB4NzYsIDB4 NzQsIDB4MmUsIDB4MTIsIDB4N2IsIDB4YWQsIDB4NGIsIDB4YmIsCisgICAgMHhkMiwgMHg2NCwg MHhkMCwgMHhhOSwgMHhmOSwgMHg3OSwgMHhhOSwgMHhhNiwKKyAgICAweDAzLCAweGQyLCAweGMy LCAweDhmLCAweDQ3LCAweDU5LCAweDFiLCAweDdjLAorICAgIDB4ZTMsIDB4Y2UsIDB4OTIsIDB4 YjIsIDB4YWMsIDB4M2UsIDB4ZWUsIDB4MTIsCisgICAgMHg0MywgMHg1ZiwgMHgyMywgMHhlYywg MHhmMSwgMHhkMywgMHhmMiwgMHgyMSwKKyAgICAweDIyLCAweGU4LCAweDdlLCAweDdmLCAweGE0 LCAweDkzLCAweDhlLCAweDc4LAorICAgIDB4NjksIDB4NjksIDB4YTAsIDB4YzksIDB4Y2UsIDB4 ODYsIDB4MzYsIDB4MTMsCisgICAgMHgxMCwgMHgyMSwgMHhjNCwgMHg3YSwgMHg1MiwgMHhjZiwg MHg1MywgMHhkOSwKKyAgICAweDliLCAweDU4LCAweGU2LCAweDJkLCAweGViLCAweDYwLCAweGUz LCAweDc1LAorICAgIDB4MWEsIDB4MjIsIDB4ZjYsIDB4M2MsIDB4NTQsIDB4NmIsIDB4ZmEsIDB4 YTEsCisgICAgMHg1ZCwgMHhmNiwgMHgzOCwgMHhmMCwgMHhkNCwgMHgyNiwgMHgyZCwgMHg3ZCwK KyAgICAweDc0LCAweDk5LCAweDZhLCAweDEzLCAweDhhLCAweDA3LCAweDlmLCAweDA3LAorICAg IDB4YzUsIDB4ZjQsIDB4YTgsIDB4MjAsIDB4MTEsIDB4YTksIDB4NzYsIDB4MTEsCisgICAgMHhl NCwgMHg0OCwgMHhhZSwgMHhhNCwgMHg4YSwgMHhhMSwgMHhiZiwgMHgxZiwKKyAgICAweGJhLCAw eDM3LCAweDUwLCAweDUzLCAweDQzLCAweDkxLCAweDQ1LCAweDg4LAorICAgIDB4MDMsIDB4NTIs IDB4YmEsIDB4YWMsIDB4YzgsIDB4ZTMsIDB4ZTEsIDB4YmEsCisgICAgMHg2MywgMHgyNCwgMHg3 MiwgMHhiZSwgMHgxZCwgMHgwMSwgMHgxZiwgMHg2YywKKyAgICAweDM0LCAweDEwLCAweGI4LCAw eDU2LCAweDRhLCAweDY3LCAweDI4LCAweDRiLAorICAgIDB4N2EsIDB4MmIsIDB4MzEsIDB4Mjks IDB4NDcsIDB4ZGEsIDB4ZGYsIDB4NTMsCisgICAgMHg4OCwgMHg3OSwgMHgyMiwgMHgzMSwgMHgx NSwgMHg1NiwgMHhlMywgMHhhMCwKKyAgICAweDc5LCAweDc1LCAweDk0LCAweDkwLCAweGIyLCAw eGU4LCAweDRiLCAweGNhLAorICAgIDB4ODIsIDB4NmQsIDB4M2MsIDB4NjksIDB4NDMsIDB4MDEs IDB4MDIsIDB4ODIsCisgICAgMHgwMSwgMHgwMSwgMHgwMCwgMHhlNywgMHg4YiwgMHhkNiwgMHgx YSwgMHhlOCwKKyAgICAweDAwLCAweGVkLCAweDlkLCAweDdjLCAweDVhLCAweDMyLCAweDEwLCAw eGMxLAorICAgIDB4NTMsIDB4NTAsIDB4YmUsIDB4MjcsIDB4MWQsIDB4ZWYsIDB4NjksIDB4NzMs CisgICAgMHhhMiwgMHg4ZiwgMHg5NSwgMHg5NiwgMHg4NiwgMHhmZSwgMHhmYiwgMHg4MiwKKyAg ICAweGRiLCAweGVhLCAweDdkLCAweDczLCAweDVhLCAweDJiLCAweGU3LCAweDRiLAorICAgIDB4 ZDUsIDB4OGYsIDB4NGYsIDB4YWYsIDB4ODUsIDB4MWQsIDB4MTUsIDB4MWEsCisgICAgMHg1OCwg MHg1ZiwgMHg0MSwgMHg3OSwgMHg3MCwgMHg1YywgMHg4ZiwgMHhhOSwKKyAgICAweDhlLCAweDIz LCAweDMxLCAweGE3LCAweDZkLCAweDk5LCAweDBjLCAweGYwLAorICAgIDB4NTEsIDB4YmYsIDB4 YmIsIDB4ZDMsIDB4ZTMsIDB4YTMsIDB4MzQsIDB4ZjAsCisgICAgMHgxZCwgMHg3ZiwgMHg0YSwg MHhiNywgMHg4ZiwgMHhmNiwgMHgwYSwgMHg0OSwKKyAgICAweDY1LCAweGFmLCAweDM1LCAweDdi LCAweDAyLCAweDJlLCAweDY5LCAweDQ5LAorICAgIDB4OTUsIDB4YjUsIDB4MjAsIDB4NzAsIDB4 YjIsIDB4OTgsIDB4NTQsIDB4OWIsCisgICAgMHg4ZSwgMHg0ZiwgMHg0OCwgMHhhOCwgMHhmYSwg MHg3ZSwgMHhjNywgMHgwYSwKKyAgICAweGFlLCAweDg0LCAweGUxLCAweGJhLCAweDg1LCAweDk4 LCAweDk2LCAweDhhLAorICAgIDB4N2MsIDB4ZGQsIDB4Y2MsIDB4Y2QsIDB4ZDgsIDB4NWIsIDB4 NTAsIDB4NjAsCisgICAgMHg4OCwgMHgyZCwgMHhiNiwgMHgzZSwgMHhiOCwgMHhjMiwgMHhhZSwg MHhhNSwKKyAgICAweDYyLCAweDEwLCAweGNkLCAweGRjLCAweGFlLCAweDg2LCAweGZlLCAweDMx LAorICAgIDB4OGIsIDB4ZjcsIDB4ZWUsIDB4MWEsIDB4MzUsIDB4NDYsIDB4ODMsIDB4ZWUsCisg ICAgMHg1ZiwgMHg1NSwgMHg5YSwgMHhjMiwgMHhjYSwgMHg1MywgMHhiNywgMHgyYywKKyAgICAw eGJmLCAweDAzLCAweDhhLCAweDc4LCAweGNjLCAweDFkLCAweDk2LCAweDdiLAorICAgIDB4YWMs IDB4MDAsIDB4NjIsIDB4MWUsIDB4YmQsIDB4NmYsIDB4MGIsIDB4YTUsCisgICAgMHhlYywgMHhm MywgMHgwMiwgMHg0NywgMHg0NywgMHgxZSwgMHgzZCwgMHhmNiwKKyAgICAweDc4LCAweDQyLCAw eGU0LCAweGNkLCAweGY4LCAweDE0LCAweGEzLCAweDdkLAorICAgIDB4ZDUsIDB4MmYsIDB4NmUs IDB4Y2MsIDB4MWEsIDB4OWUsIDB4ZTcsIDB4Y2YsCisgICAgMHg0OCwgMHhiOSwgMHg4MCwgMHhi OCwgMHhiYSwgMHhhYSwgMHg3YiwgMHhhZSwKKyAgICAweDY1LCAweDc0LCAweDA5LCAweDdiLCAw eDQzLCAweDI2LCAweDMxLCAweGEyLAorICAgIDB4OTUsIDB4NDMsIDB4NjksIDB4ZDAsIDB4Yjcs IDB4OTUsIDB4ZTQsIDB4NzYsCisgICAgMHgyYywgMHg0MiwgMHgxOSwgMHg0NywgMHg0ZiwgMHg2 MywgMHgzNSwgMHg5YywKKyAgICAweGEyLCAweDFhLCAweGNlLCAweDI4LCAweGRmLCAweDc2LCAw eDk4LCAweDFkLAorICAgIDB4ZDQsIDB4MmUsIDB4ZjYsIDB4M2EsIDB4YzgsIDB4M2UsIDB4Yzcs IDB4YWYsCisgICAgMHhmNywgMHgzOCwgMHgzZiwgMHg4MywgMHgzYSwgMHhjYiwgMHhhZSwgMHg0 MSwKKyAgICAweDc1LCAweDQ2LCAweDYzLCAweGFhLCAweDQ1LCAweGIxLCAweDJjLCAweGQ5LAor ICAgIDB4OWYsIDB4MTcsIDB4MzcsIDB4MDIsIDB4ODIsIDB4MDEsIDB4MDEsIDB4MDAsCisgICAg MHhlMSwgMHhjMSwgMHg1NywgMHg0ZCwgMHgwZiwgMHhhNSwgMHhlYSwgMHgxZCwKKyAgICAweDM5 LCAweDljLCAweGUwLCAweGYwLCAweDZkLCAweDEzLCAweDdmLCAweDc5LAorICAgIDB4ZGMsIDB4 NzIsIDB4NjEsIDB4YzAsIDB4N2YsIDB4ODgsIDB4ZjYsIDB4MzgsCisgICAgMHg0ZiwgMHg0OSwg MHgwNiwgMHgxZSwgMHhiOCwgMHg2YywgMHgyMSwgMHgwNCwKKyAgICAweDYwLCAweDc2LCAweDVh LCAweDZkLCAweDA0LCAweGQxLCAweDZkLCAweGFjLAorICAgIDB4N2MsIDB4MjUsIDB4NGYsIDB4 MzIsIDB4Y2IsIDB4YmMsIDB4ZjgsIDB4NGEsCisgICAgMHgyMiwgMHg4ZiwgMHhmNSwgMHg0MSwg MHhmZCwgMHgxYywgMHg3NiwgMHgzMCwKKyAgICAweGMyLCAweDVmLCAweDk5LCAweDEzLCAweDVj LCAweDU3LCAweDBmLCAweGZkLAorICAgIDB4YWMsIDB4MGIsIDB4MTAsIDB4OWEsIDB4NGYsIDB4 NzgsIDB4MGEsIDB4ODYsCisgICAgMHhlOCwgMHgwNywgMHg0MCwgMHg0MCwgMHgxMywgMHhiYSwg MHg5NiwgMHgwNywKKyAgICAweGQ1LCAweDM5LCAweDkxLCAweDUxLCAweDNlLCAweDgwLCAweGQ4 LCAweGEwLAorICAgIDB4MWYsIDB4ZmYsIDB4ZGMsIDB4OWUsIDB4MDksIDB4M2IsIDB4YWUsIDB4 MzgsCisgICAgMHhhOSwgMHhjMiwgMHgxNCwgMHg3YiwgMHhlZSwgMHhkMiwgMHg2OSwgMHgzZCwK KyAgICAweGQ2LCAweDI2LCAweDc0LCAweDcyLCAweDdiLCAweDg2LCAweGQ0LCAweDEzLAorICAg IDB4NWIsIDB4YjgsIDB4NzYsIDB4NGIsIDB4MDgsIDB4ZmIsIDB4OTMsIDB4ZmEsCisgICAgMHg0 NCwgMHhhZiwgMHg5OCwgMHgzYiwgMHhmYSwgMHhkMCwgMHgyYSwgMHgwNCwKKyAgICAweDhiLCAw eGIzLCAweDNjLCAweDZkLCAweDMyLCAweGY3LCAweDE4LCAweDZhLAorICAgIDB4NTEsIDB4MGUs IDB4NDAsIDB4OTAsIDB4Y2UsIDB4OGUsIDB4ZGYsIDB4ZTgsCisgICAgMHgwNywgMHg0YywgMHgw ZiwgMHhjNywgMHhjOCwgMHhjMiwgMHgxOCwgMHg1OCwKKyAgICAweDZhLCAweDAxLCAweGM4LCAw eDI3LCAweGQ2LCAweDQzLCAweDJhLCAweGZiLAorICAgIDB4YTUsIDB4MzQsIDB4MDEsIDB4M2Ms IDB4NzIsIDB4YjEsIDB4NDgsIDB4Y2UsCisgICAgMHgyYiwgMHg5YiwgMHhiNCwgMHg2OSwgMHhk OSwgMHg4MiwgMHhmOCwgMHhiZSwKKyAgICAweDI5LCAweDg4LCAweDc1LCAweDk2LCAweGQ4LCAw eGVmLCAweDc4LCAweDJhLAorICAgIDB4MDcsIDB4OTAsIDB4YTAsIDB4NTYsIDB4MzMsIDB4NDIs IDB4MDUsIDB4MTksCisgICAgMHhiMCwgMHg2OSwgMHgzNCwgMHhmOSwgMHgwMywgMHhjNSwgMHhh OCwgMHgwZCwKKyAgICAweDcyLCAweGEyLCAweDI3LCAweGI0LCAweDQ1LCAweDZkLCAweGQyLCAw eDAxLAorICAgIDB4NmMsIDB4ZjEsIDB4NzQsIDB4NTEsIDB4MGEsIDB4OWEsIDB4ZTIsIDB4YzEs CisgICAgMHg5NiwgMHg4MCwgMHgzMCwgMHgwZSwgMHhjNiwgMHhhOSwgMHg3OSwgMHhmNywKKyAg ICAweDZmLCAweGFmLCAweGY2LCAweGU4LCAweDJhLCAweGNjLCAweGJkLCAweGFkLAorICAgIDB4 OGYsIDB4ZTAsIDB4MzIsIDB4ODcsIDB4ODUsIDB4NDksIDB4NjgsIDB4ODgsCisgICAgMHgxNSwg MHg1YywgMHhkYiwgMHg0OCwgMHg0MCwgMHhhMiwgMHhmYSwgMHg0MiwKKyAgICAweGU4LCAweDRl LCAweDNlLCAweGUyLCAweDNmLCAweGUwLCAweGYzLCAweDk5LAorICAgIDB4MDIsIDB4ODIsIDB4 MDEsIDB4MDAsIDB4MDgsIDB4MzksIDB4OTcsIDB4NjksCisgICAgMHg2ZCwgMHg0NCwgMHg1Yiwg MHgyYywgMHg3NCwgMHhmNiwgMHg1ZiwgMHg0MCwKKyAgICAweGU5LCAweDFkLCAweDI0LCAweDg5 LCAweDFjLCAweGFhLCAweDliLCAweDhlLAorICAgIDB4OGIsIDB4NjUsIDB4MDIsIDB4ZTQsIDB4 YjUsIDB4NmMsIDB4MjYsIDB4MzIsCisgICAgMHg5OCwgMHhmYiwgMHg2NiwgMHhlMCwgMHhmZCwg MHhlZiwgMHhmZSwgMHgwZiwKKyAgICAweDQxLCAweDRhLCAweDVjLCAweGM0LCAweGRmLCAweGRm LCAweDQyLCAweGExLAorICAgIDB4MzUsIDB4NDYsIDB4NWUsIDB4NWIsIDB4ZGQsIDB4MGMsIDB4 NzgsIDB4YmQsCisgICAgMHg0MSwgMHhiMCwgMHhhMiwgMHhkZiwgMHg2OCwgMHhhYiwgMHgyMywg MHhmYywKKyAgICAweGE5LCAweGFjLCAweGJkLCAweGJhLCAweGQ2LCAweDU0LCAweDA3LCAweGMw LAorICAgIDB4MjEsIDB4YTcsIDB4NmEsIDB4OTYsIDB4MjQsIDB4ZGYsIDB4MjAsIDB4NDYsCisg ICAgMHg0ZCwgMHg0NSwgMHgyNywgMHg2YywgMHgyNiwgMHhlYSwgMHg3NCwgMHhlYiwKKyAgICAw eDk4LCAweDg5LCAweDkwLCAweGRkLCAweDhlLCAweDIzLCAweDQ5LCAweGY1LAorICAgIDB4Zjcs IDB4NzAsIDB4OWUsIDB4YjAsIDB4NWUsIDB4MTAsIDB4NDcsIDB4ZTAsCisgICAgMHg5YSwgMHgy OCwgMHg4OCwgMHhkZiwgMHhkYiwgMHhkOCwgMHg1MywgMHgwYiwKKyAgICAweDQ1LCAweGYwLCAw eDE5LCAweDkwLCAweGU0LCAweGRmLCAweDAyLCAweDlmLAorICAgIDB4NjAsIDB4NGUsIDB4NzYs IDB4MTEsIDB4M2IsIDB4MzksIDB4MjQsIDB4ZjEsCisgICAgMHgzZiwgMHgzZSwgMHhiNCwgMHg4 YSwgMHgxYiwgMHg4NCwgMHhiNywgMHg5NiwKKyAgICAweGRmLCAweGZiLCAweGIwLCAweGRhLCAw eGVjLCAweDYzLCAweDY4LCAweDE1LAorICAgIDB4ZDcsIDB4YTksIDB4ZGIsIDB4NDgsIDB4OWMs IDB4MTIsIDB4YzMsIDB4ZDYsCisgICAgMHg4NSwgMHhlOCwgMHg2MywgMHgxZiwgMHhkMCwgMHgx YSwgMHhiMCwgMHgxMiwKKyAgICAweDYwLCAweDYyLCAweDQzLCAweGMxLCAweDM4LCAweDg2LCAw eDUyLCAweDIzLAorICAgIDB4N2YsIDB4YzksIDB4NjIsIDB4ZjgsIDB4NzksIDB4YmYsIDB4YjQs IDB4ZmIsCisgICAgMHg0ZSwgMHg3ZSwgMHgwNywgMHgyMiwgMHg0OSwgMHg4ZSwgMHhiZSwgMHg2 YywKKyAgICAweGYwLCAweDUzLCAweDVhLCAweDUzLCAweGZkLCAweDNjLCAweDE0LCAweGQ4LAor ICAgIDB4ZjcsIDB4MmMsIDB4MDYsIDB4MmEsIDB4ZTQsIDB4NjQsIDB4ZmQsIDB4MTksCisgICAg MHg1NywgMHhhMCwgMHg5MiwgMHhmNiwgMHhhMywgMHg0MiwgMHg0NywgMHg2MSwKKyAgICAweDBi LCAweGZkLCAweDcxLCAweDVmLCAweDk4LCAweGUyLCAweDZjLCAweDk4LAorICAgIDB4YTgsIDB4 ZjksIDB4ZjksIDB4N2YsIDB4MWMsIDB4NjEsIDB4NWQsIDB4OGMsCisgICAgMHhkMSwgMHhmYiwg MHg5MCwgMHgyOCwgMHgzMiwgMHg5YiwgMHg3ZCwgMHg4MiwKKyAgICAweGY5LCAweGNjLCAweDQ3 LCAweGJlLCAweGM3LCAweDY3LCAweGM1LCAweDkzLAorICAgIDB4MjIsIDB4NTUsIDB4MGQsIDB4 ZDIsIDB4NzMsIDB4YmUsIDB4ZWEsIDB4ZWQsCisgICAgMHg0ZCwgMHhiNSwgMHhmNCwgMHhjMiwg MHgyNSwgMHg5MiwgMHg0NCwgMHgzMCwKKyAgICAweGViLCAweGFhLCAweDEzLCAweDExLCAweDAy LCAweDgyLCAweDAxLCAweDAxLAorICAgIDB4MDAsIDB4ODIsIDB4NDIsIDB4MDIsIDB4NTMsIDB4 NGUsIDB4NzIsIDB4MTYsCisgICAgMHhmMSwgMHgyMSwgMHhlYSwgMHhlOCwgMHhjNywgMHgxMCwg MHhjOCwgMHhhZCwKKyAgICAweDQ2LCAweGVjLCAweGYxLCAweDdhLCAweDgxLCAweDhkLCAweDk0 LCAweGMzLAorICAgIDB4MmMsIDB4OWUsIDB4NjIsIDB4YWUsIDB4MGIsIDB4NGYsIDB4YjEsIDB4 ZTQsCisgICAgMHgyMywgMHgxOCwgMHg1ZCwgMHg3MSwgMHhiMywgMHg3MSwgMHg5MiwgMHgzZCwK KyAgICAweDRiLCAweGM2LCAweDlkLCAweGU4LCAweDYyLCAweDkwLCAweGI3LCAweGNhLAorICAg IDB4MzMsIDB4NGMsIDB4NTksIDB4ZWYsIDB4ZDMsIDB4NTEsIDB4NmQsIDB4ZjgsCisgICAgMHhh YywgMHgwZCwgMHg5YiwgMHgwNywgMHg0MSwgMHhlYSwgMHg4NywgMHhiOSwKKyAgICAweDhjLCAw eDRlLCAweDk2LCAweDViLCAweGQwLCAweDBkLCAweDg2LCAweDVmLAorICAgIDB4ZGMsIDB4OTMs IDB4NDgsIDB4OGIsIDB4YzMsIDB4ZWQsIDB4MWUsIDB4M2QsCisgICAgMHhhZSwgMHhlYiwgMHg1 MiwgMHhiYSwgMHgwYywgMHgzYywgMHg5YSwgMHgyZiwKKyAgICAweDYzLCAweGM0LCAweGQyLCAw eGU2LCAweGMyLCAweGIwLCAweGU1LCAweDI0LAorICAgIDB4OTMsIDB4NDEsIDB4MmYsIDB4ZTAs IDB4OGQsIDB4ZDksIDB4YjAsIDB4YzIsCisgICAgMHg1NCwgMHg5MSwgMHg5OSwgMHhjMiwgMHg5 YSwgMHhjMywgMHhiNywgMHg3OSwKKyAgICAweGVhLCAweDY5LCAweDgzLCAweGI3LCAweDhkLCAw eDc3LCAweGYzLCAweDYwLAorICAgIDB4ZTAsIDB4ODgsIDB4N2QsIDB4MjAsIDB4YzMsIDB4OGEs IDB4ZTYsIDB4NGQsCisgICAgMHgzOCwgMHgyZSwgMHgzYiwgMHgwZSwgMHhlNCwgMHg5YiwgMHgw MSwgMHg4MywKKyAgICAweGFlLCAweGU0LCAweDcxLCAweGVhLCAweGMzLCAweDIyLCAweGNiLCAw eGMxLAorICAgIDB4NTksIDB4YTksIDB4Y2MsIDB4MzMsIDB4NTYsIDB4YmMsIDB4ZjksIDB4NzAs CisgICAgMHhmZSwgMHhhMiwgMHhiYiwgMHhjMCwgMHg3NywgMHg2YiwgMHhlMywgMHg3OSwKKyAg ICAweDhiLCAweDk1LCAweDM4LCAweGJhLCAweDc1LCAweGRjLCAweDVmLCAweDdhLAorICAgIDB4 NzgsIDB4YWIsIDB4MjQsIDB4YmUsIDB4MjYsIDB4NGQsIDB4MDAsIDB4OGEsCisgICAgMHhmMSwg MHg3ZSwgMHgxOSwgMHg2NCwgMHg2ZiwgMHhkMywgMHg1ZiwgMHhlOCwKKyAgICAweGRmLCAweGE3 LCAweDU5LCAweGM1LCAweDg5LCAweGI3LCAweDJkLCAweGEyLAorICAgIDB4YWYsIDB4YmQsIDB4 ZTAsIDB4MTYsIDB4NTYsIDB4OGYsIDB4ZGMsIDB4OWUsCisgICAgMHgyOCwgMHg5NCwgMHgzYSwg MHgwNywgMHhkYSwgMHhiNiwgMHgyYywgMHhiNSwKKyAgICAweDdkLCAweDY5LCAweDE0LCAweGIw LCAweDVlLCAweDhhLCAweDU1LCAweGVmLAorICAgIDB4ZmMsIDB4NmYsIDB4MTAsIDB4MmIsIDB4 YWEsIDB4N2EsIDB4ZWEsIDB4MTIsCisgICAgMHg5YiwgMHhiOCwgMHg2ZiwgMHhiOSwgMHg3MSwg MHgyMCwgMHgzMCwgMHhkZSwKKyAgICAweDQ4LCAweGE0LCAweGI5LCAweDYxLCAweGFlLCAweDVj LCAweDMzLCAweDhkLAorICAgIDB4MDIsIDB4ZTgsIDB4MDAsIDB4OTksIDB4ZWQsIDB4YzgsIDB4 OGQsIDB4YzEsCisgICAgMHgwNCwgMHg5NSwgMHhmMSwgMHg3ZiwgMHhjYiwgMHgxZiwgMHhiYywg MHg3NiwKKyAgICAweDExLCAweDAyLCAweDgyLCAweDAxLCAweDAwLCAweDJkLCAweDBjLCAweGE5 LAorICAgIDB4OGYsIDB4MTEsIDB4YzIsIDB4ZjMsIDB4MDIsIDB4YzgsIDB4ZjIsIDB4NTUsCisg ICAgMHhjNSwgMHg2ZCwgMHgyNSwgMHg4OCwgMHhiYSwgMHg1OSwgMHhmNiwgMHhkMSwKKyAgICAw eGRiLCAweDk0LCAweDJmLCAweDBiLCAweDY1LCAweDJjLCAweGFkLCAweDU0LAorICAgIDB4ZTAs IDB4MmIsIDB4ZTYsIDB4YTMsIDB4NDksIDB4YTIsIDB4YjMsIDB4Y2EsCisgICAgMHhkNywgMHhl YywgMHgyNywgMHgzMiwgMHhiYiwgMHhhNCwgMHgxNiwgMHg5MCwKKyAgICAweGJiLCAweDY3LCAw eGFkLCAweDFiLCAweGI5LCAweDBmLCAweDc4LCAweGNiLAorICAgIDB4YWQsIDB4NWMsIDB4YzMs IDB4NjYsIDB4ZDYsIDB4YmIsIDB4OTcsIDB4MjgsCisgICAgMHgwMSwgMHgzMSwgMHhmOSwgMHgw ZiwgMHg3MSwgMHgyYSwgMHhiOSwgMHg1YiwKKyAgICAweGVhLCAweDM0LCAweDQ5LCAweDljLCAw eDZiLCAweDEzLCAweDQwLCAweDY1LAorICAgIDB4YmQsIDB4MTgsIDB4MGEsIDB4MTQsIDB4Zjks IDB4MzMsIDB4NDcsIDB4ZTgsCisgICAgMHg5ZiwgMHg2NCwgMHgwZSwgMHgyNCwgMHhmNiwgMHhi YiwgMHg5MCwgMHgyMywKKyAgICAweDY2LCAweDAxLCAweGE2LCAweGE0LCAweGE5LCAweDdmLCAw eDY0LCAweDUxLAorICAgIDB4YTMsIDB4OGEsIDB4NzMsIDB4YzEsIDB4ODAsIDB4YWYsIDB4N2Es IDB4NDksCisgICAgMHg3NSwgMHg1ZCwgMHg1NiwgMHgxYywgMHhhYSwgMHgzZiwgMHg2NCwgMHhh OSwKKyAgICAweDk2LCAweGZkLCAweGIwLCAweDkwLCAweGM1LCAweGUwLCAweDNkLCAweDM2LAor ICAgIDB4MDUsIDB4YWQsIDB4YWQsIDB4ODQsIDB4OTMsIDB4ODQsIDB4YWIsIDB4MWIsCisgICAg MHgzNCwgMHg1NywgMHgzOSwgMHhhZSwgMHgwZSwgMHg4MCwgMHgwZiwgMHg0YSwKKyAgICAweDli LCAweDMyLCAweDU2LCAweGJkLCAweDMwLCAweGViLCAweGQxLCAweGM4LAorICAgIDB4YzQsIDB4 OWYsIDB4OWMsIDB4MDcsIDB4YjYsIDB4MDUsIDB4YjEsIDB4MjEsCisgICAgMHg3ZiwgMHg2OSwg MHg5MiwgMHg5ZiwgMHhiNywgMHg2OCwgMHhlNywgMHhkZSwKKyAgICAweGI3LCAweGJjLCAweGI0 LCAweDg5LCAweDViLCAweDFjLCAweDFiLCAweDQ4LAorICAgIDB4ZDEsIDB4NDQsIDB4NmUsIDB4 ZDcsIDB4NmIsIDB4ZTIsIDB4YTEsIDB4ZjQsCisgICAgMHhiZiwgMHgxNywgMHhiNCwgMHg0Mywg MHg3MCwgMHgyNiwgMHhkNCwgMHhiOSwKKyAgICAweGY1LCAweDE5LCAweDA5LCAweDA4LCAweGU5 LCAweGEzLCAweDQ5LCAweDdkLAorICAgIDB4MmYsIDB4ZGMsIDB4ZTgsIDB4NzUsIDB4NzksIDB4 YTEsIDB4YzEsIDB4NzAsCisgICAgMHgxYiwgMHg2MCwgMHg5NywgMHhhZiwgMHgwYywgMHg1Niwg MHg2OCwgMHhhYywKKyAgICAweDBlLCAweDUzLCAweGJlLCAweDU2LCAweGY0LCAweGMzLCAweGIx LCAweGZiLAorICAgIDB4ZmIsIDB4ZmYsIDB4NzMsIDB4NWIsIDB4YTcsIDB4ZjYsIDB4OTksIDB4 MGUsCisgICAgMHgxNCwgMHg1YSwgMHg1ZiwgMHg5ZCwgMHhiZCwgMHg4ZSwgMHg5NCwgMHhlYywK KyAgICAweDhiLCAweDM4LCAweDcyLCAweGJjLCAweDhiLCAweGNhLCAweDMyLCAweGE4LAorICAg IDB4MzksIDB4NDMsIDB4YjEsIDB4MWQsIDB4NDMsIDB4MjksIDB4YmUsIDB4NjAsCisgICAgMHhk YiwgMHg5MSwgMHg2YywgMHg5YywgMHgwNiwKK307CmRpZmYgLS1naXQgYS90ZXN0cy91bml0L21l c29uLmJ1aWxkIGIvdGVzdHMvdW5pdC9tZXNvbi5idWlsZAppbmRleCBhOGFmODUxMjhkLi44MGNh NjIyNjgwIDEwMDY0NAotLS0gYS90ZXN0cy91bml0L21lc29uLmJ1aWxkCisrKyBiL3Rlc3RzL3Vu aXQvbWVzb24uYnVpbGQKQEAgLTc4LDYgKzc4LDcgQEAgaWYgaGF2ZV9ibG9jawogICAgICd0ZXN0 LWNyeXB0by1oYXNoJzogW2NyeXB0b10sCiAgICAgJ3Rlc3QtY3J5cHRvLWhtYWMnOiBbY3J5cHRv XSwKICAgICAndGVzdC1jcnlwdG8tY2lwaGVyJzogW2NyeXB0b10sCisgICAgJ3Rlc3QtY3J5cHRv LWFrY2lwaGVyJzogW2NyeXB0b10sCiAgICAgJ3Rlc3QtY3J5cHRvLXNlY3JldCc6IFtjcnlwdG8s IGtleXV0aWxzXSwKICAgICAndGVzdC1hdXRoei1zaW1wbGUnOiBbYXV0aHpdLAogICAgICd0ZXN0 LWF1dGh6LWxpc3QnOiBbYXV0aHpdLApkaWZmIC0tZ2l0IGEvdGVzdHMvdW5pdC90ZXN0LWNyeXB0 by1ha2NpcGhlci5jIGIvdGVzdHMvdW5pdC90ZXN0LWNyeXB0by1ha2NpcGhlci5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmI1YmU1NjM4ODQKLS0tIC9kZXYvbnVsbAor KysgYi90ZXN0cy91bml0L3Rlc3QtY3J5cHRvLWFrY2lwaGVyLmMKQEAgLTAsMCArMSw3MTEgQEAK Ky8qCisgKiBRRU1VIENyeXB0byBjaXBoZXIgYWxnb3JpdGhtcworICoKKyAqIENvcHlyaWdodCAo YykgMjAyMiBCeXRlZGFuY2UKKyAqIEF1dGhvcjogbGVpIGhlIDxoZWxlaS5zaWcxMUBieXRlZGFu Y2UuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhl IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1 c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk IGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9u ZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNl bnNlcy8+LgorICoKKyAqLworCisjaW5jbHVkZSAicWVtdS9vc2RlcC5oIgorCisjaW5jbHVkZSAi Y3J5cHRvL2luaXQuaCIKKyNpbmNsdWRlICJjcnlwdG8vYWtjaXBoZXIuaCIKKyNpbmNsdWRlICJx YXBpL2Vycm9yLmgiCisKK3N0YXRpYyBjb25zdCB1aW50OF90IHJzYTEwMjRfcHJpdmF0ZV9rZXlb XSA9IHsKKyAgICAweDMwLCAweDgyLCAweDAyLCAweDVjLCAweDAyLCAweDAxLCAweDAwLCAweDAy LAorICAgIDB4ODEsIDB4ODEsIDB4MDAsIDB4ZTYsIDB4NGQsIDB4NzYsIDB4NGYsIDB4YjIsCisg ICAgMHg5NywgMHgwOSwgMHhhZCwgMHg5ZCwgMHgxNywgMHgzMywgMHhmMiwgMHgzMCwKKyAgICAw eDQyLCAweDgzLCAweGE5LCAweGNiLCAweDQ5LCAweGE0LCAweDJlLCAweDU5LAorICAgIDB4NWUs IDB4NzUsIDB4NTEsIDB4ZDEsIDB4YWMsIDB4YzgsIDB4ODYsIDB4M2UsCisgICAgMHhkYiwgMHg3 MiwgMHgyZSwgMHhiMiwgMHhmNywgMHhjMywgMHg1YiwgMHhjNywKKyAgICAweGVhLCAweGVkLCAw eDMwLCAweGQxLCAweGY3LCAweDM3LCAweGVlLCAweDlkLAorICAgIDB4MzYsIDB4NTksIDB4NmYs IDB4ZjgsIDB4Y2UsIDB4YzAsIDB4NWMsIDB4ODIsCisgICAgMHg4MCwgMHgzNywgMHg4MywgMHhk NywgMHg0NSwgMHg2YSwgMHhlOSwgMHhlYSwKKyAgICAweGM1LCAweDNhLCAweDU5LCAweDZiLCAw eDM0LCAweDMxLCAweDQ0LCAweDAwLAorICAgIDB4NzQsIDB4YTcsIDB4MjksIDB4YWIsIDB4Nzks IDB4NGEsIDB4YmQsIDB4ZTgsCisgICAgMHgyNSwgMHgzNSwgMHgwMSwgMHgxMSwgMHg0MCwgMHhi ZiwgMHgzMSwgMHhiZCwKKyAgICAweGQzLCAweGUwLCAweDY4LCAweDFlLCAweGQ1LCAweDViLCAw eDJmLCAweGU5LAorICAgIDB4MjAsIDB4ZjIsIDB4OWYsIDB4NDYsIDB4MzUsIDB4MzAsIDB4YTgs IDB4ZjEsCisgICAgMHhmZSwgMHhlZiwgMHhkOCwgMHg3NiwgMHgyMywgMHg0NiwgMHgzNCwgMHg3 MCwKKyAgICAweGExLCAweGNlLCAweGM2LCAweDY1LCAweDZkLCAweGIwLCAweDk0LCAweDdlLAor ICAgIDB4ZTUsIDB4OTIsIDB4NDUsIDB4N2IsIDB4YWEsIDB4YmIsIDB4OTUsIDB4OTcsCisgICAg MHg3NywgMHhjZCwgMHhkMywgMHgwMiwgMHgwMywgMHgwMSwgMHgwMCwgMHgwMSwKKyAgICAweDAy LCAweDgxLCAweDgwLCAweDMwLCAweDZhLCAweGM0LCAweDllLCAweGM4LAorICAgIDB4YmEsIDB4 ZmMsIDB4MmIsIDB4ZTUsIDB4YzQsIDB4YzUsIDB4MDQsIDB4ZmIsCisgICAgMHhhNCwgMHg2MCwg MHgyZCwgMHhjOCwgMHgzMSwgMHgzOSwgMHgzNSwgMHgwZCwKKyAgICAweDUwLCAweGQwLCAweDc1 LCAweDVkLCAweDExLCAweDY4LCAweDJlLCAweGUwLAorICAgIDB4ZjQsIDB4MWQsIDB4YjMsIDB4 MzcsIDB4YTgsIDB4ZTMsIDB4MDcsIDB4NWUsCisgICAgMHhhNiwgMHg0MywgMHgyYiwgMHg2YSwg MHg1OSwgMHgwMSwgMHgwNywgMHg0NywKKyAgICAweDQxLCAweGVmLCAweGQ3LCAweDljLCAweDg1 LCAweDRhLCAweGU3LCAweGE3LAorICAgIDB4ZmYsIDB4ZjAsIDB4YWIsIDB4ZTUsIDB4MGMsIDB4 MTEsIDB4MDgsIDB4MTAsCisgICAgMHg3NSwgMHg1YSwgMHg2OCwgMHhhMCwgMHgwOCwgMHgwMywg MHhjOSwgMHg0MCwKKyAgICAweDc5LCAweDY3LCAweDFkLCAweDY1LCAweDg5LCAweDJkLCAweDA4 LCAweGY5LAorICAgIDB4YjUsIDB4MWIsIDB4N2QsIDB4ZDIsIDB4NDEsIDB4M2IsIDB4MzMsIDB4 ZjIsCisgICAgMHg0NywgMHgyZiwgMHg5YywgMHgwYiwgMHhkNSwgMHhhZiwgMHhjYiwgMHhkYiwK KyAgICAweGJiLCAweDM3LCAweDYzLCAweDAzLCAweGY4LCAweGU3LCAweDJlLCAweGM3LAorICAg IDB4M2MsIDB4ODYsIDB4OWYsIDB4YzIsIDB4OWIsIDB4YjQsIDB4NzAsIDB4NmEsCisgICAgMHg0 ZCwgMHg3YywgMHhlNCwgMHgxYiwgMHgzYSwgMHhhOSwgMHhhZSwgMHhkNywKKyAgICAweGNlLCAw eDdmLCAweDU2LCAweGMyLCAweDczLCAweDVlLCAweDU4LCAweDYzLAorICAgIDB4ZDUsIDB4ODYs IDB4NDEsIDB4MDIsIDB4NDEsIDB4MDAsIDB4ZjYsIDB4NTYsCisgICAgMHg2OSwgMHhlYywgMHhl ZiwgMHg2NSwgMHg5NSwgMHhkYywgMHgyNSwgMHg0NywKKyAgICAweGUwLCAweDZmLCAweGIwLCAw eDRmLCAweDc5LCAweDc3LCAweDBhLCAweDVlLAorICAgIDB4NDYsIDB4Y2IsIDB4YmQsIDB4MGIs IDB4NzEsIDB4NTEsIDB4MmEsIDB4YTQsCisgICAgMHg2NSwgMHgyOSwgMHgxOCwgMHhjNiwgMHgz MCwgMHhhMCwgMHg5NSwgMHg0YywKKyAgICAweDRiLCAweGJlLCAweDhjLCAweDQwLCAweGUzLCAw eDljLCAweDIzLCAweDAyLAorICAgIDB4MTQsIDB4NDMsIDB4ZTksIDB4NjQsIDB4ZWEsIDB4ZTMs IDB4YTgsIDB4ZTIsCisgICAgMHgxYSwgMHhkNSwgMHhmOSwgMHg1YywgMHhlMCwgMHgzNiwgMHgy YywgMHg5NywKKyAgICAweGRhLCAweGQ1LCAweGM3LCAweDQ2LCAweGNlLCAweDExLCAweDAyLCAw eDQxLAorICAgIDB4MDAsIDB4ZWYsIDB4NTYsIDB4MDgsIDB4YjgsIDB4MjksIDB4YTUsIDB4YTYs CisgICAgMHg3YywgMHhmNywgMHg1ZiwgMHhiNCwgMHhmNSwgMHg2MywgMHhlNywgMHhlYiwKKyAg ICAweDQ1LCAweGZkLCAweDg5LCAweGFhLCAweDk0LCAweGE2LCAweDNkLCAweDBiLAorICAgIDB4 ZDksIDB4MDQsIDB4NmYsIDB4NzgsIDB4ZTAsIDB4YmIsIDB4YTIsIDB4ZDQsCisgICAgMHgyOSwg MHg4MywgMHgxNywgMHg5NSwgMHg2ZiwgMHg1MCwgMHgzZCwgMHg0MCwKKyAgICAweDVkLCAweGU1 LCAweDI0LCAweGRhLCAweGMyLCAweDIzLCAweDUwLCAweDg2LAorICAgIDB4YTgsIDB4MzQsIDB4 YzgsIDB4NmYsIDB4ZWMsIDB4N2YsIDB4YjYsIDB4NDUsCisgICAgMHgzYSwgMHhkZCwgMHg3OCwg MHg5YiwgMHhlZSwgMHhhMSwgMHhlNCwgMHgwOSwKKyAgICAweGEzLCAweDAyLCAweDQwLCAweDVj LCAweGQ2LCAweDY2LCAweDY3LCAweDU4LAorICAgIDB4MzUsIDB4YzUsIDB4Y2IsIDB4YzgsIDB4 ZjUsIDB4MTQsIDB4YmQsIDB4YTMsCisgICAgMHgwOSwgMHhlMCwgMHhiMiwgMHgxZiwgMHg2Mywg MHgzNiwgMHg3NSwgMHgzNCwKKyAgICAweDUyLCAweGVhLCAweGFhLCAweGY3LCAweDUyLCAweDJi LCAweDk5LCAweGQ4LAorICAgIDB4NmYsIDB4NjEsIDB4MDYsIDB4MzQsIDB4MWUsIDB4MjMsIDB4 ZjEsIDB4YjUsCisgICAgMHgzNCwgMHgwMywgMHg1MywgMHhlNSwgMHhkMSwgMHhiMywgMHhjNywg MHg4MCwKKyAgICAweDVmLCAweDdiLCAweDMyLCAweGJmLCAweDg0LCAweDJmLCAweDJlLCAweGYz LAorICAgIDB4MjIsIDB4YjAsIDB4OTEsIDB4NWEsIDB4MmYsIDB4MDQsIDB4ZDcsIDB4NGEsCisg ICAgMHg5YSwgMHgwMSwgMHhiMSwgMHgwMiwgMHg0MCwgMHgzNCwgMHgwYiwgMHgyNiwKKyAgICAw eDRjLCAweDNkLCAweGFhLCAweDJhLCAweGMwLCAweGUzLCAweGRkLCAweGU4LAorICAgIDB4ZjAs IDB4YWYsIDB4NmYsIDB4ZTAsIDB4MDYsIDB4NTEsIDB4MzIsIDB4OWQsCisgICAgMHg2OCwgMHg0 MywgMHg5OSwgMHhlNCwgMHhiOCwgMHhhNSwgMHgzMSwgMHg0NCwKKyAgICAweDNjLCAweGMyLCAw eDMwLCAweDhmLCAweDI4LCAweDEzLCAweGJjLCAweDhlLAorICAgIDB4MWYsIDB4MmQsIDB4Nzgs IDB4OTQsIDB4NDUsIDB4OTYsIDB4YWQsIDB4NjMsCisgICAgMHhmMCwgMHg3MSwgMHg1MywgMHg3 MiwgMHg2NCwgMHhhMywgMHg0ZCwgMHhhZSwKKyAgICAweGEwLCAweGUzLCAweGM4LCAweDkzLCAw eGQ3LCAweDUwLCAweDBmLCAweDg5LAorICAgIDB4MDAsIDB4ZTQsIDB4MmQsIDB4M2QsIDB4Mzcs IDB4MDIsIDB4NDEsIDB4MDAsCisgICAgMHhiZSwgMHhhNiwgMHgwOCwgMHhlMCwgMHhjOCwgMHgx NSwgMHgyYSwgMHg0NywKKyAgICAweGNiLCAweGQ1LCAweGVjLCAweDkzLCAweGQzLCAweGFhLCAw eDEyLCAweDgyLAorICAgIDB4YWYsIDB4YWMsIDB4NTEsIDB4NWEsIDB4NWIsIDB4YTcsIDB4OTMs IDB4NGIsCisgICAgMHhiOSwgMHhhYiwgMHgwMCwgMHhmYSwgMHg1YSwgMHhlYSwgMHgzNCwgMHhl NCwKKyAgICAweDgwLCAweGYxLCAweDQ0LCAweDZhLCAweDY1LCAweGU0LCAweDMzLCAweDk5LAor ICAgIDB4ZmIsIDB4NTQsIDB4ZDcsIDB4ODksIDB4NWEsIDB4MWIsIDB4ZDYsIDB4MmIsCisgICAg MHhjYywgMHg2ZSwgMHg0YiwgMHgxOSwgMHhhMCwgMHg2ZCwgMHg5MywgMHg5ZiwKKyAgICAweGMz LCAweDkxLCAweDdhLCAweGE1LCAweGQ4LCAweDU5LCAweDBlLCAweDllLAorfTsKKworc3RhdGlj IGNvbnN0IHVpbnQ4X3QgcnNhMTAyNF9wdWJsaWNfa2V5W10gPSB7CisgICAgMHgzMCwgMHg4MSwg MHg4OSwgMHgwMiwgMHg4MSwgMHg4MSwgMHgwMCwgMHhlNiwKKyAgICAweDRkLCAweDc2LCAweDRm LCAweGIyLCAweDk3LCAweDA5LCAweGFkLCAweDlkLAorICAgIDB4MTcsIDB4MzMsIDB4ZjIsIDB4 MzAsIDB4NDIsIDB4ODMsIDB4YTksIDB4Y2IsCisgICAgMHg0OSwgMHhhNCwgMHgyZSwgMHg1OSwg MHg1ZSwgMHg3NSwgMHg1MSwgMHhkMSwKKyAgICAweGFjLCAweGM4LCAweDg2LCAweDNlLCAweGRi LCAweDcyLCAweDJlLCAweGIyLAorICAgIDB4ZjcsIDB4YzMsIDB4NWIsIDB4YzcsIDB4ZWEsIDB4 ZWQsIDB4MzAsIDB4ZDEsCisgICAgMHhmNywgMHgzNywgMHhlZSwgMHg5ZCwgMHgzNiwgMHg1OSwg MHg2ZiwgMHhmOCwKKyAgICAweGNlLCAweGMwLCAweDVjLCAweDgyLCAweDgwLCAweDM3LCAweDgz LCAweGQ3LAorICAgIDB4NDUsIDB4NmEsIDB4ZTksIDB4ZWEsIDB4YzUsIDB4M2EsIDB4NTksIDB4 NmIsCisgICAgMHgzNCwgMHgzMSwgMHg0NCwgMHgwMCwgMHg3NCwgMHhhNywgMHgyOSwgMHhhYiwK KyAgICAweDc5LCAweDRhLCAweGJkLCAweGU4LCAweDI1LCAweDM1LCAweDAxLCAweDExLAorICAg IDB4NDAsIDB4YmYsIDB4MzEsIDB4YmQsIDB4ZDMsIDB4ZTAsIDB4NjgsIDB4MWUsCisgICAgMHhk NSwgMHg1YiwgMHgyZiwgMHhlOSwgMHgyMCwgMHhmMiwgMHg5ZiwgMHg0NiwKKyAgICAweDM1LCAw eDMwLCAweGE4LCAweGYxLCAweGZlLCAweGVmLCAweGQ4LCAweDc2LAorICAgIDB4MjMsIDB4NDYs IDB4MzQsIDB4NzAsIDB4YTEsIDB4Y2UsIDB4YzYsIDB4NjUsCisgICAgMHg2ZCwgMHhiMCwgMHg5 NCwgMHg3ZSwgMHhlNSwgMHg5MiwgMHg0NSwgMHg3YiwKKyAgICAweGFhLCAweGJiLCAweDk1LCAw eDk3LCAweDc3LCAweGNkLCAweGQzLCAweDAyLAorICAgIDB4MDMsIDB4MDEsIDB4MDAsIDB4MDEs Cit9OworCitzdGF0aWMgY29uc3QgdWludDhfdCByc2EyMDQ4X3ByaXZhdGVfa2V5W10gPSB7Cisg ICAgMHgzMCwgMHg4MiwgMHgwNCwgMHhhNCwgMHgwMiwgMHgwMSwgMHgwMCwgMHgwMiwKKyAgICAw eDgyLCAweDAxLCAweDAxLCAweDAwLCAweGJkLCAweDljLCAweDgzLCAweDZiLAorICAgIDB4MGUs IDB4OGUsIDB4Y2YsIDB4ZmEsIDB4YWEsIDB4NGYsIDB4NmEsIDB4ZjQsCisgICAgMHhlMywgMHg1 MiwgMHgwZiwgMHhhNSwgMHhkMCwgMHhiZSwgMHg1ZSwgMHg3ZiwKKyAgICAweDA4LCAweDI0LCAw eGJhLCAweDg3LCAweDQ2LCAweGZiLCAweDI4LCAweDkzLAorICAgIDB4ZTUsIDB4ZTUsIDB4ODEs IDB4NDIsIDB4YzAsIDB4ZjksIDB4MTcsIDB4YzcsCisgICAgMHg4MSwgMHgwMSwgMHhmNCwgMHgx OCwgMHg2YSwgMHgxNywgMHhmNSwgMHg1NywKKyAgICAweDIwLCAweDM3LCAweGNmLCAweGY5LCAw eDc0LCAweDVlLCAweGUxLCAweDQ4LAorICAgIDB4NmEsIDB4NzEsIDB4MGEsIDB4MGYsIDB4Nzks IDB4NzIsIDB4MmIsIDB4NDYsCisgICAgMHgxMCwgMHg1MywgMHhkYywgMHgxNCwgMHg0MywgMHhi ZCwgMHhiYywgMHg2ZCwKKyAgICAweDE1LCAweDZmLCAweDE1LCAweDRlLCAweGYwLCAweDBkLCAw eDg5LCAweDM5LAorICAgIDB4MDIsIDB4YzMsIDB4NjgsIDB4NWMsIDB4YTgsIDB4ZmMsIDB4ZWQs IDB4NjQsCisgICAgMHg5ZCwgMHg5OCwgMHhiNywgMHhjZCwgMHg4MywgMHg2NiwgMHg5MywgMHhj MywKKyAgICAweGQ5LCAweDU3LCAweGEwLCAweDIxLCAweDkzLCAweGFkLCAweDVjLCAweDc1LAor ICAgIDB4NjksIDB4ODgsIDB4OWUsIDB4ODEsIDB4ZGMsIDB4N2YsIDB4MWQsIDB4ZDUsCisgICAg MHhiZCwgMHgxYywgMHhjMSwgMHgzMCwgMHg1NiwgMHhhNSwgMHhkYSwgMHg5OSwKKyAgICAweDQ2 LCAweGE2LCAweDZkLCAweDBlLCAweDZmLCAweDVlLCAweDUxLCAweDM0LAorICAgIDB4NDksIDB4 NzMsIDB4YzMsIDB4NjcsIDB4NDksIDB4N2UsIDB4MjEsIDB4MmEsCisgICAgMHgyMCwgMHhhNywg MHgyYiwgMHg5MiwgMHg3MywgMHgxZCwgMHhhNSwgMHgyNSwKKyAgICAweDJhLCAweGQwLCAweDNh LCAweDg5LCAweDc1LCAweGIyLCAweGJiLCAweDE5LAorICAgIDB4MzcsIDB4NzgsIDB4NDgsIDB4 ZDIsIDB4ZjIsIDB4MmEsIDB4NmQsIDB4OWUsCisgICAgMHhjNiwgMHgyNiwgMHhjYSwgMHg0Niwg MHg4YywgMHhmMSwgMHg0MiwgMHgyYSwKKyAgICAweDMxLCAweGIyLCAweGZjLCAweGU3LCAweDU1 LCAweDUxLCAweGZmLCAweDA3LAorICAgIDB4MTMsIDB4NWIsIDB4MzYsIDB4NTksIDB4MmIsIDB4 NDMsIDB4MzAsIDB4NGIsCisgICAgMHgwNSwgMHg1YywgMHhkMiwgMHg0NSwgMHhhMCwgMHhhMCwg MHg3YywgMHgxNywKKyAgICAweDViLCAweDA3LCAweGJiLCAweDVkLCAweDgzLCAweDgwLCAweDky LCAweDZkLAorICAgIDB4ODcsIDB4MWEsIDB4NDMsIDB4YWMsIDB4YzcsIDB4NmIsIDB4OGQsIDB4 MTEsCisgICAgMHg2MCwgMHgyNywgMHhkMiwgMHhkZiwgMHhkYiwgMHg3MSwgMHgwMiwgMHg1NSwK KyAgICAweDZlLCAweGI1LCAweGNhLCAweDRkLCAweGRhLCAweDU5LCAweDBkLCAweGI4LAorICAg IDB4OGMsIDB4Y2QsIDB4ZDMsIDB4MGUsIDB4NTUsIDB4YTAsIDB4YTQsIDB4OGQsCisgICAgMHhh MCwgMHgxNCwgMHgxMCwgMHg0OCwgMHg0MiwgMHgzNSwgMHg1NiwgMHgwOCwKKyAgICAweGY3LCAw eDI5LCAweDVmLCAweGEyLCAweGVhLCAweGE0LCAweDVlLCAweDhlLAorICAgIDB4OTksIDB4NTYs IDB4YWEsIDB4NWEsIDB4OGMsIDB4MjMsIDB4OGYsIDB4MzUsCisgICAgMHgyMiwgMHg4YSwgMHhm ZiwgMHhlZCwgMHgwMiwgMHgwMywgMHgwMSwgMHgwMCwKKyAgICAweDAxLCAweDAyLCAweDgyLCAw eDAxLCAweDAwLCAweDRlLCAweDRhLCAweGYzLAorICAgIDB4NDQsIDB4ZTAsIDB4NjQsIDB4ZmQs IDB4ZTEsIDB4ZGUsIDB4MzMsIDB4MWUsCisgICAgMHhkMSwgMHhmMSwgMHg4ZiwgMHg2ZiwgMHhl MCwgMHhhMiwgMHhmYSwgMHgwOCwKKyAgICAweDYwLCAweGUxLCAweGM2LCAweGYwLCAweGIyLCAw eDZkLCAweDBmLCAweGM2LAorICAgIDB4MjgsIDB4OTMsIDB4YjQsIDB4MTksIDB4OTQsIDB4YWIs IDB4YzMsIDB4ZWYsCisgICAgMHgxYSwgMHhiNCwgMHhkZCwgMHg0ZSwgMHhhMiwgMHg0YSwgMHgy NCwgMHg4YywKKyAgICAweDZjLCAweGE2LCAweDY0LCAweDA1LCAweDVmLCAweDU2LCAweGJhLCAw eGRhLAorICAgIDB4YzEsIDB4MjEsIDB4MWEsIDB4N2QsIDB4ZjEsIDB4ZjcsIDB4Y2UsIDB4Yjks CisgICAgMHhhOSwgMHg5YiwgMHg5MiwgMHg1NCwgMHhmYywgMHg5NSwgMHgyMCwgMHgyMiwKKyAg ICAweDRlLCAweGQ0LCAweDliLCAweGUyLCAweGFiLCAweDhlLCAweDk5LCAweGI4LAorICAgIDB4 NDAsIDB4YWYsIDB4MzAsIDB4NmEsIDB4YzYsIDB4NjAsIDB4MGMsIDB4ZDgsCisgICAgMHgyNSwg MHg0NCwgMHhhMSwgMHhjYiwgMHhiYiwgMHg3MywgMHg3NywgMHg4NiwKKyAgICAweGFhLCAweDQ2 LCAweGYzLCAweDU0LCAweGFlLCAweGE4LCAweGEwLCAweGRiLAorICAgIDB4ZGQsIDB4YWIsIDB4 NmUsIDB4ZmIsIDB4MmMsIDB4NWEsIDB4MTQsIDB4YWYsCisgICAgMHgwOCwgMHgxMywgMHhhNywg MHg2YywgMHhlOSwgMHhmZCwgMHhjZCwgMHg0YywKKyAgICAweDFmLCAweDIwLCAweDNhLCAweDE2 LCAweDJiLCAweGYwLCAweGI2LCAweDdjLAorICAgIDB4NDcsIDB4NWYsIDB4ZDEsIDB4MGEsIDB4 MmMsIDB4YzQsIDB4YTUsIDB4NjgsCisgICAgMHhkMCwgMHg0MywgMHg3NSwgMHg2YiwgMHg2NSwg MHhhYSwgMHgzMiwgMHhjNiwKKyAgICAweDk5LCAweDA2LCAweGNiLCAweDhmLCAweGU2LCAweDhk LCAweGNlLCAweGJmLAorICAgIDB4NGQsIDB4MGQsIDB4N2IsIDB4MjIsIDB4MmEsIDB4OGEsIDB4 Y2IsIDB4N2QsCisgICAgMHg3ZiwgMHgxNiwgMHg0OCwgMHg4NSwgMHhmMSwgMHg4NiwgMHhjYiwg MHg1NCwKKyAgICAweGI5LCAweDM5LCAweGQ0LCAweGJjLCAweGUzLCAweDJkLCAweDI3LCAweDU5 LAorICAgIDB4ZjYsIDB4ODEsIDB4NWUsIDB4OTQsIDB4NDUsIDB4ZGYsIDB4YjksIDB4MjIsCisg ICAgMHhhZiwgMHg2NCwgMHgwZCwgMHgxNCwgMHhlYywgMHg4YywgMHhlYiwgMHg3MSwKKyAgICAw eGFjLCAweGVlLCAweDA5LCAweDRjLCAweGJmLCAweDM0LCAweGY5LCAweGY0LAorICAgIDB4NjYs IDB4NzcsIDB4MzYsIDB4M2IsIDB4NDEsIDB4NzQsIDB4MDEsIDB4NGYsCisgICAgMHhmYywgMHg1 NiwgMHg4MywgMHhiYSwgMHgxNCwgMHhiMCwgMHgyZiwgMHhkZCwKKyAgICAweDRkLCAweGI5LCAw eDNmLCAweGRmLCAweDcxLCAweGJlLCAweDdiLCAweGJhLAorICAgIDB4NjYsIDB4YzgsIDB4YzUs IDB4NDIsIDB4YzksIDB4YmEsIDB4MTgsIDB4NjMsCisgICAgMHg0NSwgMHgwNywgMHgyZiwgMHg4 NCwgMHgzZSwgMHhjMywgMHhmYiwgMHg0NywKKyAgICAweGRhLCAweGQ0LCAweDFkLCAweDBlLCAw eDlkLCAweDk2LCAweGMwLCAweGVhLAorICAgIDB4ZWUsIDB4NDUsIDB4MmYsIDB4ZTEsIDB4NjIs IDB4MjMsIDB4ZWUsIDB4ZWYsCisgICAgMHgzZCwgMHg1ZSwgMHg1NSwgMHhhMSwgMHgwZCwgMHgw MiwgMHg4MSwgMHg4MSwKKyAgICAweDAwLCAweGViLCAweDc2LCAweDg4LCAweGQzLCAweGFlLCAw eDNmLCAweDFkLAorICAgIDB4ZjIsIDB4NDksIDB4ZTAsIDB4MzcsIDB4NDksIDB4ODMsIDB4ODIs IDB4NmMsCisgICAgMHhmNywgMHhmMSwgMHgxNywgMHgzMCwgMHg3NSwgMHgyZSwgMHg4OSwgMHgw NiwKKyAgICAweDg4LCAweDU2LCAweDMyLCAweGY2LCAweGZhLCAweDU4LCAweGNiLCAweDNjLAor ICAgIDB4OTgsIDB4NjcsIDB4YzMsIDB4ZGUsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4ZmEsCisgICAg MHhmYSwgMHg1MiwgMHg0NywgMHg4ZCwgMHhkNywgMHgwMCwgMHhjNiwgMHhjYiwKKyAgICAweGY3 LCAweGY2LCAweDU3LCAweDliLCAweDZlLCAweDBjLCAweGFjLCAweGU4LAorICAgIDB4M2IsIDB4 ZDEsIDB4ZGUsIDB4YjUsIDB4MzQsIDB4YWYsIDB4OGIsIDB4MmEsCisgICAgMHhiMCwgMHgyZCwg MHgwMSwgMHhlYiwgMHg3YywgMHhhMCwgMHg0MiwgMHgyNiwKKyAgICAweGJiLCAweDJiLCAweDQz LCAweDBlLCAweDFkLCAweGUyLCAweDRlLCAweGM5LAorICAgIDB4YzEsIDB4MGEsIDB4NjcsIDB4 MWQsIDB4ZmMsIDB4ODMsIDB4MjUsIDB4Y2UsCisgICAgMHhiMiwgMHgxOCwgMHhkOSwgMHgwZCwg MHg3MCwgMHhmNSwgMHhhMywgMHg1YSwKKyAgICAweDljLCAweDk5LCAweGRkLCAweDQ3LCAweGEx LCAweDU3LCAweGU3LCAweDIwLAorICAgIDB4ZGUsIDB4YTEsIDB4MjksIDB4OGQsIDB4OTYsIDB4 NjIsIDB4ZjksIDB4MjYsCisgICAgMHg5NSwgMHg1MSwgMHhhNiwgMHhlNywgMHgwOSwgMHg4Yiwg MHhiYSwgMHgxNiwKKyAgICAweDhiLCAweDE5LCAweDViLCAweGY5LCAweDI3LCAweDBkLCAweGM1 LCAweGQ2LAorICAgIDB4NWYsIDB4MDIsIDB4ODEsIDB4ODEsIDB4MDAsIDB4Y2UsIDB4MjYsIDB4 MzEsCisgICAgMHhiNSwgMHg0MywgMHg1MywgMHg5NSwgMHgzOSwgMHhkZCwgMHgwMSwgMHg5OCwK KyAgICAweDhiLCAweDNkLCAweDI3LCAweGViLCAweDBiLCAweDg3LCAweDFjLCAweDk1LAorICAg IDB4ZmMsIDB4M2UsIDB4MzYsIDB4NTEsIDB4MzEsIDB4YjUsIDB4ZWEsIDB4NTksCisgICAgMHg1 NiwgMHhjMCwgMHg5NywgMHg2MiwgMHhmMCwgMHg2MywgMHgyYiwgMHhiNiwKKyAgICAweDMwLCAw eDliLCAweGRmLCAweDE5LCAweDEwLCAweGU5LCAweGEwLCAweDNkLAorICAgIDB4ZWEsIDB4NTQs IDB4NWEsIDB4ZTYsIDB4YzYsIDB4OWUsIDB4N2UsIDB4YjUsCisgICAgMHhmMCwgMHhiMCwgMHg1 NCwgMHhlZiwgMHhjMywgMHhlMSwgMHg0NywgMHhhNiwKKyAgICAweDk1LCAweGM3LCAweGU0LCAw eGEzLCAweDRhLCAweDMwLCAweDY4LCAweDI0LAorICAgIDB4OTgsIDB4N2QsIDB4YzEsIDB4MzQs IDB4YTksIDB4Y2IsIDB4YmMsIDB4M2MsCisgICAgMHgwOCwgMHg5YywgMHg3ZCwgMHgwYywgMHhh MiwgMHhiNywgMHg2MCwgMHhhYSwKKyAgICAweDM4LCAweDA4LCAweDE2LCAweGE2LCAweDdmLCAw eGRiLCAweGQyLCAweGIxLAorICAgIDB4NjcsIDB4ZTcsIDB4OTMsIDB4OGUsIDB4YmIsIDB4N2Us IDB4YjksIDB4YjUsCisgICAgMHhkMCwgMHhkMCwgMHg5ZiwgMHg3YiwgMHhjYywgMHg0NiwgMHhl NiwgMHg3NCwKKyAgICAweDc4LCAweDFhLCAweDk2LCAweGQ2LCAweGQ3LCAweDc0LCAweDM0LCAw eDU0LAorICAgIDB4M2IsIDB4NTQsIDB4NTUsIDB4N2YsIDB4ODksIDB4ODEsIDB4YmMsIDB4NDAs CisgICAgMHg1NSwgMHg4NywgMHgyNCwgMHg5NSwgMHgzMywgMHgwMiwgMHg4MSwgMHg4MSwKKyAg ICAweDAwLCAweGIwLCAweDE4LCAweDVkLCAweDJhLCAweDFhLCAweDk1LCAweDlmLAorICAgIDB4 OWEsIDB4ZDUsIDB4M2YsIDB4MzcsIDB4NzksIDB4ZTYsIDB4M2QsIDB4ODMsCisgICAgMHhhYiwg MHg0NiwgMHg4NiwgMHgzNiwgMHgzYSwgMHg1ZCwgMHgwYywgMHgyMywKKyAgICAweDczLCAweDkx LCAweDJiLCAweGRhLCAweDYzLCAweGNlLCAweDQ2LCAweDY4LAorICAgIDB4ZDEsIDB4ZmUsIDB4 NDAsIDB4OTAsIDB4ZjIsIDB4M2UsIDB4NDMsIDB4MmIsCisgICAgMHgxOSwgMHg0YywgMHhiMSwg MHhiMCwgMHhkNSwgMHg4YywgMHgwMiwgMHgyMSwKKyAgICAweDA3LCAweDE4LCAweDE3LCAweGRh LCAweGU5LCAweDQ5LCAweGQ3LCAweDgyLAorICAgIDB4NzMsIDB4NDIsIDB4NzgsIDB4ZDEsIDB4 ODIsIDB4NGUsIDB4OGEsIDB4YzAsCisgICAgMHhlOSwgMHgzMywgMHgyZiwgMHhjZCwgMHg2Miwg MHhjZSwgMHgyMywgMHhjYSwKKyAgICAweGZkLCAweDhkLCAweGQ0LCAweDNmLCAweDU5LCAweDgw LCAweDI3LCAweGI2LAorICAgIDB4NjEsIDB4ODUsIDB4OWIsIDB4MmEsIDB4ZTQsIDB4ZWYsIDB4 NWMsIDB4MzYsCisgICAgMHgyMiwgMHgyMSwgMHhjZCwgMHgyYSwgMHg2ZCwgMHg0MSwgMHg3Nywg MHhlMiwKKyAgICAweGNiLCAweDVkLCAweDkzLCAweDBkLCAweDAwLCAweDEwLCAweDUyLCAweDhk LAorICAgIDB4ZDUsIDB4OTIsIDB4MjgsIDB4MTYsIDB4NzgsIDB4ZDMsIDB4MWEsIDB4NGMsCisg ICAgMHg4ZCwgMHhiZCwgMHg5YywgMHgxYSwgMHgwYiwgMHg5YywgMHg5MSwgMHgxNiwKKyAgICAw eDRjLCAweGZmLCAweDMxLCAweDM2LCAweGJiLCAweGNiLCAweDY0LCAweDFhLAorICAgIDB4Zjcs IDB4MDIsIDB4ODEsIDB4ODAsIDB4MzIsIDB4NjUsIDB4MDksIDB4ZGYsCisgICAgMHhjYSwgMHhl ZSwgMHhhMiwgMHhkYiwgMHgzYiwgMHg1OCwgMHhjOSwgMHg4NiwKKyAgICAweGI4LCAweDUzLCAw eDhhLCAweGQ1LCAweDBkLCAweDk5LCAweDgyLCAweDVjLAorICAgIDB4ZTAsIDB4ODQsIDB4N2Ms IDB4YzIsIDB4Y2YsIDB4M2EsIDB4ZDMsIDB4Y2UsCisgICAgMHgyZSwgMHg1NCwgMHg5MywgMHhi ZSwgMHgzYSwgMHgzMCwgMHgxNCwgMHg2MCwKKyAgICAweGJiLCAweGFhLCAweDA1LCAweDQxLCAw eGFhLCAweDJiLCAweDFmLCAweDE3LAorICAgIDB4YWEsIDB4YjksIDB4NzIsIDB4MTIsIDB4Zjks IDB4ZTksIDB4ZjUsIDB4ZTYsCisgICAgMHgzOSwgMHhlNCwgMHhmOSwgMHg5YywgMHgwMywgMHhm NSwgMHg3NSwgMHgxNiwKKyAgICAweGM2LCAweDdmLCAweGYxLCAweDFmLCAweDEwLCAweGM4LCAw eDU0LCAweGIxLAorICAgIDB4ZTYsIDB4ODQsIDB4MTUsIDB4YjAsIDB4YjAsIDB4N2EsIDB4N2Es IDB4OWUsCisgICAgMHg4YywgMHg0YSwgMHhkMSwgMHg4YywgMHhmMSwgMHg5MSwgMHgzMiwgMHhl YiwKKyAgICAweDcxLCAweGE2LCAweGJmLCAweGRiLCAweDFmLCAweGNjLCAweGQ4LCAweGNiLAor ICAgIDB4OTIsIDB4YzMsIDB4ZjIsIDB4YWYsIDB4ODksIDB4MjIsIDB4MzIsIDB4ZmQsCisgICAg MHgzMiwgMHgxMiwgMHhkYSwgMHhiYiwgMHhhYywgMHg1NSwgMHg2OCwgMHgwMSwKKyAgICAweDc4 LCAweDU2LCAweDg5LCAweDdjLCAweGIwLCAweDBlLCAweDllLCAweGNjLAorICAgIDB4YzYsIDB4 MjgsIDB4MDQsIDB4N2UsIDB4ODMsIDB4ZjUsIDB4OTYsIDB4MzAsCisgICAgMHg5MiwgMHg1MSwg MHhmMiwgMHgxYiwgMHgwMiwgMHg4MSwgMHg4MSwgMHgwMCwKKyAgICAweDgzLCAweDZkLCAweGQx LCAweDk4LCAweDkwLCAweDQxLCAweDhjLCAweGE3LAorICAgIDB4OTIsIDB4ODMsIDB4YWMsIDB4 ODksIDB4MDUsIDB4MGMsIDB4NzksIDB4NjcsCisgICAgMHg5MCwgMHhiNiwgMHhhMSwgMHhmMywg MHgyZiwgMHhjYSwgMHhmMCwgMHgxNSwKKyAgICAweGUwLCAweDMwLCAweDU4LCAweGU5LCAweDRm LCAweGNiLCAweDRjLCAweDU2LAorICAgIDB4NTYsIDB4NTYsIDB4MTQsIDB4M2YsIDB4MWIsIDB4 NzksIDB4YjYsIDB4ZWYsCisgICAgMHg1NywgMHg0YiwgMHgyOCwgMHhiZCwgMHhiMCwgMHhlNiwg MHgwYywgMHg0OSwKKyAgICAweDRiLCAweGJlLCAweGUxLCAweDU3LCAweDI4LCAweDJhLCAweDIz LCAweDVlLAorICAgIDB4YzQsIDB4YTIsIDB4MTksIDB4NGIsIDB4MDAsIDB4NjcsIDB4NzgsIDB4 ZDksCisgICAgMHgyNiwgMHg2ZSwgMHgxNywgMHgyNSwgMHhjZSwgMHhlNCwgMHhmZCwgMHhkZSwK KyAgICAweDg2LCAweGE4LCAweDVhLCAweDY3LCAweDQ3LCAweDZiLCAweDE1LCAweDA5LAorICAg IDB4ZTEsIDB4ZWMsIDB4OGUsIDB4NjIsIDB4OTgsIDB4OTEsIDB4NmYsIDB4YzAsCisgICAgMHg5 OCwgMHgwYywgMHg3MCwgMHgwZSwgMHg3ZCwgMHhiZSwgMHg2MywgMHhiZCwKKyAgICAweDEyLCAw eDVhLCAweDk4LCAweDFjLCAweGUzLCAweDBjLCAweGZiLCAweGM3LAorICAgIDB4ZmIsIDB4MWIs IDB4YmQsIDB4MDIsIDB4ODcsIDB4Y2MsIDB4MGMsIDB4YmIsCisgICAgMHhjMiwgMHhkNCwgMHhi NiwgMHhjMSwgMHhhMSwgMHgyMywgMHhkMywgMHgxZSwKKyAgICAweDIxLCAweDZmLCAweDQ4LCAw eGJhLCAweDBlLCAweDJlLCAweGM3LCAweDQyCit9OworCitzdGF0aWMgY29uc3QgdWludDhfdCBy c2EyMDQ4X3B1YmxpY19rZXlbXSA9IHsKKyAgICAweDMwLCAweDgyLCAweDAxLCAweDBhLCAweDAy LCAweDgyLCAweDAxLCAweDAxLAorICAgIDB4MDAsIDB4YmQsIDB4OWMsIDB4ODMsIDB4NmIsIDB4 MGUsIDB4OGUsIDB4Y2YsCisgICAgMHhmYSwgMHhhYSwgMHg0ZiwgMHg2YSwgMHhmNCwgMHhlMywg MHg1MiwgMHgwZiwKKyAgICAweGE1LCAweGQwLCAweGJlLCAweDVlLCAweDdmLCAweDA4LCAweDI0 LCAweGJhLAorICAgIDB4ODcsIDB4NDYsIDB4ZmIsIDB4MjgsIDB4OTMsIDB4ZTUsIDB4ZTUsIDB4 ODEsCisgICAgMHg0MiwgMHhjMCwgMHhmOSwgMHgxNywgMHhjNywgMHg4MSwgMHgwMSwgMHhmNCwK KyAgICAweDE4LCAweDZhLCAweDE3LCAweGY1LCAweDU3LCAweDIwLCAweDM3LCAweGNmLAorICAg IDB4ZjksIDB4NzQsIDB4NWUsIDB4ZTEsIDB4NDgsIDB4NmEsIDB4NzEsIDB4MGEsCisgICAgMHgw ZiwgMHg3OSwgMHg3MiwgMHgyYiwgMHg0NiwgMHgxMCwgMHg1MywgMHhkYywKKyAgICAweDE0LCAw eDQzLCAweGJkLCAweGJjLCAweDZkLCAweDE1LCAweDZmLCAweDE1LAorICAgIDB4NGUsIDB4ZjAs IDB4MGQsIDB4ODksIDB4MzksIDB4MDIsIDB4YzMsIDB4NjgsCisgICAgMHg1YywgMHhhOCwgMHhm YywgMHhlZCwgMHg2NCwgMHg5ZCwgMHg5OCwgMHhiNywKKyAgICAweGNkLCAweDgzLCAweDY2LCAw eDkzLCAweGMzLCAweGQ5LCAweDU3LCAweGEwLAorICAgIDB4MjEsIDB4OTMsIDB4YWQsIDB4NWMs IDB4NzUsIDB4NjksIDB4ODgsIDB4OWUsCisgICAgMHg4MSwgMHhkYywgMHg3ZiwgMHgxZCwgMHhk NSwgMHhiZCwgMHgxYywgMHhjMSwKKyAgICAweDMwLCAweDU2LCAweGE1LCAweGRhLCAweDk5LCAw eDQ2LCAweGE2LCAweDZkLAorICAgIDB4MGUsIDB4NmYsIDB4NWUsIDB4NTEsIDB4MzQsIDB4NDks IDB4NzMsIDB4YzMsCisgICAgMHg2NywgMHg0OSwgMHg3ZSwgMHgyMSwgMHgyYSwgMHgyMCwgMHhh NywgMHgyYiwKKyAgICAweDkyLCAweDczLCAweDFkLCAweGE1LCAweDI1LCAweDJhLCAweGQwLCAw eDNhLAorICAgIDB4ODksIDB4NzUsIDB4YjIsIDB4YmIsIDB4MTksIDB4MzcsIDB4NzgsIDB4NDgs CisgICAgMHhkMiwgMHhmMiwgMHgyYSwgMHg2ZCwgMHg5ZSwgMHhjNiwgMHgyNiwgMHhjYSwKKyAg ICAweDQ2LCAweDhjLCAweGYxLCAweDQyLCAweDJhLCAweDMxLCAweGIyLCAweGZjLAorICAgIDB4 ZTcsIDB4NTUsIDB4NTEsIDB4ZmYsIDB4MDcsIDB4MTMsIDB4NWIsIDB4MzYsCisgICAgMHg1OSwg MHgyYiwgMHg0MywgMHgzMCwgMHg0YiwgMHgwNSwgMHg1YywgMHhkMiwKKyAgICAweDQ1LCAweGEw LCAweGEwLCAweDdjLCAweDE3LCAweDViLCAweDA3LCAweGJiLAorICAgIDB4NWQsIDB4ODMsIDB4 ODAsIDB4OTIsIDB4NmQsIDB4ODcsIDB4MWEsIDB4NDMsCisgICAgMHhhYywgMHhjNywgMHg2Yiwg MHg4ZCwgMHgxMSwgMHg2MCwgMHgyNywgMHhkMiwKKyAgICAweGRmLCAweGRiLCAweDcxLCAweDAy LCAweDU1LCAweDZlLCAweGI1LCAweGNhLAorICAgIDB4NGQsIDB4ZGEsIDB4NTksIDB4MGQsIDB4 YjgsIDB4OGMsIDB4Y2QsIDB4ZDMsCisgICAgMHgwZSwgMHg1NSwgMHhhMCwgMHhhNCwgMHg4ZCwg MHhhMCwgMHgxNCwgMHgxMCwKKyAgICAweDQ4LCAweDQyLCAweDM1LCAweDU2LCAweDA4LCAweGY3 LCAweDI5LCAweDVmLAorICAgIDB4YTIsIDB4ZWEsIDB4YTQsIDB4NWUsIDB4OGUsIDB4OTksIDB4 NTYsIDB4YWEsCisgICAgMHg1YSwgMHg4YywgMHgyMywgMHg4ZiwgMHgzNSwgMHgyMiwgMHg4YSwg MHhmZiwKKyAgICAweGVkLCAweDAyLCAweDAzLCAweDAxLCAweDAwLCAweDAxCit9OworCitzdGF0 aWMgY29uc3QgdWludDhfdCB0ZXN0X3NoYTFfZGdzdFtdID0geworICAgIDB4M2MsIDB4MDUsIDB4 MTksIDB4MzQsIDB4MjksIDB4MTksIDB4YzcsIDB4ZTAsCisgICAgMHg4NywgMHhiNiwgMHgyNCwg MHhmOSwgMHg1OCwgMHhhYywgMHhhNCwgMHhkNCwKKyAgICAweGIyLCAweGQ5LCAweDAzLCAweDll LAorfTsKKworc3RhdGljIGNvbnN0IHVpbnQ4X3QgZXhwX3NpZ25hdHVyZV9yc2EyMDQ4X3BrY3Mx W10gPSB7CisgICAgMHg0ZSwgMHg4MiwgMHg1NiwgMHg0YywgMHg4NCwgMHg2NiwgMHhjYSwgMHgx ZSwKKyAgICAweGM2LCAweDkyLCAweDQ2LCAweDIwLCAweDAyLCAweDZiLCAweDY0LCAweDQ2LAor ICAgIDB4MTUsIDB4NmIsIDB4MjQsIDB4ZjIsIDB4YmIsIDB4ZmEsIDB4NDQsIDB4M2MsCisgICAg MHhhZiwgMHg0MiwgMHhjOCwgMHg0MSwgMHhmZCwgMHhjZSwgMHhlZCwgMHg5NSwKKyAgICAweDM0 LCAweGFmLCAweDI1LCAweDA5LCAweGQxLCAweDA2LCAweDk0LCAweGFhLAorICAgIDB4NTIsIDB4 ZDQsIDB4MjksIDB4YzgsIDB4NTIsIDB4MzQsIDB4NjcsIDB4NTksCisgICAgMHg0ZiwgMHg1YSwg MHhmZCwgMHgyMywgMHgzMCwgMHg1ZSwgMHhjNywgMHgxZSwKKyAgICAweGE2LCAweGUwLCAweDFi LCAweDIzLCAweGNhLCAweDgyLCAweDQ3LCAweDlhLAorICAgIDB4MmUsIDB4MmMsIDB4NjYsIDB4 NDUsIDB4NWEsIDB4MTIsIDB4YTksIDB4MTUsCisgICAgMHhiZiwgMHhkNiwgMHhkNiwgMHhmYSwg MHg4ZCwgMHg2MCwgMHg5OSwgMHg4OSwKKyAgICAweDkxLCAweDM5LCAweDA2LCAweGI3LCAweGQz LCAweDlhLCAweGVmLCAweDE1LAorICAgIDB4N2IsIDB4OTUsIDB4ODcsIDB4NzcsIDB4MmMsIDB4 NDEsIDB4ZDQsIDB4NzEsCisgICAgMHhkNSwgMHhkZiwgMHgyMiwgMHg3YiwgMHgwMSwgMHhlMiwg MHhjMSwgMHhmYiwKKyAgICAweGI5LCAweDRlLCAweDBjLCAweDliLCAweGQ1LCAweDA0LCAweGVk LCAweDJiLAorICAgIDB4N2UsIDB4NzMsIDB4NTMsIDB4YWEsIDB4MzMsIDB4ODksIDB4OWQsIDB4 OTUsCisgICAgMHgyOCwgMHg4ZiwgMHg4YiwgMHg4MCwgMHgzNCwgMHg3YSwgMHhlYSwgMHhlMywK KyAgICAweDY2LCAweDhhLCAweGE4LCAweGFkLCAweGVkLCAweDkxLCAweDQzLCAweGRkLAorICAg IDB4NzcsIDB4ZTUsIDB4ZDcsIDB4MTYsIDB4ZGEsIDB4YTgsIDB4MDAsIDB4MjksCisgICAgMHgz ZiwgMHg5ZiwgMHhlMCwgMHgxZCwgMHg0MiwgMHg5ZCwgMHgzNSwgMHg1ZCwKKyAgICAweDBmLCAw eGYzLCAweDkwLCAweDI3LCAweDNhLCAweDhjLCAweDQ2LCAweDEzLAorICAgIDB4NTMsIDB4M2Us IDB4M2IsIDB4MzgsIDB4NzcsIDB4ZjgsIDB4NTcsIDB4NjEsCisgICAgMHhiYywgMHhjNCwgMHg1 NCwgMHg2OCwgMHg0OCwgMHhhZSwgMHg1OCwgMHgwMywKKyAgICAweDMzLCAweDk0LCAweDNmLCAw eDE4LCAweDFlLCAweGIzLCAweDNmLCAweDc5LAorICAgIDB4YTcsIDB4MjYsIDB4OTIsIDB4NWQs IDB4MzIsIDB4MmEsIDB4ZGIsIDB4ZTYsCisgICAgMHgzYSwgMHhlOCwgMHhkNywgMHhhYSwgMHg5 MSwgMHhmZSwgMHg5ZiwgMHgwNiwKKyAgICAweDI2LCAweDY4LCAweDhjLCAweDI3LCAweDMxLCAw eGIwLCAweDA0LCAweDllLAorICAgIDB4OTQsIDB4NzksIDB4NjMsIDB4YTEsIDB4YzcsIDB4ZTgs IDB4NWIsIDB4OGMsCisgICAgMHhkMywgMHhmMSwgMHg4OCwgMHg1OCwgMHgzMSwgMHgyZiwgMHg0 ZSwgMHgxMSwKKyAgICAweDAwLCAweGZlLCAweDI5LCAweGFkLCAweDJjLCAweGE5LCAweDhlLCAw eDYzLAorICAgIDB4ZDgsIDB4N2QsIDB4YzUsIDB4YTEsIDB4NzEsIDB4ZmEsIDB4MDgsIDB4Mjks CisgICAgMHhlYSwgMHhkNiwgMHg2YywgMHg1MywgMHgwMCwgMHg1MiwgMHhhMCwgMHhlZCwKKyAg ICAweDZiLCAweDdjLCAweDY3LCAweDUwLCAweDcxLCAweDJkLCAweDk2LCAweDdhLAorfTsKKwor c3RhdGljIGNvbnN0IHVpbnQ4X3QgZXhwX3NpZ25hdHVyZV9yc2ExMDI0X3BrY3MxW10gPSB7Cisg ICAgMHg2YiwgMHg1YiwgMHhiYiwgMHgzYiwgMHgxZiwgMHgwOCwgMHhkOCwgMHhjMCwKKyAgICAw eDRhLCAweGYxLCAweDVhLCAweDEyLCAweGMyLCAweDM5LCAweDE0LCAweDY1LAorICAgIDB4NGYs IDB4ZGEsIDB4NzksIDB4NjcsIDB4ZjIsIDB4ODksIDB4MjUsIDB4YWQsCisgICAgMHg5ZSwgMHg3 ZSwgMHhiYSwgMHhhOCwgMHgzNCwgMHgxNSwgMHgwMywgMHhkZCwKKyAgICAweDgwLCAweDZiLCAw eDAxLCAweGQ3LCAweDRhLCAweGYzLCAweGQ2LCAweGVmLAorICAgIDB4MWUsIDB4NDgsIDB4ZjMs IDB4YmMsIDB4NzUsIDB4MWEsIDB4YzQsIDB4MmMsCisgICAgMHg5MCwgMHgxNSwgMHg5ZiwgMHgy MSwgMHgyNCwgMHg5OCwgMHgyMSwgMHhlZiwKKyAgICAweDZkLCAweDNiLCAweGYzLCAweDgyLCAw eDhmLCAweDhkLCAweGQ4LCAweDQ4LAorICAgIDB4MzcsIDB4MTYsIDB4MTksIDB4OGUsIDB4M2Ms IDB4NjQsIDB4YTAsIDB4OWUsCisgICAgMHhmNywgMHgwYywgMHhkOSwgMHg1YywgMHhjNiwgMHgx MywgMHhjNCwgMHg1ZiwKKyAgICAweGY4LCAweGYzLCAweDU5LCAweDViLCAweGQwLCAweDMzLCAw eDk1LCAweDk4LAorICAgIDB4ZGUsIDB4NjcsIDB4MjUsIDB4NTgsIDB4NDYsIDB4YmEsIDB4ZWUs IDB4MGYsCisgICAgMHg0NywgMHg3YSwgMHg3ZiwgMHhkMCwgMHhlNCwgMHg3NywgMHgwOSwgMHgx NywKKyAgICAweGU5LCAweDgxLCAweDZlLCAweDJkLCAweDMzLCAweDliLCAweDEzLCAweDBiLAor ICAgIDB4YzksIDB4YjIsIDB4MGMsIDB4MmMsIDB4YjUsIDB4ZGYsIDB4NTIsIDB4OGYsCisgICAg MHhhYiwgMHgwZCwgMHhjNiwgMHg1OSwgMHgxZCwgMHhjNywgMHgzMywgMHg3YiwKK307CisKK3N0 YXRpYyBjb25zdCB1aW50OF90IHRlc3RfcGxhaW50ZXh0W10gPSB7CisgICAgMHgwMCwgMHg0NCwg MHhiYywgMHg2ZiwgMHg3NywgMHhmYiwgMHhlMiwgMHhhNCwKKyAgICAweDk4LCAweDllLCAweGY1 LCAweDMzLCAweGEwLCAweGJkLCAweDgxLCAweGI5LAorICAgIDB4ZjEsIDB4NDQsIDB4N2YsIDB4 NzksIDB4ODksIDB4MjMsIDB4ZTUsIDB4NDYsCisgICAgMHg2NiwgMHg5ZiwgMHg5OCwgMHg5NSwg MHg2ZiwgMHg1NiwgMHg3OCwgMHhmNiwKKyAgICAweGY1LCAweGFjLCAweDljLCAweGRhLCAweGMy LCAweDc5LCAweDU5LCAweGYwLAorICAgIDB4MWIsIDB4MDMsIDB4ZmEsIDB4NDYsIDB4MWMsIDB4 MWYsIDB4MTgsIDB4MDcsCisgICAgMHhjZSwgMHhhZCwgMHhlZCwgMHgzZCwgMHgxMSwgMHhmOSwg MHgxYiwgMHgyNiwKKyAgICAweDRhLCAweDk3LCAweDI4LCAweDcxLCAweDVmLCAweDJjLCAweDVl LCAweDU4LAorICAgIDB4ZjAsIDB4ZDYsIDB4YmYsIDB4YTQsIDB4MTIsIDB4ZDAsIDB4MWQsIDB4 MDcsCisgICAgMHhjYiwgMHg3MywgMHg2NiwgMHhiNiwgMHhhNCwgMHgwOSwgMHhhZiwgMHg1ZCwK KyAgICAweGU5LCAweDE0LCAweDE0LCAweGFmLCAweDY5LCAweGQ2LCAweGVlLCAweDBhLAorICAg IDB4ZmMsIDB4Y2EsIDB4YWMsIDB4OTQsIDB4NDcsIDB4ZDUsIDB4OWQsIDB4NWIsCisgICAgMHgy YiwgMHhmYiwgMHhjZSwgMHg5ZCwgMHgwNCwgMHhjMSwgMHhhZiwgMHhhNSwKKyAgICAweGExLCAw eDhkLCAweGE5LCAweDQ4LCAweGE4LCAweDY1LCAweGU2LCAweDlmLAorICAgIDB4NzQsIDB4Nzgs IDB4MTYsIDB4MzIsIDB4OTMsIDB4YjUsIDB4MjEsIDB4YjksCisgICAgMHg5ZiwgMHgzZiwgMHhj MSwgMHhlNSwgMHhhMiwgMHg1MCwgMHg4YiwgMHgxMiwKKyAgICAweGZiLCAweDNlLCAweGIwLCAw eDhhLCAweDAwLCAweGM3LCAweDIwLCAweDU2LAorICAgIDB4YjMsIDB4YjEsIDB4MjksIDB4OTUs IDB4ODksIDB4ZDYsIDB4NTAsIDB4ZjUsCisgICAgMHgzNywgMHgzOCwgMHg4ZSwgMHgxMiwgMHhm MSwgMHhiYSwgMHg4MiwgMHgzNywKKyAgICAweDM0LCAweDY4LCAweDRiLCAweGU4LCAweGUzLCAw eDExLCAweDFjLCAweDQ2LAorICAgIDB4ZjksIDB4NjMsIDB4M2EsIDB4ZDYsIDB4ZjMsIDB4M2Ys IDB4NTUsIDB4YTYsCisgICAgMHhiZCwgMHg4OSwgMHhmMSwgMHgyZCwgMHgzOCwgMHg5MSwgMHg3 YywgMHhjMiwKKyAgICAweDRkLCAweGYxLCAweDY5LCAweDgyLCAweDZkLCAweDcxLCAweDc3LCAw eGY0LAorICAgIDB4ZmMsIDB4NDMsIDB4MjAsIDB4NmYsIDB4NDMsIDB4YjksIDB4NDMsIDB4ZDEs CisgICAgMHg2NSwgMHhiZCwgMHhjYSwgMHhiMSwgMHg0MywgMHg4NywgMHhmOCwgMHhjOCwKKyAg ICAweDc2LCAweDIxLCAweGE5LCAweGViLCAweDNlLCAweDlhLCAweGVmLCAweGM5LAorICAgIDB4 MGUsIDB4NzksIDB4YmMsIDB4ZjAsIDB4ZjgsIDB4YzgsIDB4ZTIsIDB4YmMsCisgICAgMHgzMywg MHgzNSwgMHgzZSwgMHhmYywgMHhmOSwgMHg0NCwgMHg2OSwgMHgwNiwKKyAgICAweDdjLCAweDdm LCAweDVkLCAweGEyLCAweDllLCAweGFiLCAweGMyLCAweDgyLAorICAgIDB4YTAsIDB4ZmIsIDB4 YzUsIDB4NzksIDB4NTcsIDB4OGMsIDB4ZjEsIDB4MWMsCisgICAgMHg1MSwgMHg2NCwgMHg0Yywg MHg1NiwgMHgwOCwgMHg4MCwgMHgzMiwgMHhmNCwKKyAgICAweDk3LCAweDhmLCAweDZmLCAweGIy LCAweDE2LCAweGE2LCAweDlkLCAweDcxLAorfTsKKworc3RhdGljIGNvbnN0IHVpbnQ4X3QgZXhw X2NpcGhlcnRleHRfcnNhMTAyNF9yYXdbXSA9IHsKKyAgICAweDAxLCAweGEwLCAweGMyLCAweDk0 LCAweDlmLCAweGQ2LCAweGJlLCAweDhkLAorICAgIDB4ZTksIDB4MjQsIDB4YWEsIDB4OWMsIDB4 NjcsIDB4ZDcsIDB4ZTMsIDB4MDQsCisgICAgMHgzNCwgMHhiZiwgMHhkMywgMHgyNywgMHhhMSwg MHg0MywgMHhlYiwgMHg2MCwKKyAgICAweDZiLCAweDViLCAweDY0LCAweDE1LCAweDU1LCAweDE2 LCAweDk4LCAweDM1LAorICAgIDB4YzIsIDB4NTksIDB4YTcsIDB4ZjcsIDB4MjQsIDB4ZjcsIDB4 MDUsIDB4YjksCisgICAgMHhlOCwgMHg1NiwgMHg2ZiwgMHhmMiwgMHg3ZCwgMHg4YiwgMHgzYywg MHhjYiwKKyAgICAweGE2LCAweGMyLCAweGFjLCAweDBjLCAweDM3LCAweDhjLCAweDcwLCAweDcw LAorICAgIDB4NTUsIDB4MDUsIDB4MDcsIDB4MGQsIDB4NjMsIDB4NmIsIDB4N2QsIDB4NWYsCisg ICAgMHhhZSwgMHgwMywgMHgxZSwgMHg1NSwgMHgwNSwgMHhiYiwgMHhhOCwgMHhlNywKKyAgICAw eGZmLCAweGEwLCAweDhjLCAweDViLCAweDZiLCAweDAxLCAweDQ4LCAweDJlLAorICAgIDB4NGYs IDB4N2YsIDB4ZTIsIDB4NzQsIDB4YzYsIDB4MzIsIDB4YTcsIDB4MmQsCisgICAgMHhkYiwgMHg5 MSwgMHg5YiwgMHg2NywgMHg0ZCwgMHg3MSwgMHhmOSwgMHg4YywKKyAgICAweDQyLCAweDQzLCAw eDc1LCAweDRlLCAweGQwLCAweDBlLCAweDdjLCAweGEwLAorICAgIDB4OTcsIDB4MWEsIDB4NWYs IDB4OGUsIDB4NmYsIDB4ZTQsIDB4ZmEsIDB4MTYsCisgICAgMHgxZCwgMHg1OSwgMHgwZSwgMHgw YiwgMHgxMSwgMHgxMiwgMHhhMywgMHgwYywKKyAgICAweGE2LCAweDU1LCAweGU2LCAweGRiLCAw eGE3LCAweDcxLCAweGE2LCAweGZmLAorfTsKKworc3RhdGljIGNvbnN0IHVpbnQ4X3QgZXhwX2Np cGhlcnRleHRfcnNhMTAyNF9wa2NzMVtdID0geworICAgIDB4OTMsIDB4NzgsIDB4NmEsIDB4NzYs IDB4YjgsIDB4OTQsIDB4ZWEsIDB4ZTQsCisgICAgMHgzMiwgMHg3OSwgMHgwMSwgMHg4YiwgMHhj MSwgMHhjYiwgMHgyZSwgMHgyZCwKKyAgICAweGZlLCAweGRjLCAweDliLCAweGUzLCAweGU5LCAw eDIzLCAweGU0LCAweDBhLAorICAgIDB4YjAsIDB4NmIsIDB4OWYsIDB4NmIsIDB4NjIsIDB4ZjUs IDB4M2QsIDB4ZjAsCisgICAgMHg3OCwgMHg4NCwgMHg3NywgMHgyMSwgMHhhZCwgMHgwYiwgMHgz MCwgMHgzMCwKKyAgICAweDk0LCAweGUyLCAweDE4LCAweGM0LCAweDliLCAweDEyLCAweDA2LCAw eGM4LAorICAgIDB4YWEsIDB4ZjcsIDB4MzAsIDB4ZTQsIDB4YzgsIDB4NjQsIDB4ZTcsIDB4NTEs CisgICAgMHhmMSwgMHg2YSwgMHhlMSwgMHhhMiwgMHg1OCwgMHg3YSwgMHgwMiwgMHg5YywKKyAg ICAweDhlLCAweGYwLCAweDJkLCAweDI1LCAweDZiLCAweGI3LCAweDI1LCAweDVlLAorICAgIDB4 MDUsIDB4YWYsIDB4MzgsIDB4YjIsIDB4NjksIDB4NWUsIDB4NmMsIDB4NzUsCisgICAgMHg2ZSwg MHgyNywgMHhiYSwgMHg1ZCwgMHg3ZCwgMHgzNSwgMHg3MiwgMHhiNywKKyAgICAweDI1LCAweGQ0 LCAweGFhLCAweGIyLCAweDRiLCAweDllLCAweDZiLCAweDgyLAorICAgIDB4YjIsIDB4MzIsIDB4 ZTIsIDB4MTMsIDB4MWQsIDB4MDAsIDB4MjEsIDB4MDgsCisgICAgMHhhZSwgMHgxNCwgMHhiYiwg MHhjMCwgMHg0MCwgMHhiNywgMHgwZCwgMHhkNSwKKyAgICAweDBlLCAweDRkLCAweDZkLCAweDlh LCAweDcwLCAweDg2LCAweGU5LCAweGZjLAorICAgIDB4NjcsIDB4MmIsIDB4YTQsIDB4MTEsIDB4 NDUsIDB4YjYsIDB4YzQsIDB4MmYsCit9OworCitzdGF0aWMgY29uc3QgdWludDhfdCBleHBfY2lw aGVydGV4dF9yc2EyMDQ4X3Jhd1tdID0geworICAgIDB4MDksIDB4N2IsIDB4OWUsIDB4N2MsIDB4 MTAsIDB4MWYsIDB4NzMsIDB4YjQsCisgICAgMHg1ZiwgMHhkYiwgMHg0ZiwgMHgwNSwgMHhlNywg MHhmYywgMHg5ZSwgMHgzNSwKKyAgICAweDQ4LCAweGQ4LCAweGM4LCAweGY1LCAweGFjLCAweDZk LCAweGI0LCAweGIwLAorICAgIDB4ZDQsIDB4ZjcsIDB4NjksIDB4MGYsIDB4MzAsIDB4NzgsIDB4 YmIsIDB4NTUsCisgICAgMHg2NywgMHg2NiwgMHg2NiwgMHgwNSwgMHhmNCwgMHg3NywgMHhlMiwg MHgzMCwKKyAgICAweGE1LCAweDk0LCAweDEwLCAweGEzLCAweGNiLCAweGVlLCAweDEzLCAweDlm LAorICAgIDB4NDcsIDB4MWIsIDB4MmUsIDB4ZjksIDB4ZmQsIDB4OTQsIDB4MDksIDB4YmQsCisg ICAgMHgyNiwgMHg2ZSwgMHg4NCwgMHhjNywgMHg1YywgMHg0MiwgMHgyMCwgMHg3NiwKKyAgICAw eDcyLCAweDgzLCAweDc1LCAweDY4LCAweGE0LCAweDE4LCAweDJkLCAweDc2LAorICAgIDB4NjIs IDB4YzMsIDB4YWIsIDB4YzAsIDB4YzksIDB4MzYsIDB4NTksIDB4ZTAsCisgICAgMHhhOSwgMHg3 MCwgMHgxZiwgMHhmZiwgMHg5NywgMHgwNywgMHgwZCwgMHg4OCwKKyAgICAweGMyLCAweGQ4LCAw eDUxLCAweDM1LCAweGY3LCAweGIwLCAweDUwLCAweGU0LAorICAgIDB4OWYsIDB4M2QsIDB4ZDQs IDB4NzEsIDB4OGIsIDB4NDAsIDB4ODksIDB4NzEsCisgICAgMHg2YywgMHhkOCwgMHhjMiwgMHg2 MywgMHhiNiwgMHgzYSwgMHhjZSwgMHhiMSwKKyAgICAweDMyLCAweGYxLCAweGM2LCAweDExLCAw eDMxLCAweDI1LCAweDQ4LCAweGNmLAorICAgIDB4ZWIsIDB4YmMsIDB4ZDMsIDB4OWIsIDB4YzUs IDB4YmQsIDB4ZDIsIDB4NTcsCisgICAgMHg3MywgMHg5YiwgMHgyMCwgMHhiOCwgMHhkZiwgMHhi ZSwgMHhiOCwgMHg0MCwKKyAgICAweGI2LCAweGFjLCAweDI0LCAweGRiLCAweDk0LCAweDZhLCAw eDkzLCAweDQzLAorICAgIDB4NGEsIDB4YTgsIDB4YTMsIDB4Y2YsIDB4ZDUsIDB4NjEsIDB4MWIs IDB4NDYsCisgICAgMHgxZCwgMHg2ZiwgMHg1NywgMHhlYywgMHhhNiwgMHhkMCwgMHg0NCwgMHgw NSwKKyAgICAweDQ4LCAweGI4LCAweDkwLCAweDgwLCAweDIzLCAweDhlLCAweDVmLCAweGIwLAor ICAgIDB4NGIsIDB4NmYsIDB4ZTMsIDB4ZjksIDB4YjAsIDB4MDQsIDB4NjAsIDB4YWUsCisgICAg MHg4MCwgMHhjZiwgMHhhNSwgMHg1YywgMHgxMSwgMHhlNCwgMHhjZSwgMHg1NywKKyAgICAweDVi LCAweGJiLCAweGRlLCAweDkyLCAweGZjLCAweGU3LCAweDNmLCAweGUwLAorICAgIDB4ZmMsIDB4 MDYsIDB4YzgsIDB4ZjMsIDB4OGMsIDB4YWMsIDB4ODYsIDB4MDksCisgICAgMHgzMSwgMHhlNSwg MHg3ZSwgMHhmYiwgMHg1ZCwgMHhhNywgMHg1NywgMHhmOCwKKyAgICAweDFkLCAweDIzLCAweDlk LCAweGEzLCAweGViLCAweDUzLCAweDI4LCAweGRlLAorICAgIDB4YmYsIDB4NTMsIDB4ZWYsIDB4 MzUsIDB4M2MsIDB4N2UsIDB4M2MsIDB4MWIsCisgICAgMHg3NiwgMHg5ZCwgMHgwOSwgMHgyNSwg MHg0MywgMHhkNCwgMHg4YiwgMHhjYSwKKyAgICAweGRhLCAweDQ1LCAweDViLCAweGRjLCAweDlm LCAweDU3LCAweDVhLCAweDMwLAorICAgIDB4MmUsIDB4ZTksIDB4NzMsIDB4NjgsIDB4MjgsIDB4 ZmEsIDB4NDAsIDB4YjAsCisgICAgMHg3YywgMHgzMSwgMHhkNywgMHg4YiwgMHg0ZSwgMHg5OSwg MHg5NCwgMHhmMSwKK307CisKK3N0YXRpYyBjb25zdCB1aW50OF90IGV4cF9jaXBoZXJ0ZXh0X3Jz YTIwNDhfcGtjczFbXSA9IHsKKyAgICAweGE1LCAweDE5LCAweDE5LCAweDM0LCAweGFkLCAweGY2 LCAweGQyLCAweGJlLAorICAgIDB4ZWQsIDB4OGYsIDB4ZTUsIDB4ZmUsIDB4YTIsIDB4YTUsIDB4 MjAsIDB4MDgsCisgICAgMHgxNSwgMHg1MywgMHg3YywgMHg2OCwgMHgyOCwgMHhhZSwgMHgwNywg MHhiMiwKKyAgICAweDRjLCAweDVkLCAweGVlLCAweGMxLCAweGM2LCAweGRjLCAweGQ2LCAweDhi LAorICAgIDB4YzYsIDB4YmEsIDB4NDYsIDB4ZTEsIDB4MTYsIDB4YTksIDB4MDQsIDB4NzIsCisg ICAgMHhkZiwgMHg4ZiwgMHgxZSwgMHg5NywgMHgyYSwgMHg1NSwgMHhlNywgMHhhYywKKyAgICAw eDA4LCAweDBkLCAweDYxLCAweGU4LCAweDY0LCAweDhiLCAweDZmLCAweDk2LAorICAgIDB4MGUs IDB4YmIsIDB4OGEsIDB4MzAsIDB4YjMsIDB4NzMsIDB4MjgsIDB4NjEsCisgICAgMHgxNiwgMHg4 OSwgMHg5MCwgMHg4OCwgMHg4ZSwgMHhkYSwgMHgyMiwgMHhlNiwKKyAgICAweDQyLCAweDE2LCAw eGM3LCAweGU4LCAweDMwLCAweDBkLCAweDdmLCAweDQ0LAorICAgIDB4MWUsIDB4ZWYsIDB4ZTYs IDB4ZGIsIDB4NzgsIDB4NTQsIDB4ODksIDB4YTUsCisgICAgMHg2MCwgMHg2NywgMHhiMywgMHgz NSwgMHgyZCwgMHg3OSwgMHg0OSwgMHhjZiwKKyAgICAweGU2LCAweDhmLCAweGYzLCAweDY0LCAw eDUyLCAweDFjLCAweDZjLCAweDQzLAorICAgIDB4N2UsIDB4YjAsIDB4ZGUsIDB4NTUsIDB4ZGYs IDB4YmUsIDB4YjcsIDB4YjEsCisgICAgMHhkYiwgMHgwMiwgMHhlZSwgMHg3NiwgMHg5NiwgMHhj YywgMHgwYiwgMHg5NywKKyAgICAweDhjLCAweDIzLCAweGFhLCAweDdkLCAweDRjLCAweDQ3LCAw eDI4LCAweDQxLAorICAgIDB4N2EsIDB4MjAsIDB4MzksIDB4MWYsIDB4NjQsIDB4MGIsIDB4ZjEs IDB4NzQsCisgICAgMHhmMSwgMHgyOSwgMHhkYSwgMHhlOSwgMHgzYSwgMHgzNiwgMHhhNiwgMHg4 OCwKKyAgICAweGI4LCAweGMwLCAweDIxLCAweGI4LCAweDliLCAweDVkLCAweDkwLCAweDg1LAor ICAgIDB4YTMsIDB4MzAsIDB4NjEsIDB4MTcsIDB4OGMsIDB4NzQsIDB4NjMsIDB4ZDUsCisgICAg MHgwZiwgMHg5NSwgMHhkYywgMHhjOCwgMHg0ZiwgMHhhNywgMHgyNCwgMHg1NSwKKyAgICAweDQw LCAweGUyLCAweDg0LCAweDU3LCAweDY1LCAweDA2LCAweDExLCAweDMwLAorICAgIDB4MmIsIDB4 OWUsIDB4MzIsIDB4OTUsIDB4MzksIDB4ZjIsIDB4MWEsIDB4M2YsCisgICAgMHhhYiwgMHhjZCwg MHg3YiwgMHg3ZiwgMHg5YywgMHhmMCwgMHgwMCwgMHg1MCwKKyAgICAweDdjLCAweGY0LCAweGJl LCAweGNiLCAweDgwLCAweGVhLCAweDY2LCAweGJhLAorICAgIDB4MGUsIDB4N2IsIDB4NDYsIDB4 MGIsIDB4MjUsIDB4ZTAsIDB4YzEsIDB4MDMsCisgICAgMHgyOSwgMHgxMSwgMHgyZCwgMHg2OSwg MHg0ZiwgMHgyMSwgMHhhMiwgMHg1OCwKKyAgICAweDM3LCAweDRiLCAweDg0LCAweDE1LCAweGIz LCAweDY1LCAweDNhLCAweGFjLAorICAgIDB4ZDQsIDB4ZDAsIDB4ZjYsIDB4ZGYsIDB4NGIsIDB4 ODIsIDB4Y2EsIDB4OWUsCisgICAgMHhiYiwgMHhiZSwgMHgzYywgMHg0ZCwgMHhkNSwgMHhiZiwg MHgwMCwgMHhkNiwKKyAgICAweDEyLCAweDQ4LCAweDcyLCAweDBiLCAweGM3LCAweGY4LCAweGUx LCAweGNkLAorICAgIDB4ZDAsIDB4MjgsIDB4MDMsIDB4MTksIDB4YTYsIDB4MDYsIDB4MTMsIDB4 NDUsCit9OworCit0eXBlZGVmIHN0cnVjdCBRQ3J5cHRvQWtDaXBoZXJUZXN0RGF0YSBRQ3J5cHRv QWtDaXBoZXJUZXN0RGF0YTsKK3N0cnVjdCBRQ3J5cHRvQWtDaXBoZXJUZXN0RGF0YSB7CisgICAg Y29uc3QgY2hhciAqcGF0aDsKKyAgICBRQ3J5cHRvQWtDaXBoZXJPcHRpb25zIG9wdDsKKworICAg IGNvbnN0IHVpbnQ4X3QgKnByaXZfa2V5OworICAgIHNpemVfdCBwcml2X2tleV9sZW47CisgICAg Y29uc3QgdWludDhfdCAqcHViX2tleTsKKyAgICBzaXplX3QgcHViX2tleV9sZW47CisKKyAgICBj b25zdCB1aW50OF90ICpwbGFpbnRleHQ7CisgICAgc2l6ZV90IHBsZW47CisgICAgY29uc3QgdWlu dDhfdCAqY2lwaGVydGV4dDsKKyAgICBzaXplX3QgY2xlbjsKKyAgICBjb25zdCB1aW50OF90ICpk Z3N0OworICAgIHNpemVfdCBkbGVuOworICAgIGNvbnN0IHVpbnQ4X3QgKnNpZ25hdHVyZTsKKyAg ICBzaXplX3Qgc2xlbjsKK307CisKK3N0YXRpYyBRQ3J5cHRvQWtDaXBoZXJUZXN0RGF0YSB0ZXN0 X2RhdGFbXSA9IHsKKyAgICAvKiByc2ExMDI0IHdpdGggcmF3IHBhZGRpbmcgKi8KKyAgICB7Cisg ICAgICAgIC5wYXRoID0gIi9jcnlwdG8vYWtjaXBoZXIvcnNhMTAyNC1yYXciLAorICAgICAgICAu b3B0ID0geworICAgICAgICAgICAgLmFsZyA9IFFDUllQVE9fQUtDSVBIRVJfQUxHX1JTQSwKKyAg ICAgICAgICAgIC51LnJzYSA9IHsKKyAgICAgICAgICAgICAgICAucGFkZGluZ19hbGcgPSBRQ1JZ UFRPX1JTQV9QQURESU5HX0FMR19SQVcsCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAg ICAgICAucHViX2tleSA9IHJzYTEwMjRfcHVibGljX2tleSwKKyAgICAgICAgLnB1Yl9rZXlfbGVu ID0gc2l6ZW9mKHJzYTEwMjRfcHVibGljX2tleSksCisgICAgICAgIC5wcml2X2tleSA9IHJzYTEw MjRfcHJpdmF0ZV9rZXksCisgICAgICAgIC5wcml2X2tleV9sZW4gPSBzaXplb2YocnNhMTAyNF9w cml2YXRlX2tleSksCisKKyAgICAgICAgLnBsYWludGV4dCA9IHRlc3RfcGxhaW50ZXh0LAorICAg ICAgICAucGxlbiA9IDEyOCwKKyAgICAgICAgLmNpcGhlcnRleHQgPSBleHBfY2lwaGVydGV4dF9y c2ExMDI0X3JhdywKKyAgICAgICAgLmNsZW4gPSBzaXplb2YoZXhwX2NpcGhlcnRleHRfcnNhMTAy NF9yYXcpLAorICAgIH0sCisKKyAgICAvKiByc2ExMDI0IHdpdGggcGtjczEgcGFkZGluZyAqLwor ICAgIHsKKyAgICAgICAgLnBhdGggPSAiL2NyeXB0by9ha2NpcGhlci9yc2ExMDI0LXBrY3MxIiwK KyAgICAgICAgLm9wdCA9IHsKKyAgICAgICAgICAgIC5hbGcgPSBRQ1JZUFRPX0FLQ0lQSEVSX0FM R19SU0EsCisgICAgICAgICAgICAudS5yc2EgPSB7CisgICAgICAgICAgICAgICAgLnBhZGRpbmdf YWxnID0gUUNSWVBUT19SU0FfUEFERElOR19BTEdfUEtDUzEsCisgICAgICAgICAgICAgICAgLmhh c2hfYWxnID0gUUNSWVBUT19IQVNIX0FMR19TSEExLAorICAgICAgICAgICAgfSwKKyAgICAgICAg fSwKKyAgICAgICAgLnB1Yl9rZXkgPSByc2ExMDI0X3B1YmxpY19rZXksCisgICAgICAgIC5wdWJf a2V5X2xlbiA9IHNpemVvZihyc2ExMDI0X3B1YmxpY19rZXkpLAorICAgICAgICAucHJpdl9rZXkg PSByc2ExMDI0X3ByaXZhdGVfa2V5LAorICAgICAgICAucHJpdl9rZXlfbGVuID0gc2l6ZW9mKHJz YTEwMjRfcHJpdmF0ZV9rZXkpLAorCisgICAgICAgIC5wbGFpbnRleHQgPSB0ZXN0X3BsYWludGV4 dCwKKyAgICAgICAgLnBsZW4gPSA2NCwKKyAgICAgICAgLmNpcGhlcnRleHQgPSBleHBfY2lwaGVy dGV4dF9yc2ExMDI0X3BrY3MxLAorICAgICAgICAuY2xlbiA9IHNpemVvZihleHBfY2lwaGVydGV4 dF9yc2ExMDI0X3BrY3MxKSwKKyAgICAgICAgLmRnc3QgPSB0ZXN0X3NoYTFfZGdzdCwKKyAgICAg ICAgLmRsZW4gPSBzaXplb2YodGVzdF9zaGExX2Rnc3QpLAorICAgICAgICAuc2lnbmF0dXJlID0g ZXhwX3NpZ25hdHVyZV9yc2ExMDI0X3BrY3MxLAorICAgICAgICAuc2xlbiA9IHNpemVvZihleHBf c2lnbmF0dXJlX3JzYTEwMjRfcGtjczEpLAorICAgIH0sCisKKyAgICAvKiByc2EyMDQ4IHdpdGgg cmF3IHBhZGRpbmcgKi8KKyAgICB7CisgICAgICAgIC5wYXRoID0gIi9jcnlwdG8vYWtjaXBoZXIv cnNhMjA0OC1yYXciLAorICAgICAgICAub3B0ID0geworICAgICAgICAgICAgLmFsZyA9IFFDUllQ VE9fQUtDSVBIRVJfQUxHX1JTQSwKKyAgICAgICAgICAgIC51LnJzYSA9IHsKKyAgICAgICAgICAg ICAgICAucGFkZGluZ19hbGcgPSBRQ1JZUFRPX1JTQV9QQURESU5HX0FMR19SQVcsCisgICAgICAg ICAgICB9LAorICAgICAgICB9LAorICAgICAgICAucHViX2tleSA9IHJzYTIwNDhfcHVibGljX2tl eSwKKyAgICAgICAgLnB1Yl9rZXlfbGVuID0gc2l6ZW9mKHJzYTIwNDhfcHVibGljX2tleSksCisg ICAgICAgIC5wcml2X2tleSA9IHJzYTIwNDhfcHJpdmF0ZV9rZXksCisgICAgICAgIC5wcml2X2tl eV9sZW4gPSBzaXplb2YocnNhMjA0OF9wcml2YXRlX2tleSksCisKKyAgICAgICAgLnBsYWludGV4 dCA9IHRlc3RfcGxhaW50ZXh0LAorICAgICAgICAucGxlbiA9IDI1NiwKKyAgICAgICAgLmNpcGhl cnRleHQgPSBleHBfY2lwaGVydGV4dF9yc2EyMDQ4X3JhdywKKyAgICAgICAgLmNsZW4gPSBzaXpl b2YoZXhwX2NpcGhlcnRleHRfcnNhMjA0OF9yYXcpLAorICAgIH0sCisKKyAgICAvKiByc2EyMDQ4 IHdpdGggcGtjczEgcGFkZGluZyAqLworICAgIHsKKyAgICAgICAgLnBhdGggPSAiL2NyeXB0by9h a2NpcGhlci9yc2EyMDQ4LXBrY3MxIiwKKyAgICAgICAgLm9wdCA9IHsKKyAgICAgICAgICAgIC5h bGcgPSBRQ1JZUFRPX0FLQ0lQSEVSX0FMR19SU0EsCisgICAgICAgICAgICAudS5yc2EgPSB7Cisg ICAgICAgICAgICAgICAgLnBhZGRpbmdfYWxnID0gUUNSWVBUT19SU0FfUEFERElOR19BTEdfUEtD UzEsCisgICAgICAgICAgICAgICAgLmhhc2hfYWxnID0gUUNSWVBUT19IQVNIX0FMR19TSEExLAor ICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgLnB1Yl9rZXkgPSByc2EyMDQ4X3B1 YmxpY19rZXksCisgICAgICAgIC5wdWJfa2V5X2xlbiA9IHNpemVvZihyc2EyMDQ4X3B1YmxpY19r ZXkpLAorICAgICAgICAucHJpdl9rZXkgPSByc2EyMDQ4X3ByaXZhdGVfa2V5LAorICAgICAgICAu cHJpdl9rZXlfbGVuID0gc2l6ZW9mKHJzYTIwNDhfcHJpdmF0ZV9rZXkpLAorCisgICAgICAgIC5w bGFpbnRleHQgPSB0ZXN0X3BsYWludGV4dCwKKyAgICAgICAgLnBsZW4gPSAxMjgsCisgICAgICAg IC5jaXBoZXJ0ZXh0ID0gZXhwX2NpcGhlcnRleHRfcnNhMjA0OF9wa2NzMSwKKyAgICAgICAgLmNs ZW4gPSBzaXplb2YoZXhwX2NpcGhlcnRleHRfcnNhMjA0OF9wa2NzMSksCisgICAgICAgIC5kZ3N0 ID0gdGVzdF9zaGExX2Rnc3QsCisgICAgICAgIC5kbGVuID0gc2l6ZW9mKHRlc3Rfc2hhMV9kZ3N0 KSwKKyAgICAgICAgLnNpZ25hdHVyZSA9IGV4cF9zaWduYXR1cmVfcnNhMjA0OF9wa2NzMSwKKyAg ICAgICAgLnNsZW4gPSBzaXplb2YoZXhwX3NpZ25hdHVyZV9yc2EyMDQ4X3BrY3MxKSwKKyAgICB9 LAorCit9OworCitzdGF0aWMgdm9pZCB0ZXN0X2FrY2lwaGVyKGNvbnN0IHZvaWQgKm9wYXF1ZSkK K3sKKyAgICBjb25zdCBRQ3J5cHRvQWtDaXBoZXJUZXN0RGF0YSAqZGF0YSA9IG9wYXF1ZTsKKyAg ICBnX2F1dG9mcmVlIHVpbnQ4X3QgKnBsYWludGV4dCA9IE5VTEw7CisgICAgZ19hdXRvZnJlZSB1 aW50OF90ICpjaXBoZXJ0ZXh0ID0gTlVMTDsKKyAgICBnX2F1dG9mcmVlIHVpbnQ4X3QgKnNpZ25h dHVyZSA9IE5VTEw7CisgICAgUUNyeXB0b0FrQ2lwaGVyICpwdWJfa2V5LCAqcHJpdl9rZXk7CisK KyAgICBpZiAoIXFjcnlwdG9fYWtjaXBoZXJfc3VwcG9ydHMoKFFDcnlwdG9Ba0NpcGhlck9wdGlv bnMgKikmZGF0YS0+b3B0KSkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHB1Yl9rZXkg PSBxY3J5cHRvX2FrY2lwaGVyX25ldygmZGF0YS0+b3B0LAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBRQ1JZUFRPX0FLQ0lQSEVSX0tFWV9UWVBFX1BVQkxJQywKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+cHViX2tleSwgZGF0YS0+cHViX2tleV9s ZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlcnJvcl9hYm9ydCk7Cisg ICAgZ19hc3NlcnQocHViX2tleSAhPSBOVUxMKTsKKyAgICBwcml2X2tleSA9IHFjcnlwdG9fYWtj aXBoZXJfbmV3KCZkYXRhLT5vcHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBRQ1JZUFRPX0FLQ0lQSEVSX0tFWV9UWVBFX1BSSVZBVEUsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBkYXRhLT5wcml2X2tleSwgZGF0YS0+cHJpdl9rZXlfbGVuLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVycm9yX2Fib3J0KTsKKyAgICBnX2Fz c2VydChwcml2X2tleSAhPSBOVUxMKTsKKworICAgIGlmIChkYXRhLT5wbGFpbnRleHQgIT0gTlVM TCkgeworCisgICAgICAgIGNpcGhlcnRleHQgPSBnX25ldzAodWludDhfdCwgZGF0YS0+Y2xlbik7 CisgICAgICAgIGdfYXNzZXJ0KHFjcnlwdG9fYWtjaXBoZXJfZW5jcnlwdChwdWJfa2V5LCBkYXRh LT5wbGFpbnRleHQsIGRhdGEtPnBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjaXBoZXJ0ZXh0LCBkYXRhLT5jbGVuLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJmVycm9yX2Fib3J0KSA+IDApOworCisgICAgICAgIC8qKgor ICAgICAgICAgKiBJbiB0aGUgYXN5bW1ldHJpYyBlbmNyeXB0aW9uIGFsZ29yaXRobXMsIHRoZSBj aXBoZXJ0ZXh0IGdlbmVyYXRlZAorICAgICAgICAgKiBlYWNoIHRpbWUgbWF5IGJlIGRpZmZlcmVu dCwgaGVyZSBvbmx5IGNvbXBhcmUgdGhlIGRlY3J5cHRlZAorICAgICAgICAgKiBwbGFpbnRleHQK KyAgICAgICAgICovCisgICAgICAgIHBsYWludGV4dCA9IGdfbmV3MCh1aW50OF90LCBkYXRhLT5j bGVuKTsKKyAgICAgICAgZ19hc3NlcnQocWNyeXB0b19ha2NpcGhlcl9kZWNyeXB0KHByaXZfa2V5 LCBjaXBoZXJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZGF0YS0+Y2xlbiwgcGxhaW50ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZGF0YS0+cGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICZlcnJvcl9hYm9ydCkgPT0gZGF0YS0+cGxlbik7CisgICAgICAgIGdfYXNzZXJ0KCFt ZW1jbXAocGxhaW50ZXh0LCBkYXRhLT5wbGFpbnRleHQsIGRhdGEtPnBsZW4pKTsKKyAgICB9CisK KyAgICBpZiAoZGF0YS0+c2lnbmF0dXJlICE9IE5VTEwpIHsKKyAgICAgICAgc2lnbmF0dXJlID0g Z19uZXcodWludDhfdCwgZGF0YS0+c2xlbik7CisgICAgICAgIGdfYXNzZXJ0KHFjcnlwdG9fYWtj aXBoZXJfc2lnbihwcml2X2tleSwgZGF0YS0+ZGdzdCwgZGF0YS0+ZGxlbiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZSwgZGF0YS0+c2xlbiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlcnJvcl9hYm9ydCkgPiAwKTsKKyAg ICAgICAgLyoqCisgICAgICAgICAqIFRoZSBzaWduYXR1cmUgZ2VuZXJhdGVkIGVhY2ggdGltZSBt YXkgYmUgZGlmZmVyZW50LCBoZXJlIG9ubHkgY2hlY2sKKyAgICAgICAgICogdGhlIHZlcmlmaWNh dGlvbi4KKyAgICAgICAgICovCisgICAgICAgIGdfYXNzZXJ0KHFjcnlwdG9fYWtjaXBoZXJfdmVy aWZ5KHB1Yl9rZXksIGRhdGEtPnNpZ25hdHVyZSwgZGF0YS0+c2xlbiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+ZGdzdCwgZGF0YS0+ZGxlbiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVycm9yX2Fib3J0KSA9PSAwKTsK KyAgICAgICAgZ19hc3NlcnQocWNyeXB0b19ha2NpcGhlcl92ZXJpZnkocHViX2tleSwgc2lnbmF0 dXJlLCBkYXRhLT5zbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBkYXRhLT5kZ3N0LCBkYXRhLT5kbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAmZXJyb3JfYWJvcnQpID09IDApOworICAgICAgICArK3NpZ25hdHVyZVswXTsK KyAgICAgICAgLyogSGVyZSBlcnJvciBzaG91bGQgYmUgaWdub3JlZCAqLworICAgICAgICBnX2Fz c2VydChxY3J5cHRvX2FrY2lwaGVyX3ZlcmlmeShwdWJfa2V5LCBzaWduYXR1cmUsIGRhdGEtPnNs ZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPmRnc3Qs IGRhdGEtPmRsZW4sIE5VTEwpICE9IDApOworICAgIH0KKworICAgIHFjcnlwdG9fYWtjaXBoZXJf ZnJlZShwdWJfa2V5KTsKKyAgICBxY3J5cHRvX2FrY2lwaGVyX2ZyZWUocHJpdl9rZXkpOworfQor CitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgICAgc2l6ZV90IGk7CisgICAg Z190ZXN0X2luaXQoJmFyZ2MsICZhcmd2LCBOVUxMKTsKKyAgICBnX2Fzc2VydChxY3J5cHRvX2lu aXQoTlVMTCkgPT0gMCk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgR19OX0VMRU1FTlRTKHRlc3Rf ZGF0YSk7IGkrKykgeworICAgICAgICBnX3Rlc3RfYWRkX2RhdGFfZnVuYyh0ZXN0X2RhdGFbaV0u cGF0aCwgJnRlc3RfZGF0YVtpXSwgdGVzdF9ha2NpcGhlcik7CisgICAgfQorCisgICAgcmV0dXJu IGdfdGVzdF9ydW4oKTsKK30KLS0gCjIuMjAuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KVmlydHVhbGl6YXRpb24gbWFpbGluZyBsaXN0ClZpcnR1YWxp emF0aW9uQGxpc3RzLmxpbnV4LWZvdW5kYXRpb24ub3JnCmh0dHBzOi8vbGlzdHMubGludXhmb3Vu ZGF0aW9uLm9yZy9tYWlsbWFuL2xpc3RpbmZvL3ZpcnR1YWxpemF0aW9u 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id A1761C433F5 for ; Sat, 14 May 2022 02:54:08 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230028AbiENCyH (ORCPT ); Fri, 13 May 2022 22:54:07 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54564 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230018AbiENCx5 (ORCPT ); Fri, 13 May 2022 22:53:57 -0400 Received: from mail-pl1-x633.google.com (mail-pl1-x633.google.com [IPv6:2607:f8b0:4864:20::633]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 338F534D805 for ; Fri, 13 May 2022 17:59:50 -0700 (PDT) Received: by mail-pl1-x633.google.com with SMTP id d17so9499267plg.0 for ; Fri, 13 May 2022 17:59:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance-com.20210112.gappssmtp.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=HOe8OKHjGjgPipHcmR/wxbQN3SkgDrKMtAbPYd9GV+w=; b=HwzUT3y+ysp7SPjqrm2c+6/Zsi0wNe1HWeML3gsK6LJfIuDdKmTgjYTRFeR0qmFOSS 80s0mJecgKt+2wfG9QM4tFkMowwvnr/W/rGlg2J6Ndiy7kl/yjarlMfLtdX+C6USVJ6s fvGRpMa0tlRh4diokGmBSh70a7PhOosZd5lKPKdwVIWj4c1aB3Y45V7+JNb7LSEbHtIW EfAz+ZTIrnvs8TZeRaI/tC5mDEbGuaSsePKuvw1CTCDp8DiK8IoOkc8UXrUyCTGULWK9 epIe3U5EEM4ZplsrMKzthrG1ylIqVG48zPlpxXI+8JRNd2mZ8aXSHg03dWCxEiRKfPMM lrRQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=HOe8OKHjGjgPipHcmR/wxbQN3SkgDrKMtAbPYd9GV+w=; b=IXkAkdllJc0QYSQXdL+CLVMVT3h2rv6e4fmHZ3c774zLmDpsy4/8DLWC4OzEsPRp+0 IfHtmqvbZaFKauu9ArEfuStaG9g+8qh9/ibunFShPkQlm+1A1YCoax2L9rUHUzs6JwW1 XvrbKREdeRKte6bMkGeIaxLIhP6+9QogcPoBWPu/JzHNhxI2ATfag6xrIHvHFd3Kh6Ju pAYAkxzR4aD1wVHYbg+XW/0OVRbr4uuHF+Mrj6oSWsn+5lW8gE6FMvue97FjEHESshur mI6a+tfAN+19rdt7qWitSFFmxqiGC3tZSp8Vpl8FtiyQLQllj/r1VHW8M7b89LufwHFC /e/Q== X-Gm-Message-State: AOAM533ImjRmD70xGSFWVm+LGnrs0r8HXdwGoHpa66obHX4z8BDVYblL vxhKiougVKShyCCewlOyyDGzuA== X-Google-Smtp-Source: ABdhPJzAk3kGQ47kkxExJmyrv4nBMmRITRAUz+A+U11BqrgKh9DadPjHre5lwJ2U0H0QWSaM2SZZ0A== X-Received: by 2002:a17:90b:1d10:b0:1dc:dea8:d2ad with SMTP id on16-20020a17090b1d1000b001dcdea8d2admr18842038pjb.174.1652489989164; Fri, 13 May 2022 17:59:49 -0700 (PDT) Received: from always-x1.www.tendawifi.com ([139.177.225.239]) by smtp.gmail.com with ESMTPSA id t24-20020a170902b21800b0015e8d4eb1dbsm2466125plr.37.2022.05.13.17.59.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 13 May 2022 17:59:48 -0700 (PDT) From: zhenwei pi To: mst@redhat.com, arei.gonglei@huawei.com, berrange@redhat.com Cc: qemu-devel@nongnu.org, virtualization@lists.linux-foundation.org, linux-crypto@vger.kernel.org, helei.sig11@bytedance.com, jasowang@redhat.com, pizhenwei@bytedance.com, cohuck@redhat.com Subject: [PATCH v6 7/9] test/crypto: Add test suite for crypto akcipher Date: Sat, 14 May 2022 08:55:02 +0800 Message-Id: <20220514005504.1042884-8-pizhenwei@bytedance.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220514005504.1042884-1-pizhenwei@bytedance.com> References: <20220514005504.1042884-1-pizhenwei@bytedance.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-crypto@vger.kernel.org From: Lei He Add unit test and benchmark test for crypto akcipher. Signed-off-by: lei he Signed-off-by: zhenwei pi Reviewed-by: Daniel P. Berrangé --- tests/bench/benchmark-crypto-akcipher.c | 157 ++++++ tests/bench/meson.build | 1 + tests/bench/test_akcipher_keys.inc | 537 ++++++++++++++++++ tests/unit/meson.build | 1 + tests/unit/test-crypto-akcipher.c | 711 ++++++++++++++++++++++++ 5 files changed, 1407 insertions(+) create mode 100644 tests/bench/benchmark-crypto-akcipher.c create mode 100644 tests/bench/test_akcipher_keys.inc create mode 100644 tests/unit/test-crypto-akcipher.c diff --git a/tests/bench/benchmark-crypto-akcipher.c b/tests/bench/benchmark-crypto-akcipher.c new file mode 100644 index 0000000000..c6c80c0be1 --- /dev/null +++ b/tests/bench/benchmark-crypto-akcipher.c @@ -0,0 +1,157 @@ +/* + * QEMU Crypto akcipher speed benchmark + * + * Copyright (c) 2022 Bytedance + * + * Authors: + * lei he + * + * This work is licensed under the terms of the GNU GPL, version 2 or + * (at your option) any later version. See the COPYING file in the + * top-level directory. + */ + +#include "qemu/osdep.h" +#include "crypto/init.h" +#include "crypto/akcipher.h" +#include "standard-headers/linux/virtio_crypto.h" + +#include "test_akcipher_keys.inc" + +static bool keep_running; + +static void alarm_handler(int sig) +{ + keep_running = false; +} + +static QCryptoAkCipher *create_rsa_akcipher(const uint8_t *priv_key, + size_t keylen, + QCryptoRSAPaddingAlgorithm padding, + QCryptoHashAlgorithm hash) +{ + QCryptoAkCipherOptions opt; + QCryptoAkCipher *rsa; + + opt.alg = QCRYPTO_AKCIPHER_ALG_RSA; + opt.u.rsa.padding_alg = padding; + opt.u.rsa.hash_alg = hash; + rsa = qcrypto_akcipher_new(&opt, QCRYPTO_AKCIPHER_KEY_TYPE_PRIVATE, + priv_key, keylen, &error_abort); + return rsa; +} + +static void test_rsa_speed(const uint8_t *priv_key, size_t keylen, + size_t key_size) +{ +#define BYTE 8 +#define SHA1_DGST_LEN 20 +#define DURATION_SECONDS 10 +#define PADDING QCRYPTO_RSA_PADDING_ALG_PKCS1 +#define HASH QCRYPTO_HASH_ALG_SHA1 + + g_autoptr(QCryptoAkCipher) rsa = + create_rsa_akcipher(priv_key, keylen, PADDING, HASH); + g_autofree uint8_t *dgst = NULL; + g_autofree uint8_t *signature = NULL; + size_t count; + + dgst = g_new0(uint8_t, SHA1_DGST_LEN); + memset(dgst, g_test_rand_int(), SHA1_DGST_LEN); + signature = g_new0(uint8_t, key_size / BYTE); + + g_test_message("benchmark rsa%lu (%s-%s) sign in %d seconds", key_size, + QCryptoRSAPaddingAlgorithm_str(PADDING), + QCryptoHashAlgorithm_str(HASH), + DURATION_SECONDS); + alarm(DURATION_SECONDS); + g_test_timer_start(); + for (keep_running = true, count = 0; keep_running; ++count) { + g_assert(qcrypto_akcipher_sign(rsa, dgst, SHA1_DGST_LEN, + signature, key_size / BYTE, + &error_abort) > 0); + } + g_test_timer_elapsed(); + g_test_message("rsa%lu (%s-%s) sign %lu times in %.2f seconds," + " %.2f times/sec ", + key_size, QCryptoRSAPaddingAlgorithm_str(PADDING), + QCryptoHashAlgorithm_str(HASH), + count, g_test_timer_last(), + (double)count / g_test_timer_last()); + + g_test_message("benchmark rsa%lu (%s-%s) verify in %d seconds", key_size, + QCryptoRSAPaddingAlgorithm_str(PADDING), + QCryptoHashAlgorithm_str(HASH), + DURATION_SECONDS); + alarm(DURATION_SECONDS); + g_test_timer_start(); + for (keep_running = true, count = 0; keep_running; ++count) { + g_assert(qcrypto_akcipher_verify(rsa, signature, key_size / BYTE, + dgst, SHA1_DGST_LEN, + &error_abort) == 0); + } + g_test_timer_elapsed(); + g_test_message("rsa%lu (%s-%s) verify %lu times in %.2f seconds," + " %.2f times/sec ", + key_size, QCryptoRSAPaddingAlgorithm_str(PADDING), + QCryptoHashAlgorithm_str(HASH), + count, g_test_timer_last(), + (double)count / g_test_timer_last()); +} + +static void test_rsa_1024_speed(const void *opaque) +{ + size_t key_size = (size_t)opaque; + test_rsa_speed(rsa1024_priv_key, sizeof(rsa1024_priv_key), key_size); +} + +static void test_rsa_2048_speed(const void *opaque) +{ + size_t key_size = (size_t)opaque; + test_rsa_speed(rsa2048_priv_key, sizeof(rsa2048_priv_key), key_size); +} + +static void test_rsa_4096_speed(const void *opaque) +{ + size_t key_size = (size_t)opaque; + test_rsa_speed(rsa4096_priv_key, sizeof(rsa4096_priv_key), key_size); +} + +int main(int argc, char **argv) +{ + char *alg = NULL; + char *size = NULL; + g_test_init(&argc, &argv, NULL); + g_assert(qcrypto_init(NULL) == 0); + struct sigaction new_action, old_action; + + new_action.sa_handler = alarm_handler; + + /* Set up the structure to specify the new action. */ + sigemptyset(&new_action.sa_mask); + new_action.sa_flags = 0; + sigaction(SIGALRM, NULL, &old_action); + g_assert(old_action.sa_handler != SIG_IGN); + sigaction(SIGALRM, &new_action, NULL); + +#define ADD_TEST(asym_alg, keysize) \ + if ((!alg || g_str_equal(alg, #asym_alg)) && \ + (!size || g_str_equal(size, #keysize))) \ + g_test_add_data_func( \ + "/crypto/akcipher/" #asym_alg "-" #keysize, \ + (void *)keysize, \ + test_ ## asym_alg ## _ ## keysize ## _speed) + + if (argc >= 2) { + alg = argv[1]; + } + if (argc >= 3) { + size = argv[2]; + } + + ADD_TEST(rsa, 1024); + ADD_TEST(rsa, 2048); + ADD_TEST(rsa, 4096); + + return g_test_run(); +} diff --git a/tests/bench/meson.build b/tests/bench/meson.build index 00b3c209dc..279a8fcc33 100644 --- a/tests/bench/meson.build +++ b/tests/bench/meson.build @@ -20,6 +20,7 @@ if have_block 'benchmark-crypto-hash': [crypto], 'benchmark-crypto-hmac': [crypto], 'benchmark-crypto-cipher': [crypto], + 'benchmark-crypto-akcipher': [crypto], } endif diff --git a/tests/bench/test_akcipher_keys.inc b/tests/bench/test_akcipher_keys.inc new file mode 100644 index 0000000000..df3eccb45e --- /dev/null +++ b/tests/bench/test_akcipher_keys.inc @@ -0,0 +1,537 @@ +/* + * Copyright (c) 2022 Bytedance, and/or its affiliates + * + * This work is licensed under the terms of the GNU GPL, version 2 or later. + * See the COPYING file in the top-level directory. + * + * Author: lei he + */ + +/* RSA test keys, generated by OpenSSL */ +static const uint8_t rsa1024_priv_key[] = { + 0x30, 0x82, 0x02, 0x5c, 0x02, 0x01, 0x00, 0x02, + 0x81, 0x81, 0x00, 0xe6, 0x4d, 0x76, 0x4f, 0xb2, + 0x97, 0x09, 0xad, 0x9d, 0x17, 0x33, 0xf2, 0x30, + 0x42, 0x83, 0xa9, 0xcb, 0x49, 0xa4, 0x2e, 0x59, + 0x5e, 0x75, 0x51, 0xd1, 0xac, 0xc8, 0x86, 0x3e, + 0xdb, 0x72, 0x2e, 0xb2, 0xf7, 0xc3, 0x5b, 0xc7, + 0xea, 0xed, 0x30, 0xd1, 0xf7, 0x37, 0xee, 0x9d, + 0x36, 0x59, 0x6f, 0xf8, 0xce, 0xc0, 0x5c, 0x82, + 0x80, 0x37, 0x83, 0xd7, 0x45, 0x6a, 0xe9, 0xea, + 0xc5, 0x3a, 0x59, 0x6b, 0x34, 0x31, 0x44, 0x00, + 0x74, 0xa7, 0x29, 0xab, 0x79, 0x4a, 0xbd, 0xe8, + 0x25, 0x35, 0x01, 0x11, 0x40, 0xbf, 0x31, 0xbd, + 0xd3, 0xe0, 0x68, 0x1e, 0xd5, 0x5b, 0x2f, 0xe9, + 0x20, 0xf2, 0x9f, 0x46, 0x35, 0x30, 0xa8, 0xf1, + 0xfe, 0xef, 0xd8, 0x76, 0x23, 0x46, 0x34, 0x70, + 0xa1, 0xce, 0xc6, 0x65, 0x6d, 0xb0, 0x94, 0x7e, + 0xe5, 0x92, 0x45, 0x7b, 0xaa, 0xbb, 0x95, 0x97, + 0x77, 0xcd, 0xd3, 0x02, 0x03, 0x01, 0x00, 0x01, + 0x02, 0x81, 0x80, 0x30, 0x6a, 0xc4, 0x9e, 0xc8, + 0xba, 0xfc, 0x2b, 0xe5, 0xc4, 0xc5, 0x04, 0xfb, + 0xa4, 0x60, 0x2d, 0xc8, 0x31, 0x39, 0x35, 0x0d, + 0x50, 0xd0, 0x75, 0x5d, 0x11, 0x68, 0x2e, 0xe0, + 0xf4, 0x1d, 0xb3, 0x37, 0xa8, 0xe3, 0x07, 0x5e, + 0xa6, 0x43, 0x2b, 0x6a, 0x59, 0x01, 0x07, 0x47, + 0x41, 0xef, 0xd7, 0x9c, 0x85, 0x4a, 0xe7, 0xa7, + 0xff, 0xf0, 0xab, 0xe5, 0x0c, 0x11, 0x08, 0x10, + 0x75, 0x5a, 0x68, 0xa0, 0x08, 0x03, 0xc9, 0x40, + 0x79, 0x67, 0x1d, 0x65, 0x89, 0x2d, 0x08, 0xf9, + 0xb5, 0x1b, 0x7d, 0xd2, 0x41, 0x3b, 0x33, 0xf2, + 0x47, 0x2f, 0x9c, 0x0b, 0xd5, 0xaf, 0xcb, 0xdb, + 0xbb, 0x37, 0x63, 0x03, 0xf8, 0xe7, 0x2e, 0xc7, + 0x3c, 0x86, 0x9f, 0xc2, 0x9b, 0xb4, 0x70, 0x6a, + 0x4d, 0x7c, 0xe4, 0x1b, 0x3a, 0xa9, 0xae, 0xd7, + 0xce, 0x7f, 0x56, 0xc2, 0x73, 0x5e, 0x58, 0x63, + 0xd5, 0x86, 0x41, 0x02, 0x41, 0x00, 0xf6, 0x56, + 0x69, 0xec, 0xef, 0x65, 0x95, 0xdc, 0x25, 0x47, + 0xe0, 0x6f, 0xb0, 0x4f, 0x79, 0x77, 0x0a, 0x5e, + 0x46, 0xcb, 0xbd, 0x0b, 0x71, 0x51, 0x2a, 0xa4, + 0x65, 0x29, 0x18, 0xc6, 0x30, 0xa0, 0x95, 0x4c, + 0x4b, 0xbe, 0x8c, 0x40, 0xe3, 0x9c, 0x23, 0x02, + 0x14, 0x43, 0xe9, 0x64, 0xea, 0xe3, 0xa8, 0xe2, + 0x1a, 0xd5, 0xf9, 0x5c, 0xe0, 0x36, 0x2c, 0x97, + 0xda, 0xd5, 0xc7, 0x46, 0xce, 0x11, 0x02, 0x41, + 0x00, 0xef, 0x56, 0x08, 0xb8, 0x29, 0xa5, 0xa6, + 0x7c, 0xf7, 0x5f, 0xb4, 0xf5, 0x63, 0xe7, 0xeb, + 0x45, 0xfd, 0x89, 0xaa, 0x94, 0xa6, 0x3d, 0x0b, + 0xd9, 0x04, 0x6f, 0x78, 0xe0, 0xbb, 0xa2, 0xd4, + 0x29, 0x83, 0x17, 0x95, 0x6f, 0x50, 0x3d, 0x40, + 0x5d, 0xe5, 0x24, 0xda, 0xc2, 0x23, 0x50, 0x86, + 0xa8, 0x34, 0xc8, 0x6f, 0xec, 0x7f, 0xb6, 0x45, + 0x3a, 0xdd, 0x78, 0x9b, 0xee, 0xa1, 0xe4, 0x09, + 0xa3, 0x02, 0x40, 0x5c, 0xd6, 0x66, 0x67, 0x58, + 0x35, 0xc5, 0xcb, 0xc8, 0xf5, 0x14, 0xbd, 0xa3, + 0x09, 0xe0, 0xb2, 0x1f, 0x63, 0x36, 0x75, 0x34, + 0x52, 0xea, 0xaa, 0xf7, 0x52, 0x2b, 0x99, 0xd8, + 0x6f, 0x61, 0x06, 0x34, 0x1e, 0x23, 0xf1, 0xb5, + 0x34, 0x03, 0x53, 0xe5, 0xd1, 0xb3, 0xc7, 0x80, + 0x5f, 0x7b, 0x32, 0xbf, 0x84, 0x2f, 0x2e, 0xf3, + 0x22, 0xb0, 0x91, 0x5a, 0x2f, 0x04, 0xd7, 0x4a, + 0x9a, 0x01, 0xb1, 0x02, 0x40, 0x34, 0x0b, 0x26, + 0x4c, 0x3d, 0xaa, 0x2a, 0xc0, 0xe3, 0xdd, 0xe8, + 0xf0, 0xaf, 0x6f, 0xe0, 0x06, 0x51, 0x32, 0x9d, + 0x68, 0x43, 0x99, 0xe4, 0xb8, 0xa5, 0x31, 0x44, + 0x3c, 0xc2, 0x30, 0x8f, 0x28, 0x13, 0xbc, 0x8e, + 0x1f, 0x2d, 0x78, 0x94, 0x45, 0x96, 0xad, 0x63, + 0xf0, 0x71, 0x53, 0x72, 0x64, 0xa3, 0x4d, 0xae, + 0xa0, 0xe3, 0xc8, 0x93, 0xd7, 0x50, 0x0f, 0x89, + 0x00, 0xe4, 0x2d, 0x3d, 0x37, 0x02, 0x41, 0x00, + 0xbe, 0xa6, 0x08, 0xe0, 0xc8, 0x15, 0x2a, 0x47, + 0xcb, 0xd5, 0xec, 0x93, 0xd3, 0xaa, 0x12, 0x82, + 0xaf, 0xac, 0x51, 0x5a, 0x5b, 0xa7, 0x93, 0x4b, + 0xb9, 0xab, 0x00, 0xfa, 0x5a, 0xea, 0x34, 0xe4, + 0x80, 0xf1, 0x44, 0x6a, 0x65, 0xe4, 0x33, 0x99, + 0xfb, 0x54, 0xd7, 0x89, 0x5a, 0x1b, 0xd6, 0x2b, + 0xcc, 0x6e, 0x4b, 0x19, 0xa0, 0x6d, 0x93, 0x9f, + 0xc3, 0x91, 0x7a, 0xa5, 0xd8, 0x59, 0x0e, 0x9e, +}; + +static const uint8_t rsa2048_priv_key[] = { + 0x30, 0x82, 0x04, 0xa4, 0x02, 0x01, 0x00, 0x02, + 0x82, 0x01, 0x01, 0x00, 0xbd, 0x9c, 0x83, 0x6b, + 0x0e, 0x8e, 0xcf, 0xfa, 0xaa, 0x4f, 0x6a, 0xf4, + 0xe3, 0x52, 0x0f, 0xa5, 0xd0, 0xbe, 0x5e, 0x7f, + 0x08, 0x24, 0xba, 0x87, 0x46, 0xfb, 0x28, 0x93, + 0xe5, 0xe5, 0x81, 0x42, 0xc0, 0xf9, 0x17, 0xc7, + 0x81, 0x01, 0xf4, 0x18, 0x6a, 0x17, 0xf5, 0x57, + 0x20, 0x37, 0xcf, 0xf9, 0x74, 0x5e, 0xe1, 0x48, + 0x6a, 0x71, 0x0a, 0x0f, 0x79, 0x72, 0x2b, 0x46, + 0x10, 0x53, 0xdc, 0x14, 0x43, 0xbd, 0xbc, 0x6d, + 0x15, 0x6f, 0x15, 0x4e, 0xf0, 0x0d, 0x89, 0x39, + 0x02, 0xc3, 0x68, 0x5c, 0xa8, 0xfc, 0xed, 0x64, + 0x9d, 0x98, 0xb7, 0xcd, 0x83, 0x66, 0x93, 0xc3, + 0xd9, 0x57, 0xa0, 0x21, 0x93, 0xad, 0x5c, 0x75, + 0x69, 0x88, 0x9e, 0x81, 0xdc, 0x7f, 0x1d, 0xd5, + 0xbd, 0x1c, 0xc1, 0x30, 0x56, 0xa5, 0xda, 0x99, + 0x46, 0xa6, 0x6d, 0x0e, 0x6f, 0x5e, 0x51, 0x34, + 0x49, 0x73, 0xc3, 0x67, 0x49, 0x7e, 0x21, 0x2a, + 0x20, 0xa7, 0x2b, 0x92, 0x73, 0x1d, 0xa5, 0x25, + 0x2a, 0xd0, 0x3a, 0x89, 0x75, 0xb2, 0xbb, 0x19, + 0x37, 0x78, 0x48, 0xd2, 0xf2, 0x2a, 0x6d, 0x9e, + 0xc6, 0x26, 0xca, 0x46, 0x8c, 0xf1, 0x42, 0x2a, + 0x31, 0xb2, 0xfc, 0xe7, 0x55, 0x51, 0xff, 0x07, + 0x13, 0x5b, 0x36, 0x59, 0x2b, 0x43, 0x30, 0x4b, + 0x05, 0x5c, 0xd2, 0x45, 0xa0, 0xa0, 0x7c, 0x17, + 0x5b, 0x07, 0xbb, 0x5d, 0x83, 0x80, 0x92, 0x6d, + 0x87, 0x1a, 0x43, 0xac, 0xc7, 0x6b, 0x8d, 0x11, + 0x60, 0x27, 0xd2, 0xdf, 0xdb, 0x71, 0x02, 0x55, + 0x6e, 0xb5, 0xca, 0x4d, 0xda, 0x59, 0x0d, 0xb8, + 0x8c, 0xcd, 0xd3, 0x0e, 0x55, 0xa0, 0xa4, 0x8d, + 0xa0, 0x14, 0x10, 0x48, 0x42, 0x35, 0x56, 0x08, + 0xf7, 0x29, 0x5f, 0xa2, 0xea, 0xa4, 0x5e, 0x8e, + 0x99, 0x56, 0xaa, 0x5a, 0x8c, 0x23, 0x8f, 0x35, + 0x22, 0x8a, 0xff, 0xed, 0x02, 0x03, 0x01, 0x00, + 0x01, 0x02, 0x82, 0x01, 0x00, 0x4e, 0x4a, 0xf3, + 0x44, 0xe0, 0x64, 0xfd, 0xe1, 0xde, 0x33, 0x1e, + 0xd1, 0xf1, 0x8f, 0x6f, 0xe0, 0xa2, 0xfa, 0x08, + 0x60, 0xe1, 0xc6, 0xf0, 0xb2, 0x6d, 0x0f, 0xc6, + 0x28, 0x93, 0xb4, 0x19, 0x94, 0xab, 0xc3, 0xef, + 0x1a, 0xb4, 0xdd, 0x4e, 0xa2, 0x4a, 0x24, 0x8c, + 0x6c, 0xa6, 0x64, 0x05, 0x5f, 0x56, 0xba, 0xda, + 0xc1, 0x21, 0x1a, 0x7d, 0xf1, 0xf7, 0xce, 0xb9, + 0xa9, 0x9b, 0x92, 0x54, 0xfc, 0x95, 0x20, 0x22, + 0x4e, 0xd4, 0x9b, 0xe2, 0xab, 0x8e, 0x99, 0xb8, + 0x40, 0xaf, 0x30, 0x6a, 0xc6, 0x60, 0x0c, 0xd8, + 0x25, 0x44, 0xa1, 0xcb, 0xbb, 0x73, 0x77, 0x86, + 0xaa, 0x46, 0xf3, 0x54, 0xae, 0xa8, 0xa0, 0xdb, + 0xdd, 0xab, 0x6e, 0xfb, 0x2c, 0x5a, 0x14, 0xaf, + 0x08, 0x13, 0xa7, 0x6c, 0xe9, 0xfd, 0xcd, 0x4c, + 0x1f, 0x20, 0x3a, 0x16, 0x2b, 0xf0, 0xb6, 0x7c, + 0x47, 0x5f, 0xd1, 0x0a, 0x2c, 0xc4, 0xa5, 0x68, + 0xd0, 0x43, 0x75, 0x6b, 0x65, 0xaa, 0x32, 0xc6, + 0x99, 0x06, 0xcb, 0x8f, 0xe6, 0x8d, 0xce, 0xbf, + 0x4d, 0x0d, 0x7b, 0x22, 0x2a, 0x8a, 0xcb, 0x7d, + 0x7f, 0x16, 0x48, 0x85, 0xf1, 0x86, 0xcb, 0x54, + 0xb9, 0x39, 0xd4, 0xbc, 0xe3, 0x2d, 0x27, 0x59, + 0xf6, 0x81, 0x5e, 0x94, 0x45, 0xdf, 0xb9, 0x22, + 0xaf, 0x64, 0x0d, 0x14, 0xec, 0x8c, 0xeb, 0x71, + 0xac, 0xee, 0x09, 0x4c, 0xbf, 0x34, 0xf9, 0xf4, + 0x66, 0x77, 0x36, 0x3b, 0x41, 0x74, 0x01, 0x4f, + 0xfc, 0x56, 0x83, 0xba, 0x14, 0xb0, 0x2f, 0xdd, + 0x4d, 0xb9, 0x3f, 0xdf, 0x71, 0xbe, 0x7b, 0xba, + 0x66, 0xc8, 0xc5, 0x42, 0xc9, 0xba, 0x18, 0x63, + 0x45, 0x07, 0x2f, 0x84, 0x3e, 0xc3, 0xfb, 0x47, + 0xda, 0xd4, 0x1d, 0x0e, 0x9d, 0x96, 0xc0, 0xea, + 0xee, 0x45, 0x2f, 0xe1, 0x62, 0x23, 0xee, 0xef, + 0x3d, 0x5e, 0x55, 0xa1, 0x0d, 0x02, 0x81, 0x81, + 0x00, 0xeb, 0x76, 0x88, 0xd3, 0xae, 0x3f, 0x1d, + 0xf2, 0x49, 0xe0, 0x37, 0x49, 0x83, 0x82, 0x6c, + 0xf7, 0xf1, 0x17, 0x30, 0x75, 0x2e, 0x89, 0x06, + 0x88, 0x56, 0x32, 0xf6, 0xfa, 0x58, 0xcb, 0x3c, + 0x98, 0x67, 0xc3, 0xde, 0x10, 0x82, 0xe5, 0xfa, + 0xfa, 0x52, 0x47, 0x8d, 0xd7, 0x00, 0xc6, 0xcb, + 0xf7, 0xf6, 0x57, 0x9b, 0x6e, 0x0c, 0xac, 0xe8, + 0x3b, 0xd1, 0xde, 0xb5, 0x34, 0xaf, 0x8b, 0x2a, + 0xb0, 0x2d, 0x01, 0xeb, 0x7c, 0xa0, 0x42, 0x26, + 0xbb, 0x2b, 0x43, 0x0e, 0x1d, 0xe2, 0x4e, 0xc9, + 0xc1, 0x0a, 0x67, 0x1d, 0xfc, 0x83, 0x25, 0xce, + 0xb2, 0x18, 0xd9, 0x0d, 0x70, 0xf5, 0xa3, 0x5a, + 0x9c, 0x99, 0xdd, 0x47, 0xa1, 0x57, 0xe7, 0x20, + 0xde, 0xa1, 0x29, 0x8d, 0x96, 0x62, 0xf9, 0x26, + 0x95, 0x51, 0xa6, 0xe7, 0x09, 0x8b, 0xba, 0x16, + 0x8b, 0x19, 0x5b, 0xf9, 0x27, 0x0d, 0xc5, 0xd6, + 0x5f, 0x02, 0x81, 0x81, 0x00, 0xce, 0x26, 0x31, + 0xb5, 0x43, 0x53, 0x95, 0x39, 0xdd, 0x01, 0x98, + 0x8b, 0x3d, 0x27, 0xeb, 0x0b, 0x87, 0x1c, 0x95, + 0xfc, 0x3e, 0x36, 0x51, 0x31, 0xb5, 0xea, 0x59, + 0x56, 0xc0, 0x97, 0x62, 0xf0, 0x63, 0x2b, 0xb6, + 0x30, 0x9b, 0xdf, 0x19, 0x10, 0xe9, 0xa0, 0x3d, + 0xea, 0x54, 0x5a, 0xe6, 0xc6, 0x9e, 0x7e, 0xb5, + 0xf0, 0xb0, 0x54, 0xef, 0xc3, 0xe1, 0x47, 0xa6, + 0x95, 0xc7, 0xe4, 0xa3, 0x4a, 0x30, 0x68, 0x24, + 0x98, 0x7d, 0xc1, 0x34, 0xa9, 0xcb, 0xbc, 0x3c, + 0x08, 0x9c, 0x7d, 0x0c, 0xa2, 0xb7, 0x60, 0xaa, + 0x38, 0x08, 0x16, 0xa6, 0x7f, 0xdb, 0xd2, 0xb1, + 0x67, 0xe7, 0x93, 0x8e, 0xbb, 0x7e, 0xb9, 0xb5, + 0xd0, 0xd0, 0x9f, 0x7b, 0xcc, 0x46, 0xe6, 0x74, + 0x78, 0x1a, 0x96, 0xd6, 0xd7, 0x74, 0x34, 0x54, + 0x3b, 0x54, 0x55, 0x7f, 0x89, 0x81, 0xbc, 0x40, + 0x55, 0x87, 0x24, 0x95, 0x33, 0x02, 0x81, 0x81, + 0x00, 0xb0, 0x18, 0x5d, 0x2a, 0x1a, 0x95, 0x9f, + 0x9a, 0xd5, 0x3f, 0x37, 0x79, 0xe6, 0x3d, 0x83, + 0xab, 0x46, 0x86, 0x36, 0x3a, 0x5d, 0x0c, 0x23, + 0x73, 0x91, 0x2b, 0xda, 0x63, 0xce, 0x46, 0x68, + 0xd1, 0xfe, 0x40, 0x90, 0xf2, 0x3e, 0x43, 0x2b, + 0x19, 0x4c, 0xb1, 0xb0, 0xd5, 0x8c, 0x02, 0x21, + 0x07, 0x18, 0x17, 0xda, 0xe9, 0x49, 0xd7, 0x82, + 0x73, 0x42, 0x78, 0xd1, 0x82, 0x4e, 0x8a, 0xc0, + 0xe9, 0x33, 0x2f, 0xcd, 0x62, 0xce, 0x23, 0xca, + 0xfd, 0x8d, 0xd4, 0x3f, 0x59, 0x80, 0x27, 0xb6, + 0x61, 0x85, 0x9b, 0x2a, 0xe4, 0xef, 0x5c, 0x36, + 0x22, 0x21, 0xcd, 0x2a, 0x6d, 0x41, 0x77, 0xe2, + 0xcb, 0x5d, 0x93, 0x0d, 0x00, 0x10, 0x52, 0x8d, + 0xd5, 0x92, 0x28, 0x16, 0x78, 0xd3, 0x1a, 0x4c, + 0x8d, 0xbd, 0x9c, 0x1a, 0x0b, 0x9c, 0x91, 0x16, + 0x4c, 0xff, 0x31, 0x36, 0xbb, 0xcb, 0x64, 0x1a, + 0xf7, 0x02, 0x81, 0x80, 0x32, 0x65, 0x09, 0xdf, + 0xca, 0xee, 0xa2, 0xdb, 0x3b, 0x58, 0xc9, 0x86, + 0xb8, 0x53, 0x8a, 0xd5, 0x0d, 0x99, 0x82, 0x5c, + 0xe0, 0x84, 0x7c, 0xc2, 0xcf, 0x3a, 0xd3, 0xce, + 0x2e, 0x54, 0x93, 0xbe, 0x3a, 0x30, 0x14, 0x60, + 0xbb, 0xaa, 0x05, 0x41, 0xaa, 0x2b, 0x1f, 0x17, + 0xaa, 0xb9, 0x72, 0x12, 0xf9, 0xe9, 0xf5, 0xe6, + 0x39, 0xe4, 0xf9, 0x9c, 0x03, 0xf5, 0x75, 0x16, + 0xc6, 0x7f, 0xf1, 0x1f, 0x10, 0xc8, 0x54, 0xb1, + 0xe6, 0x84, 0x15, 0xb0, 0xb0, 0x7a, 0x7a, 0x9e, + 0x8c, 0x4a, 0xd1, 0x8c, 0xf1, 0x91, 0x32, 0xeb, + 0x71, 0xa6, 0xbf, 0xdb, 0x1f, 0xcc, 0xd8, 0xcb, + 0x92, 0xc3, 0xf2, 0xaf, 0x89, 0x22, 0x32, 0xfd, + 0x32, 0x12, 0xda, 0xbb, 0xac, 0x55, 0x68, 0x01, + 0x78, 0x56, 0x89, 0x7c, 0xb0, 0x0e, 0x9e, 0xcc, + 0xc6, 0x28, 0x04, 0x7e, 0x83, 0xf5, 0x96, 0x30, + 0x92, 0x51, 0xf2, 0x1b, 0x02, 0x81, 0x81, 0x00, + 0x83, 0x6d, 0xd1, 0x98, 0x90, 0x41, 0x8c, 0xa7, + 0x92, 0x83, 0xac, 0x89, 0x05, 0x0c, 0x79, 0x67, + 0x90, 0xb6, 0xa1, 0xf3, 0x2f, 0xca, 0xf0, 0x15, + 0xe0, 0x30, 0x58, 0xe9, 0x4f, 0xcb, 0x4c, 0x56, + 0x56, 0x56, 0x14, 0x3f, 0x1b, 0x79, 0xb6, 0xef, + 0x57, 0x4b, 0x28, 0xbd, 0xb0, 0xe6, 0x0c, 0x49, + 0x4b, 0xbe, 0xe1, 0x57, 0x28, 0x2a, 0x23, 0x5e, + 0xc4, 0xa2, 0x19, 0x4b, 0x00, 0x67, 0x78, 0xd9, + 0x26, 0x6e, 0x17, 0x25, 0xce, 0xe4, 0xfd, 0xde, + 0x86, 0xa8, 0x5a, 0x67, 0x47, 0x6b, 0x15, 0x09, + 0xe1, 0xec, 0x8e, 0x62, 0x98, 0x91, 0x6f, 0xc0, + 0x98, 0x0c, 0x70, 0x0e, 0x7d, 0xbe, 0x63, 0xbd, + 0x12, 0x5a, 0x98, 0x1c, 0xe3, 0x0c, 0xfb, 0xc7, + 0xfb, 0x1b, 0xbd, 0x02, 0x87, 0xcc, 0x0c, 0xbb, + 0xc2, 0xd4, 0xb6, 0xc1, 0xa1, 0x23, 0xd3, 0x1e, + 0x21, 0x6f, 0x48, 0xba, 0x0e, 0x2e, 0xc7, 0x42 +}; + +static const uint8_t rsa4096_priv_key[] = { + 0x30, 0x82, 0x09, 0x29, 0x02, 0x01, 0x00, 0x02, + 0x82, 0x02, 0x01, 0x00, 0xcc, 0x30, 0xc6, 0x90, + 0x49, 0x2b, 0x86, 0xe7, 0x7a, 0xa5, 0x7a, 0x9a, + 0x4f, 0xee, 0x0e, 0xa1, 0x5c, 0x43, 0x64, 0xd0, + 0x76, 0xe1, 0xfd, 0x0b, 0xfd, 0x43, 0x7a, 0x65, + 0xe6, 0x20, 0xbd, 0xf2, 0x0e, 0xbe, 0x76, 0x54, + 0xae, 0x37, 0xbe, 0xa0, 0x02, 0x96, 0xae, 0x8d, + 0x8a, 0xae, 0x3b, 0x88, 0xbb, 0x67, 0xce, 0x7c, + 0x20, 0xbf, 0x14, 0xc3, 0x71, 0x51, 0x87, 0x03, + 0x34, 0xaa, 0x3c, 0x09, 0xff, 0xe9, 0xeb, 0xb7, + 0x85, 0x5c, 0xbb, 0x8d, 0xce, 0x8e, 0x3f, 0xd1, + 0x16, 0x30, 0x00, 0x32, 0x2f, 0x25, 0x8d, 0xef, + 0x71, 0xd9, 0xea, 0x6b, 0x45, 0x53, 0x49, 0xc3, + 0x09, 0x4f, 0xb0, 0xa8, 0xa5, 0x89, 0x76, 0x59, + 0x31, 0xa5, 0xf1, 0x5c, 0x42, 0x54, 0x57, 0x70, + 0x57, 0xad, 0xd8, 0xeb, 0x89, 0xa6, 0x87, 0xa2, + 0x6c, 0x95, 0x58, 0x8f, 0xb6, 0x82, 0xc7, 0xde, + 0xc2, 0x3a, 0xdc, 0x5b, 0xe8, 0x02, 0xcc, 0x26, + 0x4b, 0x01, 0xaa, 0xe6, 0xf3, 0x66, 0x4d, 0x90, + 0x85, 0xde, 0xf4, 0x5d, 0x80, 0x98, 0xc6, 0x65, + 0xcf, 0x44, 0x4c, 0xde, 0xb5, 0x4a, 0xfc, 0xda, + 0x0a, 0x0a, 0x10, 0x26, 0xa3, 0xcb, 0x9d, 0xe4, + 0x8d, 0xab, 0x2c, 0x04, 0xfd, 0xaa, 0xfc, 0x3b, + 0xac, 0x4e, 0x56, 0xb8, 0x4c, 0x9f, 0x22, 0x49, + 0xcb, 0x76, 0x45, 0x24, 0x36, 0x2d, 0xbb, 0xe6, + 0x7e, 0xa9, 0x93, 0x13, 0x96, 0x1e, 0xfc, 0x4b, + 0x75, 0xd4, 0x54, 0xc8, 0x8c, 0x55, 0xe6, 0x3f, + 0x09, 0x5a, 0x03, 0x74, 0x7c, 0x8a, 0xc8, 0xe7, + 0x49, 0x0b, 0x86, 0x7c, 0x97, 0xa0, 0xf2, 0x0d, + 0xf1, 0x5c, 0x0e, 0x7a, 0xc0, 0x3f, 0x78, 0x2d, + 0x9b, 0xe2, 0x26, 0xa0, 0x89, 0x49, 0x0c, 0xad, + 0x79, 0xa6, 0x82, 0x98, 0xa6, 0xb7, 0x74, 0xb4, + 0x45, 0xc8, 0xed, 0xea, 0x81, 0xcd, 0xf0, 0x3b, + 0x8e, 0x24, 0xfb, 0x0c, 0xd0, 0x3a, 0x14, 0xb9, + 0xb4, 0x3b, 0x69, 0xd9, 0xf2, 0x42, 0x6e, 0x7f, + 0x6f, 0x5e, 0xb1, 0x52, 0x5b, 0xaa, 0xef, 0xae, + 0x1e, 0x34, 0xca, 0xed, 0x0a, 0x8d, 0x56, 0xd6, + 0xdd, 0xd4, 0x2c, 0x54, 0x7a, 0x57, 0xca, 0x7e, + 0x4a, 0x11, 0xde, 0x48, 0xdf, 0x2b, 0x09, 0x97, + 0x39, 0x24, 0xce, 0x45, 0xe0, 0x75, 0xb1, 0x19, + 0x42, 0xdb, 0x63, 0x40, 0x9b, 0xb9, 0x95, 0x96, + 0x78, 0x91, 0xd5, 0x19, 0x12, 0xab, 0xef, 0x55, + 0x6f, 0x0d, 0x65, 0xc0, 0x8f, 0x62, 0x99, 0x78, + 0xc0, 0xe0, 0xe1, 0x33, 0xc7, 0x68, 0xff, 0x29, + 0x66, 0x22, 0x3a, 0x6f, 0xa0, 0xf8, 0x5c, 0x68, + 0x9b, 0xa9, 0x05, 0xad, 0x6b, 0x1d, 0xae, 0xc1, + 0x30, 0xbb, 0xfe, 0xb7, 0x31, 0x85, 0x0d, 0xd1, + 0xd5, 0xfc, 0x43, 0x1e, 0xb3, 0x61, 0x6f, 0xc4, + 0x75, 0xed, 0x76, 0x9d, 0x13, 0xb3, 0x61, 0x57, + 0xc8, 0x33, 0x0d, 0x77, 0x84, 0xf0, 0xc7, 0x62, + 0xb9, 0x9e, 0xd5, 0x01, 0xfa, 0x87, 0x4a, 0xf5, + 0xd7, 0x4f, 0x5d, 0xae, 0xe7, 0x08, 0xd2, 0x5a, + 0x65, 0x30, 0xc9, 0xf0, 0x0a, 0x11, 0xf1, 0x2a, + 0xd3, 0x43, 0x43, 0xca, 0x05, 0x90, 0x85, 0xf4, + 0xbc, 0x37, 0x49, 0x40, 0x45, 0x35, 0xd3, 0x56, + 0x06, 0x4c, 0x63, 0x93, 0x07, 0x14, 0x8b, 0xd3, + 0x12, 0xd0, 0xe5, 0x00, 0x48, 0x76, 0xd2, 0xdf, + 0x7c, 0xea, 0xc7, 0xff, 0xf0, 0x88, 0xd5, 0xa4, + 0x61, 0x7d, 0x79, 0xc2, 0xda, 0x53, 0x24, 0xdc, + 0x20, 0xae, 0xe6, 0x08, 0x65, 0xef, 0xc9, 0x0d, + 0x7d, 0x66, 0x6d, 0x1b, 0x1c, 0x5d, 0x46, 0xe1, + 0x26, 0x8a, 0x29, 0x77, 0x76, 0x19, 0xe5, 0x19, + 0x2a, 0x75, 0x21, 0xf1, 0x92, 0x8a, 0x9c, 0x7b, + 0xe8, 0x0b, 0x38, 0xc1, 0xbf, 0x76, 0x22, 0x45, + 0x4a, 0xd3, 0x43, 0xc3, 0x8c, 0x74, 0xd8, 0xd8, + 0xec, 0x3e, 0x14, 0xdf, 0x02, 0x03, 0x01, 0x00, + 0x01, 0x02, 0x82, 0x02, 0x01, 0x00, 0x9e, 0x13, + 0x64, 0xa5, 0x6e, 0xff, 0xf3, 0x80, 0x60, 0xc2, + 0x9b, 0x17, 0xbb, 0xa9, 0x60, 0x4a, 0x2b, 0x53, + 0x41, 0x48, 0xe1, 0xc0, 0x32, 0x56, 0x85, 0xcb, + 0x27, 0x86, 0x9b, 0x91, 0xdd, 0x7a, 0xf7, 0x4f, + 0x1b, 0xec, 0x92, 0xb3, 0x35, 0x30, 0x4a, 0xd0, + 0xbc, 0x71, 0x77, 0x5b, 0x4b, 0x5b, 0x9f, 0x39, + 0xcd, 0xf0, 0xea, 0xa9, 0x03, 0x3a, 0x0b, 0x10, + 0x42, 0xa5, 0x88, 0xb0, 0x01, 0xaa, 0xfc, 0x23, + 0xec, 0x08, 0x37, 0x86, 0x82, 0xec, 0x55, 0x6c, + 0x6a, 0x9b, 0x43, 0xc2, 0x05, 0x64, 0xd4, 0x7b, + 0x0e, 0x56, 0xc0, 0x9d, 0x23, 0x8d, 0xc8, 0x2d, + 0xa2, 0x7d, 0x0b, 0x48, 0x56, 0x4b, 0x39, 0x5c, + 0x21, 0xf3, 0x0b, 0x2c, 0x9c, 0x9d, 0xff, 0xfb, + 0xab, 0x75, 0x9d, 0x6b, 0x48, 0xf3, 0x8f, 0xad, + 0x0c, 0x74, 0x01, 0xfb, 0xdc, 0x83, 0xe5, 0x97, + 0x79, 0x84, 0x4a, 0x79, 0xa6, 0xfe, 0xbf, 0xae, + 0xea, 0xbc, 0xfa, 0x74, 0x60, 0x0a, 0x4b, 0x84, + 0x77, 0xa7, 0xda, 0xfb, 0xaf, 0xd2, 0x73, 0x2b, + 0xd2, 0xec, 0x1e, 0x79, 0x91, 0xc9, 0x18, 0x30, + 0xe5, 0x6f, 0x27, 0x36, 0x83, 0x2a, 0x66, 0xc3, + 0xcb, 0x88, 0x94, 0xe4, 0x5f, 0x3f, 0xbd, 0xe2, + 0x11, 0x43, 0x61, 0x31, 0x84, 0x91, 0x49, 0x40, + 0x29, 0x1b, 0x58, 0x18, 0x47, 0x8e, 0xb1, 0x22, + 0xd6, 0xc4, 0xaa, 0x6a, 0x3d, 0x22, 0x7c, 0xa5, + 0xa0, 0x4c, 0x0a, 0xfc, 0x46, 0x66, 0xbb, 0xbe, + 0x04, 0x71, 0xe8, 0x9b, 0x76, 0xf1, 0x47, 0x39, + 0x6a, 0x2f, 0x23, 0xad, 0x78, 0x80, 0x1c, 0x22, + 0xcd, 0x41, 0x5e, 0x09, 0x16, 0x6c, 0x91, 0x48, + 0x91, 0x91, 0x3d, 0x8c, 0xe6, 0xba, 0x81, 0x8d, + 0xbb, 0xf2, 0xd0, 0xaa, 0xc7, 0x8f, 0xc6, 0x01, + 0x60, 0xa7, 0xef, 0x1e, 0x8e, 0x91, 0x6d, 0xcc, + 0x30, 0x9e, 0xea, 0x7c, 0x56, 0x9d, 0x42, 0xcf, + 0x44, 0x85, 0x52, 0xa8, 0xf2, 0x36, 0x9c, 0x46, + 0xfa, 0x9d, 0xd3, 0x4e, 0x13, 0x46, 0x81, 0xce, + 0x99, 0xc9, 0x58, 0x47, 0xe4, 0xeb, 0x27, 0x56, + 0x29, 0x61, 0x0f, 0xb5, 0xcb, 0xf3, 0x48, 0x58, + 0x8f, 0xbc, 0xaf, 0x0a, 0xbf, 0x40, 0xd1, 0xf6, + 0x4f, 0xd2, 0x89, 0x4a, 0xff, 0x6f, 0x54, 0x70, + 0x49, 0x42, 0xf6, 0xf8, 0x0e, 0x4f, 0xa5, 0xf6, + 0x8b, 0x49, 0x80, 0xd4, 0xf5, 0x03, 0xf8, 0x65, + 0xe7, 0x1f, 0x0a, 0xc0, 0x8f, 0xd3, 0x7a, 0x70, + 0xca, 0x67, 0xaf, 0x71, 0xfd, 0x4b, 0xe1, 0x17, + 0x76, 0x74, 0x2e, 0x12, 0x7b, 0xad, 0x4b, 0xbb, + 0xd2, 0x64, 0xd0, 0xa9, 0xf9, 0x79, 0xa9, 0xa6, + 0x03, 0xd2, 0xc2, 0x8f, 0x47, 0x59, 0x1b, 0x7c, + 0xe3, 0xce, 0x92, 0xb2, 0xac, 0x3e, 0xee, 0x12, + 0x43, 0x5f, 0x23, 0xec, 0xf1, 0xd3, 0xf2, 0x21, + 0x22, 0xe8, 0x7e, 0x7f, 0xa4, 0x93, 0x8e, 0x78, + 0x69, 0x69, 0xa0, 0xc9, 0xce, 0x86, 0x36, 0x13, + 0x10, 0x21, 0xc4, 0x7a, 0x52, 0xcf, 0x53, 0xd9, + 0x9b, 0x58, 0xe6, 0x2d, 0xeb, 0x60, 0xe3, 0x75, + 0x1a, 0x22, 0xf6, 0x3c, 0x54, 0x6b, 0xfa, 0xa1, + 0x5d, 0xf6, 0x38, 0xf0, 0xd4, 0x26, 0x2d, 0x7d, + 0x74, 0x99, 0x6a, 0x13, 0x8a, 0x07, 0x9f, 0x07, + 0xc5, 0xf4, 0xa8, 0x20, 0x11, 0xa9, 0x76, 0x11, + 0xe4, 0x48, 0xae, 0xa4, 0x8a, 0xa1, 0xbf, 0x1f, + 0xba, 0x37, 0x50, 0x53, 0x43, 0x91, 0x45, 0x88, + 0x03, 0x52, 0xba, 0xac, 0xc8, 0xe3, 0xe1, 0xba, + 0x63, 0x24, 0x72, 0xbe, 0x1d, 0x01, 0x1f, 0x6c, + 0x34, 0x10, 0xb8, 0x56, 0x4a, 0x67, 0x28, 0x4b, + 0x7a, 0x2b, 0x31, 0x29, 0x47, 0xda, 0xdf, 0x53, + 0x88, 0x79, 0x22, 0x31, 0x15, 0x56, 0xe3, 0xa0, + 0x79, 0x75, 0x94, 0x90, 0xb2, 0xe8, 0x4b, 0xca, + 0x82, 0x6d, 0x3c, 0x69, 0x43, 0x01, 0x02, 0x82, + 0x01, 0x01, 0x00, 0xe7, 0x8b, 0xd6, 0x1a, 0xe8, + 0x00, 0xed, 0x9d, 0x7c, 0x5a, 0x32, 0x10, 0xc1, + 0x53, 0x50, 0xbe, 0x27, 0x1d, 0xef, 0x69, 0x73, + 0xa2, 0x8f, 0x95, 0x96, 0x86, 0xfe, 0xfb, 0x82, + 0xdb, 0xea, 0x7d, 0x73, 0x5a, 0x2b, 0xe7, 0x4b, + 0xd5, 0x8f, 0x4f, 0xaf, 0x85, 0x1d, 0x15, 0x1a, + 0x58, 0x5f, 0x41, 0x79, 0x70, 0x5c, 0x8f, 0xa9, + 0x8e, 0x23, 0x31, 0xa7, 0x6d, 0x99, 0x0c, 0xf0, + 0x51, 0xbf, 0xbb, 0xd3, 0xe3, 0xa3, 0x34, 0xf0, + 0x1d, 0x7f, 0x4a, 0xb7, 0x8f, 0xf6, 0x0a, 0x49, + 0x65, 0xaf, 0x35, 0x7b, 0x02, 0x2e, 0x69, 0x49, + 0x95, 0xb5, 0x20, 0x70, 0xb2, 0x98, 0x54, 0x9b, + 0x8e, 0x4f, 0x48, 0xa8, 0xfa, 0x7e, 0xc7, 0x0a, + 0xae, 0x84, 0xe1, 0xba, 0x85, 0x98, 0x96, 0x8a, + 0x7c, 0xdd, 0xcc, 0xcd, 0xd8, 0x5b, 0x50, 0x60, + 0x88, 0x2d, 0xb6, 0x3e, 0xb8, 0xc2, 0xae, 0xa5, + 0x62, 0x10, 0xcd, 0xdc, 0xae, 0x86, 0xfe, 0x31, + 0x8b, 0xf7, 0xee, 0x1a, 0x35, 0x46, 0x83, 0xee, + 0x5f, 0x55, 0x9a, 0xc2, 0xca, 0x53, 0xb7, 0x2c, + 0xbf, 0x03, 0x8a, 0x78, 0xcc, 0x1d, 0x96, 0x7b, + 0xac, 0x00, 0x62, 0x1e, 0xbd, 0x6f, 0x0b, 0xa5, + 0xec, 0xf3, 0x02, 0x47, 0x47, 0x1e, 0x3d, 0xf6, + 0x78, 0x42, 0xe4, 0xcd, 0xf8, 0x14, 0xa3, 0x7d, + 0xd5, 0x2f, 0x6e, 0xcc, 0x1a, 0x9e, 0xe7, 0xcf, + 0x48, 0xb9, 0x80, 0xb8, 0xba, 0xaa, 0x7b, 0xae, + 0x65, 0x74, 0x09, 0x7b, 0x43, 0x26, 0x31, 0xa2, + 0x95, 0x43, 0x69, 0xd0, 0xb7, 0x95, 0xe4, 0x76, + 0x2c, 0x42, 0x19, 0x47, 0x4f, 0x63, 0x35, 0x9c, + 0xa2, 0x1a, 0xce, 0x28, 0xdf, 0x76, 0x98, 0x1d, + 0xd4, 0x2e, 0xf6, 0x3a, 0xc8, 0x3e, 0xc7, 0xaf, + 0xf7, 0x38, 0x3f, 0x83, 0x3a, 0xcb, 0xae, 0x41, + 0x75, 0x46, 0x63, 0xaa, 0x45, 0xb1, 0x2c, 0xd9, + 0x9f, 0x17, 0x37, 0x02, 0x82, 0x01, 0x01, 0x00, + 0xe1, 0xc1, 0x57, 0x4d, 0x0f, 0xa5, 0xea, 0x1d, + 0x39, 0x9c, 0xe0, 0xf0, 0x6d, 0x13, 0x7f, 0x79, + 0xdc, 0x72, 0x61, 0xc0, 0x7f, 0x88, 0xf6, 0x38, + 0x4f, 0x49, 0x06, 0x1e, 0xb8, 0x6c, 0x21, 0x04, + 0x60, 0x76, 0x5a, 0x6d, 0x04, 0xd1, 0x6d, 0xac, + 0x7c, 0x25, 0x4f, 0x32, 0xcb, 0xbc, 0xf8, 0x4a, + 0x22, 0x8f, 0xf5, 0x41, 0xfd, 0x1c, 0x76, 0x30, + 0xc2, 0x5f, 0x99, 0x13, 0x5c, 0x57, 0x0f, 0xfd, + 0xac, 0x0b, 0x10, 0x9a, 0x4f, 0x78, 0x0a, 0x86, + 0xe8, 0x07, 0x40, 0x40, 0x13, 0xba, 0x96, 0x07, + 0xd5, 0x39, 0x91, 0x51, 0x3e, 0x80, 0xd8, 0xa0, + 0x1f, 0xff, 0xdc, 0x9e, 0x09, 0x3b, 0xae, 0x38, + 0xa9, 0xc2, 0x14, 0x7b, 0xee, 0xd2, 0x69, 0x3d, + 0xd6, 0x26, 0x74, 0x72, 0x7b, 0x86, 0xd4, 0x13, + 0x5b, 0xb8, 0x76, 0x4b, 0x08, 0xfb, 0x93, 0xfa, + 0x44, 0xaf, 0x98, 0x3b, 0xfa, 0xd0, 0x2a, 0x04, + 0x8b, 0xb3, 0x3c, 0x6d, 0x32, 0xf7, 0x18, 0x6a, + 0x51, 0x0e, 0x40, 0x90, 0xce, 0x8e, 0xdf, 0xe8, + 0x07, 0x4c, 0x0f, 0xc7, 0xc8, 0xc2, 0x18, 0x58, + 0x6a, 0x01, 0xc8, 0x27, 0xd6, 0x43, 0x2a, 0xfb, + 0xa5, 0x34, 0x01, 0x3c, 0x72, 0xb1, 0x48, 0xce, + 0x2b, 0x9b, 0xb4, 0x69, 0xd9, 0x82, 0xf8, 0xbe, + 0x29, 0x88, 0x75, 0x96, 0xd8, 0xef, 0x78, 0x2a, + 0x07, 0x90, 0xa0, 0x56, 0x33, 0x42, 0x05, 0x19, + 0xb0, 0x69, 0x34, 0xf9, 0x03, 0xc5, 0xa8, 0x0d, + 0x72, 0xa2, 0x27, 0xb4, 0x45, 0x6d, 0xd2, 0x01, + 0x6c, 0xf1, 0x74, 0x51, 0x0a, 0x9a, 0xe2, 0xc1, + 0x96, 0x80, 0x30, 0x0e, 0xc6, 0xa9, 0x79, 0xf7, + 0x6f, 0xaf, 0xf6, 0xe8, 0x2a, 0xcc, 0xbd, 0xad, + 0x8f, 0xe0, 0x32, 0x87, 0x85, 0x49, 0x68, 0x88, + 0x15, 0x5c, 0xdb, 0x48, 0x40, 0xa2, 0xfa, 0x42, + 0xe8, 0x4e, 0x3e, 0xe2, 0x3f, 0xe0, 0xf3, 0x99, + 0x02, 0x82, 0x01, 0x00, 0x08, 0x39, 0x97, 0x69, + 0x6d, 0x44, 0x5b, 0x2c, 0x74, 0xf6, 0x5f, 0x40, + 0xe9, 0x1d, 0x24, 0x89, 0x1c, 0xaa, 0x9b, 0x8e, + 0x8b, 0x65, 0x02, 0xe4, 0xb5, 0x6c, 0x26, 0x32, + 0x98, 0xfb, 0x66, 0xe0, 0xfd, 0xef, 0xfe, 0x0f, + 0x41, 0x4a, 0x5c, 0xc4, 0xdf, 0xdf, 0x42, 0xa1, + 0x35, 0x46, 0x5e, 0x5b, 0xdd, 0x0c, 0x78, 0xbd, + 0x41, 0xb0, 0xa2, 0xdf, 0x68, 0xab, 0x23, 0xfc, + 0xa9, 0xac, 0xbd, 0xba, 0xd6, 0x54, 0x07, 0xc0, + 0x21, 0xa7, 0x6a, 0x96, 0x24, 0xdf, 0x20, 0x46, + 0x4d, 0x45, 0x27, 0x6c, 0x26, 0xea, 0x74, 0xeb, + 0x98, 0x89, 0x90, 0xdd, 0x8e, 0x23, 0x49, 0xf5, + 0xf7, 0x70, 0x9e, 0xb0, 0x5e, 0x10, 0x47, 0xe0, + 0x9a, 0x28, 0x88, 0xdf, 0xdb, 0xd8, 0x53, 0x0b, + 0x45, 0xf0, 0x19, 0x90, 0xe4, 0xdf, 0x02, 0x9f, + 0x60, 0x4e, 0x76, 0x11, 0x3b, 0x39, 0x24, 0xf1, + 0x3f, 0x3e, 0xb4, 0x8a, 0x1b, 0x84, 0xb7, 0x96, + 0xdf, 0xfb, 0xb0, 0xda, 0xec, 0x63, 0x68, 0x15, + 0xd7, 0xa9, 0xdb, 0x48, 0x9c, 0x12, 0xc3, 0xd6, + 0x85, 0xe8, 0x63, 0x1f, 0xd0, 0x1a, 0xb0, 0x12, + 0x60, 0x62, 0x43, 0xc1, 0x38, 0x86, 0x52, 0x23, + 0x7f, 0xc9, 0x62, 0xf8, 0x79, 0xbf, 0xb4, 0xfb, + 0x4e, 0x7e, 0x07, 0x22, 0x49, 0x8e, 0xbe, 0x6c, + 0xf0, 0x53, 0x5a, 0x53, 0xfd, 0x3c, 0x14, 0xd8, + 0xf7, 0x2c, 0x06, 0x2a, 0xe4, 0x64, 0xfd, 0x19, + 0x57, 0xa0, 0x92, 0xf6, 0xa3, 0x42, 0x47, 0x61, + 0x0b, 0xfd, 0x71, 0x5f, 0x98, 0xe2, 0x6c, 0x98, + 0xa8, 0xf9, 0xf9, 0x7f, 0x1c, 0x61, 0x5d, 0x8c, + 0xd1, 0xfb, 0x90, 0x28, 0x32, 0x9b, 0x7d, 0x82, + 0xf9, 0xcc, 0x47, 0xbe, 0xc7, 0x67, 0xc5, 0x93, + 0x22, 0x55, 0x0d, 0xd2, 0x73, 0xbe, 0xea, 0xed, + 0x4d, 0xb5, 0xf4, 0xc2, 0x25, 0x92, 0x44, 0x30, + 0xeb, 0xaa, 0x13, 0x11, 0x02, 0x82, 0x01, 0x01, + 0x00, 0x82, 0x42, 0x02, 0x53, 0x4e, 0x72, 0x16, + 0xf1, 0x21, 0xea, 0xe8, 0xc7, 0x10, 0xc8, 0xad, + 0x46, 0xec, 0xf1, 0x7a, 0x81, 0x8d, 0x94, 0xc3, + 0x2c, 0x9e, 0x62, 0xae, 0x0b, 0x4f, 0xb1, 0xe4, + 0x23, 0x18, 0x5d, 0x71, 0xb3, 0x71, 0x92, 0x3d, + 0x4b, 0xc6, 0x9d, 0xe8, 0x62, 0x90, 0xb7, 0xca, + 0x33, 0x4c, 0x59, 0xef, 0xd3, 0x51, 0x6d, 0xf8, + 0xac, 0x0d, 0x9b, 0x07, 0x41, 0xea, 0x87, 0xb9, + 0x8c, 0x4e, 0x96, 0x5b, 0xd0, 0x0d, 0x86, 0x5f, + 0xdc, 0x93, 0x48, 0x8b, 0xc3, 0xed, 0x1e, 0x3d, + 0xae, 0xeb, 0x52, 0xba, 0x0c, 0x3c, 0x9a, 0x2f, + 0x63, 0xc4, 0xd2, 0xe6, 0xc2, 0xb0, 0xe5, 0x24, + 0x93, 0x41, 0x2f, 0xe0, 0x8d, 0xd9, 0xb0, 0xc2, + 0x54, 0x91, 0x99, 0xc2, 0x9a, 0xc3, 0xb7, 0x79, + 0xea, 0x69, 0x83, 0xb7, 0x8d, 0x77, 0xf3, 0x60, + 0xe0, 0x88, 0x7d, 0x20, 0xc3, 0x8a, 0xe6, 0x4d, + 0x38, 0x2e, 0x3b, 0x0e, 0xe4, 0x9b, 0x01, 0x83, + 0xae, 0xe4, 0x71, 0xea, 0xc3, 0x22, 0xcb, 0xc1, + 0x59, 0xa9, 0xcc, 0x33, 0x56, 0xbc, 0xf9, 0x70, + 0xfe, 0xa2, 0xbb, 0xc0, 0x77, 0x6b, 0xe3, 0x79, + 0x8b, 0x95, 0x38, 0xba, 0x75, 0xdc, 0x5f, 0x7a, + 0x78, 0xab, 0x24, 0xbe, 0x26, 0x4d, 0x00, 0x8a, + 0xf1, 0x7e, 0x19, 0x64, 0x6f, 0xd3, 0x5f, 0xe8, + 0xdf, 0xa7, 0x59, 0xc5, 0x89, 0xb7, 0x2d, 0xa2, + 0xaf, 0xbd, 0xe0, 0x16, 0x56, 0x8f, 0xdc, 0x9e, + 0x28, 0x94, 0x3a, 0x07, 0xda, 0xb6, 0x2c, 0xb5, + 0x7d, 0x69, 0x14, 0xb0, 0x5e, 0x8a, 0x55, 0xef, + 0xfc, 0x6f, 0x10, 0x2b, 0xaa, 0x7a, 0xea, 0x12, + 0x9b, 0xb8, 0x6f, 0xb9, 0x71, 0x20, 0x30, 0xde, + 0x48, 0xa4, 0xb9, 0x61, 0xae, 0x5c, 0x33, 0x8d, + 0x02, 0xe8, 0x00, 0x99, 0xed, 0xc8, 0x8d, 0xc1, + 0x04, 0x95, 0xf1, 0x7f, 0xcb, 0x1f, 0xbc, 0x76, + 0x11, 0x02, 0x82, 0x01, 0x00, 0x2d, 0x0c, 0xa9, + 0x8f, 0x11, 0xc2, 0xf3, 0x02, 0xc8, 0xf2, 0x55, + 0xc5, 0x6d, 0x25, 0x88, 0xba, 0x59, 0xf6, 0xd1, + 0xdb, 0x94, 0x2f, 0x0b, 0x65, 0x2c, 0xad, 0x54, + 0xe0, 0x2b, 0xe6, 0xa3, 0x49, 0xa2, 0xb3, 0xca, + 0xd7, 0xec, 0x27, 0x32, 0xbb, 0xa4, 0x16, 0x90, + 0xbb, 0x67, 0xad, 0x1b, 0xb9, 0x0f, 0x78, 0xcb, + 0xad, 0x5c, 0xc3, 0x66, 0xd6, 0xbb, 0x97, 0x28, + 0x01, 0x31, 0xf9, 0x0f, 0x71, 0x2a, 0xb9, 0x5b, + 0xea, 0x34, 0x49, 0x9c, 0x6b, 0x13, 0x40, 0x65, + 0xbd, 0x18, 0x0a, 0x14, 0xf9, 0x33, 0x47, 0xe8, + 0x9f, 0x64, 0x0e, 0x24, 0xf6, 0xbb, 0x90, 0x23, + 0x66, 0x01, 0xa6, 0xa4, 0xa9, 0x7f, 0x64, 0x51, + 0xa3, 0x8a, 0x73, 0xc1, 0x80, 0xaf, 0x7a, 0x49, + 0x75, 0x5d, 0x56, 0x1c, 0xaa, 0x3f, 0x64, 0xa9, + 0x96, 0xfd, 0xb0, 0x90, 0xc5, 0xe0, 0x3d, 0x36, + 0x05, 0xad, 0xad, 0x84, 0x93, 0x84, 0xab, 0x1b, + 0x34, 0x57, 0x39, 0xae, 0x0e, 0x80, 0x0f, 0x4a, + 0x9b, 0x32, 0x56, 0xbd, 0x30, 0xeb, 0xd1, 0xc8, + 0xc4, 0x9f, 0x9c, 0x07, 0xb6, 0x05, 0xb1, 0x21, + 0x7f, 0x69, 0x92, 0x9f, 0xb7, 0x68, 0xe7, 0xde, + 0xb7, 0xbc, 0xb4, 0x89, 0x5b, 0x1c, 0x1b, 0x48, + 0xd1, 0x44, 0x6e, 0xd7, 0x6b, 0xe2, 0xa1, 0xf4, + 0xbf, 0x17, 0xb4, 0x43, 0x70, 0x26, 0xd4, 0xb9, + 0xf5, 0x19, 0x09, 0x08, 0xe9, 0xa3, 0x49, 0x7d, + 0x2f, 0xdc, 0xe8, 0x75, 0x79, 0xa1, 0xc1, 0x70, + 0x1b, 0x60, 0x97, 0xaf, 0x0c, 0x56, 0x68, 0xac, + 0x0e, 0x53, 0xbe, 0x56, 0xf4, 0xc3, 0xb1, 0xfb, + 0xfb, 0xff, 0x73, 0x5b, 0xa7, 0xf6, 0x99, 0x0e, + 0x14, 0x5a, 0x5f, 0x9d, 0xbd, 0x8e, 0x94, 0xec, + 0x8b, 0x38, 0x72, 0xbc, 0x8b, 0xca, 0x32, 0xa8, + 0x39, 0x43, 0xb1, 0x1d, 0x43, 0x29, 0xbe, 0x60, + 0xdb, 0x91, 0x6c, 0x9c, 0x06, +}; diff --git a/tests/unit/meson.build b/tests/unit/meson.build index a8af85128d..80ca622680 100644 --- a/tests/unit/meson.build +++ b/tests/unit/meson.build @@ -78,6 +78,7 @@ if have_block 'test-crypto-hash': [crypto], 'test-crypto-hmac': [crypto], 'test-crypto-cipher': [crypto], + 'test-crypto-akcipher': [crypto], 'test-crypto-secret': [crypto, keyutils], 'test-authz-simple': [authz], 'test-authz-list': [authz], diff --git a/tests/unit/test-crypto-akcipher.c b/tests/unit/test-crypto-akcipher.c new file mode 100644 index 0000000000..b5be563884 --- /dev/null +++ b/tests/unit/test-crypto-akcipher.c @@ -0,0 +1,711 @@ +/* + * QEMU Crypto cipher algorithms + * + * Copyright (c) 2022 Bytedance + * Author: lei he + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, see . + * + */ + +#include "qemu/osdep.h" + +#include "crypto/init.h" +#include "crypto/akcipher.h" +#include "qapi/error.h" + +static const uint8_t rsa1024_private_key[] = { + 0x30, 0x82, 0x02, 0x5c, 0x02, 0x01, 0x00, 0x02, + 0x81, 0x81, 0x00, 0xe6, 0x4d, 0x76, 0x4f, 0xb2, + 0x97, 0x09, 0xad, 0x9d, 0x17, 0x33, 0xf2, 0x30, + 0x42, 0x83, 0xa9, 0xcb, 0x49, 0xa4, 0x2e, 0x59, + 0x5e, 0x75, 0x51, 0xd1, 0xac, 0xc8, 0x86, 0x3e, + 0xdb, 0x72, 0x2e, 0xb2, 0xf7, 0xc3, 0x5b, 0xc7, + 0xea, 0xed, 0x30, 0xd1, 0xf7, 0x37, 0xee, 0x9d, + 0x36, 0x59, 0x6f, 0xf8, 0xce, 0xc0, 0x5c, 0x82, + 0x80, 0x37, 0x83, 0xd7, 0x45, 0x6a, 0xe9, 0xea, + 0xc5, 0x3a, 0x59, 0x6b, 0x34, 0x31, 0x44, 0x00, + 0x74, 0xa7, 0x29, 0xab, 0x79, 0x4a, 0xbd, 0xe8, + 0x25, 0x35, 0x01, 0x11, 0x40, 0xbf, 0x31, 0xbd, + 0xd3, 0xe0, 0x68, 0x1e, 0xd5, 0x5b, 0x2f, 0xe9, + 0x20, 0xf2, 0x9f, 0x46, 0x35, 0x30, 0xa8, 0xf1, + 0xfe, 0xef, 0xd8, 0x76, 0x23, 0x46, 0x34, 0x70, + 0xa1, 0xce, 0xc6, 0x65, 0x6d, 0xb0, 0x94, 0x7e, + 0xe5, 0x92, 0x45, 0x7b, 0xaa, 0xbb, 0x95, 0x97, + 0x77, 0xcd, 0xd3, 0x02, 0x03, 0x01, 0x00, 0x01, + 0x02, 0x81, 0x80, 0x30, 0x6a, 0xc4, 0x9e, 0xc8, + 0xba, 0xfc, 0x2b, 0xe5, 0xc4, 0xc5, 0x04, 0xfb, + 0xa4, 0x60, 0x2d, 0xc8, 0x31, 0x39, 0x35, 0x0d, + 0x50, 0xd0, 0x75, 0x5d, 0x11, 0x68, 0x2e, 0xe0, + 0xf4, 0x1d, 0xb3, 0x37, 0xa8, 0xe3, 0x07, 0x5e, + 0xa6, 0x43, 0x2b, 0x6a, 0x59, 0x01, 0x07, 0x47, + 0x41, 0xef, 0xd7, 0x9c, 0x85, 0x4a, 0xe7, 0xa7, + 0xff, 0xf0, 0xab, 0xe5, 0x0c, 0x11, 0x08, 0x10, + 0x75, 0x5a, 0x68, 0xa0, 0x08, 0x03, 0xc9, 0x40, + 0x79, 0x67, 0x1d, 0x65, 0x89, 0x2d, 0x08, 0xf9, + 0xb5, 0x1b, 0x7d, 0xd2, 0x41, 0x3b, 0x33, 0xf2, + 0x47, 0x2f, 0x9c, 0x0b, 0xd5, 0xaf, 0xcb, 0xdb, + 0xbb, 0x37, 0x63, 0x03, 0xf8, 0xe7, 0x2e, 0xc7, + 0x3c, 0x86, 0x9f, 0xc2, 0x9b, 0xb4, 0x70, 0x6a, + 0x4d, 0x7c, 0xe4, 0x1b, 0x3a, 0xa9, 0xae, 0xd7, + 0xce, 0x7f, 0x56, 0xc2, 0x73, 0x5e, 0x58, 0x63, + 0xd5, 0x86, 0x41, 0x02, 0x41, 0x00, 0xf6, 0x56, + 0x69, 0xec, 0xef, 0x65, 0x95, 0xdc, 0x25, 0x47, + 0xe0, 0x6f, 0xb0, 0x4f, 0x79, 0x77, 0x0a, 0x5e, + 0x46, 0xcb, 0xbd, 0x0b, 0x71, 0x51, 0x2a, 0xa4, + 0x65, 0x29, 0x18, 0xc6, 0x30, 0xa0, 0x95, 0x4c, + 0x4b, 0xbe, 0x8c, 0x40, 0xe3, 0x9c, 0x23, 0x02, + 0x14, 0x43, 0xe9, 0x64, 0xea, 0xe3, 0xa8, 0xe2, + 0x1a, 0xd5, 0xf9, 0x5c, 0xe0, 0x36, 0x2c, 0x97, + 0xda, 0xd5, 0xc7, 0x46, 0xce, 0x11, 0x02, 0x41, + 0x00, 0xef, 0x56, 0x08, 0xb8, 0x29, 0xa5, 0xa6, + 0x7c, 0xf7, 0x5f, 0xb4, 0xf5, 0x63, 0xe7, 0xeb, + 0x45, 0xfd, 0x89, 0xaa, 0x94, 0xa6, 0x3d, 0x0b, + 0xd9, 0x04, 0x6f, 0x78, 0xe0, 0xbb, 0xa2, 0xd4, + 0x29, 0x83, 0x17, 0x95, 0x6f, 0x50, 0x3d, 0x40, + 0x5d, 0xe5, 0x24, 0xda, 0xc2, 0x23, 0x50, 0x86, + 0xa8, 0x34, 0xc8, 0x6f, 0xec, 0x7f, 0xb6, 0x45, + 0x3a, 0xdd, 0x78, 0x9b, 0xee, 0xa1, 0xe4, 0x09, + 0xa3, 0x02, 0x40, 0x5c, 0xd6, 0x66, 0x67, 0x58, + 0x35, 0xc5, 0xcb, 0xc8, 0xf5, 0x14, 0xbd, 0xa3, + 0x09, 0xe0, 0xb2, 0x1f, 0x63, 0x36, 0x75, 0x34, + 0x52, 0xea, 0xaa, 0xf7, 0x52, 0x2b, 0x99, 0xd8, + 0x6f, 0x61, 0x06, 0x34, 0x1e, 0x23, 0xf1, 0xb5, + 0x34, 0x03, 0x53, 0xe5, 0xd1, 0xb3, 0xc7, 0x80, + 0x5f, 0x7b, 0x32, 0xbf, 0x84, 0x2f, 0x2e, 0xf3, + 0x22, 0xb0, 0x91, 0x5a, 0x2f, 0x04, 0xd7, 0x4a, + 0x9a, 0x01, 0xb1, 0x02, 0x40, 0x34, 0x0b, 0x26, + 0x4c, 0x3d, 0xaa, 0x2a, 0xc0, 0xe3, 0xdd, 0xe8, + 0xf0, 0xaf, 0x6f, 0xe0, 0x06, 0x51, 0x32, 0x9d, + 0x68, 0x43, 0x99, 0xe4, 0xb8, 0xa5, 0x31, 0x44, + 0x3c, 0xc2, 0x30, 0x8f, 0x28, 0x13, 0xbc, 0x8e, + 0x1f, 0x2d, 0x78, 0x94, 0x45, 0x96, 0xad, 0x63, + 0xf0, 0x71, 0x53, 0x72, 0x64, 0xa3, 0x4d, 0xae, + 0xa0, 0xe3, 0xc8, 0x93, 0xd7, 0x50, 0x0f, 0x89, + 0x00, 0xe4, 0x2d, 0x3d, 0x37, 0x02, 0x41, 0x00, + 0xbe, 0xa6, 0x08, 0xe0, 0xc8, 0x15, 0x2a, 0x47, + 0xcb, 0xd5, 0xec, 0x93, 0xd3, 0xaa, 0x12, 0x82, + 0xaf, 0xac, 0x51, 0x5a, 0x5b, 0xa7, 0x93, 0x4b, + 0xb9, 0xab, 0x00, 0xfa, 0x5a, 0xea, 0x34, 0xe4, + 0x80, 0xf1, 0x44, 0x6a, 0x65, 0xe4, 0x33, 0x99, + 0xfb, 0x54, 0xd7, 0x89, 0x5a, 0x1b, 0xd6, 0x2b, + 0xcc, 0x6e, 0x4b, 0x19, 0xa0, 0x6d, 0x93, 0x9f, + 0xc3, 0x91, 0x7a, 0xa5, 0xd8, 0x59, 0x0e, 0x9e, +}; + +static const uint8_t rsa1024_public_key[] = { + 0x30, 0x81, 0x89, 0x02, 0x81, 0x81, 0x00, 0xe6, + 0x4d, 0x76, 0x4f, 0xb2, 0x97, 0x09, 0xad, 0x9d, + 0x17, 0x33, 0xf2, 0x30, 0x42, 0x83, 0xa9, 0xcb, + 0x49, 0xa4, 0x2e, 0x59, 0x5e, 0x75, 0x51, 0xd1, + 0xac, 0xc8, 0x86, 0x3e, 0xdb, 0x72, 0x2e, 0xb2, + 0xf7, 0xc3, 0x5b, 0xc7, 0xea, 0xed, 0x30, 0xd1, + 0xf7, 0x37, 0xee, 0x9d, 0x36, 0x59, 0x6f, 0xf8, + 0xce, 0xc0, 0x5c, 0x82, 0x80, 0x37, 0x83, 0xd7, + 0x45, 0x6a, 0xe9, 0xea, 0xc5, 0x3a, 0x59, 0x6b, + 0x34, 0x31, 0x44, 0x00, 0x74, 0xa7, 0x29, 0xab, + 0x79, 0x4a, 0xbd, 0xe8, 0x25, 0x35, 0x01, 0x11, + 0x40, 0xbf, 0x31, 0xbd, 0xd3, 0xe0, 0x68, 0x1e, + 0xd5, 0x5b, 0x2f, 0xe9, 0x20, 0xf2, 0x9f, 0x46, + 0x35, 0x30, 0xa8, 0xf1, 0xfe, 0xef, 0xd8, 0x76, + 0x23, 0x46, 0x34, 0x70, 0xa1, 0xce, 0xc6, 0x65, + 0x6d, 0xb0, 0x94, 0x7e, 0xe5, 0x92, 0x45, 0x7b, + 0xaa, 0xbb, 0x95, 0x97, 0x77, 0xcd, 0xd3, 0x02, + 0x03, 0x01, 0x00, 0x01, +}; + +static const uint8_t rsa2048_private_key[] = { + 0x30, 0x82, 0x04, 0xa4, 0x02, 0x01, 0x00, 0x02, + 0x82, 0x01, 0x01, 0x00, 0xbd, 0x9c, 0x83, 0x6b, + 0x0e, 0x8e, 0xcf, 0xfa, 0xaa, 0x4f, 0x6a, 0xf4, + 0xe3, 0x52, 0x0f, 0xa5, 0xd0, 0xbe, 0x5e, 0x7f, + 0x08, 0x24, 0xba, 0x87, 0x46, 0xfb, 0x28, 0x93, + 0xe5, 0xe5, 0x81, 0x42, 0xc0, 0xf9, 0x17, 0xc7, + 0x81, 0x01, 0xf4, 0x18, 0x6a, 0x17, 0xf5, 0x57, + 0x20, 0x37, 0xcf, 0xf9, 0x74, 0x5e, 0xe1, 0x48, + 0x6a, 0x71, 0x0a, 0x0f, 0x79, 0x72, 0x2b, 0x46, + 0x10, 0x53, 0xdc, 0x14, 0x43, 0xbd, 0xbc, 0x6d, + 0x15, 0x6f, 0x15, 0x4e, 0xf0, 0x0d, 0x89, 0x39, + 0x02, 0xc3, 0x68, 0x5c, 0xa8, 0xfc, 0xed, 0x64, + 0x9d, 0x98, 0xb7, 0xcd, 0x83, 0x66, 0x93, 0xc3, + 0xd9, 0x57, 0xa0, 0x21, 0x93, 0xad, 0x5c, 0x75, + 0x69, 0x88, 0x9e, 0x81, 0xdc, 0x7f, 0x1d, 0xd5, + 0xbd, 0x1c, 0xc1, 0x30, 0x56, 0xa5, 0xda, 0x99, + 0x46, 0xa6, 0x6d, 0x0e, 0x6f, 0x5e, 0x51, 0x34, + 0x49, 0x73, 0xc3, 0x67, 0x49, 0x7e, 0x21, 0x2a, + 0x20, 0xa7, 0x2b, 0x92, 0x73, 0x1d, 0xa5, 0x25, + 0x2a, 0xd0, 0x3a, 0x89, 0x75, 0xb2, 0xbb, 0x19, + 0x37, 0x78, 0x48, 0xd2, 0xf2, 0x2a, 0x6d, 0x9e, + 0xc6, 0x26, 0xca, 0x46, 0x8c, 0xf1, 0x42, 0x2a, + 0x31, 0xb2, 0xfc, 0xe7, 0x55, 0x51, 0xff, 0x07, + 0x13, 0x5b, 0x36, 0x59, 0x2b, 0x43, 0x30, 0x4b, + 0x05, 0x5c, 0xd2, 0x45, 0xa0, 0xa0, 0x7c, 0x17, + 0x5b, 0x07, 0xbb, 0x5d, 0x83, 0x80, 0x92, 0x6d, + 0x87, 0x1a, 0x43, 0xac, 0xc7, 0x6b, 0x8d, 0x11, + 0x60, 0x27, 0xd2, 0xdf, 0xdb, 0x71, 0x02, 0x55, + 0x6e, 0xb5, 0xca, 0x4d, 0xda, 0x59, 0x0d, 0xb8, + 0x8c, 0xcd, 0xd3, 0x0e, 0x55, 0xa0, 0xa4, 0x8d, + 0xa0, 0x14, 0x10, 0x48, 0x42, 0x35, 0x56, 0x08, + 0xf7, 0x29, 0x5f, 0xa2, 0xea, 0xa4, 0x5e, 0x8e, + 0x99, 0x56, 0xaa, 0x5a, 0x8c, 0x23, 0x8f, 0x35, + 0x22, 0x8a, 0xff, 0xed, 0x02, 0x03, 0x01, 0x00, + 0x01, 0x02, 0x82, 0x01, 0x00, 0x4e, 0x4a, 0xf3, + 0x44, 0xe0, 0x64, 0xfd, 0xe1, 0xde, 0x33, 0x1e, + 0xd1, 0xf1, 0x8f, 0x6f, 0xe0, 0xa2, 0xfa, 0x08, + 0x60, 0xe1, 0xc6, 0xf0, 0xb2, 0x6d, 0x0f, 0xc6, + 0x28, 0x93, 0xb4, 0x19, 0x94, 0xab, 0xc3, 0xef, + 0x1a, 0xb4, 0xdd, 0x4e, 0xa2, 0x4a, 0x24, 0x8c, + 0x6c, 0xa6, 0x64, 0x05, 0x5f, 0x56, 0xba, 0xda, + 0xc1, 0x21, 0x1a, 0x7d, 0xf1, 0xf7, 0xce, 0xb9, + 0xa9, 0x9b, 0x92, 0x54, 0xfc, 0x95, 0x20, 0x22, + 0x4e, 0xd4, 0x9b, 0xe2, 0xab, 0x8e, 0x99, 0xb8, + 0x40, 0xaf, 0x30, 0x6a, 0xc6, 0x60, 0x0c, 0xd8, + 0x25, 0x44, 0xa1, 0xcb, 0xbb, 0x73, 0x77, 0x86, + 0xaa, 0x46, 0xf3, 0x54, 0xae, 0xa8, 0xa0, 0xdb, + 0xdd, 0xab, 0x6e, 0xfb, 0x2c, 0x5a, 0x14, 0xaf, + 0x08, 0x13, 0xa7, 0x6c, 0xe9, 0xfd, 0xcd, 0x4c, + 0x1f, 0x20, 0x3a, 0x16, 0x2b, 0xf0, 0xb6, 0x7c, + 0x47, 0x5f, 0xd1, 0x0a, 0x2c, 0xc4, 0xa5, 0x68, + 0xd0, 0x43, 0x75, 0x6b, 0x65, 0xaa, 0x32, 0xc6, + 0x99, 0x06, 0xcb, 0x8f, 0xe6, 0x8d, 0xce, 0xbf, + 0x4d, 0x0d, 0x7b, 0x22, 0x2a, 0x8a, 0xcb, 0x7d, + 0x7f, 0x16, 0x48, 0x85, 0xf1, 0x86, 0xcb, 0x54, + 0xb9, 0x39, 0xd4, 0xbc, 0xe3, 0x2d, 0x27, 0x59, + 0xf6, 0x81, 0x5e, 0x94, 0x45, 0xdf, 0xb9, 0x22, + 0xaf, 0x64, 0x0d, 0x14, 0xec, 0x8c, 0xeb, 0x71, + 0xac, 0xee, 0x09, 0x4c, 0xbf, 0x34, 0xf9, 0xf4, + 0x66, 0x77, 0x36, 0x3b, 0x41, 0x74, 0x01, 0x4f, + 0xfc, 0x56, 0x83, 0xba, 0x14, 0xb0, 0x2f, 0xdd, + 0x4d, 0xb9, 0x3f, 0xdf, 0x71, 0xbe, 0x7b, 0xba, + 0x66, 0xc8, 0xc5, 0x42, 0xc9, 0xba, 0x18, 0x63, + 0x45, 0x07, 0x2f, 0x84, 0x3e, 0xc3, 0xfb, 0x47, + 0xda, 0xd4, 0x1d, 0x0e, 0x9d, 0x96, 0xc0, 0xea, + 0xee, 0x45, 0x2f, 0xe1, 0x62, 0x23, 0xee, 0xef, + 0x3d, 0x5e, 0x55, 0xa1, 0x0d, 0x02, 0x81, 0x81, + 0x00, 0xeb, 0x76, 0x88, 0xd3, 0xae, 0x3f, 0x1d, + 0xf2, 0x49, 0xe0, 0x37, 0x49, 0x83, 0x82, 0x6c, + 0xf7, 0xf1, 0x17, 0x30, 0x75, 0x2e, 0x89, 0x06, + 0x88, 0x56, 0x32, 0xf6, 0xfa, 0x58, 0xcb, 0x3c, + 0x98, 0x67, 0xc3, 0xde, 0x10, 0x82, 0xe5, 0xfa, + 0xfa, 0x52, 0x47, 0x8d, 0xd7, 0x00, 0xc6, 0xcb, + 0xf7, 0xf6, 0x57, 0x9b, 0x6e, 0x0c, 0xac, 0xe8, + 0x3b, 0xd1, 0xde, 0xb5, 0x34, 0xaf, 0x8b, 0x2a, + 0xb0, 0x2d, 0x01, 0xeb, 0x7c, 0xa0, 0x42, 0x26, + 0xbb, 0x2b, 0x43, 0x0e, 0x1d, 0xe2, 0x4e, 0xc9, + 0xc1, 0x0a, 0x67, 0x1d, 0xfc, 0x83, 0x25, 0xce, + 0xb2, 0x18, 0xd9, 0x0d, 0x70, 0xf5, 0xa3, 0x5a, + 0x9c, 0x99, 0xdd, 0x47, 0xa1, 0x57, 0xe7, 0x20, + 0xde, 0xa1, 0x29, 0x8d, 0x96, 0x62, 0xf9, 0x26, + 0x95, 0x51, 0xa6, 0xe7, 0x09, 0x8b, 0xba, 0x16, + 0x8b, 0x19, 0x5b, 0xf9, 0x27, 0x0d, 0xc5, 0xd6, + 0x5f, 0x02, 0x81, 0x81, 0x00, 0xce, 0x26, 0x31, + 0xb5, 0x43, 0x53, 0x95, 0x39, 0xdd, 0x01, 0x98, + 0x8b, 0x3d, 0x27, 0xeb, 0x0b, 0x87, 0x1c, 0x95, + 0xfc, 0x3e, 0x36, 0x51, 0x31, 0xb5, 0xea, 0x59, + 0x56, 0xc0, 0x97, 0x62, 0xf0, 0x63, 0x2b, 0xb6, + 0x30, 0x9b, 0xdf, 0x19, 0x10, 0xe9, 0xa0, 0x3d, + 0xea, 0x54, 0x5a, 0xe6, 0xc6, 0x9e, 0x7e, 0xb5, + 0xf0, 0xb0, 0x54, 0xef, 0xc3, 0xe1, 0x47, 0xa6, + 0x95, 0xc7, 0xe4, 0xa3, 0x4a, 0x30, 0x68, 0x24, + 0x98, 0x7d, 0xc1, 0x34, 0xa9, 0xcb, 0xbc, 0x3c, + 0x08, 0x9c, 0x7d, 0x0c, 0xa2, 0xb7, 0x60, 0xaa, + 0x38, 0x08, 0x16, 0xa6, 0x7f, 0xdb, 0xd2, 0xb1, + 0x67, 0xe7, 0x93, 0x8e, 0xbb, 0x7e, 0xb9, 0xb5, + 0xd0, 0xd0, 0x9f, 0x7b, 0xcc, 0x46, 0xe6, 0x74, + 0x78, 0x1a, 0x96, 0xd6, 0xd7, 0x74, 0x34, 0x54, + 0x3b, 0x54, 0x55, 0x7f, 0x89, 0x81, 0xbc, 0x40, + 0x55, 0x87, 0x24, 0x95, 0x33, 0x02, 0x81, 0x81, + 0x00, 0xb0, 0x18, 0x5d, 0x2a, 0x1a, 0x95, 0x9f, + 0x9a, 0xd5, 0x3f, 0x37, 0x79, 0xe6, 0x3d, 0x83, + 0xab, 0x46, 0x86, 0x36, 0x3a, 0x5d, 0x0c, 0x23, + 0x73, 0x91, 0x2b, 0xda, 0x63, 0xce, 0x46, 0x68, + 0xd1, 0xfe, 0x40, 0x90, 0xf2, 0x3e, 0x43, 0x2b, + 0x19, 0x4c, 0xb1, 0xb0, 0xd5, 0x8c, 0x02, 0x21, + 0x07, 0x18, 0x17, 0xda, 0xe9, 0x49, 0xd7, 0x82, + 0x73, 0x42, 0x78, 0xd1, 0x82, 0x4e, 0x8a, 0xc0, + 0xe9, 0x33, 0x2f, 0xcd, 0x62, 0xce, 0x23, 0xca, + 0xfd, 0x8d, 0xd4, 0x3f, 0x59, 0x80, 0x27, 0xb6, + 0x61, 0x85, 0x9b, 0x2a, 0xe4, 0xef, 0x5c, 0x36, + 0x22, 0x21, 0xcd, 0x2a, 0x6d, 0x41, 0x77, 0xe2, + 0xcb, 0x5d, 0x93, 0x0d, 0x00, 0x10, 0x52, 0x8d, + 0xd5, 0x92, 0x28, 0x16, 0x78, 0xd3, 0x1a, 0x4c, + 0x8d, 0xbd, 0x9c, 0x1a, 0x0b, 0x9c, 0x91, 0x16, + 0x4c, 0xff, 0x31, 0x36, 0xbb, 0xcb, 0x64, 0x1a, + 0xf7, 0x02, 0x81, 0x80, 0x32, 0x65, 0x09, 0xdf, + 0xca, 0xee, 0xa2, 0xdb, 0x3b, 0x58, 0xc9, 0x86, + 0xb8, 0x53, 0x8a, 0xd5, 0x0d, 0x99, 0x82, 0x5c, + 0xe0, 0x84, 0x7c, 0xc2, 0xcf, 0x3a, 0xd3, 0xce, + 0x2e, 0x54, 0x93, 0xbe, 0x3a, 0x30, 0x14, 0x60, + 0xbb, 0xaa, 0x05, 0x41, 0xaa, 0x2b, 0x1f, 0x17, + 0xaa, 0xb9, 0x72, 0x12, 0xf9, 0xe9, 0xf5, 0xe6, + 0x39, 0xe4, 0xf9, 0x9c, 0x03, 0xf5, 0x75, 0x16, + 0xc6, 0x7f, 0xf1, 0x1f, 0x10, 0xc8, 0x54, 0xb1, + 0xe6, 0x84, 0x15, 0xb0, 0xb0, 0x7a, 0x7a, 0x9e, + 0x8c, 0x4a, 0xd1, 0x8c, 0xf1, 0x91, 0x32, 0xeb, + 0x71, 0xa6, 0xbf, 0xdb, 0x1f, 0xcc, 0xd8, 0xcb, + 0x92, 0xc3, 0xf2, 0xaf, 0x89, 0x22, 0x32, 0xfd, + 0x32, 0x12, 0xda, 0xbb, 0xac, 0x55, 0x68, 0x01, + 0x78, 0x56, 0x89, 0x7c, 0xb0, 0x0e, 0x9e, 0xcc, + 0xc6, 0x28, 0x04, 0x7e, 0x83, 0xf5, 0x96, 0x30, + 0x92, 0x51, 0xf2, 0x1b, 0x02, 0x81, 0x81, 0x00, + 0x83, 0x6d, 0xd1, 0x98, 0x90, 0x41, 0x8c, 0xa7, + 0x92, 0x83, 0xac, 0x89, 0x05, 0x0c, 0x79, 0x67, + 0x90, 0xb6, 0xa1, 0xf3, 0x2f, 0xca, 0xf0, 0x15, + 0xe0, 0x30, 0x58, 0xe9, 0x4f, 0xcb, 0x4c, 0x56, + 0x56, 0x56, 0x14, 0x3f, 0x1b, 0x79, 0xb6, 0xef, + 0x57, 0x4b, 0x28, 0xbd, 0xb0, 0xe6, 0x0c, 0x49, + 0x4b, 0xbe, 0xe1, 0x57, 0x28, 0x2a, 0x23, 0x5e, + 0xc4, 0xa2, 0x19, 0x4b, 0x00, 0x67, 0x78, 0xd9, + 0x26, 0x6e, 0x17, 0x25, 0xce, 0xe4, 0xfd, 0xde, + 0x86, 0xa8, 0x5a, 0x67, 0x47, 0x6b, 0x15, 0x09, + 0xe1, 0xec, 0x8e, 0x62, 0x98, 0x91, 0x6f, 0xc0, + 0x98, 0x0c, 0x70, 0x0e, 0x7d, 0xbe, 0x63, 0xbd, + 0x12, 0x5a, 0x98, 0x1c, 0xe3, 0x0c, 0xfb, 0xc7, + 0xfb, 0x1b, 0xbd, 0x02, 0x87, 0xcc, 0x0c, 0xbb, + 0xc2, 0xd4, 0xb6, 0xc1, 0xa1, 0x23, 0xd3, 0x1e, + 0x21, 0x6f, 0x48, 0xba, 0x0e, 0x2e, 0xc7, 0x42 +}; + +static const uint8_t rsa2048_public_key[] = { + 0x30, 0x82, 0x01, 0x0a, 0x02, 0x82, 0x01, 0x01, + 0x00, 0xbd, 0x9c, 0x83, 0x6b, 0x0e, 0x8e, 0xcf, + 0xfa, 0xaa, 0x4f, 0x6a, 0xf4, 0xe3, 0x52, 0x0f, + 0xa5, 0xd0, 0xbe, 0x5e, 0x7f, 0x08, 0x24, 0xba, + 0x87, 0x46, 0xfb, 0x28, 0x93, 0xe5, 0xe5, 0x81, + 0x42, 0xc0, 0xf9, 0x17, 0xc7, 0x81, 0x01, 0xf4, + 0x18, 0x6a, 0x17, 0xf5, 0x57, 0x20, 0x37, 0xcf, + 0xf9, 0x74, 0x5e, 0xe1, 0x48, 0x6a, 0x71, 0x0a, + 0x0f, 0x79, 0x72, 0x2b, 0x46, 0x10, 0x53, 0xdc, + 0x14, 0x43, 0xbd, 0xbc, 0x6d, 0x15, 0x6f, 0x15, + 0x4e, 0xf0, 0x0d, 0x89, 0x39, 0x02, 0xc3, 0x68, + 0x5c, 0xa8, 0xfc, 0xed, 0x64, 0x9d, 0x98, 0xb7, + 0xcd, 0x83, 0x66, 0x93, 0xc3, 0xd9, 0x57, 0xa0, + 0x21, 0x93, 0xad, 0x5c, 0x75, 0x69, 0x88, 0x9e, + 0x81, 0xdc, 0x7f, 0x1d, 0xd5, 0xbd, 0x1c, 0xc1, + 0x30, 0x56, 0xa5, 0xda, 0x99, 0x46, 0xa6, 0x6d, + 0x0e, 0x6f, 0x5e, 0x51, 0x34, 0x49, 0x73, 0xc3, + 0x67, 0x49, 0x7e, 0x21, 0x2a, 0x20, 0xa7, 0x2b, + 0x92, 0x73, 0x1d, 0xa5, 0x25, 0x2a, 0xd0, 0x3a, + 0x89, 0x75, 0xb2, 0xbb, 0x19, 0x37, 0x78, 0x48, + 0xd2, 0xf2, 0x2a, 0x6d, 0x9e, 0xc6, 0x26, 0xca, + 0x46, 0x8c, 0xf1, 0x42, 0x2a, 0x31, 0xb2, 0xfc, + 0xe7, 0x55, 0x51, 0xff, 0x07, 0x13, 0x5b, 0x36, + 0x59, 0x2b, 0x43, 0x30, 0x4b, 0x05, 0x5c, 0xd2, + 0x45, 0xa0, 0xa0, 0x7c, 0x17, 0x5b, 0x07, 0xbb, + 0x5d, 0x83, 0x80, 0x92, 0x6d, 0x87, 0x1a, 0x43, + 0xac, 0xc7, 0x6b, 0x8d, 0x11, 0x60, 0x27, 0xd2, + 0xdf, 0xdb, 0x71, 0x02, 0x55, 0x6e, 0xb5, 0xca, + 0x4d, 0xda, 0x59, 0x0d, 0xb8, 0x8c, 0xcd, 0xd3, + 0x0e, 0x55, 0xa0, 0xa4, 0x8d, 0xa0, 0x14, 0x10, + 0x48, 0x42, 0x35, 0x56, 0x08, 0xf7, 0x29, 0x5f, + 0xa2, 0xea, 0xa4, 0x5e, 0x8e, 0x99, 0x56, 0xaa, + 0x5a, 0x8c, 0x23, 0x8f, 0x35, 0x22, 0x8a, 0xff, + 0xed, 0x02, 0x03, 0x01, 0x00, 0x01 +}; + +static const uint8_t test_sha1_dgst[] = { + 0x3c, 0x05, 0x19, 0x34, 0x29, 0x19, 0xc7, 0xe0, + 0x87, 0xb6, 0x24, 0xf9, 0x58, 0xac, 0xa4, 0xd4, + 0xb2, 0xd9, 0x03, 0x9e, +}; + +static const uint8_t exp_signature_rsa2048_pkcs1[] = { + 0x4e, 0x82, 0x56, 0x4c, 0x84, 0x66, 0xca, 0x1e, + 0xc6, 0x92, 0x46, 0x20, 0x02, 0x6b, 0x64, 0x46, + 0x15, 0x6b, 0x24, 0xf2, 0xbb, 0xfa, 0x44, 0x3c, + 0xaf, 0x42, 0xc8, 0x41, 0xfd, 0xce, 0xed, 0x95, + 0x34, 0xaf, 0x25, 0x09, 0xd1, 0x06, 0x94, 0xaa, + 0x52, 0xd4, 0x29, 0xc8, 0x52, 0x34, 0x67, 0x59, + 0x4f, 0x5a, 0xfd, 0x23, 0x30, 0x5e, 0xc7, 0x1e, + 0xa6, 0xe0, 0x1b, 0x23, 0xca, 0x82, 0x47, 0x9a, + 0x2e, 0x2c, 0x66, 0x45, 0x5a, 0x12, 0xa9, 0x15, + 0xbf, 0xd6, 0xd6, 0xfa, 0x8d, 0x60, 0x99, 0x89, + 0x91, 0x39, 0x06, 0xb7, 0xd3, 0x9a, 0xef, 0x15, + 0x7b, 0x95, 0x87, 0x77, 0x2c, 0x41, 0xd4, 0x71, + 0xd5, 0xdf, 0x22, 0x7b, 0x01, 0xe2, 0xc1, 0xfb, + 0xb9, 0x4e, 0x0c, 0x9b, 0xd5, 0x04, 0xed, 0x2b, + 0x7e, 0x73, 0x53, 0xaa, 0x33, 0x89, 0x9d, 0x95, + 0x28, 0x8f, 0x8b, 0x80, 0x34, 0x7a, 0xea, 0xe3, + 0x66, 0x8a, 0xa8, 0xad, 0xed, 0x91, 0x43, 0xdd, + 0x77, 0xe5, 0xd7, 0x16, 0xda, 0xa8, 0x00, 0x29, + 0x3f, 0x9f, 0xe0, 0x1d, 0x42, 0x9d, 0x35, 0x5d, + 0x0f, 0xf3, 0x90, 0x27, 0x3a, 0x8c, 0x46, 0x13, + 0x53, 0x3e, 0x3b, 0x38, 0x77, 0xf8, 0x57, 0x61, + 0xbc, 0xc4, 0x54, 0x68, 0x48, 0xae, 0x58, 0x03, + 0x33, 0x94, 0x3f, 0x18, 0x1e, 0xb3, 0x3f, 0x79, + 0xa7, 0x26, 0x92, 0x5d, 0x32, 0x2a, 0xdb, 0xe6, + 0x3a, 0xe8, 0xd7, 0xaa, 0x91, 0xfe, 0x9f, 0x06, + 0x26, 0x68, 0x8c, 0x27, 0x31, 0xb0, 0x04, 0x9e, + 0x94, 0x79, 0x63, 0xa1, 0xc7, 0xe8, 0x5b, 0x8c, + 0xd3, 0xf1, 0x88, 0x58, 0x31, 0x2f, 0x4e, 0x11, + 0x00, 0xfe, 0x29, 0xad, 0x2c, 0xa9, 0x8e, 0x63, + 0xd8, 0x7d, 0xc5, 0xa1, 0x71, 0xfa, 0x08, 0x29, + 0xea, 0xd6, 0x6c, 0x53, 0x00, 0x52, 0xa0, 0xed, + 0x6b, 0x7c, 0x67, 0x50, 0x71, 0x2d, 0x96, 0x7a, +}; + +static const uint8_t exp_signature_rsa1024_pkcs1[] = { + 0x6b, 0x5b, 0xbb, 0x3b, 0x1f, 0x08, 0xd8, 0xc0, + 0x4a, 0xf1, 0x5a, 0x12, 0xc2, 0x39, 0x14, 0x65, + 0x4f, 0xda, 0x79, 0x67, 0xf2, 0x89, 0x25, 0xad, + 0x9e, 0x7e, 0xba, 0xa8, 0x34, 0x15, 0x03, 0xdd, + 0x80, 0x6b, 0x01, 0xd7, 0x4a, 0xf3, 0xd6, 0xef, + 0x1e, 0x48, 0xf3, 0xbc, 0x75, 0x1a, 0xc4, 0x2c, + 0x90, 0x15, 0x9f, 0x21, 0x24, 0x98, 0x21, 0xef, + 0x6d, 0x3b, 0xf3, 0x82, 0x8f, 0x8d, 0xd8, 0x48, + 0x37, 0x16, 0x19, 0x8e, 0x3c, 0x64, 0xa0, 0x9e, + 0xf7, 0x0c, 0xd9, 0x5c, 0xc6, 0x13, 0xc4, 0x5f, + 0xf8, 0xf3, 0x59, 0x5b, 0xd0, 0x33, 0x95, 0x98, + 0xde, 0x67, 0x25, 0x58, 0x46, 0xba, 0xee, 0x0f, + 0x47, 0x7a, 0x7f, 0xd0, 0xe4, 0x77, 0x09, 0x17, + 0xe9, 0x81, 0x6e, 0x2d, 0x33, 0x9b, 0x13, 0x0b, + 0xc9, 0xb2, 0x0c, 0x2c, 0xb5, 0xdf, 0x52, 0x8f, + 0xab, 0x0d, 0xc6, 0x59, 0x1d, 0xc7, 0x33, 0x7b, +}; + +static const uint8_t test_plaintext[] = { + 0x00, 0x44, 0xbc, 0x6f, 0x77, 0xfb, 0xe2, 0xa4, + 0x98, 0x9e, 0xf5, 0x33, 0xa0, 0xbd, 0x81, 0xb9, + 0xf1, 0x44, 0x7f, 0x79, 0x89, 0x23, 0xe5, 0x46, + 0x66, 0x9f, 0x98, 0x95, 0x6f, 0x56, 0x78, 0xf6, + 0xf5, 0xac, 0x9c, 0xda, 0xc2, 0x79, 0x59, 0xf0, + 0x1b, 0x03, 0xfa, 0x46, 0x1c, 0x1f, 0x18, 0x07, + 0xce, 0xad, 0xed, 0x3d, 0x11, 0xf9, 0x1b, 0x26, + 0x4a, 0x97, 0x28, 0x71, 0x5f, 0x2c, 0x5e, 0x58, + 0xf0, 0xd6, 0xbf, 0xa4, 0x12, 0xd0, 0x1d, 0x07, + 0xcb, 0x73, 0x66, 0xb6, 0xa4, 0x09, 0xaf, 0x5d, + 0xe9, 0x14, 0x14, 0xaf, 0x69, 0xd6, 0xee, 0x0a, + 0xfc, 0xca, 0xac, 0x94, 0x47, 0xd5, 0x9d, 0x5b, + 0x2b, 0xfb, 0xce, 0x9d, 0x04, 0xc1, 0xaf, 0xa5, + 0xa1, 0x8d, 0xa9, 0x48, 0xa8, 0x65, 0xe6, 0x9f, + 0x74, 0x78, 0x16, 0x32, 0x93, 0xb5, 0x21, 0xb9, + 0x9f, 0x3f, 0xc1, 0xe5, 0xa2, 0x50, 0x8b, 0x12, + 0xfb, 0x3e, 0xb0, 0x8a, 0x00, 0xc7, 0x20, 0x56, + 0xb3, 0xb1, 0x29, 0x95, 0x89, 0xd6, 0x50, 0xf5, + 0x37, 0x38, 0x8e, 0x12, 0xf1, 0xba, 0x82, 0x37, + 0x34, 0x68, 0x4b, 0xe8, 0xe3, 0x11, 0x1c, 0x46, + 0xf9, 0x63, 0x3a, 0xd6, 0xf3, 0x3f, 0x55, 0xa6, + 0xbd, 0x89, 0xf1, 0x2d, 0x38, 0x91, 0x7c, 0xc2, + 0x4d, 0xf1, 0x69, 0x82, 0x6d, 0x71, 0x77, 0xf4, + 0xfc, 0x43, 0x20, 0x6f, 0x43, 0xb9, 0x43, 0xd1, + 0x65, 0xbd, 0xca, 0xb1, 0x43, 0x87, 0xf8, 0xc8, + 0x76, 0x21, 0xa9, 0xeb, 0x3e, 0x9a, 0xef, 0xc9, + 0x0e, 0x79, 0xbc, 0xf0, 0xf8, 0xc8, 0xe2, 0xbc, + 0x33, 0x35, 0x3e, 0xfc, 0xf9, 0x44, 0x69, 0x06, + 0x7c, 0x7f, 0x5d, 0xa2, 0x9e, 0xab, 0xc2, 0x82, + 0xa0, 0xfb, 0xc5, 0x79, 0x57, 0x8c, 0xf1, 0x1c, + 0x51, 0x64, 0x4c, 0x56, 0x08, 0x80, 0x32, 0xf4, + 0x97, 0x8f, 0x6f, 0xb2, 0x16, 0xa6, 0x9d, 0x71, +}; + +static const uint8_t exp_ciphertext_rsa1024_raw[] = { + 0x01, 0xa0, 0xc2, 0x94, 0x9f, 0xd6, 0xbe, 0x8d, + 0xe9, 0x24, 0xaa, 0x9c, 0x67, 0xd7, 0xe3, 0x04, + 0x34, 0xbf, 0xd3, 0x27, 0xa1, 0x43, 0xeb, 0x60, + 0x6b, 0x5b, 0x64, 0x15, 0x55, 0x16, 0x98, 0x35, + 0xc2, 0x59, 0xa7, 0xf7, 0x24, 0xf7, 0x05, 0xb9, + 0xe8, 0x56, 0x6f, 0xf2, 0x7d, 0x8b, 0x3c, 0xcb, + 0xa6, 0xc2, 0xac, 0x0c, 0x37, 0x8c, 0x70, 0x70, + 0x55, 0x05, 0x07, 0x0d, 0x63, 0x6b, 0x7d, 0x5f, + 0xae, 0x03, 0x1e, 0x55, 0x05, 0xbb, 0xa8, 0xe7, + 0xff, 0xa0, 0x8c, 0x5b, 0x6b, 0x01, 0x48, 0x2e, + 0x4f, 0x7f, 0xe2, 0x74, 0xc6, 0x32, 0xa7, 0x2d, + 0xdb, 0x91, 0x9b, 0x67, 0x4d, 0x71, 0xf9, 0x8c, + 0x42, 0x43, 0x75, 0x4e, 0xd0, 0x0e, 0x7c, 0xa0, + 0x97, 0x1a, 0x5f, 0x8e, 0x6f, 0xe4, 0xfa, 0x16, + 0x1d, 0x59, 0x0e, 0x0b, 0x11, 0x12, 0xa3, 0x0c, + 0xa6, 0x55, 0xe6, 0xdb, 0xa7, 0x71, 0xa6, 0xff, +}; + +static const uint8_t exp_ciphertext_rsa1024_pkcs1[] = { + 0x93, 0x78, 0x6a, 0x76, 0xb8, 0x94, 0xea, 0xe4, + 0x32, 0x79, 0x01, 0x8b, 0xc1, 0xcb, 0x2e, 0x2d, + 0xfe, 0xdc, 0x9b, 0xe3, 0xe9, 0x23, 0xe4, 0x0a, + 0xb0, 0x6b, 0x9f, 0x6b, 0x62, 0xf5, 0x3d, 0xf0, + 0x78, 0x84, 0x77, 0x21, 0xad, 0x0b, 0x30, 0x30, + 0x94, 0xe2, 0x18, 0xc4, 0x9b, 0x12, 0x06, 0xc8, + 0xaa, 0xf7, 0x30, 0xe4, 0xc8, 0x64, 0xe7, 0x51, + 0xf1, 0x6a, 0xe1, 0xa2, 0x58, 0x7a, 0x02, 0x9c, + 0x8e, 0xf0, 0x2d, 0x25, 0x6b, 0xb7, 0x25, 0x5e, + 0x05, 0xaf, 0x38, 0xb2, 0x69, 0x5e, 0x6c, 0x75, + 0x6e, 0x27, 0xba, 0x5d, 0x7d, 0x35, 0x72, 0xb7, + 0x25, 0xd4, 0xaa, 0xb2, 0x4b, 0x9e, 0x6b, 0x82, + 0xb2, 0x32, 0xe2, 0x13, 0x1d, 0x00, 0x21, 0x08, + 0xae, 0x14, 0xbb, 0xc0, 0x40, 0xb7, 0x0d, 0xd5, + 0x0e, 0x4d, 0x6d, 0x9a, 0x70, 0x86, 0xe9, 0xfc, + 0x67, 0x2b, 0xa4, 0x11, 0x45, 0xb6, 0xc4, 0x2f, +}; + +static const uint8_t exp_ciphertext_rsa2048_raw[] = { + 0x09, 0x7b, 0x9e, 0x7c, 0x10, 0x1f, 0x73, 0xb4, + 0x5f, 0xdb, 0x4f, 0x05, 0xe7, 0xfc, 0x9e, 0x35, + 0x48, 0xd8, 0xc8, 0xf5, 0xac, 0x6d, 0xb4, 0xb0, + 0xd4, 0xf7, 0x69, 0x0f, 0x30, 0x78, 0xbb, 0x55, + 0x67, 0x66, 0x66, 0x05, 0xf4, 0x77, 0xe2, 0x30, + 0xa5, 0x94, 0x10, 0xa3, 0xcb, 0xee, 0x13, 0x9f, + 0x47, 0x1b, 0x2e, 0xf9, 0xfd, 0x94, 0x09, 0xbd, + 0x26, 0x6e, 0x84, 0xc7, 0x5c, 0x42, 0x20, 0x76, + 0x72, 0x83, 0x75, 0x68, 0xa4, 0x18, 0x2d, 0x76, + 0x62, 0xc3, 0xab, 0xc0, 0xc9, 0x36, 0x59, 0xe0, + 0xa9, 0x70, 0x1f, 0xff, 0x97, 0x07, 0x0d, 0x88, + 0xc2, 0xd8, 0x51, 0x35, 0xf7, 0xb0, 0x50, 0xe4, + 0x9f, 0x3d, 0xd4, 0x71, 0x8b, 0x40, 0x89, 0x71, + 0x6c, 0xd8, 0xc2, 0x63, 0xb6, 0x3a, 0xce, 0xb1, + 0x32, 0xf1, 0xc6, 0x11, 0x31, 0x25, 0x48, 0xcf, + 0xeb, 0xbc, 0xd3, 0x9b, 0xc5, 0xbd, 0xd2, 0x57, + 0x73, 0x9b, 0x20, 0xb8, 0xdf, 0xbe, 0xb8, 0x40, + 0xb6, 0xac, 0x24, 0xdb, 0x94, 0x6a, 0x93, 0x43, + 0x4a, 0xa8, 0xa3, 0xcf, 0xd5, 0x61, 0x1b, 0x46, + 0x1d, 0x6f, 0x57, 0xec, 0xa6, 0xd0, 0x44, 0x05, + 0x48, 0xb8, 0x90, 0x80, 0x23, 0x8e, 0x5f, 0xb0, + 0x4b, 0x6f, 0xe3, 0xf9, 0xb0, 0x04, 0x60, 0xae, + 0x80, 0xcf, 0xa5, 0x5c, 0x11, 0xe4, 0xce, 0x57, + 0x5b, 0xbb, 0xde, 0x92, 0xfc, 0xe7, 0x3f, 0xe0, + 0xfc, 0x06, 0xc8, 0xf3, 0x8c, 0xac, 0x86, 0x09, + 0x31, 0xe5, 0x7e, 0xfb, 0x5d, 0xa7, 0x57, 0xf8, + 0x1d, 0x23, 0x9d, 0xa3, 0xeb, 0x53, 0x28, 0xde, + 0xbf, 0x53, 0xef, 0x35, 0x3c, 0x7e, 0x3c, 0x1b, + 0x76, 0x9d, 0x09, 0x25, 0x43, 0xd4, 0x8b, 0xca, + 0xda, 0x45, 0x5b, 0xdc, 0x9f, 0x57, 0x5a, 0x30, + 0x2e, 0xe9, 0x73, 0x68, 0x28, 0xfa, 0x40, 0xb0, + 0x7c, 0x31, 0xd7, 0x8b, 0x4e, 0x99, 0x94, 0xf1, +}; + +static const uint8_t exp_ciphertext_rsa2048_pkcs1[] = { + 0xa5, 0x19, 0x19, 0x34, 0xad, 0xf6, 0xd2, 0xbe, + 0xed, 0x8f, 0xe5, 0xfe, 0xa2, 0xa5, 0x20, 0x08, + 0x15, 0x53, 0x7c, 0x68, 0x28, 0xae, 0x07, 0xb2, + 0x4c, 0x5d, 0xee, 0xc1, 0xc6, 0xdc, 0xd6, 0x8b, + 0xc6, 0xba, 0x46, 0xe1, 0x16, 0xa9, 0x04, 0x72, + 0xdf, 0x8f, 0x1e, 0x97, 0x2a, 0x55, 0xe7, 0xac, + 0x08, 0x0d, 0x61, 0xe8, 0x64, 0x8b, 0x6f, 0x96, + 0x0e, 0xbb, 0x8a, 0x30, 0xb3, 0x73, 0x28, 0x61, + 0x16, 0x89, 0x90, 0x88, 0x8e, 0xda, 0x22, 0xe6, + 0x42, 0x16, 0xc7, 0xe8, 0x30, 0x0d, 0x7f, 0x44, + 0x1e, 0xef, 0xe6, 0xdb, 0x78, 0x54, 0x89, 0xa5, + 0x60, 0x67, 0xb3, 0x35, 0x2d, 0x79, 0x49, 0xcf, + 0xe6, 0x8f, 0xf3, 0x64, 0x52, 0x1c, 0x6c, 0x43, + 0x7e, 0xb0, 0xde, 0x55, 0xdf, 0xbe, 0xb7, 0xb1, + 0xdb, 0x02, 0xee, 0x76, 0x96, 0xcc, 0x0b, 0x97, + 0x8c, 0x23, 0xaa, 0x7d, 0x4c, 0x47, 0x28, 0x41, + 0x7a, 0x20, 0x39, 0x1f, 0x64, 0x0b, 0xf1, 0x74, + 0xf1, 0x29, 0xda, 0xe9, 0x3a, 0x36, 0xa6, 0x88, + 0xb8, 0xc0, 0x21, 0xb8, 0x9b, 0x5d, 0x90, 0x85, + 0xa3, 0x30, 0x61, 0x17, 0x8c, 0x74, 0x63, 0xd5, + 0x0f, 0x95, 0xdc, 0xc8, 0x4f, 0xa7, 0x24, 0x55, + 0x40, 0xe2, 0x84, 0x57, 0x65, 0x06, 0x11, 0x30, + 0x2b, 0x9e, 0x32, 0x95, 0x39, 0xf2, 0x1a, 0x3f, + 0xab, 0xcd, 0x7b, 0x7f, 0x9c, 0xf0, 0x00, 0x50, + 0x7c, 0xf4, 0xbe, 0xcb, 0x80, 0xea, 0x66, 0xba, + 0x0e, 0x7b, 0x46, 0x0b, 0x25, 0xe0, 0xc1, 0x03, + 0x29, 0x11, 0x2d, 0x69, 0x4f, 0x21, 0xa2, 0x58, + 0x37, 0x4b, 0x84, 0x15, 0xb3, 0x65, 0x3a, 0xac, + 0xd4, 0xd0, 0xf6, 0xdf, 0x4b, 0x82, 0xca, 0x9e, + 0xbb, 0xbe, 0x3c, 0x4d, 0xd5, 0xbf, 0x00, 0xd6, + 0x12, 0x48, 0x72, 0x0b, 0xc7, 0xf8, 0xe1, 0xcd, + 0xd0, 0x28, 0x03, 0x19, 0xa6, 0x06, 0x13, 0x45, +}; + +typedef struct QCryptoAkCipherTestData QCryptoAkCipherTestData; +struct QCryptoAkCipherTestData { + const char *path; + QCryptoAkCipherOptions opt; + + const uint8_t *priv_key; + size_t priv_key_len; + const uint8_t *pub_key; + size_t pub_key_len; + + const uint8_t *plaintext; + size_t plen; + const uint8_t *ciphertext; + size_t clen; + const uint8_t *dgst; + size_t dlen; + const uint8_t *signature; + size_t slen; +}; + +static QCryptoAkCipherTestData test_data[] = { + /* rsa1024 with raw padding */ + { + .path = "/crypto/akcipher/rsa1024-raw", + .opt = { + .alg = QCRYPTO_AKCIPHER_ALG_RSA, + .u.rsa = { + .padding_alg = QCRYPTO_RSA_PADDING_ALG_RAW, + }, + }, + .pub_key = rsa1024_public_key, + .pub_key_len = sizeof(rsa1024_public_key), + .priv_key = rsa1024_private_key, + .priv_key_len = sizeof(rsa1024_private_key), + + .plaintext = test_plaintext, + .plen = 128, + .ciphertext = exp_ciphertext_rsa1024_raw, + .clen = sizeof(exp_ciphertext_rsa1024_raw), + }, + + /* rsa1024 with pkcs1 padding */ + { + .path = "/crypto/akcipher/rsa1024-pkcs1", + .opt = { + .alg = QCRYPTO_AKCIPHER_ALG_RSA, + .u.rsa = { + .padding_alg = QCRYPTO_RSA_PADDING_ALG_PKCS1, + .hash_alg = QCRYPTO_HASH_ALG_SHA1, + }, + }, + .pub_key = rsa1024_public_key, + .pub_key_len = sizeof(rsa1024_public_key), + .priv_key = rsa1024_private_key, + .priv_key_len = sizeof(rsa1024_private_key), + + .plaintext = test_plaintext, + .plen = 64, + .ciphertext = exp_ciphertext_rsa1024_pkcs1, + .clen = sizeof(exp_ciphertext_rsa1024_pkcs1), + .dgst = test_sha1_dgst, + .dlen = sizeof(test_sha1_dgst), + .signature = exp_signature_rsa1024_pkcs1, + .slen = sizeof(exp_signature_rsa1024_pkcs1), + }, + + /* rsa2048 with raw padding */ + { + .path = "/crypto/akcipher/rsa2048-raw", + .opt = { + .alg = QCRYPTO_AKCIPHER_ALG_RSA, + .u.rsa = { + .padding_alg = QCRYPTO_RSA_PADDING_ALG_RAW, + }, + }, + .pub_key = rsa2048_public_key, + .pub_key_len = sizeof(rsa2048_public_key), + .priv_key = rsa2048_private_key, + .priv_key_len = sizeof(rsa2048_private_key), + + .plaintext = test_plaintext, + .plen = 256, + .ciphertext = exp_ciphertext_rsa2048_raw, + .clen = sizeof(exp_ciphertext_rsa2048_raw), + }, + + /* rsa2048 with pkcs1 padding */ + { + .path = "/crypto/akcipher/rsa2048-pkcs1", + .opt = { + .alg = QCRYPTO_AKCIPHER_ALG_RSA, + .u.rsa = { + .padding_alg = QCRYPTO_RSA_PADDING_ALG_PKCS1, + .hash_alg = QCRYPTO_HASH_ALG_SHA1, + }, + }, + .pub_key = rsa2048_public_key, + .pub_key_len = sizeof(rsa2048_public_key), + .priv_key = rsa2048_private_key, + .priv_key_len = sizeof(rsa2048_private_key), + + .plaintext = test_plaintext, + .plen = 128, + .ciphertext = exp_ciphertext_rsa2048_pkcs1, + .clen = sizeof(exp_ciphertext_rsa2048_pkcs1), + .dgst = test_sha1_dgst, + .dlen = sizeof(test_sha1_dgst), + .signature = exp_signature_rsa2048_pkcs1, + .slen = sizeof(exp_signature_rsa2048_pkcs1), + }, + +}; + +static void test_akcipher(const void *opaque) +{ + const QCryptoAkCipherTestData *data = opaque; + g_autofree uint8_t *plaintext = NULL; + g_autofree uint8_t *ciphertext = NULL; + g_autofree uint8_t *signature = NULL; + QCryptoAkCipher *pub_key, *priv_key; + + if (!qcrypto_akcipher_supports((QCryptoAkCipherOptions *)&data->opt)) { + return; + } + pub_key = qcrypto_akcipher_new(&data->opt, + QCRYPTO_AKCIPHER_KEY_TYPE_PUBLIC, + data->pub_key, data->pub_key_len, + &error_abort); + g_assert(pub_key != NULL); + priv_key = qcrypto_akcipher_new(&data->opt, + QCRYPTO_AKCIPHER_KEY_TYPE_PRIVATE, + data->priv_key, data->priv_key_len, + &error_abort); + g_assert(priv_key != NULL); + + if (data->plaintext != NULL) { + + ciphertext = g_new0(uint8_t, data->clen); + g_assert(qcrypto_akcipher_encrypt(pub_key, data->plaintext, data->plen, + ciphertext, data->clen, + &error_abort) > 0); + + /** + * In the asymmetric encryption algorithms, the ciphertext generated + * each time may be different, here only compare the decrypted + * plaintext + */ + plaintext = g_new0(uint8_t, data->clen); + g_assert(qcrypto_akcipher_decrypt(priv_key, ciphertext, + data->clen, plaintext, + data->plen, + &error_abort) == data->plen); + g_assert(!memcmp(plaintext, data->plaintext, data->plen)); + } + + if (data->signature != NULL) { + signature = g_new(uint8_t, data->slen); + g_assert(qcrypto_akcipher_sign(priv_key, data->dgst, data->dlen, + signature, data->slen, + &error_abort) > 0); + /** + * The signature generated each time may be different, here only check + * the verification. + */ + g_assert(qcrypto_akcipher_verify(pub_key, data->signature, data->slen, + data->dgst, data->dlen, + &error_abort) == 0); + g_assert(qcrypto_akcipher_verify(pub_key, signature, data->slen, + data->dgst, data->dlen, + &error_abort) == 0); + ++signature[0]; + /* Here error should be ignored */ + g_assert(qcrypto_akcipher_verify(pub_key, signature, data->slen, + data->dgst, data->dlen, NULL) != 0); + } + + qcrypto_akcipher_free(pub_key); + qcrypto_akcipher_free(priv_key); +} + +int main(int argc, char **argv) +{ + size_t i; + g_test_init(&argc, &argv, NULL); + g_assert(qcrypto_init(NULL) == 0); + + for (i = 0; i < G_N_ELEMENTS(test_data); i++) { + g_test_add_data_func(test_data[i].path, &test_data[i], test_akcipher); + } + + return g_test_run(); +} -- 2.20.1