From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-oi1-x234.google.com (mail-oi1-x234.google.com [IPv6:2607:f8b0:4864:20::234]) by sourceware.org (Postfix) with ESMTPS id B48C93857C6C for ; Thu, 6 Aug 2020 12:00:44 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org B48C93857C6C Received: by mail-oi1-x234.google.com with SMTP id b22so16662933oic.8 for ; Thu, 06 Aug 2020 05:00:44 -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:references:in-reply-to:from:date :message-id:subject:to:cc; bh=eGWJVyfDwS0mYb/jQDrRAez6wKAQq7bHi3FCmbM1gwI=; b=gRfngD73+U7WjiQoxt3sg023ls8yZ51i+5TgB5ZC7QBoNT7r8tfwddJhYB/y4sXFpc MN9019KtlFPTJo3wHs8WTnQRvDX4ziSYfZdmmLZCQw1ZtqNxhFbX/2tHVBzBXQQAYry0 O07t7hKlnFiCepf7zps+tO/R4Y9LNdDE/dkW621aD0wDe+56c8lBDW4Mg7lomQ6sCrFn tSDqtbcnhpfXNDO/TOEdOmWEF8BpXqzbXmS2mnrmKL3c3qgxFbjaWbF0FtcEm59vfosZ Go5JJ7iqB1EjMzcvQXmozkpYqJLf52OMfpWwOxnHpMleQdRzjEKish1eCY+D1B10nhJz O/dw== X-Gm-Message-State: AOAM531X8159EeXBPV3bdONc10mV2bS0o+dPxXmXpBTSyf/levxnm997 9EBuysq/qQix0ayOKkc0QZvyrONlRZkCxEpQoD/cIw== X-Google-Smtp-Source: ABdhPJwviV3GRfjJGmFLKBjLbfnuFhhqQWlG4e0rFeDwyet7mkQ1riyUpPDectC/8KV+/lv8z9xUMuqPPPXLoRUnzLI= X-Received: by 2002:a05:6808:8e5:: with SMTP id d5mr6384238oic.64.1596715243895; Thu, 06 Aug 2020 05:00:43 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Christophe Lyon Date: Thu, 6 Aug 2020 14:00:32 +0200 Message-ID: Subject: Re: VEC_COND_EXPR optimizations v2 To: Marc Glisse Cc: Richard Biener , GCC Patches Content-Type: multipart/mixed; boundary="000000000000ec1ee705ac343ca2" X-Spam-Status: No, score=-6.2 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, KAM_NUMSUBJECT, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=no 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, 06 Aug 2020 12:00:53 -0000 --000000000000ec1ee705ac343ca2 Content-Type: text/plain; charset="UTF-8" On Thu, 6 Aug 2020 at 13:42, Marc Glisse wrote: > > On Thu, 6 Aug 2020, Christophe Lyon wrote: > > > On Thu, 6 Aug 2020 at 11:06, Marc Glisse wrote: > >> > >> On Thu, 6 Aug 2020, Christophe Lyon wrote: > >> > >>>>> 2020-08-05 Marc Glisse > >>>>> > >>>>> PR tree-optimization/95906 > >>>>> PR target/70314 > >>>>> * match.pd ((c ? a : b) op d, (c ? a : b) op (c ? d : e), > >>>>> (v ? w : 0) ? a : b, c1 ? c2 ? a : b : b): New transformations. > >>>>> (op (c ? a : b)): Update to match the new transformations. > >>>>> > >>>>> * gcc.dg/tree-ssa/andnot-2.c: New file. > >>>>> * gcc.dg/tree-ssa/pr95906.c: Likewise. > >>>>> * gcc.target/i386/pr70314.c: Likewise. > >>>>> > >>> > >>> I think this patch is causing several ICEs on arm-none-linux-gnueabihf > >>> --with-cpu cortex-a9 --with-fpu neon-fp16: > >>> Executed from: gcc.c-torture/compile/compile.exp > >>> gcc.c-torture/compile/20160205-1.c -O3 -fomit-frame-pointer > >>> -funroll-loops -fpeel-loops -ftracer -finline-functions (internal > >>> compiler error) > >>> gcc.c-torture/compile/20160205-1.c -O3 -g (internal compiler error) > >>> Executed from: gcc.dg/dg.exp > >>> gcc.dg/pr87746.c (internal compiler error) > >>> Executed from: gcc.dg/tree-ssa/tree-ssa.exp > >>> gcc.dg/tree-ssa/ifc-cd.c (internal compiler error) > >> > >> I tried a cross from x86_64-linux with current master > >> > >> .../configure --target=arm-none-linux-gnueabihf --enable-languages=c,c++ --with-system-zlib --disable-nls --with-cpu=cortex-a9 --with-fpu=neon-fp16 > >> make > >> > >> it stops at some point with an error, but I have xgcc and cc1 in > >> build/gcc. > >> > >> I copied 2 of the testcases and compiled > >> > >> ./xgcc pr87746.c -Ofast -S -B. > >> ./xgcc -O3 -fdump-tree-ifcvt-details-blocks-details ifc-cd.c -S -B. > >> > >> without getting any ICE. > > > > Sorry for the delay, I had to reproduce the problem manually. > >> > >> Is there a machine on the compile farm where this is easy to reproduce? > > I don't think there is any arm machine in the compile farm. > > > >> Or could you attach the .optimized dump that corresponds to the > >> backtrace below? It looks like we end up with a comparison with an > >> unexpected return type. > >> > > > > I've compiled pr87746.c with -fdump-tree-ifcvt-details-blocks-details, > > here is the log. > > Is that what you need? > > Thanks. > The one from -fdump-tree-optimized would be closer to the ICE. Here it is. > Though it would also be convenient to know which stmt is being expanded > when we ICE, etc. I think it's when expanding _96 = _86 | _95; (that the value of "stmt" in expand_gimple_stmt_1 when we enter do_store_flag > Was I on the right track configuring with > --target=arm-none-linux-gnueabihf --with-cpu=cortex-a9 > --with-fpu=neon-fp16 > then compiling without any special option? > Maybe you also need --with-float=hard, I don't remember if it's implied by the 'hf' target suffix (I saw similar problems with arm-none-linux-gnueabi anyway) > > Thanks, > > > > Christophe > > > >>> Executed from: gcc.dg/vect/vect.exp > >>> gcc.dg/vect/pr59591-1.c (internal compiler error) > >>> gcc.dg/vect/pr59591-1.c -flto -ffat-lto-objects (internal compiler error) > >>> gcc.dg/vect/pr86927.c (internal compiler error) > >>> gcc.dg/vect/pr86927.c -flto -ffat-lto-objects (internal compiler error) > >>> gcc.dg/vect/slp-cond-5.c (internal compiler error) > >>> gcc.dg/vect/slp-cond-5.c -flto -ffat-lto-objects (internal compiler error) > >>> gcc.dg/vect/vect-23.c (internal compiler error) > >>> gcc.dg/vect/vect-23.c -flto -ffat-lto-objects (internal compiler error) > >>> gcc.dg/vect/vect-24.c (internal compiler error) > >>> gcc.dg/vect/vect-24.c -flto -ffat-lto-objects (internal compiler error) > >>> gcc.dg/vect/vect-cond-reduc-6.c (internal compiler error) > >>> gcc.dg/vect/vect-cond-reduc-6.c -flto -ffat-lto-objects (internal > >>> compiler error) > >>> > >>> Backtrace for gcc.c-torture/compile/20160205-1.c -O3 > >>> -fomit-frame-pointer -funroll-loops -fpeel-loops -ftracer > >>> -finline-functions > >>> during RTL pass: expand > >>> /gcc/testsuite/gcc.c-torture/compile/20160205-1.c:2:5: internal > >>> compiler error: in do_store_flag, at expr.c:12259 > >>> 0x8feb26 do_store_flag > >>> /gcc/expr.c:12259 > >>> 0x900201 expand_expr_real_2(separate_ops*, rtx_def*, machine_mode, > >>> expand_modifier) > >>> /gcc/expr.c:9617 > >>> 0x908cd0 expand_expr_real_1(tree_node*, rtx_def*, machine_mode, > >>> expand_modifier, rtx_def**, bool) > >>> /gcc/expr.c:10159 > >>> 0x91174e expand_expr > >>> /gcc/expr.h:282 > >>> 0x91174e expand_operands(tree_node*, tree_node*, rtx_def*, rtx_def**, > >>> rtx_def**, expand_modifier) > >>> /gcc/expr.c:8065 > >>> 0x8ff543 expand_expr_real_2(separate_ops*, rtx_def*, machine_mode, > >>> expand_modifier) > >>> /gcc/expr.c:9950 > >>> 0x908cd0 expand_expr_real_1(tree_node*, rtx_def*, machine_mode, > >>> expand_modifier, rtx_def**, bool) > >>> /gcc/expr.c:10159 > >>> 0x91174e expand_expr > >>> /gcc/expr.h:282 > >>> 0x91174e expand_operands(tree_node*, tree_node*, rtx_def*, rtx_def**, > >>> rtx_def**, expand_modifier) > >>> /gcc/expr.c:8065 > >>> 0x8ff543 expand_expr_real_2(separate_ops*, rtx_def*, machine_mode, > >>> expand_modifier) > >>> /gcc/expr.c:9950 > >>> 0x908cd0 expand_expr_real_1(tree_node*, rtx_def*, machine_mode, > >>> expand_modifier, rtx_def**, bool) > >>> /gcc/expr.c:10159 > >>> 0x91174e expand_expr > >>> /gcc/expr.h:282 > >>> 0x91174e expand_operands(tree_node*, tree_node*, rtx_def*, rtx_def**, > >>> rtx_def**, expand_modifier) > >>> /gcc/expr.c:8065 > >>> 0x8ff543 expand_expr_real_2(separate_ops*, rtx_def*, machine_mode, > >>> expand_modifier) > >>> /gcc/expr.c:9950 > >>> 0x908cd0 expand_expr_real_1(tree_node*, rtx_def*, machine_mode, > >>> expand_modifier, rtx_def**, bool) > >>> /gcc/expr.c:10159 > >>> 0x91174e expand_expr > >>> /gcc/expr.h:282 > >>> 0x91174e expand_operands(tree_node*, tree_node*, rtx_def*, rtx_def**, > >>> rtx_def**, expand_modifier) > >>> /gcc/expr.c:8065 > >>> 0x8ff543 expand_expr_real_2(separate_ops*, rtx_def*, machine_mode, > >>> expand_modifier) > >>> /gcc/expr.c:9950 > >>> 0x908cd0 expand_expr_real_1(tree_node*, rtx_def*, machine_mode, > >>> expand_modifier, rtx_def**, bool) > >>> /gcc/expr.c:10159 > >>> 0x91174e expand_expr > >>> /gcc/expr.h:282 > >>> > >>> Christophe > >> > >> -- > >> Marc Glisse > > > > -- > Marc Glisse --000000000000ec1ee705ac343ca2 Content-Type: application/octet-stream; name="pr87746.c.237t.optimized" Content-Disposition: attachment; filename="pr87746.c.237t.optimized" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kdiqw6tk0 Cjs7IEZ1bmN0aW9uIG1vdmVfcmVwbGFjZW1lbnRzIChtb3ZlX3JlcGxhY2VtZW50cywgZnVuY2Rl Zl9ubz0wLCBkZWNsX3VpZD01Njc4LCBjZ3JhcGhfdWlkPTEsIHN5bWJvbF9vcmRlcj0xKQoKUmVt b3ZpbmcgYmFzaWMgYmxvY2sgMTUKUmVtb3ZpbmcgYmFzaWMgYmxvY2sgMTYKUmVtb3ZpbmcgYmFz aWMgYmxvY2sgMTcKUmVtb3ZpbmcgYmFzaWMgYmxvY2sgMTgKUmVtb3ZpbmcgYmFzaWMgYmxvY2sg MTkKUmVtb3ZpbmcgYmFzaWMgYmxvY2sgMjAKUmVtb3ZpbmcgYmFzaWMgYmxvY2sgMjEKUmVtb3Zp bmcgYmFzaWMgYmxvY2sgMjIKbW92ZV9yZXBsYWNlbWVudHMgKHN0cnVjdCBydHhfZGVmICogKiB4 LCBzdHJ1Y3QgcnR4X2RlZiAqICogeSwgaW50IG5fcmVwbGFjZW1lbnRzKQp7CiAgdW5zaWduZWQg aW50IGl2dG1wLjM0OwogIHVuc2lnbmVkIGludCBpdnRtcC4yNzsKICB2ZWN0b3IoNCkgdW5zaWdu ZWQgaW50IHZlY3RfcGF0dF8xOS4yMzsKICB2ZWN0b3IoNCkgdW5zaWduZWQgaW50IHZlY3RfcGF0 dF8zNS4xOTsKICB2ZWN0b3IoNCkgdW5zaWduZWQgaW50IHZlY3RfX2lmY19fMzYuMTU7CiAgdmVj dG9yKDQpIHVuc2lnbmVkIGludCB2ZWN0X18xLjEzOwogIHZlY3Rvcig0KSB1bnNpZ25lZCBpbnQg dmVjdF9fMS4xMjsKICB2ZWN0b3IoNCkgdW5zaWduZWQgaW50IHZlY3RfYXJyYXkuMTFbM107CiAg dW5zaWduZWQgaW50WzEyXSAqIHtyZWYtYWxsfSB2ZWN0cF9yZXBsYWNlbWVudHMuOTsKICBpbnQg dG1wLjg7CiAgdW5zaWduZWQgaW50IG5pdGVyc192ZWN0b3JfbXVsdF92Zi43OwogIHVuc2lnbmVk IGludCBibmQuNjsKICB1bnNpZ25lZCBpbnQgbml0ZXJzLjU7CiAgaW50IGk7CiAgc2l6ZXR5cGUg XzE7CiAgc3RydWN0IHJlcGxhY2VtZW50WzE1MF0gKiBfMjsKICB2b2lkICogXzE0OwogIHVuc2ln bmVkIGludCBfMjY7CiAgdW5zaWduZWQgaW50IF8zMDsKICBzaXpldHlwZSBfMzY7CiAgc3RydWN0 IHJ0eF9kZWYgKiAqIF81NTsKICBzdHJ1Y3QgcnR4X2RlZiAqICogXzU4OwogIHVuc2lnbmVkIGlu dCBfNjQ7CiAgdW5zaWduZWQgaW50IF83NjsKICB2ZWN0b3IoNCkgdW5zaWduZWQgaW50IHZlY3Rf Y3N0X183NzsKICB1bnNpZ25lZCBpbnQgXzc4OwogIHZlY3Rvcig0KSB1bnNpZ25lZCBpbnQgdmVj dF9jc3RfXzc5OwogIHZlY3Rvcig0KSA8c2lnbmVkLWJvb2xlYW46MzI+IF84NjsKICB2ZWN0b3Io NCkgPHNpZ25lZC1ib29sZWFuOjMyPiBfOTU7CiAgdmVjdG9yKDQpIDxzaWduZWQtYm9vbGVhbjoz Mj4gXzk2OwogIHVuc2lnbmVkIGludCBfMTE5OwogIHVuc2lnbmVkIGludCBfMTIyOwogIHVuc2ln bmVkIGludCBfMTI1OwogIHVuc2lnbmVkIGludCBfMTI4OwogIHVuc2lnbmVkIGludCBfMTMyOwog IHVuc2lnbmVkIGludCBfMTM1OwogIHVuc2lnbmVkIGludCBfMTM4OwogIHVuc2lnbmVkIGludCBf MTQxOwoKICA8YmIgMj4gW2xvY2FsIGNvdW50OiAxMTgxMTE1OThdOgogIGlmIChuX3JlcGxhY2Vt ZW50c183KEQpID4gMCkKICAgIGdvdG8gPGJiIDM+OyBbODkuMDAlXQogIGVsc2UKICAgIGdvdG8g PGJiIDE0PjsgWzExLjAwJV0KCiAgPGJiIDM+IFtsb2NhbCBjb3VudDogMTA1MTE5MzIyXToKICBu aXRlcnMuNV81MiA9ICh1bnNpZ25lZCBpbnQpIG5fcmVwbGFjZW1lbnRzXzcoRCk7CiAgXzY0ID0g bml0ZXJzLjVfNTIgKyA0Mjk0OTY3Mjk1OwogIGlmIChfNjQgPD0gNjEpCiAgICBnb3RvIDxiYiA3 PjsgWzEwLjAwJV0KICBlbHNlCiAgICBnb3RvIDxiYiA0PjsgWzkwLjAwJV0KCiAgPGJiIDQ+IFts b2NhbCBjb3VudDogOTQ2MDczOTBdOgogIGJuZC42XzY3ID0gbml0ZXJzLjVfNTIgPj4gMjsKICBf NzYgPSAodW5zaWduZWQgaW50KSB4XzgoRCk7CiAgdmVjdF9jc3RfXzc3ID0ge183NiwgXzc2LCBf NzYsIF83Nn07CiAgXzc4ID0gKHVuc2lnbmVkIGludCkgeV85KEQpOwogIHZlY3RfY3N0X183OSA9 IHtfNzgsIF83OCwgXzc4LCBfNzh9OwogIGl2dG1wLjM0XzE0MyA9ICh1bnNpZ25lZCBpbnQpICZy ZXBsYWNlbWVudHM7CiAgXzMwID0gYm5kLjZfNjcgKiA0ODsKICBfMjYgPSBfMzAgKyBpdnRtcC4z NF8xNDM7CgogIDxiYiA1PiBbbG9jYWwgY291bnQ6IDU2NzY0NDMzN106CiAgIyBpdnRtcC4zNF80 MiA9IFBISSA8aXZ0bXAuMzRfMTQzKDQpLCBpdnRtcC4zNF8xMzAoNSk+CiAgdmVjdHBfcmVwbGFj ZW1lbnRzLjlfNzEgPSAodW5zaWduZWQgaW50WzEyXSAqIHtyZWYtYWxsfSkgaXZ0bXAuMzRfNDI7 CiAgdmVjdF9hcnJheS4xMSA9IC5MT0FEX0xBTkVTIChNRU0gPHVuc2lnbmVkIGludFsxMl0+IFso c3RydWN0IHJ0eF9kZWYgKiAqICopdmVjdHBfcmVwbGFjZW1lbnRzLjlfNzFdKTsKICB2ZWN0X18x LjEyXzczID0gdmVjdF9hcnJheS4xMVswXTsKICB2ZWN0X18xLjEzXzc0ID0gdmVjdF9hcnJheS4x MVsxXTsKICB2ZWN0X2FycmF5LjExID17dn0ge0NMT0JCRVJ9OwogIHZlY3RfX2lmY19fMzYuMTVf ODEgPSAuVkNPTkRVICh2ZWN0X18xLjEzXzc0LCB2ZWN0X2NzdF9fNzcsIHZlY3RfXzEuMTNfNzQs IHZlY3RfY3N0X183OSwgMTEzKTsKICBfODYgPSB2ZWN0X18xLjEzXzc0ID09IHZlY3RfY3N0X183 NzsKICBfOTUgPSB2ZWN0X18xLjEyXzczICE9IHZlY3RfY3N0X183NzsKICBfOTYgPSBfODYgfCBf OTU7CiAgdmVjdF9wYXR0XzM1LjE5Xzk5ID0gLlZDT05EIChfOTYsIHsgMCwgMCwgMCwgMCB9LCB2 ZWN0X18xLjEyXzczLCB2ZWN0X2NzdF9fNzksIDEwNyk7CiAgdmVjdF9wYXR0XzE5LjIzXzExNiA9 IC5WQ09ORCAoXzk2LCB7IDAsIDAsIDAsIDAgfSwgdmVjdF9faWZjX18zNi4xNV84MSwgeyAwLCAw LCAwLCAwIH0sIDEwNyk7CiAgXzExOSA9IEJJVF9GSUVMRF9SRUYgPHZlY3RfcGF0dF8zNS4xOV85 OSwgMzIsIDA+OwogIE1FTVtiYXNlOiB2ZWN0cF9yZXBsYWNlbWVudHMuOV83MSwgb2Zmc2V0OiAw Ql0gPSBfMTE5OwogIF8xMjIgPSBCSVRfRklFTERfUkVGIDx2ZWN0X3BhdHRfMzUuMTlfOTksIDMy LCAzMj47CiAgTUVNW2Jhc2U6IHZlY3RwX3JlcGxhY2VtZW50cy45XzcxLCBvZmZzZXQ6IDEyQl0g PSBfMTIyOwogIF8xMjUgPSBCSVRfRklFTERfUkVGIDx2ZWN0X3BhdHRfMzUuMTlfOTksIDMyLCA2 ND47CiAgTUVNW2Jhc2U6IHZlY3RwX3JlcGxhY2VtZW50cy45XzcxLCBvZmZzZXQ6IDI0Ql0gPSBf MTI1OwogIF8xMjggPSBCSVRfRklFTERfUkVGIDx2ZWN0X3BhdHRfMzUuMTlfOTksIDMyLCA5Nj47 CiAgTUVNW2Jhc2U6IHZlY3RwX3JlcGxhY2VtZW50cy45XzcxLCBvZmZzZXQ6IDM2Ql0gPSBfMTI4 OwogIF8xMzIgPSBCSVRfRklFTERfUkVGIDx2ZWN0X3BhdHRfMTkuMjNfMTE2LCAzMiwgMD47CiAg TUVNW2Jhc2U6IHZlY3RwX3JlcGxhY2VtZW50cy45XzcxLCBvZmZzZXQ6IDRCXSA9IF8xMzI7CiAg XzEzNSA9IEJJVF9GSUVMRF9SRUYgPHZlY3RfcGF0dF8xOS4yM18xMTYsIDMyLCAzMj47CiAgTUVN W2Jhc2U6IHZlY3RwX3JlcGxhY2VtZW50cy45XzcxLCBvZmZzZXQ6IDE2Ql0gPSBfMTM1OwogIF8x MzggPSBCSVRfRklFTERfUkVGIDx2ZWN0X3BhdHRfMTkuMjNfMTE2LCAzMiwgNjQ+OwogIE1FTVti YXNlOiB2ZWN0cF9yZXBsYWNlbWVudHMuOV83MSwgb2Zmc2V0OiAyOEJdID0gXzEzODsKICBfMTQx ID0gQklUX0ZJRUxEX1JFRiA8dmVjdF9wYXR0XzE5LjIzXzExNiwgMzIsIDk2PjsKICBNRU1bYmFz ZTogdmVjdHBfcmVwbGFjZW1lbnRzLjlfNzEsIG9mZnNldDogNDBCXSA9IF8xNDE7CiAgaXZ0bXAu MzRfMTMwID0gaXZ0bXAuMzRfNDIgKyA0ODsKICBpZiAoXzI2ICE9IGl2dG1wLjM0XzEzMCkKICAg IGdvdG8gPGJiIDU+OyBbODMuMzMlXQogIGVsc2UKICAgIGdvdG8gPGJiIDY+OyBbMTYuNjclXQoK ICA8YmIgNj4gW2xvY2FsIGNvdW50OiAxMDUxMTkzMjJdOgogIG5pdGVyc192ZWN0b3JfbXVsdF92 Zi43XzY4ID0gbml0ZXJzLjVfNTIgJiA0Mjk0OTY3MjkyOwogIHRtcC44XzY5ID0gKGludCkgbml0 ZXJzX3ZlY3Rvcl9tdWx0X3ZmLjdfNjg7CiAgaWYgKG5pdGVycy41XzUyID09IG5pdGVyc192ZWN0 b3JfbXVsdF92Zi43XzY4KQogICAgZ290byA8YmIgMTM+OyBbMjUuMDAlXQogIGVsc2UKICAgIGdv dG8gPGJiIDc+OyBbNzUuMDAlXQoKICA8YmIgNz4gW2xvY2FsIGNvdW50OiA4MTQ2NzQ3NF06CiAg IyBpXzY1ID0gUEhJIDwwKDMpLCB0bXAuOF82OSg2KT4KICBfMSA9IChzaXpldHlwZSkgaV82NTsK ICBfMzYgPSBfMSAqIDEyOwogIF8yID0gJnJlcGxhY2VtZW50cyArIF8zNjsKICBpdnRtcC4yN183 NSA9ICh1bnNpZ25lZCBpbnQpIF8yOwoKICA8YmIgOD4gW2xvY2FsIGNvdW50OiA4MjI5MDM4MDVd OgogICMgaV81MyA9IFBISSA8aV82NSg3KSwgaV81Nyg5KT4KICAjIGl2dG1wLjI3XzI0ID0gUEhJ IDxpdnRtcC4yN183NSg3KSwgaXZ0bXAuMjdfMTYoOSk+CiAgXzE0ID0gKHZvaWQgKikgaXZ0bXAu MjdfMjQ7CiAgXzU1ID0gTUVNW2Jhc2U6IF8xNCwgb2Zmc2V0OiA0Ql07CiAgaWYgKHhfOChEKSA9 PSBfNTUpCiAgICBnb3RvIDxiYiAxMj47IFszMC4wMCVdCiAgZWxzZQogICAgZ290byA8YmIgMTA+ OyBbNzAuMDAlXQoKICA8YmIgOT4gW2xvY2FsIGNvdW50OiA4MjI5MDM4MDZdOgogIGlfNTcgPSBp XzUzICsgMTsKICBpdnRtcC4yN18xNiA9IGl2dG1wLjI3XzI0ICsgMTI7CiAgaWYgKG5fcmVwbGFj ZW1lbnRzXzcoRCkgPiBpXzU3KQogICAgZ290byA8YmIgOD47IFs4OS4wMCVdCiAgZWxzZQogICAg Z290byA8YmIgMTM+OyBbMTEuMDAlXQoKICA8YmIgMTA+IFtsb2NhbCBjb3VudDogNTc2MDMyNjY2 XToKICBfNTggPSBNRU1bYmFzZTogXzE0LCBvZmZzZXQ6IDBCXTsKICBpZiAoeF84KEQpID09IF81 OCkKICAgIGdvdG8gPGJiIDExPjsgWzMwLjAwJV0KICBlbHNlCiAgICBnb3RvIDxiYiA5PjsgWzcw LjAwJV0KCiAgPGJiIDExPiBbbG9jYWwgY291bnQ6IDE3MjgwOTc5OF06CiAgTUVNW2Jhc2U6IF8x NCwgb2Zmc2V0OiAwQl0gPSB5XzkoRCk7CiAgTUVNW2Jhc2U6IF8xNCwgb2Zmc2V0OiA0Ql0gPSAw QjsKICBnb3RvIDxiYiA5PjsgWzEwMC4wMCVdCgogIDxiYiAxMj4gW2xvY2FsIGNvdW50OiAyNDY4 NzExMzldOgogIE1FTVtiYXNlOiBfMTQsIG9mZnNldDogNEJdID0geV85KEQpOwogIGdvdG8gPGJi IDk+OyBbMTAwLjAwJV0KCiAgPGJiIDEzPiBbbG9jYWwgY291bnQ6IDExNjc5OTI0OV06CgogIDxi YiAxND4gW2xvY2FsIGNvdW50OiAxMTgxMTE2MDBdOgogIHJldHVybjsKCn0KCgo= --000000000000ec1ee705ac343ca2--