From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ed1-x534.google.com (mail-ed1-x534.google.com [IPv6:2a00:1450:4864:20::534]) by sourceware.org (Postfix) with ESMTPS id 31BA03949097 for ; Thu, 24 Jun 2021 11:12:06 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 31BA03949097 Received: by mail-ed1-x534.google.com with SMTP id w13so1963784edc.0 for ; Thu, 24 Jun 2021 04:12:06 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=CYq+aSasUbUvBnL0oslvXMLg8eUS3/+mwowTN7LM090=; b=A5Wcaer+54oW03S2VSl8MXQObgO6mCBs96v/CFg1pMV8DdOf3MMBA+EjyUFKBSx2k4 yS2bGpnWoWE6y99h4san/xpkbySEYVYWJpjPufUUZivWMj4pa9lgh8B3rsSTDPwovPjq 0Q86QDQkJ7+aUEhQ9/isGVnvvImv0g5k3Poffd3iD7Sc86CxIn4qcMSsohDHciC2Y2FX 6TIJf1AZHAtrPzbXvibyJb21m4WNe4Hpr/YBWo9///zCLe+V2FgALWNLJKxeGpNZtIfq Xob6uSFqqqDUiI1GZA6LTNyvDjccVJwZHYFuC6GGb9hu4T+hQs0s6OnJVv+MK3L8MzOX W5Sg== X-Gm-Message-State: AOAM533smaRQqUiN7IJrqisAlpyoWxUkeoYFTFMrg0xEl6SBcMe57+6W yk9I9wXC3Hh5VN7xy3ngTW270sQsAAnJg9ZoeKOoM9zYY7OXMw== X-Google-Smtp-Source: ABdhPJz0GfZcWPGN364wELWSEEV6eBDUeEkhZBtYMo0ajFqFWW5kc0Z87AqT9yRiaIZTP7y4OxKtEXOBgauRccl9b8g= X-Received: by 2002:a50:b2c5:: with SMTP id p63mr6299733edd.5.1624533124945; Thu, 24 Jun 2021 04:12:04 -0700 (PDT) MIME-Version: 1.0 From: Prathamesh Kulkarni Date: Thu, 24 Jun 2021 16:41:28 +0530 Message-ID: Subject: [ARM] PR66791: Replace builtins for vdup_n and vmov_n intrinsics To: gcc Patches , Kyrill Tkachov Content-Type: multipart/mixed; boundary="000000000000d6be6c05c5811713" X-Spam-Status: No, score=-8.6 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, RCVD_IN_DNSWL_NONE, SCC_5_SHORT_WORD_LINES, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 24 Jun 2021 11:12:09 -0000 --000000000000d6be6c05c5811713 Content-Type: text/plain; charset="UTF-8" Hi, This patch replaces builtins for vdup_n and vmov_n. The patch results in regression for pr51534.c. Consider following function: uint8x8_t f1 (uint8x8_t a) { return vcgt_u8(a, vdup_n_u8(0)); } code-gen before patch: f1: vmov.i32 d16, #0 @ v8qi vcgt.u8 d0, d0, d16 bx lr code-gen after patch: f1: vceq.i8 d0, d0, #0 vmvn d0, d0 bx lr I am not sure which one is better tho ? Also, this patch regressed bf16_dup.c on arm-linux-gnueabi, which is due to a missed opt in lowering. I had filed it as PR98435, and posted a fix for it here: https://gcc.gnu.org/pipermail/gcc-patches/2021-June/572648.html Thanks, Prathamesh --000000000000d6be6c05c5811713 Content-Type: text/plain; charset="US-ASCII"; name="vdup-1.txt" Content-Disposition: attachment; filename="vdup-1.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kqasxqkx0 MjAyMS0wNi0yNCAgUHJhdGhhbWVzaCBLdWxrYXJuaSAgPHByYXRoYW1lc2gua3Vsa2FybmlAbGlu YXJvLm9yZz4KCglQUiB0YXJnZXQvNjY3OTEKCSogZ2NjL2NvbmZpZy9hcm0vYXJtX25lb24uaCAo dmR1cF9uX3M4KTogUmVwbGFjZSBjYWxsIHRvIGJ1aWx0aW4KCXdpdGggY29uc3RydWN0b3IuCgko dmR1cF9uX3MxNik6IExpa2V3aXNlLgoJKHZkdXBfbl9zMzIpOiBMaWtld2lzZS4KCSh2ZHVwX25f czY0KTogTGlrZXdpc2UuCgkodmR1cF9uX3U4KTogTGlrZXdpc2UuCgkodmR1cF9uX3UxNik6IExp a2V3aXNlLgoJKHZkdXBfbl91MzIpOiBMaWtld2lzZS4KCSh2ZHVwX25fdTY0KTogTGlrZXdpc2Uu CgkodmR1cF9uX3A4KTogTGlrZXdpc2UuCgkodmR1cF9uX3AxNik6IExpa2V3aXNlLgoJKHZkdXBf bl9wNjQpOiBMaWtld2lzZS4KCSh2ZHVwX25fZjE2KTogTGlrZXdpc2UuCgkodmR1cF9uX2YzMik6 IExpa2V3aXNlLgoJKHZkdXBxX25fczgpOiBMaWtld2lzZS4KCSh2ZHVwcV9uX3MxNik6IExpa2V3 aXNlLgoJKHZkdXBxX25fczMyKTogTGlrZXdpc2UuCgkodmR1cHFfbl9zNjQpOiBMaWtld2lzZS4K CSh2ZHVwcV9uX3U4KTogTGlrZXdpc2UuCgkodmR1cHFfbl91MTYpOiBMaWtld2lzZS4KCSh2ZHVw cV9uX3UzMik6IExpa2V3aXNlLgoJKHZkdXBxX25fdTY0KTogTGlrZXdpc2UuCgkodmR1cHFfbl9w OCk6IExpa2V3aXNlLgoJKHZkdXBxX25fcDE2KTogTGlrZXdpc2UuCgkodmR1cHFfbl9wNjQpOiBM aWtld2lzZS4KCSh2ZHVwcV9uX2YxNik6IExpa2V3aXNlLgoJKHZkdXBxX25fZjMyKTogTGlrZXdp c2UuCgkodm1vdl9uX3M4KTogUmVwbGFjZSBjYWxsIHRvIGJ1aWx0aW4gd2l0aCBjYWxsIHRvIGNv cnJlc3BvbmRpbmcKCXZkdXAgaW50cmluc2ljLgoJKHZtb3Zfbl9zMTYpOiBMaWtld2lzZS4KCSh2 bW92X25fczMyKTogTGlrZXdpc2UuCgkodm1vdl9uX3M2NCk6IExpa2V3aXNlLgoJKHZtb3Zfbl91 OCk6IExpa2V3aXNlLgoJKHZtb3Zfbl91MTYpOiBMaWtld2lzZS4KCSh2bW92X25fdTMyKTogTGlr ZXdpc2UuCgkodm1vdl9uX3U2NCk6IExpa2V3aXNlLgoJKHZtb3Zfbl9wOCk6IExpa2V3aXNlLgoJ KHZtb3Zfbl9wMTYpOiBMaWtld2lzZS4KCSh2bW92X25fZjE2KTogTGlrZXdpc2UuCgkodm1vdl9u X2YzMik6IExpa2V3aXNlLgkKCSh2bW92cV9uX3M4KTogTGlrZXdpc2UuIAoJKHZtb3ZxX25fczE2 KTogTGlrZXdpc2UuCgkodm1vdnFfbl9zMzIpOiBMaWtld2lzZS4KCSh2bW92cV9uX3M2NCk6IExp a2V3aXNlLgoJKHZtb3ZxX25fdTgpOiBMaWtld2lzZS4KCSh2bW92cV9uX3UxNik6IExpa2V3aXNl LgoJKHZtb3ZxX25fdTMyKTogTGlrZXdpc2UuCgkodm1vdnFfbl91NjQpOiBMaWtld2lzZS4KCSh2 bW92cV9uX3A4KTogTGlrZXdpc2UuCgkodm1vdnFfbl9wMTYpOiBMaWtld2lzZS4KCSh2bW92cV9u X2YxNik6IExpa2V3aXNlLgoJKHZtb3ZxX25fZjMyKTogTGlrZXdpc2UuCgkqIGNvbmZpZy9hcm0v YXJtX25lb25fYnVpbHRpbnMuZGVmOiBSZW1vdmUgZW50cmllcyBmb3IgdmR1cF9uLgoKZGlmZiAt LWdpdCBhL2djYy9jb25maWcvYXJtL2FybV9uZW9uLmggYi9nY2MvY29uZmlnL2FybS9hcm1fbmVv bi5oCmluZGV4IDNlZmNmYTQ1MjI5Li5iZjI2Y2Q0OWQ1MyAxMDA2NDQKLS0tIGEvZ2NjL2NvbmZp Zy9hcm0vYXJtX25lb24uaAorKysgYi9nY2MvY29uZmlnL2FybS9hcm1fbmVvbi5oCkBAIC02NjI1 LDYzICs2NjI1LDYzIEBAIF9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIGludDh4OF90CiBf X2F0dHJpYnV0ZV9fICAoKF9fYWx3YXlzX2lubGluZV9fLCBfX2dudV9pbmxpbmVfXywgX19hcnRp ZmljaWFsX18pKQogdmR1cF9uX3M4IChpbnQ4X3QgX19hKQogewotICByZXR1cm4gKGludDh4OF90 KV9fYnVpbHRpbl9uZW9uX3ZkdXBfbnY4cWkgKChfX2J1aWx0aW5fbmVvbl9xaSkgX19hKTsKKyAg cmV0dXJuIChpbnQ4eDhfdCkge19fYSwgX19hLCBfX2EsIF9fYSwgX19hLCBfX2EsIF9fYSwgX19h fTsKIH0KIAogX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgaW50MTZ4NF90CiBfX2F0dHJp YnV0ZV9fICAoKF9fYWx3YXlzX2lubGluZV9fLCBfX2dudV9pbmxpbmVfXywgX19hcnRpZmljaWFs X18pKQogdmR1cF9uX3MxNiAoaW50MTZfdCBfX2EpCiB7Ci0gIHJldHVybiAoaW50MTZ4NF90KV9f YnVpbHRpbl9uZW9uX3ZkdXBfbnY0aGkgKChfX2J1aWx0aW5fbmVvbl9oaSkgX19hKTsKKyAgcmV0 dXJuIChpbnQxNng0X3QpIHtfX2EsIF9fYSwgX19hLCBfX2F9OwogfQogCiBfX2V4dGVuc2lvbl9f IGV4dGVybiBfX2lubGluZSBpbnQzMngyX3QKIF9fYXR0cmlidXRlX18gICgoX19hbHdheXNfaW5s aW5lX18sIF9fZ251X2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCiB2ZHVwX25fczMyIChpbnQz Ml90IF9fYSkKIHsKLSAgcmV0dXJuIChpbnQzMngyX3QpX19idWlsdGluX25lb25fdmR1cF9udjJz aSAoKF9fYnVpbHRpbl9uZW9uX3NpKSBfX2EpOworICByZXR1cm4gKGludDMyeDJfdCkge19fYSwg X19hfTsKIH0KIAogX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgZmxvYXQzMngyX3QKIF9f YXR0cmlidXRlX18gICgoX19hbHdheXNfaW5saW5lX18sIF9fZ251X2lubGluZV9fLCBfX2FydGlm aWNpYWxfXykpCiB2ZHVwX25fZjMyIChmbG9hdDMyX3QgX19hKQogewotICByZXR1cm4gKGZsb2F0 MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3ZkdXBfbnYyc2YgKChfX2J1aWx0aW5fbmVvbl9zZikgX19h KTsKKyAgcmV0dXJuIChmbG9hdDMyeDJfdCkge19fYSwgX19hfTsKIH0KIAogX19leHRlbnNpb25f XyBleHRlcm4gX19pbmxpbmUgdWludDh4OF90CiBfX2F0dHJpYnV0ZV9fICAoKF9fYWx3YXlzX2lu bGluZV9fLCBfX2dudV9pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQogdmR1cF9uX3U4ICh1aW50 OF90IF9fYSkKIHsKLSAgcmV0dXJuICh1aW50OHg4X3QpX19idWlsdGluX25lb25fdmR1cF9udjhx aSAoKF9fYnVpbHRpbl9uZW9uX3FpKSBfX2EpOworICByZXR1cm4gKHVpbnQ4eDhfdCkge19fYSwg X19hLCBfX2EsIF9fYSwgX19hLCBfX2EsIF9fYSwgX19hfTsKIH0KIAogX19leHRlbnNpb25fXyBl eHRlcm4gX19pbmxpbmUgdWludDE2eDRfdAogX19hdHRyaWJ1dGVfXyAgKChfX2Fsd2F5c19pbmxp bmVfXywgX19nbnVfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKIHZkdXBfbl91MTYgKHVpbnQx Nl90IF9fYSkKIHsKLSAgcmV0dXJuICh1aW50MTZ4NF90KV9fYnVpbHRpbl9uZW9uX3ZkdXBfbnY0 aGkgKChfX2J1aWx0aW5fbmVvbl9oaSkgX19hKTsKKyAgcmV0dXJuICh1aW50MTZ4NF90KSB7X19h LCBfX2EsIF9fYSwgX19hfTsKIH0KIAogX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgdWlu dDMyeDJfdAogX19hdHRyaWJ1dGVfXyAgKChfX2Fsd2F5c19pbmxpbmVfXywgX19nbnVfaW5saW5l X18sIF9fYXJ0aWZpY2lhbF9fKSkKIHZkdXBfbl91MzIgKHVpbnQzMl90IF9fYSkKIHsKLSAgcmV0 dXJuICh1aW50MzJ4Ml90KV9fYnVpbHRpbl9uZW9uX3ZkdXBfbnYyc2kgKChfX2J1aWx0aW5fbmVv bl9zaSkgX19hKTsKKyAgcmV0dXJuICh1aW50MzJ4Ml90KSB7X19hLCBfX2F9OwogfQogCiBfX2V4 dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSBwb2x5OHg4X3QKIF9fYXR0cmlidXRlX18gICgoX19h bHdheXNfaW5saW5lX18sIF9fZ251X2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCiB2ZHVwX25f cDggKHBvbHk4X3QgX19hKQogewotICByZXR1cm4gKHBvbHk4eDhfdClfX2J1aWx0aW5fbmVvbl92 ZHVwX252OHFpICgoX19idWlsdGluX25lb25fcWkpIF9fYSk7CisgIHJldHVybiAocG9seTh4OF90 KSB7X19hLCBfX2EsIF9fYSwgX19hLCBfX2EsIF9fYSwgX19hLCBfX2F9OwogfQogCiBfX2V4dGVu c2lvbl9fIGV4dGVybiBfX2lubGluZSBwb2x5MTZ4NF90CiBfX2F0dHJpYnV0ZV9fICAoKF9fYWx3 YXlzX2lubGluZV9fLCBfX2dudV9pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQogdmR1cF9uX3Ax NiAocG9seTE2X3QgX19hKQogewotICByZXR1cm4gKHBvbHkxNng0X3QpX19idWlsdGluX25lb25f dmR1cF9udjRoaSAoKF9fYnVpbHRpbl9uZW9uX2hpKSBfX2EpOworICByZXR1cm4gKHBvbHkxNng0 X3QpIHtfX2EsIF9fYSwgX19hLCBfX2F9OwogfQogCiAjcHJhZ21hIEdDQyBwdXNoX29wdGlvbnMK QEAgLTY2OTAsNyArNjY5MCw3IEBAIF9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIHBvbHk2 NHgxX3QKIF9fYXR0cmlidXRlX18gICgoX19hbHdheXNfaW5saW5lX18sIF9fZ251X2lubGluZV9f LCBfX2FydGlmaWNpYWxfXykpCiB2ZHVwX25fcDY0IChwb2x5NjRfdCBfX2EpCiB7Ci0gIHJldHVy biAocG9seTY0eDFfdClfX2J1aWx0aW5fbmVvbl92ZHVwX25kaSAoKF9fYnVpbHRpbl9uZW9uX2Rp KSBfX2EpOworICByZXR1cm4gKHBvbHk2NHgxX3QpIHtfX2F9OwogfQogCiAjcHJhZ21hIEdDQyBw b3Bfb3B0aW9ucwpAQCAtNjY5OCwxNCArNjY5OCwxNCBAQCBfX2V4dGVuc2lvbl9fIGV4dGVybiBf X2lubGluZSBpbnQ2NHgxX3QKIF9fYXR0cmlidXRlX18gICgoX19hbHdheXNfaW5saW5lX18sIF9f Z251X2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCiB2ZHVwX25fczY0IChpbnQ2NF90IF9fYSkK IHsKLSAgcmV0dXJuIChpbnQ2NHgxX3QpX19idWlsdGluX25lb25fdmR1cF9uZGkgKChfX2J1aWx0 aW5fbmVvbl9kaSkgX19hKTsKKyAgcmV0dXJuIChpbnQ2NHgxX3QpIHtfX2F9OwogfQogCiBfX2V4 dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSB1aW50NjR4MV90CiBfX2F0dHJpYnV0ZV9fICAoKF9f YWx3YXlzX2lubGluZV9fLCBfX2dudV9pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQogdmR1cF9u X3U2NCAodWludDY0X3QgX19hKQogewotICByZXR1cm4gKHVpbnQ2NHgxX3QpX19idWlsdGluX25l b25fdmR1cF9uZGkgKChfX2J1aWx0aW5fbmVvbl9kaSkgX19hKTsKKyAgcmV0dXJuICh1aW50NjR4 MV90KSB7X19hfTsKIH0KIAogI3ByYWdtYSBHQ0MgcHVzaF9vcHRpb25zCkBAIC02NzE0LDcgKzY3 MTQsNyBAQCBfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSBwb2x5NjR4Ml90CiBfX2F0dHJp YnV0ZV9fICAoKF9fYWx3YXlzX2lubGluZV9fLCBfX2dudV9pbmxpbmVfXywgX19hcnRpZmljaWFs X18pKQogdmR1cHFfbl9wNjQgKHBvbHk2NF90IF9fYSkKIHsKLSAgcmV0dXJuIChwb2x5NjR4Ml90 KV9fYnVpbHRpbl9uZW9uX3ZkdXBfbnYyZGkgKChfX2J1aWx0aW5fbmVvbl9kaSkgX19hKTsKKyAg cmV0dXJuIChwb2x5NjR4Ml90KSB7X19hLCBfX2F9OwogfQogCiAjcHJhZ21hIEdDQyBwb3Bfb3B0 aW9ucwpAQCAtNjcyMiwyMzEgKzY3MjIsMjM0IEBAIF9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5s aW5lIGludDh4MTZfdAogX19hdHRyaWJ1dGVfXyAgKChfX2Fsd2F5c19pbmxpbmVfXywgX19nbnVf aW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKIHZkdXBxX25fczggKGludDhfdCBfX2EpCiB7Ci0g IHJldHVybiAoaW50OHgxNl90KV9fYnVpbHRpbl9uZW9uX3ZkdXBfbnYxNnFpICgoX19idWlsdGlu X25lb25fcWkpIF9fYSk7CisgIHJldHVybiAoaW50OHgxNl90KSB7X19hLCBfX2EsIF9fYSwgX19h LCBfX2EsIF9fYSwgX19hLCBfX2EsCisJCSAgICAgIF9fYSwgX19hLCBfX2EsIF9fYSwgX19hLCBf X2EsIF9fYSwgX19hfTsKIH0KIAogX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgaW50MTZ4 OF90CiBfX2F0dHJpYnV0ZV9fICAoKF9fYWx3YXlzX2lubGluZV9fLCBfX2dudV9pbmxpbmVfXywg X19hcnRpZmljaWFsX18pKQogdmR1cHFfbl9zMTYgKGludDE2X3QgX19hKQogewotICByZXR1cm4g KGludDE2eDhfdClfX2J1aWx0aW5fbmVvbl92ZHVwX252OGhpICgoX19idWlsdGluX25lb25faGkp IF9fYSk7CisgIHJldHVybiAoaW50MTZ4OF90KSB7X19hLCBfX2EsIF9fYSwgX19hLCBfX2EsIF9f YSwgX19hLCBfX2F9OwogfQogCiBfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSBpbnQzMng0 X3QKIF9fYXR0cmlidXRlX18gICgoX19hbHdheXNfaW5saW5lX18sIF9fZ251X2lubGluZV9fLCBf X2FydGlmaWNpYWxfXykpCiB2ZHVwcV9uX3MzMiAoaW50MzJfdCBfX2EpCiB7Ci0gIHJldHVybiAo aW50MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3ZkdXBfbnY0c2kgKChfX2J1aWx0aW5fbmVvbl9zaSkg X19hKTsKKyAgcmV0dXJuIChpbnQzMng0X3QpIHtfX2EsIF9fYSwgX19hLCBfX2F9OwogfQogCiBf X2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSBmbG9hdDMyeDRfdAogX19hdHRyaWJ1dGVfXyAg KChfX2Fsd2F5c19pbmxpbmVfXywgX19nbnVfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKIHZk dXBxX25fZjMyIChmbG9hdDMyX3QgX19hKQogewotICByZXR1cm4gKGZsb2F0MzJ4NF90KV9fYnVp bHRpbl9uZW9uX3ZkdXBfbnY0c2YgKChfX2J1aWx0aW5fbmVvbl9zZikgX19hKTsKKyAgcmV0dXJu IChmbG9hdDMyeDRfdCkge19fYSwgX19hLCBfX2EsIF9fYX07CiB9CiAKIF9fZXh0ZW5zaW9uX18g ZXh0ZXJuIF9faW5saW5lIHVpbnQ4eDE2X3QKIF9fYXR0cmlidXRlX18gICgoX19hbHdheXNfaW5s aW5lX18sIF9fZ251X2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCiB2ZHVwcV9uX3U4ICh1aW50 OF90IF9fYSkKIHsKLSAgcmV0dXJuICh1aW50OHgxNl90KV9fYnVpbHRpbl9uZW9uX3ZkdXBfbnYx NnFpICgoX19idWlsdGluX25lb25fcWkpIF9fYSk7CisgIHJldHVybiAodWludDh4MTZfdCkge19f YSwgX19hLCBfX2EsIF9fYSwgX19hLCBfX2EsIF9fYSwgX19hLAorCQkgICAgICAgX19hLCBfX2Es IF9fYSwgX19hLCBfX2EsIF9fYSwgX19hLCBfX2F9OwogfQogCiBfX2V4dGVuc2lvbl9fIGV4dGVy biBfX2lubGluZSB1aW50MTZ4OF90CiBfX2F0dHJpYnV0ZV9fICAoKF9fYWx3YXlzX2lubGluZV9f LCBfX2dudV9pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQogdmR1cHFfbl91MTYgKHVpbnQxNl90 IF9fYSkKIHsKLSAgcmV0dXJuICh1aW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3ZkdXBfbnY4aGkg KChfX2J1aWx0aW5fbmVvbl9oaSkgX19hKTsKKyAgcmV0dXJuICh1aW50MTZ4OF90KSB7X19hLCBf X2EsIF9fYSwgX19hLCBfX2EsIF9fYSwgX19hLCBfX2F9OwogfQogCiBfX2V4dGVuc2lvbl9fIGV4 dGVybiBfX2lubGluZSB1aW50MzJ4NF90CiBfX2F0dHJpYnV0ZV9fICAoKF9fYWx3YXlzX2lubGlu ZV9fLCBfX2dudV9pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQogdmR1cHFfbl91MzIgKHVpbnQz Ml90IF9fYSkKIHsKLSAgcmV0dXJuICh1aW50MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3ZkdXBfbnY0 c2kgKChfX2J1aWx0aW5fbmVvbl9zaSkgX19hKTsKKyAgcmV0dXJuICh1aW50MzJ4NF90KSB7X19h LCBfX2EsIF9fYSwgX19hfTsKIH0KIAogX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgcG9s eTh4MTZfdAogX19hdHRyaWJ1dGVfXyAgKChfX2Fsd2F5c19pbmxpbmVfXywgX19nbnVfaW5saW5l X18sIF9fYXJ0aWZpY2lhbF9fKSkKIHZkdXBxX25fcDggKHBvbHk4X3QgX19hKQogewotICByZXR1 cm4gKHBvbHk4eDE2X3QpX19idWlsdGluX25lb25fdmR1cF9udjE2cWkgKChfX2J1aWx0aW5fbmVv bl9xaSkgX19hKTsKKyAgcmV0dXJuIChwb2x5OHgxNl90KSB7X19hLCBfX2EsIF9fYSwgX19hLCBf X2EsIF9fYSwgX19hLCBfX2EsCisJCSAgICAgICBfX2EsIF9fYSwgX19hLCBfX2EsIF9fYSwgX19h LCBfX2EsIF9fYX07CiB9CiAKIF9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIHBvbHkxNng4 X3QKIF9fYXR0cmlidXRlX18gICgoX19hbHdheXNfaW5saW5lX18sIF9fZ251X2lubGluZV9fLCBf X2FydGlmaWNpYWxfXykpCiB2ZHVwcV9uX3AxNiAocG9seTE2X3QgX19hKQogewotICByZXR1cm4g KHBvbHkxNng4X3QpX19idWlsdGluX25lb25fdmR1cF9udjhoaSAoKF9fYnVpbHRpbl9uZW9uX2hp KSBfX2EpOworICByZXR1cm4gKHBvbHkxNng4X3QpIHtfX2EsIF9fYSwgX19hLCBfX2EsIF9fYSwg X19hLCBfX2EsIF9fYX07CiB9CiAKIF9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIGludDY0 eDJfdAogX19hdHRyaWJ1dGVfXyAgKChfX2Fsd2F5c19pbmxpbmVfXywgX19nbnVfaW5saW5lX18s IF9fYXJ0aWZpY2lhbF9fKSkKIHZkdXBxX25fczY0IChpbnQ2NF90IF9fYSkKIHsKLSAgcmV0dXJu IChpbnQ2NHgyX3QpX19idWlsdGluX25lb25fdmR1cF9udjJkaSAoKF9fYnVpbHRpbl9uZW9uX2Rp KSBfX2EpOworICByZXR1cm4gKGludDY0eDJfdCkge19fYSwgX19hfTsKIH0KIAogX19leHRlbnNp b25fXyBleHRlcm4gX19pbmxpbmUgdWludDY0eDJfdAogX19hdHRyaWJ1dGVfXyAgKChfX2Fsd2F5 c19pbmxpbmVfXywgX19nbnVfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKIHZkdXBxX25fdTY0 ICh1aW50NjRfdCBfX2EpCiB7Ci0gIHJldHVybiAodWludDY0eDJfdClfX2J1aWx0aW5fbmVvbl92 ZHVwX252MmRpICgoX19idWlsdGluX25lb25fZGkpIF9fYSk7CisgIHJldHVybiAodWludDY0eDJf dCkge19fYSwgX19hfTsKIH0KIAogX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgaW50OHg4 X3QKIF9fYXR0cmlidXRlX18gICgoX19hbHdheXNfaW5saW5lX18sIF9fZ251X2lubGluZV9fLCBf X2FydGlmaWNpYWxfXykpCiB2bW92X25fczggKGludDhfdCBfX2EpCiB7Ci0gIHJldHVybiAoaW50 OHg4X3QpX19idWlsdGluX25lb25fdmR1cF9udjhxaSAoKF9fYnVpbHRpbl9uZW9uX3FpKSBfX2Ep OworICByZXR1cm4gdmR1cF9uX3M4IChfX2EpOwogfQogCiBfX2V4dGVuc2lvbl9fIGV4dGVybiBf X2lubGluZSBpbnQxNng0X3QKIF9fYXR0cmlidXRlX18gICgoX19hbHdheXNfaW5saW5lX18sIF9f Z251X2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCiB2bW92X25fczE2IChpbnQxNl90IF9fYSkK IHsKLSAgcmV0dXJuIChpbnQxNng0X3QpX19idWlsdGluX25lb25fdmR1cF9udjRoaSAoKF9fYnVp bHRpbl9uZW9uX2hpKSBfX2EpOworICByZXR1cm4gdmR1cF9uX3MxNiAoX19hKTsKIH0KIAogX19l eHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgaW50MzJ4Ml90CiBfX2F0dHJpYnV0ZV9fICAoKF9f YWx3YXlzX2lubGluZV9fLCBfX2dudV9pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQogdm1vdl9u X3MzMiAoaW50MzJfdCBfX2EpCiB7Ci0gIHJldHVybiAoaW50MzJ4Ml90KV9fYnVpbHRpbl9uZW9u X3ZkdXBfbnYyc2kgKChfX2J1aWx0aW5fbmVvbl9zaSkgX19hKTsKKyAgcmV0dXJuIHZkdXBfbl9z MzIgKF9fYSk7CiB9CiAKIF9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIGZsb2F0MzJ4Ml90 CiBfX2F0dHJpYnV0ZV9fICAoKF9fYWx3YXlzX2lubGluZV9fLCBfX2dudV9pbmxpbmVfXywgX19h cnRpZmljaWFsX18pKQogdm1vdl9uX2YzMiAoZmxvYXQzMl90IF9fYSkKIHsKLSAgcmV0dXJuIChm bG9hdDMyeDJfdClfX2J1aWx0aW5fbmVvbl92ZHVwX252MnNmICgoX19idWlsdGluX25lb25fc2Yp IF9fYSk7CisgIHJldHVybiB2ZHVwX25fZjMyIChfX2EpOwogfQogCiBfX2V4dGVuc2lvbl9fIGV4 dGVybiBfX2lubGluZSB1aW50OHg4X3QKIF9fYXR0cmlidXRlX18gICgoX19hbHdheXNfaW5saW5l X18sIF9fZ251X2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCiB2bW92X25fdTggKHVpbnQ4X3Qg X19hKQogewotICByZXR1cm4gKHVpbnQ4eDhfdClfX2J1aWx0aW5fbmVvbl92ZHVwX252OHFpICgo X19idWlsdGluX25lb25fcWkpIF9fYSk7CisgIHJldHVybiB2ZHVwX25fdTggKF9fYSk7CiB9CiAK IF9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIHVpbnQxNng0X3QKIF9fYXR0cmlidXRlX18g ICgoX19hbHdheXNfaW5saW5lX18sIF9fZ251X2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCiB2 bW92X25fdTE2ICh1aW50MTZfdCBfX2EpCiB7Ci0gIHJldHVybiAodWludDE2eDRfdClfX2J1aWx0 aW5fbmVvbl92ZHVwX252NGhpICgoX19idWlsdGluX25lb25faGkpIF9fYSk7CisgIHJldHVybiB2 ZHVwX25fdTE2IChfX2EpOwogfQogCiBfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSB1aW50 MzJ4Ml90CiBfX2F0dHJpYnV0ZV9fICAoKF9fYWx3YXlzX2lubGluZV9fLCBfX2dudV9pbmxpbmVf XywgX19hcnRpZmljaWFsX18pKQogdm1vdl9uX3UzMiAodWludDMyX3QgX19hKQogewotICByZXR1 cm4gKHVpbnQzMngyX3QpX19idWlsdGluX25lb25fdmR1cF9udjJzaSAoKF9fYnVpbHRpbl9uZW9u X3NpKSBfX2EpOworICByZXR1cm4gdmR1cF9uX3UzMiAoX19hKTsKIH0KIAogX19leHRlbnNpb25f XyBleHRlcm4gX19pbmxpbmUgcG9seTh4OF90CiBfX2F0dHJpYnV0ZV9fICAoKF9fYWx3YXlzX2lu bGluZV9fLCBfX2dudV9pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQogdm1vdl9uX3A4IChwb2x5 OF90IF9fYSkKIHsKLSAgcmV0dXJuIChwb2x5OHg4X3QpX19idWlsdGluX25lb25fdmR1cF9udjhx aSAoKF9fYnVpbHRpbl9uZW9uX3FpKSBfX2EpOworICByZXR1cm4gdmR1cF9uX3A4IChfX2EpOwog fQogCiBfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSBwb2x5MTZ4NF90CiBfX2F0dHJpYnV0 ZV9fICAoKF9fYWx3YXlzX2lubGluZV9fLCBfX2dudV9pbmxpbmVfXywgX19hcnRpZmljaWFsX18p KQogdm1vdl9uX3AxNiAocG9seTE2X3QgX19hKQogewotICByZXR1cm4gKHBvbHkxNng0X3QpX19i dWlsdGluX25lb25fdmR1cF9udjRoaSAoKF9fYnVpbHRpbl9uZW9uX2hpKSBfX2EpOworICByZXR1 cm4gdmR1cF9uX3AxNiAoX19hKTsKIH0KIAogX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUg aW50NjR4MV90CiBfX2F0dHJpYnV0ZV9fICAoKF9fYWx3YXlzX2lubGluZV9fLCBfX2dudV9pbmxp bmVfXywgX19hcnRpZmljaWFsX18pKQogdm1vdl9uX3M2NCAoaW50NjRfdCBfX2EpCiB7Ci0gIHJl dHVybiAoaW50NjR4MV90KV9fYnVpbHRpbl9uZW9uX3ZkdXBfbmRpICgoX19idWlsdGluX25lb25f ZGkpIF9fYSk7CisgIHJldHVybiB2ZHVwX25fczY0IChfX2EpOwogfQogCiBfX2V4dGVuc2lvbl9f IGV4dGVybiBfX2lubGluZSB1aW50NjR4MV90CiBfX2F0dHJpYnV0ZV9fICAoKF9fYWx3YXlzX2lu bGluZV9fLCBfX2dudV9pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQogdm1vdl9uX3U2NCAodWlu dDY0X3QgX19hKQogewotICByZXR1cm4gKHVpbnQ2NHgxX3QpX19idWlsdGluX25lb25fdmR1cF9u ZGkgKChfX2J1aWx0aW5fbmVvbl9kaSkgX19hKTsKKyAgcmV0dXJuIHZkdXBfbl91NjQgKF9fYSk7 CiB9CiAKIF9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIGludDh4MTZfdAogX19hdHRyaWJ1 dGVfXyAgKChfX2Fsd2F5c19pbmxpbmVfXywgX19nbnVfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9f KSkKIHZtb3ZxX25fczggKGludDhfdCBfX2EpCiB7Ci0gIHJldHVybiAoaW50OHgxNl90KV9fYnVp bHRpbl9uZW9uX3ZkdXBfbnYxNnFpICgoX19idWlsdGluX25lb25fcWkpIF9fYSk7CisgIHJldHVy biB2ZHVwcV9uX3M4IChfX2EpOwogfQogCiBfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSBp bnQxNng4X3QKIF9fYXR0cmlidXRlX18gICgoX19hbHdheXNfaW5saW5lX18sIF9fZ251X2lubGlu ZV9fLCBfX2FydGlmaWNpYWxfXykpCiB2bW92cV9uX3MxNiAoaW50MTZfdCBfX2EpCiB7Ci0gIHJl dHVybiAoaW50MTZ4OF90KV9fYnVpbHRpbl9uZW9uX3ZkdXBfbnY4aGkgKChfX2J1aWx0aW5fbmVv bl9oaSkgX19hKTsKKyAgcmV0dXJuIHZkdXBxX25fczE2IChfX2EpOwogfQogCiBfX2V4dGVuc2lv bl9fIGV4dGVybiBfX2lubGluZSBpbnQzMng0X3QKIF9fYXR0cmlidXRlX18gICgoX19hbHdheXNf aW5saW5lX18sIF9fZ251X2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCiB2bW92cV9uX3MzMiAo aW50MzJfdCBfX2EpCiB7Ci0gIHJldHVybiAoaW50MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3ZkdXBf bnY0c2kgKChfX2J1aWx0aW5fbmVvbl9zaSkgX19hKTsKKyAgcmV0dXJuIHZkdXBxX25fczMyIChf X2EpOwogfQogCiBfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSBmbG9hdDMyeDRfdAogX19h dHRyaWJ1dGVfXyAgKChfX2Fsd2F5c19pbmxpbmVfXywgX19nbnVfaW5saW5lX18sIF9fYXJ0aWZp Y2lhbF9fKSkKIHZtb3ZxX25fZjMyIChmbG9hdDMyX3QgX19hKQogewotICByZXR1cm4gKGZsb2F0 MzJ4NF90KV9fYnVpbHRpbl9uZW9uX3ZkdXBfbnY0c2YgKChfX2J1aWx0aW5fbmVvbl9zZikgX19h KTsKKyAgcmV0dXJuIHZkdXBxX25fZjMyIChfX2EpOwogfQogCiBfX2V4dGVuc2lvbl9fIGV4dGVy biBfX2lubGluZSB1aW50OHgxNl90CiBfX2F0dHJpYnV0ZV9fICAoKF9fYWx3YXlzX2lubGluZV9f LCBfX2dudV9pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQogdm1vdnFfbl91OCAodWludDhfdCBf X2EpCiB7Ci0gIHJldHVybiAodWludDh4MTZfdClfX2J1aWx0aW5fbmVvbl92ZHVwX252MTZxaSAo KF9fYnVpbHRpbl9uZW9uX3FpKSBfX2EpOworICByZXR1cm4gdmR1cHFfbl91OCAoX19hKTsKIH0K IAogX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgdWludDE2eDhfdAogX19hdHRyaWJ1dGVf XyAgKChfX2Fsd2F5c19pbmxpbmVfXywgX19nbnVfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkK IHZtb3ZxX25fdTE2ICh1aW50MTZfdCBfX2EpCiB7Ci0gIHJldHVybiAodWludDE2eDhfdClfX2J1 aWx0aW5fbmVvbl92ZHVwX252OGhpICgoX19idWlsdGluX25lb25faGkpIF9fYSk7CisgIHJldHVy biB2ZHVwcV9uX3UxNiAoX19hKTsKIH0KIAogX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUg dWludDMyeDRfdAogX19hdHRyaWJ1dGVfXyAgKChfX2Fsd2F5c19pbmxpbmVfXywgX19nbnVfaW5s aW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKIHZtb3ZxX25fdTMyICh1aW50MzJfdCBfX2EpCiB7Ci0g IHJldHVybiAodWludDMyeDRfdClfX2J1aWx0aW5fbmVvbl92ZHVwX252NHNpICgoX19idWlsdGlu X25lb25fc2kpIF9fYSk7CisgIHJldHVybiB2ZHVwcV9uX3UzMiAoX19hKTsKIH0KIAogX19leHRl bnNpb25fXyBleHRlcm4gX19pbmxpbmUgcG9seTh4MTZfdAogX19hdHRyaWJ1dGVfXyAgKChfX2Fs d2F5c19pbmxpbmVfXywgX19nbnVfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKIHZtb3ZxX25f cDggKHBvbHk4X3QgX19hKQogewotICByZXR1cm4gKHBvbHk4eDE2X3QpX19idWlsdGluX25lb25f dmR1cF9udjE2cWkgKChfX2J1aWx0aW5fbmVvbl9xaSkgX19hKTsKKyAgcmV0dXJuIHZkdXBxX25f cDggKF9fYSk7CiB9CiAKIF9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIHBvbHkxNng4X3QK IF9fYXR0cmlidXRlX18gICgoX19hbHdheXNfaW5saW5lX18sIF9fZ251X2lubGluZV9fLCBfX2Fy dGlmaWNpYWxfXykpCiB2bW92cV9uX3AxNiAocG9seTE2X3QgX19hKQogewotICByZXR1cm4gKHBv bHkxNng4X3QpX19idWlsdGluX25lb25fdmR1cF9udjhoaSAoKF9fYnVpbHRpbl9uZW9uX2hpKSBf X2EpOworICByZXR1cm4gdmR1cHFfbl9wMTYgKF9fYSk7CiB9CiAKIF9fZXh0ZW5zaW9uX18gZXh0 ZXJuIF9faW5saW5lIGludDY0eDJfdAogX19hdHRyaWJ1dGVfXyAgKChfX2Fsd2F5c19pbmxpbmVf XywgX19nbnVfaW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKIHZtb3ZxX25fczY0IChpbnQ2NF90 IF9fYSkKIHsKLSAgcmV0dXJuIChpbnQ2NHgyX3QpX19idWlsdGluX25lb25fdmR1cF9udjJkaSAo KF9fYnVpbHRpbl9uZW9uX2RpKSBfX2EpOworICByZXR1cm4gdmR1cHFfbl9zNjQgKF9fYSk7CiB9 CiAKIF9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIHVpbnQ2NHgyX3QKIF9fYXR0cmlidXRl X18gICgoX19hbHdheXNfaW5saW5lX18sIF9fZ251X2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykp CiB2bW92cV9uX3U2NCAodWludDY0X3QgX19hKQogewotICByZXR1cm4gKHVpbnQ2NHgyX3QpX19i dWlsdGluX25lb25fdmR1cF9udjJkaSAoKF9fYnVpbHRpbl9uZW9uX2RpKSBfX2EpOworICByZXR1 cm4gdmR1cHFfbl91NjQgKF9fYSk7CiB9CiAKIF9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5l IGludDh4OF90CkBAIC0xNzg3OSwxNCArMTc4ODIsMTQgQEAgX19leHRlbnNpb25fXyBleHRlcm4g X19pbmxpbmUgZmxvYXQxNng0X3QKIF9fYXR0cmlidXRlX18gICgoX19hbHdheXNfaW5saW5lX18s IF9fZ251X2lubGluZV9fLCBfX2FydGlmaWNpYWxfXykpCiB2ZHVwX25fZjE2IChmbG9hdDE2X3Qg X19hKQogewotICByZXR1cm4gX19idWlsdGluX25lb25fdmR1cF9udjRoZiAoX19hKTsKKyAgcmV0 dXJuIChmbG9hdDE2eDRfdCkge19fYSwgX19hLCBfX2EsIF9fYX07CiB9CiAKIF9fZXh0ZW5zaW9u X18gZXh0ZXJuIF9faW5saW5lIGZsb2F0MTZ4OF90CiBfX2F0dHJpYnV0ZV9fICAoKF9fYWx3YXlz X2lubGluZV9fLCBfX2dudV9pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQogdmR1cHFfbl9mMTYg KGZsb2F0MTZfdCBfX2EpCiB7Ci0gIHJldHVybiBfX2J1aWx0aW5fbmVvbl92ZHVwX252OGhmIChf X2EpOworICByZXR1cm4gKGZsb2F0MTZ4OF90KSB7X19hLCBfX2EsIF9fYSwgX19hLCBfX2EsIF9f YSwgX19hLCBfX2F9OwogfQogCiBfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSBmbG9hdDE2 eDRfdApAQCAtMTc5MjEsMTQgKzE3OTI0LDE0IEBAIF9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5s aW5lIGZsb2F0MTZ4NF90CiBfX2F0dHJpYnV0ZV9fICAoKF9fYWx3YXlzX2lubGluZV9fLCBfX2du dV9pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQogdm1vdl9uX2YxNiAoZmxvYXQxNl90IF9fYSkK IHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9uZW9uX3ZkdXBfbnY0aGYgKF9fYSk7CisgIHJldHVybiB2 ZHVwX25fZjE2IChfX2EpOwogfQogCiBfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSBmbG9h dDE2eDhfdAogX19hdHRyaWJ1dGVfXyAgKChfX2Fsd2F5c19pbmxpbmVfXywgX19nbnVfaW5saW5l X18sIF9fYXJ0aWZpY2lhbF9fKSkKIHZtb3ZxX25fZjE2IChmbG9hdDE2X3QgX19hKQogewotICBy ZXR1cm4gX19idWlsdGluX25lb25fdmR1cF9udjhoZiAoX19hKTsKKyAgcmV0dXJuIHZkdXBxX25f ZjE2IChfX2EpOwogfQogCiBfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSBmbG9hdDE2eDRf dApAQCAtMTg4NTIsMTQgKzE4ODU1LDE0IEBAIF9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5l IGJmbG9hdDE2eDRfdAogX19hdHRyaWJ1dGVfXyAgKChfX2Fsd2F5c19pbmxpbmVfXywgX19nbnVf aW5saW5lX18sIF9fYXJ0aWZpY2lhbF9fKSkKIHZkdXBfbl9iZjE2IChiZmxvYXQxNl90IF9fYSkK IHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9uZW9uX3ZkdXBfbnY0YmYgKF9fYSk7CisgIHJldHVybiAo YmZsb2F0MTZ4NF90KSB7X19hLCBfX2EsIF9fYSwgX19hfTsKIH0KIAogX19leHRlbnNpb25fXyBl eHRlcm4gX19pbmxpbmUgYmZsb2F0MTZ4OF90CiBfX2F0dHJpYnV0ZV9fICAoKF9fYWx3YXlzX2lu bGluZV9fLCBfX2dudV9pbmxpbmVfXywgX19hcnRpZmljaWFsX18pKQogdmR1cHFfbl9iZjE2IChi ZmxvYXQxNl90IF9fYSkKIHsKLSAgcmV0dXJuIF9fYnVpbHRpbl9uZW9uX3ZkdXBfbnY4YmYgKF9f YSk7CisgIHJldHVybiAoYmZsb2F0MTZ4OF90KSB7X19hLCBfX2EsIF9fYSwgX19hLCBfX2EsIF9f YSwgX19hLCBfX2F9OwogfQogCiBfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSBiZmxvYXQx Nng0X3QKZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYXJtL2FybV9uZW9uX2J1aWx0aW5zLmRlZiBi L2djYy9jb25maWcvYXJtL2FybV9uZW9uX2J1aWx0aW5zLmRlZgppbmRleCBhZTEwNGQ1YmExYi4u YTIzM2U5YmJkOWUgMTAwNjQ0Ci0tLSBhL2djYy9jb25maWcvYXJtL2FybV9uZW9uX2J1aWx0aW5z LmRlZgorKysgYi9nY2MvY29uZmlnL2FybS9hcm1fbmVvbl9idWlsdGlucy5kZWYKQEAgLTIxNCw5 ICsyMTQsNiBAQCBWQVIxMCAoR0VUTEFORSwgdmdldF9sYW5lLAogVkFSNiAoR0VUTEFORSwgdmdl dF9sYW5ldSwgdjhxaSwgdjRoaSwgdjJzaSwgdjE2cWksIHY4aGksIHY0c2kpCiBWQVIxMCAoU0VU TEFORSwgdnNldF9sYW5lLAogCSB2OHFpLCB2NGhpLCB2MnNpLCB2MnNmLCBkaSwgdjE2cWksIHY4 aGksIHY0c2ksIHY0c2YsIHYyZGkpCi1WQVIxMCAoVU5PUCwgdmR1cF9uLAotCSB2OHFpLCB2NGhp LCB2MnNpLCB2MnNmLCBkaSwgdjE2cWksIHY4aGksIHY0c2ksIHY0c2YsIHYyZGkpCi1WQVI0IChV Tk9QLCB2ZHVwX24sIHY4aGYsIHY0aGYsIHY4YmYsIHY0YmYpCiBWQVIxMCAoR0VUTEFORSwgdmR1 cF9sYW5lLAogCSB2OHFpLCB2NGhpLCB2MnNpLCB2MnNmLCBkaSwgdjE2cWksIHY4aGksIHY0c2ks IHY0c2YsIHYyZGkpCiBWQVI0IChHRVRMQU5FLCB2ZHVwX2xhbmUsIHY4aGYsIHY0aGYsIHY4YmYs IHY0YmYpCg== --000000000000d6be6c05c5811713--