From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-lf1-x134.google.com (mail-lf1-x134.google.com [IPv6:2a00:1450:4864:20::134]) by sourceware.org (Postfix) with ESMTPS id BD4FE387089A; Thu, 14 Jan 2021 16:20:53 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org BD4FE387089A Received: by mail-lf1-x134.google.com with SMTP id b26so8818478lff.9; Thu, 14 Jan 2021 08:20:53 -0800 (PST) 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=d1L64wjO0+S/FuHT8otBotQ0XM1/Vpfa6kbhwrPy8hQ=; b=s2/WpoYiboLuXbTln6cM+NEli/0x6Z1dWpem3xF+7oYXBs5ck6uYNi7NaT4awlTYwh 74HwbhdcTdFxpZbo79SL6xGCypf6wK4+GEUhbubXQAZeRvbfXHN/FWv8AC830+zvYv1L JdTGBZQLPILrkvH1WV2hiToG58wzFebHYV1Y4vQUsjk6jvKO5ySDpBAGCPOm/l4XdOdA UD2Tr77n4qg7adMbbEIKOvjjqst1AVf1kI9kHDWUd+gFhQU7JeA62C4avrssaar360OS 1oLLiXQMY/FgPv4BRLlMnPEo63dFX1h9lPli+w+U2V+tOlt8LLKT1y3FDSMO++4XX72R kXQw== X-Gm-Message-State: AOAM532f4/2JT0k/NOTuAhMTXPXYW3I0vMVSL2wpdAHx1UwVVZNEyJ7e Af91Gxr7nhuyDyv1rf6QXjvAYh7lLdR5gEP27FEnKyWIAhaJbw== X-Google-Smtp-Source: ABdhPJzLqWv5+32mTQ1S4LJcVhZhn2ZHJWJJMDxAtj8m9D29JQZICs0yLenSEsleq4canUP+n+HFHdLdlAquRyaaJYM= X-Received: by 2002:a05:6512:3a8e:: with SMTP id q14mr840215lfu.209.1610641251802; Thu, 14 Jan 2021 08:20:51 -0800 (PST) MIME-Version: 1.0 From: Paul Richard Thomas Date: Thu, 14 Jan 2021 16:20:40 +0000 Message-ID: Subject: [Patch, fortran] PR64290 - [F03] No finalization at deallocation of LHS To: "fortran@gcc.gnu.org" , gcc-patches Content-Type: multipart/mixed; boundary="000000000000acbcfd05b8dea38d" X-Spam-Status: No, score=-8.9 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, HTML_MESSAGE, RCVD_IN_DNSWL_NONE, 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-Content-Filtered-By: Mailman/MimeDel 2.1.29 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, 14 Jan 2021 16:20:57 -0000 --000000000000acbcfd05b8dea38d Content-Type: text/plain; charset="UTF-8" Hi All, This patch was triggered by a thread on clf. Some years ago Tobias and I discussed the remaining conditions where finalization should be triggered and is not. Intrinsic assignment was one of the glaring omissions for which implementation looked like a heavy lift job. As it happens, it wasn't too bad :-) Most of the work was suppressing partial finalization, as a prelude to reallocation on assignment, and ensuring that finalization happened in the right circumstances. gfc_assignment_finalizer_call does the work for intrinsic assignment and is straightforward. Care has to be taken to place the result between evaluation of the rhs and any reallocation of the lhs that might occur. I thought it to be a good idea to squeeze this in before Stage 4 and so the testcase is not yet finished.I will post it separately once complete and before pushing the patch. The process is a bit tedious since it involves checking that the finalization is occurring at the correct point in the assignment, that the results are consistent with my understanding of 7.5.6.3 and that another brand gives the same results. Regtests on FC33/x86_64 - OK for master? It occurs to me that this should also be backported to the 10-branch at very least. Paul Fortran:Implement finalization on intrinsic assignment [PR64290] 2021-01-14 Paul Thomas gcc/fortran PR fortran/64290 * resolve.c (resolve_where, gfc_resolve_where_code_in_forall, gfc_resolve_forall_body, gfc_resolve_code): Check that the op code is still EXEC_ASSIGN. If it is set lhs to must finalize. * trans-array.c (structure_alloc_comps): Add boolean argument to suppress finalization and use it for calls from gfc_deallocate_alloc_comp_no_caf. Otherwise it defaults to false. (gfc_alloc_allocatable_for_assignment): Suppress finalization by setting new arg in call to gfc_deallocate_alloc_comp_no_caf. * trans-array.h : Add the new boolean argument to the prototype of gfc_deallocate_alloc_comp_no_caf with a default of false. * trans-expr.c (gfc_trans_scalar_assign): Suppress finalization by setting new arg in call to gfc_deallocate_alloc_comp_no_caf. (gfc_assignment_finalizer_call): New function to provide finalization on intrinsic assignment. (gfc_trans_assignment_1): Call it and add the block between the rhs evaluation and any reallocation on assignment that there might be. gcc/testsuite/ PR fortran/64290 * gfortran.dg/finalize_38.f90 : New test. * gfortran.dg/allocate_with_source_16.f90 : The number of final calls goes down from 6 to 4. --000000000000acbcfd05b8dea38d Content-Type: text/x-patch; charset="US-ASCII"; name="submit.diff" Content-Disposition: attachment; filename="submit.diff" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kjx273rf0 ZGlmZiAtLWdpdCBhL2djYy9mb3J0cmFuL3Jlc29sdmUuYyBiL2djYy9mb3J0cmFuL3Jlc29sdmUu YwppbmRleCBmMjQzYmQxODViMC4uMDVmNTIxODViOGIgMTAwNjQ0Ci0tLSBhL2djYy9mb3J0cmFu L3Jlc29sdmUuYworKysgYi9nY2MvZm9ydHJhbi9yZXNvbHZlLmMKQEAgLTEwNDE1LDYgKzEwNDE1 LDEwIEBAIHJlc29sdmVfd2hlcmUgKGdmY19jb2RlICpjb2RlLCBnZmNfZXhwciAqbWFzaykKIAkg ICAgICBpZiAoZSAmJiAhcmVzb2x2ZV93aGVyZV9zaGFwZSAoY25leHQtPmV4cHIxLCBlKSkKIAkg ICAgICAgZ2ZjX2Vycm9yICgiV0hFUkUgYXNzaWdubWVudCB0YXJnZXQgYXQgJUwgaGFzICIKIAkJ CSAgImluY29uc2lzdGVudCBzaGFwZSIsICZjbmV4dC0+ZXhwcjEtPndoZXJlKTsKKworCSAgICAg IGlmIChjbmV4dC0+b3AgPT0gRVhFQ19BU1NJR04pCisJCWNuZXh0LT5leHByMS0+bXVzdF9maW5h bGl6ZSA9IDE7CisKIAkgICAgICBicmVhazsKIAogCkBAIC0xMDUwMiw2ICsxMDUwNiwxMCBAQCBn ZmNfcmVzb2x2ZV93aGVyZV9jb2RlX2luX2ZvcmFsbCAoZ2ZjX2NvZGUgKmNvZGUsIGludCBudmFy LAogCSAgICAvKiBXSEVSRSBhc3NpZ25tZW50IHN0YXRlbWVudCAqLwogCSAgICBjYXNlIEVYRUNf QVNTSUdOOgogCSAgICAgIGdmY19yZXNvbHZlX2Fzc2lnbl9pbl9mb3JhbGwgKGNuZXh0LCBudmFy LCB2YXJfZXhwcik7CisKKwkgICAgICBpZiAoY25leHQtPm9wID09IEVYRUNfQVNTSUdOKQorCQlj bmV4dC0+ZXhwcjEtPm11c3RfZmluYWxpemUgPSAxOworCiAJICAgICAgYnJlYWs7CiAKIAkgICAg LyogV0hFUkUgb3BlcmF0b3IgYXNzaWdubWVudCBzdGF0ZW1lbnQgKi8KQEAgLTEwNTQ4LDYgKzEw NTU2LDEwIEBAIGdmY19yZXNvbHZlX2ZvcmFsbF9ib2R5IChnZmNfY29kZSAqY29kZSwgaW50IG52 YXIsIGdmY19leHByICoqdmFyX2V4cHIpCiAJY2FzZSBFWEVDX0FTU0lHTjoKIAljYXNlIEVYRUNf UE9JTlRFUl9BU1NJR046CiAJICBnZmNfcmVzb2x2ZV9hc3NpZ25faW5fZm9yYWxsIChjLCBudmFy LCB2YXJfZXhwcik7CisKKwkgIGlmIChjLT5vcCA9PSBFWEVDX0FTU0lHTikKKwkgICAgYy0+ZXhw cjEtPm11c3RfZmluYWxpemUgPSAxOworCiAJICBicmVhazsKIAogCWNhc2UgRVhFQ19BU1NJR05f Q0FMTDoKQEAgLTExOTQ3LDYgKzExOTU5LDkgQEAgc3RhcnQ6CiAJICAgICAgJiYgY29kZS0+ZXhw cjEtPnRzLnUuZGVyaXZlZC0+YXR0ci5kZWZpbmVkX2Fzc2lnbl9jb21wKQogCSAgICBnZW5lcmF0 ZV9jb21wb25lbnRfYXNzaWdubWVudHMgKCZjb2RlLCBucyk7CiAKKwkgIGlmIChjb2RlLT5vcCA9 PSBFWEVDX0FTU0lHTikKKwkgICAgY29kZS0+ZXhwcjEtPm11c3RfZmluYWxpemUgPSAxOworCiAJ ICBicmVhazsKIAogCWNhc2UgRVhFQ19MQUJFTF9BU1NJR046CmRpZmYgLS1naXQgYS9nY2MvZm9y dHJhbi90cmFucy1hcnJheS5jIGIvZ2NjL2ZvcnRyYW4vdHJhbnMtYXJyYXkuYwppbmRleCA0YmQ0 ZGI4NzdiZC4uOGFjNmI5ZTg4ZmIgMTAwNjQ0Ci0tLSBhL2djYy9mb3J0cmFuL3RyYW5zLWFycmF5 LmMKKysrIGIvZ2NjL2ZvcnRyYW4vdHJhbnMtYXJyYXkuYwpAQCAtODY2MSw3ICs4NjYxLDcgQEAg c3RhdGljIGdmY19hY3R1YWxfYXJnbGlzdCAqcGR0X3BhcmFtX2xpc3Q7CiBzdGF0aWMgdHJlZQog c3RydWN0dXJlX2FsbG9jX2NvbXBzIChnZmNfc3ltYm9sICogZGVyX3R5cGUsIHRyZWUgZGVjbCwK IAkJICAgICAgIHRyZWUgZGVzdCwgaW50IHJhbmssIGludCBwdXJwb3NlLCBpbnQgY2FmX21vZGUs Ci0JCSAgICAgICBnZmNfY29fc3Vicm91dGluZXNfYXJncyAqYXJncykKKwkJICAgICAgIGdmY19j b19zdWJyb3V0aW5lc19hcmdzICphcmdzLCBib29sIG5vX2ZpbmFsaXphdGlvbikKIHsKICAgZ2Zj X2NvbXBvbmVudCAqYzsKICAgZ2ZjX2xvb3BpbmZvIGxvb3A7CkBAIC04NzQ5LDExICs4NzQ5LDEy IEBAIHN0cnVjdHVyZV9hbGxvY19jb21wcyAoZ2ZjX3N5bWJvbCAqIGRlcl90eXBlLCB0cmVlIGRl Y2wsCiAJCQkJCSAgICAgZ2ZjX2NvbnZfYXJyYXlfZGF0YSAoZGVzdCkpOwogCSAgZHJlZiA9IGdm Y19idWlsZF9hcnJheV9yZWYgKHRtcCwgaW5kZXgsIE5VTEwpOwogCSAgdG1wID0gc3RydWN0dXJl X2FsbG9jX2NvbXBzIChkZXJfdHlwZSwgdnJlZiwgZHJlZiwgcmFuaywKLQkJCQkgICAgICAgQ09Q WV9BTExPQ19DT01QLCBjYWZfbW9kZSwgYXJncyk7CisJCQkJICAgICAgIENPUFlfQUxMT0NfQ09N UCwgY2FmX21vZGUsIGFyZ3MsCisJCQkJICAgICAgIG5vX2ZpbmFsaXphdGlvbik7CiAJfQogICAg ICAgZWxzZQogCXRtcCA9IHN0cnVjdHVyZV9hbGxvY19jb21wcyAoZGVyX3R5cGUsIHZyZWYsIE5V TExfVFJFRSwgcmFuaywgcHVycG9zZSwKLQkJCQkgICAgIGNhZl9tb2RlLCBhcmdzKTsKKwkJCQkg ICAgIGNhZl9tb2RlLCBhcmdzLCBub19maW5hbGl6YXRpb24pOwogCiAgICAgICBnZmNfYWRkX2V4 cHJfdG9fYmxvY2sgKCZsb29wYm9keSwgdG1wKTsKIApAQCAtODc4NywxMyArODc4OCwxNSBAQCBz dHJ1Y3R1cmVfYWxsb2NfY29tcHMgKGdmY19zeW1ib2wgKiBkZXJfdHlwZSwgdHJlZSBkZWNsLAog ICBpZiAocHVycG9zZSA9PSBERUFMTE9DQVRFX0FMTE9DX0NPTVAgJiYgZGVyX3R5cGUtPmF0dHIu cGR0X3R5cGUpCiAgICAgewogICAgICAgdG1wID0gc3RydWN0dXJlX2FsbG9jX2NvbXBzIChkZXJf dHlwZSwgZGVjbCwgTlVMTF9UUkVFLCByYW5rLAotCQkJCSAgIERFQUxMT0NBVEVfUERUX0NPTVAs IDAsIGFyZ3MpOworCQkJCSAgIERFQUxMT0NBVEVfUERUX0NPTVAsIDAsIGFyZ3MsCisJCQkJICAg bm9fZmluYWxpemF0aW9uKTsKICAgICAgIGdmY19hZGRfZXhwcl90b19ibG9jayAoJmZuYmxvY2ss IHRtcCk7CiAgICAgfQogICBlbHNlIGlmIChwdXJwb3NlID09IEFMTE9DQVRFX1BEVF9DT01QICYm IGRlcl90eXBlLT5hdHRyLmFsbG9jX2NvbXApCiAgICAgewogICAgICAgdG1wID0gc3RydWN0dXJl X2FsbG9jX2NvbXBzIChkZXJfdHlwZSwgZGVjbCwgTlVMTF9UUkVFLCByYW5rLAotCQkJCSAgIE5V TExJRllfQUxMT0NfQ09NUCwgMCwgYXJncyk7CisJCQkJICAgTlVMTElGWV9BTExPQ19DT01QLCAw LCBhcmdzLAorCQkJCSAgIG5vX2ZpbmFsaXphdGlvbik7CiAgICAgICBnZmNfYWRkX2V4cHJfdG9f YmxvY2sgKCZmbmJsb2NrLCB0bXApOwogICAgIH0KIApAQCAtODg1MSw3ICs4ODU0LDcgQEAgc3Ry dWN0dXJlX2FsbG9jX2NvbXBzIChnZmNfc3ltYm9sICogZGVyX3R5cGUsIHRyZWUgZGVjbCwKIAkJ ICBhZGRfd2hlbl9hbGxvY2F0ZWQKIAkJICAgICAgPSBzdHJ1Y3R1cmVfYWxsb2NfY29tcHMgKENM QVNTX0RBVEEgKGMpLT50cy51LmRlcml2ZWQsCiAJCQkJCSAgICAgICBjb21wLCBOVUxMX1RSRUUs IHJhbmssIHB1cnBvc2UsCi0JCQkJCSAgICAgICBjYWZfbW9kZSwgYXJncyk7CisJCQkJCSAgICAg ICBjYWZfbW9kZSwgYXJncywgbm9fZmluYWxpemF0aW9uKTsKIAkJfQogCSAgICAgIGVsc2UKIAkJ ewpAQCAtODg1OSw3ICs4ODYyLDggQEAgc3RydWN0dXJlX2FsbG9jX2NvbXBzIChnZmNfc3ltYm9s ICogZGVyX3R5cGUsIHRyZWUgZGVjbCwKIAkJICBhZGRfd2hlbl9hbGxvY2F0ZWQgPSBzdHJ1Y3R1 cmVfYWxsb2NfY29tcHMgKGMtPnRzLnUuZGVyaXZlZCwKIAkJCQkJCQkgICAgICBjb21wLCBOVUxM X1RSRUUsCiAJCQkJCQkJICAgICAgcmFuaywgcHVycG9zZSwKLQkJCQkJCQkgICAgICBjYWZfbW9k ZSwgYXJncyk7CisJCQkJCQkJICAgICAgY2FmX21vZGUsIGFyZ3MsCisJCQkJCQkJICAgICAgbm9f ZmluYWxpemF0aW9uKTsKIAkJfQogCSAgICB9CiAKQEAgLTg5NTUsOCArODk1OSw4IEBAIHN0cnVj dHVyZV9hbGxvY19jb21wcyAoZ2ZjX3N5bWJvbCAqIGRlcl90eXBlLCB0cmVlIGRlY2wsCiAJCWNv bnRpbnVlOwogCSAgICB9CiAKLQkgIGlmICgoYy0+dHMudHlwZSA9PSBCVF9ERVJJVkVEICYmICFj LT5hdHRyLnBvaW50ZXIpCi0JICAgICB8fCAoYy0+dHMudHlwZSA9PSBCVF9DTEFTUyAmJiAhQ0xB U1NfREFUQSAoYyktPmF0dHIuY2xhc3NfcG9pbnRlcikpCisJICBpZiAoIW5vX2ZpbmFsaXphdGlv biAmJiAoKGMtPnRzLnR5cGUgPT0gQlRfREVSSVZFRCAmJiAhYy0+YXR0ci5wb2ludGVyKQorCSAg ICAgfHwgKGMtPnRzLnR5cGUgPT0gQlRfQ0xBU1MgJiYgIUNMQVNTX0RBVEEgKGMpLT5hdHRyLmNs YXNzX3BvaW50ZXIpKSkKIAkgICAgLyogQ2FsbCB0aGUgZmluYWxpemVyLCB3aGljaCB3aWxsIGZy ZWUgdGhlIG1lbW9yeSBhbmQgbnVsbGlmeSB0aGUKIAkgICAgICAgcG9pbnRlciBvZiBhbiBhcnJh eS4gICovCiAJICAgIGRlYWxsb2NhdGVfY2FsbGVkID0gZ2ZjX2FkZF9jb21wX2ZpbmFsaXplcl9j YWxsICgmdG1wYmxvY2ssIGNvbXAsIGMsCkBAIC04OTg0LDcgKzg5ODgsNyBAQCBzdHJ1Y3R1cmVf YWxsb2NfY29tcHMgKGdmY19zeW1ib2wgKiBkZXJfdHlwZSwgdHJlZSBkZWNsLAogCQkgIGFkZF93 aGVuX2FsbG9jYXRlZAogCQkgICAgICA9IHN0cnVjdHVyZV9hbGxvY19jb21wcyAoQ0xBU1NfREFU QSAoYyktPnRzLnUuZGVyaXZlZCwKIAkJCQkJICAgICAgIGNvbXAsIE5VTExfVFJFRSwgcmFuaywg cHVycG9zZSwKLQkJCQkJICAgICAgIGNhZl9tb2RlLCBhcmdzKTsKKwkJCQkJICAgICAgIGNhZl9t b2RlLCBhcmdzLCBub19maW5hbGl6YXRpb24pOwogCQl9CiAJICAgICAgZWxzZQogCQl7CkBAIC04 OTkyLDcgKzg5OTYsOCBAQCBzdHJ1Y3R1cmVfYWxsb2NfY29tcHMgKGdmY19zeW1ib2wgKiBkZXJf dHlwZSwgdHJlZSBkZWNsLAogCQkgIGFkZF93aGVuX2FsbG9jYXRlZCA9IHN0cnVjdHVyZV9hbGxv Y19jb21wcyAoYy0+dHMudS5kZXJpdmVkLAogCQkJCQkJCSAgICAgIGNvbXAsIE5VTExfVFJFRSwK IAkJCQkJCQkgICAgICByYW5rLCBwdXJwb3NlLAotCQkJCQkJCSAgICAgIGNhZl9tb2RlLCBhcmdz KTsKKwkJCQkJCQkgICAgICBjYWZfbW9kZSwgYXJncywKKwkJCQkJCQkgICAgICBub19maW5hbGl6 YXRpb24pOwogCQl9CiAJICAgIH0KIApAQCAtOTI5MCw3ICs5Mjk1LDggQEAgc3RydWN0dXJlX2Fs bG9jX2NvbXBzIChnZmNfc3ltYm9sICogZGVyX3R5cGUsIHRyZWUgZGVjbCwKIAkJCQkgICAgICBk ZWNsLCBjZGVjbCwgTlVMTF9UUkVFKTsKIAkgICAgICByYW5rID0gYy0+YXMgPyBjLT5hcy0+cmFu ayA6IDA7CiAJICAgICAgdG1wID0gc3RydWN0dXJlX2FsbG9jX2NvbXBzIChjLT50cy51LmRlcml2 ZWQsIGNvbXAsIE5VTExfVFJFRSwKLQkJCQkJICAgcmFuaywgcHVycG9zZSwgY2FmX21vZGUsIGFy Z3MpOworCQkJCQkgICByYW5rLCBwdXJwb3NlLCBjYWZfbW9kZSwgYXJncywKKwkJCQkJICAgbm9f ZmluYWxpemF0aW9uKTsKIAkgICAgICBnZmNfYWRkX2V4cHJfdG9fYmxvY2sgKCZmbmJsb2NrLCB0 bXApOwogCSAgICB9CiAJICBicmVhazsKQEAgLTkzMjYsNyArOTMzMiw3IEBAIHN0cnVjdHVyZV9h bGxvY19jb21wcyAoZ2ZjX3N5bWJvbCAqIGRlcl90eXBlLCB0cmVlIGRlY2wsCiAJCSAgdG1wID0g c3RydWN0dXJlX2FsbG9jX2NvbXBzIChjLT50cy51LmRlcml2ZWQsIGNvbXAsIGRjbXAsCiAJCQkJ CSAgICAgICByYW5rLCBwdXJwb3NlLCBjYWZfbW9kZQogCQkJCQkgICAgICAgfCBHRkNfU1RSVUNU VVJFX0NBRl9NT0RFX0lOX0NPQVJSQVksCi0JCQkJCSAgICAgICBhcmdzKTsKKwkJCQkJICAgICAg IGFyZ3MsIG5vX2ZpbmFsaXphdGlvbik7CiAJCSAgZ2ZjX2FkZF9leHByX3RvX2Jsb2NrICgmZm5i bG9jaywgdG1wKTsKIAkJfQogCSAgICB9CkBAIC05NDM0LDcgKzk0NDAsOCBAQCBzdHJ1Y3R1cmVf YWxsb2NfY29tcHMgKGdmY19zeW1ib2wgKiBkZXJfdHlwZSwgdHJlZSBkZWNsLAogCSAgICAgIGFk ZF93aGVuX2FsbG9jYXRlZCA9IHN0cnVjdHVyZV9hbGxvY19jb21wcyAoYy0+dHMudS5kZXJpdmVk LAogCQkJCQkJCSAgY29tcCwgZGNtcCwKIAkJCQkJCQkgIHJhbmssIHB1cnBvc2UsCi0JCQkJCQkJ ICBjYWZfbW9kZSwgYXJncyk7CisJCQkJCQkJICBjYWZfbW9kZSwgYXJncywKKwkJCQkJCQkgIG5v X2ZpbmFsaXphdGlvbik7CiAJICAgIH0KIAkgIGVsc2UKIAkgICAgYWRkX3doZW5fYWxsb2NhdGVk ID0gTlVMTF9UUkVFOwpAQCAtOTgwNyw3ICs5ODE0LDggQEAgZ2ZjX251bGxpZnlfYWxsb2NfY29t cCAoZ2ZjX3N5bWJvbCAqIGRlcl90eXBlLCB0cmVlIGRlY2wsIGludCByYW5rLAogewogICByZXR1 cm4gc3RydWN0dXJlX2FsbG9jX2NvbXBzIChkZXJfdHlwZSwgZGVjbCwgTlVMTF9UUkVFLCByYW5r LAogCQkJCU5VTExJRllfQUxMT0NfQ09NUCwKLQkJCQlHRkNfU1RSVUNUVVJFX0NBRl9NT0RFX0VO QUJMRV9DT0FSUkFZIHwgY2FmX21vZGUsIE5VTEwpOworCQkJCUdGQ19TVFJVQ1RVUkVfQ0FGX01P REVfRU5BQkxFX0NPQVJSQVkgfCBjYWZfbW9kZSwKKwkJCQlOVUxMLCBmYWxzZSk7CiB9CiAKIApA QCAtOTgyMCw3ICs5ODI4LDggQEAgZ2ZjX2RlYWxsb2NhdGVfYWxsb2NfY29tcCAoZ2ZjX3N5bWJv bCAqIGRlcl90eXBlLCB0cmVlIGRlY2wsIGludCByYW5rLAogewogICByZXR1cm4gc3RydWN0dXJl X2FsbG9jX2NvbXBzIChkZXJfdHlwZSwgZGVjbCwgTlVMTF9UUkVFLCByYW5rLAogCQkJCURFQUxM T0NBVEVfQUxMT0NfQ09NUCwKLQkJCQlHRkNfU1RSVUNUVVJFX0NBRl9NT0RFX0VOQUJMRV9DT0FS UkFZIHwgY2FmX21vZGUsIE5VTEwpOworCQkJCUdGQ19TVFJVQ1RVUkVfQ0FGX01PREVfRU5BQkxF X0NPQVJSQVkgfCBjYWZfbW9kZSwKKwkJCQlOVUxMLCBmYWxzZSk7CiB9CiAKIHRyZWUKQEAgLTk4 NTgsNyArOTg2Nyw4IEBAIGdmY19iY2FzdF9hbGxvY19jb21wIChnZmNfc3ltYm9sICpkZXJpdmVk LCBnZmNfZXhwciAqZXhwciwgaW50IHJhbmssCiAKICAgdG1wID0gc3RydWN0dXJlX2FsbG9jX2Nv bXBzIChkZXJpdmVkLCBhcnJheSwgTlVMTF9UUkVFLCByYW5rLAogCQkJICAgICAgIEJDQVNUX0FM TE9DX0NPTVAsCi0gIAkJCSAgICAgICBHRkNfU1RSVUNUVVJFX0NBRl9NT0RFX0VOQUJMRV9DT0FS UkFZLCAmYXJncyk7CisgIAkJCSAgICAgICBHRkNfU1RSVUNUVVJFX0NBRl9NT0RFX0VOQUJMRV9D T0FSUkFZLAorCQkJICAgICAgICZhcmdzLCBmYWxzZSk7CiAgIHJldHVybiB0bXA7CiB9CiAKQEAg LTk4NjgsMTAgKzk4NzgsMTIgQEAgZ2ZjX2JjYXN0X2FsbG9jX2NvbXAgKGdmY19zeW1ib2wgKmRl cml2ZWQsIGdmY19leHByICpleHByLCBpbnQgcmFuaywKICAgIHN0YXR1cyBvZiBjb2FycmF5cy4g ICovCiAKIHRyZWUKLWdmY19kZWFsbG9jYXRlX2FsbG9jX2NvbXBfbm9fY2FmIChnZmNfc3ltYm9s ICogZGVyX3R5cGUsIHRyZWUgZGVjbCwgaW50IHJhbmspCitnZmNfZGVhbGxvY2F0ZV9hbGxvY19j b21wX25vX2NhZiAoZ2ZjX3N5bWJvbCAqIGRlcl90eXBlLCB0cmVlIGRlY2wsIGludCByYW5rLAor CQkJCSAgYm9vbCBub19maW5hbGl6YXRpb24pCiB7CiAgIHJldHVybiBzdHJ1Y3R1cmVfYWxsb2Nf Y29tcHMgKGRlcl90eXBlLCBkZWNsLCBOVUxMX1RSRUUsIHJhbmssCi0JCQkJREVBTExPQ0FURV9B TExPQ19DT01QLCAwLCBOVUxMKTsKKwkJCQlERUFMTE9DQVRFX0FMTE9DX0NPTVAsIDAsIE5VTEws CisJCQkJbm9fZmluYWxpemF0aW9uKTsKIH0KIAogCkBAIC05ODc5LDcgKzk4OTEsOCBAQCB0cmVl CiBnZmNfcmVhc3NpZ25fYWxsb2NfY29tcF9jYWYgKGdmY19zeW1ib2wgKmRlcl90eXBlLCB0cmVl IGRlY2wsIHRyZWUgZGVzdCkKIHsKICAgcmV0dXJuIHN0cnVjdHVyZV9hbGxvY19jb21wcyAoZGVy X3R5cGUsIGRlY2wsIGRlc3QsIDAsIFJFQVNTSUdOX0NBRl9DT01QLAotCQkJCUdGQ19TVFJVQ1RV UkVfQ0FGX01PREVfRU5BQkxFX0NPQVJSQVksIE5VTEwpOworCQkJCUdGQ19TVFJVQ1RVUkVfQ0FG X01PREVfRU5BQkxFX0NPQVJSQVksCisJCQkJTlVMTCwgZmFsc2UpOwogfQogCiAKQEAgLTk4OTEs NyArOTkwNCw3IEBAIGdmY19jb3B5X2FsbG9jX2NvbXAgKGdmY19zeW1ib2wgKiBkZXJfdHlwZSwg dHJlZSBkZWNsLCB0cmVlIGRlc3QsIGludCByYW5rLAogCQkgICAgIGludCBjYWZfbW9kZSkKIHsK ICAgcmV0dXJuIHN0cnVjdHVyZV9hbGxvY19jb21wcyAoZGVyX3R5cGUsIGRlY2wsIGRlc3QsIHJh bmssIENPUFlfQUxMT0NfQ09NUCwKLQkJCQljYWZfbW9kZSwgTlVMTCk7CisJCQkJY2FmX21vZGUs IE5VTEwsIGZhbHNlKTsKIH0KIAogCkBAIC05OTAyLDcgKzk5MTUsNyBAQCB0cmVlCiBnZmNfY29w eV9vbmx5X2FsbG9jX2NvbXAgKGdmY19zeW1ib2wgKiBkZXJfdHlwZSwgdHJlZSBkZWNsLCB0cmVl IGRlc3QsIGludCByYW5rKQogewogICByZXR1cm4gc3RydWN0dXJlX2FsbG9jX2NvbXBzIChkZXJf dHlwZSwgZGVjbCwgZGVzdCwgcmFuaywKLQkJCQlDT1BZX09OTFlfQUxMT0NfQ09NUCwgMCwgTlVM TCk7CisJCQkJQ09QWV9PTkxZX0FMTE9DX0NPTVAsIDAsIE5VTEwsIGZhbHNlKTsKIH0KIAogCkBA IC05OTE3LDcgKzk5MzAsNyBAQCBnZmNfYWxsb2NhdGVfcGR0X2NvbXAgKGdmY19zeW1ib2wgKiBk ZXJfdHlwZSwgdHJlZSBkZWNsLCBpbnQgcmFuaywKICAgZ2ZjX2FjdHVhbF9hcmdsaXN0ICpvbGRf cGFyYW1fbGlzdCA9IHBkdF9wYXJhbV9saXN0OwogICBwZHRfcGFyYW1fbGlzdCA9IHBhcmFtX2xp c3Q7CiAgIHJlcyA9IHN0cnVjdHVyZV9hbGxvY19jb21wcyAoZGVyX3R5cGUsIGRlY2wsIE5VTExf VFJFRSwgcmFuaywKLQkJCSAgICAgICBBTExPQ0FURV9QRFRfQ09NUCwgMCwgTlVMTCk7CisJCQkg ICAgICAgQUxMT0NBVEVfUERUX0NPTVAsIDAsIE5VTEwsIGZhbHNlKTsKICAgcGR0X3BhcmFtX2xp c3QgPSBvbGRfcGFyYW1fbGlzdDsKICAgcmV0dXJuIHJlczsKIH0KQEAgLTk5MjksNyArOTk0Miw3 IEBAIHRyZWUKIGdmY19kZWFsbG9jYXRlX3BkdF9jb21wIChnZmNfc3ltYm9sICogZGVyX3R5cGUs IHRyZWUgZGVjbCwgaW50IHJhbmspCiB7CiAgIHJldHVybiBzdHJ1Y3R1cmVfYWxsb2NfY29tcHMg KGRlcl90eXBlLCBkZWNsLCBOVUxMX1RSRUUsIHJhbmssCi0JCQkJREVBTExPQ0FURV9QRFRfQ09N UCwgMCwgTlVMTCk7CisJCQkJREVBTExPQ0FURV9QRFRfQ09NUCwgMCwgTlVMTCwgZmFsc2UpOwog fQogCiAKQEAgLTk5NDQsNyArOTk1Nyw3IEBAIGdmY19jaGVja19wZHRfZHVtbXkgKGdmY19zeW1i b2wgKiBkZXJfdHlwZSwgdHJlZSBkZWNsLCBpbnQgcmFuaywKICAgZ2ZjX2FjdHVhbF9hcmdsaXN0 ICpvbGRfcGFyYW1fbGlzdCA9IHBkdF9wYXJhbV9saXN0OwogICBwZHRfcGFyYW1fbGlzdCA9IHBh cmFtX2xpc3Q7CiAgIHJlcyA9IHN0cnVjdHVyZV9hbGxvY19jb21wcyAoZGVyX3R5cGUsIGRlY2ws IE5VTExfVFJFRSwgcmFuaywKLQkJCSAgICAgICBDSEVDS19QRFRfRFVNTVksIDAsIE5VTEwpOwor CQkJICAgICAgIENIRUNLX1BEVF9EVU1NWSwgMCwgTlVMTCwgZmFsc2UpOwogICBwZHRfcGFyYW1f bGlzdCA9IG9sZF9wYXJhbV9saXN0OwogICByZXR1cm4gcmVzOwogfQpAQCAtMTA2NzgsNyArMTA2 OTEsNyBAQCBnZmNfYWxsb2NfYWxsb2NhdGFibGVfZm9yX2Fzc2lnbm1lbnQgKGdmY19sb29waW5m byAqbG9vcCwKIAkmJiBleHByMS0+dHMudS5kZXJpdmVkLT5hdHRyLmFsbG9jX2NvbXApCiAgICAg ewogICAgICAgdG1wID0gZ2ZjX2RlYWxsb2NhdGVfYWxsb2NfY29tcF9ub19jYWYgKGV4cHIxLT50 cy51LmRlcml2ZWQsIG9sZF9kZXNjLAotCQkJCQkgICAgICBleHByMS0+cmFuayk7CisJCQkJCSAg ICAgIGV4cHIxLT5yYW5rLCB0cnVlKTsKICAgICAgIGdmY19hZGRfZXhwcl90b19ibG9jayAoJnJl YWxsb2NfYmxvY2ssIHRtcCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9nY2MvZm9ydHJhbi90cmFu cy1hcnJheS5oIGIvZ2NjL2ZvcnRyYW4vdHJhbnMtYXJyYXkuaAppbmRleCBlNGQ0NDNkNzExOC4u NmUyYWQwYmM5MzggMTAwNjQ0Ci0tLSBhL2djYy9mb3J0cmFuL3RyYW5zLWFycmF5LmgKKysrIGIv Z2NjL2ZvcnRyYW4vdHJhbnMtYXJyYXkuaApAQCAtNTQsNyArNTQsOCBAQCB0cmVlIGdmY19udWxs aWZ5X2FsbG9jX2NvbXAgKGdmY19zeW1ib2wgKiwgdHJlZSwgaW50LCBpbnQgY20gPSAwKTsKIHRy ZWUgZ2ZjX2RlYWxsb2NhdGVfYWxsb2NfY29tcCAoZ2ZjX3N5bWJvbCAqLCB0cmVlLCBpbnQsIGlu dCBjbSA9IDApOwogdHJlZSBnZmNfYmNhc3RfYWxsb2NfY29tcCAoZ2ZjX3N5bWJvbCAqLCBnZmNf ZXhwciAqLCBpbnQsIHRyZWUsCiAJCQkgICB0cmVlLCB0cmVlLCB0cmVlKTsKLXRyZWUgZ2ZjX2Rl YWxsb2NhdGVfYWxsb2NfY29tcF9ub19jYWYgKGdmY19zeW1ib2wgKiwgdHJlZSwgaW50KTsKK3Ry ZWUgZ2ZjX2RlYWxsb2NhdGVfYWxsb2NfY29tcF9ub19jYWYgKGdmY19zeW1ib2wgKiwgdHJlZSwg aW50LAorCQkJCSAgICAgICBib29sIG5vX2ZpbmFsaXphdGlvbiA9IGZhbHNlKTsKIHRyZWUgZ2Zj X3JlYXNzaWduX2FsbG9jX2NvbXBfY2FmIChnZmNfc3ltYm9sICosIHRyZWUsIHRyZWUpOwogCiB0 cmVlIGdmY19jb3B5X2FsbG9jX2NvbXAgKGdmY19zeW1ib2wgKiwgdHJlZSwgdHJlZSwgaW50LCBp bnQpOwpkaWZmIC0tZ2l0IGEvZ2NjL2ZvcnRyYW4vdHJhbnMtZXhwci5jIGIvZ2NjL2ZvcnRyYW4v dHJhbnMtZXhwci5jCmluZGV4IDcxNTBlNDhiYzkzLi5mYTk2NjFmNDFiYyAxMDA2NDQKLS0tIGEv Z2NjL2ZvcnRyYW4vdHJhbnMtZXhwci5jCisrKyBiL2djYy9mb3J0cmFuL3RyYW5zLWV4cHIuYwpA QCAtOTkwOCw3ICs5OTA4LDggQEAgZ2ZjX3RyYW5zX3NjYWxhcl9hc3NpZ24gKGdmY19zZSAqIGxz ZSwgZ2ZjX3NlICogcnNlLCBnZmNfdHlwZXNwZWMgdHMsCiAgICAgICBpZiAoZGVhbGxvYykKIAl7 CiAJICB0bXBfdmFyID0gZ2ZjX2V2YWx1YXRlX25vdyAobHNlLT5leHByLCAmbHNlLT5wcmUpOwot CSAgdG1wID0gZ2ZjX2RlYWxsb2NhdGVfYWxsb2NfY29tcF9ub19jYWYgKHRzLnUuZGVyaXZlZCwg dG1wX3ZhciwgMCk7CisJICB0bXAgPSBnZmNfZGVhbGxvY2F0ZV9hbGxvY19jb21wX25vX2NhZiAo dHMudS5kZXJpdmVkLCB0bXBfdmFyLAorCQkJCQkJICAwLCB0cnVlKTsKIAkgIGlmIChkZWVwX2Nv cHkpCiAJICAgIHRtcCA9IGJ1aWxkM192IChDT05EX0VYUFIsIGNvbmQsIGJ1aWxkX2VtcHR5X3N0 bXQgKGlucHV0X2xvY2F0aW9uKSwKIAkJCSAgICB0bXApOwpAQCAtMTA5OTksNiArMTEwMDAsNjgg QEAgdHJhbnNfY2xhc3NfYXNzaWdubWVudCAoc3RtdGJsb2NrX3QgKmJsb2NrLCBnZmNfZXhwciAq bGhzLCBnZmNfZXhwciAqcmhzLAogICAgIH0KIH0KIAorCisgIC8qIEYyMDE4ICg3LjUuNi4zKTog IldoZW4gYW4gaW50cmluc2ljIGFzc2lnbm1lbnQgc3RhdGVtZW50IGlzIGV4ZWN1dGVkCisgICAg ICgxMC4yLjEuMyksIGlmIHRoZSB2YXJpYWJsZSBpcyBub3QgYW4gdW5hbGxvY2F0ZWQgYWxsb2Nh dGFibGUgdmFyaWFibGUsCisgICAgIGl0IGlzIGZpbmFsaXplZCBhZnRlciBldmFsdWF0aW9uIG9m IGV4cHIgYW5kIGJlZm9yZSB0aGUgZGVmaW5pdGlvbiBvZgorICAgICB0aGUgdmFyaWFibGUuIElm IHRoZSB2YXJpYWJsZSBpcyBhbiBhbGxvY2F0ZWQgYWxsb2NhdGFibGUgdmFyaWFibGUsIG9yCisg ICAgIGhhcyBhbiBhbGxvY2F0ZWQgYWxsb2NhdGFibGUgc3Vib2JqZWN0LCB0aGF0IHdvdWxkIGJl IGRlYWxsb2NhdGVkIGJ5CisgICAgIGludHJpbnNpYyBhc3NpZ25tZW50LCB0aGUgZmluYWxpemF0 aW9uIG9jY3VycyBiZWZvcmUgdGhlIGRlYWxsb2NhdGlvbiAqLworCitzdGF0aWMgdHJlZQorZ2Zj X2Fzc2lnbm1lbnRfZmluYWxpemVyX2NhbGwgKGdmY19leHByICpleHByMSwgZ2ZjX3NzICpsc3Ms CisJCQkgICAgICAgdHJlZSBsc2VfZXhwciwgYm9vbCBpbml0X2ZsYWcpCit7CisgIHN0bXRibG9j a190IGZpbmFsX2Jsb2NrOworICBnZmNfaW5pdF9ibG9jayAoJmZpbmFsX2Jsb2NrKTsKKyAgc3lt Ym9sX2F0dHJpYnV0ZSBsaHNfYXR0cjsKKyAgdHJlZSBmaW5hbF9leHByOworICB0cmVlIHB0cjsK KyAgdHJlZSBjb25kOworCisgIC8qIFdlIGhhdmUgdG8gZXhjbHVkZSB2dGFibGUgcHJvY2VkdXJl cyAoX2NvcHkgYW5kIF9maW5hbCBlc3BlY2lhbGx5KSwgdXNlcworICAgICBvZiBnZmNfdHJhbnNf YXNzaWdubWVudF8xIGluIGluaXRpYWxpemF0aW9uIGFuZCBhbGxvY2F0aW9uIGJlZm9yZSB0cnlp bmcKKyAgICAgdG8gYnVpbGQgYSBmaW5hbCBjYWxsLiAgKi8KKyAgaWYgKCFleHByMS0+bXVzdF9m aW5hbGl6ZQorICAgICAgfHwgZXhwcjEtPnN5bXRyZWUtPm4uc3ltLT5hdHRyLmFydGlmaWNpYWwK KyAgICAgIHx8IGV4cHIxLT5zeW10cmVlLT5uLnN5bS0+bnMtPnByb2NfbmFtZS0+YXR0ci5hcnRp ZmljaWFsCisgICAgICB8fCBpbml0X2ZsYWcpCisgICAgcmV0dXJuIE5VTExfVFJFRTsKKworICBp ZiAoIShleHByMS0+dHMudHlwZSA9PSBCVF9DTEFTUworCXx8IChleHByMS0+dHMudHlwZSA9PSBC VF9ERVJJVkVECisJICAgICYmIGdmY19pc19maW5hbGl6YWJsZSAoZXhwcjEtPnRzLnUuZGVyaXZl ZCwgTlVMTCkpKQorICAgICAgfHwgIWdmY19hZGRfZmluYWxpemVyX2NhbGwgKCZmaW5hbF9ibG9j aywgZXhwcjEpKQorICAgIHJldHVybiBOVUxMX1RSRUU7CisKKyAgbGhzX2F0dHIgPSBnZmNfZXhw cl9hdHRyIChleHByMSk7CisgIGlmIChsaHNfYXR0ci5hbGxvY2F0YWJsZSB8fCBsaHNfYXR0ci5w b2ludGVyKQorICAgIHsKKyAgICAgIGlmIChsc3MgPT0gZ2ZjX3NzX3Rlcm1pbmF0b3IpCisJcHRy ID0gZ2ZjX2J1aWxkX2FkZHJfZXhwciAoTlVMTF9UUkVFLCBsc2VfZXhwcik7CisgICAgICBlbHNl CisJcHRyID0gbHNzLT5pbmZvLT5kYXRhLmFycmF5LmRhdGE7CisgICAgICBjb25kID0gZm9sZF9i dWlsZDJfbG9jIChpbnB1dF9sb2NhdGlvbiwgTkVfRVhQUiwgbG9naWNhbF90eXBlX25vZGUsCisJ CQkgICAgICBwdHIsIGJ1aWxkX3plcm9fY3N0IChUUkVFX1RZUEUgKHB0cikpKTsKKyAgICAgIGZp bmFsX2V4cHIgPSBidWlsZDNfbG9jIChpbnB1dF9sb2NhdGlvbiwgQ09ORF9FWFBSLCB2b2lkX3R5 cGVfbm9kZSwKKwkJCSAgICAgICBjb25kLCBnZmNfZmluaXNoX2Jsb2NrICgmZmluYWxfYmxvY2sp LAorCQkJICAgICAgIGJ1aWxkX2VtcHR5X3N0bXQgKGlucHV0X2xvY2F0aW9uKSk7CisgICAgfQor ICBlbHNlCisgICAgZmluYWxfZXhwciA9IGdmY19maW5pc2hfYmxvY2sgKCZmaW5hbF9ibG9jayk7 CisKKyAgaWYgKGV4cHIxLT5zeW10cmVlLT5uLnN5bS0+YXR0ci5vcHRpb25hbCkKKyAgICB7Cisg ICAgICBjb25kID0gZ2ZjX2NvbnZfZXhwcl9wcmVzZW50IChleHByMS0+c3ltdHJlZS0+bi5zeW0p OworICAgICAgZmluYWxfZXhwciA9IGJ1aWxkM19sb2MgKGlucHV0X2xvY2F0aW9uLCBDT05EX0VY UFIsIHZvaWRfdHlwZV9ub2RlLAorCQkJICAgICAgIGNvbmQsIGZpbmFsX2V4cHIsCisJCQkgICAg ICAgYnVpbGRfZW1wdHlfc3RtdCAoaW5wdXRfbG9jYXRpb24pKTsKKyAgICB9CisKKyAgcmV0dXJu IGZpbmFsX2V4cHI7Cit9CisKKwogLyogU3Vicm91dGluZSBvZiBnZmNfdHJhbnNfYXNzaWdubWVu dCB0aGF0IGFjdHVhbGx5IHNjYWxhcml6ZXMgdGhlCiAgICBhc3NpZ25tZW50LiAgRVhQUjEgaXMg dGhlIGRlc3RpbmF0aW9uL0xIUyBhbmQgRVhQUjIgaXMgdGhlIHNvdXJjZS9SSFMuCiAgICBpbml0 X2ZsYWcgaW5kaWNhdGVzIGluaXRpYWxpemF0aW9uIGV4cHJlc3Npb25zIGFuZCBkZWFsbG9jIHRo YXQgbm8KQEAgLTExMDIyLDYgKzExMDg1LDcgQEAgZ2ZjX3RyYW5zX2Fzc2lnbm1lbnRfMSAoZ2Zj X2V4cHIgKiBleHByMSwgZ2ZjX2V4cHIgKiBleHByMiwgYm9vbCBpbml0X2ZsYWcsCiAgIHRyZWUg dG1wOwogICBzdG10YmxvY2tfdCBibG9jazsKICAgc3RtdGJsb2NrX3QgYm9keTsKKyAgdHJlZSBm aW5hbF9leHByOwogICBib29sIGxfaXNfdGVtcDsKICAgYm9vbCBzY2FsYXJfdG9fYXJyYXk7CiAg IHRyZWUgc3RyaW5nX2xlbmd0aDsKQEAgLTExMDYyLDYgKzExMTI2LDcgQEAgZ2ZjX3RyYW5zX2Fz c2lnbm1lbnRfMSAoZ2ZjX2V4cHIgKiBleHByMSwgZ2ZjX2V4cHIgKiBleHByMiwgYm9vbCBpbml0 X2ZsYWcsCiAgICAgIG5lZWRlZCBhdCB0d28gbG9jYXRpb25zLCBzbyBkbyBpdCBvbmNlIG9ubHkg YmVmb3JlIHRoZSBpbmZvcm1hdGlvbiBpcwogICAgICBuZWVkZWQuICAqLwogICBsaHNfYXR0ciA9 IGdmY19leHByX2F0dHIgKGV4cHIxKTsKKwogICBpc19wb2x5X2Fzc2lnbiA9ICh1c2VfdnB0cl9j b3B5IHx8IGxoc19hdHRyLnBvaW50ZXIKIAkJICAgIHx8IChsaHNfYXR0ci5hbGxvY2F0YWJsZSAm JiAhbGhzX2F0dHIuZGltZW5zaW9uKSkKIAkJICAgJiYgKGV4cHIxLT50cy50eXBlID09IEJUX0NM QVNTCkBAIC0xMTM4Nyw4ICsxMTQ1MiwyNiBAQCBnZmNfdHJhbnNfYXNzaWdubWVudF8xIChnZmNf ZXhwciAqIGV4cHIxLCBnZmNfZXhwciAqIGV4cHIyLCBib29sIGluaXRfZmxhZywKIAkJCQkgICAh KGxfaXNfdGVtcCB8fCBpbml0X2ZsYWcpICYmIGRlYWxsb2MsCiAJCQkJICAgZXhwcjEtPnN5bXRy ZWUtPm4uc3ltLT5hdHRyLmNvZGltZW5zaW9uKTsKIAotICAvKiBBZGQgdGhlIHByZSBibG9ja3Mg dG8gdGhlIGJvZHkuICAqLwotICBnZmNfYWRkX2Jsb2NrX3RvX2Jsb2NrICgmYm9keSwgJnJzZS5w cmUpOworICAvKiBDb21wbHkgd2l0aCBGMjAxOCAoNy41LjYuMykuIE1ha2Ugc3VyZSB0aGF0IGFu eSBmaW5hbGl6YXRpb24gY29kZSBpcyBhZGRlZAorICAgICBhZnRlciBldmFsdWF0aW9uIG9mIHRo ZSByaHMgYW5kIGJlZm9yZSByZWFsbG9jYXRpb24uICAqLworICBmaW5hbF9leHByID0gZ2ZjX2Fz c2lnbm1lbnRfZmluYWxpemVyX2NhbGwgKGV4cHIxLCBsc3MsIGxzZS5leHByLCBpbml0X2ZsYWcp OworICBpZiAoZmluYWxfZXhwcikKKyAgICB7CisgICAgICBpZiAobHNzID09IGdmY19zc190ZXJt aW5hdG9yKQorCXsKKwkgIGdmY19hZGRfYmxvY2tfdG9fYmxvY2sgKCZibG9jaywgJnJzZS5wcmUp OworCSAgZ2ZjX2FkZF9leHByX3RvX2Jsb2NrICgmYmxvY2ssIGZpbmFsX2V4cHIpOworCX0KKyAg ICAgIGVsc2UKKwl7CisJICBnZmNfYWRkX2Jsb2NrX3RvX2Jsb2NrICgmYm9keSwgJnJzZS5wcmUp OworCSAgZ2ZjX2FkZF9leHByX3RvX2Jsb2NrICgmbG9vcC5jb2RlW2V4cHIxLT5yYW5rIC0gMV0s IGZpbmFsX2V4cHIpOworCX0KKyAgICB9CisgIGVsc2UKKyAgICBnZmNfYWRkX2Jsb2NrX3RvX2Js b2NrICgmYm9keSwgJnJzZS5wcmUpOworCisgIC8qIEFkZCB0aGUgbHNlIHByZSBibG9jayB0byB0 aGUgYm9keSAgKi8KICAgZ2ZjX2FkZF9ibG9ja190b19ibG9jayAoJmJvZHksICZsc2UucHJlKTsK ICAgZ2ZjX2FkZF9leHByX3RvX2Jsb2NrICgmYm9keSwgdG1wKTsKICAgLyogQWRkIHRoZSBwb3N0 IGJsb2NrcyB0byB0aGUgYm9keS4gICovCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2dmb3J0 cmFuLmRnL2FsbG9jYXRlX3dpdGhfc291cmNlXzE2LmY5MCBiL2djYy90ZXN0c3VpdGUvZ2ZvcnRy YW4uZGcvYWxsb2NhdGVfd2l0aF9zb3VyY2VfMTYuZjkwCmluZGV4IDBmMWU5YjY3Mjg3Li42MGYz NTgzNmNkYiAxMDA2NDQKLS0tIGEvZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9hbGxvY2F0ZV93 aXRoX3NvdXJjZV8xNi5mOTAKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9hbGxvY2F0 ZV93aXRoX3NvdXJjZV8xNi5mOTAKQEAgLTUsNyArNSw3IEBACiAhIENvbnRyaWJ1dGVkIGJ5IFRo b21hcyBLb2VuaWcgIDx0a29lbmlnQGdjYy5nbnUub3JnPgogISAgICAgICAgICAgICAgICBBbmRy ZSBWZWhyZXNjaGlsZCAgPHZlaHJlQGdjYy5nbnUub3JnPgogIQotIAorCiBtb2R1bGUgbTEKIGlt cGxpY2l0IG5vbmUKIHByaXZhdGUKQEAgLTM1LDcgKzM1LDcgQEAgdHlwZSwgZXh0ZW5kcyhiYXNl dHlwZSkgOjogZXh0dHlwZQogZW5kdHlwZSBleHR0eXBlCiAKIHR5cGUgOjogZmFjdG9yeQotICBp bnRlZ2VyKElfUCkgOjogc3RlcHM9LTEgCisgIGludGVnZXIoSV9QKSA6OiBzdGVwcz0tMQogICBj b250YWlucwogICAgIHByb2NlZHVyZSwgcGFzcyhzZWxmKSwgcHVibGljIDo6IGNvbnN0cnVjdAog ZW5kdHlwZSBmYWN0b3J5CkBAIC02OCw3ICs2OCw3IEBAIGVuZG1vZHVsZSBtMgogICAgICAgaWYg KGQlaTIgLz0gNSkgU1RPUCAyCiAgICAgY2xhc3MgZGVmYXVsdAogICAgICAgU1RPUCAzCi0gIGVu ZCBzZWxlY3QgCisgIGVuZCBzZWxlY3QKICAgaWYgKGQlaSAvPSAyKSBTVE9QIDQKICAgZGVhbGxv Y2F0ZShjMSkKICAgZGVhbGxvY2F0ZShwcmV2KQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9n Zm9ydHJhbi5kZy9hbGxvY2F0ZV93aXRoX3NvdXJjZV8yNS5mOTAgYi9nY2MvdGVzdHN1aXRlL2dm b3J0cmFuLmRnL2FsbG9jYXRlX3dpdGhfc291cmNlXzI1LmY5MAppbmRleCA5MmRjNTA3NTZkNC4u ZGUyMGExNDc4NDIgMTAwNjQ0Ci0tLSBhL2djYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvYWxsb2Nh dGVfd2l0aF9zb3VyY2VfMjUuZjkwCisrKyBiL2djYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvYWxs b2NhdGVfd2l0aF9zb3VyY2VfMjUuZjkwCkBAIC02OCw0ICs2OCw0IEBAIGNvbnRhaW5zCiAgIGVu ZCBmdW5jdGlvbiBmdW5jX2Zvb19hCiAKIGVuZCBwcm9ncmFtIHNpbXBsZV9sZWFrCi0hIHsgZGct ZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiXD5fZmluYWwiIDYgIm9yaWdpbmFsIiB9IH0K KyEgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJcPl9maW5hbCIgNCAib3JpZ2lu YWwiIH0gfQo= --000000000000acbcfd05b8dea38d Content-Type: text/x-fortran; charset="US-ASCII"; name="finalize_38.f90" Content-Disposition: attachment; filename="finalize_38.f90" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kjx27bd21 ISB7IGRnLWRvIHJ1biB9CiEKISBUZXN0IGZpbmFsaXphdGlvbiBvbiBpbnRyaW5zaWMgYXNzaWdu bWVudCAoRjIwMTggKDcuNS42LjMpKQohCm1vZHVsZSB0ZXN0bW9kZQogIGltcGxpY2l0IG5vbmUK CiAgdHlwZSA6OiBzaW1wbGUKICAgIGludGVnZXIgOjogaW5kCiAgY29udGFpbnMKICAgIGZpbmFs IDo6IGRlc3RydWN0MSwgZGVzdHJ1Y3QyCiAgZW5kIHR5cGUgc2ltcGxlCgogIGludGVnZXIgOjog Y2hlY2tfc2NhbGFyCiAgaW50ZWdlciA6OiBjaGVja19hcnJheSgyKQogIGludGVnZXIgOjogZmlu YWxfY291bnQgPSAwCgpjb250YWlucwoKICBzdWJyb3V0aW5lIGRlc3RydWN0MShzZWxmKQogICAg dHlwZShzaW1wbGUpLCBpbnRlbnQoaW5vdXQpIDo6IHNlbGYKCiEgICAgcHJpbnQgKiwgIkRFU1RS VUNUSU5HIFNDQUxBUiIsIHNlbGYlaW5kCiAgICBjaGVja19zY2FsYXIgPSBzZWxmJWluZAogICAg Y2hlY2tfYXJyYXkgPSAwCiAgICBmaW5hbF9jb3VudCA9IGZpbmFsX2NvdW50ICsgMQoKICBlbmQg c3Vicm91dGluZSBkZXN0cnVjdDEKCiAgc3Vicm91dGluZSBkZXN0cnVjdDIoc2VsZikKICAgIHR5 cGUoc2ltcGxlKSwgaW50ZW50KGlub3V0KSA6OiBzZWxmKDopCgohICAgIHByaW50ICosICJERVNU UlVDVElORyBBUlJBWSIsIHNlbGYlaW5kCiAgICBjaGVja19zY2FsYXIgPSAwCiAgICBjaGVja19h cnJheSA9IHNlbGYlaW5kCiAgICBmaW5hbF9jb3VudCA9IGZpbmFsX2NvdW50ICsgMQoKICBlbmQg c3Vicm91dGluZSBkZXN0cnVjdDIKCiAgc3Vicm91dGluZSB0ZXN0IChjbnQsIHNjYWxhciwgYXJy YXksIG9mZikKICAgIGludGVnZXIgOjogY250CiAgICBpbnRlZ2VyIDo6IHNjYWxhcgogICAgaW50 ZWdlciA6OiBhcnJheSg6KQogICAgaW50ZWdlciA6OiBvZmYKICAgIGlmIChmaW5hbF9jb3VudCAu bmUuIGNudCkgc3RvcCAxICsgb2ZmCiAgICBpZiAoY2hlY2tfc2NhbGFyIC5uZS4gc2NhbGFyKSBz dG9wIDIgKyBvZmYKICAgIGlmIChhbnkgKGNoZWNrX2FycmF5IC5uZS4gYXJyYXkpKSBzdG9wIDMg KyBvZmYKICBlbmQgc3Vicm91dGluZSB0ZXN0CgplbmQgbW9kdWxlIHRlc3Rtb2RlCgpwcm9ncmFt IHRlc3RfZmluYWwKICB1c2UgdGVzdG1vZGUKICBpbXBsaWNpdCBub25lCgogIHR5cGUoc2ltcGxl KSwgYWxsb2NhdGFibGUgOjogbXlyZXMsIG15cmVzMgogIHR5cGUoc2ltcGxlKSwgYWxsb2NhdGFi bGUgOjogbXlhcnJheSg6KQogIHR5cGUoc2ltcGxlKSA6OiB0aHlyZXMgPSBzaW1wbGUoMjEpLCB0 aHlyZXMyID0gc2ltcGxlKDIyKQogIGNsYXNzKCopLCBhbGxvY2F0YWJsZSA6OiBteXN0YXIKICBj bGFzcygqKSwgYWxsb2NhdGFibGUgOjogbXlzdGFyYXJyYXkoOikKCiAgISBTaW5jZSBteXJlcyBp cyBub3QgYWxsb2NhdGVkIHRoZXJlIHNob3VsZCBiZSBubyBmaW5hbCBjYWxsLgogIG15cmVzID0g dGh5cmVzCiAgaWYgKGZpbmFsX2NvdW50IC5uZS4gMCkgc3RvcCAxCgogIGlmICgubm90LiBhbGxv Y2F0ZWQobXlyZXMpKSBhbGxvY2F0ZShteXJlcykKICBhbGxvY2F0ZShteXJlczIpCiAgbXlyZXMl aW5kID0gMQogIG15cmVzMiVpbmQgPSAyCiAgbXlyZXMgPSBteXJlczIKICBjYWxsIHRlc3QoMSwg MSwgWzAsMF0sIDEwKQoKICBhbGxvY2F0ZShteWFycmF5KDIpKQogIG15YXJyYXklaW5kID0gWzQy LCA0M10KICBteWFycmF5ID0gW3RoeXJlcywgdGh5cmVzMl0KICBjYWxsIHRlc3QoMiwgMCwgWzQy LDQzXSwgMjApCgogIHRoeXJlczIgPSBzaW1wbGUoOTkpCiAgY2FsbCB0ZXN0KDMsIDIyLCBbMCww XSwgMzApCgogIHRoeXJlcyA9IHRoeXJlczIKICBjYWxsIHRlc3QoNCwgMjEsIFswLDBdLCA0MCkK CiAgZGVhbGxvY2F0ZSAobXlyZXMsIG15cmVzMikKICBjYWxsIHRlc3QoNiwgMiwgWzAsMF0sIDEw MCkKCiAgZGVhbGxvY2F0ZSAobXlhcnJheSkKICBjYWxsIHRlc3QoNywgMCwgWzIxLDIyXSwgMjAw KQoKICBhbGxvY2F0ZSAobXlzdGFyLCBzb3VyY2UgPSBzaW1wbGUgKDMpKQogIG15c3RhciA9IHNp bXBsZSAoNCkKICBjYWxsIHRlc3QoOCwgMywgWzAsMF0sIDUwKQoKICBkZWFsbG9jYXRlIChteXN0 YXIpCiAgY2FsbCB0ZXN0KDksIDQsIFswLDBdLCA2MCkKCiAgYWxsb2NhdGUgKG15c3RhcmFycmF5 LCBzb3VyY2UgPSBbc2ltcGxlICg1KSwgc2ltcGxlICg2KV0pCiAgbXlzdGFyYXJyYXkgPSBbc2lt cGxlICg3KSwgc2ltcGxlICg4KV0KICBjYWxsIHRlc3QoMTAsIDAsIFs1LDZdLCA3MCkKCiAgZGVh bGxvY2F0ZSAobXlzdGFyYXJyYXkpCiAgY2FsbCB0ZXN0KDExLCAwLCBbNyw4XSwgODApCgplbmQg cHJvZ3JhbSB0ZXN0X2ZpbmFsCg== --000000000000acbcfd05b8dea38d--