From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from esa3.mentor.iphmx.com (esa3.mentor.iphmx.com [68.232.137.180]) by sourceware.org (Postfix) with ESMTPS id 4CA093858D38; Fri, 14 Oct 2022 21:18:28 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 4CA093858D38 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=codesourcery.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=mentor.com X-IronPort-AV: E=Sophos;i="5.95,185,1661846400"; d="diff'?scan'208";a="84614106" Received: from orw-gwy-02-in.mentorg.com ([192.94.38.167]) by esa3.mentor.iphmx.com with ESMTP; 14 Oct 2022 13:18:26 -0800 IronPort-SDR: KVY0ZdPcqYhSPWUW/ABRHRQDxk51mfUPcjljofCZ7mEP1277xcFUuhXtt3f0w+82RrxxpJvl0u 6lKFKKBB3znmgYfPwT4UdR7acnUsiKwAfEUHM+eJ+PWDrXvREAwurLeQ0FZ4ySqgYLfNNAvB9o m/ggt7vqkwKrcahJP9s+C3rG8by5dBI1h83GrqUeDun29hQXTyhYN8Bqr1nRQkMOUkhl7fNBsW LXjzmBBYyFFVw/t3QRsObdpRv93XcCJf2tKXKezXYTDKcDxNXiyQibgwWFXYk+c/y7XxQyKAE/ HZE= Content-Type: multipart/mixed; boundary="------------JjrTzL0pZEanh8ohTcOBD8KH" Message-ID: Date: Fri, 14 Oct 2022 23:18:15 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.3.3 Content-Language: en-US To: gcc-patches , fortran From: Tobias Burnus Subject: [Patch] Fortran: Fixes for kind=4 characters strings [PR107266] X-Originating-IP: [137.202.0.90] X-ClientProxiedBy: svr-ies-mbx-13.mgc.mentorg.com (139.181.222.13) To svr-ies-mbx-12.mgc.mentorg.com (139.181.222.12) X-Spam-Status: No, score=-11.4 required=5.0 tests=BAYES_00,GIT_PATCH_0,HEADER_FROM_DIFFERENT_DOMAINS,KAM_DMARC_STATUS,KAM_SHORT,SPF_HELO_PASS,SPF_PASS,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: --------------JjrTzL0pZEanh8ohTcOBD8KH Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: quoted-printable Long introduction - but the patch is rather simple: Don't use kind=3D1 as type where kind=3D4 should be used. Looooong introduction + background, feel free to skip. ---------------------------- This popped up for libgomp/testsuite/libgomp.fortran/struct-elem-map-1.f90 which uses kind=3D4 characters =E2=80=93 if Sandra's "Fortran: delinearize = multi-dimensional array accesses" patch is applied. Patch: https://gcc.gnu.org/pipermail/gcc-patches/2020-December/562230.html Used for OG11: https://gcc.gnu.org/pipermail/gcc-patches/2021-November/5847= 16.html On the OG12 alias devel/omp/gcc-12 vendor branch, it is used: https://gcc.gnu.org/g:39a8c371fda6136cf77c74895a00b136409e0ba3 * * * For mainline, I did not observe a wrong-code issue at runtime, still: void frobc (character(kind=3D4)[1:*_a] * & restrict a, ... ... static void frobc (character(kind=3D1) * & restrict, ... feels odd, i.e. having the definition as kind=3D4 and the declaration as ki= nd=3D1. With the patch, it becomes: static void frobc (character(kind=3D4) * & restrict, character(kind=3D4) * = &, ... * * * For the following, questionable code (=E2=86=92 PR107266), it is even worse= : character(kind=3D4) function f(x) bind(C) character(kind=3D4), value :: x end this gives the following, which has the wrong ABI: character(kind=3D1) f (character(kind=3D1) x) { (void) 0; } With the patch, it becomes: character(kind=3D4) f (character(kind=3D4) x) * * * I think that all only exercises the trans-type.cc patch; the trans-expr.cc code gets called =E2=80=93 as an assert shows, but I fail to get a dump where this goes wrong. However, for struct-elem-map-1.f90 with mainline or with OG12 and the patch: #pragma omp target map(tofrom:var.uni2[40 / 20] [len: 20]) while on OG12 without the attached patch: #pragma omp target map(tofrom:var.uni2[40 / 5] [len: 5]) where the problem is that TYPE_SIZE_UNIT is wrong. Whether this only affects OG12 due to the delinearizer patch or some code on mainline as well, I don't know. Still, I think it should be fixed ... ---------------------------- OK for mainline? Tobias ----------------- Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstra=C3=9Fe 201= , 80634 M=C3=BCnchen; Gesellschaft mit beschr=C3=A4nkter Haftung; Gesch=C3= =A4ftsf=C3=BChrer: Thomas Heurung, Frank Th=C3=BCrauf; Sitz der Gesellschaf= t: M=C3=BCnchen; Registergericht M=C3=BCnchen, HRB 106955 --------------JjrTzL0pZEanh8ohTcOBD8KH Content-Type: text/x-patch; charset="UTF-8"; name="fix-char4-decl.diff" Content-Disposition: attachment; filename="fix-char4-decl.diff" Content-Transfer-Encoding: base64 Rm9ydHJhbjogRml4ZXMgZm9yIGtpbmQ9NCBjaGFyYWN0ZXJzIHN0cmluZ3MgW1BSMTA3MjY2 XQoKCVBSIGZvcnRyYW4vMTA3MjY2CgpnY2MvZm9ydHJhbi8KCSogdHJhbnMtZXhwci5jYyAo Z2ZjX2NvbnZfc3RyaW5nX3BhcmFtZXRlcik6IFVzZSBwYXNzZWQKCXR5cGUgdG8gaG9ub3Ig Y2hhcmFjdGVyIGtpbmQuCgkqIHRyYW5zLXR5cGVzLmNjIChnZmNfc3ltX3R5cGUpOiBIb25v ciBjaGFyYWN0ZXIga2luZC4KCSogdHJhbnMtZGVjbC5jYyAoZ2ZjX2NvbnZfY2ZpX3RvX2dm Yyk6IEZpeCBoYW5kbGluZyBraW5kPTQKCWNoYXJhY3RlciBzdHJpbmdzLgoKZ2NjL3Rlc3Rz dWl0ZS8KCSogZ2ZvcnRyYW4uZGcvY2hhcjRfZGVjbC5mOTA6IE5ldyB0ZXN0LgoJKiBnZm9y dHJhbi5kZy9jaGFyNF9kZWNsLTIuZjkwOiBOZXcgdGVzdC4KCiBnY2MvZm9ydHJhbi90cmFu cy1kZWNsLmNjICAgICAgICAgICAgICAgICAgfCAxMCArKy0tLQogZ2NjL2ZvcnRyYW4vdHJh bnMtZXhwci5jYyAgICAgICAgICAgICAgICAgIHwgMTIgKysrLS0tCiBnY2MvZm9ydHJhbi90 cmFucy10eXBlcy5jYyAgICAgICAgICAgICAgICAgfCAgMiArLQogZ2NjL3Rlc3RzdWl0ZS9n Zm9ydHJhbi5kZy9jaGFyNF9kZWNsLTIuZjkwIHwgNTkgKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrCiBnY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL2NoYXI0X2RlY2wuZjkwICAg fCA1MiArKysrKysrKysrKysrKysrKysrKysrKysrKwogNSBmaWxlcyBjaGFuZ2VkLCAxMjMg aW5zZXJ0aW9ucygrKSwgMTIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZ2NjL2ZvcnRy YW4vdHJhbnMtZGVjbC5jYyBiL2djYy9mb3J0cmFuL3RyYW5zLWRlY2wuY2MKaW5kZXggNWQx NmQ2NDAzMjIuLjRiNTcwYzM1NTFhIDEwMDY0NAotLS0gYS9nY2MvZm9ydHJhbi90cmFucy1k ZWNsLmNjCisrKyBiL2djYy9mb3J0cmFuL3RyYW5zLWRlY2wuY2MKQEAgLTczNzgsMTMgKzcz NzgsMTMgQEAgZG9uZToKICAgLyogU2V0IHN0cmluZyBsZW5ndGggZm9yIGxlbj06LCBvbmx5 LiAgKi8KICAgaWYgKHN5bS0+dHMudHlwZSA9PSBCVF9DSEFSQUNURVIgJiYgIXN5bS0+dHMu dS5jbC0+bGVuZ3RoKQogICAgIHsKLSAgICAgIHRtcCA9IHN5bS0+dHMudS5jbC0+YmFja2Vu ZF9kZWNsOworICAgICAgdG1wMiA9IGdmY19nZXRfY2ZpX2Rlc2NfZWxlbV9sZW4gKGNmaSk7 CisgICAgICB0bXAgPSBmb2xkX2NvbnZlcnQgKFRSRUVfVFlQRSAodG1wMiksIHN5bS0+dHMu dS5jbC0+YmFja2VuZF9kZWNsKTsKICAgICAgIGlmIChzeW0tPnRzLmtpbmQgIT0gMSkKIAl0 bXAgPSBmb2xkX2J1aWxkMl9sb2MgKGlucHV0X2xvY2F0aW9uLCBNVUxUX0VYUFIsCi0JCQkg ICAgICAgZ2ZjX2FycmF5X2luZGV4X3R5cGUsCi0JCQkgICAgICAgc3ltLT50cy51LmNsLT5i YWNrZW5kX2RlY2wsIHRtcCk7Ci0gICAgICB0bXAyID0gZ2ZjX2dldF9jZmlfZGVzY19lbGVt X2xlbiAoY2ZpKTsKLSAgICAgIGdmY19hZGRfbW9kaWZ5ICgmYmxvY2ssIHRtcDIsIGZvbGRf Y29udmVydCAoVFJFRV9UWVBFICh0bXAyKSwgdG1wKSk7CisJCQkgICAgICAgVFJFRV9UWVBF ICh0bXAyKSwgdG1wLAorCQkJICAgICAgIGJ1aWxkX2ludF9jc3QgKFRSRUVfVFlQRSAodG1w MiksIHN5bS0+dHMua2luZCkpOworICAgICAgZ2ZjX2FkZF9tb2RpZnkgKCZibG9jaywgdG1w MiwgdG1wKTsKICAgICB9CiAKICAgaWYgKCFzeW0tPmF0dHIuZGltZW5zaW9uKQpkaWZmIC0t Z2l0IGEvZ2NjL2ZvcnRyYW4vdHJhbnMtZXhwci5jYyBiL2djYy9mb3J0cmFuL3RyYW5zLWV4 cHIuY2MKaW5kZXggMTU1MWEyZTRkZjQuLmU3YjkyMTFmMTdlIDEwMDY0NAotLS0gYS9nY2Mv Zm9ydHJhbi90cmFucy1leHByLmNjCisrKyBiL2djYy9mb3J0cmFuL3RyYW5zLWV4cHIuY2MK QEAgLTEwMzc0LDE1ICsxMDM3NCwxNSBAQCBnZmNfY29udl9zdHJpbmdfcGFyYW1ldGVyIChn ZmNfc2UgKiBzZSkKICAgICAgICB8fCBUUkVFX0NPREUgKFRSRUVfVFlQRSAoc2UtPmV4cHIp KSA9PSBJTlRFR0VSX1RZUEUpCiAgICAgICAmJiBUWVBFX1NUUklOR19GTEFHIChUUkVFX1RZ UEUgKHNlLT5leHByKSkpCiAgICAgeworICAgICAgdHlwZSA9IFRSRUVfVFlQRSAoc2UtPmV4 cHIpOwogICAgICAgaWYgKFRSRUVfQ09ERSAoc2UtPmV4cHIpICE9IElORElSRUNUX1JFRikK LQl7Ci0JICB0eXBlID0gVFJFRV9UWVBFIChzZS0+ZXhwcik7Ci0gICAgICAgICAgc2UtPmV4 cHIgPSBnZmNfYnVpbGRfYWRkcl9leHByIChidWlsZF9wb2ludGVyX3R5cGUgKHR5cGUpLCBz ZS0+ZXhwcik7Ci0JfQorCXNlLT5leHByID0gZ2ZjX2J1aWxkX2FkZHJfZXhwciAoYnVpbGRf cG9pbnRlcl90eXBlICh0eXBlKSwgc2UtPmV4cHIpOwogICAgICAgZWxzZQogCXsKLQkgIHR5 cGUgPSBnZmNfZ2V0X2NoYXJhY3Rlcl90eXBlX2xlbiAoZ2ZjX2RlZmF1bHRfY2hhcmFjdGVy X2tpbmQsCi0JCQkJCSAgICAgc2UtPnN0cmluZ19sZW5ndGgpOworCSAgaWYgKFRSRUVfQ09E RSAodHlwZSkgPT0gQVJSQVlfVFlQRSkKKwkgICAgdHlwZSA9IFRSRUVfVFlQRSAodHlwZSk7 CisJICB0eXBlID0gZ2ZjX2dldF9jaGFyYWN0ZXJfdHlwZV9sZW5fZm9yX2VsdHlwZSAodHlw ZSwKKwkJCQkJCQlzZS0+c3RyaW5nX2xlbmd0aCk7CiAJICB0eXBlID0gYnVpbGRfcG9pbnRl cl90eXBlICh0eXBlKTsKIAkgIHNlLT5leHByID0gZ2ZjX2J1aWxkX2FkZHJfZXhwciAodHlw ZSwgc2UtPmV4cHIpOwogCX0KZGlmZiAtLWdpdCBhL2djYy9mb3J0cmFuL3RyYW5zLXR5cGVz LmNjIGIvZ2NjL2ZvcnRyYW4vdHJhbnMtdHlwZXMuY2MKaW5kZXggYzA2MmE1YjI5ZDcuLmZk Y2U1NmRlZmVjIDEwMDY0NAotLS0gYS9nY2MvZm9ydHJhbi90cmFucy10eXBlcy5jYworKysg Yi9nY2MvZm9ydHJhbi90cmFucy10eXBlcy5jYwpAQCAtMjMxNCw3ICsyMzE0LDcgQEAgZ2Zj X3N5bV90eXBlIChnZmNfc3ltYm9sICogc3ltLCBib29sIGlzX2JpbmRfYykKIAkgICAgICAm JiBzeW0tPm5zLT5wcm9jX25hbWUtPmF0dHIuaXNfYmluZF9jKQogCSAgfHwgKHN5bS0+dHMu ZGVmZXJyZWQgJiYgKCFzeW0tPnRzLnUuY2wKIAkJCQkgICB8fCAhc3ltLT50cy51LmNsLT5i YWNrZW5kX2RlY2wpKSkpCi0gICAgdHlwZSA9IGdmY19jaGFyYWN0ZXIxX3R5cGVfbm9kZTsK KyAgICB0eXBlID0gZ2ZjX2dldF9jaGFyX3R5cGUgKHN5bS0+dHMua2luZCk7CiAgIGVsc2UK ICAgICB0eXBlID0gZ2ZjX3R5cGVub2RlX2Zvcl9zcGVjICgmc3ltLT50cywgc3ltLT5hdHRy LmNvZGltZW5zaW9uKTsKIApkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5k Zy9jaGFyNF9kZWNsLTIuZjkwIGIvZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9jaGFyNF9k ZWNsLTIuZjkwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4zZWVh ZGQ2NDk4MQotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcv Y2hhcjRfZGVjbC0yLmY5MApAQCAtMCwwICsxLDU5IEBACishIHsgZGctZG8gcnVuIH0KKyEg eyBkZy1hZGRpdGlvbmFsLW9wdGlvbnMgIi1mZHVtcC10cmVlLW9yaWdpbmFsIiB9CisKKyEg SW4gdGhpcyBwcm9ncmFtIHNoYWxsIGJlIG5vIGtpbmQ9MSwKKyEgZXhjZXB0IGZvciB0aGUg J2FyZ3YnIG9mIHRoZSAnbWFpbicgcHJvZ3JhbS4KKworISBQUiBmb3J0cmFuLzEwNzI2Ngor CishIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAia2luZD0xIiAxICJvcmln aW5hbCIgfSB9CishIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiY2hhcmFj dGVyXFwoa2luZD0xXFwpIFxcKiBcXCogYXJndlxcKSIgMSAib3JpZ2luYWwiIH0gfQorCisK KyEgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJjaGFyYWN0ZXJcXChraW5k PTRcXCkgZiBcXChjaGFyYWN0ZXJcXChraW5kPTRcXCkgeFxcKSIgMSAib3JpZ2luYWwiIH0g fQorCitjaGFyYWN0ZXIoa2luZD00KSBmdW5jdGlvbiBmKHgpIGJpbmQoQykKKyAgY2hhcmFj dGVyKGtpbmQ9NCksIHZhbHVlIDo6IHgKK2VuZAorCitwcm9ncmFtIHRlc3RpdAorICBpbXBs aWNpdCBub25lICh0eXBlLCBleHRlcm5hbCkKKyAgY2hhcmFjdGVyIChraW5kPTQsIGxlbj06 KSwgYWxsb2NhdGFibGUgOjogYWEKKyAgY2hhcmFjdGVyIChraW5kPTQsIGxlbj06KSwgcG9p bnRlciA6OiBwcAorCisgIHBwID0+IE5VTEwgKCkKKworICBjYWxsIGZyb2JmIChhYSwgcHAp CisgIGlmICgubm90LiBhbGxvY2F0ZWQgKGFhKSkgc3RvcCAxMDEKKyAgaWYgKGFhIC5uZS4g NF8nZm9vJykgc3RvcCAxMDIKKyAgaWYgKC5ub3QuIGFzc29jaWF0ZWQgKHBwKSkgc3RvcCAx MDMKKyAgaWYgKHBwIC5uZS4gNF8nYmFyJykgc3RvcCAxMDQKKworICBwcCA9PiBOVUxMICgp CisKKyAgY2FsbCBmcm9iYyAoYWEsIHBwKQorICBpZiAoLm5vdC4gYWxsb2NhdGVkIChhYSkp IHN0b3AgMTAxCisgIGlmIChhYSAubmUuIDRfJ2Zyb2cnKSBzdG9wIDEwMgorICBpZiAoLm5v dC4gYXNzb2NpYXRlZCAocHApKSBzdG9wIDEwMworICBpZiAocHAgLm5lLiA0Xyd0b2FkJykg c3RvcCAxMDQKKworCisgIGNvbnRhaW5zCisKKyAgICBzdWJyb3V0aW5lIGZyb2JmIChhLCBw KSBCaW5kKEMpCisgICAgICBjaGFyYWN0ZXIgKGtpbmQ9NCwgbGVuPTopLCBhbGxvY2F0YWJs ZSA6OiBhCisgICAgICBjaGFyYWN0ZXIgKGtpbmQ9NCwgbGVuPTopLCBwb2ludGVyIDo6IHAK KyAgICAgIGFsbG9jYXRlIChjaGFyYWN0ZXIoa2luZD00LCBsZW49MykgOjogcCkKKyAgICAg IGEgPSA0Xydmb28nCisgICAgICBwID0gNF8nYmFyJworICAgIGVuZCBzdWJyb3V0aW5lCisK KyAgICBzdWJyb3V0aW5lIGZyb2JjIChhLCBwKSBCaW5kKEMpCisgICAgICBjaGFyYWN0ZXIg KGtpbmQ9NCwgbGVuPTopLCBhbGxvY2F0YWJsZSA6OiBhCisgICAgICBjaGFyYWN0ZXIgKGtp bmQ9NCwgbGVuPTopLCBwb2ludGVyIDo6IHAKKyAgICAgIGFsbG9jYXRlIChjaGFyYWN0ZXIo a2luZD00LCBsZW49NCkgOjogcCkKKyAgICAgIGEgPSA0Xydmcm9nJworICAgICAgcCA9IDRf J3RvYWQnCisgICAgZW5kIHN1YnJvdXRpbmUKKworZW5kIHByb2dyYW0KZGlmZiAtLWdpdCBh L2djYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvY2hhcjRfZGVjbC5mOTAgYi9nY2MvdGVzdHN1 aXRlL2dmb3J0cmFuLmRnL2NoYXI0X2RlY2wuZjkwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwLi5hYjdiMzcyZDczMQotLS0gL2Rldi9udWxsCisrKyBiL2djYy90 ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvY2hhcjRfZGVjbC5mOTAKQEAgLTAsMCArMSw1MiBAQAor ISB7IGRnLWRvIHJ1biB9CishIHsgZGctYWRkaXRpb25hbC1vcHRpb25zICItZmR1bXAtdHJl ZS1vcmlnaW5hbCIgfQorCishIEluIHRoaXMgcHJvZ3JhbSBzaGFsbCBiZSBubyBraW5kPTEs CishIGV4Y2VwdCBmb3IgdGhlICdhcmd2JyBvZiB0aGUgJ21haW4nIHByb2dyYW0uCisKKyEg UmVsYXRlZCBQUiBmb3J0cmFuLzEwNzI2NgorCishIHsgZGctZmluYWwgeyBzY2FuLXRyZWUt ZHVtcC10aW1lcyAia2luZD0xIiAxICJvcmlnaW5hbCIgfSB9CishIHsgZGctZmluYWwgeyBz Y2FuLXRyZWUtZHVtcC10aW1lcyAiY2hhcmFjdGVyXFwoa2luZD0xXFwpIFxcKiBcXCogYXJn dlxcKSIgMSAib3JpZ2luYWwiIH0gfQorCitwcm9ncmFtIHRlc3RpdAorICBpbXBsaWNpdCBu b25lICh0eXBlLCBleHRlcm5hbCkKKyAgY2hhcmFjdGVyIChraW5kPTQsIGxlbj06KSwgYWxs b2NhdGFibGUgOjogYWEKKyAgY2hhcmFjdGVyIChraW5kPTQsIGxlbj06KSwgcG9pbnRlciA6 OiBwcAorCisgIHBwID0+IE5VTEwgKCkKKworICBjYWxsIGZyb2JmIChhYSwgcHApCisgIGlm ICgubm90LiBhbGxvY2F0ZWQgKGFhKSkgc3RvcCAxMDEKKyAgaWYgKGFhIC5uZS4gNF8nZm9v Jykgc3RvcCAxMDIKKyAgaWYgKC5ub3QuIGFzc29jaWF0ZWQgKHBwKSkgc3RvcCAxMDMKKyAg aWYgKHBwIC5uZS4gNF8nYmFyJykgc3RvcCAxMDQKKworICBwcCA9PiBOVUxMICgpCisKKyAg Y2FsbCBmcm9iYyAoYWEsIHBwKQorICBpZiAoLm5vdC4gYWxsb2NhdGVkIChhYSkpIHN0b3Ag MTAxCisgIGlmIChhYSAubmUuIDRfJ2Zyb2cnKSBzdG9wIDEwMgorICBpZiAoLm5vdC4gYXNz b2NpYXRlZCAocHApKSBzdG9wIDEwMworICBpZiAocHAgLm5lLiA0Xyd0b2FkJykgc3RvcCAx MDQKKworCisgIGNvbnRhaW5zCisKKyAgICBzdWJyb3V0aW5lIGZyb2JmIChhLCBwKQorICAg ICAgY2hhcmFjdGVyIChraW5kPTQsIGxlbj06KSwgYWxsb2NhdGFibGUgOjogYQorICAgICAg Y2hhcmFjdGVyIChraW5kPTQsIGxlbj06KSwgcG9pbnRlciA6OiBwCisgICAgICBhbGxvY2F0 ZSAoY2hhcmFjdGVyKGtpbmQ9NCwgbGVuPTMpIDo6IHApCisgICAgICBhID0gNF8nZm9vJwor ICAgICAgcCA9IDRfJ2JhcicKKyAgICBlbmQgc3Vicm91dGluZQorCisgICAgc3Vicm91dGlu ZSBmcm9iYyAoYSwgcCkKKyAgICAgIGNoYXJhY3RlciAoa2luZD00LCBsZW49OiksIGFsbG9j YXRhYmxlIDo6IGEKKyAgICAgIGNoYXJhY3RlciAoa2luZD00LCBsZW49OiksIHBvaW50ZXIg OjogcAorICAgICAgYWxsb2NhdGUgKGNoYXJhY3RlcihraW5kPTQsIGxlbj00KSA6OiBwKQor ICAgICAgYSA9IDRfJ2Zyb2cnCisgICAgICBwID0gNF8ndG9hZCcKKyAgICBlbmQgc3Vicm91 dGluZQorCitlbmQgcHJvZ3JhbQo= --------------JjrTzL0pZEanh8ohTcOBD8KH--