From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-qt1-x834.google.com (mail-qt1-x834.google.com [IPv6:2607:f8b0:4864:20::834]) by sourceware.org (Postfix) with ESMTPS id B16B73858D35; Thu, 3 Feb 2022 17:14:55 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org B16B73858D35 Received: by mail-qt1-x834.google.com with SMTP id e16so3212884qtq.6; Thu, 03 Feb 2022 09:14:55 -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:from:date:message-id:subject:to:cc; bh=NuwwKMhB6WUmA7ZCCAaZr9G3Khl5HhYvdgkm1m5tYz4=; b=QpymN800ce8hslZN6MzVB4KHeZxOxJJ5G2jGChcqM7RIdytEJhgNfv9WU0AA3+WviK /xyD6QyhNNEtd02CZz9vzElQtBp9SpVKad81kdGy2t2eRncNKnXbejDsmzmrG2Y48kpZ k28O5CWHvQMLOD50v6KU73gQO9Ohzdo2e9IlLh2rgJb+4MVqp6E5J2ZJKdzHPDX0qxhu cWG2xPrZk2nmiU4ovXtkA4oO7lxpXHelyyyd3x44QhAD1XxzRqCDEb2gkyv1PDytl/2S G1jb5pAbf2M75WXD5QzYLK5I/HE9RGqRI2ww3AwzEev9KMfXONkrqvWyMj8Xhn1ySrGJ IqrQ== X-Gm-Message-State: AOAM531QzN3jdBm9eDLksmbBLit5b0lTJ2TnW6Ibjc60Brvo1T58GvU9 7utLby5TLwZqjljyEXZymkNw6E8DQfcz78EM3OdMiLP2G+Q= X-Google-Smtp-Source: ABdhPJy+KA+J3anSY+T2ZwYQFrGo7p1WLH/dXOb3b79UyS8m37zLQncJss1iRZIhdrahj7nWCjXk/dlefWcq47HTvRk= X-Received: by 2002:a37:6393:: with SMTP id x141mr24567608qkb.197.1643908495041; Thu, 03 Feb 2022 09:14:55 -0800 (PST) MIME-Version: 1.0 From: Paul Richard Thomas Date: Thu, 3 Feb 2022 17:14:43 +0000 Message-ID: Subject: [Patch, fortran] PR37336 (Finalization) - [F03] Finish derived-type finalization To: "fortran@gcc.gnu.org" , gcc-patches Cc: Andrew Benson , Alessandro Fanfarillo Content-Type: multipart/mixed; boundary="000000000000e458c605d720451c" X-Spam-Status: No, score=-7.4 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FILL_THIS_FORM, FREEMAIL_FROM, GIT_PATCH_0, HTML_MESSAGE, KAM_STOCKGEN, 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: Thu, 03 Feb 2022 17:15:02 -0000 --000000000000e458c605d720451c Content-Type: text/plain; charset="UTF-8" This patch has been an excessively long time in coming. Please accept my apologies for that. All but two of the PR37336 dependencies are fixed, The two exceptions are PRs 59694 and 65347. The former involves lack of finalization of an unreferenced entity declared in a block, which I am sure is trivial but I cannot see where the missing trigger is, and the latter involves finalization of function results within an array constructor, for which I will submit an additional patch shortly. PR104272 also remains, in which finalization is occurring during allocation. I fixed this in one place but it seems to have crept out in another :-) Beyond this patch and ones for the three lagging PRs above, a thorough tidy up and unification of finalization is needed. However, I will concentrate on functionality in the first instance. I have tried to interpret F2018 7.5.6.2 and 7.5.6.3 as well as possible. This is not always straightforward and has involved a lot of head scratching! I have used the Intel compiler as a litmus test for the outcomes. This was largely motivated by the observation that, in the user survey conducted by Steve Lionel, gfortran and ifort are often used together . Therefore, quite aside from wishing to comply with the standard as far as possible, it is more than reasonable that the two compilers comply. On application of this patch, only exception to this is the treatment of finalization of arrays of extended types, where the Intel takes "If the entity is of extended type and the parent type is finalizable, the parent component is finalized" such that the parent component is finalized one element at a time, whereas gfortran finalises the parent components as an array. I strongly suspect that, from reading 7.5.6.2 paragraphs 2 and 3 closely, that ifort has it right. However, this is another issue to come back to in the future. The work centred on three areas: (i) Finalization on assignment: This was required because finalization of the lhs was occurring at the wrong time relative to evaluation of the rhs expression and was taking the finalization of entities with finalizable components in the wrong order. The changes in trans-array.cc (structure_alloc_comps) allow gfc_deallocate_alloc_comp_no_caf to occur without finalization so that it can be preceded by calls to the finalization wrapper. The other key change in this area is the addition of trans-expr.cc (gfc_assignment_finalizer_call), which manages the ordering of finalization and deallocation. (ii) Finalization of derived type function results. Previously, finalization was not occuring at all for derived type results but it did for class results. The former is now implemented in trans-expr.cc (finalize_function_result), into which the treatment of class finalization has been included. In order to handled complex expressions correctly, an extra block has been included in gfc_se and is initialized in gfc_init_se. This block accumulates the finalizations so that they can be added at the right time. It is the way in which I will fix PR65347 (I have already tested the principle). (iii) Minor fixes These include the changes in class.cc and the exclusion of artificial entities from finalization. There are some missing testcases (sorry Andrew and Sandro!), which might not be necessary because the broken/missing features are already fixed. The fact that the work correctly now is a strong indication that this is the case. Regtests OK on FC33/x86_64 - OK for mainline (and 11-branch)? Best regards Paul Fortran:Implement missing finalization features [PR37336] 2022-02-02 Paul Thomas gcc/fortran PR fortran/103854 * class.cc (has_finalizer_component): Do not return true for procedure pointer components. PR fortran/96122 * class.cc (finalize_component): Include the missing arguments in the call to the component's finalizer wrapper. PR fortran/37336 * class.cc (finalizer_insert_packed_call): Remove the redundant argument in the call to the final subroutine. * resolve.cc (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.cc (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. Add a second, additional boolean argument to nullify pointer components and use it in gfc_copy_alloc_comp_del_ptrs. (gfc_alloc_allocatable_for_assignment): Suppress finalization by setting new arg in call to gfc_deallocate_alloc_comp_no_caf. (gfc_copy_alloc_comp_del_ptrs): New function. * trans-array.h : Add the new boolean argument to the prototype of gfc_deallocate_alloc_comp_no_caf with a default of false. Add prototype for gfc_copy_alloc_comp_del_ptrs. * trans-expr.cc (gfc_init_se): Initialize finalblock. (finalize_function_result): New function that finalizes function results in the correct order. (gfc_conv_procedure_call): Use new function for finalizable function results. Replace in-line block for class results with call to new function. (gfc_trans_scalar_assign): Suppress finalization by setting new argument in call to gfc_deallocate_alloc_comp_no_caf. Add the finalization blocks to the main block. (gfc_assignment_finalizer_call): New function to provide finalization on intrinsic assignment. (trans_class_assignment, gfc_trans_assignment_1): Call it and add the block between the rhs evaluation and any reallocation on assignment that there might be. * trans-io.cc (gfc_trans_transfer): Add the final block. * trans-stmt.cc (gfc_trans_call, gfc_trans_allocate): likewise. * trans.cc (gfc_add_finalizer_call): Exclude artificial entities. * trans.h: Add finalblock to gfc_se. gcc/testsuite/ PR fortran/64290 * gfortran.dg/finalize_38.f90 : New test. * gfortran.dg/allocate_with_source_25.f90 : The number of final calls goes down from 6 to 4. PR fortran/67444 * gfortran.dg/finalize_39.f90 : New test. PR fortran/67471 * gfortran.dg/finalize_40.f90 : New test. PR fortran/69298 PR fortran/70863 * gfortran.dg/finalize_41.f90 : New test. PR fortran/71798 * gfortran.dg/finalize_42.f90 : New test. PR fortran/80524 * gfortran.dg/finalize_43.f90 : New test. PR fortran/82996 * gfortran.dg/finalize_44.f90 : New test. PR fortran/84472 * gfortran.dg/finalize_45.f90 : New test. PR fortran/88735 PR fortran/93691 * gfortran.dg/finalize_46.f90 : New test. PR fortran/91316 * gfortran.dg/finalize_47.f90 : New test. --000000000000e458c605d720451c 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_kz721ldz0 ZGlmZiAtLWdpdCBhL2djYy9mb3J0cmFuL2NsYXNzLmNjIGIvZ2NjL2ZvcnRyYW4vY2xhc3MuY2MK aW5kZXggNzMxZTliMGZlNmEuLmEyNDllZWE0YTMwIDEwMDY0NAotLS0gYS9nY2MvZm9ydHJhbi9j bGFzcy5jYworKysgYi9nY2MvZm9ydHJhbi9jbGFzcy5jYwpAQCAtODk2LDcgKzg5Niw4IEBAIGhh c19maW5hbGl6ZXJfY29tcG9uZW50IChnZmNfc3ltYm9sICpkZXJpdmVkKQogICAgZ2ZjX2NvbXBv bmVudCAqYzsKIAogICBmb3IgKGMgPSBkZXJpdmVkLT5jb21wb25lbnRzOyBjOyBjID0gYy0+bmV4 dCkKLSAgICBpZiAoYy0+dHMudHlwZSA9PSBCVF9ERVJJVkVEICYmICFjLT5hdHRyLnBvaW50ZXIg JiYgIWMtPmF0dHIuYWxsb2NhdGFibGUpCisgICAgaWYgKGMtPnRzLnR5cGUgPT0gQlRfREVSSVZF RCAmJiAhYy0+YXR0ci5wb2ludGVyICYmICFjLT5hdHRyLmFsbG9jYXRhYmxlCisJJiYgYy0+YXR0 ci5mbGF2b3IgIT0gRkxfUFJPQ0VEVVJFKQogICAgICAgewogCWlmIChjLT50cy51LmRlcml2ZWQt PmYya19kZXJpdmVkCiAJICAgICYmIGMtPnRzLnUuZGVyaXZlZC0+ZjJrX2Rlcml2ZWQtPmZpbmFs aXplcnMpCkBAIC0xMDU5LDcgKzEwNjAsOCBAQCBmaW5hbGl6ZV9jb21wb25lbnQgKGdmY19leHBy ICpleHByLCBnZmNfc3ltYm9sICpkZXJpdmVkLCBnZmNfY29tcG9uZW50ICpjb21wLAogICAgIHsK ICAgICAgIC8qIENhbGwgRklOQUxfV1JBUFBFUiAoY29tcCk7ICAqLwogICAgICAgZ2ZjX2NvZGUg KmZpbmFsX3dyYXA7Ci0gICAgICBnZmNfc3ltYm9sICp2dGFiOworICAgICAgZ2ZjX3N5bWJvbCAq dnRhYiwgKmJ5dGVfc3RyaWRlOworICAgICAgZ2ZjX2V4cHIgKnNjYWxhciwgKnNpemVfZXhwciwg KmZpbmlfY29hcnJheV9leHByOwogICAgICAgZ2ZjX2NvbXBvbmVudCAqYzsKIAogICAgICAgdnRh YiA9IGdmY19maW5kX2Rlcml2ZWRfdnRhYiAoY29tcC0+dHMudS5kZXJpdmVkKTsKQEAgLTEwNjgs MTIgKzEwNzAsNTQgQEAgZmluYWxpemVfY29tcG9uZW50IChnZmNfZXhwciAqZXhwciwgZ2ZjX3N5 bWJvbCAqZGVyaXZlZCwgZ2ZjX2NvbXBvbmVudCAqY29tcCwKIAkgIGJyZWFrOwogCiAgICAgICBn Y2NfYXNzZXJ0IChjKTsKKworICAgICAgLyogU2V0IHNjYWxhciBhcmd1bWVudCBmb3Igc3RvcmFn ZV9zaXplLiAgKi8KKyAgICAgIGdmY19nZXRfc3ltYm9sICgiY29tcF9ieXRlX3N0cmlkZSIsIHN1 Yl9ucywgJmJ5dGVfc3RyaWRlKTsKKyAgICAgIGJ5dGVfc3RyaWRlLT50cyA9IGUtPnRzOworICAg ICAgYnl0ZV9zdHJpZGUtPmF0dHIuZmxhdm9yID0gRkxfVkFSSUFCTEU7CisgICAgICBieXRlX3N0 cmlkZS0+YXR0ci52YWx1ZSA9IDE7CisgICAgICBieXRlX3N0cmlkZS0+YXR0ci5hcnRpZmljaWFs ID0gMTsKKyAgICAgIGdmY19zZXRfc3ltX3JlZmVyZW5jZWQgKGJ5dGVfc3RyaWRlKTsKKyAgICAg IGdmY19jb21taXRfc3ltYm9sIChieXRlX3N0cmlkZSk7CisgICAgICBzY2FsYXIgPSBnZmNfbHZh bF9leHByX2Zyb21fc3ltIChieXRlX3N0cmlkZSk7CisKICAgICAgIGZpbmFsX3dyYXAgPSBnZmNf Z2V0X2NvZGUgKEVYRUNfQ0FMTCk7CiAgICAgICBmaW5hbF93cmFwLT5zeW10cmVlID0gYy0+aW5p dGlhbGl6ZXItPnN5bXRyZWU7CiAgICAgICBmaW5hbF93cmFwLT5yZXNvbHZlZF9zeW0gPSBjLT5p bml0aWFsaXplci0+c3ltdHJlZS0+bi5zeW07CiAgICAgICBmaW5hbF93cmFwLT5leHQuYWN0dWFs ID0gZ2ZjX2dldF9hY3R1YWxfYXJnbGlzdCAoKTsKICAgICAgIGZpbmFsX3dyYXAtPmV4dC5hY3R1 YWwtPmV4cHIgPSBlOwogCisgICAgICAvKiBzaXplX2V4cHIgPSBTVE9SQUdFX1NJWkUgKC4uLikg LyBOVU1FUklDX1NUT1JBR0VfU0laRS4gICovCisgICAgICBzaXplX2V4cHIgPSBnZmNfZ2V0X2V4 cHIgKCk7CisgICAgICBzaXplX2V4cHItPndoZXJlID0gZ2ZjX2N1cnJlbnRfbG9jdXM7CisgICAg ICBzaXplX2V4cHItPmV4cHJfdHlwZSA9IEVYUFJfT1A7CisgICAgICBzaXplX2V4cHItPnZhbHVl Lm9wLm9wID0gSU5UUklOU0lDX0RJVklERTsKKworICAgICAgLyogU1RPUkFHRV9TSVpFIChhcnJh eSxraW5kPWNfaW50cHRyX3QpLiAgKi8KKyAgICAgIHNpemVfZXhwci0+dmFsdWUub3Aub3AxCisJ PSBnZmNfYnVpbGRfaW50cmluc2ljX2NhbGwgKHN1Yl9ucywgR0ZDX0lTWU1fU1RPUkFHRV9TSVpF LAorCQkJCSAgICAic3RvcmFnZV9zaXplIiwgZ2ZjX2N1cnJlbnRfbG9jdXMsIDIsCisJCQkJICAg IHNjYWxhciwKKwkJCQkgICAgZ2ZjX2dldF9pbnRfZXhwciAoZ2ZjX2luZGV4X2ludGVnZXJfa2lu ZCwKKwkJCQkJCSAgICAgIE5VTEwsIDApKTsKKworICAgICAgLyogTlVNRVJJQ19TVE9SQUdFX1NJ WkUuICAqLworICAgICAgc2l6ZV9leHByLT52YWx1ZS5vcC5vcDIgPSBnZmNfZ2V0X2ludF9leHBy IChnZmNfaW5kZXhfaW50ZWdlcl9raW5kLCBOVUxMLAorCQkJCQkJICBnZmNfY2hhcmFjdGVyX3N0 b3JhZ2Vfc2l6ZSk7CisgICAgICBzaXplX2V4cHItPnZhbHVlLm9wLm9wMS0+dHMgPSBzaXplX2V4 cHItPnZhbHVlLm9wLm9wMi0+dHM7CisgICAgICBzaXplX2V4cHItPnRzID0gc2l6ZV9leHByLT52 YWx1ZS5vcC5vcDEtPnRzOworCisgICAgICAvKiBXaGljaCBwcm92aWRlcyB0aGUgYXJndW1lbnQg J2J5dGVfc3RyaWRlJy4uLi4uICAqLworICAgICAgZmluYWxfd3JhcC0+ZXh0LmFjdHVhbC0+bmV4 dCA9IGdmY19nZXRfYWN0dWFsX2FyZ2xpc3QgKCk7CisgICAgICBmaW5hbF93cmFwLT5leHQuYWN0 dWFsLT5uZXh0LT5leHByID0gc2l6ZV9leHByOworCisgICAgICAvKiAuLi5hbmQgbGFzdCBvZiBh bGwgdGhlICdmaW5pX2NvYXJyYXknIGFyZ3VtZW50LiAgKi8KKyAgICAgIGZpbmlfY29hcnJheV9l eHByID0gZ2ZjX2x2YWxfZXhwcl9mcm9tX3N5bSAoZmluaV9jb2FycmF5KTsKKyAgICAgIGZpbmFs X3dyYXAtPmV4dC5hY3R1YWwtPm5leHQtPm5leHQgPSBnZmNfZ2V0X2FjdHVhbF9hcmdsaXN0ICgp OworICAgICAgZmluYWxfd3JhcC0+ZXh0LmFjdHVhbC0+bmV4dC0+bmV4dC0+ZXhwciA9IGZpbmlf Y29hcnJheV9leHByOworCisKKwogICAgICAgaWYgKCpjb2RlKQogCXsKIAkgICgqY29kZSktPm5l eHQgPSBmaW5hbF93cmFwOwpAQCAtMTQzMCw4ICsxNDc0LDYgQEAgZmluYWxpemVyX2luc2VydF9w YWNrZWRfY2FsbCAoZ2ZjX2NvZGUgKmJsb2NrLCBnZmNfZmluYWxpemVyICpmaW5pLAogICBibG9j ay0+bmV4dC0+cmVzb2x2ZWRfc3ltID0gZmluaS0+cHJvY190cmVlLT5uLnN5bTsKICAgYmxvY2st Pm5leHQtPmV4dC5hY3R1YWwgPSBnZmNfZ2V0X2FjdHVhbF9hcmdsaXN0ICgpOwogICBibG9jay0+ bmV4dC0+ZXh0LmFjdHVhbC0+ZXhwciA9IGdmY19sdmFsX2V4cHJfZnJvbV9zeW0gKGFycmF5KTsK LSAgYmxvY2stPm5leHQtPmV4dC5hY3R1YWwtPm5leHQgPSBnZmNfZ2V0X2FjdHVhbF9hcmdsaXN0 ICgpOwotICBibG9jay0+bmV4dC0+ZXh0LmFjdHVhbC0+bmV4dC0+ZXhwciA9IGdmY19jb3B5X2V4 cHIgKHNpemVfZXhwcik7CiAKICAgLyogRUxTRS4gICovCiAKZGlmZiAtLWdpdCBhL2djYy9mb3J0 cmFuL3Jlc29sdmUuY2MgYi9nY2MvZm9ydHJhbi9yZXNvbHZlLmNjCmluZGV4IDgzNWE0NzgzNzE4 Li5mZTE3ZGYyZjczZCAxMDA2NDQKLS0tIGEvZ2NjL2ZvcnRyYW4vcmVzb2x2ZS5jYworKysgYi9n Y2MvZm9ydHJhbi9yZXNvbHZlLmNjCkBAIC0xMDUxMiw2ICsxMDUxMiwxMCBAQCByZXNvbHZlX3do ZXJlIChnZmNfY29kZSAqY29kZSwgZ2ZjX2V4cHIgKm1hc2spCiAJICAgICAgaWYgKGUgJiYgIXJl c29sdmVfd2hlcmVfc2hhcGUgKGNuZXh0LT5leHByMSwgZSkpCiAJICAgICAgIGdmY19lcnJvciAo IldIRVJFIGFzc2lnbm1lbnQgdGFyZ2V0IGF0ICVMIGhhcyAiCiAJCQkgICJpbmNvbnNpc3RlbnQg c2hhcGUiLCAmY25leHQtPmV4cHIxLT53aGVyZSk7CisKKwkgICAgICBpZiAoY25leHQtPm9wID09 IEVYRUNfQVNTSUdOKQorCQljbmV4dC0+ZXhwcjEtPm11c3RfZmluYWxpemUgPSAxOworCiAJICAg ICAgYnJlYWs7CiAKIApAQCAtMTA1OTksNiArMTA2MDMsMTAgQEAgZ2ZjX3Jlc29sdmVfd2hlcmVf Y29kZV9pbl9mb3JhbGwgKGdmY19jb2RlICpjb2RlLCBpbnQgbnZhciwKIAkgICAgLyogV0hFUkUg YXNzaWdubWVudCBzdGF0ZW1lbnQgKi8KIAkgICAgY2FzZSBFWEVDX0FTU0lHTjoKIAkgICAgICBn ZmNfcmVzb2x2ZV9hc3NpZ25faW5fZm9yYWxsIChjbmV4dCwgbnZhciwgdmFyX2V4cHIpOworCisJ ICAgICAgaWYgKGNuZXh0LT5vcCA9PSBFWEVDX0FTU0lHTikKKwkJY25leHQtPmV4cHIxLT5tdXN0 X2ZpbmFsaXplID0gMTsKKwogCSAgICAgIGJyZWFrOwogCiAJICAgIC8qIFdIRVJFIG9wZXJhdG9y IGFzc2lnbm1lbnQgc3RhdGVtZW50ICovCkBAIC0xMDY0NSw2ICsxMDY1MywxMCBAQCBnZmNfcmVz b2x2ZV9mb3JhbGxfYm9keSAoZ2ZjX2NvZGUgKmNvZGUsIGludCBudmFyLCBnZmNfZXhwciAqKnZh cl9leHByKQogCWNhc2UgRVhFQ19BU1NJR046CiAJY2FzZSBFWEVDX1BPSU5URVJfQVNTSUdOOgog CSAgZ2ZjX3Jlc29sdmVfYXNzaWduX2luX2ZvcmFsbCAoYywgbnZhciwgdmFyX2V4cHIpOworCisJ ICBpZiAoYy0+b3AgPT0gRVhFQ19BU1NJR04pCisJICAgIGMtPmV4cHIxLT5tdXN0X2ZpbmFsaXpl ID0gMTsKKwogCSAgYnJlYWs7CiAKIAljYXNlIEVYRUNfQVNTSUdOX0NBTEw6CkBAIC0xMTMyNCw2 ICsxMTMzNiw3IEBAIGdldF90ZW1wX2Zyb21fZXhwciAoZ2ZjX2V4cHIgKmUsIGdmY19uYW1lc3Bh Y2UgKm5zKQogICB0bXAtPm4uc3ltLT5hdHRyLnVzZV9hc3NvYyA9IDA7CiAgIHRtcC0+bi5zeW0t PmF0dHIuaW50ZW50ID0gSU5URU5UX1VOS05PV047CiAKKwogICBpZiAoYXMpCiAgICAgewogICAg ICAgdG1wLT5uLnN5bS0+YXMgPSBnZmNfY29weV9hcnJheV9zcGVjIChhcyk7CkBAIC0xMjA2OSw2 ICsxMjA4Miw5IEBAIHN0YXJ0OgogCSAgICAgICYmIGNvZGUtPmV4cHIxLT50cy51LmRlcml2ZWQt PmF0dHIuZGVmaW5lZF9hc3NpZ25fY29tcCkKIAkgICAgZ2VuZXJhdGVfY29tcG9uZW50X2Fzc2ln bm1lbnRzICgmY29kZSwgbnMpOwogCisJICBpZiAoY29kZS0+b3AgPT0gRVhFQ19BU1NJR04pCisJ ICAgIGNvZGUtPmV4cHIxLT5tdXN0X2ZpbmFsaXplID0gMTsKKwogCSAgYnJlYWs7CiAKIAljYXNl IEVYRUNfTEFCRUxfQVNTSUdOOgpkaWZmIC0tZ2l0IGEvZ2NjL2ZvcnRyYW4vdHJhbnMtYXJyYXku Y2MgYi9nY2MvZm9ydHJhbi90cmFucy1hcnJheS5jYwppbmRleCBjZmI2ZWFjMTFjNy4uNjg5NjI4 ZTFjYjYgMTAwNjQ0Ci0tLSBhL2djYy9mb3J0cmFuL3RyYW5zLWFycmF5LmNjCisrKyBiL2djYy9m b3J0cmFuL3RyYW5zLWFycmF5LmNjCkBAIC05OTQsOSArOTk0LDkgQEAgZ2ZjX2dldF9hcnJheV9z cGFuICh0cmVlIGRlc2MsIGdmY19leHByICpleHByKQogICAgICAgaWYgKHRtcCAmJiBUUkVFX0NP REUgKHRtcCkgPT0gQVJSQVlfVFlQRSAmJiBUWVBFX1NUUklOR19GTEFHICh0bXApKQogCXsKIAkg IGdjY19hc3NlcnQgKGV4cHItPnRzLnR5cGUgPT0gQlRfQ0hBUkFDVEVSKTsKLQkgIAorCiAJICB0 bXAgPSBnZmNfZ2V0X2NoYXJhY3Rlcl9sZW5faW5fYnl0ZXMgKHRtcCk7Ci0JICAKKwogCSAgaWYg KHRtcCA9PSBOVUxMX1RSRUUgfHwgaW50ZWdlcl96ZXJvcCAodG1wKSkKIAkgICAgewogCSAgICAg IHRyZWUgYnM7CkBAIC0xMDA3LDcgKzEwMDcsNyBAQCBnZmNfZ2V0X2FycmF5X3NwYW4gKHRyZWUg ZGVzYywgZ2ZjX2V4cHIgKmV4cHIpCiAJICAgICAgdG1wID0gZm9sZF9idWlsZDJfbG9jIChpbnB1 dF9sb2NhdGlvbiwgTVVMVF9FWFBSLAogCQkJCSAgICAgZ2ZjX2FycmF5X2luZGV4X3R5cGUsIHRt cCwgYnMpOwogCSAgICB9Ci0JICAKKwogCSAgdG1wID0gKHRtcCAmJiAhaW50ZWdlcl96ZXJvcCAo dG1wKSkKIAkgICAgPyAoZm9sZF9jb252ZXJ0IChnZmNfYXJyYXlfaW5kZXhfdHlwZSwgdG1wKSkg OiAoTlVMTF9UUkVFKTsKIAl9CkBAIC03NDc4LDcgKzc0NzgsNyBAQCBnZmNfY29udl9leHByX2Rl c2NyaXB0b3IgKGdmY19zZSAqc2UsIGdmY19leHByICpleHByKQogCiAgIGlmICghc2UtPmRpcmVj dF9ieXJlZikKICAgICBzZS0+dW5saW1pdGVkX3BvbHltb3JwaGljID0gVU5MSU1JVEVEX1BPTFkg KGV4cHIpOwotICAKKwogICAvKiBTcGVjaWFsIGNhc2UgdGhpbmdzIHdlIGtub3cgd2UgY2FuIHBh c3MgZWFzaWx5LiAgKi8KICAgc3dpdGNoIChleHByLT5leHByX3R5cGUpCiAgICAgewpAQCAtODkx MCw3ICs4OTEwLDggQEAgZ2ZjX2NhZl9pc19kZWFsbG9jX29ubHkgKGludCBjYWZfbW9kZSkKIAog LyogUmVjdXJzaXZlbHkgdHJhdmVyc2UgYW4gb2JqZWN0IG9mIGRlcml2ZWQgdHlwZSwgZ2VuZXJh dGluZyBjb2RlIHRvCiAgICBkZWFsbG9jYXRlLCBudWxsaWZ5IG9yIGNvcHkgYWxsb2NhdGFibGUg Y29tcG9uZW50cy4gIFRoaXMgaXMgdGhlIHdvcmsgaG9yc2UKLSAgIGZ1bmN0aW9uIGZvciB0aGUg ZnVuY3Rpb25zIG5hbWVkIGluIHRoaXMgZW51bS4gICovCisgICBmdW5jdGlvbiBmb3IgdGhlIGZ1 bmN0aW9ucyBuYW1lZCBpbiB0aGlzIGVudW0uICBXaGVuIGRlbF9wdHJzIGlzIHNldCB3aXRoCisg ICBDT1BZX0FMTE9DX0NPTVAsIHBvaW50ZXJzIGFyZSBudWxsaWZpZWQuICAqLwogCiBlbnVtIHtE RUFMTE9DQVRFX0FMTE9DX0NPTVAgPSAxLCBOVUxMSUZZX0FMTE9DX0NPTVAsCiAgICAgICBDT1BZ X0FMTE9DX0NPTVAsIENPUFlfT05MWV9BTExPQ19DT01QLCBSRUFTU0lHTl9DQUZfQ09NUCwKQEAg LTg5MjAsOSArODkyMSwxMSBAQCBlbnVtIHtERUFMTE9DQVRFX0FMTE9DX0NPTVAgPSAxLCBOVUxM SUZZX0FMTE9DX0NPTVAsCiBzdGF0aWMgZ2ZjX2FjdHVhbF9hcmdsaXN0ICpwZHRfcGFyYW1fbGlz dDsKIAogc3RhdGljIHRyZWUKLXN0cnVjdHVyZV9hbGxvY19jb21wcyAoZ2ZjX3N5bWJvbCAqIGRl cl90eXBlLCB0cmVlIGRlY2wsCi0JCSAgICAgICB0cmVlIGRlc3QsIGludCByYW5rLCBpbnQgcHVy cG9zZSwgaW50IGNhZl9tb2RlLAotCQkgICAgICAgZ2ZjX2NvX3N1YnJvdXRpbmVzX2FyZ3MgKmFy Z3MpCitzdHJ1Y3R1cmVfYWxsb2NfY29tcHMgKGdmY19zeW1ib2wgKiBkZXJfdHlwZSwgdHJlZSBk ZWNsLCB0cmVlIGRlc3QsCisJCSAgICAgICBpbnQgcmFuaywgaW50IHB1cnBvc2UsIGludCBjYWZf bW9kZSwKKwkJICAgICAgIGdmY19jb19zdWJyb3V0aW5lc19hcmdzICphcmdzLAorCQkgICAgICAg Ym9vbCBub19maW5hbGl6YXRpb24gPSBmYWxzZSwKKwkJICAgICAgIGJvb2wgZGVsX3B0cnMgPSBm YWxzZSkKIHsKICAgZ2ZjX2NvbXBvbmVudCAqYzsKICAgZ2ZjX2xvb3BpbmZvIGxvb3A7CkBAIC05 MDEwLDExICs5MDEzLDEyIEBAIHN0cnVjdHVyZV9hbGxvY19jb21wcyAoZ2ZjX3N5bWJvbCAqIGRl cl90eXBlLCB0cmVlIGRlY2wsCiAJCQkJCSAgICAgZ2ZjX2NvbnZfYXJyYXlfZGF0YSAoZGVzdCkp OwogCSAgZHJlZiA9IGdmY19idWlsZF9hcnJheV9yZWYgKHRtcCwgaW5kZXgsIE5VTEwpOwogCSAg dG1wID0gc3RydWN0dXJlX2FsbG9jX2NvbXBzIChkZXJfdHlwZSwgdnJlZiwgZHJlZiwgcmFuaywK LQkJCQkgICAgICAgQ09QWV9BTExPQ19DT01QLCBjYWZfbW9kZSwgYXJncyk7CisJCQkJICAgICAg IENPUFlfQUxMT0NfQ09NUCwgY2FmX21vZGUsIGFyZ3MsCisJCQkJICAgICAgIG5vX2ZpbmFsaXph dGlvbik7CiAJfQogICAgICAgZWxzZQogCXRtcCA9IHN0cnVjdHVyZV9hbGxvY19jb21wcyAoZGVy X3R5cGUsIHZyZWYsIE5VTExfVFJFRSwgcmFuaywgcHVycG9zZSwKLQkJCQkgICAgIGNhZl9tb2Rl LCBhcmdzKTsKKwkJCQkgICAgIGNhZl9tb2RlLCBhcmdzLCBub19maW5hbGl6YXRpb24pOwogCiAg ICAgICBnZmNfYWRkX2V4cHJfdG9fYmxvY2sgKCZsb29wYm9keSwgdG1wKTsKIApAQCAtOTA0OCwx MyArOTA1MiwxNSBAQCBzdHJ1Y3R1cmVfYWxsb2NfY29tcHMgKGdmY19zeW1ib2wgKiBkZXJfdHlw ZSwgdHJlZSBkZWNsLAogICBpZiAocHVycG9zZSA9PSBERUFMTE9DQVRFX0FMTE9DX0NPTVAgJiYg ZGVyX3R5cGUtPmF0dHIucGR0X3R5cGUpCiAgICAgewogICAgICAgdG1wID0gc3RydWN0dXJlX2Fs bG9jX2NvbXBzIChkZXJfdHlwZSwgZGVjbCwgTlVMTF9UUkVFLCByYW5rLAotCQkJCSAgIERFQUxM T0NBVEVfUERUX0NPTVAsIDAsIGFyZ3MpOworCQkJCSAgIERFQUxMT0NBVEVfUERUX0NPTVAsIDAs IGFyZ3MsCisJCQkJICAgbm9fZmluYWxpemF0aW9uKTsKICAgICAgIGdmY19hZGRfZXhwcl90b19i bG9jayAoJmZuYmxvY2ssIHRtcCk7CiAgICAgfQogICBlbHNlIGlmIChwdXJwb3NlID09IEFMTE9D QVRFX1BEVF9DT01QICYmIGRlcl90eXBlLT5hdHRyLmFsbG9jX2NvbXApCiAgICAgewogICAgICAg dG1wID0gc3RydWN0dXJlX2FsbG9jX2NvbXBzIChkZXJfdHlwZSwgZGVjbCwgTlVMTF9UUkVFLCBy YW5rLAotCQkJCSAgIE5VTExJRllfQUxMT0NfQ09NUCwgMCwgYXJncyk7CisJCQkJICAgTlVMTElG WV9BTExPQ19DT01QLCAwLCBhcmdzLAorCQkJCSAgIG5vX2ZpbmFsaXphdGlvbik7CiAgICAgICBn ZmNfYWRkX2V4cHJfdG9fYmxvY2sgKCZmbmJsb2NrLCB0bXApOwogICAgIH0KIApAQCAtOTExNiw3 ICs5MTIyLDcgQEAgc3RydWN0dXJlX2FsbG9jX2NvbXBzIChnZmNfc3ltYm9sICogZGVyX3R5cGUs IHRyZWUgZGVjbCwKIAkJICBhZGRfd2hlbl9hbGxvY2F0ZWQKIAkJICAgICAgPSBzdHJ1Y3R1cmVf YWxsb2NfY29tcHMgKENMQVNTX0RBVEEgKGMpLT50cy51LmRlcml2ZWQsCiAJCQkJCSAgICAgICBj b21wLCBOVUxMX1RSRUUsIHJhbmssIHB1cnBvc2UsCi0JCQkJCSAgICAgICBjYWZfbW9kZSwgYXJn cyk7CisJCQkJCSAgICAgICBjYWZfbW9kZSwgYXJncywgbm9fZmluYWxpemF0aW9uKTsKIAkJfQog CSAgICAgIGVsc2UKIAkJewpAQCAtOTEyNCw3ICs5MTMwLDggQEAgc3RydWN0dXJlX2FsbG9jX2Nv bXBzIChnZmNfc3ltYm9sICogZGVyX3R5cGUsIHRyZWUgZGVjbCwKIAkJICBhZGRfd2hlbl9hbGxv Y2F0ZWQgPSBzdHJ1Y3R1cmVfYWxsb2NfY29tcHMgKGMtPnRzLnUuZGVyaXZlZCwKIAkJCQkJCQkg ICAgICBjb21wLCBOVUxMX1RSRUUsCiAJCQkJCQkJICAgICAgcmFuaywgcHVycG9zZSwKLQkJCQkJ CQkgICAgICBjYWZfbW9kZSwgYXJncyk7CisJCQkJCQkJICAgICAgY2FmX21vZGUsIGFyZ3MsCisJ CQkJCQkJICAgICAgbm9fZmluYWxpemF0aW9uKTsKIAkJfQogCSAgICB9CiAKQEAgLTkyNDAsOCAr OTI0Nyw4IEBAIHN0cnVjdHVyZV9hbGxvY19jb21wcyAoZ2ZjX3N5bWJvbCAqIGRlcl90eXBlLCB0 cmVlIGRlY2wsCiAJCWNvbnRpbnVlOwogCSAgICB9CiAKLQkgIGlmICgoYy0+dHMudHlwZSA9PSBC VF9ERVJJVkVEICYmICFjLT5hdHRyLnBvaW50ZXIpCi0JICAgICB8fCAoYy0+dHMudHlwZSA9PSBC VF9DTEFTUyAmJiAhQ0xBU1NfREFUQSAoYyktPmF0dHIuY2xhc3NfcG9pbnRlcikpCisJICBpZiAo IW5vX2ZpbmFsaXphdGlvbiAmJiAoKGMtPnRzLnR5cGUgPT0gQlRfREVSSVZFRCAmJiAhYy0+YXR0 ci5wb2ludGVyKQorCSAgICAgfHwgKGMtPnRzLnR5cGUgPT0gQlRfQ0xBU1MgJiYgIUNMQVNTX0RB VEEgKGMpLT5hdHRyLmNsYXNzX3BvaW50ZXIpKSkKIAkgICAgLyogQ2FsbCB0aGUgZmluYWxpemVy LCB3aGljaCB3aWxsIGZyZWUgdGhlIG1lbW9yeSBhbmQgbnVsbGlmeSB0aGUKIAkgICAgICAgcG9p bnRlciBvZiBhbiBhcnJheS4gICovCiAJICAgIGRlYWxsb2NhdGVfY2FsbGVkID0gZ2ZjX2FkZF9j b21wX2ZpbmFsaXplcl9jYWxsICgmdG1wYmxvY2ssIGNvbXAsIGMsCkBAIC05MjY5LDcgKzkyNzYs NyBAQCBzdHJ1Y3R1cmVfYWxsb2NfY29tcHMgKGdmY19zeW1ib2wgKiBkZXJfdHlwZSwgdHJlZSBk ZWNsLAogCQkgIGFkZF93aGVuX2FsbG9jYXRlZAogCQkgICAgICA9IHN0cnVjdHVyZV9hbGxvY19j b21wcyAoQ0xBU1NfREFUQSAoYyktPnRzLnUuZGVyaXZlZCwKIAkJCQkJICAgICAgIGNvbXAsIE5V TExfVFJFRSwgcmFuaywgcHVycG9zZSwKLQkJCQkJICAgICAgIGNhZl9tb2RlLCBhcmdzKTsKKwkJ CQkJICAgICAgIGNhZl9tb2RlLCBhcmdzLCBub19maW5hbGl6YXRpb24pOwogCQl9CiAJICAgICAg ZWxzZQogCQl7CkBAIC05Mjc3LDcgKzkyODQsOCBAQCBzdHJ1Y3R1cmVfYWxsb2NfY29tcHMgKGdm Y19zeW1ib2wgKiBkZXJfdHlwZSwgdHJlZSBkZWNsLAogCQkgIGFkZF93aGVuX2FsbG9jYXRlZCA9 IHN0cnVjdHVyZV9hbGxvY19jb21wcyAoYy0+dHMudS5kZXJpdmVkLAogCQkJCQkJCSAgICAgIGNv bXAsIE5VTExfVFJFRSwKIAkJCQkJCQkgICAgICByYW5rLCBwdXJwb3NlLAotCQkJCQkJCSAgICAg IGNhZl9tb2RlLCBhcmdzKTsKKwkJCQkJCQkgICAgICBjYWZfbW9kZSwgYXJncywKKwkJCQkJCQkg ICAgICBub19maW5hbGl6YXRpb24pOwogCQl9CiAJICAgIH0KIApAQCAtOTU3NSw3ICs5NTgzLDgg QEAgc3RydWN0dXJlX2FsbG9jX2NvbXBzIChnZmNfc3ltYm9sICogZGVyX3R5cGUsIHRyZWUgZGVj bCwKIAkJCQkgICAgICBkZWNsLCBjZGVjbCwgTlVMTF9UUkVFKTsKIAkgICAgICByYW5rID0gYy0+ YXMgPyBjLT5hcy0+cmFuayA6IDA7CiAJICAgICAgdG1wID0gc3RydWN0dXJlX2FsbG9jX2NvbXBz IChjLT50cy51LmRlcml2ZWQsIGNvbXAsIE5VTExfVFJFRSwKLQkJCQkJICAgcmFuaywgcHVycG9z ZSwgY2FmX21vZGUsIGFyZ3MpOworCQkJCQkgICByYW5rLCBwdXJwb3NlLCBjYWZfbW9kZSwgYXJn cywKKwkJCQkJICAgbm9fZmluYWxpemF0aW9uKTsKIAkgICAgICBnZmNfYWRkX2V4cHJfdG9fYmxv Y2sgKCZmbmJsb2NrLCB0bXApOwogCSAgICB9CiAJICBicmVhazsKQEAgLTk2MTEsMTQgKzk2MjAs MTQgQEAgc3RydWN0dXJlX2FsbG9jX2NvbXBzIChnZmNfc3ltYm9sICogZGVyX3R5cGUsIHRyZWUg ZGVjbCwKIAkJICB0bXAgPSBzdHJ1Y3R1cmVfYWxsb2NfY29tcHMgKGMtPnRzLnUuZGVyaXZlZCwg Y29tcCwgZGNtcCwKIAkJCQkJICAgICAgIHJhbmssIHB1cnBvc2UsIGNhZl9tb2RlCiAJCQkJCSAg ICAgICB8IEdGQ19TVFJVQ1RVUkVfQ0FGX01PREVfSU5fQ09BUlJBWSwKLQkJCQkJICAgICAgIGFy Z3MpOworCQkJCQkgICAgICAgYXJncywgbm9fZmluYWxpemF0aW9uKTsKIAkJICBnZmNfYWRkX2V4 cHJfdG9fYmxvY2sgKCZmbmJsb2NrLCB0bXApOwogCQl9CiAJICAgIH0KIAkgIGJyZWFrOwogCiAJ Y2FzZSBDT1BZX0FMTE9DX0NPTVA6Ci0JICBpZiAoYy0+YXR0ci5wb2ludGVyIHx8IGMtPmF0dHIu cHJvY19wb2ludGVyKQorCSAgaWYgKChjLT5hdHRyLnBvaW50ZXIgJiYgIWRlbF9wdHJzKSB8fCBj LT5hdHRyLnByb2NfcG9pbnRlcikKIAkgICAgY29udGludWU7CiAKIAkgIC8qIFdlIG5lZWQgc291 cmNlIGFuZCBkZXN0aW5hdGlvbiBjb21wb25lbnRzLiAgKi8KQEAgLTk2NjAsNiArOTY2OSwxMyBA QCBzdHJ1Y3R1cmVfYWxsb2NfY29tcHMgKGdmY19zeW1ib2wgKiBkZXJfdHlwZSwgdHJlZSBkZWNs LAogCQkgIGRzdF9kYXRhID0gZ2ZjX2NvbnZfZGVzY3JpcHRvcl9kYXRhX2dldCAoZHN0X2RhdGEp OwogCQl9CiAKKwkgICAgICBpZiAoQ0xBU1NfREFUQSAoYyktPmF0dHIucG9pbnRlcikKKwkJewor CQkgIGdmY19hZGRfbW9kaWZ5ICgmZm5ibG9jaywgZHN0X2RhdGEsCisJCQkJICBidWlsZF9pbnRf Y3N0IChUUkVFX1RZUEUgKGRzdF9kYXRhKSwgMCkpOworCQkgIGNvbnRpbnVlOworCQl9CisKIAkg ICAgICBnZmNfaW5pdF9ibG9jayAoJnRtcGJsb2NrKTsKIAogCSAgICAgIGdmY19hZGRfbW9kaWZ5 ICgmdG1wYmxvY2ssIGdmY19jbGFzc192cHRyX2dldCAoZGNtcCksCkBAIC05NzA2LDYgKzk3MjIs MTcgQEAgc3RydWN0dXJlX2FsbG9jX2NvbXBzIChnZmNfc3ltYm9sICogZGVyX3R5cGUsIHRyZWUg ZGVjbCwKIAkJCQkJCQkgdG1wLCBudWxsX2RhdGEpKTsKIAkgICAgICBjb250aW51ZTsKIAkgICAg fQorCSAgZWxzZSBpZiAoYy0+YXR0ci5wb2ludGVyKQorCSAgICB7CisJICAgICAgaWYgKGMtPmF0 dHIuZGltZW5zaW9uKQorCQl0bXAgPSBnZmNfY29udl9kZXNjcmlwdG9yX2RhdGFfZ2V0IChkY21w KTsKKwkgICAgICBlbHNlCisJCXRtcCA9IGRjbXA7CisJICAgICAgZ2ZjX2FkZF9tb2RpZnkgKCZm bmJsb2NrLCB0bXAsCisJCQkgICAgICBidWlsZF9pbnRfY3N0IChUUkVFX1RZUEUgKHRtcCksIDAp KTsKKwkgICAgICBjb250aW51ZTsKKwkgICAgfQorCiAKIAkgIC8qIFRvIGltcGxlbWVudCBndWFy ZGVkIGRlZXAgY29weSwgaS5lLiwgZGVlcCBjb3B5IG9ubHkgYWxsb2NhdGFibGUKIAkgICAgIGNv bXBvbmVudHMgdGhhdCBhcmUgcmVhbGx5IGFsbG9jYXRlZCwgdGhlIGRlZXAgY29weSBjb2RlIGhh cyB0bwpAQCAtOTcxOSw3ICs5NzQ2LDggQEAgc3RydWN0dXJlX2FsbG9jX2NvbXBzIChnZmNfc3lt Ym9sICogZGVyX3R5cGUsIHRyZWUgZGVjbCwKIAkgICAgICBhZGRfd2hlbl9hbGxvY2F0ZWQgPSBz dHJ1Y3R1cmVfYWxsb2NfY29tcHMgKGMtPnRzLnUuZGVyaXZlZCwKIAkJCQkJCQkgIGNvbXAsIGRj bXAsCiAJCQkJCQkJICByYW5rLCBwdXJwb3NlLAotCQkJCQkJCSAgY2FmX21vZGUsIGFyZ3MpOwor CQkJCQkJCSAgY2FmX21vZGUsIGFyZ3MsCisJCQkJCQkJICBub19maW5hbGl6YXRpb24pOwogCSAg ICB9CiAJICBlbHNlCiAJICAgIGFkZF93aGVuX2FsbG9jYXRlZCA9IE5VTExfVFJFRTsKQEAgLTEw MDkyLDcgKzEwMTIwLDggQEAgZ2ZjX251bGxpZnlfYWxsb2NfY29tcCAoZ2ZjX3N5bWJvbCAqIGRl cl90eXBlLCB0cmVlIGRlY2wsIGludCByYW5rLAogewogICByZXR1cm4gc3RydWN0dXJlX2FsbG9j X2NvbXBzIChkZXJfdHlwZSwgZGVjbCwgTlVMTF9UUkVFLCByYW5rLAogCQkJCU5VTExJRllfQUxM T0NfQ09NUCwKLQkJCQlHRkNfU1RSVUNUVVJFX0NBRl9NT0RFX0VOQUJMRV9DT0FSUkFZIHwgY2Fm X21vZGUsIE5VTEwpOworCQkJCUdGQ19TVFJVQ1RVUkVfQ0FGX01PREVfRU5BQkxFX0NPQVJSQVkg fCBjYWZfbW9kZSwKKwkJCQlOVUxMKTsKIH0KIAogCkBAIC0xMDEwNSw3ICsxMDEzNCw4IEBAIGdm Y19kZWFsbG9jYXRlX2FsbG9jX2NvbXAgKGdmY19zeW1ib2wgKiBkZXJfdHlwZSwgdHJlZSBkZWNs LCBpbnQgcmFuaywKIHsKICAgcmV0dXJuIHN0cnVjdHVyZV9hbGxvY19jb21wcyAoZGVyX3R5cGUs IGRlY2wsIE5VTExfVFJFRSwgcmFuaywKIAkJCQlERUFMTE9DQVRFX0FMTE9DX0NPTVAsCi0JCQkJ R0ZDX1NUUlVDVFVSRV9DQUZfTU9ERV9FTkFCTEVfQ09BUlJBWSB8IGNhZl9tb2RlLCBOVUxMKTsK KwkJCQlHRkNfU1RSVUNUVVJFX0NBRl9NT0RFX0VOQUJMRV9DT0FSUkFZIHwgY2FmX21vZGUsCisJ CQkJTlVMTCk7CiB9CiAKIHRyZWUKQEAgLTEwMTQzLDcgKzEwMTczLDggQEAgZ2ZjX2JjYXN0X2Fs bG9jX2NvbXAgKGdmY19zeW1ib2wgKmRlcml2ZWQsIGdmY19leHByICpleHByLCBpbnQgcmFuaywK IAogICB0bXAgPSBzdHJ1Y3R1cmVfYWxsb2NfY29tcHMgKGRlcml2ZWQsIGFycmF5LCBOVUxMX1RS RUUsIHJhbmssCiAJCQkgICAgICAgQkNBU1RfQUxMT0NfQ09NUCwKLSAgCQkJICAgICAgIEdGQ19T VFJVQ1RVUkVfQ0FGX01PREVfRU5BQkxFX0NPQVJSQVksICZhcmdzKTsKKwkJCSAgICAgICBHRkNf U1RSVUNUVVJFX0NBRl9NT0RFX0VOQUJMRV9DT0FSUkFZLAorCQkJICAgICAgICZhcmdzKTsKICAg cmV0dXJuIHRtcDsKIH0KIApAQCAtMTAxNTMsMTAgKzEwMTg0LDEyIEBAIGdmY19iY2FzdF9hbGxv Y19jb21wIChnZmNfc3ltYm9sICpkZXJpdmVkLCBnZmNfZXhwciAqZXhwciwgaW50IHJhbmssCiAg ICBzdGF0dXMgb2YgY29hcnJheXMuICAqLwogCiB0cmVlCi1nZmNfZGVhbGxvY2F0ZV9hbGxvY19j b21wX25vX2NhZiAoZ2ZjX3N5bWJvbCAqIGRlcl90eXBlLCB0cmVlIGRlY2wsIGludCByYW5rKQor Z2ZjX2RlYWxsb2NhdGVfYWxsb2NfY29tcF9ub19jYWYgKGdmY19zeW1ib2wgKiBkZXJfdHlwZSwg dHJlZSBkZWNsLCBpbnQgcmFuaywKKwkJCQkgIGJvb2wgbm9fZmluYWxpemF0aW9uKQogewogICBy ZXR1cm4gc3RydWN0dXJlX2FsbG9jX2NvbXBzIChkZXJfdHlwZSwgZGVjbCwgTlVMTF9UUkVFLCBy YW5rLAotCQkJCURFQUxMT0NBVEVfQUxMT0NfQ09NUCwgMCwgTlVMTCk7CisJCQkJREVBTExPQ0FU RV9BTExPQ19DT01QLCAwLCBOVUxMLAorCQkJCW5vX2ZpbmFsaXphdGlvbik7CiB9CiAKIApAQCAt MTAxNjQsNyArMTAxOTcsOCBAQCB0cmVlCiBnZmNfcmVhc3NpZ25fYWxsb2NfY29tcF9jYWYgKGdm Y19zeW1ib2wgKmRlcl90eXBlLCB0cmVlIGRlY2wsIHRyZWUgZGVzdCkKIHsKICAgcmV0dXJuIHN0 cnVjdHVyZV9hbGxvY19jb21wcyAoZGVyX3R5cGUsIGRlY2wsIGRlc3QsIDAsIFJFQVNTSUdOX0NB Rl9DT01QLAotCQkJCUdGQ19TVFJVQ1RVUkVfQ0FGX01PREVfRU5BQkxFX0NPQVJSQVksIE5VTEwp OworCQkJCUdGQ19TVFJVQ1RVUkVfQ0FGX01PREVfRU5BQkxFX0NPQVJSQVksCisJCQkJTlVMTCk7 CiB9CiAKIApAQCAtMTAxODAsNiArMTAyMTQsMjAgQEAgZ2ZjX2NvcHlfYWxsb2NfY29tcCAoZ2Zj X3N5bWJvbCAqIGRlcl90eXBlLCB0cmVlIGRlY2wsIHRyZWUgZGVzdCwgaW50IHJhbmssCiB9CiAK IAorLyogUmVjdXJzaXZlbHkgdHJhdmVyc2UgYW4gb2JqZWN0IG9mIGRlcml2ZWQgdHlwZSwgZ2Vu ZXJhdGluZyBjb2RlIHRvCisgICBjb3B5IGl0IGFuZCBpdHMgYWxsb2NhdGFibGUgY29tcG9uZW50 cywgd2hpbGUgZGVsZXRpbmcgcG9pbnRlcnMgYW5kCisgICBzdXBwcmVzc2luZyBhbnkgZmluYWxp emF0aW9uIHRoYXQgbWlnaHQgb2NjdXIuICBUaGlzIGlzIHVzZWQgaW4gdGhlCisgICBmaW5hbGl6 dGlvbiBvZiBmdW5jdGlvbiByZXN1bHRzLiAgKi8KKwordHJlZQorZ2ZjX2NvcHlfYWxsb2NfY29t cF9kZWxfcHRycyAoZ2ZjX3N5bWJvbCAqIGRlcl90eXBlLCB0cmVlIGRlY2wsIHRyZWUgZGVzdCwK KwkJCSAgICAgIGludCByYW5rLCBpbnQgY2FmX21vZGUpCit7CisgIHJldHVybiBzdHJ1Y3R1cmVf YWxsb2NfY29tcHMgKGRlcl90eXBlLCBkZWNsLCBkZXN0LCByYW5rLCBDT1BZX0FMTE9DX0NPTVAs CisJCQkJY2FmX21vZGUsIE5VTEwsIHRydWUsIHRydWUpOworfQorCisKIC8qIFJlY3Vyc2l2ZWx5 IHRyYXZlcnNlIGFuIG9iamVjdCBvZiBkZXJpdmVkIHR5cGUsIGdlbmVyYXRpbmcgY29kZSB0bwog ICAgY29weSBvbmx5IGl0cyBhbGxvY2F0YWJsZSBjb21wb25lbnRzLiAgKi8KIApAQCAtMTA5NTAs NyArMTA5OTgsNyBAQCBnZmNfYWxsb2NfYWxsb2NhdGFibGVfZm9yX2Fzc2lnbm1lbnQgKGdmY19s b29waW5mbyAqbG9vcCwKIAkmJiBleHByMS0+dHMudS5kZXJpdmVkLT5hdHRyLmFsbG9jX2NvbXAp CiAgICAgewogICAgICAgdG1wID0gZ2ZjX2RlYWxsb2NhdGVfYWxsb2NfY29tcF9ub19jYWYgKGV4 cHIxLT50cy51LmRlcml2ZWQsIG9sZF9kZXNjLAotCQkJCQkgICAgICBleHByMS0+cmFuayk7CisJ CQkJCSAgICAgIGV4cHIxLT5yYW5rLCB0cnVlKTsKICAgICAgIGdmY19hZGRfZXhwcl90b19ibG9j ayAoJnJlYWxsb2NfYmxvY2ssIHRtcCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9nY2MvZm9ydHJh bi90cmFucy1hcnJheS5oIGIvZ2NjL2ZvcnRyYW4vdHJhbnMtYXJyYXkuaAppbmRleCAwNGZlZTYx NzU5MC4uMjc0MzE1OGNiMTEgMTAwNjQ0Ci0tLSBhL2djYy9mb3J0cmFuL3RyYW5zLWFycmF5LmgK KysrIGIvZ2NjL2ZvcnRyYW4vdHJhbnMtYXJyYXkuaApAQCAtNTYsMTEgKzU2LDE0IEBAIHRyZWUg Z2ZjX251bGxpZnlfYWxsb2NfY29tcCAoZ2ZjX3N5bWJvbCAqLCB0cmVlLCBpbnQsIGludCBjbSA9 IDApOwogdHJlZSBnZmNfZGVhbGxvY2F0ZV9hbGxvY19jb21wIChnZmNfc3ltYm9sICosIHRyZWUs IGludCwgaW50IGNtID0gMCk7CiB0cmVlIGdmY19iY2FzdF9hbGxvY19jb21wIChnZmNfc3ltYm9s ICosIGdmY19leHByICosIGludCwgdHJlZSwKIAkJCSAgIHRyZWUsIHRyZWUsIHRyZWUpOwotdHJl ZSBnZmNfZGVhbGxvY2F0ZV9hbGxvY19jb21wX25vX2NhZiAoZ2ZjX3N5bWJvbCAqLCB0cmVlLCBp bnQpOwordHJlZSBnZmNfZGVhbGxvY2F0ZV9hbGxvY19jb21wX25vX2NhZiAoZ2ZjX3N5bWJvbCAq LCB0cmVlLCBpbnQsCisJCQkJICAgICAgIGJvb2wgbm9fZmluYWxpemF0aW9uID0gZmFsc2UpOwog dHJlZSBnZmNfcmVhc3NpZ25fYWxsb2NfY29tcF9jYWYgKGdmY19zeW1ib2wgKiwgdHJlZSwgdHJl ZSk7CiAKIHRyZWUgZ2ZjX2NvcHlfYWxsb2NfY29tcCAoZ2ZjX3N5bWJvbCAqLCB0cmVlLCB0cmVl LCBpbnQsIGludCk7CiAKK3RyZWUgZ2ZjX2NvcHlfYWxsb2NfY29tcF9kZWxfcHRycyAoZ2ZjX3N5 bWJvbCAqLCB0cmVlLCB0cmVlLCBpbnQsIGludCk7CisKIHRyZWUgZ2ZjX2NvcHlfb25seV9hbGxv Y19jb21wIChnZmNfc3ltYm9sICosIHRyZWUsIHRyZWUsIGludCk7CiAKIHRyZWUgZ2ZjX2FsbG9j YXRlX3BkdF9jb21wIChnZmNfc3ltYm9sICosIHRyZWUsIGludCwgZ2ZjX2FjdHVhbF9hcmdsaXN0 ICopOwpkaWZmIC0tZ2l0IGEvZ2NjL2ZvcnRyYW4vdHJhbnMtZXhwci5jYyBiL2djYy9mb3J0cmFu L3RyYW5zLWV4cHIuY2MKaW5kZXggZWI2YTc4YzNhNjIuLjM0YWQ4NjdlMDQxIDEwMDY0NAotLS0g YS9nY2MvZm9ydHJhbi90cmFucy1leHByLmNjCisrKyBiL2djYy9mb3J0cmFuL3RyYW5zLWV4cHIu Y2MKQEAgLTE5MDQsNiArMTkwNCw3IEBAIGdmY19pbml0X3NlIChnZmNfc2UgKiBzZSwgZ2ZjX3Nl ICogcGFyZW50KQogewogICBtZW1zZXQgKHNlLCAwLCBzaXplb2YgKGdmY19zZSkpOwogICBnZmNf aW5pdF9ibG9jayAoJnNlLT5wcmUpOworICBnZmNfaW5pdF9ibG9jayAoJnNlLT5maW5hbGJsb2Nr KTsKICAgZ2ZjX2luaXRfYmxvY2sgKCZzZS0+cG9zdCk7CiAKICAgc2UtPnBhcmVudCA9IHBhcmVu dDsKQEAgLTU5NzUsNiArNTk3NiwxMTcgQEAgcG9zdF9jYWxsOgogfQogCiAKKy8qIEZpbmFsaXpl IGEgZnVuY3Rpb24gcmVzdWx0IHVzaW5nIHRoZSBmaW5hbGl6ZXIgd3JhcHBlci4gVGhlIHJlc3Vs dCBpcyBmaXhlZAorICAgaW4gb3JkZXIgdG8gcHJldmVudCByZXBlYXRlZCBjYWxscy4gICovCisK K3N0YXRpYyB2b2lkCitmaW5hbGl6ZV9mdW5jdGlvbl9yZXN1bHQgKGdmY19zZSAqc2UsIGdmY19z eW1ib2wgKmRlcml2ZWQsCisJCQkgIHN5bWJvbF9hdHRyaWJ1dGUgYXR0ciwgaW50IHJhbmspCit7 CisgIHRyZWUgdnB0ciwgZmluYWxfZm5kZWNsLCBkZXNjLCB0bXAsIHNpemUsIGlzX2ZpbmFsLCBk YXRhX3B0cjsKKyAgZ2ZjX3N5bWJvbCAqdnRhYjsKKyAgZ2ZjX3NlIHBvc3Rfc2U7CisgIGJvb2wg aXNfY2xhc3MgPSBHRkNfQ0xBU1NfVFlQRV9QIChUUkVFX1RZUEUgKHNlLT5leHByKSk7CisKKyAg aWYgKGF0dHIucG9pbnRlcikKKyAgICByZXR1cm47CisKKyAgaWYgKGlzX2NsYXNzKQorICAgIHsK KyAgICAgIGlmICghVkFSX1AgKHNlLT5leHByKSkKKwl7CisJICBkZXNjID0gZ2ZjX2V2YWx1YXRl X25vdyAoc2UtPmV4cHIsICZzZS0+cHJlKTsKKwkgIHNlLT5leHByID0gZGVzYzsKKwl9CisgICAg ICBkZXNjID0gZ2ZjX2NsYXNzX2RhdGFfZ2V0IChzZS0+ZXhwcik7CisgICAgICB2cHRyID0gZ2Zj X2NsYXNzX3ZwdHJfZ2V0IChzZS0+ZXhwcik7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAg ZGVzYyA9IGdmY19ldmFsdWF0ZV9ub3cgKHNlLT5leHByLCAmc2UtPnByZSk7CisgICAgICBzZS0+ ZXhwciA9IGdmY19ldmFsdWF0ZV9ub3cgKGRlc2MsICZzZS0+cHJlKTsKKyAgICAgIC8qIE5lZWQg dG8gY29weSBhbGxvY2F0ZWQgY29tcG9uZW50cyBhbmQgZGVsZXRlIHBvaW50ZXIgY29tcG9uZW50 cy4gICovCisgICAgICBnZmNfYWRkX2V4cHJfdG9fYmxvY2sgKCZzZS0+cHJlLAorCQkJICAgICBn ZmNfY29weV9hbGxvY19jb21wX2RlbF9wdHJzIChkZXJpdmVkLCBkZXNjLAorCQkJCQkJCSAgIHNl LT5leHByLCByYW5rLCAwKSk7CisgICAgICB2dGFiID0gZ2ZjX2ZpbmRfZGVyaXZlZF92dGFiIChk ZXJpdmVkKTsKKyAgICAgIGlmICh2dGFiLT5iYWNrZW5kX2RlY2wgPT0gTlVMTF9UUkVFKQorCXZw dHIgPSBnZmNfZ2V0X3N5bWJvbF9kZWNsICh2dGFiKTsKKyAgICAgIGVsc2UKKwl2cHRyID0gdnRh Yi0+YmFja2VuZF9kZWNsOworICAgICAgdnB0ciA9IGdmY19idWlsZF9hZGRyX2V4cHIgKE5VTEws IHZwdHIpOworICAgIH0KKworICBzaXplID0gZ2ZjX3ZwdHJfc2l6ZV9nZXQgKHZwdHIpOworICBm aW5hbF9mbmRlY2wgPSBnZmNfdnB0cl9maW5hbF9nZXQgKHZwdHIpOworICBpc19maW5hbCA9IGZv bGRfYnVpbGQyX2xvYyAoaW5wdXRfbG9jYXRpb24sIE5FX0VYUFIsCisJCQkgICAgICBsb2dpY2Fs X3R5cGVfbm9kZSwKKwkJCSAgICAgIGZpbmFsX2ZuZGVjbCwKKwkJCSAgICAgIGZvbGRfY29udmVy dCAoVFJFRV9UWVBFIChmaW5hbF9mbmRlY2wpLAorCQkJCQkgICAgbnVsbF9wb2ludGVyX25vZGUp KTsKKworICBmaW5hbF9mbmRlY2wgPSBidWlsZF9mb2xkX2luZGlyZWN0X3JlZl9sb2MgKGlucHV0 X2xvY2F0aW9uLAorCQkJCQkgICAgICBmaW5hbF9mbmRlY2wpOworICBpZiAoIUdGQ19ERVNDUklQ VE9SX1RZUEVfUCAoVFJFRV9UWVBFIChkZXNjKSkpCisgICAgeworICAgICAgaWYgKGlzX2NsYXNz KQorCWRlc2MgPSBnZmNfY29udl9zY2FsYXJfdG9fZGVzY3JpcHRvciAoc2UsIGRlc2MsIGF0dHIp OworICAgICAgZWxzZQorCXsKKwkgIGdmY19pbml0X3NlICgmcG9zdF9zZSwgTlVMTCk7CisJICBk ZXNjID0gZ2ZjX2NvbnZfc2NhbGFyX3RvX2Rlc2NyaXB0b3IgKCZwb3N0X3NlLCBkZXNjLCBhdHRy KTsKKwkgIGdmY19hZGRfZXhwcl90b19ibG9jayAoJnNlLT5wcmUsIGdmY19maW5pc2hfYmxvY2sg KCZwb3N0X3NlLnByZSkpOworCX0KKyAgICB9CisKKyAgdG1wID0gZ2ZjX2NyZWF0ZV92YXIgKFRS RUVfVFlQRSAoZGVzYyksICJyZXMiKTsKKyAgZ2ZjX2FkZF9tb2RpZnkgKCZzZS0+cHJlLCB0bXAs IGRlc2MpOworICBkZXNjID0gdG1wOworCisgIHRtcCA9IGJ1aWxkX2NhbGxfZXhwcl9sb2MgKGlu cHV0X2xvY2F0aW9uLCBmaW5hbF9mbmRlY2wsIDMsCisJCQkgICAgIGdmY19idWlsZF9hZGRyX2V4 cHIgKE5VTEwsIGRlc2MpLAorCQkJICAgICBzaXplLCBib29sZWFuX2ZhbHNlX25vZGUpOworCisg IHRtcCA9IGZvbGRfYnVpbGQzX2xvYyAoaW5wdXRfbG9jYXRpb24sIENPTkRfRVhQUiwKKwkJCSB2 b2lkX3R5cGVfbm9kZSwgaXNfZmluYWwsIHRtcCwKKwkJCSBidWlsZF9lbXB0eV9zdG10IChpbnB1 dF9sb2NhdGlvbikpOworCisgIGlmIChpc19jbGFzcyAmJiBzZS0+c3MgJiYgc2UtPnNzLT5sb29w KQorICAgIHsKKyAgICAgIGRhdGFfcHRyID0gZ2ZjX2NvbnZfZGVzY3JpcHRvcl9kYXRhX2dldCAo ZGVzYyk7CisKKyAgICAgIGdmY19hZGRfZXhwcl90b19ibG9jayAoJnNlLT5sb29wLT5wb3N0LCB0 bXApOworICAgICAgdG1wID0gZm9sZF9idWlsZDJfbG9jIChpbnB1dF9sb2NhdGlvbiwgTkVfRVhQ UiwKKwkJCSAgICAgbG9naWNhbF90eXBlX25vZGUsCisJCQkgICAgIGRhdGFfcHRyLAorCQkJICAg ICBmb2xkX2NvbnZlcnQgKFRSRUVfVFlQRSAoZGF0YV9wdHIpLAorCQkJCQkgICBudWxsX3BvaW50 ZXJfbm9kZSkpOworICAgICAgdG1wID0gZm9sZF9idWlsZDNfbG9jIChpbnB1dF9sb2NhdGlvbiwg Q09ORF9FWFBSLAorCQkJICAgICB2b2lkX3R5cGVfbm9kZSwgdG1wLAorCQkJICAgICBnZmNfY2Fs bF9mcmVlIChkYXRhX3B0ciksCisJCQkgICAgIGJ1aWxkX2VtcHR5X3N0bXQgKGlucHV0X2xvY2F0 aW9uKSk7CisgICAgICBnZmNfYWRkX2V4cHJfdG9fYmxvY2sgKCZzZS0+bG9vcC0+cG9zdCwgdG1w KTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBnZmNfYWRkX2V4cHJfdG9fYmxvY2sgKCZz ZS0+ZmluYWxibG9jaywgdG1wKTsKKyAgICAgIGlmIChpc19jbGFzcykKKwl7CisJICBkYXRhX3B0 ciA9IGdmY19jb252X2Rlc2NyaXB0b3JfZGF0YV9nZXQgKGRlc2MpOworCSAgdG1wID0gZm9sZF9i dWlsZDJfbG9jIChpbnB1dF9sb2NhdGlvbiwgTkVfRVhQUiwKKwkJCQkgbG9naWNhbF90eXBlX25v ZGUsCisJCQkJIGRhdGFfcHRyLAorCQkJCSBmb2xkX2NvbnZlcnQgKFRSRUVfVFlQRSAoZGF0YV9w dHIpLAorCQkJCQkgICAgICAgbnVsbF9wb2ludGVyX25vZGUpKTsKKwkgIHRtcCA9IGZvbGRfYnVp bGQzX2xvYyAoaW5wdXRfbG9jYXRpb24sIENPTkRfRVhQUiwKKwkJCQkgdm9pZF90eXBlX25vZGUs IHRtcCwKKwkJCQkgZ2ZjX2NhbGxfZnJlZSAoZGF0YV9wdHIpLAorCQkJCSBidWlsZF9lbXB0eV9z dG10IChpbnB1dF9sb2NhdGlvbikpOworCSAgZ2ZjX2FkZF9leHByX3RvX2Jsb2NrICgmc2UtPmZp bmFsYmxvY2ssIHRtcCk7CisJfQorICAgIH0KK30KKwogLyogR2VuZXJhdGUgY29kZSBmb3IgYSBw cm9jZWR1cmUgY2FsbC4gIE5vdGUgY2FuIHJldHVybiBzZS0+cG9zdCAhPSBOVUxMLgogICAgSWYg c2UtPmRpcmVjdF9ieXJlZiBpcyBzZXQgdGhlbiBzZS0+ZXhwciBjb250YWlucyB0aGUgcmV0dXJu IHBhcmFtZXRlci4KICAgIFJldHVybiBub256ZXJvLCBpZiB0aGUgY2FsbCBoYXMgYWx0ZXJuYXRl IHNwZWNpZmllcnMuCkBAIC03MDExLDYgKzcxMjMsNyBAQCBnZmNfY29udl9wcm9jZWR1cmVfY2Fs bCAoZ2ZjX3NlICogc2UsIGdmY19zeW1ib2wgKiBzeW0sCiAKICAgICAgIGdmY19hZGRfYmxvY2tf dG9fYmxvY2sgKCZzZS0+cHJlLCAmcGFybXNlLnByZSk7CiAgICAgICBnZmNfYWRkX2Jsb2NrX3Rv X2Jsb2NrICgmcG9zdCwgJnBhcm1zZS5wb3N0KTsKKyAgICAgIGdmY19hZGRfYmxvY2tfdG9fYmxv Y2sgKCZzZS0+ZmluYWxibG9jaywgJnBhcm1zZS5maW5hbGJsb2NrKTsKIAogICAgICAgLyogQWxs b2NhdGVkIGFsbG9jYXRhYmxlIGNvbXBvbmVudHMgb2YgZGVyaXZlZCB0eXBlcyBtdXN0IGJlCiAJ IGRlYWxsb2NhdGVkIGZvciBub24tdmFyaWFibGUgc2NhbGFycywgYXJyYXkgYXJndW1lbnRzIHRv IGVsZW1lbnRhbApAQCAtNzY3NSw5ICs3Nzg4LDE3IEBAIGdmY19jb252X3Byb2NlZHVyZV9jYWxs IChnZmNfc2UgKiBzZSwgZ2ZjX3N5bWJvbCAqIHN5bSwKICAgLyogQWxsb2NhdGFibGUgc2NhbGFy IGZ1bmN0aW9uIHJlc3VsdHMgbXVzdCBiZSBmcmVlZCBhbmQgbnVsbGlmaWVkCiAgICAgIGFmdGVy IHVzZS4gVGhpcyBuZWNlc3NpdGF0ZXMgdGhlIGNyZWF0aW9uIG9mIGEgdGVtcG9yYXJ5IHRvCiAg ICAgIGhvbGQgdGhlIHJlc3VsdCB0byBwcmV2ZW50IGR1cGxpY2F0ZSBjYWxscy4gICovCisgIHN5 bWJvbF9hdHRyaWJ1dGUgYXR0ciA9ICBjb21wID8gY29tcC0+YXR0ciA6IHN5bS0+YXR0cjsKKyAg Ym9vbCBhbGxvY2F0YWJsZSA9IGF0dHIuYWxsb2NhdGFibGUgJiYgIWF0dHIuZGltZW5zaW9uOwor ICBnZmNfc3ltYm9sICpkZXIgPSBjb21wICYmIGNvbXAtPnRzLnR5cGUgPT0gQlRfREVSSVZFRCA/ IGNvbXAtPnRzLnUuZGVyaXZlZAorCQkgICAgOiAoc3ltLT50cy50eXBlID09IEJUX0RFUklWRUQg PyBzeW0tPnRzLnUuZGVyaXZlZCA6IE5VTEwpOworICBib29sIGZpbmFsaXphYmxlID0gZGVyICE9 IE5VTEwgJiYgZ2ZjX2lzX2ZpbmFsaXphYmxlIChkZXIsIE5VTEwpOworCisgIGlmICghYnlyZWYg JiYgZmluYWxpemFibGUpCisgICAgZmluYWxpemVfZnVuY3Rpb25fcmVzdWx0IChzZSwgZGVyLCBh dHRyLCBleHByLT5yYW5rKTsKKwogICBpZiAoIWJ5cmVmICYmIHN5bS0+dHMudHlwZSAhPSBCVF9D SEFSQUNURVIKLSAgICAgICYmICgoc3ltLT5hdHRyLmFsbG9jYXRhYmxlICYmICFzeW0tPmF0dHIu ZGltZW5zaW9uICYmICFjb21wKQotCSAgfHwgKGNvbXAgJiYgY29tcC0+YXR0ci5hbGxvY2F0YWJs ZSAmJiAhY29tcC0+YXR0ci5kaW1lbnNpb24pKSkKKyAgICAgICYmIGFsbG9jYXRhYmxlICYmICFm aW5hbGl6YWJsZSkKICAgICB7CiAgICAgICB0bXAgPSBnZmNfY3JlYXRlX3ZhciAoVFJFRV9UWVBF IChzZS0+ZXhwciksIE5VTEwpOwogICAgICAgZ2ZjX2FkZF9tb2RpZnkgKCZzZS0+cHJlLCB0bXAs IHNlLT5leHByKTsKQEAgLTc3MzcsNiArNzg1OCw5IEBAIGdmY19jb252X3Byb2NlZHVyZV9jYWxs IChnZmNfc2UgKiBzZSwgZ2ZjX3N5bWJvbCAqIHN5bSwKIAkgICAgICBzZS0+ZXhwciA9IGluZm8t PmRlc2NyaXB0b3I7CiAJICAgICAgLyogQnVuZGxlIGluIHRoZSBzdHJpbmcgbGVuZ3RoLiAgKi8K IAkgICAgICBzZS0+c3RyaW5nX2xlbmd0aCA9IGxlbjsKKworCSAgICAgIGlmIChmaW5hbGl6YWJs ZSkKKwkJZmluYWxpemVfZnVuY3Rpb25fcmVzdWx0IChzZSwgZGVyLCBhdHRyLCBleHByLT5yYW5r KTsKIAkgICAgfQogCSAgZWxzZSBpZiAodHMudHlwZSA9PSBCVF9DSEFSQUNURVIpCiAJICAgIHsK QEAgLTc4MjksOCArNzk1Myw2IEBAIGdmY19jb252X3Byb2NlZHVyZV9jYWxsIChnZmNfc2UgKiBz ZSwgZ2ZjX3N5bWJvbCAqIHN5bSwKIAkgICYmIHNlLT5leHByICYmIEdGQ19DTEFTU19UWVBFX1Ag KFRSRUVfVFlQRSAoc2UtPmV4cHIpKQogCSAgJiYgZXhwci0+bXVzdF9maW5hbGl6ZSkKIAl7Ci0J ICB0cmVlIGZpbmFsX2ZuZGVjbDsKLQkgIHRyZWUgaXNfZmluYWw7CiAJICBpbnQgbjsKIAkgIGlm IChzZS0+c3MgJiYgc2UtPnNzLT5sb29wKQogCSAgICB7CkBAIC03ODUyLDY2ICs3OTc0LDE1IEBA IGdmY19jb252X3Byb2NlZHVyZV9jYWxsIChnZmNfc2UgKiBzZSwgZ2ZjX3N5bWJvbCAqIHN5bSwK IAkgICAgICAvKiBUT0RPIEVsaW1pbmF0ZSB0aGUgZG91Ymxpbmcgb2YgdGVtcG9yYXJpZXMuIFRo aXMKIAkJIG9uZSBpcyBuZWNlc3NhcnkgdG8gZW5zdXJlIG5vIG1lbW9yeSBsZWFrYWdlLiAgKi8K IAkgICAgICBzZS0+ZXhwciA9IGdmY19ldmFsdWF0ZV9ub3cgKHNlLT5leHByLCAmc2UtPnByZSk7 Ci0JICAgICAgdG1wID0gZ2ZjX2NsYXNzX2RhdGFfZ2V0IChzZS0+ZXhwcik7Ci0JICAgICAgdG1w ID0gZ2ZjX2NvbnZfc2NhbGFyX3RvX2Rlc2NyaXB0b3IgKHNlLCB0bXAsCi0JCQlDTEFTU19EQVRB IChleHByLT52YWx1ZS5mdW5jdGlvbi5lc3ltLT5yZXN1bHQpLT5hdHRyKTsKIAkgICAgfQogCi0J ICBpZiAoKGdmY19pc19jbGFzc19hcnJheV9mdW5jdGlvbiAoZXhwcikKLQkgICAgICAgfHwgZ2Zj X2lzX2FsbG9jX2NsYXNzX3NjYWxhcl9mdW5jdGlvbiAoZXhwcikpCi0JICAgICAgJiYgQ0xBU1Nf REFUQSAoZXhwci0+dmFsdWUuZnVuY3Rpb24uZXN5bS0+cmVzdWx0KS0+YXR0ci5wb2ludGVyKQot CSAgICBnb3RvIG5vX2ZpbmFsaXphdGlvbjsKLQotCSAgZmluYWxfZm5kZWNsID0gZ2ZjX2NsYXNz X3Z0YWJfZmluYWxfZ2V0IChzZS0+ZXhwcik7Ci0JICBpc19maW5hbCA9IGZvbGRfYnVpbGQyX2xv YyAoaW5wdXRfbG9jYXRpb24sIE5FX0VYUFIsCi0JCQkJICAgICAgbG9naWNhbF90eXBlX25vZGUs Ci0JCQkJICAgICAgZmluYWxfZm5kZWNsLAotCQkJCSAgICAgIGZvbGRfY29udmVydCAoVFJFRV9U WVBFIChmaW5hbF9mbmRlY2wpLAotCQkJCQkgICAJICAgIG51bGxfcG9pbnRlcl9ub2RlKSk7Ci0J ICBmaW5hbF9mbmRlY2wgPSBidWlsZF9mb2xkX2luZGlyZWN0X3JlZl9sb2MgKGlucHV0X2xvY2F0 aW9uLAotCQkJCQkJICAgICAgZmluYWxfZm5kZWNsKTsKLSAJICB0bXAgPSBidWlsZF9jYWxsX2V4 cHJfbG9jIChpbnB1dF9sb2NhdGlvbiwKLQkJCQkgICAgIGZpbmFsX2ZuZGVjbCwgMywKLQkJCQkg ICAgIGdmY19idWlsZF9hZGRyX2V4cHIgKE5VTEwsIHRtcCksCi0JCQkJICAgICBnZmNfY2xhc3Nf dnRhYl9zaXplX2dldCAoc2UtPmV4cHIpLAotCQkJCSAgICAgYm9vbGVhbl9mYWxzZV9ub2RlKTsK LQkgIHRtcCA9IGZvbGRfYnVpbGQzX2xvYyAoaW5wdXRfbG9jYXRpb24sIENPTkRfRVhQUiwKLQkJ CQkgdm9pZF90eXBlX25vZGUsIGlzX2ZpbmFsLCB0bXAsCi0JCQkJIGJ1aWxkX2VtcHR5X3N0bXQg KGlucHV0X2xvY2F0aW9uKSk7Ci0KLQkgIGlmIChzZS0+c3MgJiYgc2UtPnNzLT5sb29wKQotCSAg ICB7Ci0JICAgICAgZ2ZjX3ByZXBlbmRfZXhwcl90b19ibG9jayAoJnNlLT5zcy0+bG9vcC0+cG9z dCwgdG1wKTsKLQkgICAgICB0bXAgPSBmb2xkX2J1aWxkMl9sb2MgKGlucHV0X2xvY2F0aW9uLCBO RV9FWFBSLAotCQkJCSAgICAgbG9naWNhbF90eXBlX25vZGUsCi0JCQkJICAgICBpbmZvLT5kYXRh LAotCQkJCSAgICAgZm9sZF9jb252ZXJ0IChUUkVFX1RZUEUgKGluZm8tPmRhdGEpLAotCQkJCQkg ICAJICAgIG51bGxfcG9pbnRlcl9ub2RlKSk7Ci0JICAgICAgdG1wID0gZm9sZF9idWlsZDNfbG9j IChpbnB1dF9sb2NhdGlvbiwgQ09ORF9FWFBSLAotCQkJCSAgICAgdm9pZF90eXBlX25vZGUsIHRt cCwKLQkJCQkgICAgIGdmY19jYWxsX2ZyZWUgKGluZm8tPmRhdGEpLAotCQkJCSAgICAgYnVpbGRf ZW1wdHlfc3RtdCAoaW5wdXRfbG9jYXRpb24pKTsKLQkgICAgICBnZmNfYWRkX2V4cHJfdG9fYmxv Y2sgKCZzZS0+c3MtPmxvb3AtPnBvc3QsIHRtcCk7Ci0JICAgIH0KLQkgIGVsc2UKLQkgICAgewot CSAgICAgIHRyZWUgY2xhc3NkYXRhOwotCSAgICAgIGdmY19wcmVwZW5kX2V4cHJfdG9fYmxvY2sg KCZzZS0+cG9zdCwgdG1wKTsKLQkgICAgICBjbGFzc2RhdGEgPSBnZmNfY2xhc3NfZGF0YV9nZXQg KHNlLT5leHByKTsKLQkgICAgICB0bXAgPSBmb2xkX2J1aWxkMl9sb2MgKGlucHV0X2xvY2F0aW9u LCBORV9FWFBSLAotCQkJCSAgICAgbG9naWNhbF90eXBlX25vZGUsCi0JCQkJICAgICBjbGFzc2Rh dGEsCi0JCQkJICAgICBmb2xkX2NvbnZlcnQgKFRSRUVfVFlQRSAoY2xhc3NkYXRhKSwKLQkJCQkJ ICAgCSAgICBudWxsX3BvaW50ZXJfbm9kZSkpOwotCSAgICAgIHRtcCA9IGZvbGRfYnVpbGQzX2xv YyAoaW5wdXRfbG9jYXRpb24sIENPTkRfRVhQUiwKLQkJCQkgICAgIHZvaWRfdHlwZV9ub2RlLCB0 bXAsCi0JCQkJICAgICBnZmNfY2FsbF9mcmVlIChjbGFzc2RhdGEpLAotCQkJCSAgICAgYnVpbGRf ZW1wdHlfc3RtdCAoaW5wdXRfbG9jYXRpb24pKTsKLQkgICAgICBnZmNfYWRkX2V4cHJfdG9fYmxv Y2sgKCZzZS0+cG9zdCwgdG1wKTsKLQkgICAgfQorCSAgLyogRmluYWxpemUgdGhlIHJlc3VsdCwg aWYgbmVjZXNzYXJ5LiAgKi8KKwkgIGF0dHIgPSBDTEFTU19EQVRBIChleHByLT52YWx1ZS5mdW5j dGlvbi5lc3ltLT5yZXN1bHQpLT5hdHRyOworCSAgaWYgKCEoKGdmY19pc19jbGFzc19hcnJheV9m dW5jdGlvbiAoZXhwcikKKwkJIHx8IGdmY19pc19hbGxvY19jbGFzc19zY2FsYXJfZnVuY3Rpb24g KGV4cHIpKQorCQkmJiBhdHRyLnBvaW50ZXIpKQorCSAgICBmaW5hbGl6ZV9mdW5jdGlvbl9yZXN1 bHQgKHNlLCBOVUxMLCBhdHRyLCBleHByLT5yYW5rKTsKIAl9Ci0KLW5vX2ZpbmFsaXphdGlvbjoK ICAgICAgIGdmY19hZGRfYmxvY2tfdG9fYmxvY2sgKCZzZS0+cG9zdCwgJnBvc3QpOwogICAgIH0K IApAQCAtMTA0MzAsNyArMTA1MDEsOCBAQCBnZmNfdHJhbnNfc2NhbGFyX2Fzc2lnbiAoZ2ZjX3Nl ICogbHNlLCBnZmNfc2UgKiByc2UsIGdmY190eXBlc3BlYyB0cywKICAgICAgIGlmIChkZWFsbG9j KQogCXsKIAkgIHRtcF92YXIgPSBnZmNfZXZhbHVhdGVfbm93IChsc2UtPmV4cHIsICZsc2UtPnBy ZSk7Ci0JICB0bXAgPSBnZmNfZGVhbGxvY2F0ZV9hbGxvY19jb21wX25vX2NhZiAodHMudS5kZXJp dmVkLCB0bXBfdmFyLCAwKTsKKwkgIHRtcCA9IGdmY19kZWFsbG9jYXRlX2FsbG9jX2NvbXBfbm9f Y2FmICh0cy51LmRlcml2ZWQsIHRtcF92YXIsCisJCQkJCQkgIDAsIHRydWUpOwogCSAgaWYgKGRl ZXBfY29weSkKIAkgICAgdG1wID0gYnVpbGQzX3YgKENPTkRfRVhQUiwgY29uZCwgYnVpbGRfZW1w dHlfc3RtdCAoaW5wdXRfbG9jYXRpb24pLAogCQkJICAgIHRtcCk7CkBAIC0xMDQzOCw2ICsxMDUx MCw3IEBAIGdmY190cmFuc19zY2FsYXJfYXNzaWduIChnZmNfc2UgKiBsc2UsIGdmY19zZSAqIHJz ZSwgZ2ZjX3R5cGVzcGVjIHRzLAogCX0KIAogICAgICAgZ2ZjX2FkZF9ibG9ja190b19ibG9jayAo JmJsb2NrLCAmcnNlLT5wcmUpOworICAgICAgZ2ZjX2FkZF9ibG9ja190b19ibG9jayAoJmJsb2Nr LCAmbHNlLT5maW5hbGJsb2NrKTsKICAgICAgIGdmY19hZGRfYmxvY2tfdG9fYmxvY2sgKCZibG9j aywgJmxzZS0+cHJlKTsKIAogICAgICAgZ2ZjX2FkZF9tb2RpZnkgKCZibG9jaywgbHNlLT5leHBy LApAQCAtMTA0NjksNiArMTA1NDIsNyBAQCBnZmNfdHJhbnNfc2NhbGFyX2Fzc2lnbiAoZ2ZjX3Nl ICogbHNlLCBnZmNfc2UgKiByc2UsIGdmY190eXBlc3BlYyB0cywKICAgICB7CiAgICAgICBnZmNf YWRkX2Jsb2NrX3RvX2Jsb2NrICgmYmxvY2ssICZsc2UtPnByZSk7CiAgICAgICBnZmNfYWRkX2Js b2NrX3RvX2Jsb2NrICgmYmxvY2ssICZyc2UtPnByZSk7CisgICAgICBnZmNfYWRkX2Jsb2NrX3Rv X2Jsb2NrICgmYmxvY2ssICZsc2UtPmZpbmFsYmxvY2spOwogICAgICAgdG1wID0gZm9sZF9idWls ZDFfbG9jIChpbnB1dF9sb2NhdGlvbiwgVklFV19DT05WRVJUX0VYUFIsCiAJCQkgICAgIFRSRUVf VFlQRSAobHNlLT5leHByKSwgcnNlLT5leHByKTsKICAgICAgIGdmY19hZGRfbW9kaWZ5ICgmYmxv Y2ssIGxzZS0+ZXhwciwgdG1wKTsKQEAgLTEwNDc4LDYgKzEwNTUyLDcgQEAgZ2ZjX3RyYW5zX3Nj YWxhcl9hc3NpZ24gKGdmY19zZSAqIGxzZSwgZ2ZjX3NlICogcnNlLCBnZmNfdHlwZXNwZWMgdHMs CiAgICAgewogICAgICAgZ2ZjX2FkZF9ibG9ja190b19ibG9jayAoJmJsb2NrLCAmbHNlLT5wcmUp OwogICAgICAgZ2ZjX2FkZF9ibG9ja190b19ibG9jayAoJmJsb2NrLCAmcnNlLT5wcmUpOworICAg ICAgZ2ZjX2FkZF9ibG9ja190b19ibG9jayAoJmJsb2NrLCAmbHNlLT5maW5hbGJsb2NrKTsKIAog ICAgICAgaWYgKCF0cmFuc19zY2FsYXJfY2xhc3NfYXNzaWduICgmYmxvY2ssIGxzZSwgcnNlKSkK IAl7CkBAIC0xMDg3Miw2ICsxMDk0Nyw3IEBAIGdmY190cmFuc19hcnJheWZ1bmNfYXNzaWduIChn ZmNfZXhwciAqIGV4cHIxLCBnZmNfZXhwciAqIGV4cHIyKQogCiAgIGdmY19jb252X2Z1bmN0aW9u X2V4cHIgKCZzZSwgZXhwcjIpOwogICBnZmNfYWRkX2Jsb2NrX3RvX2Jsb2NrICgmc2UucHJlLCAm c2UucG9zdCk7CisgIGdmY19hZGRfYmxvY2tfdG9fYmxvY2sgKCZzZS5wcmUsICZzZS5maW5hbGJs b2NrKTsKIAogICBpZiAoc3MpCiAgICAgZ2ZjX2NsZWFudXBfbG9vcCAoJmxvb3ApOwpAQCAtMTEz ODcsNiArMTE0NjMsOTYgQEAgaXNfcnVudGltZV9jb25mb3JtYWJsZSAoZ2ZjX2V4cHIgKmV4cHIx LCBnZmNfZXhwciAqZXhwcjIpCiB9CiAKIAorICAvKiBGMjAxOCAoNy41LjYuMyk6ICJXaGVuIGFu IGludHJpbnNpYyBhc3NpZ25tZW50IHN0YXRlbWVudCBpcyBleGVjdXRlZAorICAgICAoMTAuMi4x LjMpLCBpZiB0aGUgdmFyaWFibGUgaXMgbm90IGFuIHVuYWxsb2NhdGVkIGFsbG9jYXRhYmxlIHZh cmlhYmxlLAorICAgICBpdCBpcyBmaW5hbGl6ZWQgYWZ0ZXIgZXZhbHVhdGlvbiBvZiBleHByIGFu ZCBiZWZvcmUgdGhlIGRlZmluaXRpb24gb2YKKyAgICAgdGhlIHZhcmlhYmxlLiBJZiB0aGUgdmFy aWFibGUgaXMgYW4gYWxsb2NhdGVkIGFsbG9jYXRhYmxlIHZhcmlhYmxlLCBvcgorICAgICBoYXMg YW4gYWxsb2NhdGVkIGFsbG9jYXRhYmxlIHN1Ym9iamVjdCwgdGhhdCB3b3VsZCBiZSBkZWFsbG9j YXRlZCBieQorICAgICBpbnRyaW5zaWMgYXNzaWdubWVudCwgdGhlIGZpbmFsaXphdGlvbiBvY2N1 cnMgYmVmb3JlIHRoZSBkZWFsbG9jYXRpb24gKi8KKworc3RhdGljIHRyZWUKK2dmY19hc3NpZ25t ZW50X2ZpbmFsaXplcl9jYWxsIChnZmNfZXhwciAqZXhwcjEsIGJvb2wgaW5pdF9mbGFnKQorewor ICBzdG10YmxvY2tfdCBmaW5hbF9ibG9jazsKKyAgZ2ZjX2luaXRfYmxvY2sgKCZmaW5hbF9ibG9j ayk7CisgIHN5bWJvbF9hdHRyaWJ1dGUgbGhzX2F0dHI7CisgIHRyZWUgZmluYWxfZXhwcjsKKyAg dHJlZSBwdHI7CisgIHRyZWUgY29uZDsKKyAgZ2ZjX3NlIHNlOworICBnZmNfc3ltYm9sICpzeW0g PSBleHByMS0+c3ltdHJlZS0+bi5zeW07CisgIGdmY19yZWYgKnJlZiA9IGV4cHIxLT5yZWY7CisK KyAgLyogV2UgaGF2ZSB0byBleGNsdWRlIHZ0YWJsZSBwcm9jZWR1cmVzIChfY29weSBhbmQgX2Zp bmFsIGVzcGVjaWFsbHkpLCB1c2VzCisgICAgIG9mIGdmY190cmFuc19hc3NpZ25tZW50XzEgaW4g aW5pdGlhbGl6YXRpb24gYW5kIGFsbG9jYXRpb24gYmVmb3JlIHRyeWluZworICAgICB0byBidWls ZCBhIGZpbmFsIGNhbGwuICAqLworICBpZiAoIWV4cHIxLT5tdXN0X2ZpbmFsaXplCisgICAgICB8 fCBzeW0tPmF0dHIuYXJ0aWZpY2lhbAorICAgICAgfHwgc3ltLT5ucy0+cHJvY19uYW1lLT5hdHRy LmFydGlmaWNpYWwKKyAgICAgIHx8IGluaXRfZmxhZykKKyAgICByZXR1cm4gTlVMTF9UUkVFOwor CisgIC8qIEYyMDE4IDcuNS42LjI6IE9ubHkgZmluYWxpemFibGUgZW50aXRpZXMgYXJlIGZpbmFs aXplZC4gICovCisgIGZvciAoOyByZWY7IHJlZiA9IHJlZi0+bmV4dCkKKyAgICBpZiAocmVmLT50 eXBlID09IFJFRl9DT01QT05FTlQpCisgICAgICByZXR1cm4gTlVMTF9UUkVFOworCisgIGlmICgh KHN5bS0+dHMudHlwZSA9PSBCVF9DTEFTUworCXx8IChzeW0tPnRzLnR5cGUgPT0gQlRfREVSSVZF RAorCSAgICAmJiBnZmNfaXNfZmluYWxpemFibGUgKHN5bS0+dHMudS5kZXJpdmVkLCBOVUxMKSkp CisgICAgICB8fCAhZ2ZjX2FkZF9maW5hbGl6ZXJfY2FsbCAoJmZpbmFsX2Jsb2NrLCBleHByMSkp CisgICAgcmV0dXJuIE5VTExfVFJFRTsKKworICBsaHNfYXR0ciA9IGdmY19leHByX2F0dHIgKGV4 cHIxKTsKKworICAvKiBDaGVjayBhbGxvY2F0YWJsZS9wb2ludGVyIGlzIGFsbG9jYXRlZC9hc3Nv Y2lhdGVkLiAgKi8KKyAgaWYgKGxoc19hdHRyLmFsbG9jYXRhYmxlIHx8IGxoc19hdHRyLnBvaW50 ZXIpCisgICAgeworICAgICAgaWYgKGV4cHIxLT50cy50eXBlID09IEJUX0NMQVNTKQorCXsKKwkg IHB0ciA9IGdmY19nZXRfY2xhc3NfZnJvbV9nZmNfZXhwciAoZXhwcjEpOworCSAgZ2NjX2Fzc2Vy dCAocHRyICE9IE5VTExfVFJFRSk7CisJICBwdHIgPSBnZmNfY2xhc3NfZGF0YV9nZXQgKHB0cik7 CisJICBpZiAobGhzX2F0dHIuZGltZW5zaW9uKQorCSAgICBwdHIgPSBnZmNfY29udl9kZXNjcmlw dG9yX2RhdGFfZ2V0IChwdHIpOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBnZmNfaW5pdF9zZSAo JnNlLCBOVUxMKTsKKwkgIGlmIChleHByMS0+cmFuaykKKwkgICAgeworCSAgICAgIGdmY19jb252 X2V4cHJfZGVzY3JpcHRvciAoJnNlLCBleHByMSk7CisJICAgICAgcHRyID0gZ2ZjX2NvbnZfZGVz Y3JpcHRvcl9kYXRhX2dldCAoc2UuZXhwcik7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAg ICAgIGdmY19jb252X2V4cHIgKCZzZSwgZXhwcjEpOworCSAgICAgIHB0ciA9IGdmY19idWlsZF9h ZGRyX2V4cHIgKE5VTExfVFJFRSwgc2UuZXhwcik7CisJICAgIH0KKwl9CisKKyAgICAgIGNvbmQg PSBmb2xkX2J1aWxkMl9sb2MgKGlucHV0X2xvY2F0aW9uLCBORV9FWFBSLCBsb2dpY2FsX3R5cGVf bm9kZSwKKwkJCSAgICAgIHB0ciwgYnVpbGRfemVyb19jc3QgKFRSRUVfVFlQRSAocHRyKSkpOwor ICAgICAgZmluYWxfZXhwciA9IGJ1aWxkM19sb2MgKGlucHV0X2xvY2F0aW9uLCBDT05EX0VYUFIs IHZvaWRfdHlwZV9ub2RlLAorCQkJICAgICAgIGNvbmQsIGdmY19maW5pc2hfYmxvY2sgKCZmaW5h bF9ibG9jayksCisJCQkgICAgICAgYnVpbGRfZW1wdHlfc3RtdCAoaW5wdXRfbG9jYXRpb24pKTsK KyAgICB9CisgIGVsc2UKKyAgICBmaW5hbF9leHByID0gZ2ZjX2ZpbmlzaF9ibG9jayAoJmZpbmFs X2Jsb2NrKTsKKworICAvKiBDaGVjayBvcHRpb25hbCBwcmVzZW50LiAgKi8KKyAgaWYgKHN5bS0+ YXR0ci5vcHRpb25hbCkKKyAgICB7CisgICAgICBjb25kID0gZ2ZjX2NvbnZfZXhwcl9wcmVzZW50 IChzeW0pOworICAgICAgZmluYWxfZXhwciA9IGJ1aWxkM19sb2MgKGlucHV0X2xvY2F0aW9uLCBD T05EX0VYUFIsIHZvaWRfdHlwZV9ub2RlLAorCQkJICAgICAgIGNvbmQsIGZpbmFsX2V4cHIsCisJ CQkgICAgICAgYnVpbGRfZW1wdHlfc3RtdCAoaW5wdXRfbG9jYXRpb24pKTsKKyAgICB9CisKKyAg cmV0dXJuIGZpbmFsX2V4cHI7Cit9CisKKwogc3RhdGljIHRyZWUKIHRyYW5zX2NsYXNzX2Fzc2ln bm1lbnQgKHN0bXRibG9ja190ICpibG9jaywgZ2ZjX2V4cHIgKmxocywgZ2ZjX2V4cHIgKnJocywK IAkJCWdmY19zZSAqbHNlLCBnZmNfc2UgKnJzZSwgYm9vbCB1c2VfdnB0cl9jb3B5LApAQCAtMTEz OTQsNiArMTE1NjAsMTYgQEAgdHJhbnNfY2xhc3NfYXNzaWdubWVudCAoc3RtdGJsb2NrX3QgKmJs b2NrLCBnZmNfZXhwciAqbGhzLCBnZmNfZXhwciAqcmhzLAogewogICB0cmVlIHRtcCwgZmNuLCBz dGRjb3B5LCB0b19sZW4sIGZyb21fbGVuLCB2cHRyLCBvbGRfdnB0cjsKICAgdmVjPHRyZWUsIHZh X2djPiAqYXJncyA9IE5VTEw7CisgIHRyZWUgZmluYWxfZXhwcjsKKworICBmaW5hbF9leHByID0g Z2ZjX2Fzc2lnbm1lbnRfZmluYWxpemVyX2NhbGwgKGxocywgZmFsc2UpOworICBpZiAoZmluYWxf ZXhwciAhPSBOVUxMX1RSRUUpCisgICAgeworICAgICAgaWYgKHJzZS0+bG9vcCkKKwlnZmNfcHJl cGVuZF9leHByX3RvX2Jsb2NrICgmcnNlLT5sb29wLT5wcmUsIGZpbmFsX2V4cHIpOworICAgICAg ZWxzZQorCWdmY19hZGRfZXhwcl90b19ibG9jayAoYmxvY2ssIGZpbmFsX2V4cHIpOworICAgIH0K IAogICAvKiBTdG9yZSB0aGUgb2xkIHZwdHIgc28gdGhhdCBkeW5hbWljIHR5cGVzIGNhbiBiZSBj b21wYXJlZCBmb3IKICAgICAgcmVhbGxvY2F0aW9uIHRvIG9jY3VyIG9yIG5vdC4gICovCkBAIC0x MTQxOSw4ICsxMTU5NSwxMiBAQCB0cmFuc19jbGFzc19hc3NpZ25tZW50IChzdG10YmxvY2tfdCAq YmxvY2ssIGdmY19leHByICpsaHMsIGdmY19leHByICpyaHMsCiAJb2xkX3ZwdHIgPSBidWlsZF9p bnRfY3N0IChUUkVFX1RZUEUgKHZwdHIpLCAwKTsKIAogICAgICAgc2l6ZSA9IGdmY192cHRyX3Np emVfZ2V0ICh2cHRyKTsKLSAgICAgIGNsYXNzX2hhbiA9IEdGQ19DTEFTU19UWVBFX1AgKFRSRUVf VFlQRSAobHNlLT5leHByKSkKLQkgID8gZ2ZjX2NsYXNzX2RhdGFfZ2V0IChsc2UtPmV4cHIpIDog bHNlLT5leHByOworICAgICAgaWYgKFRSRUVfQ09ERSAobHNlLT5leHByKSA9PSBJTkRJUkVDVF9S RUYpCisJdG1wID0gVFJFRV9PUEVSQU5EIChsc2UtPmV4cHIsIDApOworICAgICAgZWxzZQorCXRt cCA9IGxzZS0+ZXhwcjsKKyAgICAgIGNsYXNzX2hhbiA9IEdGQ19DTEFTU19UWVBFX1AgKFRSRUVf VFlQRSAodG1wKSkKKwkgID8gZ2ZjX2NsYXNzX2RhdGFfZ2V0ICh0bXApIDogdG1wOwogCiAgICAg ICAvKiBBbGxvY2F0ZSBibG9jay4gICovCiAgICAgICBnZmNfaW5pdF9ibG9jayAoJmFsbG9jKTsK QEAgLTExNTE5LDYgKzExNjk5LDcgQEAgdHJhbnNfY2xhc3NfYXNzaWdubWVudCAoc3RtdGJsb2Nr X3QgKmJsb2NrLCBnZmNfZXhwciAqbGhzLCBnZmNfZXhwciAqcmhzLAogICAgIH0KIH0KIAorCiAv KiBTdWJyb3V0aW5lIG9mIGdmY190cmFuc19hc3NpZ25tZW50IHRoYXQgYWN0dWFsbHkgc2NhbGFy aXplcyB0aGUKICAgIGFzc2lnbm1lbnQuICBFWFBSMSBpcyB0aGUgZGVzdGluYXRpb24vTEhTIGFu ZCBFWFBSMiBpcyB0aGUgc291cmNlL1JIUy4KICAgIGluaXRfZmxhZyBpbmRpY2F0ZXMgaW5pdGlh bGl6YXRpb24gZXhwcmVzc2lvbnMgYW5kIGRlYWxsb2MgdGhhdCBubwpAQCAtMTE1NDIsNiArMTE3 MjMsNyBAQCBnZmNfdHJhbnNfYXNzaWdubWVudF8xIChnZmNfZXhwciAqIGV4cHIxLCBnZmNfZXhw ciAqIGV4cHIyLCBib29sIGluaXRfZmxhZywKICAgdHJlZSB0bXA7CiAgIHN0bXRibG9ja190IGJs b2NrOwogICBzdG10YmxvY2tfdCBib2R5OworICB0cmVlIGZpbmFsX2V4cHI7CiAgIGJvb2wgbF9p c190ZW1wOwogICBib29sIHNjYWxhcl90b19hcnJheTsKICAgdHJlZSBzdHJpbmdfbGVuZ3RoOwpA QCAtMTE1ODIsNiArMTE3NjQsNyBAQCBnZmNfdHJhbnNfYXNzaWdubWVudF8xIChnZmNfZXhwciAq IGV4cHIxLCBnZmNfZXhwciAqIGV4cHIyLCBib29sIGluaXRfZmxhZywKICAgICAgbmVlZGVkIGF0 IHR3byBsb2NhdGlvbnMsIHNvIGRvIGl0IG9uY2Ugb25seSBiZWZvcmUgdGhlIGluZm9ybWF0aW9u IGlzCiAgICAgIG5lZWRlZC4gICovCiAgIGxoc19hdHRyID0gZ2ZjX2V4cHJfYXR0ciAoZXhwcjEp OworCiAgIGlzX3BvbHlfYXNzaWduID0gKHVzZV92cHRyX2NvcHkgfHwgbGhzX2F0dHIucG9pbnRl cgogCQkgICAgfHwgKGxoc19hdHRyLmFsbG9jYXRhYmxlICYmICFsaHNfYXR0ci5kaW1lbnNpb24p KQogCQkgICAmJiAoZXhwcjEtPnRzLnR5cGUgPT0gQlRfQ0xBU1MKQEAgLTExODU1LDYgKzEyMDM4 LDggQEAgZ2ZjX3RyYW5zX2Fzc2lnbm1lbnRfMSAoZ2ZjX2V4cHIgKiBleHByMSwgZ2ZjX2V4cHIg KiBleHByMiwgYm9vbCBpbml0X2ZsYWcsCiAJICBlbHNlCiAJICAgIGdmY19hZGRfZXhwcl90b19i bG9jayAoJmxvb3AucG9zdCwgdG1wMik7CiAJfQorCisgICAgICBleHByMS0+bXVzdF9maW5hbGl6 ZSA9IDA7CiAgICAgfQogICBlbHNlIGlmIChmbGFnX2NvYXJyYXkgPT0gR0ZDX0ZDT0FSUkFZX0xJ QgogCSAgICYmIGxoc19jYWZfYXR0ci5jb2RpbWVuc2lvbiAmJiByaHNfY2FmX2F0dHIuY29kaW1l bnNpb24KQEAgLTExOTAwLDYgKzEyMDg1LDMyIEBAIGdmY190cmFuc19hc3NpZ25tZW50XzEgKGdm Y19leHByICogZXhwcjEsIGdmY19leHByICogZXhwcjIsIGJvb2wgaW5pdF9mbGFnLAogCX0KICAg ICB9CiAKKyAgLyogQ29tcGx5IHdpdGggRjIwMTggKDcuNS42LjMpLiBNYWtlIHN1cmUgdGhhdCBh bnkgZmluYWxpemF0aW9uIGNvZGUgaXMgYWRkZWQKKyAgICAgYWZ0ZXIgZXZhbHVhdGlvbiBvZiB0 aGUgcmhzIGFuZCBiZWZvcmUgcmVhbGxvY2F0aW9uLiAgKi8KKyAgZmluYWxfZXhwciA9IGdmY19h c3NpZ25tZW50X2ZpbmFsaXplcl9jYWxsIChleHByMSwgaW5pdF9mbGFnKTsKKyAgaWYgKGZpbmFs X2V4cHIKKyAgICAgICYmICEoZXhwcjItPmV4cHJfdHlwZSA9PSBFWFBSX1ZBUklBQkxFCisJICAg JiYgZXhwcjItPnN5bXRyZWUtPm4uc3ltLT5hdHRyLmFydGlmaWNpYWwpKQorICAgIHsKKyAgICAg IGlmIChsc3MgPT0gZ2ZjX3NzX3Rlcm1pbmF0b3IpCisJeworCSAgaWYgKHRtcCAhPSBOVUxMX1RS RUUgJiYgZmluYWxfZXhwciAhPSBOVUxMX1RSRUUpCisJICAgIHsKKwkgICAgICBnZmNfYWRkX2Js b2NrX3RvX2Jsb2NrICgmYmxvY2ssICZyc2UucHJlKTsKKwkgICAgICBnZmNfYWRkX2V4cHJfdG9f YmxvY2sgKCZibG9jaywgZmluYWxfZXhwcik7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgZ2ZjX2Fk ZF9leHByX3RvX2Jsb2NrICgmbHNlLmZpbmFsYmxvY2ssIGZpbmFsX2V4cHIpOworCX0KKyAgICAg IGVsc2UKKwl7CisJICBnZmNfYWRkX2Jsb2NrX3RvX2Jsb2NrICgmYm9keSwgJnJzZS5wcmUpOwor CSAgZ2ZjX2FkZF9leHByX3RvX2Jsb2NrICgmbG9vcC5jb2RlW2V4cHIxLT5yYW5rIC0gMV0sIGZp bmFsX2V4cHIpOworCX0KKyAgICB9CisgIGVsc2UKKyAgICBnZmNfYWRkX2Jsb2NrX3RvX2Jsb2Nr ICgmYm9keSwgJnJzZS5wcmUpOworCiAgIC8qIElmIG5vdGhpbmcgZWxzZSB3b3JrcywgZG8gaXQg dGhlIG9sZCBmYXNoaW9uZWQgd2F5ISAgKi8KICAgaWYgKHRtcCA9PSBOVUxMX1RSRUUpCiAgICAg dG1wID0gZ2ZjX3RyYW5zX3NjYWxhcl9hc3NpZ24gKCZsc2UsICZyc2UsIGV4cHIxLT50cywKQEAg LTExOTA5LDEyICsxMjEyMCwxOCBAQCBnZmNfdHJhbnNfYXNzaWdubWVudF8xIChnZmNfZXhwciAq IGV4cHIxLCBnZmNfZXhwciAqIGV4cHIyLCBib29sIGluaXRfZmxhZywKIAkJCQkgICAhKGxfaXNf dGVtcCB8fCBpbml0X2ZsYWcpICYmIGRlYWxsb2MsCiAJCQkJICAgZXhwcjEtPnN5bXRyZWUtPm4u c3ltLT5hdHRyLmNvZGltZW5zaW9uKTsKIAotICAvKiBBZGQgdGhlIHByZSBibG9ja3MgdG8gdGhl IGJvZHkuICAqLwotICBnZmNfYWRkX2Jsb2NrX3RvX2Jsb2NrICgmYm9keSwgJnJzZS5wcmUpOwor CisgIC8qIEFkZCB0aGUgbHNlIHByZSBibG9jayB0byB0aGUgYm9keSAgKi8KICAgZ2ZjX2FkZF9i bG9ja190b19ibG9jayAoJmJvZHksICZsc2UucHJlKTsKICAgZ2ZjX2FkZF9leHByX3RvX2Jsb2Nr ICgmYm9keSwgdG1wKTsKICAgLyogQWRkIHRoZSBwb3N0IGJsb2NrcyB0byB0aGUgYm9keS4gICov Ci0gIGdmY19hZGRfYmxvY2tfdG9fYmxvY2sgKCZib2R5LCAmcnNlLnBvc3QpOworICBpZiAobHNz ID09IGdmY19zc190ZXJtaW5hdG9yKQorICAgIHsKKyAgICAgIGdmY19hZGRfYmxvY2tfdG9fYmxv Y2sgKCZyc2UuZmluYWxibG9jaywgJnJzZS5wb3N0KTsKKyAgICAgIGdmY19hZGRfYmxvY2tfdG9f YmxvY2sgKCZib2R5LCAmcnNlLmZpbmFsYmxvY2spOworICAgIH0KKyAgZWxzZQorICAgIGdmY19h ZGRfYmxvY2tfdG9fYmxvY2sgKCZib2R5LCAmcnNlLnBvc3QpOwogICBnZmNfYWRkX2Jsb2NrX3Rv X2Jsb2NrICgmYm9keSwgJmxzZS5wb3N0KTsKIAogICBpZiAobHNzID09IGdmY19zc190ZXJtaW5h dG9yKQpAQCAtMTE5NzksNiArMTIxOTYsNyBAQCBnZmNfdHJhbnNfYXNzaWdubWVudF8xIChnZmNf ZXhwciAqIGV4cHIxLCBnZmNfZXhwciAqIGV4cHIyLCBib29sIGluaXRfZmxhZywKICAgICAgIC8q IFdyYXAgdGhlIHdob2xlIHRoaW5nIHVwLiAgKi8KICAgICAgIGdmY19hZGRfYmxvY2tfdG9fYmxv Y2sgKCZibG9jaywgJmxvb3AucHJlKTsKICAgICAgIGdmY19hZGRfYmxvY2tfdG9fYmxvY2sgKCZi bG9jaywgJmxvb3AucG9zdCk7CisgICAgICBnZmNfYWRkX2Jsb2NrX3RvX2Jsb2NrICgmYmxvY2ss ICZyc2UuZmluYWxibG9jayk7CiAKICAgICAgIGdmY19jbGVhbnVwX2xvb3AgKCZsb29wKTsKICAg ICB9CmRpZmYgLS1naXQgYS9nY2MvZm9ydHJhbi90cmFucy1pby5jYyBiL2djYy9mb3J0cmFuL3Ry YW5zLWlvLmNjCmluZGV4IDczMjIyMWY4NDhiLi5iZjRmMDY3MTU4NSAxMDA2NDQKLS0tIGEvZ2Nj L2ZvcnRyYW4vdHJhbnMtaW8uY2MKKysrIGIvZ2NjL2ZvcnRyYW4vdHJhbnMtaW8uY2MKQEAgLTI2 NjQsNiArMjY2NCw3IEBAIHNjYWxhcml6ZToKIAogICBnZmNfYWRkX2Jsb2NrX3RvX2Jsb2NrICgm Ym9keSwgJnNlLnByZSk7CiAgIGdmY19hZGRfYmxvY2tfdG9fYmxvY2sgKCZib2R5LCAmc2UucG9z dCk7CisgIGdmY19hZGRfYmxvY2tfdG9fYmxvY2sgKCZib2R5LCAmc2UuZmluYWxibG9jayk7CiAK ICAgaWYgKHNlLnNzID09IE5VTEwpCiAgICAgdG1wID0gZ2ZjX2ZpbmlzaF9ibG9jayAoJmJvZHkp OwpkaWZmIC0tZ2l0IGEvZ2NjL2ZvcnRyYW4vdHJhbnMtc3RtdC5jYyBiL2djYy9mb3J0cmFuL3Ry YW5zLXN0bXQuY2MKaW5kZXggMDRmODE0N2QyM2IuLmUwZjUxM2Y4OTQxIDEwMDY0NAotLS0gYS9n Y2MvZm9ydHJhbi90cmFucy1zdG10LmNjCisrKyBiL2djYy9mb3J0cmFuL3RyYW5zLXN0bXQuY2MK QEAgLTQ0Myw3ICs0NDMsOCBAQCBnZmNfdHJhbnNfY2FsbCAoZ2ZjX2NvZGUgKiBjb2RlLCBib29s IGRlcGVuZGVuY3lfY2hlY2ssCiAgICAgICBlbHNlCiAJZ2ZjX2FkZF9leHByX3RvX2Jsb2NrICgm c2UucHJlLCBzZS5leHByKTsKIAotICAgICAgZ2ZjX2FkZF9ibG9ja190b19ibG9jayAoJnNlLnBy ZSwgJnNlLnBvc3QpOworICAgICAgZ2ZjX2FkZF9ibG9ja190b19ibG9jayAoJnNlLmZpbmFsYmxv Y2ssICZzZS5wb3N0KTsKKyAgICAgIGdmY19hZGRfYmxvY2tfdG9fYmxvY2sgKCZzZS5wcmUsICZz ZS5maW5hbGJsb2NrKTsKICAgICB9CiAKICAgZWxzZQpAQCAtNTQyLDYgKzU0Myw3IEBAIGdmY190 cmFuc19jYWxsIChnZmNfY29kZSAqIGNvZGUsIGJvb2wgZGVwZW5kZW5jeV9jaGVjaywKICAgICAg IGdmY190cmFuc19zY2FsYXJpemluZ19sb29wcyAoJmxvb3AsICZib2R5KTsKICAgICAgIGdmY19h ZGRfYmxvY2tfdG9fYmxvY2sgKCZzZS5wcmUsICZsb29wLnByZSk7CiAgICAgICBnZmNfYWRkX2Js b2NrX3RvX2Jsb2NrICgmc2UucHJlLCAmbG9vcC5wb3N0KTsKKyAgICAgIGdmY19hZGRfYmxvY2tf dG9fYmxvY2sgKCZzZS5wcmUsICZsb29wc2UuZmluYWxibG9jayk7CiAgICAgICBnZmNfYWRkX2Js b2NrX3RvX2Jsb2NrICgmc2UucHJlLCAmc2UucG9zdCk7CiAgICAgICBnZmNfY2xlYW51cF9sb29w ICgmbG9vcCk7CiAgICAgfQpAQCAtNjMzNyw3ICs2MzM5LDEwIEBAIGdmY190cmFuc19hbGxvY2F0 ZSAoZ2ZjX2NvZGUgKiBjb2RlKQogCX0KICAgICAgIGdmY19hZGRfYmxvY2tfdG9fYmxvY2sgKCZi bG9jaywgJnNlLnByZSk7CiAgICAgICBpZiAoY29kZS0+ZXhwcjMtPm11c3RfZmluYWxpemUpCi0J Z2ZjX2FkZF9ibG9ja190b19ibG9jayAoJmZpbmFsX2Jsb2NrLCAmc2UucG9zdCk7CisJeworCSAg Z2ZjX2FkZF9ibG9ja190b19ibG9jayAoJmZpbmFsX2Jsb2NrLCAmc2UuZmluYWxibG9jayk7CisJ ICBnZmNfYWRkX2Jsb2NrX3RvX2Jsb2NrICgmZmluYWxfYmxvY2ssICZzZS5wb3N0KTsKKwl9CiAg ICAgICBlbHNlCiAJZ2ZjX2FkZF9ibG9ja190b19ibG9jayAoJnBvc3QsICZzZS5wb3N0KTsKIApk aWZmIC0tZ2l0IGEvZ2NjL2ZvcnRyYW4vdHJhbnMuY2MgYi9nY2MvZm9ydHJhbi90cmFucy5jYwpp bmRleCAzMzNkZmE2OTY0Mi4uZmFiZGNkZTcyNjcgMTAwNjQ0Ci0tLSBhL2djYy9mb3J0cmFuL3Ry YW5zLmNjCisrKyBiL2djYy9mb3J0cmFuL3RyYW5zLmNjCkBAIC0xMjQyLDYgKzEyNDIsOSBAQCBn ZmNfYWRkX2ZpbmFsaXplcl9jYWxsIChzdG10YmxvY2tfdCAqYmxvY2ssIGdmY19leHByICpleHBy MikKICAgaWYgKCFleHByMiB8fCAoZXhwcjItPnRzLnR5cGUgIT0gQlRfREVSSVZFRCAmJiBleHBy Mi0+dHMudHlwZSAhPSBCVF9DTEFTUykpCiAgICAgcmV0dXJuIGZhbHNlOwogCisgIGlmIChnZmNf ZXhwcl9hdHRyIChleHByMikuYXJ0aWZpY2lhbCkKKyAgICByZXR1cm4gZmFsc2U7CisKICAgaWYg KGV4cHIyLT50cy50eXBlID09IEJUX0RFUklWRUQpCiAgICAgewogICAgICAgZ2ZjX2lzX2ZpbmFs aXphYmxlIChleHByMi0+dHMudS5kZXJpdmVkLCAmZmluYWxfZXhwcik7CmRpZmYgLS1naXQgYS9n Y2MvZm9ydHJhbi90cmFucy5oIGIvZ2NjL2ZvcnRyYW4vdHJhbnMuaAppbmRleCA3MzhjNzQ4N2E1 Ni4uNzJhZjU0YzRkMjkgMTAwNjQ0Ci0tLSBhL2djYy9mb3J0cmFuL3RyYW5zLmgKKysrIGIvZ2Nj L2ZvcnRyYW4vdHJhbnMuaApAQCAtNDMsNiArNDMsMTAgQEAgdHlwZWRlZiBzdHJ1Y3QgZ2ZjX3Nl CiAgIHN0bXRibG9ja190IHByZTsKICAgc3RtdGJsb2NrX3QgcG9zdDsKIAorICAvKiBDYXJyaWVz IGZpbmFsaXphdGlvbiBjb2RlIHRoYXQgaXMgcmVxdWlyZWQgdG8gYmUgZXhlY3V0ZWQgZXhlY3V0 aW9uIG9mIHRoZQorICAgICBpbm5lcm1vc3QgZXhlY3V0YWJsZSBjb25zdHJ1Y3QuICAqLworICBz dG10YmxvY2tfdCBmaW5hbGJsb2NrOworCiAgIC8qIHRoZSByZXN1bHQgb2YgdGhlIGV4cHJlc3Np b24gKi8KICAgdHJlZSBleHByOwogCkBAIC01NSw3ICs1OSw3IEBAIHR5cGVkZWYgc3RydWN0IGdm Y19zZQogCiAgIC8qIFdoZXRoZXIgZXhwciBpcyBhIHJlZmVyZW5jZSB0byBhbiB1bmxpbWl0ZWQg cG9seW1vcnBoaWMgb2JqZWN0LiAgKi8KICAgdW5zaWduZWQgdW5saW1pdGVkX3BvbHltb3JwaGlj OjE7Ci0gIAorCiAgIC8qIElmIHNldCBnZmNfY29udl92YXJpYWJsZSB3aWxsIHJldHVybiBhbiBl eHByZXNzaW9uIGZvciB0aGUgYXJyYXkKICAgICAgZGVzY3JpcHRvci4gV2hlbiBzZXQsIHdhbnRf cG9pbnRlciBzaG91bGQgYWxzbyBiZSBzZXQuCiAgICAgIElmIG5vdCBzZXQgc2NhbGFyaXppbmcg dmFyaWFibGVzIHdpbGwgYmUgc3Vic3RpdHV0ZWQuICAqLwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3Rz dWl0ZS9nZm9ydHJhbi5kZy9hbGxvY2F0ZV93aXRoX3NvdXJjZV8yNS5mOTAgYi9nY2MvdGVzdHN1 aXRlL2dmb3J0cmFuLmRnL2FsbG9jYXRlX3dpdGhfc291cmNlXzI1LmY5MAppbmRleCA5MmRjNTA3 NTZkNC4uZGUyMGExNDc4NDIgMTAwNjQ0Ci0tLSBhL2djYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcv YWxsb2NhdGVfd2l0aF9zb3VyY2VfMjUuZjkwCisrKyBiL2djYy90ZXN0c3VpdGUvZ2ZvcnRyYW4u ZGcvYWxsb2NhdGVfd2l0aF9zb3VyY2VfMjUuZjkwCkBAIC02OCw0ICs2OCw0IEBAIGNvbnRhaW5z CiAgIGVuZCBmdW5jdGlvbiBmdW5jX2Zvb19hCiAKIGVuZCBwcm9ncmFtIHNpbXBsZV9sZWFrCi0h IHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiXD5fZmluYWwiIDYgIm9yaWdpbmFs IiB9IH0KKyEgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJcPl9maW5hbCIgNCAi b3JpZ2luYWwiIH0gfQo= --000000000000e458c605d720451c Content-Type: text/x-fortran; charset="US-ASCII"; name="finalize_42.f90" Content-Disposition: attachment; filename="finalize_42.f90" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kz7229ck5 ISB7IGRnLWRvIHJ1biB9CiEKISBUZXN0IHRoZSBmaXggZm9yIFBSNzE3OTggaW4gd2hpY2ggdGhl IHJlc3VsdCBvZiAnY3JlYXRlX215dHlwZScKISB3YXMgbm90IGJlaW5nIGZpbmFsaXplZCBhZnRl ciB0aGUgY29tcGxldGlvbiBvZiB0aGUgYXNzaWdubWVudAohIHN0YXRlbWVudC4KIQohIENvbnRy aWJ1dGVkIGJ5IEpvbmF0aGFuIEhvZ2cgIDxqaG9nZzQxQGdtYWlsLmNvbT4KIQptb2R1bGUgbXlt b2QKICAgaW1wbGljaXQgbm9uZQoKICAgaW50ZWdlciA6OiBuZXh0ID0gMAoKICAgdHlwZSA6OiBt eXR5cGUKICAgICAgaW50ZWdlciA6OiBpZHggPSAtMQogICBjb250YWlucwogICAgICBwcm9jZWR1 cmUgOjogbXl0eXBlX2Fzc2lnbgogICAgICBnZW5lcmljIDo6IGFzc2lnbm1lbnQoPSkgPT4gbXl0 eXBlX2Fzc2lnbgogICAgICBmaW5hbCA6OiBteXR5cGVfZmluYWwKICAgZW5kIHR5cGUgbXl0eXBl Cgpjb250YWlucwogICBzdWJyb3V0aW5lIG15dHlwZV9hc3NpZ24odGhpcywgb3RoZXIpCiAgICAg IGNsYXNzKG15dHlwZSksIGludGVudChpbm91dCkgOjogdGhpcwogICAgICBjbGFzcyhteXR5cGUp LCBpbnRlbnQoaW4pIDo6IG90aGVyCgogICAgICB0aGlzJWlkeCA9IG5leHQKICAgICAgbmV4dCA9 IG5leHQgKyAxCiAgICAgIGlmIChuZXh0IC89IDIpIHN0b3AgMgogICBlbmQgc3Vicm91dGluZSBt eXR5cGVfYXNzaWduCgogICBzdWJyb3V0aW5lIG15dHlwZV9maW5hbCh0aGlzKQogICAgICB0eXBl KG15dHlwZSkgOjogdGhpcwogICAgICBuZXh0ID0gbmV4dCArIDEKICAgICAgaWYgKG5leHQgLz0g Mykgc3RvcCAzCiAgIGVuZCBzdWJyb3V0aW5lIG15dHlwZV9maW5hbAoKICAgdHlwZShteXR5cGUp IGZ1bmN0aW9uIGNyZWF0ZV9teXR5cGUoKQogICAgICBjcmVhdGVfbXl0eXBlJWlkeCA9IG5leHQK ICAgICAgbmV4dCA9IG5leHQgKyAxCiAgICAgIGlmIChuZXh0IC89IDEpIHN0b3AgMQogICBlbmQg ZnVuY3Rpb24gY3JlYXRlX215dHlwZQoKZW5kIG1vZHVsZSBteW1vZAoKcHJvZ3JhbSB0ZXN0CiAg IHVzZSBteW1vZAogICBpbXBsaWNpdCBub25lCgogICB0eXBlKG15dHlwZSkgOjogeAoKICAgeCA9 IGNyZWF0ZV9teXR5cGUoKQoKZW5kIHByb2dyYW0gdGVzdAo= --000000000000e458c605d720451c Content-Type: text/x-fortran; charset="US-ASCII"; name="finalize_40.f90" Content-Disposition: attachment; filename="finalize_40.f90" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kz7229bw3 ISB7IGRnLWRvIHJ1biB9CiEKISBUZXN0IHRoYXQgUFI2NzQ3MSBpcyBmaXhlZC4gVXNlZCBub3Qg dG8gY2FsbCB0aGUgZmluYWxpemVyLgohCiEgQ29udHJpYnV0ZWQgYnkgSWFuIEhhcnZleSAgPGlh bl9oYXJ2ZXlAYmlncG9uZC5jb20+CiEKbW9kdWxlIHRlc3RfZmluYWxfbW9kCiAgaW1wbGljaXQg bm9uZQogIHR5cGUgOjogbXlfZmluYWwKICAgIGludGVnZXIgOjogbiA9IDEKICBjb250YWlucwog ICAgZmluYWwgOjogZGVzdHJveV9yYW5rMV9hcnJheQogIGVuZCB0eXBlIG15X2ZpbmFsCiAgaW50 ZWdlciA6OiBmaW5hbF9jYWxscyA9IDAKY29udGFpbnMKICBzdWJyb3V0aW5lIGRlc3Ryb3lfcmFu azFfYXJyYXkoc2VsZikKICAgIHR5cGUobXlfZmluYWwpLCBpbnRlbnQoaW5vdXQpIDo6IHNlbGYo OikKICAgIGlmIChzaXplKHNlbGYpIC89IDApIHRoZW4KICAgICAgaWYgKHNpemUoc2VsZikgLz0g Mikgc3RvcCAxCiAgICAgIGlmIChhbnkgKHNlbGYlbiAvPSBbMyw0XSkpIHN0b3AgMgogICAgZWxz ZQogICAgICBzdG9wIDMKICAgIGVuZCBpZgogICAgZmluYWxfY2FsbHMgPSBmaW5hbF9jYWxscyAr IDEKICBlbmQgc3Vicm91dGluZSBkZXN0cm95X3JhbmsxX2FycmF5CmVuZCBtb2R1bGUgdGVzdF9m aW5hbF9tb2QKCnByb2dyYW0gdGVzdF9maW5hbGl6ZXIKICB1c2UgdGVzdF9maW5hbF9tb2QKICBp bXBsaWNpdCBub25lCiAgdHlwZShteV9maW5hbCkgOjogYig0KSwgYygyKQoKICBiJW4gPSBbMiwg MywgNCwgNV0KICBjJW4gPSBbNiwgN10KICBiKDI6MykgPSBjCiAgaWYgKGZpbmFsX2NhbGxzIC89 IDEpIHN0b3AgNAplbmQgcHJvZ3JhbSB0ZXN0X2ZpbmFsaXplcgo= --000000000000e458c605d720451c 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_kz7229b41 ISB7IGRnLWRvIHJ1biB9CiEKISBUZXN0IGZpbmFsaXphdGlvbiBvbiBpbnRyaW5zaWMgYXNzaWdu bWVudCAoRjIwMTggKDcuNS42LjMpKQohCm1vZHVsZSB0ZXN0bW9kZQogIGltcGxpY2l0IG5vbmUK CiAgdHlwZSA6OiBzaW1wbGUKICAgIGludGVnZXIgOjogaW5kCiAgY29udGFpbnMKICAgIGZpbmFs IDo6IGRlc3RydWN0b3IxLCBkZXN0cnVjdG9yMgogIGVuZCB0eXBlIHNpbXBsZQoKICB0eXBlLCBl eHRlbmRzKHNpbXBsZSkgOjogY29tcGxpY2F0ZWQKICAgIHJlYWwgOjogcmluZAogIGNvbnRhaW5z CiAgICBmaW5hbCA6OiBkZXN0cnVjdG9yMywgZGVzdHJ1Y3RvcjQKICBlbmQgdHlwZSBjb21wbGlj YXRlZAoKICBpbnRlZ2VyIDo6IGNoZWNrX3NjYWxhcgogIGludGVnZXIgOjogY2hlY2tfYXJyYXko NCkKICByZWFsIDo6IGNoZWNrX3JlYWwKICByZWFsIDo6IGNoZWNrX3JhcnJheSg0KQogIGludGVn ZXIgOjogZmluYWxfY291bnQgPSAwCgpjb250YWlucwoKICBzdWJyb3V0aW5lIGRlc3RydWN0b3Ix KHNlbGYpCiAgICB0eXBlKHNpbXBsZSksIGludGVudChpbm91dCkgOjogc2VsZgogICAgY2hlY2tf c2NhbGFyID0gc2VsZiVpbmQKICAgIGNoZWNrX2FycmF5ID0gMAogICAgZmluYWxfY291bnQgPSBm aW5hbF9jb3VudCArIDEKICBlbmQgc3Vicm91dGluZSBkZXN0cnVjdG9yMQoKICBzdWJyb3V0aW5l IGRlc3RydWN0b3IyKHNlbGYpCiAgICB0eXBlKHNpbXBsZSksIGludGVudChpbm91dCkgOjogc2Vs Zig6KQogICAgY2hlY2tfc2NhbGFyID0gMAogICAgY2hlY2tfYXJyYXkoMTpzaXplKHNlbGYsIDEp KSA9IHNlbGYlaW5kCiAgICBmaW5hbF9jb3VudCA9IGZpbmFsX2NvdW50ICsgMQogIGVuZCBzdWJy b3V0aW5lIGRlc3RydWN0b3IyCgogIHN1YnJvdXRpbmUgZGVzdHJ1Y3RvcjMoc2VsZikKICAgIHR5 cGUoY29tcGxpY2F0ZWQpLCBpbnRlbnQoaW5vdXQpIDo6IHNlbGYKICAgIGNoZWNrX3JlYWwgPSBz ZWxmJXJpbmQKICAgIGNoZWNrX2FycmF5ID0gMC4wCiAgICBmaW5hbF9jb3VudCA9IGZpbmFsX2Nv dW50ICsgMQogIGVuZCBzdWJyb3V0aW5lIGRlc3RydWN0b3IzCgogIHN1YnJvdXRpbmUgZGVzdHJ1 Y3RvcjQoc2VsZikKICAgIHR5cGUoY29tcGxpY2F0ZWQpLCBpbnRlbnQoaW5vdXQpIDo6IHNlbGYo OikKICAgIGNoZWNrX3JlYWwgPSAwLjAKICAgIGNoZWNrX3JhcnJheSgxOnNpemUoc2VsZiwgMSkp ID0gc2VsZiVyaW5kCiAgICBmaW5hbF9jb3VudCA9IGZpbmFsX2NvdW50ICsgMQogIGVuZCBzdWJy b3V0aW5lIGRlc3RydWN0b3I0CgogIGZ1bmN0aW9uIGNvbnN0cnVjdG9yMShpbmQpIHJlc3VsdChy ZXMpCiAgICB0eXBlKHNpbXBsZSksIGFsbG9jYXRhYmxlIDo6IHJlcwogICAgaW50ZWdlciwgaW50 ZW50KGluKSA6OiBpbmQKICAgIGFsbG9jYXRlIChyZXMsIHNvdXJjZSA9IHNpbXBsZSAoaW5kKSkK ICBlbmQgZnVuY3Rpb24gY29uc3RydWN0b3IxCgogIGZ1bmN0aW9uIGNvbnN0cnVjdG9yMihpbmQs IHJpbmQpIHJlc3VsdChyZXMpCiAgICBjbGFzcyhzaW1wbGUpLCBhbGxvY2F0YWJsZSA6OiByZXMo OikKICAgIGludGVnZXIsIGludGVudChpbikgOjogaW5kKDopCiAgICByZWFsLCBpbnRlbnQoaW4p LCBvcHRpb25hbCA6OiByaW5kKDopCiAgICB0eXBlKGNvbXBsaWNhdGVkKSwgYWxsb2NhdGFibGUg Ojogc3JjKDopCiAgICBpbnRlZ2VyIDo6IHN6CiAgICBpbnRlZ2VyIDo6IGkKICAgIGlmIChwcmVz ZW50IChyaW5kKSkgdGhlbgogICAgICBzeiA9IG1pbiAoc2l6ZSAoaW5kLCAxKSwgc2l6ZSAocmlu ZCwgMSkpCiAgICAgIHNyYyAgPSBbKGNvbXBsaWNhdGVkIChpbmQoaSksIHJpbmQoaSkpLCBpID0g MSwgc3opXQogICAgICBhbGxvY2F0ZSAocmVzLCBzb3VyY2UgPSBzcmMpCiAgICBlbHNlCiAgICAg IHN6ID0gc2l6ZSAoaW5kLCAxKQogICAgICBhbGxvY2F0ZSAocmVzLCBzb3VyY2UgPSBbKHNpbXBs ZSAoaW5kKGkpKSwgaSA9IDEsIHN6KV0pCiAgICBlbmQgaWYKICBlbmQgZnVuY3Rpb24gY29uc3Ry dWN0b3IyCgogIHN1YnJvdXRpbmUgdGVzdCAoY250LCBzY2FsYXIsIGFycmF5LCBvZmYsIHJpbmQs IHJhcnJheSkKICAgIGludGVnZXIgOjogY250CiAgICBpbnRlZ2VyIDo6IHNjYWxhcgogICAgaW50 ZWdlciA6OiBhcnJheSg6KQogICAgaW50ZWdlciA6OiBvZmYKICAgIHJlYWwsIG9wdGlvbmFsIDo6 IHJpbmQKICAgIHJlYWwsIG9wdGlvbmFsIDo6IHJhcnJheSg6KQogICAgaWYgKGZpbmFsX2NvdW50 IC5uZS4gY250KSAgc3RvcCAxICsgb2ZmCiAgICBpZiAoY2hlY2tfc2NhbGFyIC5uZS4gc2NhbGFy KSBzdG9wIDIgKyBvZmYKICAgIGlmIChhbnkgKGNoZWNrX2FycmF5KDE6c2l6ZSAoYXJyYXksIDEp KSAubmUuIGFycmF5KSkgc3RvcCAzICsgb2ZmCiAgICBpZiAocHJlc2VudCAocmluZCkpIHRoZW4K ICAgICAgaWYgKGNoZWNrX3JlYWwgLm5lLiByaW5kKSBzdG9wIDQgKyBvZmYKICAgIGVuZCBpZgog ICAgaWYgKHByZXNlbnQgKHJhcnJheSkpIHRoZW4KICAgICAgaWYgKGFueSAoY2hlY2tfcmFycmF5 KDE6c2l6ZSAocmFycmF5LCAxKSkgLm5lLiByYXJyYXkpKSBzdG9wIDUgKyBvZmYKICAgIGVuZCBp ZgogIGVuZCBzdWJyb3V0aW5lIHRlc3QKCmVuZCBtb2R1bGUgdGVzdG1vZGUKCnByb2dyYW0gdGVz dF9maW5hbAogIHVzZSB0ZXN0bW9kZQogIGltcGxpY2l0IG5vbmUKCiAgdHlwZShzaW1wbGUpLCBh bGxvY2F0YWJsZSA6OiBNeVR5cGUsIE15VHlwZTIKICB0eXBlKHNpbXBsZSksIGFsbG9jYXRhYmxl IDo6IE15VHlwZUFycmF5KDopCiAgdHlwZShzaW1wbGUpIDo6IFRoeVR5cGUgPSBzaW1wbGUoMjEp LCBUaHlUeXBlMiA9IHNpbXBsZSgyMikKICBjbGFzcyhzaW1wbGUpLCBhbGxvY2F0YWJsZSA6OiBN eUNsYXNzCiAgY2xhc3Moc2ltcGxlKSwgYWxsb2NhdGFibGUgOjogTXlDbGFzc0FycmF5KDopCgoh ICoqKioqKioqKioqKioqKioqKioqKioqKgohIERlcml2ZWQgdHlwZSBhc3NpZ25tZW50cwohICoq KioqKioqKioqKioqKioqKioqKioqKgoKISBUaGUgb3JpZ2luYWwgUFIgLSBvbmUgZmluYWxpemF0 aW9uIG9mICd2YXInIGJlZm9yZSAocmUpYWxsb2NhdGlvbi4KICBNeVR5cGUgPSBUaHlUeXBlCiAg Y2FsbCB0ZXN0KDEsIDAsIFswLDBdLCAwKQoKICBpZiAoLm5vdC4gYWxsb2NhdGVkKE15VHlwZSkp IGFsbG9jYXRlKE15VHlwZSkKICBhbGxvY2F0ZShNeVR5cGUyKQogIE15VHlwZSVpbmQgPSAxCiAg TXlUeXBlMiVpbmQgPSAyCgohIFRoaXMgc2hvdWxkIHJlc3VsdCBpbiBhIGZpbmFsIGNhbGwgd2l0 aCBzZWxmID0gc2ltcGxlKDEpLgogIE15VHlwZSA9IE15VHlwZTIKICBjYWxsIHRlc3QoMiwgMSwg WzAsMF0sIDEwKQoKICBhbGxvY2F0ZShNeVR5cGVBcnJheSgyKSkKICBNeVR5cGVBcnJheSVpbmQg PSBbNDIsIDQzXQohIFRoaXMgc2hvdWxkIHJlc3VsdCBpbiBhIGZpbmFsIGNhbGwgd2l0aCBzZWxm ID0gW3NpbXBsZSg0Miksc2ltcGxlKDQzKV0uCiAgTXlUeXBlQXJyYXkgPSBbVGh5VHlwZSwgVGh5 VHlwZTJdCiAgY2FsbCB0ZXN0KDMsIDAsIFs0Miw0M10sIDIwKQoKISBUaGlzIHNob3VsZCByZXN1 bHQgaW4gYSBmaW5hbCBjYWxsIHdpdGggc2VsZiA9IGluaXRpYWxpemF0aW9uID0gc2ltcGxlKDIy KS4KICBUaHlUeXBlMiA9IHNpbXBsZSg5OSkKICBjYWxsIHRlc3QoNCwgMjIsIFswLDBdLCAzMCkK CiEgVGhpcyBzaG91bGQgcmVzdWx0IGluIGEgZmluYWwgY2FsbCB3aXRoIHNlbGYgPSBzaW1wbGUo MjIpLgogIFRoeVR5cGUgPSBUaHlUeXBlMgogIGNhbGwgdGVzdCg1LCAyMSwgWzAsMF0sIDQwKQoK ISBUaGlzIHNob3VsZCByZXN1bHQgaW4gdHdvIGZpbmFsIGNhbGxzOyB0aGUgbGFzdCBpcyBmb3Ig c2VsZjIgPSBzaW1wbGUoMikuCiAgZGVhbGxvY2F0ZSAoTXlUeXBlLCBNeVR5cGUyKQogIGNhbGwg dGVzdCg3LCAyLCBbMCwwXSwgNTApCgohIFRoaXMgc2hvdWxkIHJlc3VsdCBpbiBvbmUgZmluYWwg Y2FsbDsgTXlUeXBlQXJyYXkgPSBbc2ltcGxlKDIxKSxzaW1wbGUoMjIpXS4KICBkZWFsbG9jYXRl IChNeVR5cGVBcnJheSkKICBjYWxsIHRlc3QoOCwgMCwgWzIxLDIyXSwgNjApCgohIENoZWNrIHRo YXQgcmhzIGZ1bmN0aW9uIGV4cHJlc3Npb25zIGRvIG5vdCBpbnRlcmZlcmUgd2l0aCBmaW5hbGl6 YXRpb24uCiEgVGhlIGxocyBpcyBmaW5hbGl6ZWQgYmVmb3JlIGFzc2lnbm1lbnQuCiEgVGhlIGZ1 bmN0aW9uIHJlc3VsdCBpcyBmaW5hbGl6ZWQgYWZ0ZXIgdGhlIGFzc2lnbm1lbnQuCiAgYWxsb2Nh dGUgKE15VHlwZSwgc291cmNlID0gc2ltcGxlICgxMSkpCiAgTXlUeXBlID0gY29uc3RydWN0b3Ix ICg5OSkKICBjYWxsIHRlc3QoMTAsIDk5LCBbMCwwXSwgNzApCgogIGRlYWxsb2NhdGUgKE15VHlw ZSkKISAqKioqKioqKioqKioqKioqKgohIENsYXNzIGFzc2lnbm1lbnRzCiEgKioqKioqKioqKioq KioqKioKCiAgZmluYWxfY291bnQgPSAwCgogIGFsbG9jYXRlIChNeUNsYXNzLCBzb3VyY2UgPSBz aW1wbGUgKDMpKQohIFRoaXMgc2hvdWxkIHJlc3VsdCBpbiBhIGZpbmFsIGNhbGwgd2l0aCB0aGUg YWxsb2NhdGVkIHZhbHVlLgogIE15Q2xhc3MgPSBzaW1wbGUgKDQpCiAgY2FsbCB0ZXN0KDEsIDMs IFswLDBdLCAxMDApCgohIFRoaXMgc2hvdWxkIHJlc3VsdCBpbiBhIGZpbmFsIGNhbGwgd2l0aCB0 aGUgYXNzaWduZWQgdmFsdWUuCiAgZGVhbGxvY2F0ZSAoTXlDbGFzcykKICBjYWxsIHRlc3QoMiwg NCwgWzAsMF0sIDExMCkKCiAgYWxsb2NhdGUgKE15Q2xhc3NBcnJheSwgc291cmNlID0gW3NpbXBs ZSAoNSksIHNpbXBsZSAoNildKQohIE1ha2Ugc3VyZSB0aGF0IHRoZXJlIGlzIG5vIGZpbmFsIGNh bGwuCiAgY2FsbCB0ZXN0KDIsIDQsIFswLDBdLCAxMjApCgogIE15Q2xhc3NBcnJheSA9IFtzaW1w bGUgKDcpLCBzaW1wbGUgKDgpXQohIFRoZSBmaW5hbCBjYWxsIHNob3VsZCByZXR1cm4gdGhlIHZh bHVlIGJlZm9yZSB0aGUgYXNzaWdubWVudC4KICBjYWxsIHRlc3QoMiwgNCwgWzAsMF0sIDEzMCkK CiEgVGhpcyBzaG91bGQgcmVzdWx0IGluIGEgZmluYWwgY2FsbCB3aXRoIHRoZSBhc3NpZ25lZCB2 YWx1ZS4KICBkZWFsbG9jYXRlIChNeUNsYXNzQXJyYXkpCiAgY2FsbCB0ZXN0KDMsIDAsIFs3LDhd LCAxNDApCgohIFRoaXMgc2hvdWxkIHByb2R1Y2Ugbm8gZmluYWwgY2FsbHMuCiAgYWxsb2NhdGUg KE15Q2xhc3NBcnJheSwgc291cmNlID0gW2NvbXBsaWNhdGVkKDEsIDIuMCksY29tcGxpY2F0ZWQo MywgNC4wKV0pCgohIFRoaXMgc2hvdWxkIHByb2R1Y2UgY2FsbHMgdG8gZGVzdHJ1Y3RvcjQgdGhl biBkZXN0cnVjdG9yMi4KICBkZWFsbG9jYXRlIChNeUNsYXNzQXJyYXkpCgohIEYyMDE4IDcuNS42 LjM6ICJJZiB0aGUgZW50aXR5IGlzIG9mIGV4dGVuZGVkIHR5cGUgYW5kIHRoZSBwYXJlbnQgdHlw ZSBpcwohIGZpbmFsaXphYmxlLCB0aGUgcGFyZW50IGNvbXBvbmVudCBpcyBmaW5hbGl6ZWQuCiAg Y2FsbCB0ZXN0KDUsIDAsIFsxLCAzXSwgMTUwLCByYXJyYXkgPSBbMi4wLCA0LjBdKQoKISBTaW5j ZSAnY29uc3RydWN0b3IyOyBtdXN0IGZpbmFsaXplICdzcmMnIGFmdGVyIHRoZSBmaW5hbGl6YXRp b24gb2YKISAnTXlDbGFzc0FycmF5JywgdGhlIHJlc3VsdCBpbiAnY2hlY2tfYXJyYXknIHNob3Vs ZCBiZSBbMTAsMjBdLgogIE15Q2xhc3NBcnJheSA9IGNvbnN0cnVjdG9yMiAoWzEwLDIwXSwgWzEw LjAsMjAuMF0pCiAgY2FsbCB0ZXN0KDksIDAsIFsxMCwyMF0sIDE2MCwgcmFycmF5ID0gWzEwLjAs MjAuMF0pCgogIGRlYWxsb2NhdGUgKE15Q2xhc3NBcnJheSkKICBjYWxsIHRlc3QoMTEsIDAsIFsx MCwgMjBdLCAxNzAsIHJhcnJheSA9IFsxMC4wLDIwLjBdKQplbmQgcHJvZ3JhbSB0ZXN0X2ZpbmFs Cg== --000000000000e458c605d720451c Content-Type: text/x-fortran; charset="US-ASCII"; name="finalize_41.f90" Content-Disposition: attachment; filename="finalize_41.f90" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kz7229c84 ISB7IGRnLWRvIHJ1biB9CiEKISBUZXN0IHRoYXQgUFI2OTI5OCBpcyBmaXhlZC4gVXNlZCB0byBz ZWdmYXVsdCBvbiBmaW5hbGl6YXRpb24gaW4KISBzdWJyb3V0aW5lICdpbl90eXBlJy4KIQohIENv bnRyaWJ1dGVkIGJ5IE5laWwgQ2FybHNvbiAgPG5laWwubi5jYXJsc29uQGdtYWlsLmNvbT4KIQpt b2R1bGUgc3R1ZmZfbW9kCiAgaW1wbGljaXQgbm9uZQogIHByaXZhdGUKICBwdWJsaWMgOjogc3R1 ZmZfdHlwZSwgZmluYWxfY2FsbHMKICB0eXBlIHN0dWZmX3R5cGUKICAgIHByaXZhdGUKICAgIGlu dGVnZXIgOjoganVuawogIGNvbnRhaW5zCiAgICBwcm9jZWR1cmUgZ2V0X2p1bmsKICAgIHByb2Nl ZHVyZSBzdHVmZl9jb3B5X2luaXRpYWxpc2VyCiAgICBnZW5lcmljIDo6IGFzc2lnbm1lbnQoPSkg PT4gc3R1ZmZfY29weV9pbml0aWFsaXNlcgogICAgZmluYWwgOjogc3R1ZmZfc2NhbGFyX2ZpbmFs aXNlciwgJgogICAgICAgICAgICAgc3R1ZmZfMWRfZmluYWxpc2VyCiAgZW5kIHR5cGUgc3R1ZmZf dHlwZQogIGludGVnZXIgOjogZmluYWxfY2FsbHMgPSAwCiAgaW50ZXJmYWNlIHN0dWZmX3R5cGUK ICAgIHByb2NlZHVyZSBzdHVmZl9pbml0aWFsaXNlcgogIGVuZCBpbnRlcmZhY2Ugc3R1ZmZfdHlw ZQpjb250YWlucwoKICBmdW5jdGlvbiBzdHVmZl9pbml0aWFsaXNlcigganVuayApIHJlc3VsdChu ZXdfc3R1ZmYpCiAgICBpbXBsaWNpdCBub25lCiAgICB0eXBlKHN0dWZmX3R5cGUpIDo6IG5ld19z dHVmZgogICAgaW50ZWdlciA6OiBqdW5rCiAgICBuZXdfc3R1ZmYlanVuayA9IGp1bmsKICBlbmQg ZnVuY3Rpb24gc3R1ZmZfaW5pdGlhbGlzZXIKCiAgc3Vicm91dGluZSBzdHVmZl9jb3B5X2luaXRp YWxpc2VyKCBkZXN0aW5hdGlvbiwgc291cmNlICkKICAgIGltcGxpY2l0IG5vbmUKICAgIGNsYXNz KHN0dWZmX3R5cGUpLCBpbnRlbnQob3V0KSA6OiBkZXN0aW5hdGlvbgogICAgY2xhc3Moc3R1ZmZf dHlwZSksIGludGVudChpbikgIDo6IHNvdXJjZQogICAgZGVzdGluYXRpb24lanVuayA9IHNvdXJj ZSVqdW5rCiAgZW5kIHN1YnJvdXRpbmUgc3R1ZmZfY29weV9pbml0aWFsaXNlcgoKICBzdWJyb3V0 aW5lIHN0dWZmX3NjYWxhcl9maW5hbGlzZXIoIHRoaXMgKQogICAgaW1wbGljaXQgbm9uZQogICAg dHlwZShzdHVmZl90eXBlKSwgaW50ZW50KGlub3V0KSA6OiB0aGlzCiAgICBmaW5hbF9jYWxscyA9 IGZpbmFsX2NhbGxzICsgMQogIGVuZCBzdWJyb3V0aW5lIHN0dWZmX3NjYWxhcl9maW5hbGlzZXIK CiAgc3Vicm91dGluZSBzdHVmZl8xZF9maW5hbGlzZXIoIHRoaXMgKQogICAgaW1wbGljaXQgbm9u ZQogICAgdHlwZShzdHVmZl90eXBlKSwgaW50ZW50KGlub3V0KSA6OiB0aGlzKDopCiAgICBpbnRl Z2VyIDo6IGkKICAgIGZpbmFsX2NhbGxzID0gZmluYWxfY2FsbHMgKyAxMDAKICBlbmQgc3Vicm91 dGluZSBzdHVmZl8xZF9maW5hbGlzZXIKCiAgZnVuY3Rpb24gZ2V0X2p1bmsoIHRoaXMgKSByZXN1 bHQoanVuaykKICAgIGltcGxpY2l0IG5vbmUKICAgIGNsYXNzKHN0dWZmX3R5cGUpLCBpbnRlbnQo aW4pIDo6IHRoaXMKICAgIGludGVnZXIgOjoganVuawogICAganVuayA9IHRoaXMlanVuawogIGVu ZCBmdW5jdGlvbiBnZXRfanVuawplbmQgbW9kdWxlIHN0dWZmX21vZAoKbW9kdWxlIHRlc3RfbW9k CiAgdXNlIHN0dWZmX21vZCwgb25seSA6IHN0dWZmX3R5cGUsIGZpbmFsX2NhbGxzCiAgaW1wbGlj aXQgbm9uZQogIHByaXZhdGUKICBwdWJsaWMgOjogdGVzdF90eXBlCiAgdHlwZSB0ZXN0X3R5cGUK ICAgIHByaXZhdGUKICAgIHR5cGUoc3R1ZmZfdHlwZSkgOjogdGhpbmcKICAgIHR5cGUoc3R1ZmZf dHlwZSkgOjogdGhpbmdzKDMpCiAgY29udGFpbnMKICAgIHByb2NlZHVyZSBnZXRfdmFsdWUKICBl bmQgdHlwZSB0ZXN0X3R5cGUKICBpbnRlcmZhY2UgdGVzdF90eXBlCiAgICBwcm9jZWR1cmUgdGVz dF90eXBlX2luaXRpYWxpc2VyCiAgZW5kIGludGVyZmFjZSB0ZXN0X3R5cGUKY29udGFpbnMKCiAg ZnVuY3Rpb24gdGVzdF90eXBlX2luaXRpYWxpc2VyKCkgcmVzdWx0KG5ld190ZXN0KQogICAgaW1w bGljaXQgbm9uZQogICAgdHlwZSh0ZXN0X3R5cGUpIDo6IG5ld190ZXN0CiAgICBpbnRlZ2VyIDo6 IGkKICAgIG5ld190ZXN0JXRoaW5nID0gc3R1ZmZfdHlwZSggNCApCiAgICBkbyBpID0gMSwgMwog ICAgICBuZXdfdGVzdCV0aGluZ3MoaSkgPSBzdHVmZl90eXBlKCBpICkKICAgIGVuZCBkbwogIGVu ZCBmdW5jdGlvbiB0ZXN0X3R5cGVfaW5pdGlhbGlzZXIKCiAgZnVuY3Rpb24gZ2V0X3ZhbHVlKCB0 aGlzICkgcmVzdWx0KHZhbHVlKQogICAgaW1wbGljaXQgbm9uZQogICAgY2xhc3ModGVzdF90eXBl KSA6OiB0aGlzCiAgICBpbnRlZ2VyIDo6IHZhbHVlCiAgICBpbnRlZ2VyIDo6IGkKICAgIHZhbHVl ID0gdGhpcyV0aGluZyVnZXRfanVuaygpCiAgICBkbyBpID0gMSwgMwogICAgICB2YWx1ZSA9IHZh bHVlICsgdGhpcyV0aGluZ3MoaSklZ2V0X2p1bmsoKQogICAgZW5kIGRvCiAgZW5kIGZ1bmN0aW9u IGdldF92YWx1ZQplbmQgbW9kdWxlIHRlc3RfbW9kCgpwcm9ncmFtIHRlc3QKICB1c2Ugc3R1ZmZf bW9kLCBvbmx5IDogc3R1ZmZfdHlwZSwgZmluYWxfY2FsbHMKICB1c2UgdGVzdF9tb2QsICBvbmx5 IDogdGVzdF90eXBlCiAgaW1wbGljaXQgbm9uZQogIGNhbGwgaGVyZSgpCiAgY2FsbCBpbl90eXBl KCkKISAyMSBjYWxscyB0byBzY2FsYXIgZmluYWxpemVyIGFuZCA0IHRvIHRoZSB2ZWN0b3IgdmVy c2lvbgogIGlmIChmaW5hbF9jYWxscyAubmUuIDQyMSkgc3RvcCAxCmNvbnRhaW5zCgogIHN1YnJv dXRpbmUgaGVyZSgpCiAgICBpbXBsaWNpdCBub25lCiAgICB0eXBlKHN0dWZmX3R5cGUpIDo6IHRo aW5nCiAgICB0eXBlKHN0dWZmX3R5cGUpIDo6IGJpdHMoMykKICAgIGludGVnZXIgOjogaQogICAg aW50ZWdlciA6OiB0YWxseQogICAgdGhpbmcgPSBzdHVmZl90eXBlKDQpCiAgICBkbyBpID0gMSwg MwogICAgICBiaXRzKGkpID0gc3R1ZmZfdHlwZShpKQogICAgZW5kIGRvCiAgICB0YWxseSA9IHRo aW5nJWdldF9qdW5rKCkKICAgIGRvIGkgPSAxLCAzCiAgICAgIHRhbGx5ID0gdGFsbHkgKyBiaXRz KGkpJWdldF9qdW5rKCkKICAgIGVuZCBkbwogICAgaWYgKHRhbGx5IC5uZS4gMTApIHN0b3AgMgog IGVuZCBzdWJyb3V0aW5lIGhlcmUKCiAgc3Vicm91dGluZSBpbl90eXBlKCkKICAgIGltcGxpY2l0 IG5vbmUKICAgIHR5cGUodGVzdF90eXBlKSA6OiB0aGluZwogICAgdGhpbmcgPSB0ZXN0X3R5cGUo KQogICAgaWYgKHRoaW5nJWdldF92YWx1ZSgpIC5uZS4gMTApIHN0b3AgMgogIGVuZCBzdWJyb3V0 aW5lIGluX3R5cGUKZW5kIHByb2dyYW0gdGVzdAo= --000000000000e458c605d720451c Content-Type: text/x-fortran; charset="US-ASCII"; name="finalize_39.f90" Content-Disposition: attachment; filename="finalize_39.f90" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kz7229bi2 ISB7IGRnLWRvIHJ1biB9CiEKISBUZXN0IHRoZSBmaXggZm9yIFBSNjc0NDQgaW4gd2hpY2ggdGhl IGZpbmFsaXphdGlvbiBvZiBhIHBvbHltb3JwaGljICd2YXInCiEgd2FzIG5vdCBiZWluZyBmaW5h bGl6ZWQgYmVmb3JlIGFzc2lnbm1lbnQuIChTVE9QIDMpCiEKISBDb250cmlidXRlZCBieSBCYWxp bnQgQXJhZGkgIDxiYWxhZGlAZ21haWwuY29tPgohCm1vZHVsZSBjbGFzc2VzCiAgaW1wbGljaXQg bm9uZQogIGludGVnZXIgOjogaXZhbHVlID0gMAogIGludGVnZXIgOjogaWNhbGwgPSAwCiAgaW50 ZWdlciA6OiBmdmFsdWUgPSAwCgogIHR5cGUgOjogQmFzaWMKICAgIGludGVnZXIgOjogaWkgPSAt MQogIGNvbnRhaW5zCiAgICBwcm9jZWR1cmUgOjogYXNzaWduQmFzaWMKICAgIGdlbmVyaWMgOjog YXNzaWdubWVudCg9KSA9PiBhc3NpZ25CYXNpYwogICAgZmluYWwgOjogZGVzdHJ1Y3RCYXNpYwog IGVuZCB0eXBlIEJhc2ljCiAgaW50ZXJmYWNlIEJhc2ljCiAgICBtb2R1bGUgcHJvY2VkdXJlIGlu aXRCYXNpYwogIGVuZCBpbnRlcmZhY2UgQmFzaWMKY29udGFpbnMKICBmdW5jdGlvbiBpbml0QmFz aWMoaW5pdFZhbHVlKSByZXN1bHQodGhpcykKICAgIGludGVnZXIsIGludGVudChpbikgOjogaW5p dFZhbHVlCiAgICB0eXBlKEJhc2ljKSA6OiB0aGlzCiAgICB0aGlzJWlpID0gaW5pdFZhbHVlCiAg ICBpY2FsbCA9IGljYWxsICsgMQogIGVuZCBmdW5jdGlvbiBpbml0QmFzaWMKICBzdWJyb3V0aW5l IGFzc2lnbkJhc2ljKHRoaXMsIG90aGVyKQogICAgY2xhc3MoQmFzaWMpLCBpbnRlbnQob3V0KSA6 OiB0aGlzCiAgICB0eXBlKEJhc2ljKSwgaW50ZW50KGluKSA6OiBvdGhlcgogICAgdGhpcyVpaSA9 IG90aGVyJWlpICsgMQogICAgaWNhbGwgPSBvdGhlciVpaQogIGVuZCBzdWJyb3V0aW5lIGFzc2ln bkJhc2ljCiAgc3Vicm91dGluZSBkZXN0cnVjdEJhc2ljKHRoaXMpCiAgICB0eXBlKEJhc2ljKSwg aW50ZW50KGlub3V0KSA6OiB0aGlzCiAgICBmdmFsdWUgPSBmdmFsdWUgKyAxCiAgICBzZWxlY3Qg Y2FzZSAoZnZhbHVlKQogICAgY2FzZSAoMSkKICAgICAgICBpZiAodGhpcyVpaSAvPSAtMSkgc3Rv cCAxICAgICAgICAgICEgRmlyc3QgZmluYWxpemF0aW9uIGJlZm9yZSBhc3NpZ25tZW50IHRvICd2 YXInCiAgICAgICAgaWYgKGljYWxsIC89IDEpIHN0b3AgMiAgICAgICAgICAgICAhIGFuZCBiZWZv cmUgZXZhbHVhdGlvbiBvZiAnZXhwcicuCiAgICBjYXNlKDIpCiAgICAgICAgaWYgKHRoaXMlaWkg Lz0gaXZhbHVlKSBzdG9wIDMgICAgICAhIEZpbmFsaXphdGlvbiBvZiBpbnRlbnQob3V0KSBpbiAn YXNzaWduQmFzaWMnCiAgICAgICAgaWYgKGljYWxsIC89IDQyKSBzdG9wIDQgICAgICAgICAgICAh IGFuZCBhZnRlciBldmFsdWF0aW9uIG9mICdleHByJy4KICAgIGNhc2UoMykKICAgICAgICBpZiAo dGhpcyVpaSAvPSBpdmFsdWUgKyAxKSBzdG9wIDUgICEgRmluYWxpemF0aW9uIG9mICdleHByJyAo ZnVuY3Rpb24hKSBhZnRlciBhc3NpZ25tZW50LgogICAgY2FzZSBkZWZhdWx0CiAgICAgICAgc3Rv cCA2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhIFRvbyBtYW55IG9yIG5vIGZpbmFsaXph dGlvbnMKICAgIGVuZCBzZWxlY3QKICBlbmQgc3Vicm91dGluZSBkZXN0cnVjdEJhc2ljCmVuZCBt b2R1bGUgY2xhc3NlcwoKbW9kdWxlIHVzYWdlCiAgdXNlIGNsYXNzZXMKICBpbXBsaWNpdCBub25l CmNvbnRhaW5zCiAgc3Vicm91dGluZSB1c2VCYXNpYygpCiAgICB0eXBlKEJhc2ljKSA6OiBiYXMK ICAgIGl2YWx1ZSA9IDQyCiAgICBiYXMgPSBCYXNpYyhpdmFsdWUpCiAgZW5kIHN1YnJvdXRpbmUg dXNlQmFzaWMKZW5kIG1vZHVsZSB1c2FnZQoKcHJvZ3JhbSB0ZXN0CiAgdXNlIHVzYWdlCiAgaW1w bGljaXQgbm9uZQogIGNhbGwgdXNlQmFzaWMoKQogIGlmIChmdmFsdWUgLz0gMykgc3RvcCA3ICAg ICAgICAgICAgICAgICAgISAzIGZpbmFsaXphdGlvbnMgbWFuZGF0ZWQuCmVuZCBwcm9ncmFtIHRl c3QK --000000000000e458c605d720451c Content-Type: text/x-fortran; charset="US-ASCII"; name="finalize_43.f90" Content-Disposition: attachment; filename="finalize_43.f90" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kz7229cv6 ISB7IGRnLWRvIHJ1biB9CiEKISBUZXN0IHRoZSBmaXggZm9yIFBSODA1MjQsIHdoZXJlIGdmb3J0 cmFuIG9uIGlzc3VlZCBvbmUgZmluYWwgY2FsbAohIEZvciAndScgZ29pbmcgb3V0IG9mIHNjb3Bl LiBUd28gZnVydGhlciBjYWxsIHNob3VsZCBiZSBlbWl0dGVkOyBvbmUKISBmb3IgdGhlIGxocyBv ZiB0aGUgYXNzaWdubWVudCBpbiAncycgYW5kIHRoZSBvdGhlciBmb3IgdGhlIGZ1bmN0aW9uCiEg cmVzdWx0LCB3aGljaCBvY2N1cnMgYWZ0ZXIgYXNzaWdubWVudC4KIQohIENvbnRyaWJ1dGVkIGJ5 IEFuZHJldyBXb29kICA8YW5kcmV3QGZsdWlkZ3Jhdml0eS5jby51az4KIQpNT0RVTEUgbTEKICAg SU1QTElDSVQgTk9ORQogICBpbnRlZ2VyIDo6IGNvdW50ZXIgPSAwCiAgIGludGVnZXIgOjogZnZh bCA9IDAKICAgVFlQRSB0CiAgICAgIElOVEVHRVIgOjogaQogICAgICBDT05UQUlOUwogICAgICAg ICBGSU5BTCA6OiB0X2ZpbmFsCiAgIEVORCBUWVBFIHQKICAgQ09OVEFJTlMKICAgICAgU1VCUk9V VElORSB0X2ZpbmFsKHRoaXMpCiAgICAgICAgIFRZUEUodCkgOjogdGhpcwogICAgICAgICBjb3Vu dGVyID0gY291bnRlciArIDEKICAgICAgRU5EIFNVQlJPVVRJTkUKICAgICAgRlVOQ1RJT04gbmV3 X3QoKQogICAgICAgICBUWVBFKHQpIDo6IG5ld190CiAgICAgICAgIG5ld190JWkgPSAxCiAgICAg ICAgIGZ2YWwgPSBuZXdfdCVpCiAgICAgICAgIGlmIChjb3VudGVyIC89IDApIHN0b3AgMSAgICEg RmluYWxpemF0aW9uIG9mICd2YXInIGFmdGVyIGV2YWx1YXRpb24gb2YgJ2V4cHInCiAgICAgIEVO RCBGVU5DVElPTiBuZXdfdAogICAgICBTVUJST1VUSU5FIHMKICAgICAgICAgVFlQRSh0KSA6OiB1 CiAgICAgICAgIHUgPSBuZXdfdCgpCiAgICAgICAgIGlmIChjb3VudGVyIC89IDIpIHN0b3AgMiAg ICEgRmluYWxpemF0aW9uIG9mICd2YXInIGFuZCAnZXhwcicKICAgICAgRU5EIFNVQlJPVVRJTkUg cwpFTkQgTU9EVUxFIG0xClBST0dSQU0gcHJvZwogICBVU0UgbTEKICAgSU1QTElDSVQgTk9ORQog ICBDQUxMIHMKICAgaWYgKGNvdW50ZXIgLz0gMykgc3RvcCAzICAgICAgICAgISBGaW5hbGl6YXRp b24gb2YgJ3UnIGluICdzJwpFTkQgUFJPR1JBTSBwcm9nCg== --000000000000e458c605d720451c Content-Type: text/x-fortran; charset="US-ASCII"; name="finalize_46.f90" Content-Disposition: attachment; filename="finalize_46.f90" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kz7229dl9 ISB7IGRnLWRvIHJ1biB9CiEKISBUZXN0IHRoZSBmaXggZm9yIHByODg3MzUgaW4gd2hpY2ggbm9u LWZpbmFsaXphYmxlIGVudGl0aWVzIHdlcmUgYmVpbmcKISBmaW5hbGl6ZWQgYmVjYXVzZSB0aGV5 IGhhZCBmaW5hbGl6YWJsZSBjb21wb25lbnRzIGFuZCAndmFyJyBpbiBkZWZpbmVkCiEgYXNzaWdu bWVudHMgd2FzIGJlaW5nIGZpbmFsaXplZC4KIQohIENvbnRyaWJ1dGVkIGJ5IE1hcnRpbiBTdGVp biAgPG1zY2ZkQGdteC5uZXQ+CiEKbW9kdWxlIG1vZAogIGltcGxpY2l0IG5vbmUKICB0eXBlLCBw dWJsaWMgOjogdAogICAgIGludGVnZXIsIGFsbG9jYXRhYmxlIDo6IGkKICBjb250YWlucwogICAg IHByb2NlZHVyZSwgcHVibGljIDo6IHNldAogICAgIGdlbmVyaWMsIHB1YmxpYyA6OiBhc3NpZ25t ZW50KD0pID0+IHNldAogICAgIGZpbmFsIDo6IGZpbmFsaXNlCiAgZW5kIHR5cGUgdAogIGludGVn ZXIsIHB1YmxpYyA6OiBmaW5hbF9jb3VudCA9IDAKCmNvbnRhaW5zCgogIHN1YnJvdXRpbmUgc2V0 KHNlbGYsIHgpCiAgICAgY2xhc3ModCksIGludGVudChpbm91dCkgOjogc2VsZgogICAgIGNsYXNz KHQpLCBpbnRlbnQoaW4pICA6OiB4CiAgICAgaWYgKGFsbG9jYXRlZCh4JWkpKSB0aGVuCiAgICAg ICAgc2VsZiVpID0geCVpCiAgICAgICAgc2VsZiVpID0gc2VsZiVpICsgMQogICAgIGVuZCBpZgpl bmQgc3Vicm91dGluZSBzZXQKCiAgc3Vicm91dGluZSBmaW5hbGlzZShzZWxmKQogICAgIHR5cGUo dCksIGludGVudChpbm91dCkgOjogc2VsZgogICAgIGlmIChhbGxvY2F0ZWQoc2VsZiVpKSkgdGhl bgogICAgICAgIGZpbmFsX2NvdW50ID0gZmluYWxfY291bnQgKyAxCiAgICAgICAgZGVhbGxvY2F0 ZShzZWxmJWkpCiAgICAgZW5kIGlmCiAgZW5kIHN1YnJvdXRpbmUgZmluYWxpc2UKCmVuZCBtb2R1 bGUgbW9kCgpwcm9ncmFtIGZpbmFsaXNlX2Fzc2lnbgogIHVzZSBtb2QKICBpbXBsaWNpdCBub25l CiAgdHlwZSA6OiBzCiAgICAgdHlwZSh0KSA6OiB4CiAgZW5kIHR5cGUgcwogIHR5cGUocykgOjog YSwgYgogIHR5cGUodCkgOjogYwogIGEleCVpID0gMTIzCiEgUHJvZHVjZXMgbm8gZmluYWwgY2Fs bHMgYmVjYXVzZSAnYicgaXMgbm90IGEgJ2ZpbmFsaXphYmxlIGVudGl0eScuCiAgYiA9IGEKICBp ZiAoZmluYWxfY291bnQgLz0gMCkgc3RvcCAxCiEgUHJvZHVjZXMgbm8gZmluYWwgY2FsbHMgYmVj YXVzZSB0aGlzIGlzIGEgZGVmaW5lZCBhc3NpZ25tZW50LgogIGMgPSBhJXgKICBpZiAoZmluYWxf Y291bnQgLz0gMCkgc3RvcCAyCmVuZCBwcm9ncmFtIGZpbmFsaXNlX2Fzc2lnbgo= --000000000000e458c605d720451c Content-Type: text/x-fortran; charset="US-ASCII"; name="finalize_44.f90" Content-Disposition: attachment; filename="finalize_44.f90" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kz7229d47 ISB7IGRnLWRvIHJ1biB9CiEKISBUZXN0IHRoZSBmaXggZm9yIGFsbCB0aHJlZSB2YXJpYW50cyBv ZiBQUjgyOTk2LCB3aGljaCB1c2VkIHRvCiEgc2VnZmF1bHQgaW4gdGhlIG9yaWdpbmFsIHRlc3Rj YXNlIGFuZCBJQ0UgaW4gdGhlIHRlc3RjYXNlcyBvZgohIGNvbW1lbnRzIDEgYW5kIDIuCiEKISBD b250cmlidXRlZCBieSBOZWlsIENhcmxzb24gIDxuZWlsLm4uY2FybHNvbkBnbWFpbC5jb20+CiEK bW9kdWxlIG1vZDAKICBpbnRlZ2VyIDo6IGZpbmFsX2NvdW50X2ZvbyA9IDAKICBpbnRlZ2VyIDo6 IGZpbmFsX2NvdW50X2JhciA9IDAKZW5kIG1vZHVsZSBtb2QwCiEKISBUaGlzIGlzIHRoZSBvcmln aW5hbCB0ZXN0Y2FzZSwgd2l0aCBhIGZpbmFsIHJvdXRpbmUgJ2ZvbycgYnV0CiEgYnV0IG5vdCBp biB0aGUgY29udGFpbmVyIHR5cGUgJ2JhcjEnLgohCm1vZHVsZSBtb2QxCiAgdXNlIG1vZDAKICBw cml2YXRlIGZvbywgZm9vX2Rlc3Ryb3kKICB0eXBlIGZvbwogICAgaW50ZWdlciwgcG9pbnRlciA6 OiBmKDopID0+IG51bGwoKQogIGNvbnRhaW5zCiAgICBmaW5hbCA6OiBmb29fZGVzdHJveQogIGVu ZCB0eXBlCiAgdHlwZSBiYXIxCiAgICB0eXBlKGZvbykgOjogYigyKQogIGVuZCB0eXBlCmNvbnRh aW5zCiAgaW1wdXJlIGVsZW1lbnRhbCBzdWJyb3V0aW5lIGZvb19kZXN0cm95KHRoaXMpCiAgICB0 eXBlKGZvbyksIGludGVudChpbm91dCkgOjogdGhpcwogICAgZmluYWxfY291bnRfZm9vID0gZmlu YWxfY291bnRfZm9vICsgMQogICAgaWYgKGFzc29jaWF0ZWQodGhpcyVmKSkgZGVhbGxvY2F0ZSh0 aGlzJWYpCiAgZW5kIHN1YnJvdXRpbmUKZW5kIG1vZHVsZSBtb2QxCiEKISBDb21tZW50IDEgd2Fz IHRoZSBzYW1lIGFzIG9yaWdpbmFsLCBleGNlcHQgdGhhdCB0aGUKISAnZm9vJyBmaW5hbGl6ZXIg aXMgZWxlbWVudGFsIGFuZCBhICdiYXInIGZpbmFsaXplciBpcyBhZGRlZC4uCiEKbW9kdWxlIG1v ZDIKICB1c2UgbW9kMAogIHByaXZhdGUgZm9vLCBmb29fZGVzdHJveSwgYmFyX2Rlc3Ryb3kKICB0 eXBlIGZvbwogICAgaW50ZWdlciwgcG9pbnRlciA6OiBmKDopID0+IG51bGwoKQogIGNvbnRhaW5z CiAgICBmaW5hbCA6OiBmb29fZGVzdHJveQogIGVuZCB0eXBlCiAgdHlwZSBiYXIyCiAgICB0eXBl KGZvbykgOjogYigyKQogIGNvbnRhaW5zCiAgICBmaW5hbCA6OiBiYXJfZGVzdHJveQogIGVuZCB0 eXBlCmNvbnRhaW5zCiAgaW1wdXJlIGVsZW1lbnRhbCBzdWJyb3V0aW5lIGZvb19kZXN0cm95KHRo aXMpCiAgICB0eXBlKGZvbyksIGludGVudChpbm91dCkgOjogdGhpcwogICAgZmluYWxfY291bnRf Zm9vID0gZmluYWxfY291bnRfZm9vICsgMQogICAgaWYgKGFzc29jaWF0ZWQodGhpcyVmKSkgZGVh bGxvY2F0ZSh0aGlzJWYpCiAgZW5kIHN1YnJvdXRpbmUKICBzdWJyb3V0aW5lIGJhcl9kZXN0cm95 KHRoaXMpCiAgICB0eXBlKGJhcjIpLCBpbnRlbnQoaW5vdXQpIDo6IHRoaXMKICAgIGZpbmFsX2Nv dW50X2JhciA9IGZpbmFsX2NvdW50X2JhciArIDEKICAgIGNhbGwgZm9vX2Rlc3Ryb3kodGhpcyVi KQogIGVuZCBzdWJyb3V0aW5lCmVuZCBtb2R1bGUgbW9kMgohCiEgQ29tbWVudCAyIHdhcyB0aGUg c2FtZSBhcyBjb21tZW50IDEsIGV4Y2VwdCB0aGF0IHRoZSAnZm9vJwohIGZpbmFsaXplciBpcyBu byBsb25nZXIgZWxlbWVudGFsLgohCm1vZHVsZSBtb2QzCiAgdXNlIG1vZDAKICBwcml2YXRlIGZv bywgZm9vX2Rlc3Ryb3ksIGJhcl9kZXN0cm95CiAgdHlwZSBmb28KICAgIGludGVnZXIsIHBvaW50 ZXIgOjogZig6KSA9PiBudWxsKCkKICBjb250YWlucwogICAgZmluYWwgOjogZm9vX2Rlc3Ryb3kK ICBlbmQgdHlwZQogIHR5cGUgYmFyMwogICAgdHlwZShmb28pIDo6IGIoMikKICBjb250YWlucwog ICAgZmluYWwgOjogYmFyX2Rlc3Ryb3kKICBlbmQgdHlwZQpjb250YWlucwogIHN1YnJvdXRpbmUg Zm9vX2Rlc3Ryb3kodGhpcykKICAgIHR5cGUoZm9vKSwgaW50ZW50KGlub3V0KSA6OiB0aGlzCiAg ICBmaW5hbF9jb3VudF9mb28gPSBmaW5hbF9jb3VudF9mb28gKyAxCiAgICBpZiAoYXNzb2NpYXRl ZCh0aGlzJWYpKSBkZWFsbG9jYXRlKHRoaXMlZikKICBlbmQgc3Vicm91dGluZQogIHN1YnJvdXRp bmUgYmFyX2Rlc3Ryb3kodGhpcykKICAgIHR5cGUoYmFyMyksIGludGVudChpbm91dCkgOjogdGhp cwogICAgZmluYWxfY291bnRfYmFyID0gZmluYWxfY291bnRfYmFyICsgMQogICAgZG8gaiA9IDEs IHNpemUodGhpcyViKQogICAgICBjYWxsIGZvb19kZXN0cm95KHRoaXMlYihqKSkKICAgIGVuZCBk bwogIGVuZCBzdWJyb3V0aW5lCmVuZCBtb2R1bGUgbW9kMwoKcHJvZ3JhbSBtYWluCiAgdXNlIG1v ZDAKICB1c2UgbW9kMQogIHVzZSBtb2QyCiAgdXNlIG1vZDMKICB0eXBlKGJhcjEpIDo6IHgKICB0 eXBlKGJhcjIpIDo6IHkKICB0eXBlKGJhcjMpIDo6IHoKICBjYWxsIHN1YjEoeCkKICBpZiAoZmlu YWxfY291bnRfZm9vIC89IDIpIHN0b3AgMQogIGlmIChmaW5hbF9jb3VudF9iYXIgLz0gMCkgc3Rv cCAyCiAgY2FsbCBzdWIyKHkpCiAgaWYgKGZpbmFsX2NvdW50X2ZvbyAvPSA2KSBzdG9wIDMKICBp ZiAoZmluYWxfY291bnRfYmFyIC89IDEpIHN0b3AgNAogIGNhbGwgc3ViMyh6KQogIGlmIChmaW5h bF9jb3VudF9mb28gLz0gOCkgc3RvcCA1CiAgaWYgKGZpbmFsX2NvdW50X2JhciAvPSAyKSBzdG9w IDYKY29udGFpbnMKICBzdWJyb3V0aW5lIHN1YjEoeCkKICAgIHR5cGUoYmFyMSksIGludGVudChv dXQpIDo6IHgKICBlbmQgc3Vicm91dGluZQogIHN1YnJvdXRpbmUgc3ViMih4KQogICAgdHlwZShi YXIyKSwgaW50ZW50KG91dCkgOjogeAogIGVuZCBzdWJyb3V0aW5lCiAgc3Vicm91dGluZSBzdWIz KHgpCiAgICB0eXBlKGJhcjMpLCBpbnRlbnQob3V0KSA6OiB4CiAgZW5kIHN1YnJvdXRpbmUKZW5k IHByb2dyYW0K --000000000000e458c605d720451c Content-Type: text/x-fortran; charset="US-ASCII"; name="finalize_47.f90" Content-Disposition: attachment; filename="finalize_47.f90" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kz7229dr10 ISB7IGRnLWRvIHJ1biB9CiEKISBUZXN0IHRoZSBmaXggZm9yIHByOTEzOTYgaW4gd2hpY2ggc29t ZSBvZiB0aGUgZXhwZWN0ZWQgZmluYWxpemF0aW9ucwohIGRpZCBub3Qgb2NjdXI7IHdpdGhpbiBz MyBhbmQgczQgc2NvcGVzLgohCiEgQ29udHJpYnV0ZWQgYnkgSm9zZSBSdWkgRmF1c3RpbmUgZGUg U291c2EgIDxqcmZzb3VzYUBnY2MuZ251Lm9yZz4KIQptb2R1bGUgZmluYWxfbQoKICBpbXBsaWNp dCBub25lCgogIHByaXZhdGUKCiAgcHVibGljIDo6ICAgICAgICAmCiAgICBhc3NpZ25tZW50KD0p CgogIHB1YmxpYyA6OiAmCiAgICBmaW5hbF90CgogIGludGVnZXIsIHB1YmxpYyA6OiBmaW5hbF9j b3VudAoKICBwdWJsaWMgOjogICAgICYKICAgIGZpbmFsX2luaXQsICYKICAgIGZpbmFsX3NldCwg ICYKICAgIGZpbmFsX2dldCwgICYKICAgIGZpbmFsX2VuZAoKICB0eXBlIDo6IGZpbmFsX3QKICAg IHByaXZhdGUKICAgIGludGVnZXIgOjogbiA9IC0xCiAgY29udGFpbnMKICAgIGZpbmFsIDo6IGZp bmFsX2VuZAogIGVuZCB0eXBlIGZpbmFsX3QKCiAgaW50ZXJmYWNlIGFzc2lnbm1lbnQoPSkKICAg IG1vZHVsZSBwcm9jZWR1cmUgZmluYWxfaW5pdAogIGVuZCBpbnRlcmZhY2UgYXNzaWdubWVudCg9 KQoKY29udGFpbnMKCiAgZWxlbWVudGFsIHN1YnJvdXRpbmUgZmluYWxfaW5pdCh0aGlzLCBuKQog ICAgdHlwZShmaW5hbF90KSwgaW50ZW50KG91dCkgOjogdGhpcwogICAgaW50ZWdlciwgICAgICAg aW50ZW50KGluKSAgOjogbgoKICAgIHRoaXMlbiA9IG4KICAgIHJldHVybgogIGVuZCBzdWJyb3V0 aW5lIGZpbmFsX2luaXQKCiAgZWxlbWVudGFsIGZ1bmN0aW9uIGZpbmFsX3NldChuKSByZXN1bHQo dGhpcykKICAgIGludGVnZXIsIGludGVudChpbikgOjogbgoKICAgIHR5cGUoZmluYWxfdCkgOjog dGhpcwoKICAgIHRoaXMlbiA9IG4KICAgIHJldHVybgogIGVuZCBmdW5jdGlvbiBmaW5hbF9zZXQK CiAgZWxlbWVudGFsIGZ1bmN0aW9uIGZpbmFsX2dldCh0aGlzKSByZXN1bHQobikKICAgIHR5cGUo ZmluYWxfdCksIGludGVudChpbikgOjogdGhpcwoKICAgIGludGVnZXIgOjogbgoKICAgIG4gPSB0 aGlzJW4KICAgIHJldHVybgogIGVuZCBmdW5jdGlvbiBmaW5hbF9nZXQKCiAgc3Vicm91dGluZSBm aW5hbF9lbmQodGhpcykKICAgIHR5cGUoZmluYWxfdCksIGludGVudChpbm91dCkgOjogdGhpcwoK ICAgIGZpbmFsX2NvdW50ID0gZmluYWxfY291bnQgKyAxCiAgICB0aGlzJW4gPSAtMQogICAgcmV0 dXJuCiAgZW5kIHN1YnJvdXRpbmUgZmluYWxfZW5kCgplbmQgbW9kdWxlIGZpbmFsX20KCnByb2dy YW0gZmluYWxfcAoKICB1c2UgZmluYWxfbQoKICBpbXBsaWNpdCBub25lCgogIHR5cGUoZmluYWxf dCkgOjogZjAKCiEgIHByaW50ICosICJlbnRlciBtYWluIgogIGNhbGwgZmluYWxfaW5pdChmMCwg MCkKISAgcHJpbnQgKiwgImVudGVyIGZpbmFsX3MxIgogIGNhbGwgZmluYWxfczEoKQohICBwcmlu dCAqLCAiZXhpdCBmaW5hbF9zMSIKISAgcHJpbnQgKiwgImVudGVyIGZpbmFsX3MyIgogIGNhbGwg ZmluYWxfczIoKQohICBwcmludCAqLCAiZXhpdCBmaW5hbF9zMiIKISAgcHJpbnQgKiwgImVudGVy IGZpbmFsX3MzIgogIGNhbGwgZmluYWxfczMoKQohICBwcmludCAqLCAiZXhpdCBmaW5hbF9zMyIK ISAgcHJpbnQgKiwgImVudGVyIGZpbmFsX3M0IgogIGNhbGwgZmluYWxfczQoKQohICBwcmludCAq LCAiZXhpdCBmaW5hbF9zNCIKISAgcHJpbnQgKiwgImYwOiAiLCBmaW5hbF9nZXQoZjApCiAgISB0 aGlzIHNob3VsZCBiZSBhdXRvbWF0aWMuLi4KICBjYWxsIGZpbmFsX2VuZChmMCkKICBpZiAoZmlu YWxfY291bnQgLz0gMTApIHN0b3AgMQogIHN0b3AKCmNvbnRhaW5zCgogIHN1YnJvdXRpbmUgZmlu YWxfczEoKQoKICAgIHR5cGUoZmluYWxfdCkgOjogZgoKICAgIGNhbGwgZmluYWxfaW5pdChmLCAx KQogICAgcHJpbnQgKiwgImYxOiAiLCBmaW5hbF9nZXQoZikKISBUd28gZmluYWxpemF0aW9ucyBm b3IgSU5URU5UKE9VVCkgaW4gZmluYWxfaW5pdCB0aGlzIHNjb3BlIGFuZCBtYWluIHByb2dyYW0u CiAgICBpZiAoZmluYWxfY291bnQgLz0gMikgc3RvcCAyCiAgICByZXR1cm4KICBlbmQgc3Vicm91 dGluZSBmaW5hbF9zMQoKICBzdWJyb3V0aW5lIGZpbmFsX3MyKCkKCiAgICB0eXBlKGZpbmFsX3Qp IDo6IGYKCiAgICBmID0gMgohIE9uZSBmaW5hbGl6YXRpb24gZm9yIElOVEVOVChPVVQpIGluIGZp bmFsX2luaXQsIHVzZWQgaW4gdGhlIGRlZmluZWQgYXNzaWdubWVudAohIGFuZCBvbmUgZm9yIGxl YXZpbmcgJ3MxJyBzY29wZS4KICAgIGlmIChmaW5hbF9jb3VudCAvPSA0KSBzdG9wIDMKICAgIHBy aW50ICosICJmMjogIiwgZmluYWxfZ2V0KGYpCiAgICByZXR1cm4KICBlbmQgc3Vicm91dGluZSBm aW5hbF9zMgoKICBzdWJyb3V0aW5lIGZpbmFsX3MzKCkKCiAgICB0eXBlKGZpbmFsX3QpIDo6IGYK CiAgICBmID0gZmluYWxfc2V0KDMpCiAgICBwcmludCAqLCAiZjM6ICIsIGZpbmFsX2dldChmKQoh IE9uZSBmaW5hbGl6YXRpb24gZm9yICd2YXIsIGluIHRoZSBhc3NpZ25tZW50LCBvbmUgZm9yIHRo ZSByZXN1bHQgb2YgZmluYWxfc2V0CiEgYW5kIG9uZSBmb3IgbGVhdmluZyAnczInIHNjb3BlLgog ICAgaWYgKGZpbmFsX2NvdW50IC89IDcpIHN0b3AgNAogICAgcmV0dXJuCiAgZW5kIHN1YnJvdXRp bmUgZmluYWxfczMKCiAgc3Vicm91dGluZSBmaW5hbF9zNCgpCgogICAgcHJpbnQgKiwgImY0OiAi LCBmaW5hbF9nZXQoZmluYWxfc2V0KDQpKSwgIiAiLCBmaW5hbF9jb3VudAohIE9uZSBmaW5hbGl6 YXRpb24gZm9yIHRoZSByZXN1bHQgb2YgZmluYWxfc2V0IGFuZCBvbmUgZm9yIGxlYXZpbmcgJ3Mz JyBzY29wZS4KICAgIHJldHVybgogIGVuZCBzdWJyb3V0aW5lIGZpbmFsX3M0CgplbmQgcHJvZ3Jh bSBmaW5hbF9wCgo= --000000000000e458c605d720451c Content-Type: text/x-fortran; charset="US-ASCII"; name="finalize_45.f90" Content-Disposition: attachment; filename="finalize_45.f90" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kz7229dh8 ISB7IGRnLWRvIHJ1biB9CiEKISBUZXN0IHRoZSBmaXggZm9yIFBSODQ0NzIgaW4gd2hpY2ggdGhl IGZpbmFsaXphdGlvbnMgYXJvdW5kIHRoZQohIGFzc2lnbm1lbnQgaW4gJ215bWFpbicgd2VyZSBu b3QgaGFwcGVuaW5nLgohCiEgQ29udHJpYnV0ZWQgYnkgVmlwdWwgUGFyZWtoICA8Zm9ydHJhbmZh bkBvdXRsb29rLmNvbT4KIQptb2R1bGUgbQoKICAgdXNlLCBpbnRyaW5zaWMgOjogaXNvX2ZvcnRy YW5fZW52LCBvbmx5IDogb3V0cHV0X3VuaXQKCiAgIGltcGxpY2l0IG5vbmUKCiAgIHByaXZhdGUK CiAgIGludGVnZXIsIHB1YmxpYyA6OiBmaW5hbF9jb3VudHMgPSAwCiAgIGludGVnZXIsIHB1Ymxp YyA6OiBhc3NvY19jb3VudHMgPSAwCgogICB0eXBlIDo6IHQKICAgICAgcHJpdmF0ZQogICAgICBj aGFyYWN0ZXIobGVuPTopLCBwb2ludGVyIDo6IG1fcyA9PiBudWxsKCkKICAgY29udGFpbnMKICAg ICAgcHJpdmF0ZQogICAgICBmaW5hbCA6OiBmaW5hbF90CiAgICAgIHByb2NlZHVyZSwgcGFzcyh0 aGlzKSwgcHVibGljIDo6IGNsZWFuID0+IGNsZWFuX3QKICAgICAgcHJvY2VkdXJlLCBwYXNzKHRo aXMpLCBwdWJsaWMgOjogaW5pdCA9PiBpbml0X3QKICAgZW5kIHR5cGUKCiAgIGludGVyZmFjZSB0 CiAgICAgIG1vZHVsZSBwcm9jZWR1cmUgOjogY29uc3RydWN0X3QKICAgZW5kIGludGVyZmFjZQoK ICAgcHVibGljIDo6IHQKCmNvbnRhaW5zCgogICBmdW5jdGlvbiBjb25zdHJ1Y3RfdCggbmFtZSAp IHJlc3VsdChuZXdfdCkKCiAgICAgICEgYXJndW1lbnQgbGlzdAogICAgICBjaGFyYWN0ZXIobGVu PSopLCBpbnRlbnQoaW4pLCBvcHRpb25hbCA6OiBuYW1lCiAgICAgICEgZnVuY3Rpb24gcmVzdWx0 CiAgICAgIHR5cGUodCkgOjogbmV3X3QKCiAgICAgIGlmICggcHJlc2VudChuYW1lKSApIHRoZW4K ICAgICAgICAgY2FsbCBuZXdfdCVpbml0KCBuYW1lICkKICAgICAgZW5kIGlmCgogICBlbmQgZnVu Y3Rpb24KCiAgIHN1YnJvdXRpbmUgZmluYWxfdCggdGhpcyApCgogICAgICAhIGFyZ3VtZW50IGxp c3QKICAgICAgdHlwZSh0KSwgaW50ZW50KGlub3V0KSA6OiB0aGlzCgogICAgICBmaW5hbF9jb3Vu dHMgPSBmaW5hbF9jb3VudHMgKyAxCiAgICAgIGlmICggYXNzb2NpYXRlZCh0aGlzJW1fcykgKSB0 aGVuCiAgICAgICAgIGFzc29jX2NvdW50cyA9IGFzc29jX2NvdW50cyArIDEKICAgICAgZW5kaWYK ICAgICAgY2FsbCBjbGVhbl90KCB0aGlzICkKCiAgIGVuZCBzdWJyb3V0aW5lCgogICBzdWJyb3V0 aW5lIGNsZWFuX3QoIHRoaXMgKQoKICAgICAgISBhcmd1bWVudCBsaXN0CiAgICAgIGNsYXNzKHQp LCBpbnRlbnQoaW5vdXQpIDo6IHRoaXMKCiAgICAgIGlmICggYXNzb2NpYXRlZCh0aGlzJW1fcykg KSB0aGVuCiAgICAgICAgIGRlYWxsb2NhdGUoIHRoaXMlbV9zICkKICAgICAgZW5kIGlmCiAgICAg IHRoaXMlbV9zID0+IG51bGwoKQoKICAgZW5kIHN1YnJvdXRpbmUKCiAgIHN1YnJvdXRpbmUgaW5p dF90KCB0aGlzLCBtbmFtZSApCgogICAgICAhIGFyZ3VtZW50IGxpc3QKICAgICAgY2xhc3ModCks IGludGVudChpbm91dCkgICAgICA6OiB0aGlzCiAgICAgIGNoYXJhY3RlcihsZW49KiksIGludGVu dChpbikgOjogbW5hbWUKCiAgICAgIGNhbGwgdGhpcyVjbGVhbigpCiAgICAgIGFsbG9jYXRlKGNo YXJhY3RlcihsZW4obW5hbWUpKSA6OiB0aGlzJW1fcykKICAgICAgdGhpcyVtX3MgPSBtbmFtZQoK ICAgZW5kIHN1YnJvdXRpbmUKCmVuZCBtb2R1bGUKICAgdXNlIG0sIG9ubHkgOiBmaW5hbF9jb3Vu dHMsIGFzc29jX2NvdW50cwogICBjYWxsIG15bWFpbgogICBpZiAoZmluYWxfY291bnRzIC89IDMp IHN0b3AgMQogICBpZiAoYXNzb2NfY291bnRzIC89IDIpIHN0b3AgMgoKY29udGFpbnMKICAgc3Vi cm91dGluZSBteW1haW4KCiAgIHVzZSBtLCBvbmx5IDogdAoKICAgaW1wbGljaXQgbm9uZQoKICAg Y2hhcmFjdGVyKDMpLCBhbGxvY2F0YWJsZSwgdGFyZ2V0IDo6IG15bmFtZQoKICAgdHlwZSh0KSA6 OiBmb28KCiAgIGNhbGwgZm9vJWluaXQoIG1uYW1lPSIxMjMiICkKCiAgIG15bmFtZSA9ICJmb28i CiAgIGZvbyA9IHQoIG15bmFtZSApCgogICBjYWxsIGZvbyVjbGVhbigpCiAgIGlmIChmaW5hbF9j b3VudHMgLz0gMikgc3RvcCAzCiAgIGlmIChhc3NvY19jb3VudHMgLz0gMikgc3RvcCA0CiAgIGVu ZAplbmQKCg== --000000000000e458c605d720451c--