From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pg1-x535.google.com (mail-pg1-x535.google.com [IPv6:2607:f8b0:4864:20::535]) by sourceware.org (Postfix) with ESMTPS id D74ED3858D1E for ; Sat, 1 Oct 2022 04:52:15 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org D74ED3858D1E Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-pg1-x535.google.com with SMTP id s206so5728380pgs.3 for ; Fri, 30 Sep 2022 21:52:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=to:subject:from:content-language:user-agent:mime-version:date :message-id:from:to:cc:subject:date; bh=lJFZEd/wx7Xvt9twPqmNUXKojrTi3gPGKBd/y/TNeLA=; b=h+hX2i3LQwPtsHMbuxh4qGJJHLCDO8Ub16Mbw4+qyMiDt9RtFhLg6LsiogEIW6NG4R dr2feVtKAx0yimJM5+N3KHCCYM8Sm9diG/W7P3dpoiGbw7GGdKXcdziBVewD+TBqJ7ga 34zbvxXmY5yakvC21NUoJCrW3a2LK1jVFDZGDFK07TgE2iuxIVOs6jYIySWsU4WzxLzw I9j0SRFI7yxbIxPq2XorDZwVJgGaL6G7+oWOcPVAP7YCY1n5s/Exn85Pv1vq+IGNIOQc IA7FUxnLfHQgITobud/+9giTjP3RwlAualOVgKphdKh3AcHRa5qhuQ+MHxAWYFOO1uJG Rx5w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=to:subject:from:content-language:user-agent:mime-version:date :message-id:x-gm-message-state:from:to:cc:subject:date; bh=lJFZEd/wx7Xvt9twPqmNUXKojrTi3gPGKBd/y/TNeLA=; b=PESBN6224o5kDQnO9f2ItcULzLsWls44rnqLSrwPR0f1PtmgZ4+CVbeTuTXStAclz+ j99fwfswfZh06DBE0WOtr6lPZ41TwRaeY8zxHpumHOwoDKB4fv2PzZDLM7Ujgu/AaFZC 5sb9mS7/TuusnBWbYApeX6u/CFH5lmvekDNBpOLCaWYidQGfO+DwLaK+wZroSEjehIoS 0YminlmJTHgSu0XTDyJfJ6lFG/0cwq4AZq/x/Jbb+qYf5bC7uiDE7kVGjIIRvs5/ad4l lA8eviWkLJAFQLZ6napNgJHZHUTj3PPwgGYU405PVp8UUF5eu4TrwS9EJ99xtKVhC3zM Nupw== X-Gm-Message-State: ACrzQf15HzJH3SZzPgbneAFkYAPylzqeUA1k05iHXQ6Jqvw6p0xTJO0C 8bBOCttznK3dZIfzU+qRHTZtFr/4NhzsYw== X-Google-Smtp-Source: AMsMyM7nG1NBjcnsBZSsBjMMoPn9KP7lxjHIK/id3sOrc5Tg7BfHj4mSy9E5zvHfxquTBrGlD8czNA== X-Received: by 2002:a62:17d1:0:b0:54d:87d5:249e with SMTP id 200-20020a6217d1000000b0054d87d5249emr12458716pfx.14.1664599934428; Fri, 30 Sep 2022 21:52:14 -0700 (PDT) Received: from ?IPV6:2601:681:8600:13d0::f0a? ([2601:681:8600:13d0::f0a]) by smtp.gmail.com with ESMTPSA id k17-20020a170902c41100b0016c0b0fe1c6sm2840407plk.73.2022.09.30.21.52.13 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 30 Sep 2022 21:52:13 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------fNkuumVA51vLzR7wmRf12lBf" Message-ID: <36f8c642-9cc5-9fb5-5e76-e01a001f57f7@gmail.com> Date: Fri, 30 Sep 2022 22:52:12 -0600 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.2.1 Content-Language: en-US From: Jeff Law Subject: [committed][PATCH] Improve Z flag handling on H8 To: "gcc-patches@gcc.gnu.org" X-Spam-Status: No, score=-8.6 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,GIT_PATCH_0,KAM_NUMSUBJECT,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,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. --------------fNkuumVA51vLzR7wmRf12lBf Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit This patch improves handling of the Z bit in the status register in a variety of ways to improve either the code size or code speed on various H8 subtargets. For example, we can test the zero/nonzero status of the upper byte of a 16 bit register using mov.b, we can move the Z or an inverted Z into a QImode register profitably on some subtargets. We can move Z or an inverted Z into the sign bit on the H8/SX profitably, etc. I've actually had this patch in my tester for over a year, but got crazy busy and hadn't bothered to upstream it until now. Naturally it has been working all that time without regressions. Pushed to the trunk. Jeff --------------fNkuumVA51vLzR7wmRf12lBf Content-Type: text/plain; charset=UTF-8; name="P" Content-Disposition: attachment; filename="P" Content-Transfer-Encoding: base64 Y29tbWl0IDI1NTUwNzFjOTU0YWE1Nzk2ZWIzNDMyYzE1NzM5ZGNhYWU0NTdiYzMKQXV0aG9y OiBKZWZmIExhdyA8amVmZnJleWFsYXdAZ21haWwuY29tPgpEYXRlOiAgIFNhdCBPY3QgMSAw MDo0MjoxNSAyMDIyIC0wNDAwCgogICAgSW1wcm92ZSBaIGZsYWcgaGFuZGxpbmcgb24gSDgK ICAgIAogICAgVGhpcyBwYXRjaCBpbXByb3ZlcyBoYW5kbGluZyBvZiB0aGUgWiBiaXQgaW4g dGhlIHN0YXR1cyByZWdpc3RlciBpbiBhCiAgICB2YXJpZXR5IG9mIHdheXMgdG8gaW1wcm92 ZSBlaXRoZXIgdGhlIGNvZGUgc2l6ZSBvciBjb2RlIHNwZWVkIG9uIHZhcmlvdXMKICAgIEg4 IHN1YnRhcmdldHMuCiAgICAKICAgIEZvciBleGFtcGxlLCB3ZSBjYW4gdGVzdCB0aGUgemVy by9ub256ZXJvIHN0YXR1cyBvZiB0aGUgdXBwZXIgYnl0ZSBvZiBhCiAgICAxNiBiaXQgcmVn aXN0ZXIgdXNpbmcgbW92LmIsIHdlIGNhbiBtb3ZlIHRoZSBaIG9yIGFuIGludmVydGVkIFog aW50byBhCiAgICBRSW1vZGUgcmVnaXN0ZXIgcHJvZml0YWJseSBvbiBzb21lIHN1YnRhcmdl dHMuICBXZSBjYW4gbW92ZSBaIG9yIGFuCiAgICBpbnZlcnRlZCBaIGludG8gdGhlIHNpZ24g Yml0IG9uIHRoZSBIOC9TWCBwcm9maXRhYmx5LCBldGMuCiAgICAKICAgIGdjYy8KICAgIAog ICAgICAgICAgICAqIGNvbmZpZy9oODMwMC9oODMwMC5tZCAoSFNJMik6IE5ldyBpdGVyYXRv ci4KICAgICAgICAgICAgKGVxbmVfaW52ZXJ0KTogU2ltaWxhcmx5LgogICAgICAgICAgICAq IGNvbmZpZy9oODMwMC90ZXN0Y29tcGFyZS5tZCAodGVzdGhpX3VwcGVyX3opOiBOZXcgcGF0 dGVybi4KICAgICAgICAgICAgKGNtcHFpX3osIGNtcGhpX3osIGNtcHNpX3opOiBMaWtld2lz ZS4KICAgICAgICAgICAgKHN0b3JlX3pfcWksIHN0b3JlX3pfaV9xaSwgc3RvcmVfel9oaSwg c3RvcmVfel9oaV9zYik6IE5ldwogICAgICAgICAgICBkZWZpbmVfaW5zbl9hbmRfc3BsaXRz IGFuZC9vciBkZWZpbmVfaW5zbnMuCiAgICAgICAgICAgIChzdG9yZV96X2hpX25lZywgc3Rv cmVfel9oaV9hbmQsIHN0b3JlX3pfPG1vZGU+KTogTGlrZXdpc2UuCiAgICAgICAgICAgIChz dG9yZV96Xzxtb2RlPl9uZWcsIHN0b3JlX3pfPG1vZGU+X2FuZCwgc3RvcmVfeik6IExpa2V3 aXNlLgoKZGlmZiAtLWdpdCBhL2djYy9jb25maWcvaDgzMDAvaDgzMDAubWQgYi9nY2MvY29u ZmlnL2g4MzAwL2g4MzAwLm1kCmluZGV4IDJkYTdlN2Q4YTdkLi5mNTkyYWYxZDVmNyAxMDA2 NDQKLS0tIGEvZ2NjL2NvbmZpZy9oODMwMC9oODMwMC5tZAorKysgYi9nY2MvY29uZmlnL2g4 MzAwL2g4MzAwLm1kCkBAIC0yMjEsNiArMjIxLDcgQEAKIChkZWZpbmVfbW9kZV9pdGVyYXRv ciBRSEkgW1FJIEhJXSkKIAogKGRlZmluZV9tb2RlX2l0ZXJhdG9yIEhTSSBbSEkgU0ldKQor KGRlZmluZV9tb2RlX2l0ZXJhdG9yIEhTSTIgW0hJIFNJXSkKIAogKGRlZmluZV9tb2RlX2l0 ZXJhdG9yIFFIU0kgW1FJIEhJIFNJXSkKIChkZWZpbmVfbW9kZV9pdGVyYXRvciBRSFNJMiBb UUkgSEkgU0ldKQpAQCAtMjM2LDYgKzIzNyw3IEBACiAoZGVmaW5lX2NvZGVfaXRlcmF0b3Ig b3JzIFtpb3IgeG9yXSkKIAogKGRlZmluZV9jb2RlX2l0ZXJhdG9yIGVxbmUgW2VxIG5lXSkK KyhkZWZpbmVfY29kZV9hdHRyIGVxbmVfaW52ZXJ0IFsoZXEgIm5lIikgKG5lICJlcSIpXSkK IAogOzsgRm9yIHN0b3JpbmcgdGhlIEMgZmxhZywgbWFwIGZyb20gdGhlIHVuc2lnbmVkIGNv bXBhcmlzb24gdG8gdGhlIHJpZ2h0CiA7OyBjb2RlIGZvciB0ZXN0aW5nIHRoZSBDIGJpdC4K ZGlmZiAtLWdpdCBhL2djYy9jb25maWcvaDgzMDAvdGVzdGNvbXBhcmUubWQgYi9nY2MvY29u ZmlnL2g4MzAwL3Rlc3Rjb21wYXJlLm1kCmluZGV4IDBlZTNlMzYwYmVhLi44MWRjZTFkMGJj MSAxMDA2NDQKLS0tIGEvZ2NjL2NvbmZpZy9oODMwMC90ZXN0Y29tcGFyZS5tZAorKysgYi9n Y2MvY29uZmlnL2g4MzAwL3Rlc3Rjb21wYXJlLm1kCkBAIC02MSw2ICs2MSwxNSBAQAogICAi bW92LmIJJXQwLCV0MCIKICAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiMiIpXSkKIAorKGRlZmlu ZV9pbnNuICIqdHN0aGlfdXBwZXJfeiIKKyAgWyhzZXQgKHJlZzpDQ1ogQ0NfUkVHKQorCShj b21wYXJlIChhbmQ6SEkgKG1hdGNoX29wZXJhbmQ6SEkgMCAicmVnaXN0ZXJfb3BlcmFuZCIg InIiKQorCQkJIChjb25zdF9pbnQgLTI1NikpCisJCSAoY29uc3RfaW50IDApKSldCisgICJy ZWxvYWRfY29tcGxldGVkIgorICAibW92LmIJJXQwLCV0MCIKKyAgWyhzZXRfYXR0ciAibGVu Z3RoIiAiMiIpXSkKKwogKGRlZmluZV9pbnNuICIqdHN0c2lfdXBwZXIiCiAgIFsoc2V0IChy ZWc6Q0NaTiBDQ19SRUcpCiAJKGNvbXBhcmUgKGFuZDpTSSAobWF0Y2hfb3BlcmFuZDpTSSAw ICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpCkBAIC04Niw2ICs5NSwzMCBAQAogICB9CiAgIFso c2V0X2F0dHIgImxlbmd0aF90YWJsZSIgImFkZCIpXSkKIAorKGRlZmluZV9pbnNuICIqY21w cWlfeiIKKyAgWyhzZXQgKHJlZzpDQ1ogQ0NfUkVHKQorCShlcSAobWF0Y2hfb3BlcmFuZDpR SSAwICJoODMwMF9kc3Rfb3BlcmFuZCIgInJRIikKKwkgICAgKG1hdGNoX29wZXJhbmQ6UUkg MSAiaDgzMDBfc3JjX29wZXJhbmQiICJyUWkiKSkpXQorICAicmVsb2FkX2NvbXBsZXRlZCIK KyAgeyByZXR1cm4gImNtcC5iCSVYMSwlWDAiOyB9CisgIFsoc2V0X2F0dHIgImxlbmd0aF90 YWJsZSIgImFkZCIpXSkKKworKGRlZmluZV9pbnNuICIqY21waGlfeiIKKyAgWyhzZXQgKHJl ZzpDQ1ogQ0NfUkVHKQorCShlcSAobWF0Y2hfb3BlcmFuZDpISSAwICJoODMwMF9kc3Rfb3Bl cmFuZCIgInJRIikKKwkgICAgKG1hdGNoX29wZXJhbmQ6SEkgMSAiaDgzMDBfc3JjX29wZXJh bmQiICJyUWkiKSkpXQorICAicmVsb2FkX2NvbXBsZXRlZCIKKyAgeyByZXR1cm4gImNtcC53 CSVUMSwlVDAiOyB9CisgIFsoc2V0X2F0dHIgImxlbmd0aF90YWJsZSIgImFkZCIpXSkKKwor KGRlZmluZV9pbnNuICIqY21wc2lfeiIKKyAgWyhzZXQgKHJlZzpDQ1ogQ0NfUkVHKQorCShl cSAobWF0Y2hfb3BlcmFuZDpTSSAwICJoODMwMF9kc3Rfb3BlcmFuZCIgInJRIikKKwkgICAg KG1hdGNoX29wZXJhbmQ6U0kgMSAiaDgzMDBfc3JjX29wZXJhbmQiICJyUWkiKSkpXQorICAi cmVsb2FkX2NvbXBsZXRlZCIKKyAgeyByZXR1cm4gImNtcC5sCSVTMSwlUzAiOyB9CisgIFso c2V0X2F0dHIgImxlbmd0aF90YWJsZSIgImFkZCIpXSkKKwogKGRlZmluZV9pbnNuICIqY21w cWkiCiAgIFsoc2V0IChyZWc6Q0MgQ0NfUkVHKQogCShjb21wYXJlIChtYXRjaF9vcGVyYW5k OlFJIDAgImg4MzAwX2RzdF9vcGVyYW5kIiAiclEiKQpAQCAtMjA5LDYgKzI0Miw4IEBACiAJ ICByZXR1cm4gInhvci5sXHQlUzAsJVMwXDtiaXN0XHQjMCwldzAiOwogCWdjY191bnJlYWNo YWJsZSAoKTsKICAgICAgIH0KKyAgICBlbHNlCisgICAgICBnY2NfdW5yZWFjaGFibGUgKCk7 CiAgIH0KICAgWyhzZXQgKGF0dHIgImxlbmd0aCIpIChzeW1ib2xfcmVmICI8TU9ERT5tb2Rl ID09IFNJbW9kZSA/IDYgOiA0IikpXSkKIApAQCAtMzQwLDMgKzM3NSwyMzUgQEAKIAkoYXNo aWZ0OlFIU0kgKDxnZXVsdHVfdG9fYz46UUhTSSAocmVnOkNDQyBDQ19SRUcpIChjb25zdF9p bnQgMCkpCiAJCSAgICAgKG1hdGNoX2R1cCAzKSkpXSkKIAorOzsgU3RvcmluZyBaIGludG8g YSBRSW1vZGUgZGVzdGluYXRpb24gaXMgZmFpcmx5IGVhc3kgb24gdGhlIEg4L1MgYW5kCis7 OyBuZXdlciBhcyB0aGUgc3RjOyBzaGlmdDsgbWFzayBpcyBqdXN0IDMgaW5zbnMvNiBieXRl cy4gIE9uIHRoZSBIOC8zMDBICis7OyBpdCBpcyA0IGluc25zLzggYnl0ZXMgd2hpY2ggaXMg YSBzcGVlZCBpbXByb3ZlbWVudCwgYnV0IGEgc2l6ZQorOzsgcmVncmVzc2lvbiByZWxhdGl2 ZSB0byB0aGUgYnJhbmNoeSBzZXF1ZW5jZQorOzsKKzs7IFN0b3JpbmcgaW52ZXJ0ZWQgWiBp biBRSW1vZGUgaXMgbm90IHByb2ZpdGFibGUgb24gdGhlIEg4LzMwMEgsIGJ1dAorOzsgaXMg YSBzcGVlZCBpbXByb3ZlbWVudCBvbiB0aGUgSDhTLgorKGRlZmluZV9pbnNuX2FuZF9zcGxp dCAiKnN0b3JlX3pfcWkiCisgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlFJIDAgInJlZ2lzdGVy X29wZXJhbmQiICI9ciIpCisJKGVxOlFJIChtYXRjaF9vcGVyYW5kOkhJIDEgInJlZ2lzdGVy X29wZXJhbmQiICJyIikKKwkgICAgICAgKG1hdGNoX29wZXJhbmQ6SEkgMiAicmVnaXN0ZXJf b3BlcmFuZCIgInIiKSkpXQorICAiVEFSR0VUX0g4MzAwUyB8fCAhb3B0aW1pemVfc2l6ZSIK KyAgIiMiCisgICImJiByZWxvYWRfY29tcGxldGVkIgorICBbKHNldCAocmVnOkNDWiBDQ19S RUcpCisJKGVxOkNDWiAobWF0Y2hfZHVwIDEpIChtYXRjaF9kdXAgMikpKQorICAgKHNldCAo bWF0Y2hfZHVwIDApCisJKG5lOlFJIChyZWc6Q0NaIENDX1JFRykgKGNvbnN0X2ludCAwKSkp XSkKKworKGRlZmluZV9pbnNuX2FuZF9zcGxpdCAiKnN0b3JlX3pfaV9xaSIKKyAgWyhzZXQg KG1hdGNoX29wZXJhbmQ6UUkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yIikKKwkobmU6UUkg KG1hdGNoX29wZXJhbmQ6SEkgMSAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKQorCSAgICAgICAo bWF0Y2hfb3BlcmFuZDpISSAyICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpKSldCisgICJUQVJH RVRfSDgzMDBTIgorICAiIyIKKyAgIiYmIHJlbG9hZF9jb21wbGV0ZWQiCisgIFsoc2V0IChy ZWc6Q0NaIENDX1JFRykKKwkoZXE6Q0NaIChtYXRjaF9kdXAgMSkgKG1hdGNoX2R1cCAyKSkp CisgICAoc2V0IChtYXRjaF9kdXAgMCkKKwkoZXE6UUkgKHJlZzpDQ1ogQ0NfUkVHKSAoY29u c3RfaW50IDApKSldKQorCisoZGVmaW5lX2luc24gIipzdG9yZV96X3FpIgorICBbKHNldCAo bWF0Y2hfb3BlcmFuZDpRSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIiKQorCShuZTpRSSAo cmVnOkNDWiBDQ19SRUcpIChjb25zdF9pbnQgMCkpKV0KKyAgIihUQVJHRVRfSDgzMDBTIHx8 ICFvcHRpbWl6ZV9zaXplKSAmJiByZWxvYWRfY29tcGxldGVkIgorICB7CisgICAgaWYgKFRB UkdFVF9IODMwMFMpCisgICAgICByZXR1cm4gInN0Y1x0Y2NyLCVYMFw7c2hhclx0IzIsJVgw XDthbmRcdCMweDEsJVgwIjsKKyAgICBlbHNlCisgICAgICByZXR1cm4gInN0Y1x0Y2NyLCVY MFw7c2hhclx0JVgwXDtzaGFyXHQlWDBcO2FuZFx0IzB4MSwlWDAiOworICB9CisgIFsoc2V0 IChhdHRyICJsZW5ndGgiKSAoc3ltYm9sX3JlZiAiVEFSR0VUX0g4MzAwUyA/IDYgOiA4Iikp XSkKKworKGRlZmluZV9pbnNuICIqc3RvcmVfel9pX3FpIgorICBbKHNldCAobWF0Y2hfb3Bl cmFuZDpRSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIiKQorCShlcTpRSSAocmVnOkNDWiBD Q19SRUcpIChjb25zdF9pbnQgMCkpKV0KKyAgIihUQVJHRVRfSDgzMDBTIHx8ICFvcHRpbWl6 ZV9zaXplKSAmJiByZWxvYWRfY29tcGxldGVkIgorICAic3RjXHRjY3IsJVgwXDtibGRcdCMy LCVYMFw7eG9yLndcdCVUMCwlVDBcO2Jpc3RcdCMwLCVYMCI7CisgIFsoc2V0X2F0dHIgImxl bmd0aCIgIjgiKV0pCisKKzs7IFN0b3JpbmcgWiBvciBhbiBpbnZlcnRlZCBaIGludG8gYSBI SW1vZGUgZGVzdGluYXRpb24gaXMKKzs7IHByb2ZpdGFibGUgb24gdGhlIEg4L1MgYW5kIG9s ZGVyIHZhcmlhbnRzLCBidXQgbm90IG9uIHRoZQorOzsgSDgvU1ggd2hlcmUgdGhlIGJyYW5j aHkgc2VxdWVuY2UgY2FuIHVzZSB0aGUgdHdvLWJ5dGUKKzs7IG1vdi1pbW1lZGlhdGUgdGhh dCBpcyBzcGVjaWZpYyB0byB0aGUgSDgvU1gKKyhkZWZpbmVfaW5zbl9hbmRfc3BsaXQgIipz dG9yZV96X2hpIgorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpIU0kgMCAicmVnaXN0ZXJfb3Bl cmFuZCIgIj1yIikKKwkoZXFuZTpIU0kgKG1hdGNoX29wZXJhbmQ6SFNJMiAxICJyZWdpc3Rl cl9vcGVyYW5kIiAiciIpCisJCSAgKG1hdGNoX29wZXJhbmQ6SFNJMiAyICJyZWdpc3Rlcl9v cGVyYW5kIiAiciIpKSldCisgICIhVEFSR0VUX0g4MzAwU1giCisgICIjIgorICAiJiYgcmVs b2FkX2NvbXBsZXRlZCIKKyAgWyhzZXQgKHJlZzpDQ1ogQ0NfUkVHKQorCShlcTpDQ1ogKG1h dGNoX2R1cCAxKSAobWF0Y2hfZHVwIDIpKSkKKyAgIChzZXQgKG1hdGNoX2R1cCAwKQorCSg8 ZXFuZV9pbnZlcnQ+OkhTSSAocmVnOkNDWiBDQ19SRUcpIChjb25zdF9pbnQgMCkpKV0pCisK Kzs7IFNpbWlsYXIsIGJ1dCBwdXR0aW5nIHRoZSByZXN1bHQgaW50byB0aGUgc2lnbiBiaXQK KyhkZWZpbmVfaW5zbl9hbmRfc3BsaXQgIipzdG9yZV96X2hpX3NiIgorICBbKHNldCAobWF0 Y2hfb3BlcmFuZDpIU0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yIikKKwkoYXNoaWZ0OkhT SSAoZXFuZTpIU0kgKG1hdGNoX29wZXJhbmQ6SFNJMiAxICJyZWdpc3Rlcl9vcGVyYW5kIiAi ciIpCisJCQkgICAgICAobWF0Y2hfb3BlcmFuZDpIU0kyIDIgInJlZ2lzdGVyX29wZXJhbmQi ICJyIikpCisJCSAgICAgKGNvbnN0X2ludCAxNSkpKV0KKyAgIiFUQVJHRVRfSDgzMDBTWCIK KyAgIiMiCisgICImJiByZWxvYWRfY29tcGxldGVkIgorICBbKHNldCAocmVnOkNDWiBDQ19S RUcpCisJKGVxOkNDWiAobWF0Y2hfZHVwIDEpIChtYXRjaF9kdXAgMikpKQorICAgKHNldCAo bWF0Y2hfZHVwIDApCisJKGFzaGlmdDpIU0kgKDxlcW5lX2ludmVydD46SFNJIChyZWc6Q0Na IENDX1JFRykgKGNvbnN0X2ludCAwKSkKKwkJICAgIChjb25zdF9pbnQgMTUpKSldKQorCis7 OyBTaW1pbGFyLCBidXQgbmVnYXRpbmcgdGhlIHJlc3VsdAorKGRlZmluZV9pbnNuX2FuZF9z cGxpdCAiKnN0b3JlX3pfaGlfbmVnIgorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpIU0kgMCAi cmVnaXN0ZXJfb3BlcmFuZCIgIj1yIikKKwkobmVnOkhTSSAoZXFuZTpIU0kgKG1hdGNoX29w ZXJhbmQ6SFNJMiAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpCisJCQkgICAobWF0Y2hfb3Bl cmFuZDpIU0kyIDIgInJlZ2lzdGVyX29wZXJhbmQiICJyIikpKSldCisgICIhVEFSR0VUX0g4 MzAwU1giCisgICIjIgorICAiJiYgcmVsb2FkX2NvbXBsZXRlZCIKKyAgWyhzZXQgKHJlZzpD Q1ogQ0NfUkVHKQorCShlcTpDQ1ogKG1hdGNoX2R1cCAxKSAobWF0Y2hfZHVwIDIpKSkKKyAg IChzZXQgKG1hdGNoX2R1cCAwKQorCShuZWc6SFNJICg8ZXFuZV9pbnZlcnQ+OkhTSSAocmVn OkNDWiBDQ19SRUcpIChjb25zdF9pbnQgMCkpKSldKQorCisoZGVmaW5lX2luc25fYW5kX3Nw bGl0ICIqc3RvcmVfel9oaV9hbmQiCisgIFsoc2V0IChtYXRjaF9vcGVyYW5kOkhTSSAwICJy ZWdpc3Rlcl9vcGVyYW5kIiAiPXIiKQorCShhbmQ6SFNJIChlcW5lOkhTSSAobWF0Y2hfb3Bl cmFuZDpIU0kyIDEgInJlZ2lzdGVyX29wZXJhbmQiICJyIikKKwkJCSAgIChtYXRjaF9vcGVy YW5kOkhTSTIgMiAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKSkKKwkJIChtYXRjaF9vcGVyYW5k OkhTSSAzICJyZWdpc3Rlcl9vcGVyYW5kIiAiciIpKSldCisgICIhVEFSR0VUX0g4MzAwU1gi CisgICIjIgorICAiJiYgcmVsb2FkX2NvbXBsZXRlZCIKKyAgWyhzZXQgKHJlZzpDQ1ogQ0Nf UkVHKQorCShlcTpDQ1ogKG1hdGNoX2R1cCAxKSAobWF0Y2hfZHVwIDIpKSkKKyAgIChzZXQg KG1hdGNoX2R1cCAwKQorCShhbmQ6SFNJICg8ZXFuZV9pbnZlcnQ+OkhTSSAocmVnOkNDWiBD Q19SRUcpIChjb25zdF9pbnQgMCkpCisJCSAobWF0Y2hfZHVwIDMpKSldKQorCisoZGVmaW5l X2luc24gIipzdG9yZV96Xzxtb2RlPiIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6SFNJIDAg InJlZ2lzdGVyX29wZXJhbmQiICI9ciIpCisJKGVxbmU6SFNJIChyZWc6Q0NaIENDX1JFRykg KGNvbnN0X2ludCAwKSkpXQorICAiIVRBUkdFVF9IODMwMFNYIgorICB7CisgICAgaWYgKDxN T0RFPm1vZGUgPT0gSEltb2RlKQorICAgICAgeworCWlmICg8Q09ERT4gPT0gTkUpCisJICB7 CisJICAgIGlmIChUQVJHRVRfSDgzMDBTKQorCSAgICAgIHJldHVybiAic3RjXHRjY3IsJVgw XDtzaGxyLmJcdCMyLCVYMFw7YW5kLndcdCMxLCVUMCI7CisJICAgIHJldHVybiAic3RjXHRj Y3IsJVgwXDtibGRcdCMyLCVYMFw7eG9yLndcdCVUMCwlVDBcO2JzdFx0IzAsJVgwIjsKKwkg IH0KKwllbHNlCisJICByZXR1cm4gInN0Y1x0Y2NyLCVYMFw7YmxkXHQjMiwlWDBcO3hvci53 XHQlVDAsJVQwXDtiaXN0XHQjMCwlWDAiOworICAgICAgfQorICAgIGVsc2UgaWYgKDxNT0RF Pm1vZGUgPT0gU0ltb2RlKQorICAgICAgeworCWlmICg8Q09ERT4gPT0gTkUpCisJICB7CisJ ICAgIGlmIChUQVJHRVRfSDgzMDBTKQorCSAgICAgIHJldHVybiAic3RjXHRjY3IsJVgwXDtz aGxyLmJcdCMyLCVYMFw7YW5kLmxcdCMxLCVTMCI7CisJICAgIHJldHVybiAic3RjXHRjY3Is JVgwXDtibGRcdCMyLCVYMFw7eG9yLmxcdCVTMCwlUzBcO2JzdFx0IzAsJVgwIjsKKwkgIH0K KwllbHNlCisJICByZXR1cm4gInN0Y1x0Y2NyLCVYMFw7YmxkXHQjMiwlWDBcO3hvci5sXHQl UzAsJVMwXDtiaXN0XHQjMCwlWDAiOworICAgICAgfQorICAgIGdjY191bnJlYWNoYWJsZSAo KTsKKyAgfQorOzsgWFhYU0ltb2RlIGlzIDIgYnl0ZXMgbG9uZ2VyCisgIFsoc2V0X2F0dHIg Imxlbmd0aCIgIjgiKV0pCisKKyhkZWZpbmVfaW5zbiAiKnN0b3JlX3pfPG1vZGU+X3NiIgor ICBbKHNldCAobWF0Y2hfb3BlcmFuZDpIU0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yIikK KwkoYXNoaWZ0OkhTSSAoZXFuZTpIU0kgKHJlZzpDQ1ogQ0NfUkVHKSAoY29uc3RfaW50IDAp KQorCQkgICAgKGNvbnN0X2ludCAxNSkpKV0KKyAgIiFUQVJHRVRfSDgzMDBTWCIKKyAgewor ICAgIGlmICg8TU9ERT5tb2RlID09IEhJbW9kZSkKKyAgICAgIHsKKwlpZiAoPENPREU+ID09 IE5FKQorCSAgcmV0dXJuICJzdGNcdGNjciwlWDBcO2JsZFx0IzIsJVgwXDt4b3Iud1x0JVQw LCVUMFw7YnN0XHQjNywldDAiOworCWVsc2UKKwkgIHJldHVybiAic3RjXHRjY3IsJVgwXDti bGRcdCMyLCVYMFw7eG9yLndcdCVUMCwlVDBcO2Jpc3RcdCM3LCV0MCI7CisgICAgICB9Cisg ICAgZWxzZSBpZiAoPE1PREU+bW9kZSA9PSBTSW1vZGUpCisgICAgICB7CisJaWYgKDxDT0RF PiA9PSBORSkKKwkgIHJldHVybiAic3RjXHRjY3IsJVgwXDtibGRcdCMyLCVYMFw7eG9yLmxc dCVUMCwlVDBcO3JvdHhyLmxcdCVTMCI7CisJZWxzZQorCSAgcmV0dXJuICJzdGNcdGNjciwl WDBcO2JpbGRcdCMyLCVYMFw7eG9yLmxcdCVUMCwlVDBcO3JvdHhyLmxcdCVTMCI7CisgICAg ICB9CisgICAgZ2NjX3VucmVhY2hhYmxlICgpOworICB9CisgIDs7IFhYWCBTSW1vZGUgaXMg bGFyZ2VyCisgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjgiKV0pCisKKyhkZWZpbmVfaW5zbiAi KnN0b3JlX3pfPG1vZGU+X25lZyIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6SFNJIDAgInJl Z2lzdGVyX29wZXJhbmQiICI9ciIpCisJKG5lZzpIU0kgKGVxbmU6SFNJIChyZWc6Q0NaIEND X1JFRykgKGNvbnN0X2ludCAwKSkpKV0KKyAgIiFUQVJHRVRfSDgzMDBTWCIKKyAgeworICAg IGlmICg8TU9ERT5tb2RlID09IEhJbW9kZSkKKyAgICAgIHsKKwlpZiAoPENPREU+ID09IE5F KQorCSAgcmV0dXJuICJzdGNcdGNjciwlWDBcO2JsZFx0IzIsJVgwXDtzdWJ4LmJcdCVYMCwl WDBcO2V4dHMud1x0JVQwIjsKKwllbHNlCisJICByZXR1cm4gInN0Y1x0Y2NyLCVYMFw7Ymls ZFx0IzIsJVgwXDtzdWJ4LmJcdCVYMCwlWDBcO2V4dHMud1x0JVQwIjsKKyAgICAgIH0KKyAg ICBlbHNlIGlmICg8TU9ERT5tb2RlID09IFNJbW9kZSkKKyAgICAgIHsKKwlpZiAoPENPREU+ ID09IE5FKQorCSAgcmV0dXJuICJzdGNcdGNjciwlWDBcO2JsZFx0IzIsJVgwXDtzdWJ4LmJc dCVYMCwlWDBcO2V4dHMud1x0JVQwXDtleHRzLmxcdCVTMCI7CisJZWxzZQorCSAgcmV0dXJu ICJzdGNcdGNjciwlWDBcO2JpbGRcdCMyLCVYMFw7c3VieC5iXHQlWDAsJVgwXDtleHRzLndc dCVUMFw7ZXh0cy5sXHQlUzAiOworICAgICAgfQorICAgIGdjY191bnJlYWNoYWJsZSAoKTsK KyAgfQorICA7OyBYWFggc2ltb2RlIGlzIGFuIGluc3RydWN0aW9uIGxvbmdlcgorICBbKHNl dF9hdHRyICJsZW5ndGgiICI4IildKQorCisoZGVmaW5lX2luc24gIipzdG9yZV96Xzxtb2Rl Pl9hbmQiCisgIFsoc2V0IChtYXRjaF9vcGVyYW5kOkhTSSAwICJyZWdpc3Rlcl9vcGVyYW5k IiAiPXIiKQorCShhbmQ6SFNJIChlcW5lOkhTSSAocmVnOkNDWiBDQ19SRUcpIChjb25zdF9p bnQgMCkpCisJCSAobWF0Y2hfb3BlcmFuZDpIU0kgMSAicmVnaXN0ZXJfb3BlcmFuZCIgInIi KSkpXQorICAiIVRBUkdFVF9IODMwMFNYIgorICB7CisgICAgaWYgKDxNT0RFPm1vZGUgPT0g SEltb2RlKQorICAgICAgeworCWlmICg8Q09ERT4gPT0gTkUpCisJICByZXR1cm4gImJsZFx0 IzAsJVgxXDtzdGNcdGNjciwlWDBcO2JhbmRcdCMyLCVYMFw7eG9yLndcdCVUMCwlVDBcO2Jz dFx0IzAsJVgwIjsKKwllbHNlCisJICByZXR1cm4gImJpbGRcdCMwLCVYMVw7c3RjXHRjY3Is JVgwXDtiYW5kXHQjMiwlWDBcO3hvci53XHQlVDAsJVQwXDtiaXN0XHQjMCxYMCI7CisgICAg ICB9CisgICAgZWxzZSBpZiAoPE1PREU+bW9kZSA9PSBTSW1vZGUpCisgICAgICB7CisJaWYg KDxDT0RFPiA9PSBORSkKKwkgIHJldHVybiAiYmxkXHQjMCwlWDFcO3N0Y1x0Y2NyLCVYMFw7 YmFuZFx0IzIsJVgwXDt4b3IubFx0JVMwLCVTMFw7YnN0XHQjMCwlWDAiOworCWVsc2UKKwkg IHJldHVybiAiYmlsZFx0IzAsJVgxXDtzdGNcdGNjciwlWDBcO2JhbmRcdCMyLCVYMFw7eG9y LmxcdCVTMCwlUzBcO2Jpc3RcdCMwLFgwIjsKKyAgICAgIH0KKyAgICBnY2NfdW5yZWFjaGFi bGUgKCk7CisgIH0KKyAgOzsgWFhYIHNpbW9kZSBpcyBhbiBpbnN0cnVjdGlvbiBsb25nZXIK KyAgWyhzZXRfYXR0ciAibGVuZ3RoIiAiOCIpXSkKKworOzsgV2UgY2FuIHRlc3QgdGhlIHVw cGVyIGJ5dGUgb2YgYSBISW1vZGUgcmVnaXN0ZXIgYW5kIHRoZSB1cHBlciB3b3JkCis7OyBv ZiBhIFNJbW9kZSByZWdpc3RlcgorCis7OyBXZSBjYW4gdGVzdCB0aGUgdXBwZXIgYnl0ZSBv ZiBhIEhJbW9kZSByZWdpc3RlciBhbmQgdGhlIHVwcGVyIHdvcmQKKzs7IG9mIGEgU0ltb2Rl IHJlZ2lzdGVyCisoZGVmaW5lX2luc25fYW5kX3NwbGl0ICIqc3RvcmVfeiIKKyAgWyhzZXQg KG1hdGNoX29wZXJhbmQ6SEkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yIikKKwkoZXFuZTpI SSAoYW5kOkhJIChtYXRjaF9vcGVyYW5kOkhJIDEgInJlZ2lzdGVyX29wZXJhbmQiICJyIikK KwkJCSAoY29uc3RfaW50IC0yNTYpKQorCQkgKGNvbnN0X2ludCAwKSkpXQorICAiIVRBUkdF VF9IODMwMFNYIgorICAiIyIKKyAgIiYmIHJlbG9hZF9jb21wbGV0ZWQiCisgIFsoc2V0IChy ZWc6Q0NaIENDX1JFRykKKwkoY29tcGFyZSAoYW5kOkhJIChtYXRjaF9kdXAgMSkgKGNvbnN0 X2ludCAtMjU2KSkKKwkJIChjb25zdF9pbnQgMCkpKQorICAgKHNldCAobWF0Y2hfZHVwIDAp CisJKDxlcW5lX2ludmVydD46SEkgKHJlZzpDQ1ogQ0NfUkVHKSAoY29uc3RfaW50IDApKSld KQo= --------------fNkuumVA51vLzR7wmRf12lBf--