From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-qk1-x730.google.com (mail-qk1-x730.google.com [IPv6:2607:f8b0:4864:20::730]) by sourceware.org (Postfix) with ESMTPS id 83FA7385842F for ; Fri, 18 Feb 2022 18:06:54 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 83FA7385842F Received: by mail-qk1-x730.google.com with SMTP id v5so6385896qkj.4 for ; Fri, 18 Feb 2022 10:06:54 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=v/aLHgMDDRawHxlPFu2aK048qCweYDBM9JeNqS6Kj9w=; b=zQWgH4OIO9v+6eB1mxeB1NAvNnu9Lgdw0v4AFNzzrmmURxmltG6uUJwrkC+/vknWO4 y14DcgMJaselh75Ms9ezPT9YFmG//dWqANTDAnGkwc9d6KBtO+m48JtudRJbyz/OQgVg NFvCUyiPN64IffpWrtxOCoj0tmlxOxGSweQZBT2qfDGVnXYwq/WoJnGAvJbWwm7p3fLA 45OES8l9ZblgDXr2LVlONVXYGdTy/qtDwu8Pxmzv/jzc+XjkdjyIveHb3q+ojjw67KkF ri8rgs+PS5V10AWwNNUywX12mmb/XqWg04Q6+kzHCH1b1bzs1Q6ZCbcGNpRvZrIFDEjx AqUg== X-Gm-Message-State: AOAM5305Q/FCxHc6M4NJGqSbMPBN+wembKLad6+0Ew6vF/dL2ZiQJ9lN bsW3wFFq8XiL5lhylD6K9D1OJGhaBXPpdjm6p2g= X-Google-Smtp-Source: ABdhPJz1PTfLqw3EkZPSnWNlRrWODqesSfHiJFBAEdc2cGfIKFV7I7CAhBVBiH2IHAPWAD+GAtY8ezrTiZ3AgeZyDSU= X-Received: by 2002:a37:bd4:0:b0:606:4caa:650a with SMTP id 203-20020a370bd4000000b006064caa650amr5344053qkl.197.1645207614033; Fri, 18 Feb 2022 10:06:54 -0800 (PST) MIME-Version: 1.0 References: <9a2667e2-8055-bcac-1862-05c8ac60ce7a@gmx.de> <3cbaf568-84ac-8498-558f-9560fe395d66@gmx.de> <7ab973cd-f62e-28be-36e8-4e44252a4a38@gmx.de> <061aee5b-c27c-3a9f-419d-9893c2d744c4@netcologne.de> In-Reply-To: <061aee5b-c27c-3a9f-419d-9893c2d744c4@netcologne.de> From: Paul Richard Thomas Date: Fri, 18 Feb 2022 18:06:42 +0000 Message-ID: Subject: Re: [Patch, fortran] PR37336 (Finalization) - [F03] Finish derived-type finalization To: Thomas Koenig Cc: Harald Anlauf , Alessandro Fanfarillo , Andrew Benson , "fortran@gcc.gnu.org" Content-Type: multipart/mixed; boundary="0000000000006add2505d84ebfde" X-Spam-Status: No, score=-7.2 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, 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: Fri, 18 Feb 2022 18:07:00 -0000 --0000000000006add2505d84ebfde Content-Type: text/plain; charset="UTF-8" Hi Harald and Thomas, Thank you for your contributions to understanding the interpretation by different vendors of the F2018 requirements for finalization. While it does appear to be rather chaotic, the differences are down to a small number of "features" of each compiler. Before describing my interpretation of the behaviour of the offerings from other vendors, I should remark briefly about where I am with gfortran. I now have a patch that handles derived types correctly according to F2018 7.5.6.2 and 7.5.6.3, modulo the ambiguous requirement for the handling of parent components that I will come to when discussing ifort. I have a patch ready to fix this, should Intel's interpretation be correct. I have not moved on to class finalization yet because there are memory leaks connected with finalization of function results that I have yet to pin down. Also, finalization of function results within array and structure constructors is yet to come. Once I have it all working, I will break up the patch into a number of stages to make it more digestible for review. However, just in case I fall under the proverbial bus, I have attached the patch for reference. Turning to the results from the other vendors: Cray: Seemingly, the only difference in interpretation concerns the finalization of structure constructors. 7.5.6.3 paragraphs 5 and 6 only mention function results. Having scoured the standard for guidance, I have only found Note 7.57: "name(...) ...snip... is interpreted as a structure constructor only if it cannot be interpreted as a generic function reference." From this, I take it that a structure constructor is distinct from a function reference and, since not mentioned in 7.5.6.3, the result should not be finalized. nagfor 7.1: The NAG offering seems to be a bit inconsistent in the finalization of function results. It is missing in assignment 4 and suffers a surfeit in assignment 5. The two extras in assignment 5 seem to be mangled. As far as I can tell, these are problems of implementation rather than interpretation. ifort: In all the versions tested, assignment 1 generates, contrary to the standard, a finalization of an unallocated allocated 'var'. The other difference from gfortran with the patch applied is in the finalization of the parent component in the finalization of arrays of extended types. ifort makes use of the scalar finalizer, whereas all the other compilers use the array finalizer. In fairness to the folk at Intel, I think that there is an ambiguity in 7.5.6.2 - "(2) All finalizable components that appear in the type definition are finalized in a processor-dependent order. If the entity being finalized is an array, each finalizable component of each element of that entity is finalized separately. (3) If the entity is of extended type and the parent type is finalizable, the parent component is finalized." The separate mention of the parent component in (3) rather than in (2) saying, "..each finalizable component, including the parent component,..." implies that it is in some way different. I think that an interpretation request is in order. I will be unavailable to do any gfortran work for two weeks now but will complete this work then. Best regards and thanks again. Paul On Thu, 17 Feb 2022 at 21:23, Thomas Koenig wrote: > Hi Paul, > > > I have gone back to the start and have gone through finalizable derived > > type assignments with the F2018 in hand. I have had a dreadful time with > > direct by reference function calls and still am struggling with > assignment > > number 6 in the attached. I would be very grateful if you would run this > > testcase for the other brands. > > This is the output of nagfor 7.1, no idea how correct this is. > > Best regards > > Thomas > > At start of program: final_count = 0 > ******************************************************************* > > 1st assignment: No finalization because MyType unallocated. > After 1st assignment(var not allocated): final_count = 0(0) > ******************************************************************* > > 2nd assignment: MyType(=simple(1,MyType) finalized before assignment > finalize simple - Mytype2%ind = 1 > After 2nd assignment(var allocated): final_count = 1(1) > ******************************************************************* > > 3rd assignment: MyTypeArray(%ind = [41 42]) finalized before assignment > > finalize simple(:) - MyTypeArray%ind= 42 43 > After 3rd assignment(array var allocated): final_count = 1(1) > ******************************************************************* > > Deallocation generates final call with self = simple (21, ThyType) > 4th assignment: MyTypeArray finalized before assignment > Mtype finalized before assignment with self = simple (11, MyType) > Function result finalized after assignment with self = simple (99, > MyType) > > finalize simple - ThyType%ind = 21 > finalize simple - MyType%ind = 11 > After 4th assignment(array var allocated) :final_count = 2(3) > ******************************************************************* > > 5th assignment: MyTypeArray finalized before assignment > 1] First finalization is of 'res' in constructor3 with: > Self = [complicated (-1, constructor3, 0.0), complicated (-1, > ThyTypeArra1, 0.0)] > 2] ThyTypeArray is finalized before assignment and after evaluation of > constructor3 > Self = [3 times complicated (-1, ThyTypeArra1,0.0)] > 3] Function result finalized after assignment with > Self = [complicated (-1, ThyTypeArra2, 0.0), complicated (-1, > ThyTypeArra2, 0.0)] > > constructor3: final_count = 0 > finalize complicated(2) - constructor3 = 0 0 0.00 0.00 > finalize simple(:) - constructor3%ind= 0 0 > finalize complicated(3) - ThyTypeArra1 = -1 -1 -1 0.00 0.00 0.00 > finalize simple(:) - ThyTypeArra1%ind= -1 -1 -1 > finalize complicated(2) - ThyTypeArra2 = 1 3 2.00 4.00 > finalize simple(:) - ThyTypeArra2%ind= 1 3 > finalize complicated(2) - IypeArra2 = **** 3 2.00 4.00 > finalize simple(:) - IypeArra2%ind= **** 3 > finalize complicated(2) - IypeArra2 = **** 3 2.00 4.00 > finalize simple(:) - IypeArra2%ind= **** 3 > After 5th assignment(array var allocated): 10(6) > > ******************************************************************* > Deallocate ThyTypeArray. > finalize complicated(2) - ThyTypeArra2 = 1 3 2.00 4.00 > finalize simple(:) - ThyTypeArra2%ind= 1 3 > > ******************************************************************* > 6th assignment: A repeat of the previous with an allocatable function > result. > This should give the same result as the 5th assignment. > > constructor4: final_count = 0 > finalize complicated(2) - constructor4 = 1 1 1.00 1.00 > finalize simple(:) - constructor4%ind= 1 1 > finalize complicated(2) - ThyTypeArra2 = 1 3 2.00 4.00 > finalize simple(:) - ThyTypeArra2%ind= 1 3 > finalize complicated(3) - ThyTypeArra1 = -1 -1 -1 0.00 0.00 0.00 > finalize simple(:) - ThyTypeArra1%ind= -1 -1 -1 > After 6th assignment(array var allocated): 6(6) > > ******************************************************************* > Deallocations at end > > finalize simple - MyType%ind = 99 > After 1st deallocation: 1 > finalize simple - ThyType2%ind = 22 > After 2nd deallocation: 2 > finalize simple(:) - ThyType%ind= 21 22 > After 3rd deallocation: 3 > -- "If you can't explain it simply, you don't understand it well enough" - Albert Einstein --0000000000006add2505d84ebfde Content-Type: text/x-patch; charset="US-ASCII"; name="check180222.diff" Content-Disposition: attachment; filename="check180222.diff" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kzsp42wk0 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 Y2MgYi9nY2MvZm9ydHJhbi90cmFucy1hcnJheS5jYwppbmRleCBjZmI2ZWFjMTFjNy4uMmZmMGMz ODQwYTkgMTAwNjQ0Ci0tLSBhL2djYy9mb3J0cmFuL3RyYW5zLWFycmF5LmNjCisrKyBiL2djYy9m b3J0cmFuL3RyYW5zLWFycmF5LmNjCkBAIC05OTQsOSArOTk0LDkgQEAgZ2ZjX2dldF9hcnJheV9z cGFuICh0cmVlIGRlc2MsIGdmY19leHByICpleHByKQogICAgICAgaWYgKHRtcCAmJiBUUkVFX0NP REUgKHRtcCkgPT0gQVJSQVlfVFlQRSAmJiBUWVBFX1NUUklOR19GTEFHICh0bXApKQogCXsKIAkg IGdjY19hc3NlcnQgKGV4cHItPnRzLnR5cGUgPT0gQlRfQ0hBUkFDVEVSKTsKLQkgIAorCiAJICB0 bXAgPSBnZmNfZ2V0X2NoYXJhY3Rlcl9sZW5faW5fYnl0ZXMgKHRtcCk7Ci0JICAKKwogCSAgaWYg KHRtcCA9PSBOVUxMX1RSRUUgfHwgaW50ZWdlcl96ZXJvcCAodG1wKSkKIAkgICAgewogCSAgICAg IHRyZWUgYnM7CkBAIC0xMDA3LDcgKzEwMDcsNyBAQCBnZmNfZ2V0X2FycmF5X3NwYW4gKHRyZWUg ZGVzYywgZ2ZjX2V4cHIgKmV4cHIpCiAJICAgICAgdG1wID0gZm9sZF9idWlsZDJfbG9jIChpbnB1 dF9sb2NhdGlvbiwgTVVMVF9FWFBSLAogCQkJCSAgICAgZ2ZjX2FycmF5X2luZGV4X3R5cGUsIHRt cCwgYnMpOwogCSAgICB9Ci0JICAKKwogCSAgdG1wID0gKHRtcCAmJiAhaW50ZWdlcl96ZXJvcCAo dG1wKSkKIAkgICAgPyAoZm9sZF9jb252ZXJ0IChnZmNfYXJyYXlfaW5kZXhfdHlwZSwgdG1wKSkg OiAoTlVMTF9UUkVFKTsKIAl9CkBAIC0zMTYxLDYgKzMxNjEsNyBAQCBnZmNfYWRkX2xvb3Bfc3Nf Y29kZSAoZ2ZjX2xvb3BpbmZvICogbG9vcCwgZ2ZjX3NzICogc3MsIGJvb2wgc3Vic2NyaXB0LAog CSAgZ2ZjX2NvbnZfZXhwciAoJnNlLCBleHByKTsKIAkgIGdmY19hZGRfYmxvY2tfdG9fYmxvY2sg KCZvdXRlcl9sb29wLT5wcmUsICZzZS5wcmUpOwogCSAgZ2ZjX2FkZF9ibG9ja190b19ibG9jayAo Jm91dGVyX2xvb3AtPnBvc3QsICZzZS5wb3N0KTsKKwkgIGdmY19hZGRfYmxvY2tfdG9fYmxvY2sg KCZvdXRlcl9sb29wLT5wb3N0LCAmc2UuZmluYWxibG9jayk7CiAJICBzc19pbmZvLT5zdHJpbmdf bGVuZ3RoID0gc2Uuc3RyaW5nX2xlbmd0aDsKIAkgIGJyZWFrOwogCkBAIC03NDc4LDcgKzc0Nzks NyBAQCBnZmNfY29udl9leHByX2Rlc2NyaXB0b3IgKGdmY19zZSAqc2UsIGdmY19leHByICpleHBy KQogCiAgIGlmICghc2UtPmRpcmVjdF9ieXJlZikKICAgICBzZS0+dW5saW1pdGVkX3BvbHltb3Jw aGljID0gVU5MSU1JVEVEX1BPTFkgKGV4cHIpOwotICAKKwogICAvKiBTcGVjaWFsIGNhc2UgdGhp bmdzIHdlIGtub3cgd2UgY2FuIHBhc3MgZWFzaWx5LiAgKi8KICAgc3dpdGNoIChleHByLT5leHBy X3R5cGUpCiAgICAgewpAQCAtODkxMCw3ICs4OTExLDggQEAgZ2ZjX2NhZl9pc19kZWFsbG9jX29u bHkgKGludCBjYWZfbW9kZSkKIAogLyogUmVjdXJzaXZlbHkgdHJhdmVyc2UgYW4gb2JqZWN0IG9m IGRlcml2ZWQgdHlwZSwgZ2VuZXJhdGluZyBjb2RlIHRvCiAgICBkZWFsbG9jYXRlLCBudWxsaWZ5 IG9yIGNvcHkgYWxsb2NhdGFibGUgY29tcG9uZW50cy4gIFRoaXMgaXMgdGhlIHdvcmsgaG9yc2UK LSAgIGZ1bmN0aW9uIGZvciB0aGUgZnVuY3Rpb25zIG5hbWVkIGluIHRoaXMgZW51bS4gICovCisg ICBmdW5jdGlvbiBmb3IgdGhlIGZ1bmN0aW9ucyBuYW1lZCBpbiB0aGlzIGVudW0uICBXaGVuIGRl bF9wdHJzIGlzIHNldCB3aXRoCisgICBDT1BZX0FMTE9DX0NPTVAsIHBvaW50ZXJzIGFyZSBudWxs aWZpZWQuICAqLwogCiBlbnVtIHtERUFMTE9DQVRFX0FMTE9DX0NPTVAgPSAxLCBOVUxMSUZZX0FM TE9DX0NPTVAsCiAgICAgICBDT1BZX0FMTE9DX0NPTVAsIENPUFlfT05MWV9BTExPQ19DT01QLCBS RUFTU0lHTl9DQUZfQ09NUCwKQEAgLTg5MjAsOSArODkyMiwxMSBAQCBlbnVtIHtERUFMTE9DQVRF X0FMTE9DX0NPTVAgPSAxLCBOVUxMSUZZX0FMTE9DX0NPTVAsCiBzdGF0aWMgZ2ZjX2FjdHVhbF9h cmdsaXN0ICpwZHRfcGFyYW1fbGlzdDsKIAogc3RhdGljIHRyZWUKLXN0cnVjdHVyZV9hbGxvY19j b21wcyAoZ2ZjX3N5bWJvbCAqIGRlcl90eXBlLCB0cmVlIGRlY2wsCi0JCSAgICAgICB0cmVlIGRl c3QsIGludCByYW5rLCBpbnQgcHVycG9zZSwgaW50IGNhZl9tb2RlLAotCQkgICAgICAgZ2ZjX2Nv X3N1YnJvdXRpbmVzX2FyZ3MgKmFyZ3MpCitzdHJ1Y3R1cmVfYWxsb2NfY29tcHMgKGdmY19zeW1i b2wgKiBkZXJfdHlwZSwgdHJlZSBkZWNsLCB0cmVlIGRlc3QsCisJCSAgICAgICBpbnQgcmFuaywg aW50IHB1cnBvc2UsIGludCBjYWZfbW9kZSwKKwkJICAgICAgIGdmY19jb19zdWJyb3V0aW5lc19h cmdzICphcmdzLAorCQkgICAgICAgYm9vbCBub19maW5hbGl6YXRpb24gPSBmYWxzZSwKKwkJICAg ICAgIGJvb2wgZGVsX3B0cnMgPSBmYWxzZSkKIHsKICAgZ2ZjX2NvbXBvbmVudCAqYzsKICAgZ2Zj X2xvb3BpbmZvIGxvb3A7CkBAIC05MDEwLDExICs5MDE0LDEyIEBAIHN0cnVjdHVyZV9hbGxvY19j b21wcyAoZ2ZjX3N5bWJvbCAqIGRlcl90eXBlLCB0cmVlIGRlY2wsCiAJCQkJCSAgICAgZ2ZjX2Nv bnZfYXJyYXlfZGF0YSAoZGVzdCkpOwogCSAgZHJlZiA9IGdmY19idWlsZF9hcnJheV9yZWYgKHRt cCwgaW5kZXgsIE5VTEwpOwogCSAgdG1wID0gc3RydWN0dXJlX2FsbG9jX2NvbXBzIChkZXJfdHlw ZSwgdnJlZiwgZHJlZiwgcmFuaywKLQkJCQkgICAgICAgQ09QWV9BTExPQ19DT01QLCBjYWZfbW9k ZSwgYXJncyk7CisJCQkJICAgICAgIENPUFlfQUxMT0NfQ09NUCwgY2FmX21vZGUsIGFyZ3MsCisJ CQkJICAgICAgIG5vX2ZpbmFsaXphdGlvbik7CiAJfQogICAgICAgZWxzZQogCXRtcCA9IHN0cnVj dHVyZV9hbGxvY19jb21wcyAoZGVyX3R5cGUsIHZyZWYsIE5VTExfVFJFRSwgcmFuaywgcHVycG9z ZSwKLQkJCQkgICAgIGNhZl9tb2RlLCBhcmdzKTsKKwkJCQkgICAgIGNhZl9tb2RlLCBhcmdzLCBu b19maW5hbGl6YXRpb24pOwogCiAgICAgICBnZmNfYWRkX2V4cHJfdG9fYmxvY2sgKCZsb29wYm9k eSwgdG1wKTsKIApAQCAtOTA0OCwxMyArOTA1MywxNSBAQCBzdHJ1Y3R1cmVfYWxsb2NfY29tcHMg KGdmY19zeW1ib2wgKiBkZXJfdHlwZSwgdHJlZSBkZWNsLAogICBpZiAocHVycG9zZSA9PSBERUFM TE9DQVRFX0FMTE9DX0NPTVAgJiYgZGVyX3R5cGUtPmF0dHIucGR0X3R5cGUpCiAgICAgewogICAg ICAgdG1wID0gc3RydWN0dXJlX2FsbG9jX2NvbXBzIChkZXJfdHlwZSwgZGVjbCwgTlVMTF9UUkVF LCByYW5rLAotCQkJCSAgIERFQUxMT0NBVEVfUERUX0NPTVAsIDAsIGFyZ3MpOworCQkJCSAgIERF QUxMT0NBVEVfUERUX0NPTVAsIDAsIGFyZ3MsCisJCQkJICAgbm9fZmluYWxpemF0aW9uKTsKICAg ICAgIGdmY19hZGRfZXhwcl90b19ibG9jayAoJmZuYmxvY2ssIHRtcCk7CiAgICAgfQogICBlbHNl IGlmIChwdXJwb3NlID09IEFMTE9DQVRFX1BEVF9DT01QICYmIGRlcl90eXBlLT5hdHRyLmFsbG9j X2NvbXApCiAgICAgewogICAgICAgdG1wID0gc3RydWN0dXJlX2FsbG9jX2NvbXBzIChkZXJfdHlw ZSwgZGVjbCwgTlVMTF9UUkVFLCByYW5rLAotCQkJCSAgIE5VTExJRllfQUxMT0NfQ09NUCwgMCwg YXJncyk7CisJCQkJICAgTlVMTElGWV9BTExPQ19DT01QLCAwLCBhcmdzLAorCQkJCSAgIG5vX2Zp bmFsaXphdGlvbik7CiAgICAgICBnZmNfYWRkX2V4cHJfdG9fYmxvY2sgKCZmbmJsb2NrLCB0bXAp OwogICAgIH0KIApAQCAtOTExNiw3ICs5MTIzLDcgQEAgc3RydWN0dXJlX2FsbG9jX2NvbXBzIChn ZmNfc3ltYm9sICogZGVyX3R5cGUsIHRyZWUgZGVjbCwKIAkJICBhZGRfd2hlbl9hbGxvY2F0ZWQK IAkJICAgICAgPSBzdHJ1Y3R1cmVfYWxsb2NfY29tcHMgKENMQVNTX0RBVEEgKGMpLT50cy51LmRl cml2ZWQsCiAJCQkJCSAgICAgICBjb21wLCBOVUxMX1RSRUUsIHJhbmssIHB1cnBvc2UsCi0JCQkJ CSAgICAgICBjYWZfbW9kZSwgYXJncyk7CisJCQkJCSAgICAgICBjYWZfbW9kZSwgYXJncywgbm9f ZmluYWxpemF0aW9uKTsKIAkJfQogCSAgICAgIGVsc2UKIAkJewpAQCAtOTEyNCw3ICs5MTMxLDgg QEAgc3RydWN0dXJlX2FsbG9jX2NvbXBzIChnZmNfc3ltYm9sICogZGVyX3R5cGUsIHRyZWUgZGVj bCwKIAkJICBhZGRfd2hlbl9hbGxvY2F0ZWQgPSBzdHJ1Y3R1cmVfYWxsb2NfY29tcHMgKGMtPnRz LnUuZGVyaXZlZCwKIAkJCQkJCQkgICAgICBjb21wLCBOVUxMX1RSRUUsCiAJCQkJCQkJICAgICAg cmFuaywgcHVycG9zZSwKLQkJCQkJCQkgICAgICBjYWZfbW9kZSwgYXJncyk7CisJCQkJCQkJICAg ICAgY2FmX21vZGUsIGFyZ3MsCisJCQkJCQkJICAgICAgbm9fZmluYWxpemF0aW9uKTsKIAkJfQog CSAgICB9CiAKQEAgLTkyNDAsOCArOTI0OCw4IEBAIHN0cnVjdHVyZV9hbGxvY19jb21wcyAoZ2Zj X3N5bWJvbCAqIGRlcl90eXBlLCB0cmVlIGRlY2wsCiAJCWNvbnRpbnVlOwogCSAgICB9CiAKLQkg IGlmICgoYy0+dHMudHlwZSA9PSBCVF9ERVJJVkVEICYmICFjLT5hdHRyLnBvaW50ZXIpCi0JICAg ICB8fCAoYy0+dHMudHlwZSA9PSBCVF9DTEFTUyAmJiAhQ0xBU1NfREFUQSAoYyktPmF0dHIuY2xh c3NfcG9pbnRlcikpCisJICBpZiAoIW5vX2ZpbmFsaXphdGlvbiAmJiAoKGMtPnRzLnR5cGUgPT0g QlRfREVSSVZFRCAmJiAhYy0+YXR0ci5wb2ludGVyKQorCSAgICAgfHwgKGMtPnRzLnR5cGUgPT0g QlRfQ0xBU1MgJiYgIUNMQVNTX0RBVEEgKGMpLT5hdHRyLmNsYXNzX3BvaW50ZXIpKSkKIAkgICAg LyogQ2FsbCB0aGUgZmluYWxpemVyLCB3aGljaCB3aWxsIGZyZWUgdGhlIG1lbW9yeSBhbmQgbnVs bGlmeSB0aGUKIAkgICAgICAgcG9pbnRlciBvZiBhbiBhcnJheS4gICovCiAJICAgIGRlYWxsb2Nh dGVfY2FsbGVkID0gZ2ZjX2FkZF9jb21wX2ZpbmFsaXplcl9jYWxsICgmdG1wYmxvY2ssIGNvbXAs IGMsCkBAIC05MjY5LDcgKzkyNzcsNyBAQCBzdHJ1Y3R1cmVfYWxsb2NfY29tcHMgKGdmY19zeW1i b2wgKiBkZXJfdHlwZSwgdHJlZSBkZWNsLAogCQkgIGFkZF93aGVuX2FsbG9jYXRlZAogCQkgICAg ICA9IHN0cnVjdHVyZV9hbGxvY19jb21wcyAoQ0xBU1NfREFUQSAoYyktPnRzLnUuZGVyaXZlZCwK IAkJCQkJICAgICAgIGNvbXAsIE5VTExfVFJFRSwgcmFuaywgcHVycG9zZSwKLQkJCQkJICAgICAg IGNhZl9tb2RlLCBhcmdzKTsKKwkJCQkJICAgICAgIGNhZl9tb2RlLCBhcmdzLCBub19maW5hbGl6 YXRpb24pOwogCQl9CiAJICAgICAgZWxzZQogCQl7CkBAIC05Mjc3LDcgKzkyODUsOCBAQCBzdHJ1 Y3R1cmVfYWxsb2NfY29tcHMgKGdmY19zeW1ib2wgKiBkZXJfdHlwZSwgdHJlZSBkZWNsLAogCQkg IGFkZF93aGVuX2FsbG9jYXRlZCA9IHN0cnVjdHVyZV9hbGxvY19jb21wcyAoYy0+dHMudS5kZXJp dmVkLAogCQkJCQkJCSAgICAgIGNvbXAsIE5VTExfVFJFRSwKIAkJCQkJCQkgICAgICByYW5rLCBw dXJwb3NlLAotCQkJCQkJCSAgICAgIGNhZl9tb2RlLCBhcmdzKTsKKwkJCQkJCQkgICAgICBjYWZf bW9kZSwgYXJncywKKwkJCQkJCQkgICAgICBub19maW5hbGl6YXRpb24pOwogCQl9CiAJICAgIH0K IApAQCAtOTU3NSw3ICs5NTg0LDggQEAgc3RydWN0dXJlX2FsbG9jX2NvbXBzIChnZmNfc3ltYm9s ICogZGVyX3R5cGUsIHRyZWUgZGVjbCwKIAkJCQkgICAgICBkZWNsLCBjZGVjbCwgTlVMTF9UUkVF KTsKIAkgICAgICByYW5rID0gYy0+YXMgPyBjLT5hcy0+cmFuayA6IDA7CiAJICAgICAgdG1wID0g c3RydWN0dXJlX2FsbG9jX2NvbXBzIChjLT50cy51LmRlcml2ZWQsIGNvbXAsIE5VTExfVFJFRSwK LQkJCQkJICAgcmFuaywgcHVycG9zZSwgY2FmX21vZGUsIGFyZ3MpOworCQkJCQkgICByYW5rLCBw dXJwb3NlLCBjYWZfbW9kZSwgYXJncywKKwkJCQkJICAgbm9fZmluYWxpemF0aW9uKTsKIAkgICAg ICBnZmNfYWRkX2V4cHJfdG9fYmxvY2sgKCZmbmJsb2NrLCB0bXApOwogCSAgICB9CiAJICBicmVh azsKQEAgLTk2MTEsMTQgKzk2MjEsMTQgQEAgc3RydWN0dXJlX2FsbG9jX2NvbXBzIChnZmNfc3lt Ym9sICogZGVyX3R5cGUsIHRyZWUgZGVjbCwKIAkJICB0bXAgPSBzdHJ1Y3R1cmVfYWxsb2NfY29t cHMgKGMtPnRzLnUuZGVyaXZlZCwgY29tcCwgZGNtcCwKIAkJCQkJICAgICAgIHJhbmssIHB1cnBv c2UsIGNhZl9tb2RlCiAJCQkJCSAgICAgICB8IEdGQ19TVFJVQ1RVUkVfQ0FGX01PREVfSU5fQ09B UlJBWSwKLQkJCQkJICAgICAgIGFyZ3MpOworCQkJCQkgICAgICAgYXJncywgbm9fZmluYWxpemF0 aW9uKTsKIAkJICBnZmNfYWRkX2V4cHJfdG9fYmxvY2sgKCZmbmJsb2NrLCB0bXApOwogCQl9CiAJ ICAgIH0KIAkgIGJyZWFrOwogCiAJY2FzZSBDT1BZX0FMTE9DX0NPTVA6Ci0JICBpZiAoYy0+YXR0 ci5wb2ludGVyIHx8IGMtPmF0dHIucHJvY19wb2ludGVyKQorCSAgaWYgKChjLT5hdHRyLnBvaW50 ZXIgJiYgIWRlbF9wdHJzKSB8fCBjLT5hdHRyLnByb2NfcG9pbnRlcikKIAkgICAgY29udGludWU7 CiAKIAkgIC8qIFdlIG5lZWQgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBjb21wb25lbnRzLiAgKi8K QEAgLTk2NjAsNiArOTY3MCwxMyBAQCBzdHJ1Y3R1cmVfYWxsb2NfY29tcHMgKGdmY19zeW1ib2wg KiBkZXJfdHlwZSwgdHJlZSBkZWNsLAogCQkgIGRzdF9kYXRhID0gZ2ZjX2NvbnZfZGVzY3JpcHRv cl9kYXRhX2dldCAoZHN0X2RhdGEpOwogCQl9CiAKKwkgICAgICBpZiAoQ0xBU1NfREFUQSAoYykt PmF0dHIucG9pbnRlcikKKwkJeworCQkgIGdmY19hZGRfbW9kaWZ5ICgmZm5ibG9jaywgZHN0X2Rh dGEsCisJCQkJICBidWlsZF9pbnRfY3N0IChUUkVFX1RZUEUgKGRzdF9kYXRhKSwgMCkpOworCQkg IGNvbnRpbnVlOworCQl9CisKIAkgICAgICBnZmNfaW5pdF9ibG9jayAoJnRtcGJsb2NrKTsKIAog CSAgICAgIGdmY19hZGRfbW9kaWZ5ICgmdG1wYmxvY2ssIGdmY19jbGFzc192cHRyX2dldCAoZGNt cCksCkBAIC05NzA2LDYgKzk3MjMsMTcgQEAgc3RydWN0dXJlX2FsbG9jX2NvbXBzIChnZmNfc3lt Ym9sICogZGVyX3R5cGUsIHRyZWUgZGVjbCwKIAkJCQkJCQkgdG1wLCBudWxsX2RhdGEpKTsKIAkg ICAgICBjb250aW51ZTsKIAkgICAgfQorCSAgZWxzZSBpZiAoYy0+YXR0ci5wb2ludGVyKQorCSAg ICB7CisJICAgICAgaWYgKGMtPmF0dHIuZGltZW5zaW9uKQorCQl0bXAgPSBnZmNfY29udl9kZXNj cmlwdG9yX2RhdGFfZ2V0IChkY21wKTsKKwkgICAgICBlbHNlCisJCXRtcCA9IGRjbXA7CisJICAg ICAgZ2ZjX2FkZF9tb2RpZnkgKCZmbmJsb2NrLCB0bXAsCisJCQkgICAgICBidWlsZF9pbnRfY3N0 IChUUkVFX1RZUEUgKHRtcCksIDApKTsKKwkgICAgICBjb250aW51ZTsKKwkgICAgfQorCiAKIAkg IC8qIFRvIGltcGxlbWVudCBndWFyZGVkIGRlZXAgY29weSwgaS5lLiwgZGVlcCBjb3B5IG9ubHkg YWxsb2NhdGFibGUKIAkgICAgIGNvbXBvbmVudHMgdGhhdCBhcmUgcmVhbGx5IGFsbG9jYXRlZCwg dGhlIGRlZXAgY29weSBjb2RlIGhhcyB0bwpAQCAtOTcxOSw3ICs5NzQ3LDggQEAgc3RydWN0dXJl X2FsbG9jX2NvbXBzIChnZmNfc3ltYm9sICogZGVyX3R5cGUsIHRyZWUgZGVjbCwKIAkgICAgICBh ZGRfd2hlbl9hbGxvY2F0ZWQgPSBzdHJ1Y3R1cmVfYWxsb2NfY29tcHMgKGMtPnRzLnUuZGVyaXZl ZCwKIAkJCQkJCQkgIGNvbXAsIGRjbXAsCiAJCQkJCQkJICByYW5rLCBwdXJwb3NlLAotCQkJCQkJ CSAgY2FmX21vZGUsIGFyZ3MpOworCQkJCQkJCSAgY2FmX21vZGUsIGFyZ3MsCisJCQkJCQkJICBu b19maW5hbGl6YXRpb24pOwogCSAgICB9CiAJICBlbHNlCiAJICAgIGFkZF93aGVuX2FsbG9jYXRl ZCA9IE5VTExfVFJFRTsKQEAgLTEwMDkyLDcgKzEwMTIxLDggQEAgZ2ZjX251bGxpZnlfYWxsb2Nf Y29tcCAoZ2ZjX3N5bWJvbCAqIGRlcl90eXBlLCB0cmVlIGRlY2wsIGludCByYW5rLAogewogICBy ZXR1cm4gc3RydWN0dXJlX2FsbG9jX2NvbXBzIChkZXJfdHlwZSwgZGVjbCwgTlVMTF9UUkVFLCBy YW5rLAogCQkJCU5VTExJRllfQUxMT0NfQ09NUCwKLQkJCQlHRkNfU1RSVUNUVVJFX0NBRl9NT0RF X0VOQUJMRV9DT0FSUkFZIHwgY2FmX21vZGUsIE5VTEwpOworCQkJCUdGQ19TVFJVQ1RVUkVfQ0FG X01PREVfRU5BQkxFX0NPQVJSQVkgfCBjYWZfbW9kZSwKKwkJCQlOVUxMKTsKIH0KIAogCkBAIC0x MDEwNSw3ICsxMDEzNSw4IEBAIGdmY19kZWFsbG9jYXRlX2FsbG9jX2NvbXAgKGdmY19zeW1ib2wg KiBkZXJfdHlwZSwgdHJlZSBkZWNsLCBpbnQgcmFuaywKIHsKICAgcmV0dXJuIHN0cnVjdHVyZV9h bGxvY19jb21wcyAoZGVyX3R5cGUsIGRlY2wsIE5VTExfVFJFRSwgcmFuaywKIAkJCQlERUFMTE9D QVRFX0FMTE9DX0NPTVAsCi0JCQkJR0ZDX1NUUlVDVFVSRV9DQUZfTU9ERV9FTkFCTEVfQ09BUlJB WSB8IGNhZl9tb2RlLCBOVUxMKTsKKwkJCQlHRkNfU1RSVUNUVVJFX0NBRl9NT0RFX0VOQUJMRV9D T0FSUkFZIHwgY2FmX21vZGUsCisJCQkJTlVMTCk7CiB9CiAKIHRyZWUKQEAgLTEwMTQzLDcgKzEw MTc0LDggQEAgZ2ZjX2JjYXN0X2FsbG9jX2NvbXAgKGdmY19zeW1ib2wgKmRlcml2ZWQsIGdmY19l eHByICpleHByLCBpbnQgcmFuaywKIAogICB0bXAgPSBzdHJ1Y3R1cmVfYWxsb2NfY29tcHMgKGRl cml2ZWQsIGFycmF5LCBOVUxMX1RSRUUsIHJhbmssCiAJCQkgICAgICAgQkNBU1RfQUxMT0NfQ09N UCwKLSAgCQkJICAgICAgIEdGQ19TVFJVQ1RVUkVfQ0FGX01PREVfRU5BQkxFX0NPQVJSQVksICZh cmdzKTsKKwkJCSAgICAgICBHRkNfU1RSVUNUVVJFX0NBRl9NT0RFX0VOQUJMRV9DT0FSUkFZLAor CQkJICAgICAgICZhcmdzKTsKICAgcmV0dXJuIHRtcDsKIH0KIApAQCAtMTAxNTMsMTAgKzEwMTg1 LDEyIEBAIGdmY19iY2FzdF9hbGxvY19jb21wIChnZmNfc3ltYm9sICpkZXJpdmVkLCBnZmNfZXhw ciAqZXhwciwgaW50IHJhbmssCiAgICBzdGF0dXMgb2YgY29hcnJheXMuICAqLwogCiB0cmVlCi1n ZmNfZGVhbGxvY2F0ZV9hbGxvY19jb21wX25vX2NhZiAoZ2ZjX3N5bWJvbCAqIGRlcl90eXBlLCB0 cmVlIGRlY2wsIGludCByYW5rKQorZ2ZjX2RlYWxsb2NhdGVfYWxsb2NfY29tcF9ub19jYWYgKGdm Y19zeW1ib2wgKiBkZXJfdHlwZSwgdHJlZSBkZWNsLCBpbnQgcmFuaywKKwkJCQkgIGJvb2wgbm9f ZmluYWxpemF0aW9uKQogewogICByZXR1cm4gc3RydWN0dXJlX2FsbG9jX2NvbXBzIChkZXJfdHlw ZSwgZGVjbCwgTlVMTF9UUkVFLCByYW5rLAotCQkJCURFQUxMT0NBVEVfQUxMT0NfQ09NUCwgMCwg TlVMTCk7CisJCQkJREVBTExPQ0FURV9BTExPQ19DT01QLCAwLCBOVUxMLAorCQkJCW5vX2ZpbmFs aXphdGlvbik7CiB9CiAKIApAQCAtMTAxNjQsNyArMTAxOTgsOCBAQCB0cmVlCiBnZmNfcmVhc3Np Z25fYWxsb2NfY29tcF9jYWYgKGdmY19zeW1ib2wgKmRlcl90eXBlLCB0cmVlIGRlY2wsIHRyZWUg ZGVzdCkKIHsKICAgcmV0dXJuIHN0cnVjdHVyZV9hbGxvY19jb21wcyAoZGVyX3R5cGUsIGRlY2ws IGRlc3QsIDAsIFJFQVNTSUdOX0NBRl9DT01QLAotCQkJCUdGQ19TVFJVQ1RVUkVfQ0FGX01PREVf RU5BQkxFX0NPQVJSQVksIE5VTEwpOworCQkJCUdGQ19TVFJVQ1RVUkVfQ0FGX01PREVfRU5BQkxF X0NPQVJSQVksCisJCQkJTlVMTCk7CiB9CiAKIApAQCAtMTAxODAsNiArMTAyMTUsMjAgQEAgZ2Zj X2NvcHlfYWxsb2NfY29tcCAoZ2ZjX3N5bWJvbCAqIGRlcl90eXBlLCB0cmVlIGRlY2wsIHRyZWUg ZGVzdCwgaW50IHJhbmssCiB9CiAKIAorLyogUmVjdXJzaXZlbHkgdHJhdmVyc2UgYW4gb2JqZWN0 IG9mIGRlcml2ZWQgdHlwZSwgZ2VuZXJhdGluZyBjb2RlIHRvCisgICBjb3B5IGl0IGFuZCBpdHMg YWxsb2NhdGFibGUgY29tcG9uZW50cywgd2hpbGUgZGVsZXRpbmcgcG9pbnRlcnMgYW5kCisgICBz dXBwcmVzc2luZyBhbnkgZmluYWxpemF0aW9uIHRoYXQgbWlnaHQgb2NjdXIuICBUaGlzIGlzIHVz ZWQgaW4gdGhlCisgICBmaW5hbGl6dGlvbiBvZiBmdW5jdGlvbiByZXN1bHRzLiAgKi8KKwordHJl ZQorZ2ZjX2NvcHlfYWxsb2NfY29tcF9kZWxfcHRycyAoZ2ZjX3N5bWJvbCAqIGRlcl90eXBlLCB0 cmVlIGRlY2wsIHRyZWUgZGVzdCwKKwkJCSAgICAgIGludCByYW5rLCBpbnQgY2FmX21vZGUpCit7 CisgIHJldHVybiBzdHJ1Y3R1cmVfYWxsb2NfY29tcHMgKGRlcl90eXBlLCBkZWNsLCBkZXN0LCBy YW5rLCBDT1BZX0FMTE9DX0NPTVAsCisJCQkJY2FmX21vZGUsIE5VTEwsIHRydWUsIHRydWUpOwor fQorCisKIC8qIFJlY3Vyc2l2ZWx5IHRyYXZlcnNlIGFuIG9iamVjdCBvZiBkZXJpdmVkIHR5cGUs IGdlbmVyYXRpbmcgY29kZSB0bwogICAgY29weSBvbmx5IGl0cyBhbGxvY2F0YWJsZSBjb21wb25l bnRzLiAgKi8KIApAQCAtMTA5NTAsNyArMTA5OTksNyBAQCBnZmNfYWxsb2NfYWxsb2NhdGFibGVf Zm9yX2Fzc2lnbm1lbnQgKGdmY19sb29waW5mbyAqbG9vcCwKIAkmJiBleHByMS0+dHMudS5kZXJp dmVkLT5hdHRyLmFsbG9jX2NvbXApCiAgICAgewogICAgICAgdG1wID0gZ2ZjX2RlYWxsb2NhdGVf YWxsb2NfY29tcF9ub19jYWYgKGV4cHIxLT50cy51LmRlcml2ZWQsIG9sZF9kZXNjLAotCQkJCQkg ICAgICBleHByMS0+cmFuayk7CisJCQkJCSAgICAgIGV4cHIxLT5yYW5rLCB0cnVlKTsKICAgICAg IGdmY19hZGRfZXhwcl90b19ibG9jayAoJnJlYWxsb2NfYmxvY2ssIHRtcCk7CiAgICAgfQogCmRp ZmYgLS1naXQgYS9nY2MvZm9ydHJhbi90cmFucy1hcnJheS5oIGIvZ2NjL2ZvcnRyYW4vdHJhbnMt YXJyYXkuaAppbmRleCAwNGZlZTYxNzU5MC4uMjc0MzE1OGNiMTEgMTAwNjQ0Ci0tLSBhL2djYy9m b3J0cmFuL3RyYW5zLWFycmF5LmgKKysrIGIvZ2NjL2ZvcnRyYW4vdHJhbnMtYXJyYXkuaApAQCAt NTYsMTEgKzU2LDE0IEBAIHRyZWUgZ2ZjX251bGxpZnlfYWxsb2NfY29tcCAoZ2ZjX3N5bWJvbCAq LCB0cmVlLCBpbnQsIGludCBjbSA9IDApOwogdHJlZSBnZmNfZGVhbGxvY2F0ZV9hbGxvY19jb21w IChnZmNfc3ltYm9sICosIHRyZWUsIGludCwgaW50IGNtID0gMCk7CiB0cmVlIGdmY19iY2FzdF9h bGxvY19jb21wIChnZmNfc3ltYm9sICosIGdmY19leHByICosIGludCwgdHJlZSwKIAkJCSAgIHRy ZWUsIHRyZWUsIHRyZWUpOwotdHJlZSBnZmNfZGVhbGxvY2F0ZV9hbGxvY19jb21wX25vX2NhZiAo Z2ZjX3N5bWJvbCAqLCB0cmVlLCBpbnQpOwordHJlZSBnZmNfZGVhbGxvY2F0ZV9hbGxvY19jb21w X25vX2NhZiAoZ2ZjX3N5bWJvbCAqLCB0cmVlLCBpbnQsCisJCQkJICAgICAgIGJvb2wgbm9fZmlu YWxpemF0aW9uID0gZmFsc2UpOwogdHJlZSBnZmNfcmVhc3NpZ25fYWxsb2NfY29tcF9jYWYgKGdm Y19zeW1ib2wgKiwgdHJlZSwgdHJlZSk7CiAKIHRyZWUgZ2ZjX2NvcHlfYWxsb2NfY29tcCAoZ2Zj X3N5bWJvbCAqLCB0cmVlLCB0cmVlLCBpbnQsIGludCk7CiAKK3RyZWUgZ2ZjX2NvcHlfYWxsb2Nf Y29tcF9kZWxfcHRycyAoZ2ZjX3N5bWJvbCAqLCB0cmVlLCB0cmVlLCBpbnQsIGludCk7CisKIHRy ZWUgZ2ZjX2NvcHlfb25seV9hbGxvY19jb21wIChnZmNfc3ltYm9sICosIHRyZWUsIHRyZWUsIGlu dCk7CiAKIHRyZWUgZ2ZjX2FsbG9jYXRlX3BkdF9jb21wIChnZmNfc3ltYm9sICosIHRyZWUsIGlu dCwgZ2ZjX2FjdHVhbF9hcmdsaXN0ICopOwpkaWZmIC0tZ2l0IGEvZ2NjL2ZvcnRyYW4vdHJhbnMt ZXhwci5jYyBiL2djYy9mb3J0cmFuL3RyYW5zLWV4cHIuY2MKaW5kZXggZWI2YTc4YzNhNjIuLjJm MDJjYjVlYTY4IDEwMDY0NAotLS0gYS9nY2MvZm9ydHJhbi90cmFucy1leHByLmNjCisrKyBiL2dj Yy9mb3J0cmFuL3RyYW5zLWV4cHIuY2MKQEAgLTE5MDQsNiArMTkwNCw3IEBAIGdmY19pbml0X3Nl IChnZmNfc2UgKiBzZSwgZ2ZjX3NlICogcGFyZW50KQogewogICBtZW1zZXQgKHNlLCAwLCBzaXpl b2YgKGdmY19zZSkpOwogICBnZmNfaW5pdF9ibG9jayAoJnNlLT5wcmUpOworICBnZmNfaW5pdF9i bG9jayAoJnNlLT5maW5hbGJsb2NrKTsKICAgZ2ZjX2luaXRfYmxvY2sgKCZzZS0+cG9zdCk7CiAK ICAgc2UtPnBhcmVudCA9IHBhcmVudDsKQEAgLTU5NzUsNiArNTk3NiwxMjkgQEAgcG9zdF9jYWxs OgogfQogCiAKKy8qIEZpbmFsaXplIGEgZnVuY3Rpb24gcmVzdWx0IHVzaW5nIHRoZSBmaW5hbGl6 ZXIgd3JhcHBlci4gVGhlIHJlc3VsdCBpcyBmaXhlZAorICAgaW4gb3JkZXIgdG8gcHJldmVudCBy ZXBlYXRlZCBjYWxscy4gICovCisKK3N0YXRpYyB2b2lkCitmaW5hbGl6ZV9mdW5jdGlvbl9yZXN1 bHQgKGdmY19zZSAqc2UsIGdmY19zeW1ib2wgKmRlcml2ZWQsCisJCQkgIHN5bWJvbF9hdHRyaWJ1 dGUgYXR0ciwgaW50IHJhbmspCit7CisgIHRyZWUgdnB0ciwgZmluYWxfZm5kZWNsLCBkZXNjLCB0 bXAsIHNpemUsIGlzX2ZpbmFsLCBkYXRhX3B0ciwgY29uZDsKKyAgZ2ZjX3N5bWJvbCAqdnRhYjsK KyAgZ2ZjX3NlIHBvc3Rfc2U7CisgIGJvb2wgaXNfY2xhc3MgPSBHRkNfQ0xBU1NfVFlQRV9QIChU UkVFX1RZUEUgKHNlLT5leHByKSk7CisKKyAgaWYgKGF0dHIucG9pbnRlcikKKyAgICByZXR1cm47 CisKKyAgaWYgKGlzX2NsYXNzKQorICAgIHsKKyAgICAgIGlmICghVkFSX1AgKHNlLT5leHByKSkK Kwl7CisJICBkZXNjID0gZ2ZjX2V2YWx1YXRlX25vdyAoc2UtPmV4cHIsICZzZS0+cHJlKTsKKwkg IHNlLT5leHByID0gZGVzYzsKKwl9CisgICAgICBkZXNjID0gZ2ZjX2NsYXNzX2RhdGFfZ2V0IChz ZS0+ZXhwcik7CisgICAgICB2cHRyID0gZ2ZjX2NsYXNzX3ZwdHJfZ2V0IChzZS0+ZXhwcik7Cisg ICAgfQorICBlbHNlCisgICAgeworICAgICAgLyogTmVlZCB0byBjb3B5IGFsbG9jYXRlZCBjb21w b25lbnRzIGFuZCBkZWxldGUgcG9pbnRlciBjb21wb25lbnRzLiAgKi8KKyAgICAgIGlmIChzZS0+ ZGlyZWN0X2J5cmVmKQorCXsKKwkgIGRlc2MgPSBnZmNfZXZhbHVhdGVfbm93IChzZS0+ZXhwciwg JnNlLT5maW5hbGJsb2NrKTsKKwkgIHRtcCA9IGdmY19jb3B5X2FsbG9jX2NvbXBfZGVsX3B0cnMg KGRlcml2ZWQsIHNlLT5leHByLCBkZXNjLCByYW5rLCAwKTsKKwkgIGdmY19hZGRfZXhwcl90b19i bG9jayAoJnNlLT5maW5hbGJsb2NrLCB0bXApOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBkZXNj ID0gZ2ZjX2V2YWx1YXRlX25vdyAoc2UtPmV4cHIsICZzZS0+cHJlKTsKKwkgIHNlLT5leHByID0g Z2ZjX2V2YWx1YXRlX25vdyAoZGVzYywgJnNlLT5wcmUpOworCSAgdG1wID0gZ2ZjX2NvcHlfYWxs b2NfY29tcF9kZWxfcHRycyAoZGVyaXZlZCwgc2UtPmV4cHIsIGRlc2MsIHJhbmssIDApOworCSAg Z2ZjX2FkZF9leHByX3RvX2Jsb2NrICgmc2UtPmZpbmFsYmxvY2ssIHRtcCk7CisJfQorCisgICAg ICB2dGFiID0gZ2ZjX2ZpbmRfZGVyaXZlZF92dGFiIChkZXJpdmVkKTsKKyAgICAgIGlmICh2dGFi LT5iYWNrZW5kX2RlY2wgPT0gTlVMTF9UUkVFKQorCXZwdHIgPSBnZmNfZ2V0X3N5bWJvbF9kZWNs ICh2dGFiKTsKKyAgICAgIGVsc2UKKwl2cHRyID0gdnRhYi0+YmFja2VuZF9kZWNsOworICAgICAg dnB0ciA9IGdmY19idWlsZF9hZGRyX2V4cHIgKE5VTEwsIHZwdHIpOworICAgIH0KKworICBzaXpl ID0gZ2ZjX3ZwdHJfc2l6ZV9nZXQgKHZwdHIpOworICBmaW5hbF9mbmRlY2wgPSBnZmNfdnB0cl9m aW5hbF9nZXQgKHZwdHIpOworICBpc19maW5hbCA9IGZvbGRfYnVpbGQyX2xvYyAoaW5wdXRfbG9j YXRpb24sIE5FX0VYUFIsCisJCQkgICAgICBsb2dpY2FsX3R5cGVfbm9kZSwKKwkJCSAgICAgIGZp bmFsX2ZuZGVjbCwKKwkJCSAgICAgIGZvbGRfY29udmVydCAoVFJFRV9UWVBFIChmaW5hbF9mbmRl Y2wpLAorCQkJCQkgICAgbnVsbF9wb2ludGVyX25vZGUpKTsKKworICBmaW5hbF9mbmRlY2wgPSBi dWlsZF9mb2xkX2luZGlyZWN0X3JlZl9sb2MgKGlucHV0X2xvY2F0aW9uLAorCQkJCQkgICAgICBm aW5hbF9mbmRlY2wpOworICBpZiAoIUdGQ19ERVNDUklQVE9SX1RZUEVfUCAoVFJFRV9UWVBFIChk ZXNjKSkpCisgICAgeworICAgICAgaWYgKGlzX2NsYXNzKQorCWRlc2MgPSBnZmNfY29udl9zY2Fs YXJfdG9fZGVzY3JpcHRvciAoc2UsIGRlc2MsIGF0dHIpOworICAgICAgZWxzZQorCXsKKwkgIGdm Y19pbml0X3NlICgmcG9zdF9zZSwgTlVMTCk7CisJICBkZXNjID0gZ2ZjX2NvbnZfc2NhbGFyX3Rv X2Rlc2NyaXB0b3IgKCZwb3N0X3NlLCBkZXNjLCBhdHRyKTsKKwkgIGdmY19hZGRfZXhwcl90b19i bG9jayAoJnNlLT5wcmUsIGdmY19maW5pc2hfYmxvY2sgKCZwb3N0X3NlLnByZSkpOworCX0KKyAg ICB9CisKKyAgdG1wID0gZ2ZjX2NyZWF0ZV92YXIgKFRSRUVfVFlQRSAoZGVzYyksICJyZXMiKTsK KyAgaWYgKHNlLT5kaXJlY3RfYnlyZWYpCisgICAgZ2ZjX2FkZF9tb2RpZnkgKCZzZS0+ZmluYWxi bG9jaywgdG1wLCBkZXNjKTsKKyAgZWxzZQorICAgIGdmY19hZGRfbW9kaWZ5ICgmc2UtPnByZSwg dG1wLCBkZXNjKTsKKyAgZGVzYyA9IHRtcDsKKworICBkYXRhX3B0ciA9IGdmY19jb252X2Rlc2Ny aXB0b3JfZGF0YV9nZXQgKGRlc2MpOworICBjb25kID0gZm9sZF9idWlsZDJfbG9jIChpbnB1dF9s b2NhdGlvbiwgTkVfRVhQUiwKKwkJCSAgbG9naWNhbF90eXBlX25vZGUsIGRhdGFfcHRyLAorCQkJ ICBmb2xkX2NvbnZlcnQgKFRSRUVfVFlQRSAoZGF0YV9wdHIpLAorCQkJCQludWxsX3BvaW50ZXJf bm9kZSkpOworICBpc19maW5hbCA9IGZvbGRfYnVpbGQyX2xvYyAoaW5wdXRfbG9jYXRpb24sIFRS VVRIX0FORF9FWFBSLAorCQkJICAgICAgbG9naWNhbF90eXBlX25vZGUsIGlzX2ZpbmFsLCBjb25k KTsKKyAgdG1wID0gYnVpbGRfY2FsbF9leHByX2xvYyAoaW5wdXRfbG9jYXRpb24sIGZpbmFsX2Zu ZGVjbCwgMywKKwkJCSAgICAgZ2ZjX2J1aWxkX2FkZHJfZXhwciAoTlVMTCwgZGVzYyksCisJCQkg ICAgIHNpemUsIGJvb2xlYW5fZmFsc2Vfbm9kZSk7CisgIHRtcCA9IGZvbGRfYnVpbGQzX2xvYyAo aW5wdXRfbG9jYXRpb24sIENPTkRfRVhQUiwKKwkJCSB2b2lkX3R5cGVfbm9kZSwgaXNfZmluYWws IHRtcCwKKwkJCSBidWlsZF9lbXB0eV9zdG10IChpbnB1dF9sb2NhdGlvbikpOworCisgIGlmIChp c19jbGFzcyAmJiBzZS0+c3MgJiYgc2UtPnNzLT5sb29wKQorICAgIHsKKyAgICAgIGdmY19hZGRf ZXhwcl90b19ibG9jayAoJnNlLT5sb29wLT5wb3N0LCB0bXApOworICAgICAgY29uZCA9IGZvbGRf YnVpbGQyX2xvYyAoaW5wdXRfbG9jYXRpb24sIE5FX0VYUFIsCisJCQkgICAgICBsb2dpY2FsX3R5 cGVfbm9kZSwKKwkJCSAgICAgIGRhdGFfcHRyLAorCQkJICAgICAgZm9sZF9jb252ZXJ0IChUUkVF X1RZUEUgKGRhdGFfcHRyKSwKKwkJCQkJICAgIG51bGxfcG9pbnRlcl9ub2RlKSk7CisgICAgICB0 bXAgPSBmb2xkX2J1aWxkM19sb2MgKGlucHV0X2xvY2F0aW9uLCBDT05EX0VYUFIsCisJCQkgICAg IHZvaWRfdHlwZV9ub2RlLCBjb25kLAorCQkJICAgICBnZmNfY2FsbF9mcmVlIChkYXRhX3B0ciks CisJCQkgICAgIGJ1aWxkX2VtcHR5X3N0bXQgKGlucHV0X2xvY2F0aW9uKSk7CisgICAgICBnZmNf YWRkX2V4cHJfdG9fYmxvY2sgKCZzZS0+bG9vcC0+cG9zdCwgdG1wKTsKKyAgICB9CisgIGVsc2UK KyAgICB7CisgICAgICBnZmNfYWRkX2V4cHJfdG9fYmxvY2sgKCZzZS0+ZmluYWxibG9jaywgdG1w KTsKKworICAgICAgLyogTGV0IHRoZSBzY2FsYXJpemVyIHRha2UgY2FyZSBvZiBmcmVlaW5nIG9m IHRlbXBvcmFyeSBhcnJheXMuICAqLworICAgICAgaWYgKGF0dHIuYWxsb2NhdGFibGUgJiYgIShz ZS0+bG9vcCAmJiBzZS0+bG9vcC0+dGVtcF9kaW0pKQorCXsKKwkgIHRtcCA9IGZvbGRfYnVpbGQz X2xvYyAoaW5wdXRfbG9jYXRpb24sIENPTkRfRVhQUiwKKwkJCQkgdm9pZF90eXBlX25vZGUsIGNv bmQsCisJCQkJIGdmY19jYWxsX2ZyZWUgKGRhdGFfcHRyKSwKKwkJCQkgYnVpbGRfZW1wdHlfc3Rt dCAoaW5wdXRfbG9jYXRpb24pKTsKKwkgIGdmY19hZGRfZXhwcl90b19ibG9jayAoJnNlLT5maW5h bGJsb2NrLCB0bXApOworCX0KKyAgICB9Cit9CisKIC8qIEdlbmVyYXRlIGNvZGUgZm9yIGEgcHJv Y2VkdXJlIGNhbGwuICBOb3RlIGNhbiByZXR1cm4gc2UtPnBvc3QgIT0gTlVMTC4KICAgIElmIHNl LT5kaXJlY3RfYnlyZWYgaXMgc2V0IHRoZW4gc2UtPmV4cHIgY29udGFpbnMgdGhlIHJldHVybiBw YXJhbWV0ZXIuCiAgICBSZXR1cm4gbm9uemVybywgaWYgdGhlIGNhbGwgaGFzIGFsdGVybmF0ZSBz cGVjaWZpZXJzLgpAQCAtNzAxMSw2ICs3MTM1LDcgQEAgZ2ZjX2NvbnZfcHJvY2VkdXJlX2NhbGwg KGdmY19zZSAqIHNlLCBnZmNfc3ltYm9sICogc3ltLAogCiAgICAgICBnZmNfYWRkX2Jsb2NrX3Rv X2Jsb2NrICgmc2UtPnByZSwgJnBhcm1zZS5wcmUpOwogICAgICAgZ2ZjX2FkZF9ibG9ja190b19i bG9jayAoJnBvc3QsICZwYXJtc2UucG9zdCk7CisgICAgICBnZmNfYWRkX2Jsb2NrX3RvX2Jsb2Nr ICgmc2UtPmZpbmFsYmxvY2ssICZwYXJtc2UuZmluYWxibG9jayk7CiAKICAgICAgIC8qIEFsbG9j YXRlZCBhbGxvY2F0YWJsZSBjb21wb25lbnRzIG9mIGRlcml2ZWQgdHlwZXMgbXVzdCBiZQogCSBk ZWFsbG9jYXRlZCBmb3Igbm9uLXZhcmlhYmxlIHNjYWxhcnMsIGFycmF5IGFyZ3VtZW50cyB0byBl bGVtZW50YWwKQEAgLTc2NzUsOSArNzgwMCwxNyBAQCBnZmNfY29udl9wcm9jZWR1cmVfY2FsbCAo Z2ZjX3NlICogc2UsIGdmY19zeW1ib2wgKiBzeW0sCiAgIC8qIEFsbG9jYXRhYmxlIHNjYWxhciBm dW5jdGlvbiByZXN1bHRzIG11c3QgYmUgZnJlZWQgYW5kIG51bGxpZmllZAogICAgICBhZnRlciB1 c2UuIFRoaXMgbmVjZXNzaXRhdGVzIHRoZSBjcmVhdGlvbiBvZiBhIHRlbXBvcmFyeSB0bwogICAg ICBob2xkIHRoZSByZXN1bHQgdG8gcHJldmVudCBkdXBsaWNhdGUgY2FsbHMuICAqLworICBzeW1i b2xfYXR0cmlidXRlIGF0dHIgPSAgY29tcCA/IGNvbXAtPmF0dHIgOiBzeW0tPmF0dHI7CisgIGJv b2wgYWxsb2NhdGFibGUgPSBhdHRyLmFsbG9jYXRhYmxlICYmICFhdHRyLmRpbWVuc2lvbjsKKyAg Z2ZjX3N5bWJvbCAqZGVyID0gY29tcCAmJiBjb21wLT50cy50eXBlID09IEJUX0RFUklWRUQgPyBj b21wLT50cy51LmRlcml2ZWQKKwkJICAgIDogKHN5bS0+dHMudHlwZSA9PSBCVF9ERVJJVkVEID8g c3ltLT50cy51LmRlcml2ZWQgOiBOVUxMKTsKKyAgYm9vbCBmaW5hbGl6YWJsZSA9IGRlciAhPSBO VUxMICYmIGdmY19pc19maW5hbGl6YWJsZSAoZGVyLCBOVUxMKTsKKworICBpZiAoIWJ5cmVmICYm IGZpbmFsaXphYmxlKQorICAgIGZpbmFsaXplX2Z1bmN0aW9uX3Jlc3VsdCAoc2UsIGRlciwgYXR0 ciwgZXhwci0+cmFuayk7CisKICAgaWYgKCFieXJlZiAmJiBzeW0tPnRzLnR5cGUgIT0gQlRfQ0hB UkFDVEVSCi0gICAgICAmJiAoKHN5bS0+YXR0ci5hbGxvY2F0YWJsZSAmJiAhc3ltLT5hdHRyLmRp bWVuc2lvbiAmJiAhY29tcCkKLQkgIHx8IChjb21wICYmIGNvbXAtPmF0dHIuYWxsb2NhdGFibGUg JiYgIWNvbXAtPmF0dHIuZGltZW5zaW9uKSkpCisgICAgICAmJiBhbGxvY2F0YWJsZSAmJiAhZmlu YWxpemFibGUpCiAgICAgewogICAgICAgdG1wID0gZ2ZjX2NyZWF0ZV92YXIgKFRSRUVfVFlQRSAo c2UtPmV4cHIpLCBOVUxMKTsKICAgICAgIGdmY19hZGRfbW9kaWZ5ICgmc2UtPnByZSwgdG1wLCBz ZS0+ZXhwcik7CkBAIC03NzM3LDYgKzc4NzAsOSBAQCBnZmNfY29udl9wcm9jZWR1cmVfY2FsbCAo Z2ZjX3NlICogc2UsIGdmY19zeW1ib2wgKiBzeW0sCiAJICAgICAgc2UtPmV4cHIgPSBpbmZvLT5k ZXNjcmlwdG9yOwogCSAgICAgIC8qIEJ1bmRsZSBpbiB0aGUgc3RyaW5nIGxlbmd0aC4gICovCiAJ ICAgICAgc2UtPnN0cmluZ19sZW5ndGggPSBsZW47CisKKwkgICAgICBpZiAoZmluYWxpemFibGUp CisJCWZpbmFsaXplX2Z1bmN0aW9uX3Jlc3VsdCAoc2UsIGRlciwgYXR0ciwgZXhwci0+cmFuayk7 CiAJICAgIH0KIAkgIGVsc2UgaWYgKHRzLnR5cGUgPT0gQlRfQ0hBUkFDVEVSKQogCSAgICB7CkBA IC03ODI5LDggKzc5NjUsNiBAQCBnZmNfY29udl9wcm9jZWR1cmVfY2FsbCAoZ2ZjX3NlICogc2Us IGdmY19zeW1ib2wgKiBzeW0sCiAJICAmJiBzZS0+ZXhwciAmJiBHRkNfQ0xBU1NfVFlQRV9QIChU UkVFX1RZUEUgKHNlLT5leHByKSkKIAkgICYmIGV4cHItPm11c3RfZmluYWxpemUpCiAJewotCSAg dHJlZSBmaW5hbF9mbmRlY2w7Ci0JICB0cmVlIGlzX2ZpbmFsOwogCSAgaW50IG47CiAJICBpZiAo c2UtPnNzICYmIHNlLT5zcy0+bG9vcCkKIAkgICAgewpAQCAtNzg1Miw2NiArNzk4NiwxNSBAQCBn ZmNfY29udl9wcm9jZWR1cmVfY2FsbCAoZ2ZjX3NlICogc2UsIGdmY19zeW1ib2wgKiBzeW0sCiAJ ICAgICAgLyogVE9ETyBFbGltaW5hdGUgdGhlIGRvdWJsaW5nIG9mIHRlbXBvcmFyaWVzLiBUaGlz CiAJCSBvbmUgaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSBubyBtZW1vcnkgbGVha2FnZS4gICovCiAJ ICAgICAgc2UtPmV4cHIgPSBnZmNfZXZhbHVhdGVfbm93IChzZS0+ZXhwciwgJnNlLT5wcmUpOwot CSAgICAgIHRtcCA9IGdmY19jbGFzc19kYXRhX2dldCAoc2UtPmV4cHIpOwotCSAgICAgIHRtcCA9 IGdmY19jb252X3NjYWxhcl90b19kZXNjcmlwdG9yIChzZSwgdG1wLAotCQkJQ0xBU1NfREFUQSAo ZXhwci0+dmFsdWUuZnVuY3Rpb24uZXN5bS0+cmVzdWx0KS0+YXR0cik7CiAJICAgIH0KIAotCSAg aWYgKChnZmNfaXNfY2xhc3NfYXJyYXlfZnVuY3Rpb24gKGV4cHIpCi0JICAgICAgIHx8IGdmY19p c19hbGxvY19jbGFzc19zY2FsYXJfZnVuY3Rpb24gKGV4cHIpKQotCSAgICAgICYmIENMQVNTX0RB VEEgKGV4cHItPnZhbHVlLmZ1bmN0aW9uLmVzeW0tPnJlc3VsdCktPmF0dHIucG9pbnRlcikKLQkg ICAgZ290byBub19maW5hbGl6YXRpb247Ci0KLQkgIGZpbmFsX2ZuZGVjbCA9IGdmY19jbGFzc192 dGFiX2ZpbmFsX2dldCAoc2UtPmV4cHIpOwotCSAgaXNfZmluYWwgPSBmb2xkX2J1aWxkMl9sb2Mg KGlucHV0X2xvY2F0aW9uLCBORV9FWFBSLAotCQkJCSAgICAgIGxvZ2ljYWxfdHlwZV9ub2RlLAot CQkJCSAgICAgIGZpbmFsX2ZuZGVjbCwKLQkJCQkgICAgICBmb2xkX2NvbnZlcnQgKFRSRUVfVFlQ RSAoZmluYWxfZm5kZWNsKSwKLQkJCQkJICAgCSAgICBudWxsX3BvaW50ZXJfbm9kZSkpOwotCSAg ZmluYWxfZm5kZWNsID0gYnVpbGRfZm9sZF9pbmRpcmVjdF9yZWZfbG9jIChpbnB1dF9sb2NhdGlv biwKLQkJCQkJCSAgICAgIGZpbmFsX2ZuZGVjbCk7Ci0gCSAgdG1wID0gYnVpbGRfY2FsbF9leHBy X2xvYyAoaW5wdXRfbG9jYXRpb24sCi0JCQkJICAgICBmaW5hbF9mbmRlY2wsIDMsCi0JCQkJICAg ICBnZmNfYnVpbGRfYWRkcl9leHByIChOVUxMLCB0bXApLAotCQkJCSAgICAgZ2ZjX2NsYXNzX3Z0 YWJfc2l6ZV9nZXQgKHNlLT5leHByKSwKLQkJCQkgICAgIGJvb2xlYW5fZmFsc2Vfbm9kZSk7Ci0J ICB0bXAgPSBmb2xkX2J1aWxkM19sb2MgKGlucHV0X2xvY2F0aW9uLCBDT05EX0VYUFIsCi0JCQkJ IHZvaWRfdHlwZV9ub2RlLCBpc19maW5hbCwgdG1wLAotCQkJCSBidWlsZF9lbXB0eV9zdG10IChp bnB1dF9sb2NhdGlvbikpOwotCi0JICBpZiAoc2UtPnNzICYmIHNlLT5zcy0+bG9vcCkKLQkgICAg ewotCSAgICAgIGdmY19wcmVwZW5kX2V4cHJfdG9fYmxvY2sgKCZzZS0+c3MtPmxvb3AtPnBvc3Qs IHRtcCk7Ci0JICAgICAgdG1wID0gZm9sZF9idWlsZDJfbG9jIChpbnB1dF9sb2NhdGlvbiwgTkVf RVhQUiwKLQkJCQkgICAgIGxvZ2ljYWxfdHlwZV9ub2RlLAotCQkJCSAgICAgaW5mby0+ZGF0YSwK LQkJCQkgICAgIGZvbGRfY29udmVydCAoVFJFRV9UWVBFIChpbmZvLT5kYXRhKSwKLQkJCQkJICAg CSAgICBudWxsX3BvaW50ZXJfbm9kZSkpOwotCSAgICAgIHRtcCA9IGZvbGRfYnVpbGQzX2xvYyAo aW5wdXRfbG9jYXRpb24sIENPTkRfRVhQUiwKLQkJCQkgICAgIHZvaWRfdHlwZV9ub2RlLCB0bXAs Ci0JCQkJICAgICBnZmNfY2FsbF9mcmVlIChpbmZvLT5kYXRhKSwKLQkJCQkgICAgIGJ1aWxkX2Vt cHR5X3N0bXQgKGlucHV0X2xvY2F0aW9uKSk7Ci0JICAgICAgZ2ZjX2FkZF9leHByX3RvX2Jsb2Nr ICgmc2UtPnNzLT5sb29wLT5wb3N0LCB0bXApOwotCSAgICB9Ci0JICBlbHNlCi0JICAgIHsKLQkg ICAgICB0cmVlIGNsYXNzZGF0YTsKLQkgICAgICBnZmNfcHJlcGVuZF9leHByX3RvX2Jsb2NrICgm c2UtPnBvc3QsIHRtcCk7Ci0JICAgICAgY2xhc3NkYXRhID0gZ2ZjX2NsYXNzX2RhdGFfZ2V0IChz ZS0+ZXhwcik7Ci0JICAgICAgdG1wID0gZm9sZF9idWlsZDJfbG9jIChpbnB1dF9sb2NhdGlvbiwg TkVfRVhQUiwKLQkJCQkgICAgIGxvZ2ljYWxfdHlwZV9ub2RlLAotCQkJCSAgICAgY2xhc3NkYXRh LAotCQkJCSAgICAgZm9sZF9jb252ZXJ0IChUUkVFX1RZUEUgKGNsYXNzZGF0YSksCi0JCQkJCSAg IAkgICAgbnVsbF9wb2ludGVyX25vZGUpKTsKLQkgICAgICB0bXAgPSBmb2xkX2J1aWxkM19sb2Mg KGlucHV0X2xvY2F0aW9uLCBDT05EX0VYUFIsCi0JCQkJICAgICB2b2lkX3R5cGVfbm9kZSwgdG1w LAotCQkJCSAgICAgZ2ZjX2NhbGxfZnJlZSAoY2xhc3NkYXRhKSwKLQkJCQkgICAgIGJ1aWxkX2Vt cHR5X3N0bXQgKGlucHV0X2xvY2F0aW9uKSk7Ci0JICAgICAgZ2ZjX2FkZF9leHByX3RvX2Jsb2Nr ICgmc2UtPnBvc3QsIHRtcCk7Ci0JICAgIH0KKwkgIC8qIEZpbmFsaXplIHRoZSByZXN1bHQsIGlm IG5lY2Vzc2FyeS4gICovCisJICBhdHRyID0gQ0xBU1NfREFUQSAoZXhwci0+dmFsdWUuZnVuY3Rp b24uZXN5bS0+cmVzdWx0KS0+YXR0cjsKKwkgIGlmICghKChnZmNfaXNfY2xhc3NfYXJyYXlfZnVu Y3Rpb24gKGV4cHIpCisJCSB8fCBnZmNfaXNfYWxsb2NfY2xhc3Nfc2NhbGFyX2Z1bmN0aW9uIChl eHByKSkKKwkJJiYgYXR0ci5wb2ludGVyKSkKKwkgICAgZmluYWxpemVfZnVuY3Rpb25fcmVzdWx0 IChzZSwgTlVMTCwgYXR0ciwgZXhwci0+cmFuayk7CiAJfQotCi1ub19maW5hbGl6YXRpb246CiAg ICAgICBnZmNfYWRkX2Jsb2NrX3RvX2Jsb2NrICgmc2UtPnBvc3QsICZwb3N0KTsKICAgICB9CiAK QEAgLTEwNDMwLDcgKzEwNTEzLDggQEAgZ2ZjX3RyYW5zX3NjYWxhcl9hc3NpZ24gKGdmY19zZSAq IGxzZSwgZ2ZjX3NlICogcnNlLCBnZmNfdHlwZXNwZWMgdHMsCiAgICAgICBpZiAoZGVhbGxvYykK IAl7CiAJICB0bXBfdmFyID0gZ2ZjX2V2YWx1YXRlX25vdyAobHNlLT5leHByLCAmbHNlLT5wcmUp OwotCSAgdG1wID0gZ2ZjX2RlYWxsb2NhdGVfYWxsb2NfY29tcF9ub19jYWYgKHRzLnUuZGVyaXZl ZCwgdG1wX3ZhciwgMCk7CisJICB0bXAgPSBnZmNfZGVhbGxvY2F0ZV9hbGxvY19jb21wX25vX2Nh ZiAodHMudS5kZXJpdmVkLCB0bXBfdmFyLAorCQkJCQkJICAwLCB0cnVlKTsKIAkgIGlmIChkZWVw X2NvcHkpCiAJICAgIHRtcCA9IGJ1aWxkM192IChDT05EX0VYUFIsIGNvbmQsIGJ1aWxkX2VtcHR5 X3N0bXQgKGlucHV0X2xvY2F0aW9uKSwKIAkJCSAgICB0bXApOwpAQCAtMTA0MzgsNiArMTA1MjIs NyBAQCBnZmNfdHJhbnNfc2NhbGFyX2Fzc2lnbiAoZ2ZjX3NlICogbHNlLCBnZmNfc2UgKiByc2Us IGdmY190eXBlc3BlYyB0cywKIAl9CiAKICAgICAgIGdmY19hZGRfYmxvY2tfdG9fYmxvY2sgKCZi bG9jaywgJnJzZS0+cHJlKTsKKyAgICAgIGdmY19hZGRfYmxvY2tfdG9fYmxvY2sgKCZibG9jaywg JmxzZS0+ZmluYWxibG9jayk7CiAgICAgICBnZmNfYWRkX2Jsb2NrX3RvX2Jsb2NrICgmYmxvY2ss ICZsc2UtPnByZSk7CiAKICAgICAgIGdmY19hZGRfbW9kaWZ5ICgmYmxvY2ssIGxzZS0+ZXhwciwK QEAgLTEwNDY3LDggKzEwNTUyLDkgQEAgZ2ZjX3RyYW5zX3NjYWxhcl9hc3NpZ24gKGdmY19zZSAq IGxzZSwgZ2ZjX3NlICogcnNlLCBnZmNfdHlwZXNwZWMgdHMsCiAgICAgfQogICBlbHNlIGlmIChn ZmNfYnRfc3RydWN0ICh0cy50eXBlKSkKICAgICB7Ci0gICAgICBnZmNfYWRkX2Jsb2NrX3RvX2Js b2NrICgmYmxvY2ssICZsc2UtPnByZSk7CiAgICAgICBnZmNfYWRkX2Jsb2NrX3RvX2Jsb2NrICgm YmxvY2ssICZyc2UtPnByZSk7CisgICAgICBnZmNfYWRkX2Jsb2NrX3RvX2Jsb2NrICgmYmxvY2ss ICZsc2UtPmZpbmFsYmxvY2spOworICAgICAgZ2ZjX2FkZF9ibG9ja190b19ibG9jayAoJmJsb2Nr LCAmbHNlLT5wcmUpOwogICAgICAgdG1wID0gZm9sZF9idWlsZDFfbG9jIChpbnB1dF9sb2NhdGlv biwgVklFV19DT05WRVJUX0VYUFIsCiAJCQkgICAgIFRSRUVfVFlQRSAobHNlLT5leHByKSwgcnNl LT5leHByKTsKICAgICAgIGdmY19hZGRfbW9kaWZ5ICgmYmxvY2ssIGxzZS0+ZXhwciwgdG1wKTsK QEAgLTEwNDc4LDYgKzEwNTY0LDcgQEAgZ2ZjX3RyYW5zX3NjYWxhcl9hc3NpZ24gKGdmY19zZSAq IGxzZSwgZ2ZjX3NlICogcnNlLCBnZmNfdHlwZXNwZWMgdHMsCiAgICAgewogICAgICAgZ2ZjX2Fk ZF9ibG9ja190b19ibG9jayAoJmJsb2NrLCAmbHNlLT5wcmUpOwogICAgICAgZ2ZjX2FkZF9ibG9j a190b19ibG9jayAoJmJsb2NrLCAmcnNlLT5wcmUpOworICAgICAgZ2ZjX2FkZF9ibG9ja190b19i bG9jayAoJmJsb2NrLCAmbHNlLT5maW5hbGJsb2NrKTsKIAogICAgICAgaWYgKCF0cmFuc19zY2Fs YXJfY2xhc3NfYXNzaWduICgmYmxvY2ssIGxzZSwgcnNlKSkKIAl7CkBAIC0xMDc5Niw2ICsxMDg4 Myw5OSBAQCBmY25jYWxsX3JlYWxsb2NfcmVzdWx0IChnZmNfc2UgKnNlLCBpbnQgcmFuaykKIH0K IAogCisgIC8qIEYyMDE4ICg3LjUuNi4zKTogIldoZW4gYW4gaW50cmluc2ljIGFzc2lnbm1lbnQg c3RhdGVtZW50IGlzIGV4ZWN1dGVkCisgICAgICgxMC4yLjEuMyksIGlmIHRoZSB2YXJpYWJsZSBp cyBub3QgYW4gdW5hbGxvY2F0ZWQgYWxsb2NhdGFibGUgdmFyaWFibGUsCisgICAgIGl0IGlzIGZp bmFsaXplZCBhZnRlciBldmFsdWF0aW9uIG9mIGV4cHIgYW5kIGJlZm9yZSB0aGUgZGVmaW5pdGlv biBvZgorICAgICB0aGUgdmFyaWFibGUuIElmIHRoZSB2YXJpYWJsZSBpcyBhbiBhbGxvY2F0ZWQg YWxsb2NhdGFibGUgdmFyaWFibGUsIG9yCisgICAgIGhhcyBhbiBhbGxvY2F0ZWQgYWxsb2NhdGFi bGUgc3Vib2JqZWN0LCB0aGF0IHdvdWxkIGJlIGRlYWxsb2NhdGVkIGJ5CisgICAgIGludHJpbnNp YyBhc3NpZ25tZW50LCB0aGUgZmluYWxpemF0aW9uIG9jY3VycyBiZWZvcmUgdGhlIGRlYWxsb2Nh dGlvbiAqLworCitzdGF0aWMgYm9vbAorZ2ZjX2Fzc2lnbm1lbnRfZmluYWxpemVyX2NhbGwgKGdm Y19zZSAqbHNlLCBnZmNfZXhwciAqZXhwcjEsIGJvb2wgaW5pdF9mbGFnKQoreworICBzeW1ib2xf YXR0cmlidXRlIGxoc19hdHRyOworICB0cmVlIGZpbmFsX2V4cHI7CisgIHRyZWUgcHRyOworICB0 cmVlIGNvbmQ7CisgIGdmY19zZSBzZTsKKyAgZ2ZjX3N5bWJvbCAqc3ltID0gZXhwcjEtPnN5bXRy ZWUtPm4uc3ltOworICBnZmNfcmVmICpyZWYgPSBleHByMS0+cmVmOworICBzdG10YmxvY2tfdCBm aW5hbF9ibG9jazsKKyAgZ2ZjX2luaXRfYmxvY2sgKCZmaW5hbF9ibG9jayk7CisKKyAgLyogV2Ug aGF2ZSB0byBleGNsdWRlIHZ0YWJsZSBwcm9jZWR1cmVzIChfY29weSBhbmQgX2ZpbmFsIGVzcGVj aWFsbHkpLCB1c2VzCisgICAgIG9mIGdmY190cmFuc19hc3NpZ25tZW50XzEgaW4gaW5pdGlhbGl6 YXRpb24gYW5kIGFsbG9jYXRpb24gYmVmb3JlIHRyeWluZworICAgICB0byBidWlsZCBhIGZpbmFs IGNhbGwuICAqLworICBpZiAoIWV4cHIxLT5tdXN0X2ZpbmFsaXplCisgICAgICB8fCBzeW0tPmF0 dHIuYXJ0aWZpY2lhbAorICAgICAgfHwgc3ltLT5ucy0+cHJvY19uYW1lLT5hdHRyLmFydGlmaWNp YWwKKyAgICAgIHx8IGluaXRfZmxhZykKKyAgICByZXR1cm4gZmFsc2U7CisKKyAgLyogRjIwMTgg Ny41LjYuMjogT25seSBmaW5hbGl6YWJsZSBlbnRpdGllcyBhcmUgZmluYWxpemVkLiAgKi8KKyAg Zm9yICg7IHJlZjsgcmVmID0gcmVmLT5uZXh0KQorICAgIGlmIChyZWYtPnR5cGUgPT0gUkVGX0NP TVBPTkVOVCkKKyAgICAgIHJldHVybiBmYWxzZTsKKworICBnZmNfaW5pdF9ibG9jayAoJmZpbmFs X2Jsb2NrKTsKKworICBpZiAoIShzeW0tPnRzLnR5cGUgPT0gQlRfQ0xBU1MKKwl8fCAoc3ltLT50 cy50eXBlID09IEJUX0RFUklWRUQKKwkgICAgJiYgZ2ZjX2lzX2ZpbmFsaXphYmxlIChzeW0tPnRz LnUuZGVyaXZlZCwgTlVMTCkpKQorICAgICAgfHwgIWdmY19hZGRfZmluYWxpemVyX2NhbGwgKCZm aW5hbF9ibG9jaywgZXhwcjEpKQorICAgIHJldHVybiBmYWxzZTsKKworICBsaHNfYXR0ciA9IGdm Y19leHByX2F0dHIgKGV4cHIxKTsKKworICAvKiBDaGVjayBhbGxvY2F0YWJsZS9wb2ludGVyIGlz IGFsbG9jYXRlZC9hc3NvY2lhdGVkLiAgKi8KKyAgaWYgKGxoc19hdHRyLmFsbG9jYXRhYmxlIHx8 IGxoc19hdHRyLnBvaW50ZXIpCisgICAgeworICAgICAgaWYgKGV4cHIxLT50cy50eXBlID09IEJU X0NMQVNTKQorCXsKKwkgIHB0ciA9IGdmY19nZXRfY2xhc3NfZnJvbV9nZmNfZXhwciAoZXhwcjEp OworCSAgZ2NjX2Fzc2VydCAocHRyICE9IE5VTExfVFJFRSk7CisJICBwdHIgPSBnZmNfY2xhc3Nf ZGF0YV9nZXQgKHB0cik7CisJICBpZiAobGhzX2F0dHIuZGltZW5zaW9uKQorCSAgICBwdHIgPSBn ZmNfY29udl9kZXNjcmlwdG9yX2RhdGFfZ2V0IChwdHIpOworCX0KKyAgICAgIGVsc2UKKwl7CisJ ICBnZmNfaW5pdF9zZSAoJnNlLCBOVUxMKTsKKwkgIGlmIChleHByMS0+cmFuaykKKwkgICAgewor CSAgICAgIGdmY19jb252X2V4cHJfZGVzY3JpcHRvciAoJnNlLCBleHByMSk7CisJICAgICAgcHRy ID0gZ2ZjX2NvbnZfZGVzY3JpcHRvcl9kYXRhX2dldCAoc2UuZXhwcik7CisJICAgIH0KKwkgIGVs c2UKKwkgICAgeworCSAgICAgIGdmY19jb252X2V4cHIgKCZzZSwgZXhwcjEpOworCSAgICAgIHB0 ciA9IGdmY19idWlsZF9hZGRyX2V4cHIgKE5VTExfVFJFRSwgc2UuZXhwcik7CisJICAgIH0KKwl9 CisKKyAgICAgIGNvbmQgPSBmb2xkX2J1aWxkMl9sb2MgKGlucHV0X2xvY2F0aW9uLCBORV9FWFBS LCBsb2dpY2FsX3R5cGVfbm9kZSwKKwkJCSAgICAgIHB0ciwgYnVpbGRfemVyb19jc3QgKFRSRUVf VFlQRSAocHRyKSkpOworICAgICAgZmluYWxfZXhwciA9IGJ1aWxkM19sb2MgKGlucHV0X2xvY2F0 aW9uLCBDT05EX0VYUFIsIHZvaWRfdHlwZV9ub2RlLAorCQkJICAgICAgIGNvbmQsIGdmY19maW5p c2hfYmxvY2sgKCZmaW5hbF9ibG9jayksCisJCQkgICAgICAgYnVpbGRfZW1wdHlfc3RtdCAoaW5w dXRfbG9jYXRpb24pKTsKKyAgICB9CisgIGVsc2UKKyAgICBmaW5hbF9leHByID0gZ2ZjX2Zpbmlz aF9ibG9jayAoJmZpbmFsX2Jsb2NrKTsKKworICAvKiBDaGVjayBvcHRpb25hbCBwcmVzZW50LiAg Ki8KKyAgaWYgKHN5bS0+YXR0ci5vcHRpb25hbCkKKyAgICB7CisgICAgICBjb25kID0gZ2ZjX2Nv bnZfZXhwcl9wcmVzZW50IChzeW0pOworICAgICAgZmluYWxfZXhwciA9IGJ1aWxkM19sb2MgKGlu cHV0X2xvY2F0aW9uLCBDT05EX0VYUFIsIHZvaWRfdHlwZV9ub2RlLAorCQkJICAgICAgIGNvbmQs IGZpbmFsX2V4cHIsCisJCQkgICAgICAgYnVpbGRfZW1wdHlfc3RtdCAoaW5wdXRfbG9jYXRpb24p KTsKKyAgICB9CisKKyAgZ2ZjX2FkZF9leHByX3RvX2Jsb2NrICgmbHNlLT5maW5hbGJsb2NrLCBm aW5hbF9leHByKTsKKworICByZXR1cm4gdHJ1ZTsKK30KKwogCiAvKiBUcnkgdG8gdHJhbnNsYXRl IGFycmF5KDopID0gZnVuYyAoLi4uKSwgd2hlcmUgZnVuYyBpcyBhIHRyYW5zZm9ybWF0aW9uYWwK ICAgIGFycmF5IGZ1bmN0aW9uLCB3aXRob3V0IHVzaW5nIGEgdGVtcG9yYXJ5LiAgUmV0dXJucyBO VUxMIGlmIHRoaXMgaXNuJ3QgdGhlCkBAIC0xMDgwOCw2ICsxMDk4OCwxMiBAQCBnZmNfdHJhbnNf YXJyYXlmdW5jX2Fzc2lnbiAoZ2ZjX2V4cHIgKiBleHByMSwgZ2ZjX2V4cHIgKiBleHByMikKICAg Z2ZjX3NzICpzcyA9IE5VTEw7CiAgIGdmY19jb21wb25lbnQgKmNvbXAgPSBOVUxMOwogICBnZmNf bG9vcGluZm8gbG9vcDsKKyAgdHJlZSB0bXA7CisgIHRyZWUgbGhzOworICBnZmNfc2UgZmluYWxf c2U7CisgIGdmY19zeW1ib2wgKnN5bSA9IGV4cHIxLT5zeW10cmVlLT5uLnN5bTsKKyAgYm9vbCBm aW5hbGl6YWJsZSA9IGV4cHIxLT50cy50eXBlID09IEJUX0RFUklWRUQKKwkJICAgICAmJiBnZmNf aXNfZmluYWxpemFibGUgKGV4cHIxLT50cy51LmRlcml2ZWQsIE5VTEwpOwogCiAgIGlmIChhcnJh eWZ1bmNfYXNzaWduX25lZWRzX3RlbXBvcmFyeSAoZXhwcjEsIGV4cHIyKSkKICAgICByZXR1cm4g TlVMTDsKQEAgLTEwODI2LDEyICsxMTAxMiw0NCBAQCBnZmNfdHJhbnNfYXJyYXlmdW5jX2Fzc2ln biAoZ2ZjX2V4cHIgKiBleHByMSwgZ2ZjX2V4cHIgKiBleHByMikKICAgZ2ZjX3N0YXJ0X2Jsb2Nr ICgmc2UucHJlKTsKICAgc2Uud2FudF9wb2ludGVyID0gMTsKIAorICAvKiBGaXJzdCB0aGUgbGhz IG11c3QgYmUgZmluYWxpemVkLCBpZiBuZWNlc3NhcnkuIFdlIHVzZSBhIGNvcHkgb2YgdGhlIHN5 bWJvbAorICAgICBiYWNrZW5kIGRlY2wsIHN0YXNoIHRoZSBvcmlnaW5hbCBhd2F5IGZvciB0aGUg ZmluYWxpemF0aW9uIHNvIHRoYXQgdGhlCisgICAgIHZhbHVlIHVzZWQgaXMgdGhhdCBiZWZvcmUg dGhlIGFzc2lnbm1lbnQuIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UKKyAgICAgZXZhbHVhdGlv biBvZiB0aGUgcmhzIGV4cHJlc3Npb24gdXNpbmcgZGlyZWN0IGJ5IHJlZmVyZW5jZSBjYW4gY2hh bmdlCisgICAgIHRoZSB2YWx1ZS4gSG93ZXZlciwgdGhlIHN0YW5kYXJkIG1hbmRhdGVzIHRoYXQg dGhlIGZpbmFsaXphdGlvbiBtdXN0IG9jY3VyCisgICAgIGFmdGVyIGV2YWx1YXRpb24gb2YgdGhl IHJocy4gICovCisgIGdmY19pbml0X3NlICgmZmluYWxfc2UsIE5VTEwpOworCisgIGlmIChmaW5h bGl6YWJsZSkKKyAgICB7CisgICAgICB0bXAgPSBzeW0tPmJhY2tlbmRfZGVjbDsKKyAgICAgIGxo cyA9IHN5bS0+YmFja2VuZF9kZWNsOworICAgICAgaWYgKFRSRUVfQ09ERSAodG1wKSA9PSBJTkRJ UkVDVF9SRUYpCisJdG1wID0gVFJFRV9PUEVSQU5EICh0bXAsIDApOworICAgICAgc3ltLT5iYWNr ZW5kX2RlY2wgPSBnZmNfY3JlYXRlX3ZhciAoVFJFRV9UWVBFICh0bXApLCAibGhzIik7CisgICAg ICBnZmNfYWRkX21vZGlmeSAoJnNlLnByZSwgc3ltLT5iYWNrZW5kX2RlY2wsIHRtcCk7CisgICAg ICBpZiAoR0ZDX0RFU0NSSVBUT1JfVFlQRV9QIChUUkVFX1RZUEUgKHRtcCkpKQorCXsKKwkgIHRt cCA9IGdmY19jb3B5X2FsbG9jX2NvbXAgKGV4cHIxLT50cy51LmRlcml2ZWQsIHRtcCwgc3ltLT5i YWNrZW5kX2RlY2wsCisJCQkJICAgICBleHByMS0+cmFuaywgMCk7CisJICBnZmNfYWRkX2V4cHJf dG9fYmxvY2sgKCZmaW5hbF9zZS5wcmUsIHRtcCk7CisJfQorICAgIH0KKworICBpZiAoZmluYWxp emFibGUgJiYgZ2ZjX2Fzc2lnbm1lbnRfZmluYWxpemVyX2NhbGwgKCZmaW5hbF9zZSwgZXhwcjEs IGZhbHNlKSkKKyAgICB7CisgICAgICBnZmNfYWRkX2Jsb2NrX3RvX2Jsb2NrICgmc2UucHJlLCAm ZmluYWxfc2UucHJlKTsKKyAgICAgIGdmY19hZGRfYmxvY2tfdG9fYmxvY2sgKCZzZS5wb3N0LCAm ZmluYWxfc2UuZmluYWxibG9jayk7CisgICAgfQorCisgIGlmIChmaW5hbGl6YWJsZSkKKyAgICBz eW0tPmJhY2tlbmRfZGVjbCA9IGxoczsKKwogICBnZmNfY29udl9hcnJheV9wYXJhbWV0ZXIgKCZz ZSwgZXhwcjEsIGZhbHNlLCBOVUxMLCBOVUxMLCBOVUxMKTsKIAogICBpZiAoZXhwcjEtPnRzLnR5 cGUgPT0gQlRfREVSSVZFRAogCSYmIGV4cHIxLT50cy51LmRlcml2ZWQtPmF0dHIuYWxsb2NfY29t cCkKICAgICB7Ci0gICAgICB0cmVlIHRtcDsKICAgICAgIHRtcCA9IGdmY19kZWFsbG9jYXRlX2Fs bG9jX2NvbXBfbm9fY2FmIChleHByMS0+dHMudS5kZXJpdmVkLCBzZS5leHByLAogCQkJCQkgICAg ICBleHByMS0+cmFuayk7CiAgICAgICBnZmNfYWRkX2V4cHJfdG9fYmxvY2sgKCZzZS5wcmUsIHRt cCk7CkBAIC0xMDg0MSw2ICsxMTA1OSwxNyBAQCBnZmNfdHJhbnNfYXJyYXlmdW5jX2Fzc2lnbiAo Z2ZjX2V4cHIgKiBleHByMSwgZ2ZjX2V4cHIgKiBleHByMikKICAgc2Uuc3MgPSBnZmNfd2Fsa19l eHByIChleHByMik7CiAgIGdjY19hc3NlcnQgKHNlLnNzICE9IGdmY19zc190ZXJtaW5hdG9yKTsK IAorICAvKiBTaW5jZSB0aGlzIGlzIGEgZGlyZWN0IGJ5IHJlZmVyZW5jZSBjYWxsLCByZWZlcmVu Y2VzIHRvIHRoZSBsaHMgY2FuIGJlCisgICAgIHVzZWQgZm9yIGZpbmFsaXphdGlvbiBvZiB0aGUg ZnVuY3Rpb24gcmVzdWx0IGp1c3QgYXMgbG9uZyBhcyB0aGUgYmxvY2tzCisgICAgIGZyb20gZmlu YWxfc2UgYXJlIGFkZGVkIGF0IHRoZSByaWdodCB0aW1lLiAgKi8KKyAgZ2ZjX2luaXRfc2UgKCZm aW5hbF9zZSwgTlVMTCk7CisgIGlmIChmaW5hbGl6YWJsZSAmJiBleHByMi0+dmFsdWUuZnVuY3Rp b24uZXN5bSkKKyAgICB7CisgICAgICBmaW5hbF9zZS5leHByID0gYnVpbGRfZm9sZF9pbmRpcmVj dF9yZWZfbG9jIChpbnB1dF9sb2NhdGlvbiwgc2UuZXhwcik7CisgICAgICBmaW5hbGl6ZV9mdW5j dGlvbl9yZXN1bHQgKCZmaW5hbF9zZSwgZXhwcjItPnRzLnUuZGVyaXZlZCwKKwkJCQlleHByMi0+ dmFsdWUuZnVuY3Rpb24uZXN5bS0+YXR0ciwgZXhwcjItPnJhbmspOworICAgIH0KKwogICAvKiBS ZWFsbG9jYXRlIG9uIGFzc2lnbm1lbnQgbmVlZHMgdGhlIGxvb3BpbmZvIGZvciBleHRyaW5zaWMg ZnVuY3Rpb25zLgogICAgICBUaGlzIGlzIHNpZ25hbGxlZCB0byBnZmNfY29udl9wcm9jZWR1cmVf Y2FsbCBieSBzZXR0aW5nIGlzX2FsbG9jX2xocy4KICAgICAgQ2xlYXJseSwgdGhpcyBjYW5ub3Qg YmUgZG9uZSBmb3IgYW4gYWxsb2NhdGFibGUgZnVuY3Rpb24gcmVzdWx0LCBzaW5jZQpAQCAtMTA4 NzEsNyArMTExMDAsMTkgQEAgZ2ZjX3RyYW5zX2FycmF5ZnVuY19hc3NpZ24gKGdmY19leHByICog ZXhwcjEsIGdmY19leHByICogZXhwcjIpCiAgICAgfQogCiAgIGdmY19jb252X2Z1bmN0aW9uX2V4 cHIgKCZzZSwgZXhwcjIpOworCisgIC8qIEZpeCB0aGUgcmVzdWx0LiAgKi8KICAgZ2ZjX2FkZF9i bG9ja190b19ibG9jayAoJnNlLnByZSwgJnNlLnBvc3QpOworICBpZiAoZmluYWxpemFibGUpCisg ICAgZ2ZjX2FkZF9ibG9ja190b19ibG9jayAoJnNlLnByZSwgJmZpbmFsX3NlLnByZSk7CisKKyAg LyogRG8gdGhlIGZpbmFsaXphdGlvbiwgaW5jbHVkaW5nIGZpbmFsIGNhbGxzIGZyb20gZnVuY3Rp b24gYXJndW1lbnRzLiAgKi8KKyAgaWYgKGZpbmFsaXphYmxlKQorICAgIHsKKyAgICAgIGdmY19h ZGRfYmxvY2tfdG9fYmxvY2sgKCZzZS5wcmUsICZmaW5hbF9zZS5wb3N0KTsKKyAgICAgIGdmY19h ZGRfYmxvY2tfdG9fYmxvY2sgKCZzZS5wcmUsICZzZS5maW5hbGJsb2NrKTsKKyAgICAgIGdmY19h ZGRfYmxvY2tfdG9fYmxvY2sgKCZzZS5wcmUsICZmaW5hbF9zZS5maW5hbGJsb2NrKTsKKyAgIH0K IAogICBpZiAoc3MpCiAgICAgZ2ZjX2NsZWFudXBfbG9vcCAoJmxvb3ApOwpAQCAtMTEzOTQsNiAr MTE2MzUsMTcgQEAgdHJhbnNfY2xhc3NfYXNzaWdubWVudCAoc3RtdGJsb2NrX3QgKmJsb2NrLCBn ZmNfZXhwciAqbGhzLCBnZmNfZXhwciAqcmhzLAogewogICB0cmVlIHRtcCwgZmNuLCBzdGRjb3B5 LCB0b19sZW4sIGZyb21fbGVuLCB2cHRyLCBvbGRfdnB0cjsKICAgdmVjPHRyZWUsIHZhX2djPiAq YXJncyA9IE5VTEw7CisgIGJvb2wgZmluYWxfZXhwcjsKKworICBmaW5hbF9leHByID0gZ2ZjX2Fz c2lnbm1lbnRfZmluYWxpemVyX2NhbGwgKGxzZSwgbGhzLCBmYWxzZSk7CisgIGlmIChmaW5hbF9l eHByKQorICAgIHsKKyAgICAgIGlmIChyc2UtPmxvb3ApCisJZ2ZjX3ByZXBlbmRfZXhwcl90b19i bG9jayAoJnJzZS0+bG9vcC0+cHJlLAorCQkJCSAgIGdmY19maW5pc2hfYmxvY2sgKCZsc2UtPmZp bmFsYmxvY2spKTsKKyAgICAgIGVsc2UKKwlnZmNfYWRkX2Jsb2NrX3RvX2Jsb2NrIChibG9jaywg JmxzZS0+ZmluYWxibG9jayk7CisgICAgfQogCiAgIC8qIFN0b3JlIHRoZSBvbGQgdnB0ciBzbyB0 aGF0IGR5bmFtaWMgdHlwZXMgY2FuIGJlIGNvbXBhcmVkIGZvcgogICAgICByZWFsbG9jYXRpb24g dG8gb2NjdXIgb3Igbm90LiAgKi8KQEAgLTExNDE5LDggKzExNjcxLDEyIEBAIHRyYW5zX2NsYXNz X2Fzc2lnbm1lbnQgKHN0bXRibG9ja190ICpibG9jaywgZ2ZjX2V4cHIgKmxocywgZ2ZjX2V4cHIg KnJocywKIAlvbGRfdnB0ciA9IGJ1aWxkX2ludF9jc3QgKFRSRUVfVFlQRSAodnB0ciksIDApOwog CiAgICAgICBzaXplID0gZ2ZjX3ZwdHJfc2l6ZV9nZXQgKHZwdHIpOwotICAgICAgY2xhc3NfaGFu ID0gR0ZDX0NMQVNTX1RZUEVfUCAoVFJFRV9UWVBFIChsc2UtPmV4cHIpKQotCSAgPyBnZmNfY2xh c3NfZGF0YV9nZXQgKGxzZS0+ZXhwcikgOiBsc2UtPmV4cHI7CisgICAgICBpZiAoVFJFRV9DT0RF IChsc2UtPmV4cHIpID09IElORElSRUNUX1JFRikKKwl0bXAgPSBUUkVFX09QRVJBTkQgKGxzZS0+ ZXhwciwgMCk7CisgICAgICBlbHNlCisJdG1wID0gbHNlLT5leHByOworICAgICAgY2xhc3NfaGFu ID0gR0ZDX0NMQVNTX1RZUEVfUCAoVFJFRV9UWVBFICh0bXApKQorCSAgPyBnZmNfY2xhc3NfZGF0 YV9nZXQgKHRtcCkgOiB0bXA7CiAKICAgICAgIC8qIEFsbG9jYXRlIGJsb2NrLiAgKi8KICAgICAg IGdmY19pbml0X2Jsb2NrICgmYWxsb2MpOwpAQCAtMTE1MTksNiArMTE3NzUsNyBAQCB0cmFuc19j bGFzc19hc3NpZ25tZW50IChzdG10YmxvY2tfdCAqYmxvY2ssIGdmY19leHByICpsaHMsIGdmY19l eHByICpyaHMsCiAgICAgfQogfQogCisKIC8qIFN1YnJvdXRpbmUgb2YgZ2ZjX3RyYW5zX2Fzc2ln bm1lbnQgdGhhdCBhY3R1YWxseSBzY2FsYXJpemVzIHRoZQogICAgYXNzaWdubWVudC4gIEVYUFIx IGlzIHRoZSBkZXN0aW5hdGlvbi9MSFMgYW5kIEVYUFIyIGlzIHRoZSBzb3VyY2UvUkhTLgogICAg aW5pdF9mbGFnIGluZGljYXRlcyBpbml0aWFsaXphdGlvbiBleHByZXNzaW9ucyBhbmQgZGVhbGxv YyB0aGF0IG5vCkBAIC0xMTU0Miw2ICsxMTc5OSw3IEBAIGdmY190cmFuc19hc3NpZ25tZW50XzEg KGdmY19leHByICogZXhwcjEsIGdmY19leHByICogZXhwcjIsIGJvb2wgaW5pdF9mbGFnLAogICB0 cmVlIHRtcDsKICAgc3RtdGJsb2NrX3QgYmxvY2s7CiAgIHN0bXRibG9ja190IGJvZHk7CisgIGJv b2wgZmluYWxfZXhwcjsKICAgYm9vbCBsX2lzX3RlbXA7CiAgIGJvb2wgc2NhbGFyX3RvX2FycmF5 OwogICB0cmVlIHN0cmluZ19sZW5ndGg7CkBAIC0xMTU4Miw2ICsxMTg0MCw3IEBAIGdmY190cmFu c19hc3NpZ25tZW50XzEgKGdmY19leHByICogZXhwcjEsIGdmY19leHByICogZXhwcjIsIGJvb2wg aW5pdF9mbGFnLAogICAgICBuZWVkZWQgYXQgdHdvIGxvY2F0aW9ucywgc28gZG8gaXQgb25jZSBv bmx5IGJlZm9yZSB0aGUgaW5mb3JtYXRpb24gaXMKICAgICAgbmVlZGVkLiAgKi8KICAgbGhzX2F0 dHIgPSBnZmNfZXhwcl9hdHRyIChleHByMSk7CisKICAgaXNfcG9seV9hc3NpZ24gPSAodXNlX3Zw dHJfY29weSB8fCBsaHNfYXR0ci5wb2ludGVyCiAJCSAgICB8fCAobGhzX2F0dHIuYWxsb2NhdGFi bGUgJiYgIWxoc19hdHRyLmRpbWVuc2lvbikpCiAJCSAgICYmIChleHByMS0+dHMudHlwZSA9PSBC VF9DTEFTUwpAQCAtMTE4NTUsNiArMTIxMTQsOCBAQCBnZmNfdHJhbnNfYXNzaWdubWVudF8xIChn ZmNfZXhwciAqIGV4cHIxLCBnZmNfZXhwciAqIGV4cHIyLCBib29sIGluaXRfZmxhZywKIAkgIGVs c2UKIAkgICAgZ2ZjX2FkZF9leHByX3RvX2Jsb2NrICgmbG9vcC5wb3N0LCB0bXAyKTsKIAl9CisK KyAgICAgIGV4cHIxLT5tdXN0X2ZpbmFsaXplID0gMDsKICAgICB9CiAgIGVsc2UgaWYgKGZsYWdf Y29hcnJheSA9PSBHRkNfRkNPQVJSQVlfTElCCiAJICAgJiYgbGhzX2NhZl9hdHRyLmNvZGltZW5z aW9uICYmIHJoc19jYWZfYXR0ci5jb2RpbWVuc2lvbgpAQCAtMTE5MDAsNiArMTIxNjEsMjcgQEAg Z2ZjX3RyYW5zX2Fzc2lnbm1lbnRfMSAoZ2ZjX2V4cHIgKiBleHByMSwgZ2ZjX2V4cHIgKiBleHBy MiwgYm9vbCBpbml0X2ZsYWcsCiAJfQogICAgIH0KIAorICAvKiBDb21wbHkgd2l0aCBGMjAxOCAo Ny41LjYuMykuIE1ha2Ugc3VyZSB0aGF0IGFueSBmaW5hbGl6YXRpb24gY29kZSBpcyBhZGRlZAor ICAgICBhZnRlciBldmFsdWF0aW9uIG9mIHRoZSByaHMgYW5kIGJlZm9yZSByZWFsbG9jYXRpb24u ICAqLworICBmaW5hbF9leHByID0gZ2ZjX2Fzc2lnbm1lbnRfZmluYWxpemVyX2NhbGwgKCZsc2Us IGV4cHIxLCBpbml0X2ZsYWcpOworICBpZiAoZmluYWxfZXhwciAmJiAhKGV4cHIyLT5leHByX3R5 cGUgPT0gRVhQUl9WQVJJQUJMRQorCQkgICAgICAmJiBleHByMi0+c3ltdHJlZS0+bi5zeW0tPmF0 dHIuYXJ0aWZpY2lhbCkpCisgICAgeworICAgICAgaWYgKGxzcyA9PSBnZmNfc3NfdGVybWluYXRv cikKKwl7CisJICBnZmNfYWRkX2Jsb2NrX3RvX2Jsb2NrICgmYmxvY2ssICZyc2UucHJlKTsKKwkg IGdmY19hZGRfYmxvY2tfdG9fYmxvY2sgKCZibG9jaywgJmxzZS5maW5hbGJsb2NrKTsKKwl9Cisg ICAgICBlbHNlCisJeworCSAgZ2ZjX2FkZF9ibG9ja190b19ibG9jayAoJmJvZHksICZyc2UucHJl KTsKKwkgIGdmY19hZGRfYmxvY2tfdG9fYmxvY2sgKCZsb29wLmNvZGVbZXhwcjEtPnJhbmsgLSAx XSwKKwkJCQkgICZsc2UuZmluYWxibG9jayk7CisJfQorICAgIH0KKyAgZWxzZQorICAgIGdmY19h ZGRfYmxvY2tfdG9fYmxvY2sgKCZib2R5LCAmcnNlLnByZSk7CisKICAgLyogSWYgbm90aGluZyBl bHNlIHdvcmtzLCBkbyBpdCB0aGUgb2xkIGZhc2hpb25lZCB3YXkhICAqLwogICBpZiAodG1wID09 IE5VTExfVFJFRSkKICAgICB0bXAgPSBnZmNfdHJhbnNfc2NhbGFyX2Fzc2lnbiAoJmxzZSwgJnJz ZSwgZXhwcjEtPnRzLApAQCAtMTE5MDksMTIgKzEyMTkxLDIwIEBAIGdmY190cmFuc19hc3NpZ25t ZW50XzEgKGdmY19leHByICogZXhwcjEsIGdmY19leHByICogZXhwcjIsIGJvb2wgaW5pdF9mbGFn LAogCQkJCSAgICEobF9pc190ZW1wIHx8IGluaXRfZmxhZykgJiYgZGVhbGxvYywKIAkJCQkgICBl eHByMS0+c3ltdHJlZS0+bi5zeW0tPmF0dHIuY29kaW1lbnNpb24pOwogCi0gIC8qIEFkZCB0aGUg cHJlIGJsb2NrcyB0byB0aGUgYm9keS4gICovCi0gIGdmY19hZGRfYmxvY2tfdG9fYmxvY2sgKCZi b2R5LCAmcnNlLnByZSk7CisKKyAgLyogQWRkIHRoZSBsc2UgcHJlIGJsb2NrIHRvIHRoZSBib2R5 ICAqLwogICBnZmNfYWRkX2Jsb2NrX3RvX2Jsb2NrICgmYm9keSwgJmxzZS5wcmUpOwogICBnZmNf YWRkX2V4cHJfdG9fYmxvY2sgKCZib2R5LCB0bXApOworCiAgIC8qIEFkZCB0aGUgcG9zdCBibG9j a3MgdG8gdGhlIGJvZHkuICAqLwotICBnZmNfYWRkX2Jsb2NrX3RvX2Jsb2NrICgmYm9keSwgJnJz ZS5wb3N0KTsKKyAgaWYgKCFsX2lzX3RlbXApCisgICAgeworICAgICAgZ2ZjX2FkZF9ibG9ja190 b19ibG9jayAoJnJzZS5maW5hbGJsb2NrLCAmcnNlLnBvc3QpOworICAgICAgZ2ZjX2FkZF9ibG9j a190b19ibG9jayAoJmJvZHksICZyc2UuZmluYWxibG9jayk7CisgICAgfQorICBlbHNlCisgICAg Z2ZjX2FkZF9ibG9ja190b19ibG9jayAoJmJvZHksICZyc2UucG9zdCk7CisKICAgZ2ZjX2FkZF9i bG9ja190b19ibG9jayAoJmJvZHksICZsc2UucG9zdCk7CiAKICAgaWYgKGxzcyA9PSBnZmNfc3Nf dGVybWluYXRvcikKQEAgLTExOTM4LDYgKzEyMjI4LDcgQEAgZ2ZjX3RyYW5zX2Fzc2lnbm1lbnRf MSAoZ2ZjX2V4cHIgKiBleHByMSwgZ2ZjX2V4cHIgKiBleHByMiwgYm9vbCBpbml0X2ZsYWcsCiAJ ICBnZmNfdHJhbnNfc2NhbGFyaXplZF9sb29wX2JvdW5kYXJ5ICgmbG9vcCwgJmJvZHkpOwogCiAJ ICAvKiBXZSBuZWVkIHRvIGNvcHkgdGhlIHRlbXBvcmFyeSB0byB0aGUgYWN0dWFsIGxocy4gICov CisvLwkgIGdmY19hZGRfYmxvY2tfdG9fYmxvY2sgKCZsb29wLnBvc3QsICZyc2UuZmluYWxibG9j ayk7CiAJICBnZmNfaW5pdF9zZSAoJmxzZSwgTlVMTCk7CiAJICBnZmNfaW5pdF9zZSAoJnJzZSwg TlVMTCk7CiAJICBnZmNfY29weV9sb29waW5mb190b19zZSAoJmxzZSwgJmxvb3ApOwpkaWZmIC0t Z2l0IGEvZ2NjL2ZvcnRyYW4vdHJhbnMtaW8uY2MgYi9nY2MvZm9ydHJhbi90cmFucy1pby5jYwpp bmRleCA3MzIyMjFmODQ4Yi4uYmY0ZjA2NzE1ODUgMTAwNjQ0Ci0tLSBhL2djYy9mb3J0cmFuL3Ry YW5zLWlvLmNjCisrKyBiL2djYy9mb3J0cmFuL3RyYW5zLWlvLmNjCkBAIC0yNjY0LDYgKzI2NjQs NyBAQCBzY2FsYXJpemU6CiAKICAgZ2ZjX2FkZF9ibG9ja190b19ibG9jayAoJmJvZHksICZzZS5w cmUpOwogICBnZmNfYWRkX2Jsb2NrX3RvX2Jsb2NrICgmYm9keSwgJnNlLnBvc3QpOworICBnZmNf YWRkX2Jsb2NrX3RvX2Jsb2NrICgmYm9keSwgJnNlLmZpbmFsYmxvY2spOwogCiAgIGlmIChzZS5z cyA9PSBOVUxMKQogICAgIHRtcCA9IGdmY19maW5pc2hfYmxvY2sgKCZib2R5KTsKZGlmZiAtLWdp dCBhL2djYy9mb3J0cmFuL3RyYW5zLXN0bXQuY2MgYi9nY2MvZm9ydHJhbi90cmFucy1zdG10LmNj CmluZGV4IDA0ZjgxNDdkMjNiLi5lMGY1MTNmODk0MSAxMDA2NDQKLS0tIGEvZ2NjL2ZvcnRyYW4v dHJhbnMtc3RtdC5jYworKysgYi9nY2MvZm9ydHJhbi90cmFucy1zdG10LmNjCkBAIC00NDMsNyAr NDQzLDggQEAgZ2ZjX3RyYW5zX2NhbGwgKGdmY19jb2RlICogY29kZSwgYm9vbCBkZXBlbmRlbmN5 X2NoZWNrLAogICAgICAgZWxzZQogCWdmY19hZGRfZXhwcl90b19ibG9jayAoJnNlLnByZSwgc2Uu ZXhwcik7CiAKLSAgICAgIGdmY19hZGRfYmxvY2tfdG9fYmxvY2sgKCZzZS5wcmUsICZzZS5wb3N0 KTsKKyAgICAgIGdmY19hZGRfYmxvY2tfdG9fYmxvY2sgKCZzZS5maW5hbGJsb2NrLCAmc2UucG9z dCk7CisgICAgICBnZmNfYWRkX2Jsb2NrX3RvX2Jsb2NrICgmc2UucHJlLCAmc2UuZmluYWxibG9j ayk7CiAgICAgfQogCiAgIGVsc2UKQEAgLTU0Miw2ICs1NDMsNyBAQCBnZmNfdHJhbnNfY2FsbCAo Z2ZjX2NvZGUgKiBjb2RlLCBib29sIGRlcGVuZGVuY3lfY2hlY2ssCiAgICAgICBnZmNfdHJhbnNf c2NhbGFyaXppbmdfbG9vcHMgKCZsb29wLCAmYm9keSk7CiAgICAgICBnZmNfYWRkX2Jsb2NrX3Rv X2Jsb2NrICgmc2UucHJlLCAmbG9vcC5wcmUpOwogICAgICAgZ2ZjX2FkZF9ibG9ja190b19ibG9j ayAoJnNlLnByZSwgJmxvb3AucG9zdCk7CisgICAgICBnZmNfYWRkX2Jsb2NrX3RvX2Jsb2NrICgm c2UucHJlLCAmbG9vcHNlLmZpbmFsYmxvY2spOwogICAgICAgZ2ZjX2FkZF9ibG9ja190b19ibG9j ayAoJnNlLnByZSwgJnNlLnBvc3QpOwogICAgICAgZ2ZjX2NsZWFudXBfbG9vcCAoJmxvb3ApOwog ICAgIH0KQEAgLTYzMzcsNyArNjMzOSwxMCBAQCBnZmNfdHJhbnNfYWxsb2NhdGUgKGdmY19jb2Rl ICogY29kZSkKIAl9CiAgICAgICBnZmNfYWRkX2Jsb2NrX3RvX2Jsb2NrICgmYmxvY2ssICZzZS5w cmUpOwogICAgICAgaWYgKGNvZGUtPmV4cHIzLT5tdXN0X2ZpbmFsaXplKQotCWdmY19hZGRfYmxv Y2tfdG9fYmxvY2sgKCZmaW5hbF9ibG9jaywgJnNlLnBvc3QpOworCXsKKwkgIGdmY19hZGRfYmxv Y2tfdG9fYmxvY2sgKCZmaW5hbF9ibG9jaywgJnNlLmZpbmFsYmxvY2spOworCSAgZ2ZjX2FkZF9i bG9ja190b19ibG9jayAoJmZpbmFsX2Jsb2NrLCAmc2UucG9zdCk7CisJfQogICAgICAgZWxzZQog CWdmY19hZGRfYmxvY2tfdG9fYmxvY2sgKCZwb3N0LCAmc2UucG9zdCk7CiAKZGlmZiAtLWdpdCBh L2djYy9mb3J0cmFuL3RyYW5zLmNjIGIvZ2NjL2ZvcnRyYW4vdHJhbnMuY2MKaW5kZXggMzMzZGZh Njk2NDIuLmZhYmRjZGU3MjY3IDEwMDY0NAotLS0gYS9nY2MvZm9ydHJhbi90cmFucy5jYworKysg Yi9nY2MvZm9ydHJhbi90cmFucy5jYwpAQCAtMTI0Miw2ICsxMjQyLDkgQEAgZ2ZjX2FkZF9maW5h bGl6ZXJfY2FsbCAoc3RtdGJsb2NrX3QgKmJsb2NrLCBnZmNfZXhwciAqZXhwcjIpCiAgIGlmICgh ZXhwcjIgfHwgKGV4cHIyLT50cy50eXBlICE9IEJUX0RFUklWRUQgJiYgZXhwcjItPnRzLnR5cGUg IT0gQlRfQ0xBU1MpKQogICAgIHJldHVybiBmYWxzZTsKIAorICBpZiAoZ2ZjX2V4cHJfYXR0ciAo ZXhwcjIpLmFydGlmaWNpYWwpCisgICAgcmV0dXJuIGZhbHNlOworCiAgIGlmIChleHByMi0+dHMu dHlwZSA9PSBCVF9ERVJJVkVEKQogICAgIHsKICAgICAgIGdmY19pc19maW5hbGl6YWJsZSAoZXhw cjItPnRzLnUuZGVyaXZlZCwgJmZpbmFsX2V4cHIpOwpkaWZmIC0tZ2l0IGEvZ2NjL2ZvcnRyYW4v dHJhbnMuaCBiL2djYy9mb3J0cmFuL3RyYW5zLmgKaW5kZXggNzM4Yzc0ODdhNTYuLjcyYWY1NGM0 ZDI5IDEwMDY0NAotLS0gYS9nY2MvZm9ydHJhbi90cmFucy5oCisrKyBiL2djYy9mb3J0cmFuL3Ry YW5zLmgKQEAgLTQzLDYgKzQzLDEwIEBAIHR5cGVkZWYgc3RydWN0IGdmY19zZQogICBzdG10Ymxv Y2tfdCBwcmU7CiAgIHN0bXRibG9ja190IHBvc3Q7CiAKKyAgLyogQ2FycmllcyBmaW5hbGl6YXRp b24gY29kZSB0aGF0IGlzIHJlcXVpcmVkIHRvIGJlIGV4ZWN1dGVkIGV4ZWN1dGlvbiBvZiB0aGUK KyAgICAgaW5uZXJtb3N0IGV4ZWN1dGFibGUgY29uc3RydWN0LiAgKi8KKyAgc3RtdGJsb2NrX3Qg ZmluYWxibG9jazsKKwogICAvKiB0aGUgcmVzdWx0IG9mIHRoZSBleHByZXNzaW9uICovCiAgIHRy ZWUgZXhwcjsKIApAQCAtNTUsNyArNTksNyBAQCB0eXBlZGVmIHN0cnVjdCBnZmNfc2UKIAogICAv KiBXaGV0aGVyIGV4cHIgaXMgYSByZWZlcmVuY2UgdG8gYW4gdW5saW1pdGVkIHBvbHltb3JwaGlj IG9iamVjdC4gICovCiAgIHVuc2lnbmVkIHVubGltaXRlZF9wb2x5bW9ycGhpYzoxOwotICAKKwog ICAvKiBJZiBzZXQgZ2ZjX2NvbnZfdmFyaWFibGUgd2lsbCByZXR1cm4gYW4gZXhwcmVzc2lvbiBm b3IgdGhlIGFycmF5CiAgICAgIGRlc2NyaXB0b3IuIFdoZW4gc2V0LCB3YW50X3BvaW50ZXIgc2hv dWxkIGFsc28gYmUgc2V0LgogICAgICBJZiBub3Qgc2V0IHNjYWxhcml6aW5nIHZhcmlhYmxlcyB3 aWxsIGJlIHN1YnN0aXR1dGVkLiAgKi8KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2ZvcnRy YW4uZGcvYWxsb2NhdGVfd2l0aF9zb3VyY2VfMjUuZjkwIGIvZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJh bi5kZy9hbGxvY2F0ZV93aXRoX3NvdXJjZV8yNS5mOTAKaW5kZXggOTJkYzUwNzU2ZDQuLmRlMjBh MTQ3ODQyIDEwMDY0NAotLS0gYS9nY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL2FsbG9jYXRlX3dp dGhfc291cmNlXzI1LmY5MAorKysgYi9nY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL2FsbG9jYXRl X3dpdGhfc291cmNlXzI1LmY5MApAQCAtNjgsNCArNjgsNCBAQCBjb250YWlucwogICBlbmQgZnVu Y3Rpb24gZnVuY19mb29fYQogCiBlbmQgcHJvZ3JhbSBzaW1wbGVfbGVhawotISB7IGRnLWZpbmFs IHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgIlw+X2ZpbmFsIiA2ICJvcmlnaW5hbCIgfSB9CishIHsg ZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiXD5fZmluYWwiIDQgIm9yaWdpbmFsIiB9 IH0K --0000000000006add2505d84ebfde--