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 8E39438582AE for ; Tue, 6 Sep 2022 11:47:59 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 8E39438582AE 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=1662464879; 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=l/oxFh69ksu9+1GtmI4Xh4qquLGNWAIAqQMuVhB5vQk=; b=RsVXHHxRWyapt48TOChF58FQAcctbcu1See61jckIgONESwxd+dkSQB3E69HsZ3uZaC2Rl a6wXabiDA3EUt7dx0GVhtvzLOJTpbICtWf2914gYHtovSrPISk+qJQ0S+669LHJf6kRb/j 2lQ2IydK13pbFPPxc7OyjDaCJHzYBnY= Received: from mail-oa1-f69.google.com (mail-oa1-f69.google.com [209.85.160.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_128_GCM_SHA256) id us-mta-15-SrYvDxMDMESG-qq1q0DLpA-1; Tue, 06 Sep 2022 07:47:56 -0400 X-MC-Unique: SrYvDxMDMESG-qq1q0DLpA-1 Received: by mail-oa1-f69.google.com with SMTP id 586e51a60fabf-11f1971030fso5932882fac.16 for ; Tue, 06 Sep 2022 04:47:55 -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:subject:date; bh=l/oxFh69ksu9+1GtmI4Xh4qquLGNWAIAqQMuVhB5vQk=; b=TOSZm02XBdH0sf+UfSGC+PV/gblbUQb9A66O7xwrNL9AosUHccwJ5yFGbyGCUH0tac eoA4ZmRR0TiHrQmFWlZ2bL7ZWaz3JP/yJhpGykAw9Lv4j15i+sQ/hl/8XgozGMhczlvG ew70UyPGR/GYSUOheVceNEwQ0byL24/bA+v8Wrls3SlY3pS/uSzMkfpPunNZdlqCE+3H NS4r3N5Z5+Efhxou8xZuFpowL3KUWBrAuryji9hBsz+4QLwIVmYbfR/j/GFd4vpPvKnN aXx+Rw4TbliLxy7YAJNbKBBABOtxEYj8ZyNLEpJEiqvPI4c6z+vh5pOT3h/xqV2RkNNI Iu/A== X-Gm-Message-State: ACgBeo0G73EmIFiZ+Lfbh26JUSbNHmM1ohkAJwPrHNGIVFiZ9QCGEktL fbL0j3syXQqJPLxJ6JHMugpbG3AZRPIPCJ3d5JnSBU5pJXKQ6Sy7RiFgErHYsZEu2GP65AbCm67 FRuOGql605J4ra+jWaExMsiyjToALJKgvtA== X-Received: by 2002:a05:6808:f07:b0:344:7739:8e7b with SMTP id m7-20020a0568080f0700b0034477398e7bmr9814188oiw.265.1662464875348; Tue, 06 Sep 2022 04:47:55 -0700 (PDT) X-Google-Smtp-Source: AA6agR60J+Kq1Om4MlqP9kq1XOQuUZSN6UZ2tRF2CmZGW+PkvVFxxiXiGL5eWK7XTq+n2l4dZzyxRMorRxCu27kaFNA= X-Received: by 2002:a05:6808:f07:b0:344:7739:8e7b with SMTP id m7-20020a0568080f0700b0034477398e7bmr9814177oiw.265.1662464874886; Tue, 06 Sep 2022 04:47:54 -0700 (PDT) MIME-Version: 1.0 References: <20220906072901.3472801-1-aldyh@redhat.com> In-Reply-To: From: Aldy Hernandez Date: Tue, 6 Sep 2022 13:47:43 +0200 Message-ID: Subject: Re: [PATCH] Handle > INF and < INF correctly in range-op-float.cc To: Jakub Jelinek Cc: GCC patches , Richard Biener , Andrew MacLeod X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: multipart/mixed; boundary="00000000000052016405e800c4ec" X-Spam-Status: No, score=-11.8 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: --00000000000052016405e800c4ec Content-Type: text/plain; charset="UTF-8" On Tue, Sep 6, 2022 at 9:59 AM Jakub Jelinek wrote: > > On Tue, Sep 06, 2022 at 09:49:55AM +0200, Aldy Hernandez wrote: > > On Tue, Sep 6, 2022 at 9:44 AM Jakub Jelinek wrote: > > > > > > On Tue, Sep 06, 2022 at 09:40:59AM +0200, Aldy Hernandez wrote: > > > > if (x <= Inf) > > > > > > This will be [-Inf, Inf] !NAN on the true side and > > > NAN (either sign) on the false side indeed. > > > > > > > if (x < -Inf) > > > > > > will be NAN (either sign) on the true side and > > > [-Inf, Inf] !NAN on the false side. > > > > Sweet, that's exactly what I thought, thus the patch. > > > > Furthermore, for !HONOR_NANS I would expect the NAN sides above to be > > UNDEFINED/unreachable. That is, the false side of x <= Inf when > > !HONOR_NANS is unreachable. > > In practice, there is no real format that has NaNs and doesn't have Infs > or vice versa and similarly we have just one switch to cover both Infinities > and NaNs, so either both are supported, or neither of them, or both > are supported but neither of them should appear in a valid program > (-ffinite-math-only on most floating point formats). > So the answer in that case is a little bit fuzzy because one shouldn't > compare against infinity in that case (or for !MODE_HAS_INFINITIES even > can't). But sure, if NaNs aren't possible or can't appear and you compare > x <= Largest_possible_float, then it is always true and so UNDEFINED on the > false edge. OK, let's leave it as undefined to be consistent. Come to think of it, perhaps we could represent the endpoints (varying, [x, +INF], etc) as the min/max representable values for the type (for !HONOR_NANS). I don't think it would make a big difference, but we might get better results for some corner cases. Question...for !HONOR_NANS or !HONOR_INFINITIES or whatever, say the range for the domain is [-MIN, +MAX] for the min and max representable numbers. What happens for MAX+1? Is that undefined? I wonder what real.cc does for that. Attached is the final version of the patch I'm pushing. Tested (+mpfr tests) on x86-64 Linux. Aldy --00000000000052016405e800c4ec Content-Type: text/x-patch; charset="US-ASCII"; name="0001-Handle-INF-and-INF-correctly-in-range-op-float.cc.patch" Content-Disposition: attachment; filename="0001-Handle-INF-and-INF-correctly-in-range-op-float.cc.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l7q4jz0g0 RnJvbSBmZDUyZmZiOTk5N2JlY2FmYTMxYzUxMDliNTBmZTI3NGRhMTJhZWQ4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGR5IEhlcm5hbmRleiA8YWxkeWhAcmVkaGF0LmNvbT4KRGF0 ZTogVHVlLCA2IFNlcCAyMDIyIDA4OjIwOjU0ICswMjAwClN1YmplY3Q6IFtQQVRDSF0gSGFuZGxl ID4gSU5GIGFuZCA8IElORiBjb3JyZWN0bHkgaW4gcmFuZ2Utb3AtZmxvYXQuY2MKClRoZSBnZm9y dHJhbi5kZy9taW5sb2N2YWwqLmY5MCB0ZXN0cyBhcmUgZ2VuZXJhdGluZyBjb25kaXRpb25hbHMg cGFzdAp0aGUgaW5maW5pdGllcy4gIEZvciBleGFtcGxlOgoKCWlmICh4IDw9ICtJbmYpCgkgIGZv byAoeCk7CgllbHNlCgkgIGJhciAoeCk7CgpJdCBzZWVtcyB0byBtZSB0aGF0IHRoZSBvbmx5IHBv c3NpYmxlIHZhbHVlIGZvciB4IG9uIHRoZSBmYWxzZSBzaWRlIGlzCmVpdGhlciBOQU4gb3IgdW5k ZWZpbmVkIChmb3IgIUhPTk9SX05BTlMpLgoKZ2NjL0NoYW5nZUxvZzoKCgkqIHJhbmdlLW9wLWZs b2F0LmNjIChidWlsZF9sZSk6IEhhbmRsZSBOQU5zIGFuZCBnb2luZyBwYXN0IGluZmluaXR5LgoJ KGJ1aWxkX2x0KTogU2FtZS4KCShidWlsZF9nZSk6IFNhbWUuCgkoYnVpbGRfZ3QpOiBTYW1lLgoJ KGZvcGVyYXRvcl9sdDo6b3AxX3JhbmdlKTogQXZvaWQgYWRqdXN0bWVudHMgdG8gcmFuZ2UgaWYg YnVpbGRfKgoJcmV0dXJuZWQgZmFsc2UuCgkoZm9wZXJhdG9yX2x0OjpvcDJfcmFuZ2UpOiBTYW1l LgoJKGZvcGVyYXRvcl9sZTo6b3AxX3JhbmdlKTogU2FtZS4KCShmb3BlcmF0b3JfbGU6Om9wMl9y YW5nZSk6IFNhbWUuCgkoZm9wZXJhdG9yX2d0OjpvcDFfcmFuZ2UpOiBTYW1lLgoJKGZvcGVyYXRv cl9ndDo6b3AyX3JhbmdlKTogU2FtZS4KCmdjYy90ZXN0c3VpdGUvQ2hhbmdlTG9nOgoKCSogZ2Nj LmRnL3RyZWUtc3NhL3ZycC1mbG9hdC1pbmYtMS5jOiBOZXcgdGVzdC4KLS0tCiBnY2MvcmFuZ2Ut b3AtZmxvYXQuY2MgICAgICAgICAgICAgICAgICAgICAgICAgfCA5OSArKysrKysrKysrKysrKy0t LS0tCiAuLi4vZ2NjLmRnL3RyZWUtc3NhL3ZycC1mbG9hdC1pbmYtMS5jICAgICAgICAgfCAxNSAr KysKIDIgZmlsZXMgY2hhbmdlZCwgOTAgaW5zZXJ0aW9ucygrKSwgMjQgZGVsZXRpb25zKC0pCiBj cmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2EvdnJwLWZsb2F0 LWluZi0xLmMKCmRpZmYgLS1naXQgYS9nY2MvcmFuZ2Utb3AtZmxvYXQuY2MgYi9nY2MvcmFuZ2Ut b3AtZmxvYXQuY2MKaW5kZXggMDUwZjA3YTk4NjcuLjVmYmJhYTFmYjM2IDEwMDY0NAotLS0gYS9n Y2MvcmFuZ2Utb3AtZmxvYXQuY2MKKysrIGIvZ2NjL3JhbmdlLW9wLWZsb2F0LmNjCkBAIC0yMjQs MzYgKzIyNCw3OSBAQCBmcmFuZ2VfZHJvcF9uaW5mIChmcmFuZ2UgJnIsIHRyZWUgdHlwZSkKIAog Ly8gKFggPD0gVkFMKSBwcm9kdWNlcyB0aGUgcmFuZ2Ugb2YgWy1JTkYsIFZBTF0uCiAKLXN0YXRp YyB2b2lkCitzdGF0aWMgYm9vbAogYnVpbGRfbGUgKGZyYW5nZSAmciwgdHJlZSB0eXBlLCBjb25z dCBSRUFMX1ZBTFVFX1RZUEUgJnZhbCkKIHsKKyAgaWYgKHJlYWxfaXNuYW4gKCZ2YWwpKQorICAg IHsKKyAgICAgIHIuc2V0X3VuZGVmaW5lZCAoKTsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9 CiAgIHIuc2V0ICh0eXBlLCBkY29uc3RuaW5mLCB2YWwpOworICByZXR1cm4gdHJ1ZTsKIH0KIAog Ly8gKFggPCBWQUwpIHByb2R1Y2VzIHRoZSByYW5nZSBvZiBbLUlORiwgVkFMKS4KIAotc3RhdGlj IHZvaWQKK3N0YXRpYyBib29sCiBidWlsZF9sdCAoZnJhbmdlICZyLCB0cmVlIHR5cGUsIGNvbnN0 IFJFQUxfVkFMVUVfVFlQRSAmdmFsKQogeworICBpZiAocmVhbF9pc25hbiAoJnZhbCkpCisgICAg eworICAgICAgci5zZXRfdW5kZWZpbmVkICgpOworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K KyAgLy8gPCAtSU5GIGlzIG91dHNpZGUgdGhlIHJhbmdlLgorICBpZiAocmVhbF9pc2luZiAoJnZh bCwgMSkpCisgICAgeworICAgICAgaWYgKEhPTk9SX05BTlMgKHR5cGUpKQorCWZyYW5nZV9zZXRf bmFuIChyLCB0eXBlKTsKKyAgICAgIGVsc2UKKwlyLnNldF91bmRlZmluZWQgKCk7CisgICAgICBy ZXR1cm4gZmFsc2U7CisgICAgfQogICAvLyBIaWphY2sgTEUgYmVjYXVzZSB3ZSBvbmx5IHN1cHBv cnQgY2xvc2VkIGludGVydmFscy4KICAgYnVpbGRfbGUgKHIsIHR5cGUsIHZhbCk7CisgIHJldHVy biB0cnVlOwogfQogCiAvLyAoWCA+PSBWQUwpIHByb2R1Y2VzIHRoZSByYW5nZSBvZiBbVkFMLCAr SU5GXS4KIAotc3RhdGljIHZvaWQKK3N0YXRpYyBib29sCiBidWlsZF9nZSAoZnJhbmdlICZyLCB0 cmVlIHR5cGUsIGNvbnN0IFJFQUxfVkFMVUVfVFlQRSAmdmFsKQogeworICBpZiAocmVhbF9pc25h biAoJnZhbCkpCisgICAgeworICAgICAgci5zZXRfdW5kZWZpbmVkICgpOworICAgICAgcmV0dXJu IGZhbHNlOworICAgIH0KICAgci5zZXQgKHR5cGUsIHZhbCwgZGNvbnN0aW5mKTsKKyAgcmV0dXJu IHRydWU7CiB9CiAKIC8vIChYID4gVkFMKSBwcm9kdWNlcyB0aGUgcmFuZ2Ugb2YgKFZBTCwgK0lO Rl0uCiAKLXN0YXRpYyB2b2lkCitzdGF0aWMgYm9vbAogYnVpbGRfZ3QgKGZyYW5nZSAmciwgdHJl ZSB0eXBlLCBjb25zdCBSRUFMX1ZBTFVFX1RZUEUgJnZhbCkKIHsKKyAgaWYgKHJlYWxfaXNuYW4g KCZ2YWwpKQorICAgIHsKKyAgICAgIHIuc2V0X3VuZGVmaW5lZCAoKTsKKyAgICAgIHJldHVybiBm YWxzZTsKKyAgICB9CisgIC8vID4gK0lORiBpcyBvdXRzaWRlIHRoZSByYW5nZS4KKyAgaWYgKHJl YWxfaXNpbmYgKCZ2YWwsIDApKQorICAgIHsKKyAgICAgIGlmIChIT05PUl9OQU5TICh0eXBlKSkK KwlmcmFuZ2Vfc2V0X25hbiAociwgdHlwZSk7CisgICAgICBlbHNlCisJci5zZXRfdW5kZWZpbmVk ICgpOworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwogICAvLyBIaWphY2sgR0UgYmVjYXVz ZSB3ZSBvbmx5IHN1cHBvcnQgY2xvc2VkIGludGVydmFscy4KICAgYnVpbGRfZ2UgKHIsIHR5cGUs IHZhbCk7CisgIHJldHVybiB0cnVlOwogfQogCiAKQEAgLTUyMCwxMCArNTYzLDEyIEBAIGZvcGVy YXRvcl9sdDo6b3AxX3JhbmdlIChmcmFuZ2UgJnIsCiAgIHN3aXRjaCAoZ2V0X2Jvb2xfc3RhdGUg KHIsIGxocywgdHlwZSkpCiAgICAgewogICAgIGNhc2UgQlJTX1RSVUU6Ci0gICAgICBidWlsZF9s dCAociwgdHlwZSwgb3AyLnVwcGVyX2JvdW5kICgpKTsKLSAgICAgIHIuc2V0X25hbiAoZnBfcHJv cDo6Tk8pOwotICAgICAgLy8geCA8IHkgaW1wbGllcyB4IGlzIG5vdCArSU5GLgotICAgICAgZnJh bmdlX2Ryb3BfaW5mIChyLCB0eXBlKTsKKyAgICAgIGlmIChidWlsZF9sdCAociwgdHlwZSwgb3Ay LnVwcGVyX2JvdW5kICgpKSkKKwl7CisJICByLnNldF9uYW4gKGZwX3Byb3A6Ok5PKTsKKwkgIC8v IHggPCB5IGltcGxpZXMgeCBpcyBub3QgK0lORi4KKwkgIGZyYW5nZV9kcm9wX2luZiAociwgdHlw ZSk7CisJfQogICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEJSU19GQUxTRToKQEAgLTU0NiwxMCAr NTkxLDEyIEBAIGZvcGVyYXRvcl9sdDo6b3AyX3JhbmdlIChmcmFuZ2UgJnIsCiAgIHN3aXRjaCAo Z2V0X2Jvb2xfc3RhdGUgKHIsIGxocywgdHlwZSkpCiAgICAgewogICAgIGNhc2UgQlJTX1RSVUU6 Ci0gICAgICBidWlsZF9ndCAociwgdHlwZSwgb3AxLmxvd2VyX2JvdW5kICgpKTsKLSAgICAgIHIu c2V0X25hbiAoZnBfcHJvcDo6Tk8pOwotICAgICAgLy8geCA8IHkgaW1wbGllcyB5IGlzIG5vdCAt SU5GLgotICAgICAgZnJhbmdlX2Ryb3BfbmluZiAociwgdHlwZSk7CisgICAgICBpZiAoYnVpbGRf Z3QgKHIsIHR5cGUsIG9wMS5sb3dlcl9ib3VuZCAoKSkpCisJeworCSAgci5zZXRfbmFuIChmcF9w cm9wOjpOTyk7CisJICAvLyB4IDwgeSBpbXBsaWVzIHkgaXMgbm90IC1JTkYuCisJICBmcmFuZ2Vf ZHJvcF9uaW5mIChyLCB0eXBlKTsKKwl9CiAgICAgICBicmVhazsKIAogICAgIGNhc2UgQlJTX0ZB TFNFOgpAQCAtNjE4LDggKzY2NSw4IEBAIGZvcGVyYXRvcl9sZTo6b3AxX3JhbmdlIChmcmFuZ2Ug JnIsCiAgIHN3aXRjaCAoZ2V0X2Jvb2xfc3RhdGUgKHIsIGxocywgdHlwZSkpCiAgICAgewogICAg IGNhc2UgQlJTX1RSVUU6Ci0gICAgICBidWlsZF9sZSAociwgdHlwZSwgb3AyLnVwcGVyX2JvdW5k ICgpKTsKLSAgICAgIHIuc2V0X25hbiAoZnBfcHJvcDo6Tk8pOworICAgICAgaWYgKGJ1aWxkX2xl IChyLCB0eXBlLCBvcDIudXBwZXJfYm91bmQgKCkpKQorCXIuc2V0X25hbiAoZnBfcHJvcDo6Tk8p OwogICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEJSU19GQUxTRToKQEAgLTY0Miw4ICs2ODksOCBA QCBmb3BlcmF0b3JfbGU6Om9wMl9yYW5nZSAoZnJhbmdlICZyLAogICBzd2l0Y2ggKGdldF9ib29s X3N0YXRlIChyLCBsaHMsIHR5cGUpKQogICAgIHsKICAgICBjYXNlIEJSU19UUlVFOgotICAgICAg YnVpbGRfZ2UgKHIsIHR5cGUsIG9wMS5sb3dlcl9ib3VuZCAoKSk7Ci0gICAgICByLnNldF9uYW4g KGZwX3Byb3A6Ok5PKTsKKyAgICAgIGlmIChidWlsZF9nZSAociwgdHlwZSwgb3AxLmxvd2VyX2Jv dW5kICgpKSkKKwlyLnNldF9uYW4gKGZwX3Byb3A6Ok5PKTsKICAgICAgIGJyZWFrOwogCiAgICAg Y2FzZSBCUlNfRkFMU0U6CkBAIC03MTIsMTAgKzc1OSwxMiBAQCBmb3BlcmF0b3JfZ3Q6Om9wMV9y YW5nZSAoZnJhbmdlICZyLAogICBzd2l0Y2ggKGdldF9ib29sX3N0YXRlIChyLCBsaHMsIHR5cGUp KQogICAgIHsKICAgICBjYXNlIEJSU19UUlVFOgotICAgICAgYnVpbGRfZ3QgKHIsIHR5cGUsIG9w Mi5sb3dlcl9ib3VuZCAoKSk7Ci0gICAgICByLnNldF9uYW4gKGZwX3Byb3A6Ok5PKTsKLSAgICAg IC8vIHggPiB5IGltcGxpZXMgeCBpcyBub3QgLUlORi4KLSAgICAgIGZyYW5nZV9kcm9wX25pbmYg KHIsIHR5cGUpOworICAgICAgaWYgKGJ1aWxkX2d0IChyLCB0eXBlLCBvcDIubG93ZXJfYm91bmQg KCkpKQorCXsKKwkgIHIuc2V0X25hbiAoZnBfcHJvcDo6Tk8pOworCSAgLy8geCA+IHkgaW1wbGll cyB4IGlzIG5vdCAtSU5GLgorCSAgZnJhbmdlX2Ryb3BfbmluZiAociwgdHlwZSk7CisJfQogICAg ICAgYnJlYWs7CiAKICAgICBjYXNlIEJSU19GQUxTRToKQEAgLTczOCwxMCArNzg3LDEyIEBAIGZv cGVyYXRvcl9ndDo6b3AyX3JhbmdlIChmcmFuZ2UgJnIsCiAgIHN3aXRjaCAoZ2V0X2Jvb2xfc3Rh dGUgKHIsIGxocywgdHlwZSkpCiAgICAgewogICAgIGNhc2UgQlJTX1RSVUU6Ci0gICAgICBidWls ZF9sdCAociwgdHlwZSwgb3AxLnVwcGVyX2JvdW5kICgpKTsKLSAgICAgIHIuc2V0X25hbiAoZnBf cHJvcDo6Tk8pOwotICAgICAgLy8geCA+IHkgaW1wbGllcyB5IGlzIG5vdCArSU5GLgotICAgICAg ZnJhbmdlX2Ryb3BfaW5mIChyLCB0eXBlKTsKKyAgICAgIGlmIChidWlsZF9sdCAociwgdHlwZSwg b3AxLnVwcGVyX2JvdW5kICgpKSkKKwl7CisJICByLnNldF9uYW4gKGZwX3Byb3A6Ok5PKTsKKwkg IC8vIHggPiB5IGltcGxpZXMgeSBpcyBub3QgK0lORi4KKwkgIGZyYW5nZV9kcm9wX2luZiAociwg dHlwZSk7CisJfQogICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEJSU19GQUxTRToKZGlmZiAtLWdp dCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3NhL3ZycC1mbG9hdC1pbmYtMS5jIGIvZ2Nj L3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2EvdnJwLWZsb2F0LWluZi0xLmMKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjFkMjFjY2U0MWU2Ci0tLSAvZGV2L251bGwKKysr IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2EvdnJwLWZsb2F0LWluZi0xLmMKQEAgLTAs MCArMSwxNSBAQAorLy8geyBkZy1kbyBjb21waWxlIH0KKy8vIHsgZGctb3B0aW9ucyAiLU8yIC1m ZHVtcC10cmVlLWV2cnAtZGV0YWlscyIgfQorCit2b2lkIGZvbyAoKTsKK3ZvaWQgYmFyIChkb3Vi bGUpOworCit2b2lkIGZ1bmt5KGRvdWJsZSBmLCBkb3VibGUgZykKK3sKKyAgaWYgKGYgPD0gX19i dWlsdGluX2luZiAoKSkKKyAgICBmb28gKCk7CisgIGVsc2UKKyAgICBiYXIgKGYpOworfQorCisv LyB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtbm90ICIgSW5mLCAgSW5mIiAiZXZycCIgfSB9 Ci0tIAoyLjM3LjEKCg== --00000000000052016405e800c4ec--