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 31F5F3839DE5 for ; Thu, 29 Sep 2022 22:36:59 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 31F5F3839DE5 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=1664491018; 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; bh=GTOqdAdEbiNojwpwjwdTAbgt1zclJtY7PD++JOXqt/0=; b=cFf8R8CuzrvozzhOuBPPWaAgzKNxIw4z3/nLS/3CVx2Tl8dtIpsrpkgyY5uq+zZk3zBOMK p8O6xnOFtEFdOoejyQgxaeLjk1eEsKdmOpvdQLXMUHAuYgMy1/fdhsKwDYqPysB/vQmEy7 1Q7UkGzqD5kLCcW5dZV2yv9zv/DiU7c= Received: from mail-qv1-f70.google.com (mail-qv1-f70.google.com [209.85.219.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_128_GCM_SHA256) id us-mta-21-vrA2qutBOh-tIO6kYB1_Fg-1; Thu, 29 Sep 2022 18:36:57 -0400 X-MC-Unique: vrA2qutBOh-tIO6kYB1_Fg-1 Received: by mail-qv1-f70.google.com with SMTP id mo5-20020a056214330500b004ad711537a6so1884669qvb.10 for ; Thu, 29 Sep 2022 15:36:57 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=subject:from:cc:to:content-language:user-agent:mime-version:date :message-id:x-gm-message-state:from:to:cc:subject:date; bh=lTg6+/Fb6lcyIF8LXml9qdla0bYPjatdO63CBDiRnOo=; b=J+OOHetSQTvNyTyEL0zU5EDVlJj0JFnjuYM/gXcsQfyajhwP+X2eLBgy2IF6Lqirtg ImiCXX1r5y9uTmp4+4CTZYOGbeKbLwxDDCAh4/Ckl58gBXilehUZrtg/FIsRhGOGyHjl 5yVvirglfFyv4II64H4KjFUi5QE+kLC8UEDy3h/YSvAhOgPWZr4Oj29YZCvY7rvMuLAx tA9oXI83e4QfA4rIAKzwhJFmx20oefgxQrrulWYjy7/TbV+Vgc9yQBZqY2sxy2nZrXOc sYHYnmmQNcP6PrqbY6me0jcRxo9ye0kkx/VemczjbbNVWXIsQdyLU2tGIxrP9rGCgpzO 5AVg== X-Gm-Message-State: ACrzQf2QAGIZh/Xka/GTS4ha1O3vb+ArCGoBz7NWlXssYWmET6mo4MGg L0yv2ZW6fZ0ACt7DUxalOlN5xdYK6Bp2u2by/97Y618m/gHa7tKp0IzstCrJG5JM51OU03WfCKY xHfU1PpDsLhP9NUsWiC2zLKsfCuBIWTaQIj2b1VViHXNdNPfTlT+Fn7Cf7iDdwCiI0mJ4fA== X-Received: by 2002:a37:68d6:0:b0:6cb:cf29:dfb with SMTP id d205-20020a3768d6000000b006cbcf290dfbmr3972968qkc.406.1664491016413; Thu, 29 Sep 2022 15:36:56 -0700 (PDT) X-Google-Smtp-Source: AMsMyM5ohaZFzzcZrR3GMilluIs3ZQvET/r55OR2KyRB3Iz1C7D4enOdFMX9Sz7bHmYR5eRO/7CQsw== X-Received: by 2002:a37:68d6:0:b0:6cb:cf29:dfb with SMTP id d205-20020a3768d6000000b006cbcf290dfbmr3972945qkc.406.1664491016088; Thu, 29 Sep 2022 15:36:56 -0700 (PDT) Received: from ?IPV6:2607:fea8:a263:f600::3dbe? ([2607:fea8:a263:f600::3dbe]) by smtp.gmail.com with ESMTPSA id a21-20020ac86115000000b0035d1f846b91sm391790qtm.64.2022.09.29.15.36.54 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 29 Sep 2022 15:36:55 -0700 (PDT) Message-ID: Date: Thu, 29 Sep 2022 18:36:53 -0400 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.2.1 To: gcc-patches Cc: "hernandez, aldy" From: Andrew MacLeod Subject: [PATCH] Refine ranges using relations in GORI. X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: multipart/mixed; boundary="------------uVkb5GfoxGODzrVMBIIbNM4d" Content-Language: en-US X-Spam-Status: No, score=-12.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 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. --------------uVkb5GfoxGODzrVMBIIbNM4d Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit This allows GORI to recognize when a relation passed in applies to the 2 operands of the current statement.  Check to see if further range refinement is possible before proceeding. There are 2 primary ways this can happen. 1)  The relation record indicates there is a relation between the LHS and the operand being calculated.  If this is the case, then the relation is passed thru to the range-ops op1_range or op2_range routine for use in evaluating the operand. 2) if there is a relation between op1 and op2, then we take a special step (the new routine refine_using_relation) and look to see if there is also any dependence between op1 and op2.  If there is, we attempt to "refine" their ranges based on this dependence before proceeding further.   For example: d_4 =a_1 * 2 a_1 = b_2 + 1 if (a_1 < b_2) Looking at the true edge, we start with [1,1] = a_1 < b_2 There is a relation between a_1 and b_2, it checks if the value of a_1 is dependent on b_2, and tries to calculate new values for a_1 and b_2 based on this dependence. if op1_range is properly implemented for operator_plus (next patch), then resolving the value of b_2 in a_1 = b_2 + 1  with the relation op1 >= LHS would return the range of [+INF, +INF].  and using that value, a_1 would then have a range of [0, 0]. We calculate and substitute these values early, so that if we are looking for other exported values (such as d_4), the range of a_1 = [0,0] will trickle up to that calculation on the edge, and we'll get d_4 = [0,0] on that edge too. Bootstrapped on x86_64-pc-linux-gnu with no regressions.  Pushed. Andrew --------------uVkb5GfoxGODzrVMBIIbNM4d Content-Type: text/x-patch; charset=UTF-8; name="0005-Refine-ranges-using-relations-in-GORI.patch" Content-Disposition: attachment; filename="0005-Refine-ranges-using-relations-in-GORI.patch" Content-Transfer-Encoding: base64 RnJvbSAyNDJlYTdlOTNhYWEwYTFhM2YyNGQ1NTVkZWQ3MWJmOWRhN2U1YzBkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXcgTWFjTGVvZCA8YW1hY2xlb2RAcmVkaGF0LmNvbT4K RGF0ZTogVGh1LCAyMiBTZXAgMjAyMiAxODoxNzoyMCAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggNS82 XSBSZWZpbmUgcmFuZ2VzIHVzaW5nIHJlbGF0aW9ucyBpbiBHT1JJLgoKVGhpcyBhbGxvd3MgR09S SSB0byByZWNvZ25pemUgd2hlbiBhIHJlbGF0aW9uIHBhc3NlZCBpbiBhcHBsaWVzIHRvIHRoZQoy IG9wZXJhbmRzIG9mIHRoZSBjdXJyZW50IHN0YXRlbWVudC4gIENoZWNrIHRvIHNlZSBpZiBmdXJ0 aGVyIHJhbmdlCnJlZmluZW1lbnQgaXMgcG9zc2libGUgYmVmb3JlIHByb2NlZWRpbmcuCgoJKiBn aW1wbGUtcmFuZ2UtZ29yaS5jYyAoZ29yaV9jb21wdXRlOjpyZWZpbmVfdXNpbmdfcmVsYXRpb24p OiBOZXcuCgkoZ29yaV9jb21wdXRlOjpjb21wdXRlX29wZXJhbmQxX3JhbmdlKTogSW52b2tlCgly ZWZpbmVfdXNpbmdfcmVsYXRpb24gd2hlbiBhcHBsaWNhYmxlLgoJKGdvcmlfY29tcHV0ZTo6Y29t cHV0ZV9vcGVyYW5kMl9yYW5nZSk6IERpdHRvLgoJKiBnaW1wbGUtcmFuZ2UtZ29yaS5oIChjbGFz cyBnb3JpX2NvbXB1dGUpOiBBZGp1c3QgcHJvdG90eXBlcy4KLS0tCiBnY2MvZ2ltcGxlLXJhbmdl LWdvcmkuY2MgfCAxNDYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystCiBn Y2MvZ2ltcGxlLXJhbmdlLWdvcmkuaCAgfCAgIDMgKwogMiBmaWxlcyBjaGFuZ2VkLCAxNDYgaW5z ZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9nY2MvZ2ltcGxlLXJhbmdl LWdvcmkuY2MgYi9nY2MvZ2ltcGxlLXJhbmdlLWdvcmkuY2MKaW5kZXggNTdhN2U4MjA3NDkuLmIz N2QwM2NkZGRhIDEwMDY0NAotLS0gYS9nY2MvZ2ltcGxlLXJhbmdlLWdvcmkuY2MKKysrIGIvZ2Nj L2dpbXBsZS1yYW5nZS1nb3JpLmNjCkBAIC05MzQsNiArOTM0LDExNSBAQCBnb3JpX2NvbXB1dGU6 OmNvbXB1dGVfbG9naWNhbF9vcGVyYW5kcyAodnJhbmdlICZ0cnVlX3JhbmdlLCB2cmFuZ2UgJmZh bHNlX3JhbmdlLAogICAgIHNyYy5nZXRfb3BlcmFuZCAoZmFsc2VfcmFuZ2UsIG5hbWUpOwogfQog CisKKy8vIFRoaXMgcm91dGluZSB3aWxsIHRyeSB0byByZWZpbmUgdGhlIHJhbmdlcyBvZiBPUDEg YW5kIE9QMiBnaXZlbiBhIHJlbGF0aW9uCisvLyBLIGJldHdlZW4gdGhlbS4gIEluIG9yZGVyIHRv IHBlcmZvcm0gdGhpcyByZWZpbmVtZW50LCBvbmUgb2YgdGhlIG9wZXJhbmRzCisvLyBtdXN0IGJl IGluIHRoZSBkZWZpbml0aW9uIGNoYWluIG9mIHRoZSBvdGhlci4gIFRoZSB1c2UgaXMgcmVmaW5l ZCB1c2luZworLy8gb3AxL29wMl9yYW5nZSBvbiB0aGUgc3RhdGVtZW50LCBhbmQgdGhlIGRlZmlu dGlvbiBpcyB0aGVuIHJlY2FsY3VsYXRlZAorLy8gdXNpbmcgdGhlIHJlbGF0aW9uLgorCitib29s Citnb3JpX2NvbXB1dGU6OnJlZmluZV91c2luZ19yZWxhdGlvbiAodHJlZSBvcDEsIHZyYW5nZSAm b3AxX3JhbmdlLAorCQkJICAgICAgIHRyZWUgb3AyLCB2cmFuZ2UgJm9wMl9yYW5nZSwKKwkJCSAg ICAgICBmdXJfc291cmNlICZzcmMsIHJlbGF0aW9uX2tpbmQgaykKK3sKKyAgZ2NjX2NoZWNraW5n X2Fzc2VydCAoVFJFRV9DT0RFIChvcDEpID09IFNTQV9OQU1FKTsKKyAgZ2NjX2NoZWNraW5nX2Fz c2VydCAoVFJFRV9DT0RFIChvcDIpID09IFNTQV9OQU1FKTsKKyAgZ2NjX2NoZWNraW5nX2Fzc2Vy dCAoayAhPSBWUkVMX1ZBUllJTkcgJiYgayAhPSBWUkVMX1VOREVGSU5FRCk7CisKKyAgYm9vbCBj aGFuZ2UgPSBmYWxzZTsKKyAgYm9vbCBvcDFfZGVmX3AgPSBpbl9jaGFpbl9wIChvcDIsIG9wMSk7 CisgIGlmICghb3AxX2RlZl9wKQorICAgIGlmICghaW5fY2hhaW5fcCAob3AxLCBvcDIpKQorICAg ICAgcmV0dXJuIGZhbHNlOworCisgIHRyZWUgZGVmX29wID0gb3AxX2RlZl9wID8gb3AxIDogb3Ay OworICB0cmVlIHVzZV9vcCA9IG9wMV9kZWZfcCA/IG9wMiA6IG9wMTsKKworICBpZiAoIW9wMV9k ZWZfcCkKKyAgICBrID0gcmVsYXRpb25fc3dhcCAoayk7CisKKyAgLy8gb3AxX2RlZiBpcyB0cnVl IGlmIHdlIHdhbnQgdG8gbG9vayB1cCBvcDEsIG90aGVyd2lzZSB3ZSB3YW50IG9wMi4KKyAgLy8g aWYgbmVpdGhlciBpcyB0aGUgY2FzZSwgd2UgcmV0dXJuZWQgaW4gdGhlIGFib3ZlIGNoZWNrLgor CisgIGdpbXBsZSAqZGVmX3N0bXQgPSBTU0FfTkFNRV9ERUZfU1RNVCAoZGVmX29wKTsKKyAgZ2lt cGxlX3JhbmdlX29wX2hhbmRsZXIgb3BfaGFuZGxlciAoZGVmX3N0bXQpOworICBpZiAoIW9wX2hh bmRsZXIpCisgICAgcmV0dXJuIGZhbHNlOworICB0cmVlIGRlZl9vcDEgPSBvcF9oYW5kbGVyLm9w ZXJhbmQxICgpOworICB0cmVlIGRlZl9vcDIgPSBvcF9oYW5kbGVyLm9wZXJhbmQyICgpOworICAv LyBpZiB0aGUgZGVmIGlzbid0IGJpbmFyeSwgdGhlIHJlbGF0aW9uIHdpbGwgbm90IGJlIHVzZWZ1 bC4KKyAgaWYgKCFkZWZfb3AyKQorICAgIHJldHVybiBmYWxzZTsKKworICAvLyBEZXRlcm1pbmUg aWYgb3AyIGlzIGRpcmVjdGx5IHJlZmVyZW5jZWQgYXMgYW4gb3BlcmFuZC4KKyAgaWYgKGRlZl9v cDEgPT0gdXNlX29wKQorICAgIHsKKyAgICAgIC8vIGRlZl9zdG10IGhhcyBvcDEgaW4gdGhlIDFz dCBvcGVyYW5kIHBvc2l0aW9uLgorICAgICAgVmFsdWVfUmFuZ2Ugb3RoZXJfb3AgKFRSRUVfVFlQ RSAoZGVmX29wMikpOworICAgICAgc3JjLmdldF9vcGVyYW5kIChvdGhlcl9vcCwgZGVmX29wMik7 CisKKyAgICAgIC8vIFVzaW5nIG9wMV9yYW5nZSBhcyB0aGUgTEhTLCBhbmQgcmVsYXRpb24gUkVM LCBldmFsdWF0ZSBvcDIuCisgICAgICB0cmVlIHR5cGUgPSBUUkVFX1RZUEUgKGRlZl9vcDEpOwor ICAgICAgVmFsdWVfUmFuZ2UgbmV3X3Jlc3VsdCAodHlwZSk7CisgICAgICBpZiAoIW9wX2hhbmRs ZXIub3AxX3JhbmdlIChuZXdfcmVzdWx0LCB0eXBlLAorCQkJCSBvcDFfZGVmX3AgPyBvcDFfcmFu Z2UgOiBvcDJfcmFuZ2UsCisJCQkJIG90aGVyX29wLCBrKSkKKwlyZXR1cm4gZmFsc2U7CisgICAg ICBpZiAob3AxX2RlZl9wKQorCXsKKwkgIGNoYW5nZSB8PSBvcDJfcmFuZ2UuaW50ZXJzZWN0IChu ZXdfcmVzdWx0KTsKKwkgIC8vIFJlY2FsY3VsYXRlIG9wMi4KKwkgIGlmIChvcF9oYW5kbGVyLmZv bGRfcmFuZ2UgKG5ld19yZXN1bHQsIHR5cGUsIG9wMl9yYW5nZSwgb3RoZXJfb3ApKQorCSAgICB7 CisJICAgICAgY2hhbmdlIHw9IG9wMV9yYW5nZS5pbnRlcnNlY3QgKG5ld19yZXN1bHQpOworCSAg ICB9CisJfQorICAgICAgZWxzZQorCXsKKwkgIGNoYW5nZSB8PSBvcDFfcmFuZ2UuaW50ZXJzZWN0 IChuZXdfcmVzdWx0KTsKKwkgIC8vIFJlY2FsY3VsYXRlIG9wMS4KKwkgIGlmIChvcF9oYW5kbGVy LmZvbGRfcmFuZ2UgKG5ld19yZXN1bHQsIHR5cGUsIG9wMV9yYW5nZSwgb3RoZXJfb3ApKQorCSAg ICB7CisJICAgICAgY2hhbmdlIHw9IG9wMl9yYW5nZS5pbnRlcnNlY3QgKG5ld19yZXN1bHQpOwor CSAgICB9CisJfQorICAgIH0KKyAgZWxzZSBpZiAoZGVmX29wMiA9PSB1c2Vfb3ApCisgICAgewor ICAgICAgLy8gZGVmX3N0bXQgaGFzIG9wMSBpbiB0aGUgMXN0IG9wZXJhbmQgcG9zaXRpb24uCisg ICAgICBWYWx1ZV9SYW5nZSBvdGhlcl9vcCAoVFJFRV9UWVBFIChkZWZfb3AxKSk7CisgICAgICBz cmMuZ2V0X29wZXJhbmQgKG90aGVyX29wLCBkZWZfb3AxKTsKKworICAgICAgLy8gVXNpbmcgb3Ax X3JhbmdlIGFzIHRoZSBMSFMsIGFuZCByZWxhdGlvbiBSRUwsIGV2YWx1YXRlIG9wMi4KKyAgICAg IHRyZWUgdHlwZSA9IFRSRUVfVFlQRSAoZGVmX29wMik7CisgICAgICBWYWx1ZV9SYW5nZSBuZXdf cmVzdWx0ICh0eXBlKTsKKyAgICAgIGlmICghb3BfaGFuZGxlci5vcDJfcmFuZ2UgKG5ld19yZXN1 bHQsIHR5cGUsCisJCQkJIG9wMV9kZWZfcCA/IG9wMV9yYW5nZSA6IG9wMl9yYW5nZSwKKwkJCQkg b3RoZXJfb3AsIGspKQorCXJldHVybiBmYWxzZTsKKyAgICAgIGlmIChvcDFfZGVmX3ApCisJewor CSAgY2hhbmdlIHw9IG9wMl9yYW5nZS5pbnRlcnNlY3QgKG5ld19yZXN1bHQpOworCSAgLy8gUmVj YWxjdWxhdGUgb3AxLgorCSAgaWYgKG9wX2hhbmRsZXIuZm9sZF9yYW5nZSAobmV3X3Jlc3VsdCwg dHlwZSwgb3RoZXJfb3AsIG9wMl9yYW5nZSkpCisJICAgIHsKKwkgICAgICBjaGFuZ2UgfD0gb3Ax X3JhbmdlLmludGVyc2VjdCAobmV3X3Jlc3VsdCk7CisJICAgIH0KKwl9CisgICAgICBlbHNlCisJ eworCSAgY2hhbmdlIHw9IG9wMV9yYW5nZS5pbnRlcnNlY3QgKG5ld19yZXN1bHQpOworCSAgLy8g UmVjYWxjdWxhdGUgb3AyLgorCSAgaWYgKG9wX2hhbmRsZXIuZm9sZF9yYW5nZSAobmV3X3Jlc3Vs dCwgdHlwZSwgb3RoZXJfb3AsIG9wMV9yYW5nZSkpCisJICAgIHsKKwkgICAgICBjaGFuZ2UgfD0g b3AyX3JhbmdlLmludGVyc2VjdCAobmV3X3Jlc3VsdCk7CisJICAgIH0KKwl9CisgICAgfQorICBy ZXR1cm4gY2hhbmdlOworfQorCiAvLyBDYWxjdWxhdGUgYSByYW5nZSBmb3IgTkFNRSBmcm9tIHRo ZSBvcGVyYW5kIDEgcG9zaXRpb24gb2YgU1RNVAogLy8gYXNzdW1pbmcgdGhlIHJlc3VsdCBvZiB0 aGUgc3RhdGVtZW50IGlzIExIUy4gIFJldHVybiB0aGUgcmFuZ2UgaW4KIC8vIFIsIG9yIGZhbHNl IGlmIG5vIHJhbmdlIGNvdWxkIGJlIGNhbGN1bGF0ZWQuCkBAIC05NDcsNiArMTA1Niw3IEBAIGdv cmlfY29tcHV0ZTo6Y29tcHV0ZV9vcGVyYW5kMV9yYW5nZSAodnJhbmdlICZyLAogICBnaW1wbGUg KnN0bXQgPSBoYW5kbGVyLnN0bXQgKCk7CiAgIHRyZWUgb3AxID0gaGFuZGxlci5vcGVyYW5kMSAo KTsKICAgdHJlZSBvcDIgPSBoYW5kbGVyLm9wZXJhbmQyICgpOworICB0cmVlIGxoc19uYW1lID0g Z2ltcGxlX2dldF9saHMgKHN0bXQpOwogCiAgIFZhbHVlX1JhbmdlIG9wMV9yYW5nZSAoVFJFRV9U WVBFIChvcDEpKTsKICAgVmFsdWVfUmFuZ2UgdG1wIChUUkVFX1RZUEUgKG9wMSkpOwpAQCAtOTU5 LDcgKzEwNjksMjEgQEAgZ29yaV9jb21wdXRlOjpjb21wdXRlX29wZXJhbmQxX3JhbmdlICh2cmFu Z2UgJnIsCiAgIGlmIChvcDIpCiAgICAgewogICAgICAgc3JjLmdldF9vcGVyYW5kIChvcDJfcmFu Z2UsIG9wMik7Ci0gICAgICBpZiAoIWhhbmRsZXIuY2FsY19vcDEgKHRtcCwgbGhzLCBvcDJfcmFu Z2UpKQorICAgICAgcmVsYXRpb25fa2luZCBrID0gVlJFTF9WQVJZSU5HOworICAgICAgaWYgKHJl bCkKKwl7CisJIGlmIChsaHNfbmFtZSA9PSByZWwtPm9wMSAoKSAmJiBvcDEgPT0gcmVsLT5vcDIg KCkpCisJICAgayA9IHJlbC0+a2luZCAoKTsKKwkgZWxzZSBpZiAobGhzX25hbWUgPT0gcmVsLT5v cDIgKCkgJiYgb3AxID09IHJlbC0+b3AxICgpKQorCSAgIGsgPSByZWxhdGlvbl9zd2FwIChyZWwt PmtpbmQgKCkpOworCSBlbHNlIGlmIChvcDEgPT0gcmVsLT5vcDEgKCkgJiYgb3AyID09IHJlbC0+ b3AyICgpKQorCSAgIHJlZmluZV91c2luZ19yZWxhdGlvbiAob3AxLCBvcDFfcmFuZ2UsIG9wMiwg b3AyX3JhbmdlLCBzcmMsCisJCQkJICByZWwtPmtpbmQgKCkpOworCSBlbHNlIGlmIChvcDEgPT0g cmVsLT5vcDIgKCkgJiYgb3AyID09IHJlbC0+b3AxICgpKQorCSAgIHJlZmluZV91c2luZ19yZWxh dGlvbiAob3AxLCBvcDFfcmFuZ2UsIG9wMiwgb3AyX3JhbmdlLCBzcmMsCisJCQkJICByZWxhdGlv bl9zd2FwIChyZWwtPmtpbmQgKCkpKTsKKyAgICAgICB9CisgICAgICBpZiAoIWhhbmRsZXIuY2Fs Y19vcDEgKHRtcCwgbGhzLCBvcDJfcmFuZ2UsIGspKQogCXJldHVybiBmYWxzZTsKICAgICB9CiAg IGVsc2UKQEAgLTk2Nyw3ICsxMDkxLDcgQEAgZ29yaV9jb21wdXRlOjpjb21wdXRlX29wZXJhbmQx X3JhbmdlICh2cmFuZ2UgJnIsCiAgICAgICAvLyBXZSBwYXNzIG9wMV9yYW5nZSB0byB0aGUgdW5h cnkgb3BlcmF0aW9uLiAgTm9tYWxseSBpdCdzIGEKICAgICAgIC8vIGhpZGRlbiByYW5nZV9mb3Jf dHlwZSBwYXJhbWV0ZXIsIGJ1dCBzb21ldGltZXMgaGF2aW5nIHRoZQogICAgICAgLy8gYWN0dWFs IHJhbmdlIGNhbiByZXN1bHQgaW4gYmV0dGVyIGluZm9ybWF0aW9uLgotICAgICAgaWYgKCFoYW5k bGVyLmNhbGNfb3AxICh0bXAsIGxocywgb3AxX3JhbmdlKSkKKyAgICAgIGlmICghaGFuZGxlci5j YWxjX29wMSAodG1wLCBsaHMsIG9wMV9yYW5nZSwgVlJFTF9WQVJZSU5HKSkKIAlyZXR1cm4gZmFs c2U7CiAgICAgfQogCkBAIC0xMDMwLDYgKzExNTQsNyBAQCBnb3JpX2NvbXB1dGU6OmNvbXB1dGVf b3BlcmFuZDJfcmFuZ2UgKHZyYW5nZSAmciwKICAgZ2ltcGxlICpzdG10ID0gaGFuZGxlci5zdG10 ICgpOwogICB0cmVlIG9wMSA9IGhhbmRsZXIub3BlcmFuZDEgKCk7CiAgIHRyZWUgb3AyID0gaGFu ZGxlci5vcGVyYW5kMiAoKTsKKyAgdHJlZSBsaHNfbmFtZSA9IGdpbXBsZV9nZXRfbGhzIChzdG10 KTsKIAogICBWYWx1ZV9SYW5nZSBvcDFfcmFuZ2UgKFRSRUVfVFlQRSAob3AxKSk7CiAgIFZhbHVl X1JhbmdlIG9wMl9yYW5nZSAoVFJFRV9UWVBFIChvcDIpKTsKQEAgLTEwMzcsOSArMTE2MiwyNCBA QCBnb3JpX2NvbXB1dGU6OmNvbXB1dGVfb3BlcmFuZDJfcmFuZ2UgKHZyYW5nZSAmciwKIAogICBz cmMuZ2V0X29wZXJhbmQgKG9wMV9yYW5nZSwgb3AxKTsKICAgc3JjLmdldF9vcGVyYW5kIChvcDJf cmFuZ2UsIG9wMik7CisgIHJlbGF0aW9uX2tpbmQgayA9IFZSRUxfVkFSWUlORzsKKyAgaWYgKHJl bCkKKyAgICB7CisgICAgICBpZiAobGhzX25hbWUgPT0gcmVsLT5vcDEgKCkgJiYgb3AyID09IHJl bC0+b3AyICgpKQorICAgICAgIGsgPSByZWwtPmtpbmQgKCk7CisgICAgICBlbHNlIGlmIChsaHNf bmFtZSA9PSByZWwtPm9wMiAoKSAmJiBvcDIgPT0gcmVsLT5vcDEgKCkpCisgICAgICAgayA9IHJl bGF0aW9uX3N3YXAgKHJlbC0+a2luZCAoKSk7CisgICAgICBlbHNlIGlmIChvcDEgPT0gcmVsLT5v cDEgKCkgJiYgb3AyID09IHJlbC0+b3AyICgpKQorICAgICAgIHJlZmluZV91c2luZ19yZWxhdGlv biAob3AxLCBvcDFfcmFuZ2UsIG9wMiwgb3AyX3JhbmdlLCBzcmMsCisJCQkgICAgICByZWwtPmtp bmQgKCkpOworICAgICAgZWxzZSBpZiAob3AxID09IHJlbC0+b3AyICgpICYmIG9wMiA9PSByZWwt Pm9wMSAoKSkKKyAgICAgICByZWZpbmVfdXNpbmdfcmVsYXRpb24gKG9wMSwgb3AxX3JhbmdlLCBv cDIsIG9wMl9yYW5nZSwgc3JjLAorCQkJICAgICAgcmVsYXRpb25fc3dhcCAocmVsLT5raW5kICgp KSk7CisgICAgfQorCiAKICAgLy8gSW50ZXJzZWN0IHdpdGggcmFuZ2UgZm9yIG9wMiBiYXNlZCBv biBsaHMgYW5kIG9wMS4KLSAgaWYgKCFoYW5kbGVyLmNhbGNfb3AyICh0bXAsIGxocywgb3AxX3Jh bmdlKSkKKyAgaWYgKCFoYW5kbGVyLmNhbGNfb3AyICh0bXAsIGxocywgb3AxX3JhbmdlLCBrKSkK ICAgICByZXR1cm4gZmFsc2U7CiAKICAgdW5zaWduZWQgaWR4OwpkaWZmIC0tZ2l0IGEvZ2NjL2dp bXBsZS1yYW5nZS1nb3JpLmggYi9nY2MvZ2ltcGxlLXJhbmdlLWdvcmkuaAppbmRleCAxZmZmM2U2 MjU1YS4uYzdhMzIxNjJhMWIgMTAwNjQ0Ci0tLSBhL2djYy9naW1wbGUtcmFuZ2UtZ29yaS5oCisr KyBiL2djYy9naW1wbGUtcmFuZ2UtZ29yaS5oCkBAIC0xNjYsNiArMTY2LDkgQEAgcHVibGljOgog ICBib29sIGhhc19lZGdlX3JhbmdlX3AgKHRyZWUgbmFtZSwgZWRnZSBlKTsKICAgdm9pZCBkdW1w IChGSUxFICpmKTsKIHByaXZhdGU6CisgIGJvb2wgcmVmaW5lX3VzaW5nX3JlbGF0aW9uICh0cmVl IG9wMSwgdnJhbmdlICZvcDFfcmFuZ2UsCisJCQkgICAgICB0cmVlIG9wMiwgdnJhbmdlICZvcDJf cmFuZ2UsCisJCQkgICAgICBmdXJfc291cmNlICZzcmMsIHJlbGF0aW9uX2tpbmQgayk7CiAgIGJv b2wgbWF5X3JlY29tcHV0ZV9wICh0cmVlIG5hbWUsIGVkZ2UgZSk7CiAgIGJvb2wgbWF5X3JlY29t cHV0ZV9wICh0cmVlIG5hbWUsIGJhc2ljX2Jsb2NrIGJiID0gTlVMTCk7CiAgIGJvb2wgY29tcHV0 ZV9vcGVyYW5kX3JhbmdlICh2cmFuZ2UgJnIsIGdpbXBsZSAqc3RtdCwgY29uc3QgdnJhbmdlICZs aHMsCi0tIAoyLjM3LjMKCg== --------------uVkb5GfoxGODzrVMBIIbNM4d--