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 177A8385E003 for ; Wed, 24 May 2023 21:19:44 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 177A8385E003 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=1684963183; 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=J5Ly9c6LEUXvvkQckx+S1qVDcqIidexUrzs0unllPUo=; b=Vu37e5cuUyGuT+LhHs9gXDwOnO19JDBJJFjSCJOmoGYkoBpSXi87VhtNCwIE04aqUcDcjl iUJxCRXHH7I34MJ53JCcRJRm6OsDEYVMiLTE5mAR8yzkTIQ0uh3ZW41MScuAz1j8vuT9xI NcKraxzFKttwRZPo7X2Mb3u8EdmmENY= Received: from mail-qk1-f199.google.com (mail-qk1-f199.google.com [209.85.222.199]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-369-XLbtrSwdOK-PJqq81DSAng-1; Wed, 24 May 2023 17:19:42 -0400 X-MC-Unique: XLbtrSwdOK-PJqq81DSAng-1 Received: by mail-qk1-f199.google.com with SMTP id af79cd13be357-75b03d12d38so31807785a.2 for ; Wed, 24 May 2023 14:19:42 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1684963181; x=1687555181; h=subject:from:cc:to:content-language:user-agent:mime-version:date :message-id:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=Jfo5+J5EGeH1JfUalKqkVQVtHiDWvMUJ9Fn3sUWDc9c=; b=g7RxTf6ucsAgik7M8Lmh5A9Pc7P16wNj8ER4zJ4OzqImXumu3ETXP1hKDpCkjEaU/L EuQ4ZFAq4v55WeuX6rMdam/t/h4dB/hX3l02Yqa/HI+TAYmJPGMzjgRnDhASKc+m+kuT vErFAxIny+UOIvYnoycc0g3DzXcVWCR1Hqs41FHol7BOR5pDZzf2I11rZkZ4sZN4JeEB MWzVehKDf71+v5zX/Af7xN3pHh/V2oPutagGIGYMKTq1rhWaB0n03oiRbwMrscmlBANG ZBz9fJJJR/o0Yujcf6coIqq70/Mh8f5r5Fiy0vwrc6tQRF9rme15cacfAO1mlZ8nBSGn muEQ== X-Gm-Message-State: AC+VfDzWKqO952ujMZrpHyXAPgUusQ6Cf5nsXoAorkO/Eu9ePuADXnsi MDaRxoYbQ6/5ub7m8SdE6RMVd7WYbSByLNjZoMUWDkUu/tel+Tof7OMH2BGQ0OBoJ6OPNK/64eA DGEV1zqBUhvFREuAENnqdNhL84G4qdCz/aerj1MP3gnbCsx5EPO9BnYJpeM/z8DTzEHmBsYppyp 9cdw== X-Received: by 2002:a05:620a:6285:b0:75b:23a1:3676 with SMTP id ov5-20020a05620a628500b0075b23a13676mr8685504qkn.55.1684963181283; Wed, 24 May 2023 14:19:41 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ4FVMiB9Ow+2nva3hDg2jganiyPq3iWJXeugWbOXXWQTnDT6oG7ypAoaWRaxCdC3DdCbZycwA== X-Received: by 2002:a05:620a:6285:b0:75b:23a1:3676 with SMTP id ov5-20020a05620a628500b0075b23a13676mr8685491qkn.55.1684963180963; Wed, 24 May 2023 14:19:40 -0700 (PDT) Received: from ?IPV6:2607:fea8:51df:4200::933? ([2607:fea8:51df:4200::933]) by smtp.gmail.com with ESMTPSA id c2-20020a05620a11a200b007578622c861sm785402qkk.108.2023.05.24.14.19.40 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 24 May 2023 14:19:40 -0700 (PDT) Message-ID: <92f97ed8-6149-21c7-731e-0b618667f33c@redhat.com> Date: Wed, 24 May 2023 17:19:39 -0400 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.11.0 To: gcc-patches Cc: "hernandez, aldy" From: Andrew MacLeod Subject: [COMMITTED 3/4] Provide relation queries for a stmt. X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: multipart/mixed; boundary="------------0aJy30TXlzfWiqkh05cPE0Sc" Content-Language: en-US X-Spam-Status: No, score=-12.4 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,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: This is a multi-part message in MIME format. --------------0aJy30TXlzfWiqkh05cPE0Sc Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit This tweaks someof the fold_stmt routines and helpers.. in particular the ones which you provide a vector of ranges to to satisfy any ssa-names. Previously, once the vector was depleted, any remaining values were picked up from the default get_global_range_query() query. It is useful to be able to speiocyf your own range_query to these routines, as most fo the other fold_stmt routines allow. This patch changes it so the default doesnt change, but you can optionally specify your own range_query to the routines. It also provides a new routine:     relation_trio fold_relations (gimple *s, range_query *q) Which instead of folding a stmt, will return a relation trio based on folding the stmt with the range_query.  The relation trio will let you know if the statement causes a relation between LHS-OP1,  LHS_OP2, or OP1_OP2...  so for something like    a_3 = b_4 + 6 based on known ranges and types, we might get back (LHS  > OP1) It just provides  a generic interface into what relations a statement may provide based on what a range_query returns for values and the stmt itself. There is no performance impact. Bootstraps on x86_64-pc-linux-gnu  with no regressions.  Pushed. Andrew --------------0aJy30TXlzfWiqkh05cPE0Sc Content-Type: text/x-patch; charset=UTF-8; name="0003-Provide-relation-queries-for-a-stmt.patch" Content-Disposition: attachment; filename="0003-Provide-relation-queries-for-a-stmt.patch" Content-Transfer-Encoding: base64 RnJvbSA5MzNlMTRkYzYxMzI2OTY0MWZmZTM2MTNiZjQ3OTJhYzUwNTkwMjc1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXcgTWFjTGVvZCA8YW1hY2xlb2RAcmVkaGF0LmNvbT4K RGF0ZTogV2VkLCAyNCBNYXkgMjAyMyAwOToxNzozMiAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggMy80 XSBQcm92aWRlIHJlbGF0aW9uIHF1ZXJpZXMgZm9yIGEgc3RtdC4KCkFsbG93IGZ1cl9saXN0IGFu ZCBmb2xkX3N0bXQgdG8gYmUgcHJvdmlkZWQgYSByYW5nZV9xdWVyeSByYXRoZXIgdGhhbgphbHdh eXMgZGVmYXVsdHNpbmcgdG8gTlVMTCAod2hpY2ggYmVjb21lcyBhIGdsb2JhbCBxdWVyeSkuCkFs c28gcHJvdmlkZSBhIGZvbGRfcmVsYXRpb25zICgpIHJvdXRpbmUgd2hpY2ggY2FuIHByb3ZpZGUg YSByYW5nZV90cmlvCmZvciBhbiBhcmJpdHJhcnkgc3RhdGVtZW50IHVzaW5nIGFueSByYW5nZV9x dWVyeQoKCSogZ2ltcGxlLXJhbmdlLWZvbGQuY2MgKGZ1cl9saXN0OjpmdXJfbGlzdCk6IEFkZCBy YW5nZV9xdWVyeSBwYXJhbQoJdG8gY29udHJ1Y3RvcnMuCgkoZm9sZF9yYW5nZSk6IEFkZCByYW5n ZV9xdWVyeSBwYXJhbWV0ZXIuCgkoZnVyX3JlbGF0aW9uOjpmdXJfcmVsYXRpb24pOiBOZXcuCgko ZnVyX3JlbGF0aW9uOjp0cmlvKTogTmV3LgoJKGZ1cl9yZWxhdGlvbjo6cmVnaXN0ZXJfcmVsYXRp b24pOiBOZXcuCgkoZm9sZF9yZWxhdGlvbnMpOiBOZXcuCgkqIGdpbXBsZS1yYW5nZS1mb2xkLmgg KGZvbGRfcmFuZ2UpOiBBZGp1c3QgcHJvdG90eXBlcy4KCShmb2xkX3JlbGF0aW9ucyk6IE5ldy4K LS0tCiBnY2MvZ2ltcGxlLXJhbmdlLWZvbGQuY2MgfCAxMjggKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKystLS0tCiBnY2MvZ2ltcGxlLXJhbmdlLWZvbGQuaCAgfCAgMTEgKysrLQog MiBmaWxlcyBjaGFuZ2VkLCAxMjQgaW5zZXJ0aW9ucygrKSwgMTUgZGVsZXRpb25zKC0pCgpkaWZm IC0tZ2l0IGEvZ2NjL2dpbXBsZS1yYW5nZS1mb2xkLmNjIGIvZ2NjL2dpbXBsZS1yYW5nZS1mb2xk LmNjCmluZGV4IDk2Y2JkNzk5NDg4Li40ZGYwNjVjOGE2ZSAxMDA2NDQKLS0tIGEvZ2NjL2dpbXBs ZS1yYW5nZS1mb2xkLmNjCisrKyBiL2djYy9naW1wbGUtcmFuZ2UtZm9sZC5jYwpAQCAtMjE0LDkg KzIxNCw5IEBAIGZ1cl9kZXBlbmQ6OnJlZ2lzdGVyX3JlbGF0aW9uIChlZGdlIGUsIHJlbGF0aW9u X2tpbmQgaywgdHJlZSBvcDEsIHRyZWUgb3AyKQogY2xhc3MgZnVyX2xpc3QgOiBwdWJsaWMgZnVy X3NvdXJjZQogewogcHVibGljOgotICBmdXJfbGlzdCAodnJhbmdlICZyMSk7Ci0gIGZ1cl9saXN0 ICh2cmFuZ2UgJnIxLCB2cmFuZ2UgJnIyKTsKLSAgZnVyX2xpc3QgKHVuc2lnbmVkIG51bSwgdnJh bmdlICoqbGlzdCk7CisgIGZ1cl9saXN0ICh2cmFuZ2UgJnIxLCByYW5nZV9xdWVyeSAqcSA9IE5V TEwpOworICBmdXJfbGlzdCAodnJhbmdlICZyMSwgdnJhbmdlICZyMiwgcmFuZ2VfcXVlcnkgKnEg PSBOVUxMKTsKKyAgZnVyX2xpc3QgKHVuc2lnbmVkIG51bSwgdnJhbmdlICoqbGlzdCwgcmFuZ2Vf cXVlcnkgKnEgPSBOVUxMKTsKICAgdmlydHVhbCBib29sIGdldF9vcGVyYW5kICh2cmFuZ2UgJnIs IHRyZWUgZXhwcikgb3ZlcnJpZGU7CiAgIHZpcnR1YWwgYm9vbCBnZXRfcGhpX29wZXJhbmQgKHZy YW5nZSAmciwgdHJlZSBleHByLCBlZGdlIGUpIG92ZXJyaWRlOwogcHJpdmF0ZToKQEAgLTIyOCw3 ICsyMjgsNyBAQCBwcml2YXRlOgogCiAvLyBPbmUgcmFuZ2Ugc3VwcGxpZWQgZm9yIHVuYXJ5IG9w ZXJhdGlvbnMuCiAKLWZ1cl9saXN0OjpmdXJfbGlzdCAodnJhbmdlICZyMSkgOiBmdXJfc291cmNl IChOVUxMKQorZnVyX2xpc3Q6OmZ1cl9saXN0ICh2cmFuZ2UgJnIxLCByYW5nZV9xdWVyeSAqcSkg OiBmdXJfc291cmNlIChxKQogewogICBtX2xpc3QgPSBtX2xvY2FsOwogICBtX2luZGV4ID0gMDsK QEAgLTIzOCw3ICsyMzgsNyBAQCBmdXJfbGlzdDo6ZnVyX2xpc3QgKHZyYW5nZSAmcjEpIDogZnVy X3NvdXJjZSAoTlVMTCkKIAogLy8gVHdvIHJhbmdlcyBzdXBwbGllZCBmb3IgYmluYXJ5IG9wZXJh dGlvbnMuCiAKLWZ1cl9saXN0OjpmdXJfbGlzdCAodnJhbmdlICZyMSwgdnJhbmdlICZyMikgOiBm dXJfc291cmNlIChOVUxMKQorZnVyX2xpc3Q6OmZ1cl9saXN0ICh2cmFuZ2UgJnIxLCB2cmFuZ2Ug JnIyLCByYW5nZV9xdWVyeSAqcSkgOiBmdXJfc291cmNlIChxKQogewogICBtX2xpc3QgPSBtX2xv Y2FsOwogICBtX2luZGV4ID0gMDsKQEAgLTI0OSw3ICsyNDksOCBAQCBmdXJfbGlzdDo6ZnVyX2xp c3QgKHZyYW5nZSAmcjEsIHZyYW5nZSAmcjIpIDogZnVyX3NvdXJjZSAoTlVMTCkKIAogLy8gQXJi aXRyYXJ5IG51bWJlciBvZiByYW5nZXMgaW4gYSB2ZWN0b3IuCiAKLWZ1cl9saXN0OjpmdXJfbGlz dCAodW5zaWduZWQgbnVtLCB2cmFuZ2UgKipsaXN0KSA6IGZ1cl9zb3VyY2UgKE5VTEwpCitmdXJf bGlzdDo6ZnVyX2xpc3QgKHVuc2lnbmVkIG51bSwgdnJhbmdlICoqbGlzdCwgcmFuZ2VfcXVlcnkg KnEpCisgIDogZnVyX3NvdXJjZSAocSkKIHsKICAgbV9saXN0ID0gbGlzdDsKICAgbV9pbmRleCA9 IDA7CkBAIC0yNzgsMjAgKzI3OSwyMCBAQCBmdXJfbGlzdDo6Z2V0X3BoaV9vcGVyYW5kICh2cmFu Z2UgJnIsIHRyZWUgZXhwciwgZWRnZSBlIEFUVFJJQlVURV9VTlVTRUQpCiAvLyBGb2xkIHN0bXQg UyBpbnRvIHJhbmdlIFIgdXNpbmcgUjEgYXMgdGhlIGZpcnN0IG9wZXJhbmQuCiAKIGJvb2wKLWZv bGRfcmFuZ2UgKHZyYW5nZSAmciwgZ2ltcGxlICpzLCB2cmFuZ2UgJnIxKQorZm9sZF9yYW5nZSAo dnJhbmdlICZyLCBnaW1wbGUgKnMsIHZyYW5nZSAmcjEsIHJhbmdlX3F1ZXJ5ICpxKQogewogICBm b2xkX3VzaW5nX3JhbmdlIGY7Ci0gIGZ1cl9saXN0IHNyYyAocjEpOworICBmdXJfbGlzdCBzcmMg KHIxLCBxKTsKICAgcmV0dXJuIGYuZm9sZF9zdG10IChyLCBzLCBzcmMpOwogfQogCiAvLyBGb2xk IHN0bXQgUyBpbnRvIHJhbmdlIFIgdXNpbmcgUjEgIGFuZCBSMiBhcyB0aGUgZmlyc3QgdHdvIG9w ZXJhbmRzLgogCiBib29sCi1mb2xkX3JhbmdlICh2cmFuZ2UgJnIsIGdpbXBsZSAqcywgdnJhbmdl ICZyMSwgdnJhbmdlICZyMikKK2ZvbGRfcmFuZ2UgKHZyYW5nZSAmciwgZ2ltcGxlICpzLCB2cmFu Z2UgJnIxLCB2cmFuZ2UgJnIyLCByYW5nZV9xdWVyeSAqcSkKIHsKICAgZm9sZF91c2luZ19yYW5n ZSBmOwotICBmdXJfbGlzdCBzcmMgKHIxLCByMik7CisgIGZ1cl9saXN0IHNyYyAocjEsIHIyLCBx KTsKICAgcmV0dXJuIGYuZm9sZF9zdG10IChyLCBzLCBzcmMpOwogfQogCkBAIC0yOTksMTAgKzMw MCwxMSBAQCBmb2xkX3JhbmdlICh2cmFuZ2UgJnIsIGdpbXBsZSAqcywgdnJhbmdlICZyMSwgdnJh bmdlICZyMikKIC8vIG9wZXJhbmRzIGVuY291bnRlcmVkLgogCiBib29sCi1mb2xkX3JhbmdlICh2 cmFuZ2UgJnIsIGdpbXBsZSAqcywgdW5zaWduZWQgbnVtX2VsZW1lbnRzLCB2cmFuZ2UgKip2ZWN0 b3IpCitmb2xkX3JhbmdlICh2cmFuZ2UgJnIsIGdpbXBsZSAqcywgdW5zaWduZWQgbnVtX2VsZW1l bnRzLCB2cmFuZ2UgKip2ZWN0b3IsCisJICAgIHJhbmdlX3F1ZXJ5ICpxKQogewogICBmb2xkX3Vz aW5nX3JhbmdlIGY7Ci0gIGZ1cl9saXN0IHNyYyAobnVtX2VsZW1lbnRzLCB2ZWN0b3IpOworICBm dXJfbGlzdCBzcmMgKG51bV9lbGVtZW50cywgdmVjdG9yLCBxKTsKICAgcmV0dXJuIGYuZm9sZF9z dG10IChyLCBzLCBzcmMpOwogfQogCkBAIC0zMjYsNiArMzI4LDEwOCBAQCBmb2xkX3JhbmdlICh2 cmFuZ2UgJnIsIGdpbXBsZSAqcywgZWRnZSBvbl9lZGdlLCByYW5nZV9xdWVyeSAqcSkKICAgcmV0 dXJuIGYuZm9sZF9zdG10IChyLCBzLCBzcmMpOwogfQogCisvLyBQcm92aWRlIGEgZnVyX3NvdXJj ZSB3aGljaCBjYW4gYmUgdXNlZCB0byBkZXRlcm1pbmUgYW55IHJlbGF0aW9ucyBvbgorLy8gYSBz dGF0ZW1lbnQuICBJdCBtYW5hZ2VzIHRoZSBjYWxsYmFjayBmcm9tIGZvbGRfdXNpbmdfcmFuZ2Vz IHRvIGRldGVybWluZQorLy8gYSByZWxhdGlvbl90cmlvIGZvciBhIHN0YXRlbWVudC4KKworY2xh c3MgZnVyX3JlbGF0aW9uIDogcHVibGljIGZ1cl9zdG10Cit7CitwdWJsaWM6CisgIGZ1cl9yZWxh dGlvbiAoZ2ltcGxlICpzLCByYW5nZV9xdWVyeSAqcSA9IE5VTEwpOworICB2aXJ0dWFsIHZvaWQg cmVnaXN0ZXJfcmVsYXRpb24gKGdpbXBsZSAqc3RtdCwgcmVsYXRpb25fa2luZCBrLCB0cmVlIG9w MSwKKwkJCQkgIHRyZWUgb3AyKTsKKyAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyX3JlbGF0aW9uIChl ZGdlIGUsIHJlbGF0aW9uX2tpbmQgaywgdHJlZSBvcDEsCisJCQkJICB0cmVlIG9wMik7CisgIHJl bGF0aW9uX3RyaW8gdHJpbygpIGNvbnN0OworcHJpdmF0ZToKKyAgcmVsYXRpb25fa2luZCBkZWZf b3AxLCBkZWZfb3AyLCBvcDFfb3AyOworfTsKKworZnVyX3JlbGF0aW9uOjpmdXJfcmVsYXRpb24g KGdpbXBsZSAqcywgcmFuZ2VfcXVlcnkgKnEpIDogZnVyX3N0bXQgKHMsIHEpCit7CisgIGRlZl9v cDEgPSBkZWZfb3AyID0gb3AxX29wMiA9IFZSRUxfVkFSWUlORzsKK30KKworLy8gQ29uc3RydWN0 IGEgdHJpbyBmcm9tIHdoYXQgaXMga25vd24uCisKK3JlbGF0aW9uX3RyaW8KK2Z1cl9yZWxhdGlv bjo6dHJpbyAoKSBjb25zdAoreworICByZXR1cm4gcmVsYXRpb25fdHJpbyAoZGVmX29wMSwgZGVm X29wMiwgb3AxX29wMik7Cit9CisKKy8vIERvbid0IHN1cHBvcnQgZWRnZXMsIGJ1dCBhdm9pZCBh IGNvbXBpbGVyIHdhcm5pbmcgYnkgcHJvdmlkaW5nIHRoZSByb3V0aW5lLgorCit2b2lkCitmdXJf cmVsYXRpb246OnJlZ2lzdGVyX3JlbGF0aW9uIChlZGdlLCByZWxhdGlvbl9raW5kLCB0cmVlLCB0 cmVlKQoreworfQorCisvLyBSZWdpc3RlciByZWxhdGlvbiBLIGJldHdlZW4gT1AxIGFuZCBPUDIg b24gU1RNVC4KKwordm9pZAorZnVyX3JlbGF0aW9uOjpyZWdpc3Rlcl9yZWxhdGlvbiAoZ2ltcGxl ICpzdG10LCByZWxhdGlvbl9raW5kIGssIHRyZWUgb3AxLAorCQkJCSB0cmVlIG9wMikKK3sKKyAg dHJlZSBsaHMgPSBnaW1wbGVfZ2V0X2xocyAoc3RtdCk7CisgIHRyZWUgYTEgPSBOVUxMX1RSRUU7 CisgIHRyZWUgYTIgPSBOVUxMX1RSRUU7CisgIHN3aXRjaCAoZ2ltcGxlX2NvZGUgKHN0bXQpKQor ICAgIHsKKyAgICAgIGNhc2UgR0lNUExFX0NPTkQ6CisJYTEgPSBnaW1wbGVfY29uZF9saHMgKHN0 bXQpOworCWEyID0gZ2ltcGxlX2NvbmRfcmhzIChzdG10KTsKKwlicmVhazsKKyAgICAgIGNhc2Ug R0lNUExFX0FTU0lHTjoKKwlhMSA9IGdpbXBsZV9hc3NpZ25fcmhzMSAoc3RtdCk7CisJaWYgKGdp bXBsZV9udW1fb3BzIChzdG10KSA+PSAzKQorCSAgYTIgPSBnaW1wbGVfYXNzaWduX3JoczIgKHN0 bXQpOworCWJyZWFrOworICAgICAgZGVmYXVsdDoKKwlicmVhazsKKyAgICB9CisgIC8vIFNUTVQg aXMgb2YgdGhlIGZvcm0gTEhTID0gQTEgb3AgQTIsIG5vdyBtYXAgdGhlIHJlbGF0aW9uIHRvIHRo ZXNlCisgIC8vIG9wZXJhbmRzLCBpZiBwb3NzaWJsZS4KKyAgaWYgKG9wMSA9PSBsaHMpCisgICAg eworICAgICAgaWYgKG9wMiA9PSBhMSkKKwlkZWZfb3AxID0gazsKKyAgICAgIGVsc2UgaWYgKG9w MiA9PSBhMikKKwlkZWZfb3AyID0gazsKKyAgICB9CisgIGVsc2UgaWYgKG9wMiA9PSBsaHMpCisg ICAgeworICAgICAgaWYgKG9wMSA9PSBhMSkKKwlkZWZfb3AxID0gcmVsYXRpb25fc3dhcCAoayk7 CisgICAgICBlbHNlIGlmIChvcDEgPT0gYTIpCisJZGVmX29wMiA9IHJlbGF0aW9uX3N3YXAgKGsp OworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGlmIChvcDEgPT0gYTEgJiYgb3AyID09IGEy KQorCW9wMV9vcDIgPSBrOworICAgICAgZWxzZSBpZiAob3AyID09IGExICYmIG9wMSA9PSBhMikK KwlvcDFfb3AyID0gcmVsYXRpb25fc3dhcCAoayk7CisgICAgfQorfQorCisvLyBSZXR1cm4gdGhl IHJlbGF0aW9uIHRyaW8gZm9yIHN0bXQgUyB1c2luZyBxdWVyeSBRLgorCityZWxhdGlvbl90cmlv Citmb2xkX3JlbGF0aW9ucyAoZ2ltcGxlICpzLCByYW5nZV9xdWVyeSAqcSkKK3sKKyAgZm9sZF91 c2luZ19yYW5nZSBmOworICBmdXJfcmVsYXRpb24gc3JjIChzLCBxKTsKKyAgdHJlZSBsaHMgPSBn aW1wbGVfcmFuZ2Vfc3NhX3AgKGdpbXBsZV9nZXRfbGhzIChzKSk7CisgIGlmIChsaHMpCisgICAg eworICAgICAgVmFsdWVfUmFuZ2UgdnIoVFJFRV9UWVBFIChsaHMpKTsKKyAgICAgIGlmIChmLmZv bGRfc3RtdCAodnIsIHMsIHNyYykpCisJcmV0dXJuIHNyYy50cmlvICgpOworICAgIH0KKyAgcmV0 dXJuIFRSSU9fVkFSWUlORzsKK30KKwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAvLyBBZGp1c3Qg dGhlIHJhbmdlIGZvciBhIHBvaW50ZXIgZGlmZmVyZW5jZSB3aGVyZSB0aGUgb3BlcmFuZHMgY2Ft ZQpkaWZmIC0tZ2l0IGEvZ2NjL2dpbXBsZS1yYW5nZS1mb2xkLmggYi9nY2MvZ2ltcGxlLXJhbmdl LWZvbGQuaAppbmRleCA2OGM2ZDc3NDNlOS4uOTM5YjdhNzZmMGUgMTAwNjQ0Ci0tLSBhL2djYy9n aW1wbGUtcmFuZ2UtZm9sZC5oCisrKyBiL2djYy9naW1wbGUtcmFuZ2UtZm9sZC5oCkBAIC0zNyw5 ICszNywxNCBAQCBib29sIGZvbGRfcmFuZ2UgKHZyYW5nZSAmdiwgZ2ltcGxlICpzLCBlZGdlIG9u X2VkZ2UsIHJhbmdlX3F1ZXJ5ICpxID0gTlVMTCk7CiAKIC8vIFRoZXNlIHJvdXRpbmVzIHRoZSBv cGVyYW5kcyB0byBiZSBzcGVjaWZpZWQgd2hlbiBtYW51YWxseSBmb2xkaW5nLgogLy8gQW55IGV4 Y2VzcyBxdWVyaWVzIHdpbGwgYmUgZHJhd24gZnJvbSB0aGUgY3VycmVudCByYW5nZV9xdWVyeS4K LWJvb2wgZm9sZF9yYW5nZSAodnJhbmdlICZyLCBnaW1wbGUgKnMsIHZyYW5nZSAmcjEpOwotYm9v bCBmb2xkX3JhbmdlICh2cmFuZ2UgJnIsIGdpbXBsZSAqcywgdnJhbmdlICZyMSwgdnJhbmdlICZy Mik7Ci1ib29sIGZvbGRfcmFuZ2UgKHZyYW5nZSAmciwgZ2ltcGxlICpzLCB1bnNpZ25lZCBudW1f ZWxlbWVudHMsIHZyYW5nZSAqKnZlY3Rvcik7Citib29sIGZvbGRfcmFuZ2UgKHZyYW5nZSAmciwg Z2ltcGxlICpzLCB2cmFuZ2UgJnIxLCByYW5nZV9xdWVyeSAqcSA9IE5VTEwpOworYm9vbCBmb2xk X3JhbmdlICh2cmFuZ2UgJnIsIGdpbXBsZSAqcywgdnJhbmdlICZyMSwgdnJhbmdlICZyMiwKKwkJ IHJhbmdlX3F1ZXJ5ICpxID0gTlVMTCk7Citib29sIGZvbGRfcmFuZ2UgKHZyYW5nZSAmciwgZ2lt cGxlICpzLCB1bnNpZ25lZCBudW1fZWxlbWVudHMsIHZyYW5nZSAqKnZlY3RvciwKKwkJIHJhbmdl X3F1ZXJ5ICpxID0gTlVMTCk7CisKKy8vIFRoaXMgcm91dGluZSB3aWxsIHJldHVybiBhIHJlbGF0 aW9uIHRyaW8gZm9yIHN0bXQgUy4KK3JlbGF0aW9uX3RyaW8gZm9sZF9yZWxhdGlvbnMgKGdpbXBs ZSAqcywgcmFuZ2VfcXVlcnkgKnEgPSBOVUxMKTsKIAogLy8gUmV0dXJuIHRoZSB0eXBlIG9mIHJh bmdlIHdoaWNoIHN0YXRlbWVudCBTIGNhbGN1bGF0ZXMuICBJZiB0aGUgdHlwZSBpcwogLy8gdW5z dXBwb3J0ZWQgb3Igbm8gdHlwZSBjYW4gYmUgZGV0ZXJtaW5lZCwgcmV0dXJuIE5VTExfVFJFRS4K LS0gCjIuNDAuMQoK --------------0aJy30TXlzfWiqkh05cPE0Sc--