From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 18131 invoked by alias); 15 Feb 2008 17:28:18 -0000 Received: (qmail 18120 invoked by uid 22791); 15 Feb 2008 17:28:17 -0000 X-Spam-Check-By: sourceware.org Received: from wa-out-1112.google.com (HELO wa-out-1112.google.com) (209.85.146.176) by sourceware.org (qpsmtpd/0.31) with ESMTP; Fri, 15 Feb 2008 17:28:00 +0000 Received: by wa-out-1112.google.com with SMTP id m16so1228605waf.20 for ; Fri, 15 Feb 2008 09:27:58 -0800 (PST) Received: by 10.115.17.11 with SMTP id u11mr3166266wai.149.1203096477972; Fri, 15 Feb 2008 09:27:57 -0800 (PST) Received: by 10.115.15.6 with HTTP; Fri, 15 Feb 2008 09:27:57 -0800 (PST) Message-ID: <24b520d20802150927r7c21f287l1cd881471c732093@mail.gmail.com> Date: Fri, 15 Feb 2008 17:41:00 -0000 From: "Doug Gregor" To: "GCC Patches" , "Jason Merrill" Subject: [C++ PATCH] Nested non-type template parameter packs using outer template parameter packs (PR c++/35022) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_8741_20390625.1203096477964" X-IsSubscribed: yes Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org X-SW-Source: 2008-02/txt/msg00576.txt.bz2 ------=_Part_8741_20390625.1203096477964 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline Content-length: 2178 This patch fixes PR c++/35022, a regression involving non-type template parameter packs whose type involves template parameter packs from an outer level of templates. The basic problem shown in PR c++/35022 is that we weren't properly dealing with tsubst_pack_expansion when it returns a pack expansion, as it does when we're substituting into a nested template. This patch fixes this problem in two contexts: when coercing template arguments to a non-type template parameter pack (the ICE from the PR) and also when dealing with the "sizeof...(X)" form of SIZEOF_EXPR. Also, the actual PR was an ice-on-invalid-code, where adding an ellipsis makes the code ill-formed. Unfortunately, that illuminated an error in the parsing logic, where we weren't properly parsing an unnamed non-type template parameter pack. The parser tweaks in this patch fix that problem. The astute reviewer will note that there are 3 xfails in this new test case. These are examples that I believe should be well-formed, but (1) it's not entirely clear that the C++0x working paper agrees with me, (2) the results of this test case will change anyway if N2488 goes through in two weeks, and (3) I don't have a fix, but the probable fix would affect too much C++98 code for me to propose at this stage of GCC development. Tested i686-pc-linux-gnu, fixes a regression; okay for 4.3? - Doug 2008-02-15 Douglas Gregor PR c++/35022 * pt.c (coerce_template_parameter_pack): Cope with tsubst_pack_expansion returning a pack expansion (as occurs when substituting into a nested template). (tsubst_copy) : Cope with tsubst_pack_expansion returning a pack expansion, or a TREE_VEC ending in a pack expansion, both of which can occur when substituting into a nested template. (tsubst_copy_and_build) : When we're instantiating the sizeof...(X) form, make tsubst_copy do the work. * parser.c (cp_parser_template_parameter): Deal with unnamed non-type template parameter packs identified by pack expansions in the parameter type. 2008-02-15 Douglas Gregor PR c++/35022 * g++.dg/cpp0x/vt-35022.C: New. ------=_Part_8741_20390625.1203096477964 Content-Type: text/x-patch; name=variadic-ttp.patch Content-Transfer-Encoding: base64 X-Attachment-Id: f_fcozvqzz0 Content-Disposition: attachment; filename=variadic-ttp.patch Content-length: 9468 SW5kZXg6IGNwL3B0LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY3Av cHQuYwkocmV2aXNpb24gMTMyMzQwKQorKysgY3AvcHQuYwkod29ya2luZyBj b3B5KQpAQCAtNTA0NSw4ICs1MDQ1LDE5IEBAIGNvZXJjZV90ZW1wbGF0ZV9w YXJhbWV0ZXJfcGFjayAodHJlZSBwYXIKICAgICAgIGlmIChwYWNrZWRfdHlw ZXMgPT0gZXJyb3JfbWFya19ub2RlKQogICAgICAgICByZXR1cm4gZXJyb3Jf bWFya19ub2RlOwogCisgICAgICAvKiBJZiB0aGUgdHlwZSBvZiB0aGUgbm9u LXR5cGUgdGVtcGxhdGUgcGFyYW1ldGVyIHBhY2sgaW5jbHVkZXMKKwkgYSB0 ZW1wbGF0ZSBwYXJhbWV0ZXIgcGFjayBmcm9tIGFuIG91dGVyIHRlbXBsYXRl LCB3ZSBjYW4gZW5kCisJIHVwIHdpdGggYSBwYWNrIGV4cGFuc2lvbiBhcyB0 aGUgcmVzdWx0IG9mCisJIHRzdWJzdF9wYWNrX2V4cGFuc2lvbi4gSW4gdGhp cyBjYXNlLCBqdXN0IHByZXRlbmQgdGhhdCB0aGVyZQorCSBhcmUgbm8gInBh Y2tlZCB0eXBlcyIuICBUaGF0IHdheSwgd2UnbGwganVzdCBjb21wYXJlIGVh Y2ggb2YKKwkgdGhlIHRlbXBsYXRlIGFyZ3VtZW50cyBhZ2FpbnN0IHRoaXMg c2FtZSB0ZW1wbGF0ZSBwYXJhbWV0ZXIKKwkgdHlwZS4gICovCisgICAgICBp ZiAoUEFDS19FWFBBTlNJT05fUCAocGFja2VkX3R5cGVzKSkKKwlwYWNrZWRf dHlwZXMgPSBOVUxMX1RSRUU7CisKICAgICAgIC8qIENoZWNrIHRoYXQgd2Ug aGF2ZSB0aGUgcmlnaHQgbnVtYmVyIG9mIGFyZ3VtZW50cy4gICovCiAgICAg ICBpZiAoYXJnX2lkeCA8IG5hcmdzCisJICAmJiBwYWNrZWRfdHlwZXMKICAg ICAgICAgICAmJiAhUEFDS19FWFBBTlNJT05fUCAoVFJFRV9WRUNfRUxUIChp bm5lcl9hcmdzLCBhcmdfaWR4KSkKICAgICAgICAgICAmJiBuYXJncyAtIGFy Z19pZHggIT0gVFJFRV9WRUNfTEVOR1RIIChwYWNrZWRfdHlwZXMpKQogICAg ICAgICB7CkBAIC01MDYzLDYgKzUwNzQsNyBAQCBjb2VyY2VfdGVtcGxhdGVf cGFyYW1ldGVyX3BhY2sgKHRyZWUgcGFyCiAgICAgICAgICB0ZW1wbGF0ZSBw YXJhbWV0ZXIgcGFjayBhcmUsIGluIGZhY3QsIHZhbGlkIGZvciBub24tdHlw ZQogICAgICAgICAgdGVtcGxhdGUgcGFyYW1ldGVycy4gICovCiAgICAgICBp ZiAoYXJnX2lkeCA8IG5hcmdzIAorCSAgJiYgcGFja2VkX3R5cGVzCiAgICAg ICAgICAgJiYgUEFDS19FWFBBTlNJT05fUCAoVFJFRV9WRUNfRUxUIChpbm5l cl9hcmdzLCBhcmdfaWR4KSkpCiAgICAgICAgIHsKICAgICAgICAgICBpbnQg aiwgbGVuID0gVFJFRV9WRUNfTEVOR1RIIChwYWNrZWRfdHlwZXMpOwpAQCAt OTgzNiw5ICs5ODQ4LDI5IEBAIHRzdWJzdF9jb3B5ICh0cmVlIHQsIHRyZWUg YXJncywgdHN1YnN0X2YKICAgICAgICAgICAvKiBXZSBvbmx5IHdhbnQgdG8g Y29tcHV0ZSB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cy4gICovCiAgICAgICAg ICAgdHJlZSBleHBhbmRlZCA9IHRzdWJzdF9wYWNrX2V4cGFuc2lvbiAoVFJF RV9PUEVSQU5EICh0LCAwKSwgYXJncywKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsYWluLCBpbl9kZWNs KTsKKwkgIGludCBsZW47CisKKwkgIGlmIChUUkVFX0NPREUgKGV4cGFuZGVk KSA9PSBUUkVFX1ZFQykKKwkgICAgbGVuID0gVFJFRV9WRUNfTEVOR1RIIChl eHBhbmRlZCk7CisKIAkgIGlmIChleHBhbmRlZCA9PSBlcnJvcl9tYXJrX25v ZGUpCiAJICAgIHJldHVybiBlcnJvcl9tYXJrX25vZGU7Ci0gICAgICAgICAg cmV0dXJuIGJ1aWxkX2ludF9jc3QgKHNpemVfdHlwZV9ub2RlLCBUUkVFX1ZF Q19MRU5HVEggKGV4cGFuZGVkKSk7CisJICBlbHNlIGlmIChQQUNLX0VYUEFO U0lPTl9QIChleHBhbmRlZCkKKwkJICAgfHwgKFRSRUVfQ09ERSAoZXhwYW5k ZWQpID09IFRSRUVfVkVDCisJCSAgICAgICAmJiBsZW4gPiAwCisJCSAgICAg ICAmJiBQQUNLX0VYUEFOU0lPTl9QIChUUkVFX1ZFQ19FTFQgKGV4cGFuZGVk LCBsZW4tMSkpKSkKKwkgICAgeworCSAgICAgIGlmIChUUkVFX0NPREUgKGV4 cGFuZGVkKSA9PSBUUkVFX1ZFQykKKwkJZXhwYW5kZWQgPSBUUkVFX1ZFQ19F TFQgKGV4cGFuZGVkLCBsZW4gLSAxKTsKKworCSAgICAgIGlmIChUWVBFX1Ag KGV4cGFuZGVkKSkKKwkJcmV0dXJuIGN4eF9zaXplb2Zfb3JfYWxpZ25vZl90 eXBlIChleHBhbmRlZCwgU0laRU9GX0VYUFIsIAorCQkJCQkJICAgdHJ1ZSk7 CisJICAgICAgZWxzZQorCQlyZXR1cm4gY3h4X3NpemVvZl9vcl9hbGlnbm9m X2V4cHIgKGV4cGFuZGVkLCBTSVpFT0ZfRVhQUik7CisJICAgIH0KKwkgIGVs c2UKKwkgICAgcmV0dXJuIGJ1aWxkX2ludF9jc3QgKHNpemVfdHlwZV9ub2Rl LCBsZW4pOwogICAgICAgICB9CiAgICAgICAvKiBGYWxsIHRocm91Z2ggKi8K IApAQCAtMTA4MzQsMTQgKzEwODY2LDcgQEAgdHN1YnN0X2NvcHlfYW5kX2J1 aWxkICh0cmVlIHQsCiAKICAgICBjYXNlIFNJWkVPRl9FWFBSOgogICAgICAg aWYgKFBBQ0tfRVhQQU5TSU9OX1AgKFRSRUVfT1BFUkFORCAodCwgMCkpKQot ICAgICAgICB7Ci0gICAgICAgICAgLyogV2Ugb25seSB3YW50IHRvIGNvbXB1 dGUgdGhlIG51bWJlciBvZiBhcmd1bWVudHMuICAqLwotICAgICAgICAgIHRy ZWUgZXhwYW5kZWQgPSB0c3Vic3RfcGFja19leHBhbnNpb24gKFRSRUVfT1BF UkFORCAodCwgMCksIGFyZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb21wbGFpbiwgaW5fZGVjbCk7Ci0J ICBpZiAoZXhwYW5kZWQgPT0gZXJyb3JfbWFya19ub2RlKQotCSAgICByZXR1 cm4gZXJyb3JfbWFya19ub2RlOwotICAgICAgICAgIHJldHVybiBidWlsZF9p bnRfY3N0IChzaXplX3R5cGVfbm9kZSwgVFJFRV9WRUNfTEVOR1RIIChleHBh bmRlZCkpOwotICAgICAgICB9CisJcmV0dXJuIHRzdWJzdF9jb3B5ICh0LCBh cmdzLCBjb21wbGFpbiwgaW5fZGVjbCk7CiAgICAgICAvKiBGYWxsIHRocm91 Z2ggKi8KICAgICAgIAogICAgIGNhc2UgQUxJR05PRl9FWFBSOgpJbmRleDog Y3AvcGFyc2VyLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY3AvcGFy c2VyLmMJKHJldmlzaW9uIDEzMjM0MCkKKysrIGNwL3BhcnNlci5jCSh3b3Jr aW5nIGNvcHkpCkBAIC05NDAxLDI5ICs5NDAxLDQxIEBAIGNwX3BhcnNlcl90 ZW1wbGF0ZV9wYXJhbWV0ZXIgKGNwX3BhcnNlcioKICAgICAgIG1heWJlX3dh cm5fdmFyaWFkaWNfdGVtcGxhdGVzICgpOwogICAgICAgCiAgICAgICAqaXNf cGFyYW1ldGVyX3BhY2sgPSB0cnVlOworICAgIH0KKyAgLyogV2UgbWlnaHQg ZW5kIHVwIHdpdGggYSBwYWNrIGV4cGFuc2lvbiBhcyB0aGUgdHlwZSBvZiB0 aGUgbm9uLXR5cGUKKyAgICAgdGVtcGxhdGUgcGFyYW1ldGVyLCBpbiB3aGlj aCBjYXNlIHRoaXMgaXMgYSBub24tdHlwZSB0ZW1wbGF0ZQorICAgICBwYXJh bWV0ZXIgcGFjay4gICovCisgIGVsc2UgaWYgKHBhcmFtZXRlcl9kZWNsYXJh dG9yCisJICAgJiYgcGFyYW1ldGVyX2RlY2xhcmF0b3ItPmRlY2xfc3BlY2lm aWVycy50eXBlCisJICAgJiYgUEFDS19FWFBBTlNJT05fUCAocGFyYW1ldGVy X2RlY2xhcmF0b3ItPmRlY2xfc3BlY2lmaWVycy50eXBlKSkKKyAgICB7Cisg ICAgICAqaXNfcGFyYW1ldGVyX3BhY2sgPSB0cnVlOworICAgICAgcGFyYW1l dGVyX2RlY2xhcmF0b3ItPmRlY2xfc3BlY2lmaWVycy50eXBlID0gCisJUEFD S19FWFBBTlNJT05fUEFUVEVSTiAocGFyYW1ldGVyX2RlY2xhcmF0b3ItPmRl Y2xfc3BlY2lmaWVycy50eXBlKTsKKyAgICB9CiAKKyAgaWYgKCppc19wYXJh bWV0ZXJfcGFjayAmJiBjcF9sZXhlcl9uZXh0X3Rva2VuX2lzIChwYXJzZXIt PmxleGVyLCBDUFBfRVEpKQorICAgIHsKICAgICAgIC8qIFBhcmFtZXRlciBw YWNrcyBjYW5ub3QgaGF2ZSBkZWZhdWx0IGFyZ3VtZW50cy4gIEhvd2V2ZXIs IGEKIAkgdXNlciBtYXkgdHJ5IHRvIGRvIHNvLCBzbyB3ZSdsbCBwYXJzZSB0 aGVtIGFuZCBnaXZlIGFuCiAJIGFwcHJvcHJpYXRlIGRpYWdub3N0aWMgaGVy ZS4gICovCi0gICAgICBpZiAoY3BfbGV4ZXJfbmV4dF90b2tlbl9pcyAocGFy c2VyLT5sZXhlciwgQ1BQX0VRKSkKLQl7Ci0JICAvKiBDb25zdW1lIHRoZSBg PScuICAqLwotCSAgY3BfbGV4ZXJfY29uc3VtZV90b2tlbiAocGFyc2VyLT5s ZXhlcik7CiAKLQkgIC8qIEZpbmQgdGhlIG5hbWUgb2YgdGhlIHBhcmFtZXRl ciBwYWNrLiAgKi8gICAgIAotCSAgaWRfZGVjbGFyYXRvciA9IHBhcmFtZXRl cl9kZWNsYXJhdG9yLT5kZWNsYXJhdG9yOwotCSAgd2hpbGUgKGlkX2RlY2xh cmF0b3IgJiYgaWRfZGVjbGFyYXRvci0+a2luZCAhPSBjZGtfaWQpCi0JICAg IGlkX2RlY2xhcmF0b3IgPSBpZF9kZWNsYXJhdG9yLT5kZWNsYXJhdG9yOwot CSAgCi0JICBpZiAoaWRfZGVjbGFyYXRvciAmJiBpZF9kZWNsYXJhdG9yLT5r aW5kID09IGNka19pZCkKLQkgICAgZXJyb3IgKCJ0ZW1wbGF0ZSBwYXJhbWV0 ZXIgcGFjayAlcUQgY2Fubm90IGhhdmUgYSBkZWZhdWx0IGFyZ3VtZW50IiwK LQkJICAgaWRfZGVjbGFyYXRvci0+dS5pZC51bnF1YWxpZmllZF9uYW1lKTsK LQkgIGVsc2UKLQkgICAgZXJyb3IgKCJ0ZW1wbGF0ZSBwYXJhbWV0ZXIgcGFj ayBjYW5ub3QgaGF2ZSBhIGRlZmF1bHQgYXJndW1lbnQiKTsKLQotICAgICAg ICAgIC8qIFBhcnNlIHRoZSBkZWZhdWx0IGFyZ3VtZW50LCBidXQgdGhyb3cg YXdheSB0aGUgcmVzdWx0LiAgKi8KLSAgICAgICAgICBjcF9wYXJzZXJfZGVm YXVsdF9hcmd1bWVudCAocGFyc2VyLCAvKnRlbXBsYXRlX3Bhcm1fcD0qL3Ry dWUpOwotCX0KKyAgICAgIC8qIENvbnN1bWUgdGhlIGA9Jy4gICovCisgICAg ICBjcF9sZXhlcl9jb25zdW1lX3Rva2VuIChwYXJzZXItPmxleGVyKTsKKyAg ICAgIAorICAgICAgLyogRmluZCB0aGUgbmFtZSBvZiB0aGUgcGFyYW1ldGVy IHBhY2suICAqLyAgICAgCisgICAgICBpZF9kZWNsYXJhdG9yID0gcGFyYW1l dGVyX2RlY2xhcmF0b3ItPmRlY2xhcmF0b3I7CisgICAgICB3aGlsZSAoaWRf ZGVjbGFyYXRvciAmJiBpZF9kZWNsYXJhdG9yLT5raW5kICE9IGNka19pZCkK KwlpZF9kZWNsYXJhdG9yID0gaWRfZGVjbGFyYXRvci0+ZGVjbGFyYXRvcjsK KyAgICAgIAorICAgICAgaWYgKGlkX2RlY2xhcmF0b3IgJiYgaWRfZGVjbGFy YXRvci0+a2luZCA9PSBjZGtfaWQpCisJZXJyb3IgKCJ0ZW1wbGF0ZSBwYXJh bWV0ZXIgcGFjayAlcUQgY2Fubm90IGhhdmUgYSBkZWZhdWx0IGFyZ3VtZW50 IiwKKwkgICAgICAgaWRfZGVjbGFyYXRvci0+dS5pZC51bnF1YWxpZmllZF9u YW1lKTsKKyAgICAgIGVsc2UKKwllcnJvciAoInRlbXBsYXRlIHBhcmFtZXRl ciBwYWNrIGNhbm5vdCBoYXZlIGEgZGVmYXVsdCBhcmd1bWVudCIpOworICAg ICAgCisgICAgICAvKiBQYXJzZSB0aGUgZGVmYXVsdCBhcmd1bWVudCwgYnV0 IHRocm93IGF3YXkgdGhlIHJlc3VsdC4gICovCisgICAgICBjcF9wYXJzZXJf ZGVmYXVsdF9hcmd1bWVudCAocGFyc2VyLCAvKnRlbXBsYXRlX3Bhcm1fcD0q L3RydWUpOwogICAgIH0KIAogICBwYXJtID0gZ3Jva2RlY2xhcmF0b3IgKHBh cmFtZXRlcl9kZWNsYXJhdG9yLT5kZWNsYXJhdG9yLApJbmRleDogdGVzdHN1 aXRlL2crKy5kZy9jcHAweC92dC0zNTAyMi5DCj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KLS0tIHRlc3RzdWl0ZS9nKysuZGcvY3BwMHgvdnQtMzUwMjIuQwko cmV2aXNpb24gMCkKKysrIHRlc3RzdWl0ZS9nKysuZGcvY3BwMHgvdnQtMzUw MjIuQwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MiBAQAorLy8geyBkZy1v cHRpb25zICItc3RkPWMrKzB4IiB9Cit0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBU LCB0ZW1wbGF0ZTxULi4ucD4gY2xhc3MgWD4gdm9pZCBmMShYPDA+KTsKKwor dGVtcGxhdGU8aW50PiBjbGFzcyBYMSB7IH07Cit0ZW1wbGF0ZTxpbnQuLi4+ IGNsYXNzIFgyIHsgfTsKKwordm9pZCBnMSgpCit7CisgIFgxPDA+IHgxOwor ICBmMTxpbnQ+KHgxKTsgLy8geyBkZy1ib2d1cyAibm8gbWF0Y2hpbmciICIi IHsgeGZhaWwgKi0qLSogfSAxMCB9CisKKyAgWDI8MD4geDI7CisgIGYxPGlu dD4oeDIpOyAvLyB7IGRnLWVycm9yICJubyBtYXRjaGluZyIgfQorfQorCit0 ZW1wbGF0ZTx0eXBlbmFtZS4uLiBULCB0ZW1wbGF0ZTxUPiBjbGFzcyBYPiB2 b2lkIGYyKFg8MD4pOyAvLyB7IGRnLWVycm9yICJub3QgZXhwYW5kZWR8VCIg fQorCit2b2lkIGcyKCkKK3sKKyAgWDE8MD4geDE7CisgIGYyPGludD4oeDEp OyAvLyB7IGRnLWJvZ3VzICJubyBtYXRjaGluZyIgICIiIHsgeGZhaWwgKi0q LSogfSAyMSB9CisKKyAgWDI8MD4geDI7CisgIGYyPGludD4oeDIpOyAvLyB7 IGRnLWVycm9yICJubyBtYXRjaGluZyIgfQorfQorCit0ZW1wbGF0ZTx0eXBl bmFtZS4uLiBULCB0ZW1wbGF0ZTxULi4uPiBjbGFzcyBYPiB2b2lkIGYzKFg8 MD4pOworCit2b2lkIGczKCkKK3sKKyAgWDE8MD4geDE7CisgIGYzPGludD4o eDEpOyAvLyB7IGRnLWJvZ3VzICJubyBtYXRjaGluZyIgICIiIHsgeGZhaWwg Ki0qLSogfSAzMiB9CisKKyAgWDI8MD4geDI7CisgIGYzPGludD4oeDIpOyAv LyB7IGRnLWVycm9yICJubyBtYXRjaGluZyIgfQorfQorCisKK3RlbXBsYXRl PGludCBOPiBzdHJ1Y3QgSW50MlR5cGUgeyB9OworCit0ZW1wbGF0ZTx0eXBl bmFtZS4uLiBUPgorc3RydWN0IE91dGVyIHsKKyAgdGVtcGxhdGU8dHlwZW5h bWUuLi4gVT4KKyAgdm9pZCBmb28oSW50MlR5cGU8c2l6ZW9mLi4uKFQpPiwg SW50MlR5cGU8c2l6ZW9mLi4uKFUpPik7Cit9OworCisKK091dGVyPHNob3J0 LCBpbnQsIGxvbmc+IG91dGVyOworCit2b2lkIGc0KCkgeworICBvdXRlci5m b288ZmxvYXQsIGRvdWJsZT4oSW50MlR5cGU8Mz4oKSwgSW50MlR5cGU8Mj4o KSk7Cit9Cg== ------=_Part_8741_20390625.1203096477964--