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.129.124]) by sourceware.org (Postfix) with ESMTPS id D179E3858427 for ; Fri, 26 Aug 2022 15:43:35 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org D179E3858427 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1661528614; 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=nhftSiaX4YWzxrdDCxoUvLR+oFodyCi8s6GfogPPmpg=; b=Pexw3YBvhHbM4RRZTYuEHylvvSr2uU2/gac64AgIy6aaRXP7bvSIROG3G8Zf7R1MKsLbMY oesL+ntTfRiuajzcqwvVAywchQZHB7xs/QsCVzLxP0W6uTMMcakBP+n3JjlkToFK9QSfKx i/tDNhTdJ6cqmEmDhTU8f8K7RV8jRuo= Received: from mail-ot1-f70.google.com (mail-ot1-f70.google.com [209.85.210.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_128_GCM_SHA256) id us-mta-349-mnBW79rEOoqH_JSipmo0aw-1; Fri, 26 Aug 2022 11:43:32 -0400 X-MC-Unique: mnBW79rEOoqH_JSipmo0aw-1 Received: by mail-ot1-f70.google.com with SMTP id r28-20020a056830237c00b006392b014be9so900404oth.0 for ; Fri, 26 Aug 2022 08:43:32 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc; bh=nhftSiaX4YWzxrdDCxoUvLR+oFodyCi8s6GfogPPmpg=; b=T5cAZKaO7/dEebJGIFs0y87AOkOVUH7/DR7egymrH5ch55iCvq7+GnR1jj4CDpTHdL 8owkYus/xqTRJrKzjO1T1mpDjQOOKHVp54rNA4v2NO7RlykrysGWROpfjoop42NiOJ9+ RZ9ZCZDJjmCqMRbgEOyxoLHdrSS6G/c8jPyEu4aEVBDYPoS9Xy+RDLJ1eABT4FYNJ+Ho 6lDXjRh/3TwTUm+l+itoObwsDc0qQMKdc4oH2w3l3T/j4SbyBfUARDe9mfqguu0rscqb PE3RPNDvhxVM1OatEeB8HPx9dKU4PAjLVW8ivWyUUwhcxq5kMcb/7z4anhQosgi6KcFa hRRw== X-Gm-Message-State: ACgBeo26YpYwya8EMZTSirzZDMVlSxj7igvyHlk4YWaXbgwnrujRcF0b zwSdHBBk5whorrNLT9VUizbXVusBGSN3yQYvF43FRa3SBnFXzzEQKrddarOXgIzPB5wBxOIz1fe 0g8NxXsvyjCoRN94XL1TN9yfluIVvaQncZg== X-Received: by 2002:a05:6870:210b:b0:10b:ed11:4e2d with SMTP id f11-20020a056870210b00b0010bed114e2dmr2114951oae.265.1661528611910; Fri, 26 Aug 2022 08:43:31 -0700 (PDT) X-Google-Smtp-Source: AA6agR6mY9rLvdYU5ZQZhidFEoCZMgJf2v6NI2VVOuPgNwt1eQPLu5MZKTnIINA5slGFNxwX0J1k4ekXfbQZvjzfCC8= X-Received: by 2002:a05:6870:210b:b0:10b:ed11:4e2d with SMTP id f11-20020a056870210b00b0010bed114e2dmr2114935oae.265.1661528611646; Fri, 26 Aug 2022 08:43:31 -0700 (PDT) MIME-Version: 1.0 References: <20220823103321.879429-1-aldyh@redhat.com> In-Reply-To: <20220823103321.879429-1-aldyh@redhat.com> From: Aldy Hernandez Date: Fri, 26 Aug 2022 17:43:20 +0200 Message-ID: Subject: Re: [PATCH] Add set/get functions for negative infinity in real.* To: GCC patches , Jakub Jelinek Cc: Richard Biener , Andrew MacLeod X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: multipart/mixed; boundary="000000000000aec16c05e726c680" X-Spam-Status: No, score=-11.9 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_LOW,SPF_HELO_NONE,SPF_NONE,TXREP,T_SCC_BODY_TEXT_LINE 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: --000000000000aec16c05e726c680 Content-Type: text/plain; charset="UTF-8" Another real.* tweak. This time, adding a real_iszero() entry point to match the real_isnegzero. I could combine this patch with the negative infinity one in this thread if y'all would prefer. OK pending tests? p.s. I'd really like to go and benchmark all this real.* stuff (later), because I think we could inline a bunch of these functions in the header file. On Tue, Aug 23, 2022 at 12:33 PM Aldy Hernandez wrote: > > For the frange implementation with endpoints I'm about to contribute, > we need to set REAL_VALUE_TYPEs with negative infinity. The support > is already there in real.cc, but it is awkward to get at. One could > call real_inf() and then negate the value, but I've added the ability > to pass the sign argument like many of the existing real.* functions. > > I've declared the functions in such a way to avoid changes to the > existing code base: > > // Unchanged function returning true for either +-INF. > bool real_isinf (const REAL_VALUE_TYPE *r); > // New overload to be able to specify the sign. > bool real_isinf (const REAL_VALUE_TYPE *r, int sign); > // Replacement function for setting INF, defaults to +INF. > void real_inf (REAL_VALUE_TYPE *, int sign = 0); > > Tested on x86-64 Linux. > > OK? > > gcc/ChangeLog: > > * real.cc (real_isinf): New overload. > (real_inf): Add sign argument. > * real.h (real_isinf): New overload. > (real_inf): Add sign argument. > --- > gcc/real.cc | 14 +++++++++++--- > gcc/real.h | 5 ++++- > 2 files changed, 15 insertions(+), 4 deletions(-) > > diff --git a/gcc/real.cc b/gcc/real.cc > index 4e63b1449c5..f570ca8e85b 100644 > --- a/gcc/real.cc > +++ b/gcc/real.cc > @@ -1234,6 +1234,14 @@ real_isinf (const REAL_VALUE_TYPE *r) > return (r->cl == rvc_inf); > } > > +/* Determine whether a floating-point value X is infinite with SIGN. */ > + > +bool > +real_isinf (const REAL_VALUE_TYPE *r, int sign) > +{ > + return real_isinf (r) && r->sign == sign; > +} > + > /* Determine whether a floating-point value X is a NaN. */ > > bool > @@ -2484,12 +2492,12 @@ dconst_sqrt2_ptr (void) > return &value; > } > > -/* Fills R with +Inf. */ > +/* Fills R with Inf with SIGN. */ > > void > -real_inf (REAL_VALUE_TYPE *r) > +real_inf (REAL_VALUE_TYPE *r, int sign) > { > - get_inf (r, 0); > + get_inf (r, sign); > } > > /* Fills R with a NaN whose significand is described by STR. If QUIET, > diff --git a/gcc/real.h b/gcc/real.h > index 845ef29e3a4..76360b603fb 100644 > --- a/gcc/real.h > +++ b/gcc/real.h > @@ -277,6 +277,9 @@ extern bool real_compare (int, const REAL_VALUE_TYPE *, const REAL_VALUE_TYPE *) > /* Determine whether a floating-point value X is infinite. */ > extern bool real_isinf (const REAL_VALUE_TYPE *); > > +/* Determine whether a floating-point value X is infinite with SIGN. */ > +extern bool real_isinf (const REAL_VALUE_TYPE *, int sign); > + > /* Determine whether a floating-point value X is a NaN. */ > extern bool real_isnan (const REAL_VALUE_TYPE *); > > @@ -331,7 +334,7 @@ extern long real_to_target (long *, const REAL_VALUE_TYPE *, format_helper); > extern void real_from_target (REAL_VALUE_TYPE *, const long *, > format_helper); > > -extern void real_inf (REAL_VALUE_TYPE *); > +extern void real_inf (REAL_VALUE_TYPE *, int sign = 0); > > extern bool real_nan (REAL_VALUE_TYPE *, const char *, int, format_helper); > > -- > 2.37.1 > --000000000000aec16c05e726c680 Content-Type: text/x-patch; charset="US-ASCII"; name="0005-Add-real_iszero-to-real.patch" Content-Disposition: attachment; filename="0005-Add-real_iszero-to-real.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l7an4ha20 RnJvbSA4YmVkZDY0YTZiOGRmMjNjYWY3OGY1ZjQxMWRjMTdlMzBhZDM1ZTg4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGR5IEhlcm5hbmRleiA8YWxkeWhAcmVkaGF0LmNvbT4KRGF0 ZTogRnJpLCAyNiBBdWcgMjAyMiAxNjo1NzowOSArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIEFkZCBy ZWFsX2lzemVybyB0byByZWFsLioKCldlIGhhdmUgcmVhbF9pc25lZ3plcm8gYnV0IG5vIHJlYWxf aXN6ZXJvLiAgV2UgY291bGQgbWVtY21wIHdpdGggMCwKYnV0IHRoYXQncyBqdXN0IHVnbHkuCgpn Y2MvQ2hhbmdlTG9nOgoKCSogcmVhbC5jYyAocmVhbF9pc3plcm8pOiBOZXcuCgkqIHJlYWwuaCAo cmVhbF9pc3plcm8pOiBOZXcuCi0tLQogZ2NjL3JlYWwuY2MgfCAxNiArKysrKysrKysrKysrKysr CiBnY2MvcmVhbC5oICB8ICA2ICsrKysrKwogMiBmaWxlcyBjaGFuZ2VkLCAyMiBpbnNlcnRpb25z KCspCgpkaWZmIC0tZ2l0IGEvZ2NjL3JlYWwuY2MgYi9nY2MvcmVhbC5jYwppbmRleCBmNTcwY2E4 ZTg1Yi4uZDM2MjY4MGZlOWIgMTAwNjQ0Ci0tLSBhL2djYy9yZWFsLmNjCisrKyBiL2djYy9yZWFs LmNjCkBAIC0xMjcyLDYgKzEyNzIsMjIgQEAgcmVhbF9pc25lZyAoY29uc3QgUkVBTF9WQUxVRV9U WVBFICpyKQogICByZXR1cm4gci0+c2lnbjsKIH0KIAorLyogRGV0ZXJtaW5lIHdoZXRoZXIgYSBm bG9hdGluZy1wb2ludCB2YWx1ZSBYIGlzIHBsdXMgb3IgbWludXMgemVyby4gICovCisKK2Jvb2wK K3JlYWxfaXN6ZXJvIChjb25zdCBSRUFMX1ZBTFVFX1RZUEUgKnIpCit7CisgIHJldHVybiByLT5j bCA9PSBydmNfemVybzsKK30KKworLyogRGV0ZXJtaW5lIHdoZXRoZXIgYSBmbG9hdGluZy1wb2lu dCB2YWx1ZSBYIGlzIHplcm8gd2l0aCBTSUdOLiAgKi8KKworYm9vbAorcmVhbF9pc3plcm8gKGNv bnN0IFJFQUxfVkFMVUVfVFlQRSAqciwgaW50IHNpZ24pCit7CisgIHJldHVybiByZWFsX2lzemVy byAocikgJiYgci0+c2lnbiA9PSBzaWduOworfQorCiAvKiBEZXRlcm1pbmUgd2hldGhlciBhIGZs b2F0aW5nLXBvaW50IHZhbHVlIFggaXMgbWludXMgemVyby4gICovCiAKIGJvb2wKZGlmZiAtLWdp dCBhL2djYy9yZWFsLmggYi9nY2MvcmVhbC5oCmluZGV4IDc2MzYwYjYwM2ZiLi4yMGQ4NTM3ODg1 NSAxMDA2NDQKLS0tIGEvZ2NjL3JlYWwuaAorKysgYi9nY2MvcmVhbC5oCkBAIC0yOTUsNiArMjk1 LDEyIEBAIGV4dGVybiBib29sIHJlYWxfaXNuZWcgKGNvbnN0IFJFQUxfVkFMVUVfVFlQRSAqKTsK IC8qIERldGVybWluZSB3aGV0aGVyIGEgZmxvYXRpbmctcG9pbnQgdmFsdWUgWCBpcyBtaW51cyB6 ZXJvLiAgKi8KIGV4dGVybiBib29sIHJlYWxfaXNuZWd6ZXJvIChjb25zdCBSRUFMX1ZBTFVFX1RZ UEUgKik7CiAKKy8qIERldGVybWluZSB3aGV0aGVyIGEgZmxvYXRpbmctcG9pbnQgdmFsdWUgWCBp cyBwbHVzIG9yIG1pbnVzIHplcm8uICAqLworZXh0ZXJuIGJvb2wgcmVhbF9pc3plcm8gKGNvbnN0 IFJFQUxfVkFMVUVfVFlQRSAqKTsKKworLyogRGV0ZXJtaW5lIHdoZXRoZXIgYSBmbG9hdGluZy1w b2ludCB2YWx1ZSBYIGlzIHplcm8gd2l0aCBTSUdOLiAgKi8KK2V4dGVybiBib29sIHJlYWxfaXN6 ZXJvIChjb25zdCBSRUFMX1ZBTFVFX1RZUEUgKiwgaW50IHNpZ24pOworCiAvKiBUZXN0IHJlbGF0 aW9uc2hpcHMgYmV0d2VlbiByZWFscy4gICovCiBleHRlcm4gYm9vbCByZWFsX2lkZW50aWNhbCAo Y29uc3QgUkVBTF9WQUxVRV9UWVBFICosIGNvbnN0IFJFQUxfVkFMVUVfVFlQRSAqKTsKIGV4dGVy biBib29sIHJlYWxfZXF1YWwgKGNvbnN0IFJFQUxfVkFMVUVfVFlQRSAqLCBjb25zdCBSRUFMX1ZB TFVFX1RZUEUgKik7Ci0tIAoyLjM3LjEKCg== --000000000000aec16c05e726c680-- 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.129.124]) by sourceware.org (Postfix) with ESMTPS id D179E3858427 for ; Fri, 26 Aug 2022 15:43:35 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org D179E3858427 Received: from mail-ot1-f70.google.com (mail-ot1-f70.google.com [209.85.210.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_128_GCM_SHA256) id us-mta-349-mnBW79rEOoqH_JSipmo0aw-1; Fri, 26 Aug 2022 11:43:32 -0400 X-MC-Unique: mnBW79rEOoqH_JSipmo0aw-1 Received: by mail-ot1-f70.google.com with SMTP id r28-20020a056830237c00b006392b014be9so900404oth.0 for ; Fri, 26 Aug 2022 08:43:32 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc; bh=nhftSiaX4YWzxrdDCxoUvLR+oFodyCi8s6GfogPPmpg=; b=T5cAZKaO7/dEebJGIFs0y87AOkOVUH7/DR7egymrH5ch55iCvq7+GnR1jj4CDpTHdL 8owkYus/xqTRJrKzjO1T1mpDjQOOKHVp54rNA4v2NO7RlykrysGWROpfjoop42NiOJ9+ RZ9ZCZDJjmCqMRbgEOyxoLHdrSS6G/c8jPyEu4aEVBDYPoS9Xy+RDLJ1eABT4FYNJ+Ho 6lDXjRh/3TwTUm+l+itoObwsDc0qQMKdc4oH2w3l3T/j4SbyBfUARDe9mfqguu0rscqb PE3RPNDvhxVM1OatEeB8HPx9dKU4PAjLVW8ivWyUUwhcxq5kMcb/7z4anhQosgi6KcFa hRRw== X-Gm-Message-State: ACgBeo26YpYwya8EMZTSirzZDMVlSxj7igvyHlk4YWaXbgwnrujRcF0b zwSdHBBk5whorrNLT9VUizbXVusBGSN3yQYvF43FRa3SBnFXzzEQKrddarOXgIzPB5wBxOIz1fe 0g8NxXsvyjCoRN94XL1TN9yfluIVvaQncZg== X-Received: by 2002:a05:6870:210b:b0:10b:ed11:4e2d with SMTP id f11-20020a056870210b00b0010bed114e2dmr2114951oae.265.1661528611910; Fri, 26 Aug 2022 08:43:31 -0700 (PDT) X-Google-Smtp-Source: AA6agR6mY9rLvdYU5ZQZhidFEoCZMgJf2v6NI2VVOuPgNwt1eQPLu5MZKTnIINA5slGFNxwX0J1k4ekXfbQZvjzfCC8= X-Received: by 2002:a05:6870:210b:b0:10b:ed11:4e2d with SMTP id f11-20020a056870210b00b0010bed114e2dmr2114935oae.265.1661528611646; Fri, 26 Aug 2022 08:43:31 -0700 (PDT) MIME-Version: 1.0 References: <20220823103321.879429-1-aldyh@redhat.com> In-Reply-To: <20220823103321.879429-1-aldyh@redhat.com> From: Aldy Hernandez Date: Fri, 26 Aug 2022 17:43:20 +0200 Message-ID: Subject: Re: [PATCH] Add set/get functions for negative infinity in real.* To: GCC patches , Jakub Jelinek X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: multipart/mixed; boundary="000000000000aec16c05e726c680" X-Spam-Status: No, score=-11.9 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_LOW, SPF_HELO_NONE, SPF_NONE, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 26 Aug 2022 15:43:37 -0000 Message-ID: <20220826154320.dsncFZhEyBqZ51-e5tl5jXftU-n54gEd6lqFuYLDIRQ@z> --000000000000aec16c05e726c680 Content-Type: text/plain; charset="UTF-8" Another real.* tweak. This time, adding a real_iszero() entry point to match the real_isnegzero. I could combine this patch with the negative infinity one in this thread if y'all would prefer. OK pending tests? p.s. I'd really like to go and benchmark all this real.* stuff (later), because I think we could inline a bunch of these functions in the header file. On Tue, Aug 23, 2022 at 12:33 PM Aldy Hernandez wrote: > > For the frange implementation with endpoints I'm about to contribute, > we need to set REAL_VALUE_TYPEs with negative infinity. The support > is already there in real.cc, but it is awkward to get at. One could > call real_inf() and then negate the value, but I've added the ability > to pass the sign argument like many of the existing real.* functions. > > I've declared the functions in such a way to avoid changes to the > existing code base: > > // Unchanged function returning true for either +-INF. > bool real_isinf (const REAL_VALUE_TYPE *r); > // New overload to be able to specify the sign. > bool real_isinf (const REAL_VALUE_TYPE *r, int sign); > // Replacement function for setting INF, defaults to +INF. > void real_inf (REAL_VALUE_TYPE *, int sign = 0); > > Tested on x86-64 Linux. > > OK? > > gcc/ChangeLog: > > * real.cc (real_isinf): New overload. > (real_inf): Add sign argument. > * real.h (real_isinf): New overload. > (real_inf): Add sign argument. > --- > gcc/real.cc | 14 +++++++++++--- > gcc/real.h | 5 ++++- > 2 files changed, 15 insertions(+), 4 deletions(-) > > diff --git a/gcc/real.cc b/gcc/real.cc > index 4e63b1449c5..f570ca8e85b 100644 > --- a/gcc/real.cc > +++ b/gcc/real.cc > @@ -1234,6 +1234,14 @@ real_isinf (const REAL_VALUE_TYPE *r) > return (r->cl == rvc_inf); > } > > +/* Determine whether a floating-point value X is infinite with SIGN. */ > + > +bool > +real_isinf (const REAL_VALUE_TYPE *r, int sign) > +{ > + return real_isinf (r) && r->sign == sign; > +} > + > /* Determine whether a floating-point value X is a NaN. */ > > bool > @@ -2484,12 +2492,12 @@ dconst_sqrt2_ptr (void) > return &value; > } > > -/* Fills R with +Inf. */ > +/* Fills R with Inf with SIGN. */ > > void > -real_inf (REAL_VALUE_TYPE *r) > +real_inf (REAL_VALUE_TYPE *r, int sign) > { > - get_inf (r, 0); > + get_inf (r, sign); > } > > /* Fills R with a NaN whose significand is described by STR. If QUIET, > diff --git a/gcc/real.h b/gcc/real.h > index 845ef29e3a4..76360b603fb 100644 > --- a/gcc/real.h > +++ b/gcc/real.h > @@ -277,6 +277,9 @@ extern bool real_compare (int, const REAL_VALUE_TYPE *, const REAL_VALUE_TYPE *) > /* Determine whether a floating-point value X is infinite. */ > extern bool real_isinf (const REAL_VALUE_TYPE *); > > +/* Determine whether a floating-point value X is infinite with SIGN. */ > +extern bool real_isinf (const REAL_VALUE_TYPE *, int sign); > + > /* Determine whether a floating-point value X is a NaN. */ > extern bool real_isnan (const REAL_VALUE_TYPE *); > > @@ -331,7 +334,7 @@ extern long real_to_target (long *, const REAL_VALUE_TYPE *, format_helper); > extern void real_from_target (REAL_VALUE_TYPE *, const long *, > format_helper); > > -extern void real_inf (REAL_VALUE_TYPE *); > +extern void real_inf (REAL_VALUE_TYPE *, int sign = 0); > > extern bool real_nan (REAL_VALUE_TYPE *, const char *, int, format_helper); > > -- > 2.37.1 > --000000000000aec16c05e726c680 Content-Type: text/x-patch; charset="US-ASCII"; name="0005-Add-real_iszero-to-real.patch" Content-Disposition: attachment; filename="0005-Add-real_iszero-to-real.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l7an4ha20 RnJvbSA4YmVkZDY0YTZiOGRmMjNjYWY3OGY1ZjQxMWRjMTdlMzBhZDM1ZTg4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGR5IEhlcm5hbmRleiA8YWxkeWhAcmVkaGF0LmNvbT4KRGF0 ZTogRnJpLCAyNiBBdWcgMjAyMiAxNjo1NzowOSArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIEFkZCBy ZWFsX2lzemVybyB0byByZWFsLioKCldlIGhhdmUgcmVhbF9pc25lZ3plcm8gYnV0IG5vIHJlYWxf aXN6ZXJvLiAgV2UgY291bGQgbWVtY21wIHdpdGggMCwKYnV0IHRoYXQncyBqdXN0IHVnbHkuCgpn Y2MvQ2hhbmdlTG9nOgoKCSogcmVhbC5jYyAocmVhbF9pc3plcm8pOiBOZXcuCgkqIHJlYWwuaCAo cmVhbF9pc3plcm8pOiBOZXcuCi0tLQogZ2NjL3JlYWwuY2MgfCAxNiArKysrKysrKysrKysrKysr CiBnY2MvcmVhbC5oICB8ICA2ICsrKysrKwogMiBmaWxlcyBjaGFuZ2VkLCAyMiBpbnNlcnRpb25z KCspCgpkaWZmIC0tZ2l0IGEvZ2NjL3JlYWwuY2MgYi9nY2MvcmVhbC5jYwppbmRleCBmNTcwY2E4 ZTg1Yi4uZDM2MjY4MGZlOWIgMTAwNjQ0Ci0tLSBhL2djYy9yZWFsLmNjCisrKyBiL2djYy9yZWFs LmNjCkBAIC0xMjcyLDYgKzEyNzIsMjIgQEAgcmVhbF9pc25lZyAoY29uc3QgUkVBTF9WQUxVRV9U WVBFICpyKQogICByZXR1cm4gci0+c2lnbjsKIH0KIAorLyogRGV0ZXJtaW5lIHdoZXRoZXIgYSBm bG9hdGluZy1wb2ludCB2YWx1ZSBYIGlzIHBsdXMgb3IgbWludXMgemVyby4gICovCisKK2Jvb2wK K3JlYWxfaXN6ZXJvIChjb25zdCBSRUFMX1ZBTFVFX1RZUEUgKnIpCit7CisgIHJldHVybiByLT5j bCA9PSBydmNfemVybzsKK30KKworLyogRGV0ZXJtaW5lIHdoZXRoZXIgYSBmbG9hdGluZy1wb2lu dCB2YWx1ZSBYIGlzIHplcm8gd2l0aCBTSUdOLiAgKi8KKworYm9vbAorcmVhbF9pc3plcm8gKGNv bnN0IFJFQUxfVkFMVUVfVFlQRSAqciwgaW50IHNpZ24pCit7CisgIHJldHVybiByZWFsX2lzemVy byAocikgJiYgci0+c2lnbiA9PSBzaWduOworfQorCiAvKiBEZXRlcm1pbmUgd2hldGhlciBhIGZs b2F0aW5nLXBvaW50IHZhbHVlIFggaXMgbWludXMgemVyby4gICovCiAKIGJvb2wKZGlmZiAtLWdp dCBhL2djYy9yZWFsLmggYi9nY2MvcmVhbC5oCmluZGV4IDc2MzYwYjYwM2ZiLi4yMGQ4NTM3ODg1 NSAxMDA2NDQKLS0tIGEvZ2NjL3JlYWwuaAorKysgYi9nY2MvcmVhbC5oCkBAIC0yOTUsNiArMjk1 LDEyIEBAIGV4dGVybiBib29sIHJlYWxfaXNuZWcgKGNvbnN0IFJFQUxfVkFMVUVfVFlQRSAqKTsK IC8qIERldGVybWluZSB3aGV0aGVyIGEgZmxvYXRpbmctcG9pbnQgdmFsdWUgWCBpcyBtaW51cyB6 ZXJvLiAgKi8KIGV4dGVybiBib29sIHJlYWxfaXNuZWd6ZXJvIChjb25zdCBSRUFMX1ZBTFVFX1RZ UEUgKik7CiAKKy8qIERldGVybWluZSB3aGV0aGVyIGEgZmxvYXRpbmctcG9pbnQgdmFsdWUgWCBp cyBwbHVzIG9yIG1pbnVzIHplcm8uICAqLworZXh0ZXJuIGJvb2wgcmVhbF9pc3plcm8gKGNvbnN0 IFJFQUxfVkFMVUVfVFlQRSAqKTsKKworLyogRGV0ZXJtaW5lIHdoZXRoZXIgYSBmbG9hdGluZy1w b2ludCB2YWx1ZSBYIGlzIHplcm8gd2l0aCBTSUdOLiAgKi8KK2V4dGVybiBib29sIHJlYWxfaXN6 ZXJvIChjb25zdCBSRUFMX1ZBTFVFX1RZUEUgKiwgaW50IHNpZ24pOworCiAvKiBUZXN0IHJlbGF0 aW9uc2hpcHMgYmV0d2VlbiByZWFscy4gICovCiBleHRlcm4gYm9vbCByZWFsX2lkZW50aWNhbCAo Y29uc3QgUkVBTF9WQUxVRV9UWVBFICosIGNvbnN0IFJFQUxfVkFMVUVfVFlQRSAqKTsKIGV4dGVy biBib29sIHJlYWxfZXF1YWwgKGNvbnN0IFJFQUxfVkFMVUVfVFlQRSAqLCBjb25zdCBSRUFMX1ZB TFVFX1RZUEUgKik7Ci0tIAoyLjM3LjEKCg== --000000000000aec16c05e726c680--