From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-lf1-x12e.google.com (mail-lf1-x12e.google.com [IPv6:2a00:1450:4864:20::12e]) by sourceware.org (Postfix) with ESMTPS id 883E23857C74; Sun, 11 Apr 2021 07:05:18 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 883E23857C74 Received: by mail-lf1-x12e.google.com with SMTP id 12so16161995lfq.13; Sun, 11 Apr 2021 00:05:18 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=Vjnxq3EtBYv1Prv75gQaou5k9VQ+ZLylF/UV6SiCWiQ=; b=aJmNOUf0R9ZXMe7HCm+aAIBIYA9sRAqHrH7ZqryPkLOCkbIRhNVm1XgRB2JLeUWRSx J4dxqiYi3ow5uANySlgeTBc3OBVqurxOPxeuXVV7HhjdHLH7ivkgWPklC4EIPIM2WRtx tX8UpST/s6WH1sGhKRtjREwojAbQXWc2jO1lijd1efL56+9mF5WsqjEKdSQqoB/uzVt1 yv3YAMMGgkvP/VMQBU6BtkwuvEaW0iAatGl3zG+w311AKjZhHi6ZGwEi+WWw5C0WT0h/ tFrdPfSZlGyoG4yKivYnaZM2CEPwDQ0Dg2IWlrHBxY0Y1uoeGEre1HXGVS7SVRcws2YT BJRQ== X-Gm-Message-State: AOAM533urVo5285s/Xd0rDImOJhL6dhvPzJ3hJFvZtzD6+KFxbH4VxLp A73E1cUFlsG3cIASMKFg+jqgG4u6ToRWnLdgO90nkWqF X-Google-Smtp-Source: ABdhPJw+8PZHMbFHWDeAGKit+DD9QPDJqdFOCeExbwI85Gmeh2TLIBC+OARVT4rByj3zMFOazJmhKmODYDD8iQvJhRA= X-Received: by 2002:a19:c34c:: with SMTP id t73mr14978142lff.81.1618124717170; Sun, 11 Apr 2021 00:05:17 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Paul Richard Thomas Date: Sun, 11 Apr 2021 08:05:05 +0100 Message-ID: Subject: Re: [Patch, fortran] 99307 - FAIL: gfortran.dg/class_assign_4.f90 execution test To: Tobias Burnus Cc: "fortran@gcc.gnu.org" , gcc-patches Content-Type: multipart/mixed; boundary="000000000000f8369805bfad04b8" X-Spam-Status: No, score=-8.3 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, HTML_MESSAGE, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-Content-Filtered-By: Mailman/MimeDel 2.1.29 X-BeenThere: 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: Sun, 11 Apr 2021 07:05:22 -0000 --000000000000f8369805bfad04b8 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Tobias noticed a major technical fault with the resubmission below: I forgot to attach the patch :-( Please find it attached this time. Paul On Tue, 6 Apr 2021 at 18:08, Paul Richard Thomas < paul.richard.thomas@gmail.com> wrote: > Hi Tobias, > > I believe that the attached fixes the problems that you found with > gfc_find_and_cut_at_last_class_ref. > > I will test: > type1%type%array_class2 =E2=86=92 NULL is returned (why?) > class1%type%array_class2 =E2=86=92 ts =3D class1 but array2_class is u= sed later > on (ups!) > class1%...%scalar_class2 =E2=86=92 ts =3D class1 but scalar_class2 is = used > > The ChangeLogs remain the same, apart from the date. > > Regtests OK on FC33/x86_64. > > Paul > > > On Mon, 29 Mar 2021 at 14:58, Tobias Burnus > wrote: > >> Hi all, >> >> as preremark I want to note that the testcase class_assign_4.f90 >> was added for PR83118/PR96012 (fixes problems in handling class objects, >> Dec 18, 2020) >> and got revised for PR99124 (class defined operators, Feb 23, 2021). >> Both patches were then also applied to GCC 9 and 10. >> >> On 26.03.21 17:30, Paul Richard Thomas via Gcc-patches wrote: >> > This patch comes in two versions: submit.diff with Change.Logs or >> > submit2.diff with Change2.Logs. >> > The first fixes the problem by changing array temporaries from class >> > expressions into class temporaries. This permits the use of >> > gfc_get_class_from_expr to obtain the vptr for these temporaries and a= ll >> > the good things that come with that when handling dynamic types. The >> second >> > part of the fix is to use the array element length from the class >> > descriptor, when reallocating on assignment. This is needed because th= e >> > vptr is being set too early. I will set about trying to track down why >> this >> > is happening and fix it after release. >> > >> > The second version does the same as the first but puts in place a load >> of >> > tidying up that is permitted by the fix to class array temporaries. >> >> > I couldn't readily see how to prepare a testcase - ideas? >> > Both regtest on FC33/x86_64. The first was tested by Dominique (see th= e >> > PR). OK for master? >> >> Typo =E2=80=93 underscore-'c' should be a dot-'c' =E2=80=93 both changel= og files >> >> > * trans-expr_c (gfc_trans_scalar_assign): Make use of pre and >> >> I think the second longer version is nicer in general, but at least for >> GCC 9/GCC10 the first version is simpler and, hence, less error prone. >> >> As you only ask about mainline, I would prefer the second one. >> >> However, I am not happy about gfc_find_and_cut_at_last_class_ref: >> >> > + of refs following. If ts is non-null the cut is at the class entity >> > + or component that is followed by an array reference, which is not + >> > an element. */ ... + + if (ts) + { + if (e->symtree + && >> > e->symtree->n.sym->ts.type =3D=3D BT_CLASS) + *ts =3D >> > &e->symtree->n.sym->ts; + else + *ts =3D NULL; + } + for (ref =3D e->r= ef; >> > ref; ref =3D ref->next) { + if (ts && ref->type =3D=3D REF_COMPONENT += && >> > ref->u.c.component->ts.type =3D=3D BT_CLASS + && ref->next && >> > ref->next->type =3D=3D REF_COMPONENT + && strcmp >> > (ref->next->u.c.component->name, "_data") =3D=3D 0 + && ref->next->nex= t + >> > && ref->next->next->type =3D=3D REF_ARRAY + && ref->next->next->u.ar.t= ype >> > !=3D AR_ELEMENT) + { + *ts =3D &ref->u.c.component->ts; + class_ref = =3D ref; >> > + break; + } + + if (ts && *ts =3D=3D NULL) + return NULL; + >> Namely, if there is: >> type1%array_class2 =E2=86=92 array_class2 is used for 'ts' and later = (ok) >> type1%type%array_class2 =E2=86=92 NULL is returned (why?) >> class1%type%array_class2 =E2=86=92 ts =3D class1 but array2_class is = used later >> on (ups!) >> class1%...%scalar_class2 =E2=86=92 ts =3D class1 but scalar_class2 is= used >> etc. >> >> Thus this either needs to be cleaned up (separate 'ref' loop for >> ts !=3D NULL) =E2=80=93 including the wording in the description which t= ells what >> happens if 'ts' is passed as arg but the expr has rank =3D=3D 0 =E2=80= =93 and >> what value is assigned to 'ts'. (You can then also fix 'class.c::' to >> 'class.c: ' in the description above the function.) >> >> Alternatively, you can leave the current code ref handling code in place >> at build_class_array_ref, which might be the simpler alternative. >> >> Otherwise, it looks sensible to me. >> >> Tobias >> >> ----------------- >> Mentor Graphics (Deutschland) GmbH, Arnulfstrasse 201, 80634 M=C3=BCnche= n >> Registergericht M=C3=BCnchen HRB 106955, Gesch=C3=A4ftsf=C3=BChrer: Thom= as Heurung, Frank >> Th=C3=BCrauf >> > > > -- > "If you can't explain it simply, you don't understand it well enough" - > Albert Einstein > --=20 "If you can't explain it simply, you don't understand it well enough" - Albert Einstein --000000000000f8369805bfad04b8 Content-Type: text/x-patch; charset="US-ASCII"; name="submit3.diff" Content-Disposition: attachment; filename="submit3.diff" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kncto2bw0 ZGlmZiAtLWdpdCBhL2djYy9mb3J0cmFuL3RyYW5zLWFycmF5LmMgYi9nY2MvZm9ydHJhbi90cmFu cy1hcnJheS5jCmluZGV4IGJlNWViODkzNTBmLi5jYTkwMTQyNTMwYyAxMDA2NDQKLS0tIGEvZ2Nj L2ZvcnRyYW4vdHJhbnMtYXJyYXkuYworKysgYi9nY2MvZm9ydHJhbi90cmFucy1hcnJheS5jCkBA IC0xNDAzLDkgKzE0MDMsNiBAQCBnZmNfdHJhbnNfY3JlYXRlX3RlbXBfYXJyYXkgKHN0bXRibG9j a190ICogcHJlLCBzdG10YmxvY2tfdCAqIHBvc3QsIGdmY19zcyAqIHNzLAogICBkZXNjID0gZ2Zj X2NyZWF0ZV92YXIgKHR5cGUsICJhdG1wIik7CiAgIEdGQ19ERUNMX1BBQ0tFRF9BUlJBWSAoZGVz YykgPSAxOwogCi0gIGluZm8tPmRlc2NyaXB0b3IgPSBkZXNjOwotICBzaXplID0gZ2ZjX2luZGV4 X29uZV9ub2RlOwotCiAgIC8qIEVtaXQgYSBERUNMX0VYUFIgZm9yIHRoZSB2YXJpYWJsZSBzaXpl ZCBhcnJheSB0eXBlIGluCiAgICAgIEdGQ19UWVBFX0FSUkFZX0RBVEFQVFJfVFlQRSBzbyB0aGUg Z2ltcGxpZmljYXRpb24gb2YgaXRzIHR5cGUKICAgICAgc2l6ZXMgd29ya3MgY29ycmVjdGx5LiAg Ki8KQEAgLTE0MTYsOSArMTQxMyw0MCBAQCBnZmNfdHJhbnNfY3JlYXRlX3RlbXBfYXJyYXkgKHN0 bXRibG9ja190ICogcHJlLCBzdG10YmxvY2tfdCAqIHBvc3QsIGdmY19zcyAqIHNzLAogICBnZmNf YWRkX2V4cHJfdG9fYmxvY2sgKHByZSwgYnVpbGQxIChERUNMX0VYUFIsCiAJCQkJICAgICAgYXJy YXl0eXBlLCBUWVBFX05BTUUgKGFycmF5dHlwZSkpKTsKIAotICAvKiBGaWxsIGluIHRoZSBhcnJh eSBkdHlwZS4gICovCi0gIHRtcCA9IGdmY19jb252X2Rlc2NyaXB0b3JfZHR5cGUgKGRlc2MpOwot ICBnZmNfYWRkX21vZGlmeSAocHJlLCB0bXAsIGdmY19nZXRfZHR5cGUgKFRSRUVfVFlQRSAoZGVz YykpKTsKKyAgaWYgKGNsYXNzX2V4cHIgIT0gTlVMTF9UUkVFKQorICAgIHsKKyAgICAgIHRyZWUg Y2xhc3NfZGF0YTsKKyAgICAgIHRyZWUgZHR5cGU7CisKKyAgICAgIC8qIENyZWF0ZSBhIGNsYXNz IHRlbXBvcmFyeS4gICovCisgICAgICB0bXAgPSBnZmNfY3JlYXRlX3ZhciAoVFJFRV9UWVBFIChj bGFzc19leHByKSwgImN0bXAiKTsKKyAgICAgIGdmY19hZGRfbW9kaWZ5IChwcmUsIHRtcCwgY2xh c3NfZXhwcik7CisKKyAgICAgIC8qIEFzc2lnbiB0aGUgbmV3IGRlc2NyaXB0b3IgdG8gdGhlIF9k YXRhIGZpZWxkLiBUaGlzIGFsbG93cyB0aGUKKwkgdnB0ciBfY29weSB0byBiZSB1c2VkIGZvciBz Y2FsYXJpemVkIGFzc2lnbm1lbnQgc2luY2UgdGhlIGNsYXNzCisJIHRlbXBvcmFyeSBjYW4gYmUg Zm91bmQgZnJvbSB0aGUgZGVzY3JpcHRvci4gICovCisgICAgICBjbGFzc19kYXRhID0gZ2ZjX2Ns YXNzX2RhdGFfZ2V0ICh0bXApOworICAgICAgdG1wID0gZm9sZF9idWlsZDFfbG9jIChpbnB1dF9s b2NhdGlvbiwgVklFV19DT05WRVJUX0VYUFIsCisJCQkgICAgIFRSRUVfVFlQRSAoZGVzYyksIGRl c2MpOworICAgICAgZ2ZjX2FkZF9tb2RpZnkgKHByZSwgY2xhc3NfZGF0YSwgdG1wKTsKKworICAg ICAgLyogVGFrZSB0aGUgZHR5cGUgZnJvbSB0aGUgY2xhc3MgZXhwcmVzc2lvbi4gICovCisgICAg ICBkdHlwZSA9IGdmY19jb252X2Rlc2NyaXB0b3JfZHR5cGUgKGdmY19jbGFzc19kYXRhX2dldCAo Y2xhc3NfZXhwcikpOworICAgICAgdG1wID0gZ2ZjX2NvbnZfZGVzY3JpcHRvcl9kdHlwZSAoY2xh c3NfZGF0YSk7CisgICAgICBnZmNfYWRkX21vZGlmeSAocHJlLCB0bXAsIGR0eXBlKTsKKworICAg ICAgLyogUG9pbnQgZGVzYyB0byB0aGUgY2xhc3MgX2RhdGEgZmllbGQuICAqLworICAgICAgZGVz YyA9IGNsYXNzX2RhdGE7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgLyogRmlsbCBpbiB0 aGUgYXJyYXkgZHR5cGUuICAqLworICAgICAgdG1wID0gZ2ZjX2NvbnZfZGVzY3JpcHRvcl9kdHlw ZSAoZGVzYyk7CisgICAgICBnZmNfYWRkX21vZGlmeSAocHJlLCB0bXAsIGdmY19nZXRfZHR5cGUg KFRSRUVfVFlQRSAoZGVzYykpKTsKKyAgICB9CisKKyAgaW5mby0+ZGVzY3JpcHRvciA9IGRlc2M7 CisgIHNpemUgPSBnZmNfaW5kZXhfb25lX25vZGU7CiAKICAgLyoKICAgICAgRmlsbCBpbiB0aGUg Ym91bmRzIGFuZCBzdHJpZGUuICBUaGlzIGlzIGEgcGFja2VkIGFycmF5LCBzbzoKQEAgLTM0MjQs MTM0ICszNDUyLDczIEBAIGNvbnZfYXJyYXlfaW5kZXhfb2Zmc2V0IChnZmNfc2UgKiBzZSwgZ2Zj X3NzICogc3MsIGludCBkaW0sIGludCBpLAogc3RhdGljIGJvb2wKIGJ1aWxkX2NsYXNzX2FycmF5 X3JlZiAoZ2ZjX3NlICpzZSwgdHJlZSBiYXNlLCB0cmVlIGluZGV4KQogewotICB0cmVlIHR5cGU7 CiAgIHRyZWUgc2l6ZTsKLSAgdHJlZSBvZmZzZXQ7CiAgIHRyZWUgZGVjbCA9IE5VTExfVFJFRTsK ICAgdHJlZSB0bXA7CiAgIGdmY19leHByICpleHByID0gc2UtPnNzLT5pbmZvLT5leHByOwotICBn ZmNfcmVmICpyZWY7Ci0gIGdmY19yZWYgKmNsYXNzX3JlZiA9IE5VTEw7CisgIGdmY19leHByICpj bGFzc19leHByOwogICBnZmNfdHlwZXNwZWMgKnRzOworICBnZmNfc3ltYm9sICpzeW07CiAKLSAg aWYgKHNlLT5leHByICYmIERFQ0xfUCAoc2UtPmV4cHIpICYmIERFQ0xfTEFOR19TUEVDSUZJQyAo c2UtPmV4cHIpCi0gICAgICAmJiBHRkNfREVDTF9TQVZFRF9ERVNDUklQVE9SIChzZS0+ZXhwcikK LSAgICAgICYmIEdGQ19DTEFTU19UWVBFX1AgKFRSRUVfVFlQRSAoR0ZDX0RFQ0xfU0FWRURfREVT Q1JJUFRPUiAoc2UtPmV4cHIpKSkpCi0gICAgZGVjbCA9IHNlLT5leHByOworICB0bXAgPSAhVkFS X1AgKGJhc2UpID8gZ2ZjX2dldF9jbGFzc19mcm9tX2V4cHIgKGJhc2UpIDogTlVMTF9UUkVFOwor CisgIGlmICh0bXAgIT0gTlVMTF9UUkVFKQorICAgIGRlY2wgPSB0bXA7CiAgIGVsc2UKICAgICB7 Ci0gICAgICBpZiAoZXhwciA9PSBOVUxMCisgICAgICAvKiBUaGUgYmFzZSBleHByZXNzaW9uIGRv ZXMgbm90IGNvbnRhaW4gYSBjbGFzcyBjb21wb25lbnQsIGVpdGhlcgorCSBiZWNhdXNlIGl0IGlz IGEgdGVtcG9yYXJ5IGFycmF5IG9yIGFycmF5IGRlc2NyaXB0b3IuICBDbGFzcworCSBhcnJheSBm dW5jdGlvbnMgYXJlIGNvcnJlY3RseSByZXNvbHZlZCBhYm92ZS4gICovCisgICAgICBpZiAoIWV4 cHIKIAkgIHx8IChleHByLT50cy50eXBlICE9IEJUX0NMQVNTCi0JICAgICAgJiYgIWdmY19pc19j bGFzc19hcnJheV9mdW5jdGlvbiAoZXhwcikKIAkgICAgICAmJiAhZ2ZjX2lzX2NsYXNzX2FycmF5 X3JlZiAoZXhwciwgTlVMTCkpKQogCXJldHVybiBmYWxzZTsKIAotICAgICAgaWYgKGV4cHItPnN5 bXRyZWUgJiYgZXhwci0+c3ltdHJlZS0+bi5zeW0tPnRzLnR5cGUgPT0gQlRfQ0xBU1MpCi0JdHMg PSAmZXhwci0+c3ltdHJlZS0+bi5zeW0tPnRzOwotICAgICAgZWxzZQotCXRzID0gTlVMTDsKLQot ICAgICAgZm9yIChyZWYgPSBleHByLT5yZWY7IHJlZjsgcmVmID0gcmVmLT5uZXh0KQotCXsKLQkg IGlmIChyZWYtPnR5cGUgPT0gUkVGX0NPTVBPTkVOVAotCSAgICAgICYmIHJlZi0+dS5jLmNvbXBv bmVudC0+dHMudHlwZSA9PSBCVF9DTEFTUwotCSAgICAgICYmIHJlZi0+bmV4dCAmJiByZWYtPm5l eHQtPnR5cGUgPT0gUkVGX0NPTVBPTkVOVAotCSAgICAgICYmIHN0cmNtcCAocmVmLT5uZXh0LT51 LmMuY29tcG9uZW50LT5uYW1lLCAiX2RhdGEiKSA9PSAwCi0JICAgICAgJiYgcmVmLT5uZXh0LT5u ZXh0Ci0JICAgICAgJiYgcmVmLT5uZXh0LT5uZXh0LT50eXBlID09IFJFRl9BUlJBWQotCSAgICAg ICYmIHJlZi0+bmV4dC0+bmV4dC0+dS5hci50eXBlICE9IEFSX0VMRU1FTlQpCi0JICAgIHsKLQkg ICAgICB0cyA9ICZyZWYtPnUuYy5jb21wb25lbnQtPnRzOwotCSAgICAgIGNsYXNzX3JlZiA9IHJl ZjsKLQkgICAgICBicmVhazsKLQkgICAgfQotCX0KKyAgICAgIC8qIE9idGFpbiB0aGUgZXhwcmVz c2lvbiBmb3IgdGhlIGNsYXNzIGVudGl0eSBvciBjb21wb25lbnQgdGhhdCBpcworCSBmb2xsb3dl ZCBieSBhbiBhcnJheSByZWZlcmVuY2UsIHdoaWNoIGlzIG5vdCBhbiBlbGVtZW50LCBzbyB0aGF0 CisJIHRoZSBzcGFuIG9mIHRoZSBhcnJheSBjYW4gYmUgb2J0YWluZWQuICAqLworICAgICAgY2xh c3NfZXhwciA9IGdmY19maW5kX2FuZF9jdXRfYXRfbGFzdF9jbGFzc19yZWYgKGV4cHIsIGZhbHNl LCAmdHMpOwogCi0gICAgICBpZiAodHMgPT0gTlVMTCkKKyAgICAgIGlmICghdHMpCiAJcmV0dXJu IGZhbHNlOwotICAgIH0KIAotICBpZiAoY2xhc3NfcmVmID09IE5VTEwgJiYgZXhwciAmJiBleHBy LT5zeW10cmVlLT5uLnN5bS0+YXR0ci5mdW5jdGlvbgotICAgICAgJiYgZXhwci0+c3ltdHJlZS0+ bi5zeW0gPT0gZXhwci0+c3ltdHJlZS0+bi5zeW0tPnJlc3VsdAotICAgICAgJiYgZXhwci0+c3lt dHJlZS0+bi5zeW0tPmJhY2tlbmRfZGVjbCA9PSBjdXJyZW50X2Z1bmN0aW9uX2RlY2wpCi0gICAg ewotICAgICAgZGVjbCA9IGdmY19nZXRfZmFrZV9yZXN1bHRfZGVjbCAoZXhwci0+c3ltdHJlZS0+ bi5zeW0sIDApOwotICAgIH0KLSAgZWxzZSBpZiAoZXhwciAmJiBnZmNfaXNfY2xhc3NfYXJyYXlf ZnVuY3Rpb24gKGV4cHIpKQotICAgIHsKLSAgICAgIHNpemUgPSBOVUxMX1RSRUU7Ci0gICAgICBk ZWNsID0gTlVMTF9UUkVFOwotICAgICAgZm9yICh0bXAgPSBiYXNlOyB0bXA7IHRtcCA9IFRSRUVf T1BFUkFORCAodG1wLCAwKSkKLQl7Ci0JICB0cmVlIHR5cGU7Ci0JICB0eXBlID0gVFJFRV9UWVBF ICh0bXApOwotCSAgd2hpbGUgKHR5cGUpCi0JICAgIHsKLQkgICAgICBpZiAoR0ZDX0NMQVNTX1RZ UEVfUCAodHlwZSkpCi0JCWRlY2wgPSB0bXA7Ci0JICAgICAgaWYgKHR5cGUgIT0gVFlQRV9DQU5P TklDQUwgKHR5cGUpKQotCQl0eXBlID0gVFlQRV9DQU5PTklDQUwgKHR5cGUpOwotCSAgICAgIGVs c2UKLQkJdHlwZSA9IE5VTExfVFJFRTsKLQkgICAgfQotCSAgaWYgKFZBUl9QICh0bXApKQotCSAg ICBicmVhazsKKyAgICAgIHN5bSA9ICghY2xhc3NfZXhwciAmJiBleHByKSA/IGV4cHItPnN5bXRy ZWUtPm4uc3ltIDogTlVMTDsKKyAgICAgIGlmIChzeW0gJiYgc3ltLT5hdHRyLmZ1bmN0aW9uCisJ ICAmJiBzeW0gPT0gc3ltLT5yZXN1bHQKKwkgICYmIHN5bS0+YmFja2VuZF9kZWNsID09IGN1cnJl bnRfZnVuY3Rpb25fZGVjbCkKKwkvKiBUaGUgdGVtcG9yYXJ5IGlzIHRoZSBkYXRhIGZpZWxkIG9m IHRoZSBjbGFzcyBkYXRhIGNvbXBvbmVudAorCSAgIG9mIHRoZSBjdXJyZW50IGZ1bmN0aW9uLiAg Ki8KKwlkZWNsID0gZ2ZjX2dldF9mYWtlX3Jlc3VsdF9kZWNsIChzeW0sIDApOworICAgICAgZWxz ZSBpZiAoc3ltKQorCXsKKwkgIGlmIChkZWNsID09IE5VTExfVFJFRSkKKwkgICAgZGVjbCA9IGV4 cHItPnN5bXRyZWUtPm4uc3ltLT5iYWNrZW5kX2RlY2w7CisJICAvKiBGb3IgY2xhc3MgYXJyYXlz IHRoZSB0cmVlIGNvbnRhaW5pbmcgdGhlIGNsYXNzIGlzIHN0b3JlZCBpbgorCSAgICAgR0ZDX0RF Q0xfU0FWRURfREVTQ1JJUFRPUiBvZiB0aGUgc3ltJ3MgYmFja2VuZF9kZWNsLgorCSAgICAgRm9y IGFsbCBvdGhlcnMgaXQncyBzeW0ncyBiYWNrZW5kX2RlY2wgZGlyZWN0bHkuICAqLworCSAgaWYg KERFQ0xfTEFOR19TUEVDSUZJQyAoZGVjbCkgJiYgR0ZDX0RFQ0xfU0FWRURfREVTQ1JJUFRPUiAo ZGVjbCkpCisJICAgIGRlY2wgPSBHRkNfREVDTF9TQVZFRF9ERVNDUklQVE9SIChkZWNsKTsKIAl9 CisgICAgICBlbHNlCisJZGVjbCA9IGdmY19nZXRfY2xhc3NfZnJvbV9nZmNfZXhwciAoY2xhc3Nf ZXhwcik7CiAKLSAgICAgIGlmIChkZWNsID09IE5VTExfVFJFRSkKLQlyZXR1cm4gZmFsc2U7Cisg ICAgICBpZiAoUE9JTlRFUl9UWVBFX1AgKFRSRUVfVFlQRSAoZGVjbCkpKQorCWRlY2wgPSBidWls ZF9mb2xkX2luZGlyZWN0X3JlZl9sb2MgKGlucHV0X2xvY2F0aW9uLCBkZWNsKTsKIAotICAgICAg c2UtPmNsYXNzX3ZwdHIgPSBnZmNfZXZhbHVhdGVfbm93IChnZmNfY2xhc3NfdnB0cl9nZXQgKGRl Y2wpLCAmc2UtPnByZSk7Ci0gICAgfQotICBlbHNlIGlmIChjbGFzc19yZWYgPT0gTlVMTCkKLSAg ICB7Ci0gICAgICBpZiAoZGVjbCA9PSBOVUxMX1RSRUUpCi0JZGVjbCA9IGV4cHItPnN5bXRyZWUt Pm4uc3ltLT5iYWNrZW5kX2RlY2w7Ci0gICAgICAvKiBGb3IgY2xhc3MgYXJyYXlzIHRoZSB0cmVl IGNvbnRhaW5pbmcgdGhlIGNsYXNzIGlzIHN0b3JlZCBpbgotCSBHRkNfREVDTF9TQVZFRF9ERVND UklQVE9SIG9mIHRoZSBzeW0ncyBiYWNrZW5kX2RlY2wuCi0JIEZvciBhbGwgb3RoZXJzIGl0J3Mg c3ltJ3MgYmFja2VuZF9kZWNsIGRpcmVjdGx5LiAgKi8KLSAgICAgIGlmIChERUNMX0xBTkdfU1BF Q0lGSUMgKGRlY2wpICYmIEdGQ19ERUNMX1NBVkVEX0RFU0NSSVBUT1IgKGRlY2wpKQotCWRlY2wg PSBHRkNfREVDTF9TQVZFRF9ERVNDUklQVE9SIChkZWNsKTsKLSAgICB9Ci0gIGVsc2UKLSAgICB7 Ci0gICAgICAvKiBSZW1vdmUgZXZlcnl0aGluZyBhZnRlciB0aGUgbGFzdCBjbGFzcyByZWZlcmVu Y2UsIGNvbnZlcnQgdGhlCi0JIGV4cHJlc3Npb24gYW5kIHRoZW4gcmVjb3ZlciBpdHMgdGFpbGVu ZCBvbmNlIG1vcmUuICAqLwotICAgICAgZ2ZjX3NlIHRtcHNlOwotICAgICAgcmVmID0gY2xhc3Nf cmVmLT5uZXh0OwotICAgICAgY2xhc3NfcmVmLT5uZXh0ID0gTlVMTDsKLSAgICAgIGdmY19pbml0 X3NlICgmdG1wc2UsIE5VTEwpOwotICAgICAgZ2ZjX2NvbnZfZXhwciAoJnRtcHNlLCBleHByKTsK LSAgICAgIGdmY19hZGRfYmxvY2tfdG9fYmxvY2sgKCZzZS0+cHJlLCAmdG1wc2UucHJlKTsKLSAg ICAgIGRlY2wgPSB0bXBzZS5leHByOwotICAgICAgY2xhc3NfcmVmLT5uZXh0ID0gcmVmOworICAg ICAgaWYgKCFHRkNfQ0xBU1NfVFlQRV9QIChUUkVFX1RZUEUgKGRlY2wpKSkKKwlyZXR1cm4gZmFs c2U7CiAgICAgfQogCi0gIGlmIChQT0lOVEVSX1RZUEVfUCAoVFJFRV9UWVBFIChkZWNsKSkpCi0g ICAgZGVjbCA9IGJ1aWxkX2ZvbGRfaW5kaXJlY3RfcmVmX2xvYyAoaW5wdXRfbG9jYXRpb24sIGRl Y2wpOwotCi0gIGlmICghR0ZDX0NMQVNTX1RZUEVfUCAoVFJFRV9UWVBFIChkZWNsKSkpCi0gICAg cmV0dXJuIGZhbHNlOworICBzZS0+Y2xhc3NfdnB0ciA9IGdmY19ldmFsdWF0ZV9ub3cgKGdmY19j bGFzc192cHRyX2dldCAoZGVjbCksICZzZS0+cHJlKTsKIAogICBzaXplID0gZ2ZjX2NsYXNzX3Z0 YWJfc2l6ZV9nZXQgKGRlY2wpOwotCiAgIC8qIEZvciB1bmxpbWl0ZWQgcG9seW1vcnBoaWMgZW50 aXRpZXMgdGhlbiBfbGVuIGNvbXBvbmVudCBuZWVkcyB0byBiZQogICAgICBtdWx0aXBsaWVkIHdp dGggdGhlIHNpemUuICAqLwogICBzaXplID0gZ2ZjX3Jlc2l6ZV9jbGFzc19zaXplX3dpdGhfbGVu ICgmc2UtPnByZSwgZGVjbCwgc2l6ZSk7Ci0KICAgc2l6ZSA9IGZvbGRfY29udmVydCAoVFJFRV9U WVBFIChpbmRleCksIHNpemUpOwogCi0gIC8qIEJ1aWxkIHRoZSBhZGRyZXNzIG9mIHRoZSBlbGVt ZW50LiAgKi8KLSAgdHlwZSA9IFRSRUVfVFlQRSAoVFJFRV9UWVBFIChiYXNlKSk7Ci0gIG9mZnNl dCA9IGZvbGRfYnVpbGQyX2xvYyAoaW5wdXRfbG9jYXRpb24sIE1VTFRfRVhQUiwKLQkJCSAgICBn ZmNfYXJyYXlfaW5kZXhfdHlwZSwKLQkJCSAgICBpbmRleCwgc2l6ZSk7Ci0gIHRtcCA9IGdmY19i dWlsZF9hZGRyX2V4cHIgKHB2b2lkX3R5cGVfbm9kZSwgYmFzZSk7Ci0gIHRtcCA9IGZvbGRfYnVp bGRfcG9pbnRlcl9wbHVzX2xvYyAoaW5wdXRfbG9jYXRpb24sIHRtcCwgb2Zmc2V0KTsKLSAgdG1w ID0gZm9sZF9jb252ZXJ0IChidWlsZF9wb2ludGVyX3R5cGUgKHR5cGUpLCB0bXApOwotCiAgIC8q IFJldHVybiB0aGUgZWxlbWVudCBpbiB0aGUgc2UgZXhwcmVzc2lvbi4gICovCi0gIHNlLT5leHBy ID0gYnVpbGRfZm9sZF9pbmRpcmVjdF9yZWZfbG9jIChpbnB1dF9sb2NhdGlvbiwgdG1wKTsKKyAg c2UtPmV4cHIgPSBnZmNfYnVpbGRfc3Bhbm5lZF9hcnJheV9yZWYgKGJhc2UsIGluZGV4LCBzaXpl KTsKICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTEwMjgwLDIzICsxMDI0NywxMCBAQCBnZmNfYWxs b2NfYWxsb2NhdGFibGVfZm9yX2Fzc2lnbm1lbnQgKGdmY19sb29waW5mbyAqbG9vcCwKICAgICB9 CiAgIGVsc2UgaWYgKGV4cHIxLT50cy50eXBlID09IEJUX0NMQVNTKQogICAgIHsKLSAgICAgIHRt cCA9IGV4cHIxLT5yYW5rID8gZ2ZjX2dldF9jbGFzc19mcm9tX2V4cHIgKGRlc2MpIDogTlVMTF9U UkVFOwotICAgICAgaWYgKHRtcCA9PSBOVUxMX1RSRUUpCi0JdG1wID0gZ2ZjX2dldF9jbGFzc19m cm9tX2dmY19leHByIChleHByMSk7Ci0KLSAgICAgIGlmICh0bXAgIT0gTlVMTF9UUkVFKQotCXsK LQkgIHRtcDIgPSBnZmNfY2xhc3NfdnB0cl9nZXQgKHRtcCk7Ci0JICBjb25kID0gZm9sZF9idWls ZDJfbG9jIChpbnB1dF9sb2NhdGlvbiwgTkVfRVhQUiwKLQkJCQkgIGxvZ2ljYWxfdHlwZV9ub2Rl LCB0bXAyLAotCQkJCSAgYnVpbGRfaW50X2NzdCAoVFJFRV9UWVBFICh0bXAyKSwgMCkpOwotCSAg ZWxlbXNpemUxID0gZ2ZjX2NsYXNzX3Z0YWJfc2l6ZV9nZXQgKHRtcCk7Ci0JICBlbGVtc2l6ZTEg PSBmb2xkX2J1aWxkM19sb2MgKGlucHV0X2xvY2F0aW9uLCBDT05EX0VYUFIsCi0JCQkJICAgICAg Z2ZjX2FycmF5X2luZGV4X3R5cGUsIGNvbmQsCi0JCQkJICAgICAgZWxlbXNpemUxLCBnZmNfaW5k ZXhfemVyb19ub2RlKTsKLQl9Ci0gICAgICBlbHNlCi0JZWxlbXNpemUxID0gVFlQRV9TSVpFX1VO SVQgKGdmY190eXBlbm9kZV9mb3Jfc3BlYyAoJkNMQVNTX0RBVEEgKGV4cHIxKS0+dHMpKTsKKyAg ICAgIC8qIFVuZm9ydHVuYXRlbHksIHRoZSBsaHMgdnB0ciBpcyBzZXQgdG9vIGVhcmx5IGluIG1h bnkgY2FzZXMuCisJIFBsYXkgaXQgc2FmZSBieSB1c2luZyB0aGUgZGVzY3JpcHRvciBlbGVtZW50 IGxlbmd0aC4gICovCisgICAgICB0bXAgPSBnZmNfY29udl9kZXNjcmlwdG9yX2VsZW1fbGVuIChk ZXNjKTsKKyAgICAgIGVsZW1zaXplMSA9IGZvbGRfY29udmVydCAoZ2ZjX2FycmF5X2luZGV4X3R5 cGUsIHRtcCk7CiAgICAgfQogICBlbHNlCiAgICAgZWxlbXNpemUxID0gTlVMTF9UUkVFOwpAQCAt MTA3NzAsMTEgKzEwNzI0LDExIEBAIGdmY19hbGxvY19hbGxvY2F0YWJsZV9mb3JfYXNzaWdubWVu dCAoZ2ZjX2xvb3BpbmZvICpsb29wLAogCiAKICAgLyogV2UgYWxyZWFkeSBzZXQgdGhlIGR0eXBl IGluIHRoZSBjYXNlIG9mIGRlZmVycmVkIGNoYXJhY3RlcgotICAgICBsZW5ndGggYXJyYXlzIGFu ZCB1bmxpbWl0ZWQgcG9seW1vcnBoaWMgYXJyYXlzLiAgKi8KKyAgICAgbGVuZ3RoIGFycmF5cyBh bmQgY2xhc3MgbHZhbHVlcy4gICovCiAgIGlmICghKEdGQ19ERVNDUklQVE9SX1RZUEVfUCAoVFJF RV9UWVBFIChkZXNjKSkKIAkmJiAoKGV4cHIxLT50cy50eXBlID09IEJUX0NIQVJBQ1RFUiAmJiBl eHByMS0+dHMuZGVmZXJyZWQpCiAJICAgIHx8IGNvYXJyYXkpKQotICAgICAgJiYgIVVOTElNSVRF RF9QT0xZIChleHByMSkpCisgICAgICAmJiBleHByMS0+dHMudHlwZSAhPSBCVF9DTEFTUykKICAg ICB7CiAgICAgICB0bXAgPSBnZmNfY29udl9kZXNjcmlwdG9yX2R0eXBlIChkZXNjKTsKICAgICAg IGdmY19hZGRfbW9kaWZ5ICgmYWxsb2NfYmxvY2ssIHRtcCwgZ2ZjX2dldF9kdHlwZSAoVFJFRV9U WVBFIChkZXNjKSkpOwpkaWZmIC0tZ2l0IGEvZ2NjL2ZvcnRyYW4vdHJhbnMtZXhwci5jIGIvZ2Nj L2ZvcnRyYW4vdHJhbnMtZXhwci5jCmluZGV4IDJmYTE3YjM2YzAzLi4yMTNmMzJiMGE2NyAxMDA2 NDQKLS0tIGEvZ2NjL2ZvcnRyYW4vdHJhbnMtZXhwci5jCisrKyBiL2djYy9mb3J0cmFuL3RyYW5z LWV4cHIuYwpAQCAtMzgwLDE1ICszODAsMjAgQEAgZ2ZjX3ZwdHJfc2l6ZV9nZXQgKHRyZWUgdnB0 cikKICN1bmRlZiBWVEFCTEVfRklOQUxfRklFTEQKIAogCi0vKiBTZWFyY2ggZm9yIHRoZSBsYXN0 IF9jbGFzcyByZWYgaW4gdGhlIGNoYWluIG9mIHJlZmVyZW5jZXMgb2YgdGhpcwotICAgZXhwcmVz c2lvbiBhbmQgY3V0IHRoZSBjaGFpbiB0aGVyZS4gIEFsYmVpdCB0aGlzIHJvdXRpbmUgaXMgc2lt aWxpYXIKLSAgIHRvIGNsYXNzLmM6OmdmY19hZGRfY29tcG9uZW50X3JlZiAoKSwgaXMgdGhlcmUg YSBzaWduaWZpY2FudAotICAgZGlmZmVyZW5jZTogZ2ZjX2FkZF9jb21wb25lbnRfcmVmICgpIGNv bmNlbnRyYXRlcyBvbiBhbiBhcnJheSByZWYgdG8KLSAgIGJlIHRoZSBsYXN0IHJlZiBpbiB0aGUg Y2hhaW4uICBUaGlzIHJvdXRpbmUgaXMgb2JsaXZpb3VzIHRvIHRoZSBraW5kCi0gICBvZiByZWZz IGZvbGxvd2luZy4gICovCisvKiBJRiB0cyBpcyBudWxsIChkZWZhdWx0KSwgc2VhcmNoIGZvciB0 aGUgbGFzdCBfY2xhc3MgcmVmIGluIHRoZSBjaGFpbgorICAgb2YgcmVmZXJlbmNlcyBvZiB0aGUg ZXhwcmVzc2lvbiBhbmQgY3V0IHRoZSBjaGFpbiB0aGVyZS4gIEFsdGhvdWdoCisgICB0aGlzIHJv dXRpbmUgaXMgc2ltaWxpYXIgdG8gY2xhc3MuYzpnZmNfYWRkX2NvbXBvbmVudF9yZWYgKCksIHRo ZXJlCisgICBpcyBhIHNpZ25pZmljYW50IGRpZmZlcmVuY2U6IGdmY19hZGRfY29tcG9uZW50X3Jl ZiAoKSBjb25jZW50cmF0ZXMKKyAgIG9uIGFuIGFycmF5IHJlZiB0aGF0IGlzIHRoZSBsYXN0IHJl ZiBpbiB0aGUgY2hhaW4gYW5kIGlzIG9ibGl2aW91cworICAgdG8gdGhlIGtpbmQgb2YgcmVmcyBm b2xsb3dpbmcuCisgICBFTFNFIElGIHRzIGlzIG5vbi1udWxsIHRoZSBjdXQgaXMgYXQgdGhlIGNs YXNzIGVudGl0eSBvciBjb21wb25lbnQKKyAgIHRoYXQgaXMgZm9sbG93ZWQgYnkgYW4gYXJyYXkg cmVmZXJlbmNlLCB3aGljaCBpcyBub3QgYW4gZWxlbWVudC4KKyAgIFRoZXNlIGNhbGxzIGNvbWUg ZnJvbSB0cmFucy1hcnJheS5jOmJ1aWxkX2NsYXNzX2FycmF5X3JlZiwgd2hpY2gKKyAgIGhhbmRs ZXMgc2NhbGFyaXplZCBjbGFzcyBhcnJheSByZWZlcmVuY2VzLiovCiAKIGdmY19leHByICoKLWdm Y19maW5kX2FuZF9jdXRfYXRfbGFzdF9jbGFzc19yZWYgKGdmY19leHByICplLCBib29sIGlzX21v bGQpCitnZmNfZmluZF9hbmRfY3V0X2F0X2xhc3RfY2xhc3NfcmVmIChnZmNfZXhwciAqZSwgYm9v bCBpc19tb2xkLAorCQkJCSAgICBnZmNfdHlwZXNwZWMgKip0cykKIHsKICAgZ2ZjX2V4cHIgKmJh c2VfZXhwcjsKICAgZ2ZjX3JlZiAqcmVmLCAqY2xhc3NfcmVmLCAqdGFpbCA9IE5VTEwsICphcnJh eV9yZWY7CkBAIC0zOTYsMjcgKzQwMSw1OSBAQCBnZmNfZmluZF9hbmRfY3V0X2F0X2xhc3RfY2xh c3NfcmVmIChnZmNfZXhwciAqZSwgYm9vbCBpc19tb2xkKQogICAvKiBGaW5kIHRoZSBsYXN0IGNs YXNzIHJlZmVyZW5jZS4gICovCiAgIGNsYXNzX3JlZiA9IE5VTEw7CiAgIGFycmF5X3JlZiA9IE5V TEw7Ci0gIGZvciAocmVmID0gZS0+cmVmOyByZWY7IHJlZiA9IHJlZi0+bmV4dCkKKworICBpZiAo dHMpCiAgICAgewotICAgICAgaWYgKHJlZi0+dHlwZSA9PSBSRUZfQVJSQVkgJiYgcmVmLT51LmFy LnR5cGUgIT0gQVJfRUxFTUVOVCkKLQlhcnJheV9yZWYgPSByZWY7CisgICAgICBpZiAoZS0+c3lt dHJlZQorCSAgJiYgZS0+c3ltdHJlZS0+bi5zeW0tPnRzLnR5cGUgPT0gQlRfQ0xBU1MpCisJKnRz ID0gJmUtPnN5bXRyZWUtPm4uc3ltLT50czsKKyAgICAgIGVsc2UKKwkqdHMgPSBOVUxMOworICAg IH0KIAotICAgICAgaWYgKHJlZi0+dHlwZSA9PSBSRUZfQ09NUE9ORU5UCi0JICAmJiByZWYtPnUu Yy5jb21wb25lbnQtPnRzLnR5cGUgPT0gQlRfQ0xBU1MpCisgIGZvciAocmVmID0gZS0+cmVmOyBy ZWY7IHJlZiA9IHJlZi0+bmV4dCkKKyAgICB7CisgICAgICBpZiAodHMpCiAJewotCSAgLyogQ29t cG9uZW50IHRvIHRoZSByaWdodCBvZiBhIHBhcnQgcmVmZXJlbmNlIHdpdGggbm9uemVybyByYW5r Ci0JICAgICBtdXN0IG5vdCBoYXZlIHRoZSBBTExPQ0FUQUJMRSBhdHRyaWJ1dGUuICBJZiBhdHRl bXB0cyBhcmUKLQkgICAgIG1hZGUgdG8gcmVmZXJlbmNlIHN1Y2ggYSBjb21wb25lbnQgcmVmZXJl bmNlLCBhbiBlcnJvciByZXN1bHRzCi0JICAgICBmb2xsb3dlZCBieSBhbiBJQ0UuICAqLwotCSAg aWYgKGFycmF5X3JlZiAmJiBDTEFTU19EQVRBIChyZWYtPnUuYy5jb21wb25lbnQpLT5hdHRyLmFs bG9jYXRhYmxlKQotCSAgICByZXR1cm4gTlVMTDsKLQkgIGNsYXNzX3JlZiA9IHJlZjsKKwkgIGlm IChyZWYtPnR5cGUgPT0gUkVGX0NPTVBPTkVOVAorCSAgICAgICYmIHJlZi0+dS5jLmNvbXBvbmVu dC0+dHMudHlwZSA9PSBCVF9DTEFTUworCSAgICAgICYmIHJlZi0+bmV4dCAmJiByZWYtPm5leHQt PnR5cGUgPT0gUkVGX0NPTVBPTkVOVAorCSAgICAgICYmICFzdHJjbXAgKHJlZi0+bmV4dC0+dS5j LmNvbXBvbmVudC0+bmFtZSwgIl9kYXRhIikKKwkgICAgICAmJiByZWYtPm5leHQtPm5leHQKKwkg ICAgICAmJiByZWYtPm5leHQtPm5leHQtPnR5cGUgPT0gUkVGX0FSUkFZCisJICAgICAgJiYgcmVm LT5uZXh0LT5uZXh0LT51LmFyLnR5cGUgIT0gQVJfRUxFTUVOVCkKKwkgICAgeworCSAgICAgICp0 cyA9ICZyZWYtPnUuYy5jb21wb25lbnQtPnRzOworCSAgICAgIGNsYXNzX3JlZiA9IHJlZjsKKwkg ICAgICBicmVhazsKKwkgICAgfQorCisJICBpZiAocmVmLT5uZXh0ID09IE5VTEwpCisJICAgIGJy ZWFrOwogCX0KKyAgICAgIGVsc2UKKwl7CisJICBpZiAocmVmLT50eXBlID09IFJFRl9BUlJBWSAm JiByZWYtPnUuYXIudHlwZSAhPSBBUl9FTEVNRU5UKQorCSAgICBhcnJheV9yZWYgPSByZWY7CiAK LSAgICAgIGlmIChyZWYtPm5leHQgPT0gTlVMTCkKLQlicmVhazsKKwkgIGlmIChyZWYtPnR5cGUg PT0gUkVGX0NPTVBPTkVOVAorCSAgICAgICYmIHJlZi0+dS5jLmNvbXBvbmVudC0+dHMudHlwZSA9 PSBCVF9DTEFTUykKKwkgICAgeworCSAgICAgIC8qIENvbXBvbmVudCB0byB0aGUgcmlnaHQgb2Yg YSBwYXJ0IHJlZmVyZW5jZSB3aXRoIG5vbnplcm8KKwkJIHJhbmsgbXVzdCBub3QgaGF2ZSB0aGUg QUxMT0NBVEFCTEUgYXR0cmlidXRlLiAgSWYgYXR0ZW1wdHMKKwkJIGFyZSBtYWRlIHRvIHJlZmVy ZW5jZSBzdWNoIGEgY29tcG9uZW50IHJlZmVyZW5jZSwgYW4gZXJyb3IKKwkJIHJlc3VsdHMgZm9s bG93ZWQgYnkgYW4gSUNFLiAgKi8KKwkgICAgICBpZiAoYXJyYXlfcmVmCisJCSAgJiYgQ0xBU1Nf REFUQSAocmVmLT51LmMuY29tcG9uZW50KS0+YXR0ci5hbGxvY2F0YWJsZSkKKwkJcmV0dXJuIE5V TEw7CisJICAgICAgY2xhc3NfcmVmID0gcmVmOworCSAgICB9CisJfQogICAgIH0KIAorICBpZiAo dHMgJiYgKnRzID09IE5VTEwpCisgICAgcmV0dXJuIE5VTEw7CisKICAgLyogUmVtb3ZlIGFuZCBz dG9yZSBhbGwgc3Vic2VxdWVudCByZWZlcmVuY2VzIGFmdGVyIHRoZQogICAgICBDTEFTUyByZWZl cmVuY2UuICAqLwogICBpZiAoY2xhc3NfcmVmKQpAQCAtMTAwMDUsMTcgKzEwMDQyLDIwIEBAIGdm Y190cmFuc19zY2FsYXJfYXNzaWduIChnZmNfc2UgKiBsc2UsIGdmY19zZSAqIHJzZSwgZ2ZjX3R5 cGVzcGVjIHRzLAogICAgICAgZ2ZjX2FkZF9tb2RpZnkgKCZibG9jaywgbHNlLT5leHByLCB0bXAp OwogICAgIH0KICAgLyogSWYgcG9zc2libGUgdXNlIHRoZSByaHMgdnB0ciBjb3B5IHdpdGggdHJh bnNfc2NhbGFyX2NsYXNzX2Fzc2lnbi4uLi4gICovCi0gIGVsc2UgaWYgKHRzLnR5cGUgPT0gQlRf Q0xBU1MKLQkgICAmJiAhdHJhbnNfc2NhbGFyX2NsYXNzX2Fzc2lnbiAoJmJsb2NrLCBsc2UsIHJz ZSkpCisgIGVsc2UgaWYgKHRzLnR5cGUgPT0gQlRfQ0xBU1MpCiAgICAgewogICAgICAgZ2ZjX2Fk ZF9ibG9ja190b19ibG9jayAoJmJsb2NrLCAmbHNlLT5wcmUpOwogICAgICAgZ2ZjX2FkZF9ibG9j a190b19ibG9jayAoJmJsb2NrLCAmcnNlLT5wcmUpOwotICAgICAgLyogLi4ub3RoZXJ3aXNlIGFz c2lnbm1lbnQgc3VmZmljZXMuIE5vdGUgdGhlIHVzZSBvZiBWSUVXX0NPTlZFUlRfRVhQUgotCSBm b3IgdGhlIGxocyB3aGljaCBlbnN1cmVzIHRoYXQgY2xhc3MgZGF0YSByaHMgY2FzdCBhcyBhIHN0 cmluZyBhc3NpZ25zCi0JIGNvcnJlY3RseS4gICovCi0gICAgICB0bXAgPSBmb2xkX2J1aWxkMV9s b2MgKGlucHV0X2xvY2F0aW9uLCBWSUVXX0NPTlZFUlRfRVhQUiwKLQkJCSAgICAgVFJFRV9UWVBF IChyc2UtPmV4cHIpLCBsc2UtPmV4cHIpOwotICAgICAgZ2ZjX2FkZF9tb2RpZnkgKCZibG9jaywg dG1wLCByc2UtPmV4cHIpOworCisgICAgICBpZiAoIXRyYW5zX3NjYWxhcl9jbGFzc19hc3NpZ24g KCZibG9jaywgbHNlLCByc2UpKQorCXsKKwkgIC8qIC4uLm90aGVyd2lzZSBhc3NpZ25tZW50IHN1 ZmZpY2VzLiBOb3RlIHRoZSB1c2Ugb2YgVklFV19DT05WRVJUX0VYUFIKKwkgIGZvciB0aGUgbGhz IHdoaWNoIGVuc3VyZXMgdGhhdCBjbGFzcyBkYXRhIHJocyBjYXN0IGFzIGEgc3RyaW5nIGFzc2ln bnMKKwkgIGNvcnJlY3RseS4gICovCisJICB0bXAgPSBmb2xkX2J1aWxkMV9sb2MgKGlucHV0X2xv Y2F0aW9uLCBWSUVXX0NPTlZFUlRfRVhQUiwKKwkJCQkgVFJFRV9UWVBFIChyc2UtPmV4cHIpLCBs c2UtPmV4cHIpOworCSAgZ2ZjX2FkZF9tb2RpZnkgKCZibG9jaywgdG1wLCByc2UtPmV4cHIpOwor CX0KICAgICB9CiAgIGVsc2UgaWYgKHRzLnR5cGUgIT0gQlRfQ0xBU1MpCiAgICAgewpkaWZmIC0t Z2l0IGEvZ2NjL2ZvcnRyYW4vdHJhbnMuYyBiL2djYy9mb3J0cmFuL3RyYW5zLmMKaW5kZXggYWI1 M2ZjNWY0NDEuLjllOGU4NjE5ZmY4IDEwMDY0NAotLS0gYS9nY2MvZm9ydHJhbi90cmFucy5jCisr KyBiL2djYy9mb3J0cmFuL3RyYW5zLmMKQEAgLTQyMiw2ICs0MjIsOSBAQCBnZXRfYXJyYXlfc3Bh biAodHJlZSB0eXBlLCB0cmVlIGRlY2wpCiAJCXJldHVybiBOVUxMX1RSRUU7CiAJICAgIH0KIAkg IHNwYW4gPSBnZmNfY2xhc3NfdnRhYl9zaXplX2dldCAoZGVjbCk7CisJICAvKiBGb3IgdW5saW1p dGVkIHBvbHltb3JwaGljIGVudGl0aWVzIHRoZW4gX2xlbiBjb21wb25lbnQgbmVlZHMKKwkgICAg IHRvIGJlIG11bHRpcGxpZWQgd2l0aCB0aGUgc2l6ZS4gICovCisJICBzcGFuID0gZ2ZjX3Jlc2l6 ZV9jbGFzc19zaXplX3dpdGhfbGVuIChOVUxMLCBkZWNsLCBzcGFuKTsKIAl9CiAgICAgICBlbHNl IGlmIChHRkNfREVDTF9QVFJfQVJSQVlfUCAoZGVjbCkpCiAJewpAQCAtNDM5LDEzICs0NDIsMzEg QEAgZ2V0X2FycmF5X3NwYW4gKHRyZWUgdHlwZSwgdHJlZSBkZWNsKQogfQogCiAKK3RyZWUKK2dm Y19idWlsZF9zcGFubmVkX2FycmF5X3JlZiAodHJlZSBiYXNlLCB0cmVlIG9mZnNldCwgdHJlZSBz cGFuKQoreworICB0cmVlIHR5cGU7CisgIHRyZWUgdG1wOworICB0eXBlID0gVFJFRV9UWVBFIChU UkVFX1RZUEUgKGJhc2UpKTsKKyAgb2Zmc2V0ID0gZm9sZF9idWlsZDJfbG9jIChpbnB1dF9sb2Nh dGlvbiwgTVVMVF9FWFBSLAorCQkJICAgIGdmY19hcnJheV9pbmRleF90eXBlLAorCQkJICAgIG9m ZnNldCwgc3Bhbik7CisgIHRtcCA9IGdmY19idWlsZF9hZGRyX2V4cHIgKHB2b2lkX3R5cGVfbm9k ZSwgYmFzZSk7CisgIHRtcCA9IGZvbGRfYnVpbGRfcG9pbnRlcl9wbHVzX2xvYyAoaW5wdXRfbG9j YXRpb24sIHRtcCwgb2Zmc2V0KTsKKyAgdG1wID0gZm9sZF9jb252ZXJ0IChidWlsZF9wb2ludGVy X3R5cGUgKHR5cGUpLCB0bXApOworICBpZiAoKFRSRUVfQ09ERSAodHlwZSkgIT0gSU5URUdFUl9U WVBFICYmIFRSRUVfQ09ERSAodHlwZSkgIT0gQVJSQVlfVFlQRSkKKyAgICAgIHx8ICFUWVBFX1NU UklOR19GTEFHICh0eXBlKSkKKyAgICB0bXAgPSBidWlsZF9mb2xkX2luZGlyZWN0X3JlZl9sb2Mg KGlucHV0X2xvY2F0aW9uLCB0bXApOworICByZXR1cm4gdG1wOworfQorCisKIC8qIEJ1aWxkIGFu IEFSUkFZX1JFRiB3aXRoIGl0cyBuYXR1cmFsIHR5cGUuICAqLwogCiB0cmVlCiBnZmNfYnVpbGRf YXJyYXlfcmVmICh0cmVlIGJhc2UsIHRyZWUgb2Zmc2V0LCB0cmVlIGRlY2wsIHRyZWUgdnB0cikK IHsKICAgdHJlZSB0eXBlID0gVFJFRV9UWVBFIChiYXNlKTsKLSAgdHJlZSB0bXA7CiAgIHRyZWUg c3BhbiA9IE5VTExfVFJFRTsKIAogICBpZiAoR0ZDX0FSUkFZX1RZUEVfUCAodHlwZSkgJiYgR0ZD X1RZUEVfQVJSQVlfUkFOSyAodHlwZSkgPT0gMCkKQEAgLTQ4OCwxOCArNTA5LDcgQEAgZ2ZjX2J1 aWxkX2FycmF5X3JlZiAodHJlZSBiYXNlLCB0cmVlIG9mZnNldCwgdHJlZSBkZWNsLCB0cmVlIHZw dHIpCiAgIC8qIElmIGEgbm9uLW51bGwgc3BhbiBoYXMgYmVlbiBnZW5lcmF0ZWQgcmVmZXJlbmNl IHRoZSBlbGVtZW50IHdpdGgKICAgICAgcG9pbnRlciBhcml0aG1ldGljLiAgKi8KICAgaWYgKHNw YW4gIT0gTlVMTF9UUkVFKQotICAgIHsKLSAgICAgIG9mZnNldCA9IGZvbGRfYnVpbGQyX2xvYyAo aW5wdXRfbG9jYXRpb24sIE1VTFRfRVhQUiwKLQkJCQlnZmNfYXJyYXlfaW5kZXhfdHlwZSwKLQkJ CQlvZmZzZXQsIHNwYW4pOwotICAgICAgdG1wID0gZ2ZjX2J1aWxkX2FkZHJfZXhwciAocHZvaWRf dHlwZV9ub2RlLCBiYXNlKTsKLSAgICAgIHRtcCA9IGZvbGRfYnVpbGRfcG9pbnRlcl9wbHVzX2xv YyAoaW5wdXRfbG9jYXRpb24sIHRtcCwgb2Zmc2V0KTsKLSAgICAgIHRtcCA9IGZvbGRfY29udmVy dCAoYnVpbGRfcG9pbnRlcl90eXBlICh0eXBlKSwgdG1wKTsKLSAgICAgIGlmICgoVFJFRV9DT0RF ICh0eXBlKSAhPSBJTlRFR0VSX1RZUEUgJiYgVFJFRV9DT0RFICh0eXBlKSAhPSBBUlJBWV9UWVBF KQotCSAgfHwgIVRZUEVfU1RSSU5HX0ZMQUcgKHR5cGUpKQotCXRtcCA9IGJ1aWxkX2ZvbGRfaW5k aXJlY3RfcmVmX2xvYyAoaW5wdXRfbG9jYXRpb24sIHRtcCk7Ci0gICAgICByZXR1cm4gdG1wOwot ICAgIH0KKyAgICByZXR1cm4gZ2ZjX2J1aWxkX3NwYW5uZWRfYXJyYXlfcmVmIChiYXNlLCBvZmZz ZXQsIHNwYW4pOwogICAvKiBPdGhlcndpc2UgdXNlIGEgc3RyYWlnaHRmb3J3YXJkIGFycmF5IHJl ZmVyZW5jZS4gICovCiAgIGVsc2UKICAgICByZXR1cm4gYnVpbGQ0X2xvYyAoaW5wdXRfbG9jYXRp b24sIEFSUkFZX1JFRiwgdHlwZSwgYmFzZSwgb2Zmc2V0LApkaWZmIC0tZ2l0IGEvZ2NjL2ZvcnRy YW4vdHJhbnMuaCBiL2djYy9mb3J0cmFuL3RyYW5zLmgKaW5kZXggNDRjYmZiNjNmMzkuLjhjNmY4 MmZmMWIxIDEwMDY0NAotLS0gYS9nY2MvZm9ydHJhbi90cmFucy5oCisrKyBiL2djYy9mb3J0cmFu L3RyYW5zLmgKQEAgLTQyNCw3ICs0MjQsOCBAQCB0cmVlIGdmY19jbGFzc192cHRyX2dldCAodHJl ZSk7CiB0cmVlIGdmY19jbGFzc19sZW5fZ2V0ICh0cmVlKTsKIHRyZWUgZ2ZjX2NsYXNzX2xlbl9v cl96ZXJvX2dldCAodHJlZSk7CiB0cmVlIGdmY19yZXNpemVfY2xhc3Nfc2l6ZV93aXRoX2xlbiAo c3RtdGJsb2NrX3QgKiwgdHJlZSwgdHJlZSk7Ci1nZmNfZXhwciAqIGdmY19maW5kX2FuZF9jdXRf YXRfbGFzdF9jbGFzc19yZWYgKGdmY19leHByICosIGJvb2wgaXNfbW9sZCA9IGZhbHNlKTsKK2dm Y19leHByICogZ2ZjX2ZpbmRfYW5kX2N1dF9hdF9sYXN0X2NsYXNzX3JlZiAoZ2ZjX2V4cHIgKiwg Ym9vbCBpc19tb2xkID0gZmFsc2UsCisJCQkJCSAgICAgICBnZmNfdHlwZXNwZWMgKip0cyA9IE5V TEwpOwogLyogR2V0IGFuIGFjY2Vzc29yIHRvIHRoZSBjbGFzcycgdnRhYidzICogZmllbGQsIHdo ZW4gYSBjbGFzcyBoYW5kbGUgaXMKICAgIGF2YWlsYWJsZS4gICovCiB0cmVlIGdmY19jbGFzc192 dGFiX2hhc2hfZ2V0ICh0cmVlKTsKQEAgLTYyMiw2ICs2MjMsOSBAQCB0cmVlIGdmY19idWlsZF9h ZGRyX2V4cHIgKHRyZWUsIHRyZWUpOwogLyogQnVpbGQgYW4gQVJSQVlfUkVGLiAgKi8KIHRyZWUg Z2ZjX2J1aWxkX2FycmF5X3JlZiAodHJlZSwgdHJlZSwgdHJlZSwgdHJlZSB2cHRyID0gTlVMTF9U UkVFKTsKIAorLyogQnVpbGQgYW4gYXJyYXkgcmVmIHVzaW5nIHBvaW50ZXIgYXJpdGhtZXRpYy4g ICovCit0cmVlIGdmY19idWlsZF9zcGFubmVkX2FycmF5X3JlZiAodHJlZSBiYXNlLCB0cmVlIG9m ZnNldCwgdHJlZSBzcGFuKTsKKwogLyogQ3JlYXRlcyBhIGxhYmVsLiAgRGVjbCBpcyBhcnRpZmlj aWFsIGlmIGxhYmVsX2lkID09IE5VTExfVFJFRS4gICovCiB0cmVlIGdmY19idWlsZF9sYWJlbF9k ZWNsICh0cmVlKTsKIAo= --000000000000f8369805bfad04b8--