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 164123858C62 for ; Tue, 28 Mar 2023 13:19:38 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 164123858C62 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=1680009577; 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=6VMvy1sSfhoaUUbmThQuBU+RWmSV2aTRhz+4HEuWT4c=; b=VSXuhbc8G4VVSemB+2cFvj2qnftSfcW4BbraWkf4xG+VkY7K/ezjlshdofZKZulMeLUfEw 2xEZ8OP9yG9/BZ0YC+ScJLJvm2XGZxvCJ+AreUZ+vXVreqvIHlbTYe/iSjOm4/9QqJ8Jlz fAqs5uKb4/eQfDkc+HyuZOt77TRJVKQ= Received: from mail-qt1-f200.google.com (mail-qt1-f200.google.com [209.85.160.200]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-621-Qf4mjvdiMreHoCndYoOGMQ-1; Tue, 28 Mar 2023 09:19:36 -0400 X-MC-Unique: Qf4mjvdiMreHoCndYoOGMQ-1 Received: by mail-qt1-f200.google.com with SMTP id x5-20020a05622a000500b003e259c363f9so8102816qtw.22 for ; Tue, 28 Mar 2023 06:19:36 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1680009575; h=in-reply-to:from:references:cc:to:content-language:subject :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=C6Qhd8IpYqcMe0OyihDozgHG3PgvEcNDtlGWBO6+UvM=; b=0U9OQoCKC/LNlByqm7NqY4MUKBjjc1QP6X4ucElWNtZRxPc9MjlK+vmIJkEqaX5oN5 Kl3gKvsaVDfXjyPydHtvktHSTv2VQMOJAVN8KWW3E0z6DEdMg6TR38yzWnyMpIEtezIw dxAOwsft/B+5NTdQJl0MZpfY0/HwFcGDBZ3nX0Cw+aiylBpR/pEHRfvpkkhE4gPhCtYP xR4b9N3K3ZNN7KgJcEFK4+ux6VqLqt27PRXEyNMRQzKUUo/gVjHwbofx8wwXqrezVm68 bBSpYRyBQhy//O8CvmXVwvqEg1jkg1/Tab26mllPSA6HtjykGEumhfQIMYdLPeTqAJIT AqJw== X-Gm-Message-State: AO0yUKWcSWIzWHCxUlrm26catWXkgGJZQ12R1y91NtIbZxM7qnTHat18 ukldqufiLtw0H+WxesVXI9tzMyfq2HYxmURe/Csv0Uij/psl0juRnFKvNfs4GnhIVzke2sl0ilg 1FdZYZ5ErhpjeSE2WBw== X-Received: by 2002:ac8:5dcb:0:b0:3e4:6329:448a with SMTP id e11-20020ac85dcb000000b003e46329448amr25688662qtx.65.1680009575704; Tue, 28 Mar 2023 06:19:35 -0700 (PDT) X-Google-Smtp-Source: AK7set/IIauTe7i8YBRmMddkGbFzsiJYEvE2+YKUiCmo+GcokUAbNAI0TbIa8uKAObGSmhMNXA5UfQ== X-Received: by 2002:ac8:5dcb:0:b0:3e4:6329:448a with SMTP id e11-20020ac85dcb000000b003e46329448amr25688631qtx.65.1680009575375; Tue, 28 Mar 2023 06:19:35 -0700 (PDT) Received: from ?IPV6:2607:fea8:a263:f600::759b? ([2607:fea8:a263:f600::759b]) by smtp.gmail.com with ESMTPSA id d10-20020ac8668a000000b003e39106bdb2sm5074104qtp.31.2023.03.28.06.19.34 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 28 Mar 2023 06:19:34 -0700 (PDT) Message-ID: Date: Tue, 28 Mar 2023 09:19:33 -0400 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.8.0 Subject: [PATCH] PR tree-optimization/109274 -Fix compute_operand when op1 == op2 symbolically. To: Jakub Jelinek , Aldy Hernandez Cc: gcc-patches , Richard Biener References: <2e0b9177-f8ce-d55a-d6bb-71eb89a9700d@redhat.com> <86a51d9f-209b-33c4-053f-530210266c4c@redhat.com> From: Andrew MacLeod In-Reply-To: X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: multipart/mixed; boundary="------------LpJZYyBtL0uoHgUjcwr491aH" Content-Language: en-US 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_NONE,RCVD_IN_MSPIKE_H2,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: This is a multi-part message in MIME format. --------------LpJZYyBtL0uoHgUjcwr491aH Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 3/24/23 12:36, Jakub Jelinek wrote: > On Fri, Mar 24, 2023 at 11:52:30AM -0400, Andrew MacLeod wrote: >> Thanks.. Ive incorporated it into my commit  too. > Note, both my earlier version of the patch and your patch regress: > FAIL: gcc.dg/tree-ssa/vrp-float-3a.c scan-tree-dump-not evrp "link_error" > FAIL: gcc.dg/tree-ssa/vrp-float-4a.c scan-tree-dump-not evrp "link_error" > > Jakub > OK, that was fun. I commented in the PR, but the root issue is the way I was trying to communicate symbolic equivalence on operands to the compute_operand routines. [1, 1 ]= a_1 != a_1 I was creating a relation record between op1 and op2 indicating they were equivalent.    THis record then gets passed up the gori call chain. Reality is that this is not a true equivalence... without looking a the ranges, we dont know that that is true for general application, and and furthermore, when applied to something like a1 != a1, you can see the problem... Once I corrected the value_relation record to create records with the same operand, things went south. What we really need is to locally identify when op1 and op2 are the same symbol, and if there is no other information, pass it locally on that one statement  to the range-op handler. Then, once we have processed the statement, we invoke the handler for that statement to cvreate a record which is passed up the chain. so for:     a_1 = b_4 + 1.0     [1, 1] = (a_1 != a_1) compute_operand_1 starts with no relation record, recognizes symbolically op1 and op2 are the same, and passes EQ_EXPR locally as the op1_op2 relation to the handler for NE_EXPR.   That handler utilizes the range of op2 to detemine whether != is true or not based on knowledge that op1 and op2 are the same value.     (for integer always false, for float, takes a look at NAN) and produces a result. Before invoking compute_operand to calculate b_4 with the result of a_1,   handler.op1_op2_relation (lhs); is invoked to determine if there is a relation generated by the statement, which will generate  (a_1 != a_1), and pass that to compute operand for use in evaluating b_4. Bootstraps on x86_64-pc-linux-gnu with no regressions.  OK for trunk? Andrew --------------LpJZYyBtL0uoHgUjcwr491aH Content-Type: text/x-patch; charset=UTF-8; name="274f.diff" Content-Disposition: attachment; filename="274f.diff" Content-Transfer-Encoding: base64 Y29tbWl0IDk3ZjljMjRmZTQ3MWI5NzAxY2YzYmE4OTkwMWUxNDZhOWM1MmYzYWQKQXV0aG9yOiBB bmRyZXcgTWFjTGVvZCA8YW1hY2xlb2RAcmVkaGF0LmNvbT4KRGF0ZTogICBGcmkgTWFyIDI0IDEx OjIxOjIwIDIwMjMgLTA0MDAKCiAgICBGaXggY29tcHV0ZV9vcGVyYW5kIHdoZW4gb3AxID09IG9w MiBzeW1ib2xpY2FsbHkuCiAgICAKICAgIEZpcnN0LCBjbGFzcyB2YWx1ZV9yZWxhdGlvbiBzaG91 bGQgbm90IHNhbml0aXplIHJlY29yZHMuIGp1c3QgY3JlYXRlCiAgICB3aGF0IGlzIGFza2VkLgog ICAgCiAgICBTZWNvbmQuLCBpZiB0aGVyZSBpcyBub3QgYSByZWxhdGlvbiByZWNvcmQsIGNvbXB1 dGVfb3BlcmFuZCB3YXMKICAgIGNyZWF0aW5nIG9uZSBmb3Igb3AxID09IG9wMiBpZiBvcDEgYW5k IG9wMiB3ZXJlIHRoZSBzYW1lIHN5bWJvbC4gICBUaGlzCiAgICBpcyBub3QgdGhlIGNvcnJlY3Qg d2F5IHRvIGNvbW11bmljYXRlIHRoZSBpbmZvcm1hdGlvbiwgYXMgdGhhdCByZWNvcmQKICAgIHdp bGwgY29udGludWUgdG8gYmUgcGFzc2VkIGFsb25nIHRoZSBHT1JJIHVud2luZCBjaGFpbi4KICAg IAogICAgSW5zdGVhZCwgc2ltcGx5IHBhc3MgdGhhdCBpbmZvcm1hdGlvbiBsb2NhbGx5IHRvIHRo ZSBvcFhfcmFuZ2Ugcm91dGluZQogICAgZm9yIG9ubHkgdGhlIGN1cnJlbnQgc3RhdGVtZW50Lgog ICAgCiAgICAgICAgICAgIFBSIHRyZWUtb3B0aW1pemF0aW9uLzEwOTI2NQogICAgICAgICAgICBQ UiB0cmVlLW9wdGltaXphdGlvbi8xMDkyNzQKICAgICAgICAgICAgZ2NjLwogICAgICAgICAgICAq IGdpbXBsZS1yYW5nZS1nb3JpLmNjIChnb3JpX2NvbXB1dGU6OmNvbXB1dGVfb3BlcmFuZF9yYW5n ZSk6IERvCiAgICAgICAgICAgIG5vdCBjcmVhdGUgYSByZWxhdGlvbiByZWNvcmQgaXMgb3AxIGFu ZCBvcDIgYXJlIHRoZSBzYW1lIHN5bWJvbC4KICAgICAgICAgICAgKGdvcmlfY29tcHV0ZTo6Y29t cHV0ZV9vcGVyYW5kMV9yYW5nZSk6IFBhc3Mgb3AxID09IG9wMiB0byB0aGUKICAgICAgICAgICAg aGFuZGxlciBmb3IgdGhpcyBzdG10LCBidXQgY3JlYXRlIGEgbmV3IHJlY29yZCBvbmx5IGlmIHRo aXMgc3RhdGVtZW50CiAgICAgICAgICAgIGdlbmVyYXRlcyBhIHJlbGF0aW9uIGJhc2VkIG9uIHRo ZSByYW5nZXMuCiAgICAgICAgICAgIChnb3JpX2NvbXB1dGU6OmNvbXB1dGVfb3BlcmFuZDJfcmFu Z2UpOiBEaXR0by4KICAgICAgICAgICAgKiB2YWx1ZS1yZWxhdGlvbi5oICh2YWx1ZV9yZWxhdGlv bjo6c2V0X3JlbGF0aW9uKTogQWx3YXlzIGNyZWF0ZSB0aGUKICAgICAgICAgICAgcmVjb3JkIHRo YXQgaXMgcmVxdWVzdGVkLgogICAgCiAgICAgICAgICAgIGdjYy90ZXN0c3VpdGUvCiAgICAgICAg ICAgICogZ2NjLmRnL3ByMTA5Mjc0LmM6IE5ldy4KICAgICAgICAgICAgKiBnZm9ydHJhbi5kZy9w cjEwOTI2NS5mOTA6IE5ldy4KCmRpZmYgLS1naXQgYS9nY2MvZ2ltcGxlLXJhbmdlLWdvcmkuY2Mg Yi9nY2MvZ2ltcGxlLXJhbmdlLWdvcmkuY2MKaW5kZXggM2MwMDQ0ODgxZmIuLmI5YzNiYTFhMzE0 IDEwMDY0NAotLS0gYS9nY2MvZ2ltcGxlLXJhbmdlLWdvcmkuY2MKKysrIGIvZ2NjL2dpbXBsZS1y YW5nZS1nb3JpLmNjCkBAIC02MjMsMjEgKzYyMyw2IEBAIGdvcmlfY29tcHV0ZTo6Y29tcHV0ZV9v cGVyYW5kX3JhbmdlICh2cmFuZ2UgJnIsIGdpbXBsZSAqc3RtdCwKICAgdHJlZSBvcDEgPSBnaW1w bGVfcmFuZ2Vfc3NhX3AgKGhhbmRsZXIub3BlcmFuZDEgKCkpOwogICB0cmVlIG9wMiA9IGdpbXBs ZV9yYW5nZV9zc2FfcCAoaGFuZGxlci5vcGVyYW5kMiAoKSk7CiAKLSAgLy8gSWYgdGhlcmUgaXMg YSByZWxhdGlvbiwgdXNlIGl0IGluc3RlYWQgb2YgYW55IHBhc3NlZCBpbi4gIFRoaXMgd2lsbCBh bGxvdwotICAvLyBtdWx0aXBsZSByZWxhdGlvbnMgdG8gYmUgcHJvY2Vzc2VkIGluIGNvbXBvdW5k IGxvZ2ljYWxzLgotICBpZiAob3AxICYmIG9wMikKLSAgICB7Ci0gICAgICByZWxhdGlvbl9raW5k IGsgPSBoYW5kbGVyLm9wMV9vcDJfcmVsYXRpb24gKGxocyk7Ci0gICAgICAvLyBJZiB0aGVyZSBp cyBubyByZWxhdGlvbiwgYW5kIG9wMSA9PSBvcDIsIGNyZWF0ZSBhIHJlbGF0aW9uLgotICAgICAg aWYgKCF2cmVsX3B0ciAmJiBrID09IFZSRUxfVkFSWUlORyAmJiBvcDEgPT0gb3AyKQotCWsgPSBW UkVMX0VROwotICAgICAgaWYgKGsgIT0gVlJFTF9WQVJZSU5HKQotICAgICAgIHsKLQkgdnJlbC5z ZXRfcmVsYXRpb24gKGssIG9wMSwgb3AyKTsKLQkgdnJlbF9wdHIgPSAmdnJlbDsKLSAgICAgICB9 Ci0gICAgfQotCiAgIC8vIEhhbmRsZSBlbmQgb2YgbG9va3VwIGZpcnN0LgogICBpZiAob3AxID09 IG5hbWUpCiAgICAgcmV0dXJuIGNvbXB1dGVfb3BlcmFuZDFfcmFuZ2UgKHIsIGhhbmRsZXIsIGxo cywgbmFtZSwgc3JjLCB2cmVsX3B0cik7CkBAIC0xMDkzLDYgKzEwNzgsNyBAQCBnb3JpX2NvbXB1 dGU6OmNvbXB1dGVfb3BlcmFuZDFfcmFuZ2UgKHZyYW5nZSAmciwKIAkJCQkgICAgICBjb25zdCB2 cmFuZ2UgJmxocywgdHJlZSBuYW1lLAogCQkJCSAgICAgIGZ1cl9zb3VyY2UgJnNyYywgdmFsdWVf cmVsYXRpb24gKnJlbCkKIHsKKyAgdmFsdWVfcmVsYXRpb24gbG9jYWxfcmVsOwogICBnaW1wbGUg KnN0bXQgPSBoYW5kbGVyLnN0bXQgKCk7CiAgIHRyZWUgb3AxID0gaGFuZGxlci5vcGVyYW5kMSAo KTsKICAgdHJlZSBvcDIgPSBoYW5kbGVyLm9wZXJhbmQyICgpOwpAQCAtMTEwMSw2ICsxMDg3LDcg QEAgZ29yaV9jb21wdXRlOjpjb21wdXRlX29wZXJhbmQxX3JhbmdlICh2cmFuZ2UgJnIsCiAgIHJl bGF0aW9uX3RyaW8gdHJpbzsKICAgaWYgKHJlbCkKICAgICB0cmlvID0gcmVsLT5jcmVhdGVfdHJp byAobGhzX25hbWUsIG9wMSwgb3AyKTsKKyAgcmVsYXRpb25fa2luZCBvcF9vcCA9IHRyaW8ub3Ax X29wMiAoKTsKIAogICBWYWx1ZV9SYW5nZSBvcDFfcmFuZ2UgKFRSRUVfVFlQRSAob3AxKSk7CiAg IFZhbHVlX1JhbmdlIHRtcCAoVFJFRV9UWVBFIChvcDEpKTsKQEAgLTExMTMsMTAgKzExMDAsMjYg QEAgZ29yaV9jb21wdXRlOjpjb21wdXRlX29wZXJhbmQxX3JhbmdlICh2cmFuZ2UgJnIsCiAgIGlm IChvcDIpCiAgICAgewogICAgICAgc3JjLmdldF9vcGVyYW5kIChvcDJfcmFuZ2UsIG9wMik7Ci0g ICAgICByZWxhdGlvbl9raW5kIG9wX29wID0gdHJpby5vcDFfb3AyICgpOworCisgICAgICAvLyBJ ZiB0aGVyZSBpcyBhIHJlbGF0aW9uIGJldHdlbiBvcDEgYW5kIG9wMiwgdXNlIGl0IGluc3RlYWQu CisgICAgICAvLyBUaGlzIGFsbG93cyBtdWx0aXBsZSByZWxhdGlvbnMgdG8gYmUgcHJvY2Vzc2Vk IGluIGNvbXBvdW5kIGxvZ2ljYWxzLgorICAgICAgaWYgKGdpbXBsZV9yYW5nZV9zc2FfcCAob3Ax KSAmJiBnaW1wbGVfcmFuZ2Vfc3NhX3AgKG9wMikpCisJeworCSAgcmVsYXRpb25fa2luZCBrID0g aGFuZGxlci5vcDFfb3AyX3JlbGF0aW9uIChsaHMpOworCSAgaWYgKGsgIT0gVlJFTF9WQVJZSU5H KQorCSAgICB7CisJICAgICAgb3Bfb3AgPSBrOworCSAgICAgIGxvY2FsX3JlbC5zZXRfcmVsYXRp b24gKG9wX29wLCBvcDEsIG9wMik7CisJICAgICAgcmVsID0gJmxvY2FsX3JlbDsKKwkgICAgfQor CX0KKwogICAgICAgaWYgKG9wX29wICE9IFZSRUxfVkFSWUlORykKIAlyZWZpbmVfdXNpbmdfcmVs YXRpb24gKG9wMSwgb3AxX3JhbmdlLCBvcDIsIG9wMl9yYW5nZSwgc3JjLCBvcF9vcCk7CiAKKyAg ICAgIC8vIElmIG9wMSA9PSBvcDIsIGNyZWF0ZSBhIG5ldyB0cmlvIGZvciBqdXN0IHRoaXMgY2Fs bC4KKyAgICAgIGlmIChvcDEgPT0gb3AyICYmIGdpbXBsZV9yYW5nZV9zc2FfcCAob3AxKSkKKwl0 cmlvID0gcmVsYXRpb25fdHJpbyAodHJpby5saHNfb3AxICgpLCB0cmlvLmxoc19vcDIgKCksIFZS RUxfRVEpOwogICAgICAgaWYgKCFoYW5kbGVyLmNhbGNfb3AxICh0bXAsIGxocywgb3AyX3Jhbmdl LCB0cmlvKSkKIAlyZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtMTE4NSw2ICsxMTg4LDcgQEAgZ29y aV9jb21wdXRlOjpjb21wdXRlX29wZXJhbmQyX3JhbmdlICh2cmFuZ2UgJnIsCiAJCQkJICAgICAg Y29uc3QgdnJhbmdlICZsaHMsIHRyZWUgbmFtZSwKIAkJCQkgICAgICBmdXJfc291cmNlICZzcmMs IHZhbHVlX3JlbGF0aW9uICpyZWwpCiB7CisgIHZhbHVlX3JlbGF0aW9uIGxvY2FsX3JlbDsKICAg Z2ltcGxlICpzdG10ID0gaGFuZGxlci5zdG10ICgpOwogICB0cmVlIG9wMSA9IGhhbmRsZXIub3Bl cmFuZDEgKCk7CiAgIHRyZWUgb3AyID0gaGFuZGxlci5vcGVyYW5kMiAoKTsKQEAgLTEyMDEsOSAr MTIwNSwyNiBAQCBnb3JpX2NvbXB1dGU6OmNvbXB1dGVfb3BlcmFuZDJfcmFuZ2UgKHZyYW5nZSAm ciwKICAgaWYgKHJlbCkKICAgICB0cmlvID0gcmVsLT5jcmVhdGVfdHJpbyAobGhzX25hbWUsIG9w MSwgb3AyKTsKICAgcmVsYXRpb25fa2luZCBvcF9vcCA9IHRyaW8ub3AxX29wMiAoKTsKKworICAv LyBJZiB0aGVyZSBpcyBhIHJlbGF0aW9uIGJldHdlbiBvcDEgYW5kIG9wMiwgdXNlIGl0IGluc3Rl YWQuCisgIC8vIFRoaXMgYWxsb3dzIG11bHRpcGxlIHJlbGF0aW9ucyB0byBiZSBwcm9jZXNzZWQg aW4gY29tcG91bmQgbG9naWNhbHMuCisgIGlmIChnaW1wbGVfcmFuZ2Vfc3NhX3AgKG9wMSkgJiYg Z2ltcGxlX3JhbmdlX3NzYV9wIChvcDIpKQorICAgIHsKKyAgICAgIHJlbGF0aW9uX2tpbmQgayA9 IGhhbmRsZXIub3AxX29wMl9yZWxhdGlvbiAobGhzKTsKKyAgICAgIGlmIChrICE9IFZSRUxfVkFS WUlORykKKwl7CisJICBvcF9vcCA9IGs7CisJICBsb2NhbF9yZWwuc2V0X3JlbGF0aW9uIChvcF9v cCwgb3AxLCBvcDIpOworCSAgcmVsID0gJmxvY2FsX3JlbDsKKwl9CisgICAgfQorCiAgIGlmIChv cF9vcCAhPSBWUkVMX1ZBUllJTkcpCiAgICAgcmVmaW5lX3VzaW5nX3JlbGF0aW9uIChvcDEsIG9w MV9yYW5nZSwgb3AyLCBvcDJfcmFuZ2UsIHNyYywgb3Bfb3ApOwogCisgIC8vIElmIG9wMSA9PSBv cDIsIGNyZWF0ZSBhIG5ldyB0cmlvIGZvciB0aGlzIHN0bXQuCisgIGlmIChvcDEgPT0gb3AyICYm IGdpbXBsZV9yYW5nZV9zc2FfcCAob3AxKSkKKyAgICB0cmlvID0gcmVsYXRpb25fdHJpbyAodHJp by5saHNfb3AxICgpLCB0cmlvLmxoc19vcDIgKCksIFZSRUxfRVEpOwogICAvLyBJbnRlcnNlY3Qg d2l0aCByYW5nZSBmb3Igb3AyIGJhc2VkIG9uIGxocyBhbmQgb3AxLgogICBpZiAoIWhhbmRsZXIu Y2FsY19vcDIgKHRtcCwgbGhzLCBvcDFfcmFuZ2UsIHRyaW8pKQogICAgIHJldHVybiBmYWxzZTsK ZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ByMTA5Mjc0LmMgYi9nY2MvdGVzdHN1 aXRlL2djYy5kZy9wcjEwOTI3NC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwLi41ZGJjMDIzMmY4ZQotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRn L3ByMTA5Mjc0LmMKQEAgLTAsMCArMSwxNiBAQAorLyogUFIgdHJlZS1vcHRpbWl6YXRpb24vMTA5 Mjc0ICovCisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1vcHRpb25zICItTzIgIiB9 ICovCisKK2Zsb2F0IGEsIGIsIGM7CitpbnQgZDsKK2Zsb2F0IGJhciAodm9pZCk7CisKK3ZvaWQK K2ZvbyAodm9pZCkKK3sKKyAgYSA9IDAgKiAtKDIuMGYgKiBjKTsKKyAgZCA9IGEgIT0gYSA/IDAg OiBiYXIgKCk7CisgIGIgPSBjOworfQorCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2dmb3J0 cmFuLmRnL3ByMTA5MjY1LmY5MCBiL2djYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvcHIxMDkyNjUu ZjkwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4wZDcxMjRjNzc0MQot LS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvcHIxMDkyNjUuZjkw CkBAIC0wLDAgKzEsMzkgQEAKKyEgUFIgdHJlZS1vcHRpbWl6YXRpb24vMTA5MjY1CishIHsgZGct ZG8gY29tcGlsZSB9CishIHsgZGctb3B0aW9ucyAiLU8zIC13IiB9CisKK21vZHVsZSBwcjEwOTI2 NQorICBpbnRlZ2VyLCBwYXJhbWV0ZXIgOjogcjggPSBzZWxlY3RlZF9yZWFsX2tpbmQgKDEyKQor Y29udGFpbnMKKyAgc3Vicm91dGluZSBmb28gKGIsIGMsIGQsIGUsIGYpCisgICAgaW1wbGljaXQg bm9uZQorICAgIGxvZ2ljYWwgOjogYgorICAgIHJlYWwgKGtpbmQgPSByOCkgOjogYywgZCwgZSwg ZiwgaQorICAgIGlmIChiKSB0aGVuCisgICAgICBjID0gYmFyIChjICogZCwgZSkKKyAgICAgIGkg PSBiYXIgKGYsIGMpCisgICAgICBjYWxsIGJheiAoaSkKKyAgICAgIGNhbGwgYmF6ICgtaSkKKyAg ICBlbmQgaWYKKyAgZW5kIHN1YnJvdXRpbmUgZm9vCisgIGZ1bmN0aW9uIGJhciAoYSwgYikKKyAg ICBpbXBsaWNpdCBub25lCisgICAgcmVhbCAoa2luZCA9IHI4KSA6OiBiYXIKKyAgICByZWFsIChr aW5kID0gcjgpIDo6IGEsIGIKKyAgICBiYXIgPSBhICsgYgorICBlbmQgZnVuY3Rpb24gYmFyCisg IHN1YnJvdXRpbmUgYmF6IChiKQorICAgIGltcGxpY2l0IG5vbmUKKyAgICByZWFsIChraW5kID0g cjgpIDo6IGIsIGQsIGUsIGYsIGcsIGgsIGkKKyAgICBkID0gYgorICAgIGkgPSAwCisgICAgZSA9 IGQKKyAgICBmID0gZAorICAgIGcgPSBkCisgIDEwIGNvbnRpbnVlCisgICAgaWYgKChlLmVxLmQp IC5hbmQuIChmLmVxLmQpIC5hbmQuIChnLmVxLmQpIC5hbmQuIChoLmVxLmQpKSB0aGVuCisgICAg ICBoID0gaQorICAgICAgZ290byAxMAorICAgIGVuZCBpZgorICBlbmQgc3Vicm91dGluZSBiYXoK K2VuZCBtb2R1bGUgcHIxMDkyNjUKZGlmZiAtLWdpdCBhL2djYy92YWx1ZS1yZWxhdGlvbi5oIGIv Z2NjL3ZhbHVlLXJlbGF0aW9uLmgKaW5kZXggMzZhNzU4NjJjYzcuLjMxNzdlY2IxYWQwIDEwMDY0 NAotLS0gYS9nY2MvdmFsdWUtcmVsYXRpb24uaAorKysgYi9nY2MvdmFsdWUtcmVsYXRpb24uaApA QCAtNDQ1LDEzICs0NDUsNiBAQCB2YWx1ZV9yZWxhdGlvbjo6c2V0X3JlbGF0aW9uIChyZWxhdGlv bl9raW5kIHIsIHRyZWUgbjEsIHRyZWUgbjIpCiB7CiAgIGdjY19jaGVja2luZ19hc3NlcnQgKFRS RUVfQ09ERSAobjEpID09IFNTQV9OQU1FCiAJCSAgICAgICAmJiBUUkVFX0NPREUgKG4yKSA9PSBT U0FfTkFNRSk7Ci0gIGlmIChuMSA9PSBuMiAmJiByICE9IFZSRUxfRVEpCi0gICAgewotICAgICAg cmVsYXRlZCA9IFZSRUxfVkFSWUlORzsKLSAgICAgIG5hbWUxID0gTlVMTF9UUkVFOwotICAgICAg bmFtZTIgPSBOVUxMX1RSRUU7Ci0gICAgICByZXR1cm47Ci0gICAgfQogICByZWxhdGVkID0gcjsK ICAgbmFtZTEgPSBuMTsKICAgbmFtZTIgPSBuMjsK --------------LpJZYyBtL0uoHgUjcwr491aH--