From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 4184 invoked by alias); 3 Nov 2002 04:56:02 -0000 Mailing-List: contact gcc-prs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-prs-owner@gcc.gnu.org Received: (qmail 4126 invoked by uid 71); 3 Nov 2002 04:56:01 -0000 Resent-Date: 3 Nov 2002 04:56:01 -0000 Resent-Message-ID: <20021103045601.4125.qmail@sources.redhat.com> Resent-From: gcc-gnats@gcc.gnu.org (GNATS Filer) Resent-Cc: gcc-prs@gcc.gnu.org, gcc-bugs@gcc.gnu.org Resent-Reply-To: gcc-gnats@gcc.gnu.org, mjmaterna60193@yahoo.com Received: (qmail 7006 invoked by uid 61); 3 Nov 2002 04:50:15 -0000 Message-Id: <20021103045015.7005.qmail@sources.redhat.com> Date: Sat, 02 Nov 2002 20:56:00 -0000 From: mjmaterna60193@yahoo.com Reply-To: mjmaterna60193@yahoo.com To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version: gnatsweb-2.9.3 (1.1.1.1.2.31) Subject: c++/8435: Template Inclusion - keyword 'export' not implemented X-SW-Source: 2002-11/txt/msg00119.txt.bz2 List-Id: >Number: 8435 >Category: c++ >Synopsis: Template Inclusion - keyword 'export' not implemented >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: sw-bug >Submitter-Id: net >Arrival-Date: Sat Nov 02 20:56:01 PST 2002 >Closed-Date: >Last-Modified: >Originator: Mark J. Materna >Release: 2.95.3-216 >Organization: >Environment: Linux >Description: Because the keyword export is not yet implemented it seems that I can not have separatley complied template definitions. Without the key word "export" when a templated class is declared in a .h and defined in a .cpp, when linking the templated class does not seem to be accessable to other translation units. This is expected according to Stroustrup. Is there another way around this? (Putting the definition in the include is really not ideal because the templated class will be widely used.) I do require this functionality. See attached file for an example. The complie command is: g++ main.cpp matrix.cpp -o matrix >How-To-Repeat: g++ main.cpp matrix.cpp -o matrix >Fix: >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/x-tar; name="matrix.tar" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="matrix.tar" bWFpbi5jcHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAxMDA2NDQAMDAwMDc2 NAAwMDAwMTQ0ADAwMDAwMDAzNTMwADA3NTYxMTA3MzMxADAxMjQxNAAgMAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAG1qbWF0ZXJuYQAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAdXNlcnMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqCiAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbi5jcHAgIC0g IGRlc2NyaXB0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0t LS0tLQogICAgYmVnaW4gICAgICAgICAgICAgICAgOiBNb24gU2VwIDIgMjAwMgogICAgY29weXJp Z2h0ICAgICAgICAgICAgOiAoQykgMjAwMiBieSBNYXJrIEouIE1hdGVybmEKICAgIGVtYWlsICAg ICAgICAgICAgICAgIDogbWptYXRlcm5hQHN5c21hdHJpeC5uZXQKICoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq Ki8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogKiAgIFRoaXMgcHJv Z3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k aWZ5ICAqCiAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKICogICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgogKiAgIChhdCB5 b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAqCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKICoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCiNpbmNs dWRlICJtYXRyaXguaCIKCgppbnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKXsKICAgCiAg IGludCBpLCBqOwogICBtYXRyaXg8ZmxvYXQ+IGEoMi4wLDMuMCksIGIoMy4wLDUuMCksIGM7Cgog ICBmb3IoaSA9IDA7IGkgPCAyOyBpKyspCiAgICBmb3IoaiA9IDA7IGogPCAzOyBqKyspCiAgICAg IGEoaSxqKSA9IGkgKyBqICsgMC41OwoKICAgZm9yKGkgPSAwOyBpIDwgMzsgaSsrKQogICAgZm9y KGogPSAwOyBqIDwgNTsgaisrKQogICAgICBiKGksaikgPSAoMSArIGkpICogKDEgKyBqKSArIDAu NTsKCiAgIGMgPSBhICogYjsKICAgY291dCA8PCAiYToiIDw8IGVuZGwgPDwgZW5kbDsKICAgYS5w cmludCgpOwogICBjb3V0IDw8ICJiOiIgPDwgZW5kbCA8PCBlbmRsOwogICBiLnByaW50KCk7CiAg IGNvdXQgPDwgImEgKiBiOiIgPDwgZW5kbCA8PCBlbmRsOwogICBjLnByaW50KCk7CgoKCiAgIG1h dHJpeDxsb25nPiBkKDIsMyksIGUoMyw1KSwgZjsKCiAgIGZvcihpID0gMDsgaSA8IDI7IGkrKykK ICAgIGZvcihqID0gMDsgaiA8IDM7IGorKykKICAgICAgZChpLGopID0gKGkgKyBqKSAqIDEwMDsK CiAgIGZvcihpID0gMDsgaSA8IDM7IGkrKykKICAgIGZvcihqID0gMDsgaiA8IDU7IGorKykKICAg ICAgZShpLGopID0gKDEgKyBpKSAqICgxICsgaik7CgogICBmID0gZCAqIGU7CiAgIGNvdXQgPDwg ImQ6IiA8PCBlbmRsIDw8IGVuZGw7CiAgIGQucHJpbnQoKTsKICAgY291dCA8PCAiZToiIDw8IGVu ZGwgPDwgZW5kbDsKICAgZS5wcmludCgpOwogICBjb3V0IDw8ICJkICogZToiIDw8IGVuZGwgPDwg ZW5kbDsKICAgZi5wcmludCgpOwoKCiAgIHJldHVybiBFWElUX1NVQ0NFU1M7CiB9CiAKIAogCgAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG1hdHJp eC5jcHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMTAwNjQ0ADAwMDA3NjQAMDAw MDE0NAAwMDAwMDAwNTI0NwAwNzU2MTEyMDIxMwAwMTI3NzUAIDAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIgIABtam1hdGVybmEAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAHVzZXJzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALyoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKgogICAgICAgICAgICAgICAgICAgICAgICAgIG1hdHJpeC5jcHAgIC0gIGRl c2NyaXB0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0t LQogICAgYmVnaW4gICAgICAgICAgICAgICAgOiBNb24gU2VwIDIgMjAwMgogICAgY29weXJpZ2h0 ICAgICAgICAgICAgOiAoQykgMjAwMiBieSBNYXJrIEouIE1hdGVybmEKICAgIGVtYWlsICAgICAg ICAgICAgICAgIDogbWptYXRlcm5hQHN5c21hdHJpeC5uZXQKICoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K Ci8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogKiAgIFRoaXMgcHJvZ3Jh bSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5 ICAqCiAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKICogICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u OyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgogKiAgIChhdCB5b3Vy IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAqCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCiNpbmNsdWRl ICJtYXRyaXguaCIKCgpleHBvcnQgdGVtcGxhdGU8Y2xhc3MgVHlwPgpUeXAmIG1hdHJpeDxUeXA+ OjpvcGVyYXRvcigpIChpbnQgaSwgaW50IGopewogIGlmKGkgPj0gMCAgJiYgaSA8IG5yKQogICAg aWYoaiA+PSAwICYmIGogPCBuYykKICAgICAgcmV0dXJuKGRhdGFbaSAqIG5jICsgal0pOwogICAg ZWxzZQogICAgICBjb3V0IDw8ICJDb2x1bW4gc3Vic2NyaXB0IG91dCBvZiByYW5nZTogIiA8PCBq IDw8IGVuZGw7CgogIGVsc2UKICAgIGNvdXQgPDwgIlJvdyBzdWJzY3JpcHQgb3V0IG9mIHJhbmdl OiAiIDw8IGkgPDwgZW5kbDsKCiAgcmV0dXJuKGRhdGFbMF0pOwogIH0KCmV4cG9ydCB0ZW1wbGF0 ZTwgY2xhc3MgVHlwID4KbWF0cml4PFR5cD4gOjogbWF0cml4KCl7CiAgIG5yID0gMTsKICAgbmMg PSAxOwogICBkYXRhID0gbmV3IFR5cFsxXTsKICB9CgpleHBvcnQgdGVtcGxhdGU8IGNsYXNzIFR5 cCA+Cm1hdHJpeDxUeXA+IDo6IG1hdHJpeChpbnQgciwgaW50IGMpewogICBuciA9IHI7CiAgIG5j ID0gYzsKICAgZGF0YSA9IG5ldyBUeXBbbnIqbmNdOwogIH0KCmV4cG9ydCB0ZW1wbGF0ZTxjbGFz cyBUeXA+Cm1hdHJpeDxUeXA+IDo6IH5tYXRyaXgoKXsKICBkZWxldGVbXSBkYXRhOwogIH0KCmV4 cG9ydCB0ZW1wbGF0ZTxjbGFzcyBUeXA+CnZvaWQgbWF0cml4PFR5cD46OnByaW50KCl7CiAgZm9y KGludCBpID0gMDsgaSA8ICBucjsgaSsrKXsKICAgIGZvcihpbnQgaiA9IDA7IGogPCAgbmM7IGor KykKICAgICAgY291dCA8PCBzZXR3KDYpIDw8IG9wZXJhdG9yKCkoaSxqKTsKCiAgICBjb3V0IDw8 IHNldHcoMCkgPDwgZW5kbDsKICAgIH0KICAgIGNvdXQgPDwgZW5kbDsKICB9CgpleHBvcnQgdGVt cGxhdGU8Y2xhc3MgVHlwPgptYXRyaXg8VHlwPjo6bWF0cml4KG1hdHJpeDxUeXA+JiBtKXsKICAg bnIgPSBtLm5yOwogICBuYyA9IG0ubmM7CiAgIGRhdGEgPSBuZXcgVHlwW25yICogbmNdOwoKICBm b3IoaW50IGkgPSAwOyBpIDwgbS5ucjsgaSsrKQogICAgZm9yKGludCBqID0gMDsgaiA8IG0ubmM7 IGorKykKICAgICAgb3BlcmF0b3IoKSAoaSxqKSA9IG0oaSxqKTsKCiAgfQoKCmV4cG9ydCB0ZW1w bGF0ZTxjbGFzcyBUeXA+Cm1hdHJpeDxUeXA+IG1hdHJpeDxUeXA+OjpvcGVyYXRvciogKG1hdHJp eDxUeXA+IG0pewogIFR5cCBzdW07CgogIGlmKG0ubnIgIT0gbmMpCiAgICByZXR1cm4obSk7Cgog IG1hdHJpeDxUeXA+IHByb2QobnIsIG0ubmMpOwoKICBmb3IoaW50IGkgPSAwOyBpIDwgbnI7IGkr Kyl7CiAgICBmb3IoaW50IGogPSAwOyBqIDwgbS5uYzsgaisrKXsKICAgICAgc3VtID0gMDsKICAg ICAgZm9yKGludCBrID0gMDsgayA8IG5jOyBrKyspCiAgICAgICAgc3VtID0gc3VtICsgb3BlcmF0 b3IoKSAoaSxrKSAqIG0oayxqKTsKCiAgICAgIHByb2QoaSxqKSA9IHN1bTsKICAgICAgfQogICAg fQoKICByZXR1cm4ocHJvZCk7Cgp9CgpleHBvcnQgdGVtcGxhdGU8Y2xhc3MgVHlwPgp2b2lkIG1h dHJpeDxUeXA+OjpvcGVyYXRvcj0gKG1hdHJpeDxUeXA+IG0pewogIG5yID0gbS5ucjsKICBuYyA9 IG0ubmM7CgogIGRlbGV0ZVtdIGRhdGE7CiAgZGF0YSA9IG5ldyBUeXBbbnIgKiBuY107CgogIGZv cihpbnQgaSA9IDA7IGkgPCBtLm5yOyBpKyspCiAgICBmb3IoaW50IGogPSAwOyBqIDwgbS5uYzsg aisrKQogICAgICBvcGVyYXRvcigpKGksaikgPSBtKGksaik7CgogIH0KAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbWF0cml4LmgAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAxMDA2NDQAMDAwMDc2NAAwMDAwMTQ0ADAw MDAwMDAzMDIwADA3NTYxMTEyNzcwADAxMjQzNgAgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAG1qbWF0ZXJuYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA dXNlcnMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqCiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0cml4LmggIC0gIGRlc2NyaXB0aW9u CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgYmVn aW4gICAgICAgICAgICAgICAgOiBNb24gU2VwIDIgMjAwMgogICAgY29weXJpZ2h0ICAgICAgICAg ICAgOiAoQykgMjAwMiBieSBNYXJrIEouIE1hdGVybmEKICAgIGVtYWlsICAgICAgICAgICAgICAg IDogbWptYXRlcm5hQHN5c21hdHJpeC5uZXQKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCi8qKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCiAqICAg aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBw dWJsaXNoZWQgYnkgICoKICogICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIg dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgogKiAgIChhdCB5b3VyIG9wdGlvbikg YW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAq ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCiNpbmNsdWRlPGlvc3RyZWFt PgojaW5jbHVkZTxpb21hbmlwPgojaW5jbHVkZTxzdGRsaWIuaD4KCnRlbXBsYXRlPGNsYXNzIFR5 cD4KY2xhc3MgbWF0cml4IHsKICBUeXAgKmRhdGE7CiAgaW50IG5yLCBuYzsgLy8gbnVtYmVyIHJv d3MsIG51bWJlciBjb2xzCgpwdWJsaWM6CiAgbWF0cml4KCk7CiAgbWF0cml4IChpbnQsIGludCk7 CiAgfm1hdHJpeCgpOwogIHZvaWQgcHJpbnQoKTsKICBpbnQgbnVtUm93cygpIHsgcmV0dXJuIG5y OyB9CiAgaW50IG51bUNvbHMoKSB7IHJldHVybiBuYzsgfQogIG1hdHJpeCAobWF0cml4JiBtKTsg ICAgICAgICAgICAgICAgICAgLy8gQ29weSBDb25zdHJ1Y3RvcgoKICBtYXRyaXggb3BlcmF0b3Iq IChtYXRyaXggbSk7ICAgICAgLy8gbWF0cml4IE11bHRpcGxpY2F0aW9uCgogIHZvaWQgb3BlcmF0 b3I9IChtYXRyaXg8VHlwPiBtKTsgICAgICAgICAvLyBtYXRyaXggQXNzaWdubWVudAogIFR5cCYg b3BlcmF0b3IoKSAoaW50IGksIGludCBqKTsgICAgICAgIC8vIG1hdHJpeCBJbmRleGluZwp9OwoK AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==