From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by sourceware.org (Postfix) with ESMTPS id EE4963858C31 for ; Tue, 30 Apr 2024 08:38:53 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org EE4963858C31 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org EE4963858C31 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1714466336; cv=none; b=QoY4I+ItrCRmHYfDlEj21OVPA1yg1+2rmKk8OukvXm1zeGl9Rrq6YrIYDBSUvJvpIV1JksNj75B9wilsPxRCVOSfQt8jVQIsClPpE8/KnN5pq81o5Tc63bxyKUePQ6U8k1ExpJlW2HFGapj1M+KNcCuyP5uao8kJkIysZ3eybH4= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1714466336; c=relaxed/simple; bh=cITJNWY37DOlJxOjCUUM7dTYfBkfjmzxjO7X5zcd6Y0=; h=DKIM-Signature:MIME-Version:From:Date:Message-ID:Subject:To; b=fAutgWzq8zix4L5nSEgZNP6qgyUOgQsiOndua0gB4ZJEFcmfsMlyiN+einX8o6ewe+YEBN6s3DjL3cuHtcQHih/+Qrsszlkd7llf/WI2NORZodVq1wSIeC+ujllIe3z422CYKPNDe4BLCcwAWB6l1+Z+TRjQ/b68IATrATJyETs= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1714466333; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=s10VdcwOscyKgzKQlFVpJrhJlvyuEVrd/x4/sWppvkc=; b=EJKPt0pL+KKPYgBiazs0U3Ntd7+IfUMW7rDjUIosc9TDnDZzwEVPIe+bwOS5msQ0wDq0RV LhMQxNA9F3CHLUcRr9VO0+T1ffdxJLXsOrDpbN4IBlomKzSyta+QrS/H5jbekBVG69jIOm lR7IvF0OlCzKnx5pI2hOPZqVc2AavFc= Received: from mail-ej1-f72.google.com (mail-ej1-f72.google.com [209.85.218.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-2-xv4AEuAAPI-fFMbPV2OyjA-1; Tue, 30 Apr 2024 04:38:51 -0400 X-MC-Unique: xv4AEuAAPI-fFMbPV2OyjA-1 Received: by mail-ej1-f72.google.com with SMTP id a640c23a62f3a-a52539e4970so348939066b.1 for ; Tue, 30 Apr 2024 01:38:51 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1714466330; x=1715071130; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=s10VdcwOscyKgzKQlFVpJrhJlvyuEVrd/x4/sWppvkc=; b=VBkPvhe3EP+Nd6UEm2Z/zwZ9GyzsiQiONetN210Azwc97RgAE5vVxrbEoRtCgkpGaH 9/VFMoP8Oe8f30HnfESicydQ0Z9H+K673I4OBB2oDzQ3YU1YTv+Yv4iGXXV/cPmbrpJ+ yj1Eoq0jgEwbDTuu+ulsOLQ2erE88/5ypofIW91smh/i6mpI0Wfxo/E5oGrlX+6EVS7G EU/eAyOnZVDgttBalGqOdyufnbSqvxqF2bzCY463lMaxIfjJRRcE22BRilHerExCO2yl kWfd0hktHAmUXdj7AwhOL1OpbpHsaTGDWWiMmIoj89w/qbTsimxG7VBcqM3S5Z10EJ/t 9pPg== X-Gm-Message-State: AOJu0YwyNK6vgsFw5y4jpZhhZL8rEo1UkrqtrxuBOPwk3wyGXLSk/gUx fNlNTcLRr2SZ4bnrtSudZRhtTvCmiB1ucazrg8B37F3rfjSXrYFGwlzIfTRiUIS5t2iOA9qVoj7 dX4YBj2EHeBJ/HZR0B+TS1pQDkAxCv9oWd0H7neqlkB8KRb450zjA4NvlP/pHk8rU0oFkV8/VeY 5+LvpqB92XAHnUZYRaqzpcppWl6ZDraLN5OmRZOw== X-Received: by 2002:aa7:cb54:0:b0:572:32e4:daca with SMTP id w20-20020aa7cb54000000b0057232e4dacamr971778edt.25.1714466330144; Tue, 30 Apr 2024 01:38:50 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHyQb4R/dhlNvD7EDedRahh0l1v5QwDIGIRkk4bFBBTvtTKUZ3A15YzQlD9kwM6KiaQFbB62lE3qDcIGSnM/2Q= X-Received: by 2002:aa7:cb54:0:b0:572:32e4:daca with SMTP id w20-20020aa7cb54000000b0057232e4dacamr971764edt.25.1714466329819; Tue, 30 Apr 2024 01:38:49 -0700 (PDT) MIME-Version: 1.0 References: <20240428190557.1209586-1-aldyh@redhat.com> <20240428190557.1209586-4-aldyh@redhat.com> In-Reply-To: From: Aldy Hernandez Date: Tue, 30 Apr 2024 10:38:38 +0200 Message-ID: Subject: Re: [COMMITTED 03/16] Make some Value_Range's explicitly integer. To: Richard Biener Cc: GCC patches , Andrew MacLeod X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: multipart/mixed; boundary="00000000000091b0af06174c4cdb" X-Spam-Status: No, score=-12.0 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H4,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_NONE,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: --00000000000091b0af06174c4cdb Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Ughhh, you're right. Thanks for spotting this. I'm testing the attached patch and will commit if it passes tests. Aldy On Tue, Apr 30, 2024 at 9:46=E2=80=AFAM Richard Biener wrote: > > On Sun, Apr 28, 2024 at 9:07=E2=80=AFPM Aldy Hernandez = wrote: > > > > Fix some Value_Range's that we know ahead of time will be only > > integers. This avoids using the polymorphic Value_Range unnecessarily > > But isn't Value_Range a variable-size irange but int_range<2> doesn't > support more than two sub-ranges? > > So it doesn't look obvious that this isn't actually a regression? > > Richard. > > > gcc/ChangeLog: > > > > * gimple-ssa-warn-access.cc (check_nul_terminated_array): Make = Value_Range an int_range. > > (memmodel_to_uhwi): Same > > * tree-ssa-loop-niter.cc (refine_value_range_using_guard): Same= . > > (determine_value_range): Same. > > (infer_loop_bounds_from_signedness): Same. > > (scev_var_range_cant_overflow): Same. > > --- > > gcc/gimple-ssa-warn-access.cc | 4 ++-- > > gcc/tree-ssa-loop-niter.cc | 12 ++++++------ > > 2 files changed, 8 insertions(+), 8 deletions(-) > > > > diff --git a/gcc/gimple-ssa-warn-access.cc b/gcc/gimple-ssa-warn-access= .cc > > index dedaae27b31..450c1caa765 100644 > > --- a/gcc/gimple-ssa-warn-access.cc > > +++ b/gcc/gimple-ssa-warn-access.cc > > @@ -330,7 +330,7 @@ check_nul_terminated_array (GimpleOrTree expr, tree= src, tree bound) > > wide_int bndrng[2]; > > if (bound) > > { > > - Value_Range r (TREE_TYPE (bound)); > > + int_range<2> r (TREE_TYPE (bound)); > > > > get_range_query (cfun)->range_of_expr (r, bound); > > > > @@ -2816,7 +2816,7 @@ memmodel_to_uhwi (tree ord, gimple *stmt, unsigne= d HOST_WIDE_INT *cstval) > > { > > /* Use the range query to determine constant values in the absen= ce > > of constant propagation (such as at -O0). */ > > - Value_Range rng (TREE_TYPE (ord)); > > + int_range<2> rng (TREE_TYPE (ord)); > > if (!get_range_query (cfun)->range_of_expr (rng, ord, stmt) > > || !rng.singleton_p (&ord)) > > return false; > > diff --git a/gcc/tree-ssa-loop-niter.cc b/gcc/tree-ssa-loop-niter.cc > > index c6d010f6d89..cbc9dbc5a1f 100644 > > --- a/gcc/tree-ssa-loop-niter.cc > > +++ b/gcc/tree-ssa-loop-niter.cc > > @@ -214,7 +214,7 @@ refine_value_range_using_guard (tree type, tree var= , > > get_type_static_bounds (type, mint, maxt); > > mpz_init (minc1); > > mpz_init (maxc1); > > - Value_Range r (TREE_TYPE (varc1)); > > + int_range<2> r (TREE_TYPE (varc1)); > > /* Setup range information for varc1. */ > > if (integer_zerop (varc1)) > > { > > @@ -368,7 +368,7 @@ determine_value_range (class loop *loop, tree type,= tree var, mpz_t off, > > gphi_iterator gsi; > > > > /* Either for VAR itself... */ > > - Value_Range var_range (TREE_TYPE (var)); > > + int_range<2> var_range (TREE_TYPE (var)); > > get_range_query (cfun)->range_of_expr (var_range, var); > > if (var_range.varying_p () || var_range.undefined_p ()) > > rtype =3D VR_VARYING; > > @@ -382,7 +382,7 @@ determine_value_range (class loop *loop, tree type,= tree var, mpz_t off, > > > > /* Or for PHI results in loop->header where VAR is used as > > PHI argument from the loop preheader edge. */ > > - Value_Range phi_range (TREE_TYPE (var)); > > + int_range<2> phi_range (TREE_TYPE (var)); > > for (gsi =3D gsi_start_phis (loop->header); !gsi_end_p (gsi); gs= i_next (&gsi)) > > { > > gphi *phi =3D gsi.phi (); > > @@ -408,7 +408,7 @@ determine_value_range (class loop *loop, tree type,= tree var, mpz_t off, > > involved. */ > > if (wi::gt_p (minv, maxv, sgn)) > > { > > - Value_Range vr (TREE_TYPE (var)); > > + int_range<2> vr (TREE_TYPE (var)); > > get_range_query (cfun)->range_of_expr (vr, var); > > if (vr.varying_p () || vr.undefined_p ()) > > rtype =3D VR_VARYING; > > @@ -4367,7 +4367,7 @@ infer_loop_bounds_from_signedness (class loop *lo= op, gimple *stmt) > > > > low =3D lower_bound_in_type (type, type); > > high =3D upper_bound_in_type (type, type); > > - Value_Range r (TREE_TYPE (def)); > > + int_range<2> r (TREE_TYPE (def)); > > get_range_query (cfun)->range_of_expr (r, def); > > if (!r.varying_p () && !r.undefined_p ()) > > { > > @@ -5426,7 +5426,7 @@ scev_var_range_cant_overflow (tree var, tree step= , class loop *loop) > > if (!def_bb || !dominated_by_p (CDI_DOMINATORS, loop->latch, def_bb)= ) > > return false; > > > > - Value_Range r (TREE_TYPE (var)); > > + int_range<2> r (TREE_TYPE (var)); > > get_range_query (cfun)->range_of_expr (r, var); > > if (r.varying_p () || r.undefined_p ()) > > return false; > > -- > > 2.44.0 > > > --00000000000091b0af06174c4cdb Content-Type: text/x-patch; charset="US-ASCII"; name="0001-Change-int_range-2-to-infinite-precision.patch" Content-Disposition: attachment; filename="0001-Change-int_range-2-to-infinite-precision.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lvm4yycl0 RnJvbSBmNDM3NDliODM4MWE5YjFiMGE0ZjFhYjJjYjI4OGNiODIxZjA0MzE5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGR5IEhlcm5hbmRleiA8YWxkeWhAcmVkaGF0LmNvbT4KRGF0 ZTogVHVlLCAzMCBBcHIgMjAyNCAxMDozNjo1OCArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIENoYW5n ZSBpbnRfcmFuZ2U8Mj4gdG8gaW5maW5pdGUgcHJlY2lzaW9uLgoKSW4gbXkgcHJldmlvdXMgY2hh bmdlIEkgbWlzdGFrZW5seSBjaGFuZ2VkIFZhbHVlX1JhbmdlIHRvCmludF9yYW5nZTwyPi4gIFRo ZSBmb3JtZXIgaGFzICJpbmZpbml0ZSIgcHJlY2lzaW9uIGZvciBpbnRlZ2VyIHJhbmdlcywKd2hl cmVhcyBpbnRfcmFuZ2U8Mj4gaGFzIHR3byBzdWItcmFuZ2VzLiAgVGhpcyBzaG91bGQgaGF2ZSBi ZWVuCmludF9yYW5nZV9tYXguCgpnY2MvQ2hhbmdlTG9nOgoKCSogZ2ltcGxlLXNzYS13YXJuLWFj Y2Vzcy5jYyAoY2hlY2tfbnVsX3Rlcm1pbmF0ZWRfYXJyYXkpOiBDaGFuZ2UKCWludF9yYW5nZTwy PiB0byBpbnRfcmFuZ2VfbWF4LgoJKG1lbW1vZGVsX3RvX3Vod2kpOiBTYW1lLgoJKiB0cmVlLXNz YS1sb29wLW5pdGVyLmNjIChyZWZpbmVfdmFsdWVfcmFuZ2VfdXNpbmdfZ3VhcmQpOiBTYW1lLgoJ KGRldGVybWluZV92YWx1ZV9yYW5nZSk6IFNhbWUuCgkoaW5mZXJfbG9vcF9ib3VuZHNfZnJvbV9z aWduZWRuZXNzKTogU2FtZS4KCShzY2V2X3Zhcl9yYW5nZV9jYW50X292ZXJmbG93KTogU2FtZS4K LS0tCiBnY2MvZ2ltcGxlLXNzYS13YXJuLWFjY2Vzcy5jYyB8ICA0ICsrLS0KIGdjYy90cmVlLXNz YS1sb29wLW5pdGVyLmNjICAgIHwgMTIgKysrKysrLS0tLS0tCiAyIGZpbGVzIGNoYW5nZWQsIDgg aW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9nY2MvZ2ltcGxlLXNz YS13YXJuLWFjY2Vzcy5jYyBiL2djYy9naW1wbGUtc3NhLXdhcm4tYWNjZXNzLmNjCmluZGV4IDQ1 MGMxY2FhNzY1Li4yYzEwZDE5ZTdmMyAxMDA2NDQKLS0tIGEvZ2NjL2dpbXBsZS1zc2Etd2Fybi1h Y2Nlc3MuY2MKKysrIGIvZ2NjL2dpbXBsZS1zc2Etd2Fybi1hY2Nlc3MuY2MKQEAgLTMzMCw3ICsz MzAsNyBAQCBjaGVja19udWxfdGVybWluYXRlZF9hcnJheSAoR2ltcGxlT3JUcmVlIGV4cHIsIHRy ZWUgc3JjLCB0cmVlIGJvdW5kKQogICB3aWRlX2ludCBibmRybmdbMl07CiAgIGlmIChib3VuZCkK ICAgICB7Ci0gICAgICBpbnRfcmFuZ2U8Mj4gciAoVFJFRV9UWVBFIChib3VuZCkpOworICAgICAg aW50X3JhbmdlX21heCByIChUUkVFX1RZUEUgKGJvdW5kKSk7CiAKICAgICAgIGdldF9yYW5nZV9x dWVyeSAoY2Z1biktPnJhbmdlX29mX2V4cHIgKHIsIGJvdW5kKTsKIApAQCAtMjgxNiw3ICsyODE2 LDcgQEAgbWVtbW9kZWxfdG9fdWh3aSAodHJlZSBvcmQsIGdpbXBsZSAqc3RtdCwgdW5zaWduZWQg SE9TVF9XSURFX0lOVCAqY3N0dmFsKQogICAgIHsKICAgICAgIC8qIFVzZSB0aGUgcmFuZ2UgcXVl cnkgdG8gZGV0ZXJtaW5lIGNvbnN0YW50IHZhbHVlcyBpbiB0aGUgYWJzZW5jZQogCSBvZiBjb25z dGFudCBwcm9wYWdhdGlvbiAoc3VjaCBhcyBhdCAtTzApLiAgKi8KLSAgICAgIGludF9yYW5nZTwy PiBybmcgKFRSRUVfVFlQRSAob3JkKSk7CisgICAgICBpbnRfcmFuZ2VfbWF4IHJuZyAoVFJFRV9U WVBFIChvcmQpKTsKICAgICAgIGlmICghZ2V0X3JhbmdlX3F1ZXJ5IChjZnVuKS0+cmFuZ2Vfb2Zf ZXhwciAocm5nLCBvcmQsIHN0bXQpCiAJICB8fCAhcm5nLnNpbmdsZXRvbl9wICgmb3JkKSkKIAly ZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9nY2MvdHJlZS1zc2EtbG9vcC1uaXRlci5jYyBiL2dj Yy90cmVlLXNzYS1sb29wLW5pdGVyLmNjCmluZGV4IGFkYmMxOTM2OTgyLi4wZmRlMDdlNjI2ZiAx MDA2NDQKLS0tIGEvZ2NjL3RyZWUtc3NhLWxvb3Atbml0ZXIuY2MKKysrIGIvZ2NjL3RyZWUtc3Nh LWxvb3Atbml0ZXIuY2MKQEAgLTIxNCw3ICsyMTQsNyBAQCByZWZpbmVfdmFsdWVfcmFuZ2VfdXNp bmdfZ3VhcmQgKHRyZWUgdHlwZSwgdHJlZSB2YXIsCiAgIGdldF90eXBlX3N0YXRpY19ib3VuZHMg KHR5cGUsIG1pbnQsIG1heHQpOwogICBtcHpfaW5pdCAobWluYzEpOwogICBtcHpfaW5pdCAobWF4 YzEpOwotICBpbnRfcmFuZ2U8Mj4gciAoVFJFRV9UWVBFICh2YXJjMSkpOworICBpbnRfcmFuZ2Vf bWF4IHIgKFRSRUVfVFlQRSAodmFyYzEpKTsKICAgLyogU2V0dXAgcmFuZ2UgaW5mb3JtYXRpb24g Zm9yIHZhcmMxLiAgKi8KICAgaWYgKGludGVnZXJfemVyb3AgKHZhcmMxKSkKICAgICB7CkBAIC0z NjgsNyArMzY4LDcgQEAgZGV0ZXJtaW5lX3ZhbHVlX3JhbmdlIChjbGFzcyBsb29wICpsb29wLCB0 cmVlIHR5cGUsIHRyZWUgdmFyLCBtcHpfdCBvZmYsCiAgICAgICBncGhpX2l0ZXJhdG9yIGdzaTsK IAogICAgICAgLyogRWl0aGVyIGZvciBWQVIgaXRzZWxmLi4uICAqLwotICAgICAgaW50X3Jhbmdl PDI+IHZhcl9yYW5nZSAoVFJFRV9UWVBFICh2YXIpKTsKKyAgICAgIGludF9yYW5nZV9tYXggdmFy X3JhbmdlIChUUkVFX1RZUEUgKHZhcikpOwogICAgICAgZ2V0X3JhbmdlX3F1ZXJ5IChjZnVuKS0+ cmFuZ2Vfb2ZfZXhwciAodmFyX3JhbmdlLCB2YXIpOwogICAgICAgaWYgKHZhcl9yYW5nZS52YXJ5 aW5nX3AgKCkgfHwgdmFyX3JhbmdlLnVuZGVmaW5lZF9wICgpKQogCXJ0eXBlID0gVlJfVkFSWUlO RzsKQEAgLTM4Miw3ICszODIsNyBAQCBkZXRlcm1pbmVfdmFsdWVfcmFuZ2UgKGNsYXNzIGxvb3Ag Kmxvb3AsIHRyZWUgdHlwZSwgdHJlZSB2YXIsIG1wel90IG9mZiwKIAogICAgICAgLyogT3IgZm9y IFBISSByZXN1bHRzIGluIGxvb3AtPmhlYWRlciB3aGVyZSBWQVIgaXMgdXNlZCBhcwogCSBQSEkg YXJndW1lbnQgZnJvbSB0aGUgbG9vcCBwcmVoZWFkZXIgZWRnZS4gICovCi0gICAgICBpbnRfcmFu Z2U8Mj4gcGhpX3JhbmdlIChUUkVFX1RZUEUgKHZhcikpOworICAgICAgaW50X3JhbmdlX21heCBw aGlfcmFuZ2UgKFRSRUVfVFlQRSAodmFyKSk7CiAgICAgICBmb3IgKGdzaSA9IGdzaV9zdGFydF9w aGlzIChsb29wLT5oZWFkZXIpOyAhZ3NpX2VuZF9wIChnc2kpOyBnc2lfbmV4dCAoJmdzaSkpCiAJ ewogCSAgZ3BoaSAqcGhpID0gZ3NpLnBoaSAoKTsKQEAgLTQwOCw3ICs0MDgsNyBAQCBkZXRlcm1p bmVfdmFsdWVfcmFuZ2UgKGNsYXNzIGxvb3AgKmxvb3AsIHRyZWUgdHlwZSwgdHJlZSB2YXIsIG1w el90IG9mZiwKIAkJICAgICBpbnZvbHZlZC4gICovCiAJCSAgaWYgKHdpOjpndF9wIChtaW52LCBt YXh2LCBzZ24pKQogCQkgICAgewotCQkgICAgICBpbnRfcmFuZ2U8Mj4gdnIgKFRSRUVfVFlQRSAo dmFyKSk7CisJCSAgICAgIGludF9yYW5nZV9tYXggdnIgKFRSRUVfVFlQRSAodmFyKSk7CiAJCSAg ICAgIGdldF9yYW5nZV9xdWVyeSAoY2Z1biktPnJhbmdlX29mX2V4cHIgKHZyLCB2YXIpOwogCQkg ICAgICBpZiAodnIudmFyeWluZ19wICgpIHx8IHZyLnVuZGVmaW5lZF9wICgpKQogCQkJcnR5cGUg PSBWUl9WQVJZSU5HOwpAQCAtNDM2Nyw3ICs0MzY3LDcgQEAgaW5mZXJfbG9vcF9ib3VuZHNfZnJv bV9zaWduZWRuZXNzIChjbGFzcyBsb29wICpsb29wLCBnaW1wbGUgKnN0bXQpCiAKICAgbG93ID0g bG93ZXJfYm91bmRfaW5fdHlwZSAodHlwZSwgdHlwZSk7CiAgIGhpZ2ggPSB1cHBlcl9ib3VuZF9p bl90eXBlICh0eXBlLCB0eXBlKTsKLSAgaW50X3JhbmdlPDI+IHIgKFRSRUVfVFlQRSAoZGVmKSk7 CisgIGludF9yYW5nZV9tYXggciAoVFJFRV9UWVBFIChkZWYpKTsKICAgZ2V0X3JhbmdlX3F1ZXJ5 IChjZnVuKS0+cmFuZ2Vfb2ZfZXhwciAociwgZGVmKTsKICAgaWYgKCFyLnZhcnlpbmdfcCAoKSAm JiAhci51bmRlZmluZWRfcCAoKSkKICAgICB7CkBAIC01NDI2LDcgKzU0MjYsNyBAQCBzY2V2X3Zh cl9yYW5nZV9jYW50X292ZXJmbG93ICh0cmVlIHZhciwgdHJlZSBzdGVwLCBjbGFzcyBsb29wICps b29wKQogICBpZiAoIWRlZl9iYiB8fCAhZG9taW5hdGVkX2J5X3AgKENESV9ET01JTkFUT1JTLCBs b29wLT5sYXRjaCwgZGVmX2JiKSkKICAgICByZXR1cm4gZmFsc2U7CiAKLSAgaW50X3JhbmdlPDI+ IHIgKFRSRUVfVFlQRSAodmFyKSk7CisgIGludF9yYW5nZV9tYXggciAoVFJFRV9UWVBFICh2YXIp KTsKICAgZ2V0X3JhbmdlX3F1ZXJ5IChjZnVuKS0+cmFuZ2Vfb2ZfZXhwciAociwgdmFyKTsKICAg aWYgKHIudmFyeWluZ19wICgpIHx8IHIudW5kZWZpbmVkX3AgKCkpCiAgICAgcmV0dXJuIGZhbHNl OwotLSAKMi40NC4wCgo= --00000000000091b0af06174c4cdb--