From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 29796 invoked by alias); 23 Aug 2002 14:06:01 -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 29776 invoked by uid 71); 23 Aug 2002 14:06:01 -0000 Resent-Date: 23 Aug 2002 14:06:01 -0000 Resent-Message-ID: <20020823140601.29775.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, fizban@umich.edu Received: (qmail 28743 invoked by uid 61); 23 Aug 2002 14:01:24 -0000 Message-Id: <20020823140124.28742.qmail@sources.redhat.com> Date: Fri, 23 Aug 2002 08:26:00 -0000 From: fizban@umich.edu Reply-To: fizban@umich.edu To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version: gnatsweb-2.9.3 (1.1.1.1.2.31) Subject: c++/7703: gcc gives parse errors when compiling a class function with recursively templated default value for a function parameter X-SW-Source: 2002-08/txt/msg00497.txt.bz2 List-Id: >Number: 7703 >Category: c++ >Synopsis: gcc gives parse errors when compiling a class function with recursively templated default value for a function parameter >Confidential: no >Severity: serious >Priority: low >Responsible: unassigned >State: open >Class: rejects-legal >Submitter-Id: net >Arrival-Date: Fri Aug 23 07:06:00 PDT 2002 >Closed-Date: >Last-Modified: >Originator: Lyell Haynes >Release: gcc version 3.2 >Organization: >Environment: Windows 2000 cygwin version 2.125.2.10 gcc configured with options: --prefix=/usr/local/gcc-3.2 >Description: When compiling the code, I get this error from gcc: main.cpp:22: parse error before `>' token main.cpp:24: syntax error before `.' token main.cpp: In function `int main(int, char**)': main.cpp:31: no matching function for call to `registrar::registrar(int)' main.cpp:20: candidates are: registrar::registrar() main.cpp:20: registrar::registrar(const registrar&) The default value in the registrar constructor declaration seems to cause a parsing error. My guess is that the multiple levels of templates is causing confusion here. The workaround simplifies this, creating only one level of templates by typedefing the inner template. >How-To-Repeat: template class singleton { public: static object_t& instance() { static object_t object; return object; } }; template class registry { public: void add(key_t p_key, object_t& p_object) { // do stuff here } }; template class registrar { public: registrar(key_t p_key, registry& p_registry = singleton >::instance()) { object_t object; p_registry.add(p_key, object); } }; class A { int i; }; int main(int argc, char **argv) { registrar a(1); return 0; }; >Fix: Replace class registrar with: template class registrar { public: typedef registry REGISTRY; registrar(key_t p_key, REGISTRY& p_registry = singleton::instance()) { object_t object; p_registry.add(p_key, object); } }; By "simplifying" the parameters with the typedef, the code compiles fine. >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/x-tar; name="main_s_ii.tar" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="main_s_ii.tar" bWFpbi5zAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAxMDA2NDQAMDAwMTc1 MQAwMDAxMDAxADAwMDAwMDA0NjQ3ADA3NTMxNDM3NjAwADAxMTEyNwAgMAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAGZpemJhbgAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAATm9uZQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ LmZpbGUJIm1haW4uY3BwIgoJLnN0YWJzCSIvY3lnZHJpdmUvYy9seWVsbC9wcm9ncmFtbWluZy9y ZXNlYXJjaC90ZXN0X2djYy8iLDEwMCwwLDAsTHRleHQwCgkuc3RhYnMJIm1haW4uY3BwIiwxMDAs MCwwLEx0ZXh0MAoJLnRleHQKTHRleHQwOgoJLnN0YWJzCSJnY2MyX2NvbXBpbGVkLiIsNjAsMCww LDAKCS5zdGFicwkiaW50OnQoMCwxKT1yKDAsMSk7LTIxNDc0ODM2NDg7MjE0NzQ4MzY0NzsiLDEy OCwwLDAsMAoJLnN0YWJzCSJjaGFyOnQoMCwyKT1yKDAsMik7MDsxMjc7IiwxMjgsMCwwLDAKCS5z dGFicwkibG9uZyBpbnQ6dCgwLDMpPXIoMCwzKTstMjE0NzQ4MzY0ODsyMTQ3NDgzNjQ3OyIsMTI4 LDAsMCwwCgkuc3RhYnMJInVuc2lnbmVkIGludDp0KDAsNCk9cigwLDQpOzAwMDAwMDAwMDAwMDA7 MDAzNzc3Nzc3Nzc3NzsiLDEyOCwwLDAsMAoJLnN0YWJzCSJsb25nIHVuc2lnbmVkIGludDp0KDAs NSk9cigwLDUpOzAwMDAwMDAwMDAwMDA7MDAzNzc3Nzc3Nzc3NzsiLDEyOCwwLDAsMAoJLnN0YWJz CSJsb25nIGxvbmcgaW50OnQoMCw2KT1AczY0O3IoMCw2KTswMTAwMDAwMDAwMDAwMDAwMDAwMDAw MDswNzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3OyIsMTI4LDAsMCwwCgkuc3RhYnMJImxvbmcgbG9uZyB1 bnNpZ25lZCBpbnQ6dCgwLDcpPUBzNjQ7cigwLDcpOzAwMDAwMDAwMDAwMDA7MDE3Nzc3Nzc3Nzc3 Nzc3Nzc3Nzc3Nzc7IiwxMjgsMCwwLDAKCS5zdGFicwkic2hvcnQgaW50OnQoMCw4KT1AczE2O3Io MCw4KTstMzI3Njg7MzI3Njc7IiwxMjgsMCwwLDAKCS5zdGFicwkic2hvcnQgdW5zaWduZWQgaW50 OnQoMCw5KT1AczE2O3IoMCw5KTswOzY1NTM1OyIsMTI4LDAsMCwwCgkuc3RhYnMJInNpZ25lZCBj aGFyOnQoMCwxMCk9QHM4O3IoMCwxMCk7LTEyODsxMjc7IiwxMjgsMCwwLDAKCS5zdGFicwkidW5z aWduZWQgY2hhcjp0KDAsMTEpPUBzODtyKDAsMTEpOzA7MjU1OyIsMTI4LDAsMCwwCgkuc3RhYnMJ ImZsb2F0OnQoMCwxMik9cigwLDEpOzQ7MDsiLDEyOCwwLDAsMAoJLnN0YWJzCSJkb3VibGU6dCgw LDEzKT1yKDAsMSk7ODswOyIsMTI4LDAsMCwwCgkuc3RhYnMJImxvbmcgZG91YmxlOnQoMCwxNCk9 cigwLDEpOzEyOzA7IiwxMjgsMCwwLDAKCS5zdGFicwkiY29tcGxleCBpbnQ6dCgwLDE1KT1zOHJl YWw6KDAsMSksMCwzMjtpbWFnOigwLDEpLDMyLDMyOzsiLDEyOCwwLDAsMAoJLnN0YWJzCSJjb21w bGV4IGZsb2F0OnQoMCwxNik9cigwLDE2KTs4OzA7IiwxMjgsMCwwLDAKCS5zdGFicwkiY29tcGxl eCBkb3VibGU6dCgwLDE3KT1yKDAsMTcpOzE2OzA7IiwxMjgsMCwwLDAKCS5zdGFicwkiY29tcGxl eCBsb25nIGRvdWJsZTp0KDAsMTgpPXIoMCwxOCk7MjQ7MDsiLDEyOCwwLDAsMAoJLnN0YWJzCSJ3 Y2hhcl90OnQoMCwxOSk9QHMxNjtyKDAsMTkpOzA7NjU1MzU7IiwxMjgsMCwwLDAKCS5zdGFicwki X19idWlsdGluX3ZhX2xpc3Q6dCgwLDIwKT0qKDAsMikiLDEyOCwwLDAsMAoJLnN0YWJzCSJib29s OnQoMCwyMSk9QHM4Oy0xNjsiLDEyOCwwLDAsMAoJLnN0YWJzCSJfX3Z0YmxfcHRyX3R5cGU6dCgw LDIyKT0qKDAsMjMpPWYoMCwxKSIsMTI4LDAsMCwwCgkuc3RhYnMJIm1haW4uY3BwIiwxMzAsMCww LDAKCS5zdGFicwkiQTpUdCgxLDEpPXM0aTovMCgwLDEpLDAsMzI7b3BlcmF0b3I9OjooMSwyKT0j KDEsMSksKDEsMyk9JigxLDEpLCgxLDQpPSooMSwxKSwoMSw1KT0mKDEsNik9aygxLDEpLCgxLDcp PSgxLDcpOzpfWk4xQWFTRVJLU187MkEuO19fYmFzZV9jdG9yOjooMSw4KT0jKDEsMSksKDEsNyks KDEsNCksKDEsNSksKDEsNyk7Ol9aTjFBQzJFUktTXzsyQS47X19jb21wX2N0b3I6OigxLDgpOl9a TjFBQzFFUktTXzsyQS47X19iYXNlX2N0b3I6OigxLDkpPSMoMSwxKSwoMSw3KSwoMSw0KSwoMSw3 KTs6X1pOMUFDMkV2OzJBLjtfX2NvbXBfY3Rvcjo6KDEsOSk6X1pOMUFDMUV2OzJBLjs7IiwxMjgs MCwyOCwwCgkuc3RhYnMJInJlZ2lzdHJhcjxBLEEsaW50PjpUdCgxLDEwKT1zMW9wZXJhdG9yPTo6 KDEsMTEpPSMoMSwxMCksKDEsMTIpPSYoMSwxMCksKDEsMTMpPSooMSwxMCksKDEsMTQpPSYoMSwx NSk9aygxLDEwKSwoMSw3KTs6X1pOOXJlZ2lzdHJhckkxQVMwX2lFYVNFUktTMV87MkEuO19fYmFz ZV9jdG9yOjooMSwxNik9IygxLDEwKSwoMSw3KSwoMSwxMyksKDEsMTQpLCgxLDcpOzpfWk45cmVn aXN0cmFySTFBUzBfaUVDMkVSS1MxXzsyQS47X19jb21wX2N0b3I6OigxLDE2KTpfWk45cmVnaXN0 cmFySTFBUzBfaUVDMUVSS1MxXzsyQS47X19iYXNlX2N0b3I6OigxLDE3KT0jKDEsMTApLCgxLDcp LCgxLDEzKSwoMSw3KTs6X1pOOXJlZ2lzdHJhckkxQVMwX2lFQzJFdjsyQS47X19jb21wX2N0b3I6 OigxLDE3KTpfWk45cmVnaXN0cmFySTFBUzBfaUVDMUV2OzJBLjs7IiwxMjgsMCwyMCwwCgkuZGVm CV9fX21haW47CS5zY2wJMjsJLnR5cGUJMzI7CS5lbmRlZgoJLnRleHQKCS5zdGFicyAiIiwxMDAs MCwwLExldGV4dApMZXRleHQ6CgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbWFpbi5p aQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAxMDA2NDQAMDAwMTc1MQAwMDAx MDAxADAwMDAwMDAxNDU1ADA3NTMxNDM3NjAwADAxMTI2MAAgMAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAGZpemJhbgAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAATm9uZQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjIDEgIm1h aW4uY3BwIgojIDEgIjxidWlsdC1pbj4iCiMgMSAiPGNvbW1hbmQgbGluZT4iCiMgMSAibWFpbi5j cHAiCgp0ZW1wbGF0ZTxjbGFzcyBvYmplY3RfdD4KY2xhc3Mgc2luZ2xldG9uIHsKcHVibGljOgog ICAgICAgIHN0YXRpYyBvYmplY3RfdCYgaW5zdGFuY2UoKSB7CiAgICAgICAgICAgICAgICBzdGF0 aWMgb2JqZWN0X3Qgb2JqZWN0OwogICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDsKICAgICAg ICB9Cn07Cgp0ZW1wbGF0ZTxjbGFzcyBvYmplY3RfdCwgY2xhc3Mga2V5X3QgPSBpbnQ+CmNsYXNz IHJlZ2lzdHJ5IHsKcHVibGljOgogICAgICAgIHZvaWQgYWRkKGtleV90IHBfa2V5LCBvYmplY3Rf dCYgcF9vYmplY3QpIHsKCiAgICAgICAgfQp9OwoKdGVtcGxhdGU8Y2xhc3Mgb2JqZWN0X3QsIGNs YXNzIG9iamVjdF9iYXNlX3QgPSBvYmplY3RfdCwgY2xhc3Mga2V5X3QgPSBpbnQ+CmNsYXNzIHJl Z2lzdHJhciB7CnB1YmxpYzoKICAgICAgICByZWdpc3RyYXIoa2V5X3QgcF9rZXksIHJlZ2lzdHJ5 PG9iamVjdF9iYXNlX3QsIGtleV90PiYgcF9yZWdpc3RyeSA9IHNpbmdsZXRvbjxyZWdpc3RyeTxv YmplY3RfYmFzZV90LCBrZXlfdD4gPjo6aW5zdGFuY2UoKSkgewogICAgICAgICAgICAgICAgb2Jq ZWN0X3Qgb2JqZWN0OwogICAgICAgICAgICAgICAgcF9yZWdpc3RyeS5hZGQocF9rZXksIG9iamVj dCk7CiAgICAgICAgfQp9OwoKY2xhc3MgQSB7IGludCBpOyB9OwoKaW50IG1haW4oaW50IGFyZ2Ms IGNoYXIgKiphcmd2KSB7CiAgICAgICAgcmVnaXN0cmFyPEE+IGEoMSk7CgogICAgICAgIHJldHVy biAwOwp9OwoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 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 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 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==