From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-qk1-x72e.google.com (mail-qk1-x72e.google.com [IPv6:2607:f8b0:4864:20::72e]) by sourceware.org (Postfix) with ESMTPS id 33FEE3858C20 for ; Wed, 16 Feb 2022 18:50:01 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 33FEE3858C20 Received: by mail-qk1-x72e.google.com with SMTP id q4so1134099qki.11 for ; Wed, 16 Feb 2022 10:50:01 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=ruyA3ylbJFyMG5ZKt11zJZO2fZEwtvsmmCXPsIJ+pn8=; b=oGH4B4RgVy55Tr4OJerPc2yOWWrlqueNoLruZxZ0XCHS82yeYmrJjMkA9AslTdE5nw MX15eNUyOZ31sSfKlxEZO0Nmn4WNwRWFtHFHXzUsjPo1qDi3Sul5g5S3bkf0qQiR5ahQ U367T8r1l0CzA+FKqFPwFsct790Vfwyrh/xgbK8clkSZqYvYwf6gwHhA1t9vYW0bLvMa wB7li2XKqKpZwLw0c6a+Gf2VxsuowIEJkVPL5B6IAQzUXaba6Q0xkosyOtp1GbLkWnE9 9aUvZu2k6zue+p0lVQ1dEw0FK7YTLKCrkhNceinaaXeQiI1ZX2yf2eLr0UooQYTGCzON bVnA== X-Gm-Message-State: AOAM532gYMijGrW1IWLVmtGhYmfmPCtnpeMql91+DM6+lLUHodiVZYyl Ssk/kdgjUklhpg7CkRKmSjg2/1c32kX0mn58WFk6zuF8 X-Google-Smtp-Source: ABdhPJyrEBo/1Mp++LFXVjt7N+5h0Vn8YtOJTRaqD2hulnprePQpyhWQ7i93UqQWSzF8gPOuGHOlnFsmKQc0bPLAIko= X-Received: by 2002:a05:620a:1593:b0:60a:b223:893a with SMTP id d19-20020a05620a159300b0060ab223893amr1348956qkk.72.1645037400768; Wed, 16 Feb 2022 10:50:00 -0800 (PST) MIME-Version: 1.0 References: <9a2667e2-8055-bcac-1862-05c8ac60ce7a@gmx.de> <3cbaf568-84ac-8498-558f-9560fe395d66@gmx.de> <7ab973cd-f62e-28be-36e8-4e44252a4a38@gmx.de> In-Reply-To: From: Paul Richard Thomas Date: Wed, 16 Feb 2022 18:49:49 +0000 Message-ID: Subject: Re: [Patch, fortran] PR37336 (Finalization) - [F03] Finish derived-type finalization To: Harald Anlauf Cc: Alessandro Fanfarillo , Andrew Benson , "fortran@gcc.gnu.org" Content-Type: multipart/mixed; boundary="000000000000ea895605d8271d1b" X-Spam-Status: No, score=-2.0 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, HTML_MESSAGE, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-Content-Filtered-By: Mailman/MimeDel 2.1.29 X-BeenThere: fortran@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Fortran mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 16 Feb 2022 18:50:04 -0000 --000000000000ea895605d8271d1b Content-Type: text/plain; charset="UTF-8" Hi Harald and Jerry, I have gone back to the start and have gone through finalizable derived type assignments with the F2018 in hand. I have had a dreadful time with direct by reference function calls and still am struggling with assignment number 6 in the attached. I would be very grateful if you would run this testcase for the other brands. As soon as I fix the 6th assignment, I will get on to class assignments. Best regards Paul On Fri, 11 Feb 2022 at 21:59, Paul Richard Thomas < paul.richard.thomas@gmail.com> wrote: > Hi Harald and Jerry, > > I am reworking my way through, line by line wit F2018 in hand. Up to test > with offset 70, NAG looks to be right. I introduced an assignment with a > direct by ref function call, which doesn't finalise at the moment. Class > entities are yet to come. I'll report back early next week. > > Thanks for all the help. I have (re)learned to read the standard very > carefully. > > Best regards > > Paul > > > On Fri, 11 Feb 2022, 21:08 Harald Anlauf, wrote: > >> Hi Paul, >> >> Am 11.02.22 um 10:08 schrieb Paul Richard Thomas via Fortran: >> > Your "stupid questions" are not at all stupid. The finalization of >> > 'variable' that occurs in your testcase demonstrates that the >> finalization >> > with my patch is occurring at the wrong time. I now see that NAG is >> correct >> > on this. >> > >> > Please press on with the questions! >> >> Jerry's suggestion to add lots of prints turned out to be really >> enlightening with regard to observable behavior. I rewrote the >> testcase again and placed the interesting stuff into a subroutine. >> This way one can distinguish what actually happens during program >> start, entering and leaving a subroutine. >> >> I encountered the least surprises (= none) with NAG 7.0 here. >> For reference this is the output: >> >> At start of program : 0 >> >> Enter sub : 0 >> After 1st allocation: 0 >> After 2nd allocation: 0 >> Checking MyType% ind: 21 >> Checking MyType2%ind: 22 >> Deallocate MyType : 0 >> # Leave desctructor1: 1 21 >> * MyType deallocated: 1 >> (kept MyType2 for automatic deallocation on return from sub) >> Leave sub : 1 >> # Leave desctructor1: 2 22 >> >> After sub : 2 >> >> To make it short: the destructor is called only when deallocation >> occurs, either explicitly or automatically. >> >> >> Intel 2021.5.0: >> >> At start of program : 0 >> >> Enter sub : 0 >> # Leave desctructor1: 1 0 >> After 1st allocation: 1 >> # Leave desctructor1: 2 0 >> After 2nd allocation: 2 >> Checking MyType% ind: 21 >> Checking MyType2%ind: 22 >> Deallocate MyType : 2 >> # Leave desctructor1: 3 21 >> * MyType deallocated: 3 >> (kept MyType2 for automatic deallocation on return from sub) >> Leave sub : 3 >> # Leave desctructor1: 4 21 >> # Leave desctructor1: 5 22 >> # Leave desctructor1: 6 22 >> >> After sub : 6 >> >> So after entering the subroutine, the destructor is called twice, >> but for unknown reasons element ind, which I had expected to be >> either default-initialized to -1, or explicitly to 21 or 22, is 0. >> The places where this happens seem to be the assignments of >> MyType and MyType2. >> >> Furthermore, variable MyType is finalized on return from sub, >> although it is already deallocated, and MyType2 appears to >> get finalized twice automatically. >> >> I have no idea how this can get justified... >> >> >> Crayftn 12.0.2: in order to make the output easier to understand, >> I chose to reset final_count twice. This will become clear soon. >> >> # Leave desctructor1: 1, 20 >> >> At start of program : 1 >> +++ Resetting final_count for Cray Fortran : Version 12.0.2 >> >> # Leave desctructor1: 1, 21 >> # Leave desctructor1: 2, 22 >> Enter sub : 2 >> +++ Resetting final_count for Cray Fortran : Version 12.0.2 >> After 1st allocation: 0 >> After 2nd allocation: 0 >> Checking MyType% ind: -21 >> Checking MyType2%ind: 22 >> Deallocate MyType : 0 >> # Leave desctructor1: 1, -21 >> * MyType deallocated: 1 >> (kept MyType2 for automatic deallocation on return from sub) >> Leave sub : 1 >> # Leave desctructor1: 2, 22 >> >> After sub : 2 >> >> So it appears that Cray is calling the destructor for each declaration >> where a constructor is involved, or the like. Even if this is a >> parameter declaration, like in the main. Resetting the counter for >> the first time. >> >> On entering sub, I see now two finalizations before the first print. >> Resetting the counter for the second time. >> >> But then the assignments do not invoke finalization, where Intel did. >> So this part appears more like NAG, but... >> >> ... something is strange here: component ind is wrong after the >> first assignment. Looks clearly like a really bad bug. >> >> Explicit and automatic deallocation seems fine. >> >> >> Nvidia 22.2: >> >> At start of program : 0 >> >> Enter sub : 0 >> After 1st allocation: 0 >> After 2nd allocation: 0 >> Checking MyType% ind: 21 >> Checking MyType2%ind: 22 >> Deallocate MyType : 0 >> # Leave desctructor1: 1 21 >> * MyType deallocated: 1 >> (kept MyType2 for automatic deallocation on return from sub) >> Leave sub : 1 >> # Leave desctructor1: 2 1590094384 >> # Leave desctructor1: 3 22 >> >> After sub : 3 >> >> OK, that is really odd. Although valgrind does not report >> invalid accesses, there is something really fishy here. >> I have not investigated further. Nvidia is out for now. >> >> >> One of the lessons learned is that it might be hard to write a >> portable testcase that works for all compilers that rightfully(?) >> can claim to implement finalization correctly... And I have only >> scratched the surface so far. >> >> Paul: do you think you can enhance your much more comprehensive >> testcase to ease debugging further? >> >> Cheers, >> Harald >> > -- "If you can't explain it simply, you don't understand it well enough" - Albert Einstein --000000000000ea895605d8271d1b Content-Type: text/x-fortran; charset="US-ASCII"; name="final_38_b.f90" Content-Disposition: attachment; filename="final_38_b.f90" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kzpws98f0 bW9kdWxlIHRlc3Rtb2RlCiAgaW1wbGljaXQgbm9uZQoKICB0eXBlIDo6IHNpbXBsZQogICAgaW50 ZWdlciA6OiBpbmQKICAgIGNoYXJhY3RlcigxMikgOjogbXluYW1lCiAgY29udGFpbnMKICAgIGZp bmFsIDo6IGRlc3RydWN0b3IxLCBkZXN0cnVjdG9yMgogIGVuZCB0eXBlIHNpbXBsZQoKICB0eXBl LCBleHRlbmRzKHNpbXBsZSkgOjogY29tcGxpY2F0ZWQKICAgIHJlYWwgOjogcmluZAogIGNvbnRh aW5zCiAgICBmaW5hbCA6OiBkZXN0cnVjdG9yMywgZGVzdHJ1Y3RvcjQKICBlbmQgdHlwZSBjb21w bGljYXRlZAoKICBpbnRlZ2VyIDo6IGNoZWNrX3NjYWxhcgogIGludGVnZXIgOjogY2hlY2tfYXJy YXkoNCkKICByZWFsIDo6IGNoZWNrX3JlYWwKICByZWFsIDo6IGNoZWNrX3JhcnJheSg0KQogIGlu dGVnZXIgOjogZmluYWxfY291bnQgPSAwCgpjb250YWlucwoKICBzdWJyb3V0aW5lIGRlc3RydWN0 b3IxKHNlbGYpCiAgICB0eXBlKHNpbXBsZSksIGludGVudChpbm91dCkgOjogc2VsZgogICAgY2hl Y2tfc2NhbGFyID0gc2VsZiVpbmQKICAgIGNoZWNrX2FycmF5ID0gMAogICAgZmluYWxfY291bnQg PSBmaW5hbF9jb3VudCArIDEKICAgIHByaW50ICcoM0EsIGk0KScsICIgZmluYWxpemUgc2ltcGxl IC0gIiwgdHJpbSAoc2VsZiVteW5hbWUpLCAiJWluZCA9ICIsIHNlbGYlaW5kCiAgZW5kIHN1YnJv dXRpbmUgZGVzdHJ1Y3RvcjEKCiAgc3Vicm91dGluZSBkZXN0cnVjdG9yMihzZWxmKQogICAgdHlw ZShzaW1wbGUpLCBpbnRlbnQoaW5vdXQpIDo6IHNlbGYoOikKICAgIGNoZWNrX3NjYWxhciA9IDAK ICAgIGNoZWNrX2FycmF5KDE6c2l6ZShzZWxmLCAxKSkgPSBzZWxmJWluZAogICAgZmluYWxfY291 bnQgPSBmaW5hbF9jb3VudCArIDEKICAgIHByaW50ICcoM0EsIDNpNCknLCAiIGZpbmFsaXplIHNp bXBsZSg6KSAtICIsIHRyaW0gKHNlbGYoMSklbXluYW1lKSwiJWluZD0gIiwgc2VsZiVpbmQKICBl bmQgc3Vicm91dGluZSBkZXN0cnVjdG9yMgoKICBzdWJyb3V0aW5lIGRlc3RydWN0b3IzKHNlbGYp CiAgICB0eXBlKGNvbXBsaWNhdGVkKSwgaW50ZW50KGlub3V0KSA6OiBzZWxmCiAgICBjaGVja19y ZWFsID0gc2VsZiVyaW5kCiAgICBjaGVja19hcnJheSA9IDAuMAogICAgZmluYWxfY291bnQgPSBm aW5hbF9jb3VudCArIDEKICAgIHByaW50ICcoM0EsIGk0LCBmNi4yKScsICIgZmluYWxpemUgY29t cGxpY2F0ZWQgLSAiLCB0cmltIChzZWxmJW15bmFtZSksIiA9ICIsJgogICAgICAgICAgICAgICAg ICAgICAgICAgICAgc2VsZiVpbmQsIHNlbGYlcmluZAogIGVuZCBzdWJyb3V0aW5lIGRlc3RydWN0 b3IzCgogIHN1YnJvdXRpbmUgZGVzdHJ1Y3RvcjQoc2VsZikKICAgIHR5cGUoY29tcGxpY2F0ZWQp LCBpbnRlbnQoaW5vdXQpIDo6IHNlbGYoOikKICAgIGNoZWNrX3JlYWwgPSAwLjAKICAgIGNoZWNr X3JhcnJheSgxOnNpemUoc2VsZiwgMSkpID0gc2VsZiVyaW5kCiAgICBmaW5hbF9jb3VudCA9IGZp bmFsX2NvdW50ICsgMQogICAgaWYgKHNpemUoc2VsZiwgMSkgPT0gMikgdGhlbgogICAgICBwcmlu dCAnKDNBLCAyaTQsIDJmNi4yKScsICIgZmluYWxpemUgY29tcGxpY2F0ZWQoMikgLSAiLCB0cmlt IChzZWxmKDEpJW15bmFtZSksJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgPSAi LCBzZWxmJWluZCwgc2VsZiVyaW5kCiAgICBlbHNlIGlmIChzaXplKHNlbGYsIDEpID09IDMpIHRo ZW4KICAgICAgcHJpbnQgJygzQSwgM2k0LCAzZjYuMiknLCAiIGZpbmFsaXplIGNvbXBsaWNhdGVk KDMpIC0gIiwgdHJpbSAoc2VsZigxKSVteW5hbWUpLCYKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAiID0gIiwgc2VsZiVpbmQsIHNlbGYlcmluZAogICAgZWxzZQogICAgICBwcmludCAq LCAiIGZpbmFsaXplIGNvbXBsaWNhdGVkKDopIC0gIiwgdHJpbSAoc2VsZigxKSVteW5hbWUpLCIg PSAiLCBzZWxmJWluZCwgc2VsZiVyaW5kCiAgICBlbmRpZgogIGVuZCBzdWJyb3V0aW5lIGRlc3Ry dWN0b3I0CgogIGZ1bmN0aW9uIGNvbnN0cnVjdG9yMShpbmQgLG15bmFtZSkgcmVzdWx0KHJlcykK ICAgIHR5cGUoc2ltcGxlKSwgYWxsb2NhdGFibGUgOjogcmVzCiAgICBpbnRlZ2VyLCBpbnRlbnQo aW4pIDo6IGluZAogICAgY2hhcmFjdGVyKCopIDo6IG15bmFtZQogICAgYWxsb2NhdGUgKHJlcywg c291cmNlID0gc2ltcGxlIChpbmQsIG15bmFtZSkpCiAgZW5kIGZ1bmN0aW9uIGNvbnN0cnVjdG9y MQoKICBmdW5jdGlvbiBjb25zdHJ1Y3RvcjIoaW5kLCBteW5hbWUsIHJpbmQpIHJlc3VsdChyZXMp CiAgICBjbGFzcyhzaW1wbGUpLCBhbGxvY2F0YWJsZSA6OiByZXMoOikKICAgIGludGVnZXIsIGlu dGVudChpbikgOjogaW5kKDopCiAgICByZWFsLCBpbnRlbnQoaW4pLCBvcHRpb25hbCA6OiByaW5k KDopCiAgICB0eXBlKGNvbXBsaWNhdGVkKSwgYWxsb2NhdGFibGUgOjogc3JjKDopCiAgICBjaGFy YWN0ZXIoKikgOjogbXluYW1lCiAgICBpbnRlZ2VyIDo6IHN6CiAgICBpbnRlZ2VyIDo6IGkKICAg IGlmIChwcmVzZW50IChyaW5kKSkgdGhlbgogICAgICBzeiA9IG1pbiAoc2l6ZSAoaW5kLCAxKSwg c2l6ZSAocmluZCwgMSkpCiAgICAgIHNyYyAgPSBbKGNvbXBsaWNhdGVkIChpbmQoaSksIG15bmFt ZSwgcmluZChpKSksIGkgPSAxLCBzeildCiAgICAgIGFsbG9jYXRlIChyZXMsIHNvdXJjZSA9IHNy YykKICAgIGVsc2UKICAgICAgc3ogPSBzaXplIChpbmQsIDEpCiAgICAgIGFsbG9jYXRlIChyZXMs IHNvdXJjZSA9IFsoc2ltcGxlIChpbmQoaSksIG15bmFtZSksIGkgPSAxLCBzeildKQogICAgZW5k IGlmCiAgZW5kIGZ1bmN0aW9uIGNvbnN0cnVjdG9yMgoKICBzdWJyb3V0aW5lIHRlc3QgKGNudCwg c2NhbGFyLCBhcnJheSwgb2ZmLCByaW5kLCByYXJyYXkpCiAgICBpbnRlZ2VyIDo6IGNudAogICAg aW50ZWdlciA6OiBzY2FsYXIKICAgIGludGVnZXIgOjogYXJyYXkoOikKICAgIGludGVnZXIgOjog b2ZmCiAgICByZWFsLCBvcHRpb25hbCA6OiByaW5kCiAgICByZWFsLCBvcHRpb25hbCA6OiByYXJy YXkoOikKICAgIGlmIChmaW5hbF9jb3VudCAubmUuIGNudCkgIHByaW50ICosIDEgKyBvZmYsIGZp bmFsX2NvdW50LCBjbnQKICAgIGlmIChjaGVja19zY2FsYXIgLm5lLiBzY2FsYXIpIHByaW50ICos IDIgKyBvZmYsIGNoZWNrX3NjYWxhciwgc2NhbGFyCiAgICBpZiAoYW55IChjaGVja19hcnJheSgx OnNpemUgKGFycmF5LCAxKSkgLm5lLiBhcnJheSkpIHByaW50ICosICAzICsgb2ZmLCAmCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrX2FycmF5KDE6c2l6ZSAoYXJy YXksIDEpKSwgInwiLCBhcnJheQogICAgaWYgKHByZXNlbnQgKHJpbmQpKSB0aGVuCiAgICAgIGlm IChjaGVja19yZWFsIC5uZS4gcmluZCkgIHByaW50ICosICA0K29mZiwgY2hlY2tfcmVhbCwgcmlu ZAogICAgZW5kIGlmCiAgICBpZiAocHJlc2VudCAocmFycmF5KSkgdGhlbgogICAgICBpZiAoYW55 IChjaGVja19yYXJyYXkoMTpzaXplIChyYXJyYXksIDEpKSAubmUuIHJhcnJheSkpIHByaW50ICos ICA1ICsgb2ZmLCAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNr X3JhcnJheSgxOnNpemUgKHJhcnJheSwgMSkpLCAifCIsIHJhcnJheQogICAgZW5kIGlmCiAgZW5k IHN1YnJvdXRpbmUgdGVzdAoKZW5kIG1vZHVsZSB0ZXN0bW9kZQoKcHJvZ3JhbSB0ZXN0X2ZpbmFs CiAgIHVzZSB0ZXN0bW9kZQogICBpbXBsaWNpdCBub25lCiAgIHR5cGUoc2ltcGxlKSwgcGFyYW1l dGVyICAgOjogVGh5VHlwZSAgID0gc2ltcGxlKDIxLCAiVGh5VHlwZSIpCiAgIHR5cGUoc2ltcGxl KSAgICAgICAgICAgICAgOjogVGh5VHlwZTIgID0gc2ltcGxlKDIyLCAiVGh5VHlwZTIiKQogICB0 eXBlKHNpbXBsZSksIGFsbG9jYXRhYmxlIDo6IE15VHlwZSwgTXlUeXBlMgogICB0eXBlKHNpbXBs ZSksIGFsbG9jYXRhYmxlIDo6IE15VHlwZUFycmF5KDopCiAgIHR5cGUoY29tcGxpY2F0ZWQpLCBh bGxvY2F0YWJsZSA6OiBUaHlUeXBlQXJyYXkoOikKCiAgIHByaW50ICcoYSxpNCknLCAiIEF0IHN0 YXJ0IG9mIHByb2dyYW06IGZpbmFsX2NvdW50ID0gIiwgZmluYWxfY291bnQKCiEqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq CiEgUGF0Y2ggbm93IGNvcnJlY3RlZCBub3QgdG8gZmluYWxpemUgd2hlbiAndmFyJyBpcyBub3Qg YWxsb2NhdGVkLgohIE15dHlwZSBub3QgYWxsb2NhdGVkIGFuZCBzbyBubyBmaW5hbGl6YXRpb24g PT4gZmluYWxfY291bnQgPSAwCiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgIHByaW50ICosICIqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIgog ICBwcmludCAqLCAiIgogICBwcmludCAqLCAiMXN0IGFzc2lnbm1lbnQ6IE5vIGZpbmFsaXphdGlv biBiZWNhdXNlIE15VHlwZSB1bmFsbG9jYXRlZC4iCiAgIE15VHlwZSA9IFRoeVR5cGUKICAgcHJp bnQgJyhhLGk0LGEpJywgIiBBZnRlciAxc3QgYXNzaWdubWVudCh2YXIgbm90IGFsbG9jYXRlZCk6 IGZpbmFsX2NvdW50ID0gIiwgZmluYWxfY291bnQsICIoMCkiCiAgIHByaW50ICosICIqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqIgogICBwcmludCAqLCAiIgohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgohIE15dHlwZTIgaXMgYWxsb2NhdGVkIGFu ZCBzbyBmaW5hbGl6YXRpb24gc2hvdWxkIG9jY3VyID0+IGZpbmFsX2NvdW50ID0gMQohKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKgogICBwcmludCAqLCAiMm5kIGFzc2lnbm1lbnQ6IE15VHlwZSg9c2ltcGxlKDEsTXlUeXBl KSBmaW5hbGl6ZWQgYmVmb3JlIGFzc2lnbm1lbnQiCiAgIGZpbmFsX2NvdW50ID0gMAogICBhbGxv Y2F0ZSAoTXl0eXBlMiwgc291cmNlID0gc2ltcGxlICgxLCAiTXl0eXBlMiIpKQogICBNeVR5cGUy ID0gVGh5VHlwZTIKICAgcHJpbnQgJyhhLGk0LGEpJywgIiBBZnRlciAybmQgYXNzaWdubWVudCh2 YXIgYWxsb2NhdGVkKTogZmluYWxfY291bnQgPSAiLCBmaW5hbF9jb3VudCwgIigxKSIKICAgcHJp bnQgKiwgIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioiCiAgIHByaW50ICosICIiCgohKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgohIFRoaXMgc2hv dWxkIHJlc3VsdCBpbiBhIGZpbmFsIGNhbGwgd2l0aCBzZWxmID0gW3NpbXBsZSg0Miksc2ltcGxl KDQzKV0uCiEgTkFHIG91dHB1dHMgc2VsZiA9IFtzaW1wbGUoMjEpLHNpbXBsZSgyMildIGFuZCBh IGRvdWJsZSBpbmNyZW1lbnQgb2YKISB0aGUgZmluYWwgY291bnQsIHdoaWNoIFBSVCBkb2VzIG5v dCB1bmRlcnN0YW5kLgohIEluIFBSVCdzIG9waW5pb24gPT4gZmluYWxfY291bnQgPSAxCiEqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqCiAgIHByaW50ICosICIzcmQgYXNzaWdubWVudDogTXlUeXBlQXJyYXkoJWluZCA9IFs0 MSA0Ml0pIGZpbmFsaXplZCBiZWZvcmUgYXNzaWdubWVudCIKICAgcHJpbnQgKiwgIiIKICAgZmlu YWxfY291bnQgPSAwCiAgIGFsbG9jYXRlKE15VHlwZUFycmF5LCBzb3VyY2UgPSBbc2ltcGxlICg0 MiwgIk15VHlwZUFycmF5IiksIHNpbXBsZSg0MywgIk15VHlwZUFycmF5IildKQogICBNeVR5cGVB cnJheSA9IFtUaHlUeXBlLCBUaHlUeXBlMl0KICAgcHJpbnQgJyhhLGk0LGEpJywgIiBBZnRlciAz cmQgYXNzaWdubWVudChhcnJheSB2YXIgYWxsb2NhdGVkKTogZmluYWxfY291bnQgPSAiLCBmaW5h bF9jb3VudCwgIigxKSIKICAgcHJpbnQgKiwgIioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioiCiAgIHByaW50ICosICIiCgoh KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKgohIENoZWNrIHRoYXQgcmhzIGZ1bmN0aW9uIGV4cHJlc3Npb25zIGZpbmFsaXpl IGNvcnJlY3RseS4KISAndmFyJyBpcyBmaW5hbGl6ZWQgb24gZGVhbGxvY2F0aW9uIGFuZCB0aGVu IGFnYWluIG9uIGFzc2lnbm1lbnQuIFRoZQohIGZ1bmN0aW9uIHJlc3VsdCBvZiAnY29uc3RydWN0 b3IxJyBpcyBmaW5hbGl6ZWQgYWZ0ZXIgdGhlIGFzc2lnbm1lbnQuCiEgKE5vdGUgTkFHIG9ubHkg Z2VuZXJhdGVzIHR3byBmaW5hbCBjYWxscyBhbmQgY2hlY2tfc2NhbGFyID0gMTEuKQohIEluIFBS VCdzIG9waW5pb24gPT4gZmluYWxfY291bnQgPSAzCiEqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgIHByaW50ICosICJE ZWFsbG9jYXRpb24gZ2VuZXJhdGVzIGZpbmFsIGNhbGwgd2l0aCBzZWxmID0gc2ltcGxlICgyMSwg VGh5VHlwZSkiCiAgIHByaW50ICosICI0dGggYXNzaWdubWVudDogTXlUeXBlQXJyYXkgZmluYWxp emVkIGJlZm9yZSBhc3NpZ25tZW50IgogICBwcmludCAqLCAiTXR5cGUgZmluYWxpemVkIGJlZm9y ZSBhc3NpZ25tZW50IHdpdGggc2VsZiA9IHNpbXBsZSAoMTEsIE15VHlwZSkiCiAgIHByaW50ICos ICJGdW5jdGlvbiByZXN1bHQgZmluYWxpemVkIGFmdGVyIGFzc2lnbm1lbnQgd2l0aCBzZWxmID0g c2ltcGxlICg5OSwgTXlUeXBlKSIKICAgcHJpbnQgKiwgIiIKICAgZmluYWxfY291bnQgPSAwCiAg IGRlYWxsb2NhdGUgKE15VHlwZSkKICAgYWxsb2NhdGUgKE15VHlwZSwgc291cmNlID0gc2ltcGxl ICgxMSwgIk15VHlwZSIpKQogICBNeVR5cGUgPSBjb25zdHJ1Y3RvcjEgKDk5LCAiTXlUeXBlIikK ICAgcHJpbnQgJyhhLGk0LGEpJywgIiBBZnRlciA0dGggYXNzaWdubWVudChhcnJheSB2YXIgYWxs b2NhdGVkKSA6ZmluYWxfY291bnQgPSAiLCBmaW5hbF9jb3VudCwgIigzKSIKICAgcHJpbnQgKiwg IioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioiCiAgIHByaW50ICosICIiCgohKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgohIENoZWNrIHRoYXQgcmhz IGFycmF5IGZ1bmN0aW9uIGV4cHJlc3Npb25zIGZpbmFsaXplIGNvcnJlY3RseS4KISAndmFyJyBp cyBvbiBhc3NpZ25tZW50LiBUaGUgZnVuY3Rpb24gcmVzdWx0IG9mICdjb25zdHJ1Y3RvcjMnIGlz CiEgZmluYWxpemVkIGFmdGVyIHRoZSBhc3NpZ25tZW50LiBCb3RoIGZpbmFsaXphdGlvbnMgcmVz dWx0IGluIGEKISBmaW5hbGl6YXRpb24gb2YgdGhlIGV4dGVuZGVkIHR5cGUgYW5kIHRoZW4gdGhl IHBhcmVudC4gSW4gYWRkaXRpb24sCiEgdGhlIGFzc2lnbm1lbnQgaW4gY29uc3RydWN0b3IzIGNh dXNlcyBhIGZpbmFsaXphdGlvbiBvZiAncmVzJy4KISBUaGVyZWZvcmUgPT4gZmluYWxfY291bnQg PSA2CiEgKE5vdGUgaWZvcnQgZ2VuZXJhdGVzIHRlbiBmaW5hbCBjYWxscyBiZWNhdXNlIG9mIHRo ZSBzY2FsYXIgZmluYWwKISBjYWxscyBvZiB0aGUgcGFyZW50IGNvbXBvbmVudHMsIHJhdGhlciB0 aGFuIGFycmF5IGNhbGxzLikKISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgcHJpbnQgKiwgIjV0aCBhc3NpZ25tZW50 OiBNeVR5cGVBcnJheSBmaW5hbGl6ZWQgYmVmb3JlIGFzc2lnbm1lbnQiCiAgIHByaW50ICosICIx XSBGaXJzdCBmaW5hbGl6YXRpb24gaXMgb2YgJ3JlcycgaW4gY29uc3RydWN0b3IzIHdpdGg6Igog ICBwcmludCAqLCAiU2VsZiA9IFtjb21wbGljYXRlZCAoLTEsIGNvbnN0cnVjdG9yMywgMC4wKSwg Y29tcGxpY2F0ZWQgKC0xLCBUaHlUeXBlQXJyYTEsIDAuMCldIgogICBwcmludCAqLCAiMl0gVGh5 VHlwZUFycmF5IGlzIGZpbmFsaXplZCBiZWZvcmUgYXNzaWdubWVudCBhbmQgYWZ0ZXIgZXZhbHVh dGlvbiBvZiBjb25zdHJ1Y3RvcjMiCiAgIHByaW50ICosICJTZWxmID0gWzMgdGltZXMgY29tcGxp Y2F0ZWQgKC0xLCBUaHlUeXBlQXJyYTEsMC4wKV0iCiAgIHByaW50ICosICIzXSBGdW5jdGlvbiBy ZXN1bHQgZmluYWxpemVkIGFmdGVyIGFzc2lnbm1lbnQgd2l0aCIKICAgcHJpbnQgKiwgIlNlbGYg PSBbY29tcGxpY2F0ZWQgKC0xLCBUaHlUeXBlQXJyYTIsIDAuMCksIGNvbXBsaWNhdGVkICgtMSwg VGh5VHlwZUFycmEyLCAwLjApXSIKICAgcHJpbnQgKiwgIiIKICAgZmluYWxfY291bnQgPSAwCiAg IGFsbG9jYXRlIChUaHlUeXBlQXJyYXkoMyksIHNvdXJjZSA9IGNvbXBsaWNhdGVkICgtMSwiVGh5 VHlwZUFycmExIiwwLjApKQogICBUaHlUeXBlQXJyYXkgPSBjb25zdHJ1Y3RvcjMgKCJUaHlUeXBl QXJyYTIiKQogICBwcmludCAnKGEsaTQsYSknLCAiIEFmdGVyIDV0aCBhc3NpZ25tZW50KGFycmF5 IHZhciBhbGxvY2F0ZWQpOiIsIGZpbmFsX2NvdW50LCAiKDYpIgogICBwcmludCAqLCAiIgogICBw cmludCAqLCAiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiIKICAgcHJpbnQgKiwgIkRlYWxsb2NhdGUgVGh5VHlwZUFycmF5 LiIKICAgZGVhbGxvY2F0ZSAoVGh5VHlwZUFycmF5KQogICBwcmludCAqLCAiIgogICBwcmludCAq LCAiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiIKCiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqCiEgNnRoIEFzc2lnbm1lbnQgaGFzIHRoZSBhbGxv Y2F0YWJsZSB2ZXJzaW9uIG9mIHRoZSBmdW5jdGlvbi4gVGhpcyBzaG91bGQKISBnaXZlIHRoZSBz YW1lIHJlc3VsdCBhcyB0aGUgcHJldmlvdXMgb25lLgohKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICBwcmludCAqLCAi NnRoIGFzc2lnbm1lbnQ6IEEgcmVwZWF0IG9mIHRoZSBwcmV2aW91cyB3aXRoIGFuIGFsbG9jYXRh YmxlIGZ1bmN0aW9uIHJlc3VsdC4iCiAgIHByaW50ICosICJUaGlzIHNob3VsZCBnaXZlIHRoZSBz YW1lIHJlc3VsdCBhcyB0aGUgNXRoIGFzc2lnbm1lbnQuIgogICBwcmludCAqLCAiIgogICBmaW5h bF9jb3VudCA9IDAKICAgYWxsb2NhdGUgKFRoeVR5cGVBcnJheSgzKSwgc291cmNlID0gY29tcGxp Y2F0ZWQgKC0xLCJUaHlUeXBlQXJyYTEiLDAuMCkpCiAgIFRoeVR5cGVBcnJheSA9IGNvbnN0cnVj dG9yNCAoIlRoeVR5cGVBcnJhMiIpCiAgIHByaW50ICcoYSxpNCxhKScsICIgQWZ0ZXIgNnRoIGFz c2lnbm1lbnQoYXJyYXkgdmFyIGFsbG9jYXRlZCk6IiwgZmluYWxfY291bnQsICIoNikiCiAgIHBy aW50ICosICIiCiAgIHByaW50ICosICIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIgoKISoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKISBFdmVyeWJv ZHkgYWdyZWVzIChQUlQgdGhpbmtzKSBhYm91dCBkZWFsbG9jYXRpb24sIGV4Y2VwdCB3aGVyZSBh cnJheXMKISBvZiBleHRlbmRlZCB0eXBlcyBhcmUgY29uY2VybmVkIChJbnRlbCkKISoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioKICAgZmluYWxfY291bnQgPSAwCiAgIHByaW50ICosICJEZWFsbG9jYXRpb25zIGF0IGVuZCIK ICAgcHJpbnQgKiwgIiIKICAgZGVhbGxvY2F0ZShNeXR5cGUpCiAgIHByaW50ICosICJBZnRlciAx c3QgZGVhbGxvY2F0aW9uOiIsIGZpbmFsX2NvdW50CiAgIGRlYWxsb2NhdGUoTXl0eXBlMikKICAg cHJpbnQgKiwgIkFmdGVyIDJuZCBkZWFsbG9jYXRpb246IiwgZmluYWxfY291bnQKICAgZGVhbGxv Y2F0ZShNeXR5cGVBcnJheSkKICAgcHJpbnQgKiwgIkFmdGVyIDNyZCBkZWFsbG9jYXRpb246Iiwg ZmluYWxfY291bnQKCmNvbnRhaW5zCiAgIGZ1bmN0aW9uIGNvbnN0cnVjdG9yMyAobXluYW1lKSBy ZXN1bHQocmVzKQogICAgICB0eXBlKGNvbXBsaWNhdGVkKSA6OiByZXMoMikKICAgICAgY2hhcmFj dGVyKDEyKSA6OiBteW5hbWUKICAgICAgcHJpbnQgKiwgImNvbnN0cnVjdG9yMzogZmluYWxfY291 bnQgPSAiLCBmaW5hbF9jb3VudAogICAgICByZXMlbXluYW1lID0gImNvbnN0cnVjdG9yMyIKICAg ICAgcmVzID0gW2NvbXBsaWNhdGVkKDEsIG15bmFtZSwgMi4wKSxjb21wbGljYXRlZCgzLCBteW5h bWUsIDQuMCldCiAgIGVuZCBmdW5jdGlvbgoKICAgZnVuY3Rpb24gY29uc3RydWN0b3I0IChteW5h bWUpIHJlc3VsdChyZXMpCiAgICAgIHR5cGUoY29tcGxpY2F0ZWQpLCBhbGxvY2F0YWJsZSA6OiBy ZXMoOikKICAgICAgY2hhcmFjdGVyKDEyKSA6OiBteW5hbWUKICAgICAgcHJpbnQgKiwgImNvbnN0 cnVjdG9yNDogZmluYWxfY291bnQgPSAiLCBmaW5hbF9jb3VudAogICAgICBhbGxvY2F0ZSAocmVz KDIpLCBzb3VyY2UgPSBjb21wbGljYXRlZCAoMSwgImNvbnN0cnVjdG9yMyIsIDEuMCkpCiAgICAg IHJlcyVteW5hbWUgPSAiY29uc3RydWN0b3I0IgogICAgICByZXMgPSBbY29tcGxpY2F0ZWQoMSwg bXluYW1lLCAyLjApLGNvbXBsaWNhdGVkKDMsIG15bmFtZSwgNC4wKV0KICAgZW5kIGZ1bmN0aW9u CgplbmQgcHJvZ3JhbSB0ZXN0X2ZpbmFsCg== --000000000000ea895605d8271d1b--