From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mout.gmx.net (mout.gmx.net [212.227.15.19]) by sourceware.org (Postfix) with ESMTPS id 62604385E445; Fri, 15 Mar 2024 19:32:56 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 62604385E445 Authentication-Results: sourceware.org; dmarc=pass (p=quarantine dis=none) header.from=gmx.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmx.de ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 62604385E445 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=212.227.15.19 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1710531187; cv=none; b=lRnN1dnE3xBEC7djQbVHdKiJ3OPkpWhw7Jb88bMGNwnYyVIiJmYMI5KuPccrL5OARWXKncMq+IGn6Vl7i4mV7oG6MJt8zsYuOZAwrNISTd1LaKk/zfkA3OYprwREkZfMvTEDrl9pLd057a3vkRdx1p9Z475py59fXFpCI//rT08= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1710531187; c=relaxed/simple; bh=bQ591/XSnrNdmxbHCrR/ZbgP5w+AJ5afB8hXZxHqwos=; h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:From:To; b=xoEs5EtrKOdX3XY/lMQ/95cagS2VIZGODiFriJ2jEwZifrocpK/9V/1CP3ljqM5PQAzIMXuemxjfD0TY7xndMGSvok7C9iLBSyjx9tDTIpQ26zJOOh0ZJF5qnbpUzM3HeVl7CZ8ucftcuis2Gt3JTPoy5+vp9Z/f4pXuDrDu/yU= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.de; s=s31663417; t=1710531172; x=1711135972; i=anlauf@gmx.de; bh=opFAgOrjG5sqgkYBJl6RSpAlZIpd7o50L8Z9/mqgIIw=; h=X-UI-Sender-Class:Date:Subject:From:To:References:In-Reply-To; b=oLEtI4JFni26z23/jJOR5faSanebaCpbyeJyXTpKpN6k05scIpUe9f6DtKSu9W3H 6xZxVY4S+9AqjV2jQTiRukDSHejCl/4lPzTEJGUx5Finvko/VppfuOo/a0hZPEVrA q45+dIX0Ch5QbVgMwQqIRHqVv7aQmmv47C5bhAuGqnUVGHhLT9COjG+Cp/JgMNCD9 sXIur0StaFFdq9kbGY3HxRkxRp1CTeeqB7M5dwGk3swDnnYVOquyeDjgGoDcRvJ0r WvdP7kfwUwCyPz1rAkxjQNPtkSnIyfaK9+v9LuY1bitM8LVW1BrTkS+QS8MIizfUg OE+ko0GORdyNAj9Lcw== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from [192.168.178.29] ([79.251.3.31]) by mail.gmx.net (mrgmx005 [212.227.17.190]) with ESMTPSA (Nemesis) id 1MhlKs-1r7Upg09A0-00djhx; Fri, 15 Mar 2024 20:32:52 +0100 Content-Type: multipart/mixed; boundary="------------cVPvd7C5byrv0TaJ006qgyYZ" Message-ID: Date: Fri, 15 Mar 2024 20:32:50 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH, v2] Fortran: fix for absent array argument passed to optional dummy [PR101135] From: Harald Anlauf To: Mikael Morin , fortran , gcc-patches Newsgroups: gmane.comp.gcc.patches,gmane.comp.gcc.fortran References: <3fd50892-dbef-d43a-8efe-148a8ffa94a9@orange.fr> <24718b24-981a-730c-4cd3-b6f4727797a0@gmx.de> Content-Language: en-US In-Reply-To: <24718b24-981a-730c-4cd3-b6f4727797a0@gmx.de> X-Provags-ID: V03:K1:YDtNmDtbTxqlKqp9ZaRBx2trM7t2AY4HKmrUi3HtrKEEZVqVQji ahf05sqR+HrVjsWNaYsV6wetxG9YB8LK+4RxQsOe6tusVO+cJG0TZXXCeuZpogEtz3c0LUc BZESR3afKXOS7JHL9NEoHL+iCUvpnsdxU7u1J2jAa3woBY4RYrXEcpzlFJ921JJd03ZpZFN nFKC1rJD+bk7oYGp84gOw== UI-OutboundReport: notjunk:1;M01:P0:TDMW4XbLypg=;dG9TnfKF4zgOuBnb5/+xPDSNeh7 TP26fyVJ+UxjozT18dMZXOhHwrVrb9UmAxobLc2VDV+1tNMRuV19qclG8DV54DkDRbxV8vm9J RJax74YIQYpYNAo+bYn7lUd43wOHlA8Za3wbsetguJuj386aEmMo4MjCoFeYmqb6kvLyN6uks tfvmJ3eaLrDYDszXYoQQN+Q0p8FVlh++OAqIj47W0BA7fg1qLy3nQK2TxIpqyxLdwCwsi8YLh zW1xS4Ka9B+iJoNqTENH/SxXVvGuxv9/s4LePhVeunMQqnBuXifXxjvAAHZ0Q1pU6j2tRZ7XJ grxnvZ3xKsXaD0HR6lonigB+Aq8JWkx9/MrpPkhPELyzXitzH1pGj8m9dYu6TApJ9OiCeyBNl DFzNnj/o87uQfRvWb6QR6dwVy1pbgriEsO8oj46xVXNC4flW/C9ErSe66gr2PNR+rKx1ZNhN8 6wDgRr5pwSd7M+juImDzUnkUYgAhdi8eOqYdpuaQvsuEeHuq+2tv00hAxhEzY2K4c5yFjjZXZ F/hf2ytQNlUeDMPRowIHnAZN1wP4K/tOCXFo1RGqQ3FWiMD41SbfiaX2qPU3fmKgy/S31VXOd OyKfRAJRXMkzDufmxe7/+szJOEfGrT3lL+MqNiSNGQJhsdka1Iag1FeSp+8nIHd5uguNRtJuk Vvtbr7VLWu9UkcnVyczNngAhAzdKYsWcy14Q8PzmleJbrOQ95h7VD7Wrr03Sjp/rIfQ5kHfP/ n2r06pJXsHET0dpItaIDoNUJfxOX4fVMhLupWQo5OLaRw5thBxWUkJr1wWelzBxo/NTc70UX0 R7f7Bjy8wnB/KV0Si/bVfuSBbmRh6vSep5+rODTftI89w= X-Spam-Status: No, score=-11.6 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,GIT_PATCH_0,RCVD_IN_DNSWL_LOW,RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE 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: This is a multi-part message in MIME format. --------------cVPvd7C5byrv0TaJ006qgyYZ Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: quoted-printable Dear all, as there has been some good progress in the handling of optional dummy arguments, I looked again at this PR and a patch for it that I withdrew as it turned out incomplete. It turned out that it now needs only a minor adjustment for optional dummy arguments of procedures with bind(c) attribute so that ubsan checking does not trigger. Along this way I extended the previous testcase to exercise to some extent combinations of bind(c) and non-bind(c) procedures and found one failure (since at least gcc-9) that is genuine: passing a missing optional from a bind(c) procedure to an assumed-rank dummy, see PR114355. The corresponding test is commented in the testcase. Regtested on x86_64-pc-linux-gnu. OK for mainline? Thanks, Harald On 2/6/22 22:04, Harald Anlauf wrote: > Hi Mikael, > > Am 04.02.22 um 11:45 schrieb Mikael Morin: >> Hello, >> >> Le 29/01/2022 =C3=A0 22:41, Harald Anlauf via Fortran a =C3=A9crit=C2= =A0: >>> The least invasive change - already pointed out by the reporter - is >>> to check the presence of the argument before dereferencing the data >>> pointer after the offset calculation.=C2=A0 This requires adjusting th= e >>> checking pattern for gfortran.dg/missing_optional_dummy_6a.f90. >>> >>> Regtesting reminded me that procedures with bind(c) attribute are doin= g >>> their own stuff, which is why they need to be excluded here, otherwise >>> testcase bind-c-contiguous-4.f90 would regress on the expected output. > > only after submitting the patch I figured that the patch is incomplete. > > When we have a call chain of procedures with and without bind(c), > there are still cases left where the failure with the sanitizer > is not fixed.=C2=A0 Just add "bind(c)" to subroutine test_wrapper only > in the original PR. > > I have added a corresponding comment in the PR. > >>> There is a potential alternative solution which I did not pursue, as I >>> think it is more invasive, but also that I didn't succeed to implement= : >>> A non-present dummy array argument should not need to get its descript= or >>> set up.=C2=A0 Pursuing this is probably not the right thing to do duri= ng the >>> current stage of development and could be implemented later.=C2=A0 If >>> somebody >>> believes this is important, feel free to open a PR for this. >>> >> I have an other (equally unimportant) concern that it may create an >> unnecessary conditional when passing a subobject of an optional >> argument.=C2=A0 In that case we can assume that the optional is present= . >> It=E2=80=99s not a correctness issue, so let=E2=80=99s not bother at th= is stage. > > Judging from the dump tree of the cases I looked at I did not see > anything that would pose a problem to the optimizer. > >>> Regtested on x86_64-pc-linux-gnu.=C2=A0 OK for mainline? >>> >> OK. > > Given my latest observations I'd rather withdraw the current version of > the patch and rethink.=C2=A0 I also did not see an issue with bind(c) > procedures calling alikes. > > It would help if one would not only know the properties of the actual > argument, but also of the formal one, which is not available at that > point in the code.=C2=A0 I'll have another look and resubmit. > >> Thanks. >> > > Thanks for the review! > > Harald > --------------cVPvd7C5byrv0TaJ006qgyYZ Content-Type: text/x-patch; charset=UTF-8; name="pr101135-v2.diff" Content-Disposition: attachment; filename="pr101135-v2.diff" Content-Transfer-Encoding: base64 RnJvbSBiMzA3OWE4MmEyMjA0Nzc3MDRmODE1NjIwNzIzOWU0YWY0MTAzZWE5IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIYXJhbGQgQW5sYXVmIDxhbmxhdWZAZ214LmRlPgpE YXRlOiBGcmksIDE1IE1hciAyMDI0IDIwOjE0OjA3ICswMTAwClN1YmplY3Q6IFtQQVRDSF0g Rm9ydHJhbjogZml4IGZvciBhYnNlbnQgYXJyYXkgYXJndW1lbnQgcGFzc2VkIHRvIG9wdGlv bmFsCiBkdW1teSBbUFIxMDExMzVdCgpnY2MvZm9ydHJhbi9DaGFuZ2VMb2c6CgoJUFIgZm9y dHJhbi8xMDExMzUKCSogdHJhbnMtYXJyYXkuY2MgKGdmY19nZXRfZGF0YXB0cl9vZmZzZXQp OiBDaGVjayBmb3Igb3B0aW9uYWwKCWFyZ3VtZW50cyBiZWluZyBwcmVzZW50IGJlZm9yZSBk ZXJlZmVyZW5jaW5nIGRhdGEgcG9pbnRlci4KCmdjYy90ZXN0c3VpdGUvQ2hhbmdlTG9nOgoK CVBSIGZvcnRyYW4vMTAxMTM1CgkqIGdmb3J0cmFuLmRnL21pc3Npbmdfb3B0aW9uYWxfZHVt bXlfNmEuZjkwOiBBZGp1c3QgZGlhZ25vc3RpYyBwYXR0ZXJuLgoJKiBnZm9ydHJhbi5kZy91 YnNhbi9taXNzaW5nX29wdGlvbmFsX2R1bW15XzguZjkwOiBOZXcgdGVzdC4KLS0tCiBnY2Mv Zm9ydHJhbi90cmFucy1hcnJheS5jYyAgICAgICAgICAgICAgICAgICAgfCAgMTEgKysKIC4u Li9nZm9ydHJhbi5kZy9taXNzaW5nX29wdGlvbmFsX2R1bW15XzZhLmY5MCB8ICAgMiArLQog Li4uL3Vic2FuL21pc3Npbmdfb3B0aW9uYWxfZHVtbXlfOC5mOTAgICAgICAgIHwgMTA4ICsr KysrKysrKysrKysrKysrKwogMyBmaWxlcyBjaGFuZ2VkLCAxMjAgaW5zZXJ0aW9ucygrKSwg MSBkZWxldGlvbigtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvZ2ZvcnRy YW4uZGcvdWJzYW4vbWlzc2luZ19vcHRpb25hbF9kdW1teV84LmY5MAoKZGlmZiAtLWdpdCBh L2djYy9mb3J0cmFuL3RyYW5zLWFycmF5LmNjIGIvZ2NjL2ZvcnRyYW4vdHJhbnMtYXJyYXku Y2MKaW5kZXggMzY3M2ZhNDA3MjAuLmE3NzE3YTgxMDdlIDEwMDY0NAotLS0gYS9nY2MvZm9y dHJhbi90cmFucy1hcnJheS5jYworKysgYi9nY2MvZm9ydHJhbi90cmFucy1hcnJheS5jYwpA QCAtNzUyNiw2ICs3NTI2LDE3IEBAIGdmY19nZXRfZGF0YXB0cl9vZmZzZXQgKHN0bXRibG9j a190ICpibG9jaywgdHJlZSBwYXJtLCB0cmVlIGRlc2MsIHRyZWUgb2Zmc2V0LAogCiAgIC8q IFNldCB0aGUgdGFyZ2V0IGRhdGEgcG9pbnRlci4gICovCiAgIG9mZnNldCA9IGdmY19idWls ZF9hZGRyX2V4cHIgKGdmY19hcnJheV9kYXRhcHRyX3R5cGUgKGRlc2MpLCB0bXApOworCisg IC8qIENoZWNrIGZvciBvcHRpb25hbCBkdW1teSBhcmd1bWVudCBiZWluZyBwcmVzZW50LiAg QXJndW1lbnRzIG9mIEJJTkQoQykKKyAgICAgcHJvY2VkdXJlcyBhcmUgZXhjZXB0ZWQgaGVy ZSBzaW5jZSB0aGV5IGFyZSBoYW5kbGVkIGRpZmZlcmVudGx5LiAgKi8KKyAgaWYgKGV4cHIt PmV4cHJfdHlwZSA9PSBFWFBSX1ZBUklBQkxFCisgICAgICAmJiBleHByLT5zeW10cmVlLT5u LnN5bS0+YXR0ci5kdW1teQorICAgICAgJiYgZXhwci0+c3ltdHJlZS0+bi5zeW0tPmF0dHIu b3B0aW9uYWwKKyAgICAgICYmICFpc19DRklfZGVzYyAoTlVMTCwgZXhwcikpCisgICAgb2Zm c2V0ID0gYnVpbGQzX2xvYyAoaW5wdXRfbG9jYXRpb24sIENPTkRfRVhQUiwgVFJFRV9UWVBF IChvZmZzZXQpLAorCQkJIGdmY19jb252X2V4cHJfcHJlc2VudCAoZXhwci0+c3ltdHJlZS0+ bi5zeW0pLCBvZmZzZXQsCisJCQkgZm9sZF9jb252ZXJ0IChUUkVFX1RZUEUgKG9mZnNldCks IGdmY19pbmRleF96ZXJvX25vZGUpKTsKKwogICBnZmNfY29udl9kZXNjcmlwdG9yX2RhdGFf c2V0IChibG9jaywgcGFybSwgb2Zmc2V0KTsKIH0KIApkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3Rz dWl0ZS9nZm9ydHJhbi5kZy9taXNzaW5nX29wdGlvbmFsX2R1bW15XzZhLmY5MCBiL2djYy90 ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvbWlzc2luZ19vcHRpb25hbF9kdW1teV82YS5mOTAKaW5k ZXggYzZhNzkwNTlhOTEuLmI1ZTE3MjZkNzRkIDEwMDY0NAotLS0gYS9nY2MvdGVzdHN1aXRl L2dmb3J0cmFuLmRnL21pc3Npbmdfb3B0aW9uYWxfZHVtbXlfNmEuZjkwCisrKyBiL2djYy90 ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvbWlzc2luZ19vcHRpb25hbF9kdW1teV82YS5mOTAKQEAg LTQ5LDcgKzQ5LDcgQEAgZW5kIHByb2dyYW0gdGVzdAogCiAhIHsgZGctZmluYWwgeyBzY2Fu LXRyZWUtZHVtcC10aW1lcyAic2NhbGFyMiBcXCguKiBzbHIxIiAxICJvcmlnaW5hbCIgfSB9 CiAKLSEgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICI9IGVzMSAhPSAwQiIg MSAib3JpZ2luYWwiIH0gfQorISB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMg Ij0gZXMxICE9IDBCIiAyICJvcmlnaW5hbCIgfSB9CiAhIHsgZGctZmluYWwgeyBzY2FuLXRy ZWUtZHVtcC10aW1lcyAiYXNzdW1lZF9zaGFwZTIgXFwoZXMxIiAwICJvcmlnaW5hbCIgfSB9 CiAhIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiZXhwbGljaXRfc2hhcGUy IFxcKGVzMSIgMSAib3JpZ2luYWwiIH0gfQogCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRl L2dmb3J0cmFuLmRnL3Vic2FuL21pc3Npbmdfb3B0aW9uYWxfZHVtbXlfOC5mOTAgYi9nY2Mv dGVzdHN1aXRlL2dmb3J0cmFuLmRnL3Vic2FuL21pc3Npbmdfb3B0aW9uYWxfZHVtbXlfOC5m OTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmZkMzkxNDkzNGFh Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy91YnNhbi9t aXNzaW5nX29wdGlvbmFsX2R1bW15XzguZjkwCkBAIC0wLDAgKzEsMTA4IEBACishIHsgZGct ZG8gcnVuIH0KKyEgeyBkZy1hZGRpdGlvbmFsLW9wdGlvbnMgIi1mZHVtcC10cmVlLW9yaWdp bmFsIC1mc2FuaXRpemU9dW5kZWZpbmVkIiB9CishCishIFBSIGZvcnRyYW4vMTAxMTM1IC0g TG9hZCBvZiBudWxsIHBvaW50ZXIgd2hlbiBwYXNzaW5nIGFic2VudAorISBhc3N1bWVkLXNo YXBlIGFycmF5IGFyZ3VtZW50IGZvciBhbiBvcHRpb25hbCBkdW1teSBhcmd1bWVudAorIQor ISBCYXNlZCBvbiB0ZXN0Y2FzZSBieSBNYXJjZWwgSmFjb2JzZQorCitwcm9ncmFtIG1haW4K KyAgaW1wbGljaXQgbm9uZQorICBjaGFyYWN0ZXIobGVuPTMpIDo6IGEoNikgPSBbJ2FiYycs ICdkZWYnLCAnZ2hpJywgJ2psbScsICdub3AnLCAncXJzJ10KKyAgY2FsbCBhcyAoKQorICBj YWxsIGFzIChhKDo6MikpCisgIGNhbGwgYXNfYyAoKQorICBjYWxsIGFzX2MgKGEoMjo6Mikp CisgIGNhbGwgdGVzdF93cmFwcGVyCisgIGNhbGwgdGVzdF93cmFwcGVyX2MKKyAgY2FsbCB0 ZXN0X2FyX3dyYXBwZXIKKyAgY2FsbCB0ZXN0X2FyX3dyYXBwZXJfYworY29udGFpbnMKKyAg c3Vicm91dGluZSBhcyAoeHgpCisgICAgY2hhcmFjdGVyKGxlbj0qKSwgb3B0aW9uYWwsIGlu dGVudChpbikgOjogeHgoKikKKyAgICBpZiAoLm5vdC4gcHJlc2VudCAoeHgpKSByZXR1cm4K KyAgICBwcmludCAqLCB4eCgxOjMpCisgIGVuZCBzdWJyb3V0aW5lIGFzCisKKyAgc3Vicm91 dGluZSBhc19jICh6eikgYmluZChjKQorICAgIGNoYXJhY3RlcihsZW49KiksIG9wdGlvbmFs LCBpbnRlbnQoaW4pIDo6IHp6KCopCisgICAgaWYgKC5ub3QuIHByZXNlbnQgKHp6KSkgcmV0 dXJuCisgICAgcHJpbnQgKiwgenooMTozKQorICBlbmQgc3Vicm91dGluZSBhc19jCisKKyAg c3Vicm91dGluZSB0ZXN0X3dyYXBwZXIgKHgpCisgICAgcmVhbCwgZGltZW5zaW9uKDEpLCBp bnRlbnQob3V0KSwgb3B0aW9uYWwgOjogeAorICAgIGNhbGwgdGVzdCAoeCkKKyAgICBjYWxs IHRlc3QxICh4KQorICAgIGNhbGwgdGVzdF9jICh4KQorICAgIGNhbGwgdGVzdDFfYyAoeCkK KyAgZW5kIHN1YnJvdXRpbmUgdGVzdF93cmFwcGVyCisKKyAgc3Vicm91dGluZSB0ZXN0X3dy YXBwZXJfYyAodykgYmluZChjKQorICAgIHJlYWwsIGRpbWVuc2lvbigxKSwgaW50ZW50KG91 dCksIG9wdGlvbmFsIDo6IHcKKyAgICBjYWxsIHRlc3QgKHcpCisgICAgY2FsbCB0ZXN0MSAo dykKKyAgICBjYWxsIHRlc3RfYyAodykKKyAgICBjYWxsIHRlc3QxX2MgKHcpCisgIGVuZCBz dWJyb3V0aW5lIHRlc3Rfd3JhcHBlcl9jCisKKyAgc3Vicm91dGluZSB0ZXN0ICh5KQorICAg IHJlYWwsIGRpbWVuc2lvbig6KSwgaW50ZW50KG91dCksIG9wdGlvbmFsIDo6IHkKKyAgICBp ZiAocHJlc2VudCAoeSkpIHk9MC4KKyAgZW5kIHN1YnJvdXRpbmUgdGVzdAorCisgIHN1YnJv dXRpbmUgdGVzdF9jICh5KSBiaW5kKGMpCisgICAgcmVhbCwgZGltZW5zaW9uKDopLCBpbnRl bnQob3V0KSwgb3B0aW9uYWwgOjogeQorICAgIGlmIChwcmVzZW50ICh5KSkgeT0wLgorICBl bmQgc3Vicm91dGluZSB0ZXN0X2MKKworICBzdWJyb3V0aW5lIHRlc3QxICh5KQorICAgIHJl YWwsIGRpbWVuc2lvbigxKSwgaW50ZW50KG91dCksIG9wdGlvbmFsIDo6IHkKKyAgICBpZiAo cHJlc2VudCAoeSkpIHk9MC4KKyAgZW5kIHN1YnJvdXRpbmUgdGVzdDEKKworICBzdWJyb3V0 aW5lIHRlc3QxX2MgKHkpIGJpbmQoYykKKyAgICByZWFsLCBkaW1lbnNpb24oMSksIGludGVu dChvdXQpLCBvcHRpb25hbCA6OiB5CisgICAgaWYgKHByZXNlbnQgKHkpKSB5PTAuCisgIGVu ZCBzdWJyb3V0aW5lIHRlc3QxX2MKKworICBzdWJyb3V0aW5lIHRlc3RfYXJfd3JhcHBlciAo cCwgcSwgcikKKyAgICByZWFsLCAgICAgICAgICAgICAgIGludGVudChvdXQpLCBvcHRpb25h bCA6OiBwCisgICAgcmVhbCwgZGltZW5zaW9uKDEpLCBpbnRlbnQob3V0KSwgb3B0aW9uYWwg OjogcQorICAgIHJlYWwsIGRpbWVuc2lvbig6KSwgaW50ZW50KG91dCksIG9wdGlvbmFsIDo6 IHIKKyAgICBjYWxsIHRlc3RfYXIgKHApCisgICAgY2FsbCB0ZXN0X2FyIChxKQorICAgIGNh bGwgdGVzdF9hciAocikKKyAgICBjYWxsIHRlc3RfYXJfYyAocCkKKyAgICBjYWxsIHRlc3Rf YXJfYyAocSkKKyAgICBjYWxsIHRlc3RfYXJfYyAocikKKyAgZW5kIHN1YnJvdXRpbmUgdGVz dF9hcl93cmFwcGVyCisKKyAgc3Vicm91dGluZSB0ZXN0X2FyX3dyYXBwZXJfYyAodSwgdiwg cykgYmluZChjKQorICAgIHJlYWwsICAgICAgICAgICAgICAgaW50ZW50KG91dCksIG9wdGlv bmFsIDo6IHUKKyAgICByZWFsLCBkaW1lbnNpb24oMSksIGludGVudChvdXQpLCBvcHRpb25h bCA6OiB2CisgICAgcmVhbCwgZGltZW5zaW9uKDopLCBpbnRlbnQob3V0KSwgb3B0aW9uYWwg OjogcworICAgIGNhbGwgdGVzdF9hciAodSkKKyAgICBjYWxsIHRlc3RfYXIgKHYpCishICAg Y2FsbCB0ZXN0X2FyIChzKSAgICAhIERpc2FibGVkIGR1ZSB0byBydW50aW1lIHNlZ2ZhdWx0 LCBzZWUgcHIxMTQzNTUKKyAgICBjYWxsIHRlc3RfYXJfYyAodSkKKyAgICBjYWxsIHRlc3Rf YXJfYyAodikKKyAgICBjYWxsIHRlc3RfYXJfYyAocykKKyAgZW5kIHN1YnJvdXRpbmUgdGVz dF9hcl93cmFwcGVyX2MKKworICBzdWJyb3V0aW5lIHRlc3RfYXIgKHopCisgICAgcmVhbCwg ZGltZW5zaW9uKC4uKSwgaW50ZW50KG91dCksIG9wdGlvbmFsIDo6IHoKKyAgZW5kIHN1YnJv dXRpbmUgdGVzdF9hcgorCisgIHN1YnJvdXRpbmUgdGVzdF9hcl9jICh6KSBiaW5kKGMpCisg ICAgcmVhbCwgZGltZW5zaW9uKC4uKSwgaW50ZW50KG91dCksIG9wdGlvbmFsIDo6IHoKKyAg ZW5kIHN1YnJvdXRpbmUgdGVzdF9hcl9jCitlbmQgcHJvZ3JhbQorCishIHsgZGctZmluYWwg eyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiZGF0YSA9IHYgIT0gMEIgIiAyICJvcmlnaW5hbCIg fSB9CishIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiZGF0YSA9IHcgIT0g MEIgIiAyICJvcmlnaW5hbCIgfSB9CishIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10 aW1lcyAiZGF0YSA9IHEgIT0gMEIgIiAyICJvcmlnaW5hbCIgfSB9CishIHsgZGctZmluYWwg eyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiZGF0YSA9IHggIT0gMEIgIiAyICJvcmlnaW5hbCIg fSB9CishIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiZGF0YSA9IHh4LjAg IT0gMEIgIiAxICJvcmlnaW5hbCIgfSB9CishIHsgZGctb3V0cHV0ICIgYWJjZ2hpbm9wKFxu fFxyXG58XHIpIiB9IgorISB7IGRnLW91dHB1dCAiIGRlZmpsbXFycyhcbnxcclxufFxyKSIg fSIKLS0gCjIuMzUuMwoK --------------cVPvd7C5byrv0TaJ006qgyYZ--