summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authordimitri <dimitri@afe2bf4a-e733-0410-8a33-86f594647bc7>2001-12-09 20:40:34 (GMT)
committerdimitri <dimitri@afe2bf4a-e733-0410-8a33-86f594647bc7>2001-12-09 20:40:34 (GMT)
commit414d7b3bbfad8ec16237c3708af188ecaee62886 (patch)
treebbe6210f1426dabef9dcedc0d7d025f79fae6225 /src
parentcce8b9505201c95443798341d3d6176922db9253 (diff)
downloadDoxygen-414d7b3bbfad8ec16237c3708af188ecaee62886.zip
Doxygen-414d7b3bbfad8ec16237c3708af188ecaee62886.tar.gz
Doxygen-414d7b3bbfad8ec16237c3708af188ecaee62886.tar.bz2
Doxygen-1.2.12-20011209
Diffstat (limited to 'src')
-rw-r--r--src/classdef.cpp1
-rw-r--r--src/classdef.h2
-rw-r--r--src/code.l6
-rw-r--r--src/config.l24
-rw-r--r--src/defgen.cpp624
-rw-r--r--src/defgen.h20
-rw-r--r--src/doc.l110
-rw-r--r--src/dot.cpp74
-rw-r--r--src/dot.h2
-rw-r--r--src/doxygen.cpp534
-rw-r--r--src/entry.cpp10
-rw-r--r--src/entry.h54
-rw-r--r--src/filedef.cpp21
-rw-r--r--src/filedef.h9
-rw-r--r--src/groupdef.cpp16
-rw-r--r--src/groupdef.h6
-rw-r--r--src/index.cpp8
-rw-r--r--src/libdoxygen.pro.in6
-rw-r--r--src/memberdef.cpp55
-rw-r--r--src/memberdef.h4
-rw-r--r--src/membergroup.h28
-rw-r--r--src/namespacedef.h2
-rw-r--r--src/outputgen.h2
-rw-r--r--src/pre.l2
-rw-r--r--src/scanner.l97
-rw-r--r--src/translator_de.h135
-rw-r--r--src/translator_pt.h20
-rw-r--r--src/util.cpp2
-rw-r--r--src/xmlgen.cpp205
29 files changed, 1499 insertions, 580 deletions
diff --git a/src/classdef.cpp b/src/classdef.cpp
index a65e76b..4b35855 100644
--- a/src/classdef.cpp
+++ b/src/classdef.cpp
@@ -1219,6 +1219,7 @@ void ClassDef::writeDocumentationForInnerClasses(OutputList &ol)
innerCd->writeDocumentation(ol);
innerCd->writeMemberList(ol);
}
+ innerCd->writeDocumentationForInnerClasses(ol);
}
}
}
diff --git a/src/classdef.h b/src/classdef.h
index bdfe4d9..d294601 100644
--- a/src/classdef.h
+++ b/src/classdef.h
@@ -298,6 +298,8 @@ class ClassDef : public Definition
const char *ref=0,const char *fName=0);
/*! Destroys a compound definition. */
~ClassDef();
+
+ ClassSDict *getInnerClasses() { return m_innerClasses; }
bool visited;
diff --git a/src/code.l b/src/code.l
index 804a507..acd258d 100644
--- a/src/code.l
+++ b/src/code.l
@@ -699,9 +699,11 @@ static bool getLink(const char *className,
g_anchorCount++;
}
}
- Definition *d=0;
- if (cd) d=cd; else if (nd) d=nd; else if (fd) d=fd; else d=gd;
+ //Definition *d=0;
+ //if (cd) d=cd; else if (nd) d=nd; else if (fd) d=fd; else d=gd;
+ Definition *d = md->getOuterScope()==Doxygen::globalScope ?
+ md->getBodyDef() : md->getOuterScope();
if (d && d->isLinkable())
{
g_theCallContext.setClass(stripClassName(md->typeString()));
diff --git a/src/config.l b/src/config.l
index 670be6a..98b61aa 100644
--- a/src/config.l
+++ b/src/config.l
@@ -1527,7 +1527,7 @@ void Config::create()
"If the value of the INPUT tag contains directories, you can use the \n"
"FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp \n"
"and *.h) to filter out the source-files in the directories. If left \n"
- "blank file matching one of the following patterns are included: \n"
+ "blank the following patterns are tested: \n"
"*.c *.cc *.cxx *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp \n"
"*.h++ *.idl \n"
);
@@ -1931,11 +1931,11 @@ void Config::create()
cs->addDependency("GENERATE_MAN");
cb = addBool(
"MAN_LINKS",
- "If the MAN_LINKS tag is set to YES and Doxygen generates man output,\n"
- "then it will generate one additional man file for each entity\n"
- "documented in the real man page(s). These additional files\n"
- "only source the real man page, but without them the man command\n"
- "would be unable to find the correct page. The default is NO.\n",
+ "If the MAN_LINKS tag is set to YES and Doxygen generates man output, \n"
+ "then it will generate one additional man file for each entity \n"
+ "documented in the real man page(s). These additional files \n"
+ "only source the real man page, but without them the man command \n"
+ "would be unable to find the correct page. The default is NO. \n",
FALSE
);
cb->addDependency("GENERATE_MAN");
@@ -1951,6 +1951,18 @@ void Config::create()
"moment. \n",
FALSE
);
+ //--------------------------------------------------------------------------
+ addInfo( "DEF","configuration options for the AutoGen Definitions output");
+ //--------------------------------------------------------------------------
+ cb = addBool("GENERATE_AUTOGEN_DEF",
+
+ "If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will \n"
+ "generate an AutoGen Definitions (see autogen.sf.net) file \n"
+ "that captures the structure of the code including all \n"
+ "documentation. Note that this feature is still experimental \n"
+ "and incomplete at the moment. \n",
+
+ FALSE );
//-----------------------------------------------------------------------------------------------
addInfo( "Preprocessor","Configuration options related to the preprocessor ");
//-----------------------------------------------------------------------------------------------
diff --git a/src/defgen.cpp b/src/defgen.cpp
new file mode 100644
index 0000000..5620d9c
--- /dev/null
+++ b/src/defgen.cpp
@@ -0,0 +1,624 @@
+/******************************************************************************
+ *
+ *
+ *
+ *
+ * Copyright (C) 1997-2001 by Dimitri van Heesch.
+ *
+ * Permission to use, copy, modify, and distribute this software and its
+ * documentation under the terms of the GNU General Public License is hereby
+ * granted. No representations are made about the suitability of this software
+ * for any purpose. It is provided "as is" without express or implied warranty.
+ * See the GNU General Public License for more details.
+ *
+ * Documents produced by Doxygen are derivative works derived from the
+ * input used in their production; they are not affected by this license.
+ *
+ */
+
+#include <stdlib.h>
+
+#include "qtbc.h"
+#include "defgen.h"
+#include "doxygen.h"
+#include "message.h"
+#include "config.h"
+#include "classlist.h"
+#include "util.h"
+#include "defargs.h"
+#include "outputgen.h"
+#include "doc.h"
+#include "dot.h"
+#include "code.h"
+
+#include <qdir.h>
+#include <qfile.h>
+#include <qtextstream.h>
+
+#define DEF_DB(x)
+
+inline void writeDEFString(QTextStream &t,const char *s)
+{
+ const char* p=s;
+ char c;
+
+ t << '\'';
+ while ((c = *(p++)))
+ {
+ if (c == '\'')
+ t << '\\';
+ t << c;
+ }
+ t << '\'';
+}
+
+void generateDEFForMember(MemberDef *md,
+ QTextStream &t,
+ Definition *def,
+ const char* Prefix)
+{
+ QCString memPrefix;
+
+ // + declaration
+ // - reimplements
+ // - reimplementedBy
+ // - exceptions
+ // - const/volatile specifiers
+ // - examples
+ // + source definition
+ // - source references
+ // - source referenced by
+ // - include code
+
+ if (md->memberType()==MemberDef::EnumValue) return;
+
+ QCString scopeName;
+ if (md->getClassDef())
+ scopeName=md->getClassDef()->name();
+ else if (md->getNamespaceDef())
+ scopeName=md->getNamespaceDef()->name();
+
+ t << " " << Prefix << "-member = {" << endl;
+ memPrefix = " ";
+ memPrefix.append( Prefix );
+ memPrefix.append( "-mem-" );
+
+ QCString memType;
+ bool isFunc=FALSE;
+ switch (md->memberType())
+ {
+ case MemberDef::Define: memType="define"; break;
+ case MemberDef::EnumValue: ASSERT(0); break;
+ case MemberDef::Property: memType="property"; break;
+ case MemberDef::Variable: memType="variable"; break;
+ case MemberDef::Typedef: memType="typedef"; break;
+ case MemberDef::Enumeration: memType="enum"; break;
+ case MemberDef::Function: memType="function"; isFunc=TRUE; break;
+ case MemberDef::Signal: memType="signal"; isFunc=TRUE; break;
+ case MemberDef::Prototype: memType="prototype"; isFunc=TRUE; break;
+ case MemberDef::Friend: memType="friend"; isFunc=TRUE; break;
+ case MemberDef::DCOP: memType="dcop"; isFunc=TRUE; break;
+ case MemberDef::Slot: memType="slot"; isFunc=TRUE; break;
+ }
+
+ t << memPrefix << "kind = '" << memType << "';" << endl;
+ t << memPrefix << "id = '"
+ << def->getOutputFileBase() << "_1" << md->anchor()
+ << "';" << endl;
+
+ t << memPrefix << "virt = ";
+ switch (md->virtualness())
+ {
+ case Normal: t << "normal;" << endl; break;
+ case Virtual: t << "virtual;" << endl; break;
+ case Pure: t << "pure-virtual;" << endl; break;
+ default: ASSERT(0);
+ }
+
+ t << memPrefix << "prot = ";
+ switch(md->protection())
+ {
+ case Public: t << "public;" << endl; break;
+ case Protected: t << "protected;" << endl; break;
+ case Private: t << "private;" << endl; break;
+ }
+
+ if (md->memberType()!=MemberDef::Define &&
+ md->memberType()!=MemberDef::Enumeration
+ )
+ {
+ QCString typeStr = replaceAnonymousScopes(md->typeString());
+ t << memPrefix << "type = <<_EnD_oF_dEf_TeXt_" << endl << typeStr << endl
+ << "_EnD_oF_dEf_TeXt_;" << endl;
+ }
+
+ t << memPrefix << "name = '" << md->name() << "';" << endl;
+
+ if (isFunc) //function
+ {
+ ArgumentList *declAl = new ArgumentList;
+ ArgumentList *defAl = md->argumentList();
+ stringToArgumentList(md->argsString(),declAl);
+ QCString fcnPrefix = " " + memPrefix + "param-";
+
+ if (declAl->count()>0)
+ {
+ ArgumentListIterator declAli(*declAl);
+ ArgumentListIterator defAli(*defAl);
+ Argument *a;
+ for (declAli.toFirst();(a=declAli.current());++declAli)
+ {
+ Argument *defArg = defAli.current();
+ t << memPrefix << "param = {" << endl;
+ if (!a->attrib.isEmpty())
+ {
+ t << fcnPrefix << "attributes = ";
+ writeDEFString(t,a->attrib);
+ t << ';' << endl;
+ }
+ if (!a->type.isEmpty())
+ {
+ t << fcnPrefix << "type = <<_EnD_oF_dEf_TeXt_" << endl
+ << a->type << endl << "_EnD_oF_dEf_TeXt_;" << endl;
+ }
+ if (!a->name.isEmpty())
+ {
+ t << fcnPrefix << "declname = ";
+ writeDEFString(t,a->name);
+ t << ';' << endl;
+ }
+ if (defArg && !defArg->name.isEmpty() && defArg->name!=a->name)
+ {
+ t << fcnPrefix << "defname = ";
+ writeDEFString(t,defArg->name);
+ t << ';' << endl;
+ }
+ if (!a->array.isEmpty())
+ {
+ t << fcnPrefix << "array = ";
+ writeDEFString(t,a->array);
+ t << ';' << endl;
+ }
+ if (!a->defval.isEmpty())
+ {
+ t << fcnPrefix << "defval = <<_EnD_oF_dEf_TeXt_" << endl
+ << a->defval << endl << "_EnD_oF_dEf_TeXt_;" << endl;
+ }
+ if (defArg) ++defAli;
+ t << " }; /*" << fcnPrefix << "-param */" << endl;
+ }
+ }
+ delete declAl;
+ }
+ else if ( md->memberType()==MemberDef::Define
+ && md->argsString()!=0)
+ {
+ ArgumentListIterator ali(*md->argumentList());
+ Argument *a;
+ QCString defPrefix = " " + memPrefix + "def-";
+
+ for (ali.toFirst();(a=ali.current());++ali)
+ {
+ t << memPrefix << "param = {" << endl;
+ t << defPrefix << "name = '" << a->type << "';" << endl;
+ t << " }; /*" << defPrefix << "-param */" << endl;
+ }
+ }
+
+ if (!md->initializer().isEmpty())
+ {
+ t << memPrefix << "initializer = <<_EnD_oF_dEf_TeXt_" << endl
+ << md->initializer() << endl << "_EnD_oF_dEf_TeXt_;" << endl;
+ }
+ // TODO: exceptions, const volatile
+ if (md->memberType()==MemberDef::Enumeration) // enum
+ {
+ if (md->enumFieldList())
+ {
+ MemberListIterator emli(*md->enumFieldList());
+ MemberDef *emd;
+ for (emli.toFirst();(emd=emli.current());++emli)
+ {
+ t << memPrefix << "enum = { enum-name = " << emd->name() << ';';
+ if (!emd->initializer().isEmpty())
+ {
+ t << " enum-value = ";
+ writeDEFString(t,emd->initializer());
+ t << ';';
+ }
+ t << " };" << endl;
+ }
+ }
+ }
+
+ t << memPrefix << "desc-file = '" << md->getDefFileName() << "';" << endl;
+ t << memPrefix << "desc-line = '" << md->getDefLine() << "';" << endl;
+ t << memPrefix << "briefdesc = <<_EnD_oF_dEf_TeXt_" << endl
+ << md->briefDescription() << endl << "_EnD_oF_dEf_TeXt_;" << endl;
+ t << memPrefix << "documentation = <<_EnD_oF_dEf_TeXt_" << endl
+ << md->documentation() << endl << "_EnD_oF_dEf_TeXt_;" << endl;
+
+ //printf("md->getReferencesMembers()=%p\n",md->getReferencesMembers());
+ if (md->getReferencesMembers())
+ {
+ MemberSDict::Iterator mdi(*md->getReferencesMembers());
+ MemberDef *rmd;
+ QCString refPrefix = " " + memPrefix + "ref-";
+
+ for (mdi.toFirst();(rmd=mdi.current());++mdi)
+ {
+ if (rmd->getStartBodyLine()!=-1 && rmd->getBodyDef())
+ {
+ t << memPrefix << "referenceto = {" << endl;
+ t << refPrefix << "id = '"
+ << rmd->getBodyDef()->getOutputFileBase()
+ << "_1" // encoded `:' character (see util.cpp:convertNameToFile)
+ << rmd->anchor() << "';" << endl;
+
+ t << refPrefix << "line = '"
+ << rmd->getStartBodyLine() << "';" << endl;
+
+ QCString scope = rmd->getScopeString();
+ QCString name = rmd->name();
+ if (!scope.isEmpty() && scope!=def->name())
+ {
+ name.prepend(scope+"::");
+ }
+
+ t << refPrefix << "name = ";
+ writeDEFString(t,name);
+ t << ';' << endl << " };" << endl;
+ }
+ } /* for (mdi.toFirst...) */
+ }
+ if (md->getReferencedByMembers())
+ {
+ MemberSDict::Iterator mdi(*md->getReferencedByMembers());
+ MemberDef *rmd;
+ QCString refPrefix = " " + memPrefix + "ref-";
+
+ for (mdi.toFirst();(rmd=mdi.current());++mdi)
+ {
+ if (rmd->getStartBodyLine()!=-1 && rmd->getBodyDef())
+ {
+ t << memPrefix << "referenceby = {" << endl;
+ t << refPrefix << "id = '"
+ << rmd->getBodyDef()->getOutputFileBase()
+ << "_1" // encoded `:' character (see util.cpp:convertNameToFile)
+ << rmd->anchor() << "';" << endl;
+
+ t << refPrefix << "line = '"
+ << rmd->getStartBodyLine() << "';" << endl;
+
+ QCString scope = rmd->getScopeString();
+ QCString name = rmd->name();
+ if (!scope.isEmpty() && scope!=def->name())
+ {
+ name.prepend(scope+"::");
+ }
+
+ t << refPrefix << "name = ";
+ writeDEFString(t,name);
+ t << ';' << endl << " };" << endl;
+ }
+ } /* for (mdi.toFirst...) */
+ }
+
+ t << " }; /* " << Prefix << "-member */" << endl;
+}
+
+
+void generateDEFClassSection(ClassDef *cd,
+ QTextStream &t,
+ MemberList *ml,
+ const char *kind)
+{
+ if (ml->count()>0)
+ {
+ t << " cp-section = {" << endl;
+ t << " sec-kind = '" << kind << "';" << endl;
+
+ MemberListIterator mli(*ml);
+ MemberDef *md;
+ for (mli.toFirst();(md=mli.current());++mli)
+ {
+ generateDEFForMember(md,t,cd,"sec");
+ }
+ t << " }; /* cp-section */" << endl;
+ }
+}
+
+void generateDEFForClass(ClassDef *cd,QTextStream &t)
+{
+ // + brief description
+ // + detailed description
+ // - template arguments
+ // - include files
+ // + inheritance diagram
+ // + list of direct super classes
+ // + list of direct sub classes
+ // + collaboration diagram
+ // - list of all members
+ // + user defined member sections
+ // + standard member sections
+ // + detailed member documentation
+ // - examples
+
+ if (cd->isReference()) return; // skip external references.
+ if (cd->name().find('@')!=-1) return; // skip anonymous compounds.
+ if (cd->templateMaster()!=0) return; // skip generated template instances.
+
+ t << cd->compoundTypeString() << " = {" << endl;
+ t << " cp-id = '" << cd->getOutputFileBase() << "';" << endl;
+ t << " cp-name = '" << cd->name() << "';" << endl;
+
+ if (cd->baseClasses()->count()>0)
+ {
+ BaseClassListIterator bcli(*cd->baseClasses());
+ BaseClassDef *bcd;
+ for (bcli.toFirst();(bcd=bcli.current());++bcli)
+ {
+ t << " cp-ref = {" << endl << " ref-type = base;" << endl;
+ t << " ref-id = '"
+ << bcd->classDef->getOutputFileBase() << "';" << endl;
+ t << " ref-prot = ";
+ switch (bcd->prot)
+ {
+ case Public: t << "public;" << endl; break;
+ case Protected: t << "protected;" << endl; break;
+ case Private: t << "private;" << endl; break;
+ }
+ t << " ref-virt = ";
+ switch(bcd->virt)
+ {
+ case Normal: t << "non-virtual;"; break;
+ case Virtual: t << "virtual;"; break;
+ case Pure: t << "pure-virtual;"; break;
+ }
+ t << endl << " };" << endl;
+ }
+ }
+
+ if (cd->subClasses()->count()>0)
+ {
+ BaseClassListIterator bcli(*cd->subClasses());
+ BaseClassDef *bcd;
+ for (bcli.toFirst();(bcd=bcli.current());++bcli)
+ {
+ t << " cp-ref = {" << endl << " ref-type = derived;" << endl;
+ t << " ref-id = '"
+ << bcd->classDef->getOutputFileBase() << "';" << endl;
+ t << " ref-prot = ";
+ switch (bcd->prot)
+ {
+ case Public: t << "public;" << endl; break;
+ case Protected: t << "protected;" << endl; break;
+ case Private: t << "private;" << endl; break;
+ }
+ t << " ref-virt = ";
+ switch(bcd->virt)
+ {
+ case Normal: t << "non-virtual;"; break;
+ case Virtual: t << "virtual;"; break;
+ case Pure: t << "pure-virtual;"; break;
+ }
+ t << endl << " };" << endl;
+ }
+ }
+
+ int numMembers =
+ cd->pubTypes.count()+cd->pubMembers.count()+cd->pubAttribs.count()+
+ cd->pubSlots.count()+cd->signals.count()+cd->dcopMethods.count()+
+ cd->pubStaticMembers.count()+
+ cd->pubStaticAttribs.count()+cd->proTypes.count()+cd->proMembers.count()+
+ cd->proAttribs.count()+cd->proSlots.count()+cd->proStaticMembers.count()+
+ cd->proStaticAttribs.count()+cd->priTypes.count()+cd->priMembers.count()+
+ cd->priAttribs.count()+cd->priSlots.count()+cd->priStaticMembers.count()+
+ cd->priStaticAttribs.count()+cd->friends.count()+cd->related.count();
+ if (numMembers>0)
+ {
+ generateDEFClassSection(cd,t,&cd->pubTypes,"public-type");
+ generateDEFClassSection(cd,t,&cd->pubMembers,"public-func");
+ generateDEFClassSection(cd,t,&cd->pubAttribs,"public-attrib");
+ generateDEFClassSection(cd,t,&cd->pubSlots,"public-slot");
+ generateDEFClassSection(cd,t,&cd->signals,"signal");
+ generateDEFClassSection(cd,t,&cd->dcopMethods,"dcop-func");
+ generateDEFClassSection(cd,t,&cd->properties,"property");
+ generateDEFClassSection(cd,t,&cd->pubStaticMembers,"public-static-func");
+ generateDEFClassSection(cd,t,&cd->pubStaticAttribs,"public-static-attrib");
+ generateDEFClassSection(cd,t,&cd->proTypes,"protected-type");
+ generateDEFClassSection(cd,t,&cd->proMembers,"protected-func");
+ generateDEFClassSection(cd,t,&cd->proAttribs,"protected-attrib");
+ generateDEFClassSection(cd,t,&cd->proSlots,"protected-slot");
+ generateDEFClassSection(cd,t,&cd->proStaticMembers,"protected-static-func");
+ generateDEFClassSection(cd,t,&cd->proStaticAttribs,"protected-static-attrib");
+ generateDEFClassSection(cd,t,&cd->priTypes,"private-type");
+ generateDEFClassSection(cd,t,&cd->priMembers,"private-func");
+ generateDEFClassSection(cd,t,&cd->priAttribs,"private-attrib");
+ generateDEFClassSection(cd,t,&cd->priSlots,"private-slot");
+ generateDEFClassSection(cd,t,&cd->priStaticMembers,"private-static-func");
+ generateDEFClassSection(cd,t,&cd->priStaticAttribs,"private-static-attrib");
+ generateDEFClassSection(cd,t,&cd->friends,"signal");
+ generateDEFClassSection(cd,t,&cd->related,"related");
+ }
+
+ t << " cp-filename = '" << cd->getDefFileName() << "';" << endl;
+ t << " cp-fileline = '" << cd->getDefLine() << "';" << endl;
+ t << " cp-briefdesc = <<_EnD_oF_dEf_TeXt_" << endl
+ << cd->briefDescription() << endl << "_EnD_oF_dEf_TeXt_;" << endl;
+
+ t << " cp-documentation = <<_EnD_oF_dEf_TeXt_" << endl
+ << cd->documentation() << endl << "_EnD_oF_dEf_TeXt_;" << endl;
+
+ DotClassGraph inheritanceGraph(cd,DotClassGraph::Inheritance);
+ if (!inheritanceGraph.isTrivial())
+ {
+ t << " cp-inheritancegraph = <<_EnD_oF_dEf_TeXt_" << endl;
+ inheritanceGraph.writeDEF(t);
+ t << endl << "_EnD_oF_dEf_TeXt_;" << endl;
+ }
+ DotClassGraph collaborationGraph(cd,DotClassGraph::Implementation);
+ if (!collaborationGraph.isTrivial())
+ {
+ t << " cp-collaborationgraph = <<_EnD_oF_dEf_TeXt_" << endl;
+ collaborationGraph.writeDEF(t);
+ t << endl << "_EnD_oF_dEf_TeXt_;" << endl;
+ }
+ t << "}; /* " << cd->compoundTypeString() << " */" << endl;
+}
+
+void generateDEFSection(Definition *d,
+ QTextStream &t,
+ MemberList *ml,
+ const char *kind)
+{
+ if (ml->count()>0)
+ {
+ t << " " << kind << " = {" << endl;
+ MemberListIterator mli(*ml);
+ MemberDef *md;
+ for (mli.toFirst();(md=mli.current());++mli)
+ {
+ generateDEFForMember(md,t,d,kind);
+ }
+ t << " };" << endl;
+ }
+}
+
+void generateDEFForNamespace(NamespaceDef *nd,QTextStream &t)
+{
+ if (nd->isReference()) return; // skip external references
+ t << " namespace = {" << endl;
+ t << " ns-id = '" << nd->getOutputFileBase() << "';" << endl;
+ t << " ns-name = ";
+ writeDEFString(t,nd->name());
+ t << ';' << endl;
+
+ generateDEFSection(nd,t,&nd->decDefineMembers,"define");
+ generateDEFSection(nd,t,&nd->decProtoMembers,"prototype");
+ generateDEFSection(nd,t,&nd->decTypedefMembers,"typedef");
+ generateDEFSection(nd,t,&nd->decEnumMembers,"enum");
+ generateDEFSection(nd,t,&nd->decFuncMembers,"func");
+ generateDEFSection(nd,t,&nd->decVarMembers,"var");
+
+ t << " ns-filename = '" << nd->getDefFileName() << "';" << endl;
+ t << " ns-fileline = '" << nd->getDefLine() << "';" << endl;
+ t << " ns-briefdesc = <<_EnD_oF_dEf_TeXt_" << endl
+ << nd->briefDescription() << endl << "_EnD_oF_dEf_TeXt_;" << endl;
+
+ t << " ns-documentation = <<_EnD_oF_dEf_TeXt_" << endl
+ << nd->documentation() << endl << "_EnD_oF_dEf_TeXt_;" << endl;
+ t << " };" << endl;
+}
+
+void generateDEFForFile(FileDef *fd,QTextStream &t)
+{
+ if (fd->isReference()) return; // skip external references
+
+ t << "file = {" << endl;
+ t << " file-id = '" << fd->getOutputFileBase() << "';" << endl;
+ t << " file-name = ";
+ writeDEFString(t,fd->name());
+ t << ';' << endl;
+
+ generateDEFSection(fd,t,&fd->decDefineMembers,"define");
+ generateDEFSection(fd,t,&fd->decProtoMembers,"prototype");
+ generateDEFSection(fd,t,&fd->decTypedefMembers,"typedef");
+ generateDEFSection(fd,t,&fd->decEnumMembers,"enum");
+ generateDEFSection(fd,t,&fd->decFuncMembers,"func");
+ generateDEFSection(fd,t,&fd->decVarMembers,"var");
+
+ t << " file-full-name = '" << fd->getDefFileName() << "';" << endl;
+ t << " file-first-line = '" << fd->getDefLine() << "';" << endl;
+
+ t << " file-briefdesc = <<_EnD_oF_dEf_TeXt_" << endl
+ << fd->briefDescription() << endl << "_EnD_oF_dEf_TeXt_;" << endl;
+
+ t << " file-documentation = <<_EnD_oF_dEf_TeXt_" << endl
+ << fd->documentation() << endl << "_EnD_oF_dEf_TeXt_;" << endl;
+
+ t << "}; /* file */" << endl;
+}
+
+
+void generateDEF()
+{
+ QCString outputDirectory = Config_getString("OUTPUT_DIRECTORY");
+ if (outputDirectory.isEmpty())
+ {
+ outputDirectory=QDir::currentDirPath();
+ }
+ else
+ {
+ QDir dir(outputDirectory);
+ if (!dir.exists())
+ {
+ dir.setPath(QDir::currentDirPath());
+ if (!dir.mkdir(outputDirectory))
+ {
+ err("Error: tag OUTPUT_DIRECTORY: Output directory `%s' does not "
+ "exist and cannot be created\n",outputDirectory.data());
+ exit(1);
+ }
+ else if (!Config_getBool("QUIET"))
+ {
+ err("Notice: Output directory `%s' does not exist. "
+ "I have created it for you.\n", outputDirectory.data());
+ }
+ dir.cd(outputDirectory);
+ }
+ outputDirectory=dir.absPath();
+ }
+
+ QDir dir(outputDirectory);
+ if (!dir.exists())
+ {
+ dir.setPath(QDir::currentDirPath());
+ if (!dir.mkdir(outputDirectory))
+ {
+ err("Cannot create directory %s\n",outputDirectory.data());
+ return;
+ }
+ }
+ QDir defDir(outputDirectory+"/def");
+ if (!defDir.exists() && !defDir.mkdir(outputDirectory+"/def"))
+ {
+ err("Could not create def directory in %s\n",outputDirectory.data());
+ return;
+ }
+
+ QCString fileName=outputDirectory+"/def/doxygen.def";
+ QFile f(fileName);
+ if (!f.open(IO_WriteOnly))
+ {
+ err("Cannot open file %s for writing!\n",fileName.data());
+ return;
+ }
+ QTextStream t(&f);
+ t << "AutoGen Definitions dummy;" << endl;
+
+ if (Doxygen::classSDict.count()+Doxygen::inputNameList.count()>0)
+ {
+ ClassSDict::Iterator cli(Doxygen::classSDict);
+ ClassDef *cd;
+ for (cli.toFirst();(cd=cli.current());++cli)
+ {
+ generateDEFForClass(cd,t);
+ }
+ FileNameListIterator fnli(Doxygen::inputNameList);
+ FileName *fn;
+ for (;(fn=fnli.current());++fnli)
+ {
+ FileNameIterator fni(*fn);
+ FileDef *fd;
+ for (;(fd=fni.current());++fni)
+ {
+ generateDEFForFile(fd,t);
+ }
+ }
+ }
+ else
+ {
+ t << "dummy_value = true;" << endl;
+ }
+}
diff --git a/src/defgen.h b/src/defgen.h
new file mode 100644
index 0000000..7fd7641
--- /dev/null
+++ b/src/defgen.h
@@ -0,0 +1,20 @@
+/******************************************************************************
+ *
+ *
+ *
+ * Copyright (C) 1997-2001 by Dimitri van Heesch.
+ *
+ * Permission to use, copy, modify, and distribute this software and its
+ * documentation under the terms of the GNU General Public License is hereby
+ * granted. No representations are made about the suitability of this software
+ * for any purpose. It is provided "as is" without express or implied warranty.
+ * See the GNU General Public License for more details.
+ *
+ */
+
+#ifndef DEFGEN_H
+#define DEFGEN_H
+
+void generateDEF();
+
+#endif
diff --git a/src/doc.l b/src/doc.l
index 8499513..e5a2453 100644
--- a/src/doc.l
+++ b/src/doc.l
@@ -489,21 +489,21 @@ static bool inBlock()
static void endBlock()
{
- if (inParamBlock || inRetValBlock || inExceptionBlock)
- {
- outDoc->endDescTableData();
- outDoc->endDescTable();
- outDoc->endParamList();
- }
- else
- {
- outDoc->endDescList();
- }
- currentListIndent.pop();
- inParamBlock=inRetValBlock=inSeeBlock=inReturnBlock=inAuthorBlock=
- inVersionBlock=inSinceBlock=inDateBlock=inBugBlock=inNoteBlock=inWarningBlock=
- inParBlock=inExceptionBlock=inDeprecatedBlock=inPreBlock=inPostBlock=
- inInvarBlock=inRemarkBlock=inAttentionBlock=FALSE;
+ if (inParamBlock || inRetValBlock || inExceptionBlock)
+ {
+ outDoc->endDescTableData();
+ outDoc->endDescTable();
+ outDoc->endParamList();
+ }
+ else
+ {
+ outDoc->endDescList();
+ }
+ currentListIndent.pop();
+ inParamBlock=inRetValBlock=inSeeBlock=inReturnBlock=inAuthorBlock=
+ inVersionBlock=inSinceBlock=inDateBlock=inBugBlock=inNoteBlock=inWarningBlock=
+ inParBlock=inExceptionBlock=inDeprecatedBlock=inPreBlock=inPostBlock=
+ inInvarBlock=inRemarkBlock=inAttentionBlock=FALSE;
}
//-----------------------------------------------------------------
@@ -625,17 +625,10 @@ static void forceEndItemList()
{
case 'O': outDoc->endEnumList(); break;
case 'U': outDoc->endItemList(); break;
- case 'D':
- if (inBlock())
- {
- currentListIndent.push("D"); // hack!
- endBlock();
- }
- else
- {
- outDoc->endDescription();
- }
- break;
+ case 'D': outDoc->endDescription(); break;
+ case 'P': break; // do not end paragraphs
+ default:
+ err("Unexpected list indent token `%c'\n",c);
}
}
insideItemList=FALSE;
@@ -1030,9 +1023,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
outDoc->writeString(yytext);
}
<DocHtmlScan,DocLatexScan>.|\n {
- char c[2];
- c[0]=*yytext;c[1]='\0';
- outDoc->writeString(c);
+ outDoc->writeString(yytext);
}
<DocScan>"\\postheader"/{BN}
<DocScan>"\\functionindex"/{BN} { /* writeMemberList(*outDoc,FALSE);*/ }
@@ -1077,13 +1068,18 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
outDoc->codify(c);
}
<DocScan>{CMD}"internal"/{BN} {
- if (!Config_getBool("INTERNAL_DOCS"))
- {
+ //if (!Config_getBool("INTERNAL_DOCS"))
+ //{
+ // BEGIN( DocInternal );
+ //}
+ //else
+ //{
outDoc->newParagraph();
+ outDoc->startBold();
scanString(theTranslator->trForInternalUseOnly()+"\n");
- //outDoc->writeString("For internal use only.\n");
- BEGIN( DocInternal );
- }
+ outDoc->endBold();
+ outDoc->newParagraph();
+ //}
}
<DocScan>"\\reimp"/{BN} {
outDoc->newParagraph();
@@ -1172,7 +1168,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
endArgumentList();
if (b) endBlock();
inParBlock=TRUE;
- currentListIndent.push("D");
+ currentListIndent.push("P");
outDoc->startDescList(BaseOutputDocInterface::Par);
outDoc->docify(title);
outDoc->endDescTitle();
@@ -1190,7 +1186,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
{
if (inBlock()) endBlock();
inWarningBlock=TRUE;
- currentListIndent.push("D");
+ currentListIndent.push("P");
outDoc->startDescList(BaseOutputDocInterface::Warning);
scanString(theTranslator->trWarning()+": ");
outDoc->endDescTitle();
@@ -1207,7 +1203,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
{
if (inBlock()) endBlock();
inRemarkBlock=TRUE;
- currentListIndent.push("D");
+ currentListIndent.push("P");
outDoc->startDescList(BaseOutputDocInterface::Remark);
scanString(theTranslator->trRemarks()+": ");
outDoc->endDescTitle();
@@ -1224,7 +1220,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
{
if (inBlock()) endBlock();
inAttentionBlock=TRUE;
- currentListIndent.push("D");
+ currentListIndent.push("P");
outDoc->startDescList(BaseOutputDocInterface::Attention);
scanString(theTranslator->trAttention()+": ");
outDoc->endDescTitle();
@@ -1241,7 +1237,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
{
if (inBlock()) endBlock();
inNoteBlock=TRUE;
- currentListIndent.push("D");
+ currentListIndent.push("P");
outDoc->startDescList(BaseOutputDocInterface::Note);
scanString(theTranslator->trNote()+": ");
outDoc->endDescTitle();
@@ -1258,7 +1254,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
{
if (inBlock()) endBlock();
inPreBlock=TRUE;
- currentListIndent.push("D");
+ currentListIndent.push("P");
outDoc->startDescList(BaseOutputDocInterface::Pre);
scanString(theTranslator->trPrecondition()+": ");
outDoc->endDescTitle();
@@ -1275,7 +1271,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
{
if (inBlock()) endBlock();
inPostBlock=TRUE;
- currentListIndent.push("D");
+ currentListIndent.push("P");
outDoc->startDescList(BaseOutputDocInterface::Post);
scanString(theTranslator->trPostcondition()+": ");
outDoc->endDescTitle();
@@ -1292,7 +1288,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
{
if (inBlock()) endBlock();
inInvarBlock=TRUE;
- currentListIndent.push("D");
+ currentListIndent.push("P");
outDoc->startDescList(BaseOutputDocInterface::Invar);
scanString(theTranslator->trInvariant()+": ");
outDoc->endDescTitle();
@@ -1309,7 +1305,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
{
if (inBlock()) endBlock();
inVersionBlock=TRUE;
- currentListIndent.push("D");
+ currentListIndent.push("P");
outDoc->startDescList(BaseOutputDocInterface::Version);
scanString(theTranslator->trVersion()+": ");
outDoc->endDescTitle();
@@ -1326,7 +1322,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
{
if (inBlock()) endBlock();
inSinceBlock=TRUE;
- currentListIndent.push("D");
+ currentListIndent.push("P");
outDoc->startDescList(BaseOutputDocInterface::Since);
scanString(theTranslator->trSince()+": ");
outDoc->endDescTitle();
@@ -1343,7 +1339,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
{
if (inBlock()) endBlock();
inDateBlock=TRUE;
- currentListIndent.push("D");
+ currentListIndent.push("P");
outDoc->startDescList(BaseOutputDocInterface::Date);
scanString(theTranslator->trDate()+": ");
outDoc->endDescTitle();
@@ -1364,7 +1360,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
ASSERT(item!=0);
endArgumentList();
if (inBlock()) endBlock();
- currentListIndent.push("D");
+ currentListIndent.push("P");
outDoc->startDescList(BaseOutputDocInterface::Todo);
outDoc->writeObjectLink(0,"todo",item->listAnchor,theTranslator->trTodo()+": ");
outDoc->endDescTitle();
@@ -1384,7 +1380,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
ASSERT(item!=0);
endArgumentList();
if (inBlock()) endBlock();
- currentListIndent.push("D");
+ currentListIndent.push("P");
outDoc->startDescList(BaseOutputDocInterface::Test);
outDoc->writeObjectLink(0,"test",item->listAnchor,theTranslator->trTest()+": ");
outDoc->endDescTitle();
@@ -1404,7 +1400,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
ASSERT(item!=0);
endArgumentList();
if (inBlock()) endBlock();
- currentListIndent.push("D");
+ currentListIndent.push("P");
outDoc->startDescList(BaseOutputDocInterface::Bug);
outDoc->writeObjectLink(0,"bug",item->listAnchor,theTranslator->trBug()+": ");
outDoc->endDescTitle();
@@ -1420,7 +1416,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
{
if (inBlock()) endBlock();
inDeprecatedBlock=TRUE;
- currentListIndent.push("D");
+ currentListIndent.push("P");
outDoc->startDescList(BaseOutputDocInterface::Deprecated);
scanString(theTranslator->trDeprecated()+": ");
outDoc->endDescTitle();
@@ -1439,7 +1435,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
tagText=tagText.left(tagText.length()-1);
endArgumentList();
if (inBlock()) endBlock();
- currentListIndent.push("D");
+ currentListIndent.push("P");
outDoc->startDescList(BaseOutputDocInterface::RCS);
scanString(tagName+": ");
outDoc->endDescTitle();
@@ -1454,7 +1450,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
{
if (inBlock()) endBlock();
inAuthorBlock=TRUE;
- currentListIndent.push("D");
+ currentListIndent.push("P");
outDoc->startDescList(BaseOutputDocInterface::Author);
bool singular = ((QString)yytext).find('s')==-1;
scanString(theTranslator->trAuthor(TRUE,singular)+": ");
@@ -1472,7 +1468,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
{
if (inBlock()) endBlock();
inReturnBlock=TRUE;
- currentListIndent.push("D");
+ currentListIndent.push("P");
outDoc->startDescList(BaseOutputDocInterface::Return);
scanString(theTranslator->trReturns()+": ");
outDoc->endDescTitle();
@@ -1485,7 +1481,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
{
if (inBlock()) endBlock();
inSeeBlock=TRUE;
- currentListIndent.push("D");
+ currentListIndent.push("P");
outDoc->startDescList(BaseOutputDocInterface::See);
scanString(theTranslator->trSeeAlso()+": ");
outDoc->endDescTitle();
@@ -1498,7 +1494,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
}
<DocScan>(({B}*"\n"){2,}{B}*)?{CMD}"param"{BSEP} {
QCString t=yytext;
- if (/*t.contains('\n')>1 &&*/ insideItemList)
+ if (insideItemList)
{
forceEndItemList();
}
@@ -1507,7 +1503,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
{
if (inBlock()) endBlock();
inParamBlock=TRUE;
- currentListIndent.push("D");
+ currentListIndent.push("P");
outDoc->startParamList(BaseOutputDocInterface::Param);
scanString(theTranslator->trParameters()+": ");
outDoc->endDescTitle();
@@ -1531,7 +1527,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
{
if (inBlock()) endBlock();
inRetValBlock=TRUE;
- currentListIndent.push("D");
+ currentListIndent.push("P");
outDoc->startParamList(BaseOutputDocInterface::RetVal);
scanString(theTranslator->trReturnValues()+": ");
outDoc->endDescTitle();
@@ -1555,7 +1551,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
{
if (inBlock()) endBlock();
inExceptionBlock=TRUE;
- currentListIndent.push("D");
+ currentListIndent.push("P");
outDoc->startParamList(BaseOutputDocInterface::Exception);
scanString(theTranslator->trExceptions()+": ");
outDoc->endDescTitle();
diff --git a/src/dot.cpp b/src/dot.cpp
index 9849426..d1494a7 100644
--- a/src/dot.cpp
+++ b/src/dot.cpp
@@ -490,6 +490,70 @@ void DotNode::writeXML(QTextStream &t)
}
+void DotNode::writeDEF(QTextStream &t)
+{
+ char* nodePrefix = " node-";
+
+ t << " node = {" << endl;
+ t << nodePrefix << "id = " << m_number << ';' << endl;
+ t << nodePrefix << "label = '" << m_label << "';" << endl;
+
+ if (!m_url.isEmpty())
+ {
+ QCString url(m_url);
+ char *refPtr = url.data();
+ char *urlPtr = strchr(url.data(),'$');
+ if (urlPtr)
+ {
+ *urlPtr++='\0';
+ t << nodePrefix << "link = {" << endl << " "
+ << nodePrefix << "link-id = '" << urlPtr << "';" << endl;
+
+ if (*refPtr!='\0')
+ {
+ t << " " << nodePrefix << "link-external = '"
+ << refPtr << "';" << endl;
+ }
+ t << " };" << endl;
+ }
+ }
+ if (m_children)
+ {
+ QListIterator<DotNode> nli(*m_children);
+ QListIterator<EdgeInfo> eli(*m_edgeInfo);
+ DotNode *childNode;
+ EdgeInfo *edgeInfo;
+ for (;(childNode=nli.current());++nli,++eli)
+ {
+ edgeInfo=eli.current();
+ t << " node-child = {" << endl;
+ t << " child-id = '" << childNode->m_number << "';" << endl;
+ t << " relation = ";
+
+ switch(edgeInfo->m_color)
+ {
+ case EdgeInfo::Blue: t << "public-inheritance"; break;
+ case EdgeInfo::Green: t << "protected-inheritance"; break;
+ case EdgeInfo::Red: t << "private-inheritance"; break;
+ case EdgeInfo::Purple: t << "usage"; break;
+ case EdgeInfo::Orange: t << "template-instance"; break;
+ case EdgeInfo::Grey: ASSERT(0); break;
+ }
+ t << ';' << endl;
+
+ if (!edgeInfo->m_label.isEmpty())
+ {
+ t << " edgelabel = <<_EnD_oF_dEf_TeXt_" << endl
+ << edgeInfo->m_label << endl
+ << "_EnD_oF_dEf_TeXt_;" << endl;
+ }
+ t << " }; /* node-child */" << endl;
+ } /* for (;childNode...) */
+ }
+ t << " }; /* node */" << endl;
+}
+
+
void DotNode::clearWriteFlag()
{
m_written=FALSE;
@@ -1313,6 +1377,16 @@ void DotClassGraph::writeXML(QTextStream &t)
}
}
+void DotClassGraph::writeDEF(QTextStream &t)
+{
+ QDictIterator<DotNode> dni(*m_usedNodes);
+ DotNode *node;
+ for (;(node=dni.current());++dni)
+ {
+ node->writeDEF(t);
+ }
+}
+
//--------------------------------------------------------------------
int DotInclDepGraph::m_curNodeNumber;
diff --git a/src/dot.h b/src/dot.h
index 796f6e4..5dfa624 100644
--- a/src/dot.h
+++ b/src/dot.h
@@ -77,6 +77,7 @@ class DotNode
int m_subgraphId;
void clearWriteFlag();
void writeXML(QTextStream &t);
+ void writeDEF(QTextStream &t);
private:
void colorConnectedNodes(int curColor);
@@ -126,6 +127,7 @@ class DotClassGraph
bool TBRank=TRUE,bool imageMap=TRUE);
void writeXML(QTextStream &t);
+ void writeDEF(QTextStream &t);
QCString diskName() const;
private:
diff --git a/src/doxygen.cpp b/src/doxygen.cpp
index a5f40ac..83c640e 100644
--- a/src/doxygen.cpp
+++ b/src/doxygen.cpp
@@ -55,6 +55,7 @@
#include "defargs.h"
#include "rtfgen.h"
#include "xmlgen.h"
+#include "defgen.h"
#include "reflist.h"
#include "page.h"
#include "packagedef.h"
@@ -70,16 +71,10 @@ static QDict<Entry> classEntries(1009);
ClassSDict Doxygen::classSDict(1009);
ClassSDict Doxygen::hiddenClasses(257);
-//NamespaceList Doxygen::namespaceList; // all namespaces
-//NamespaceDict Doxygen::namespaceDict(257);
NamespaceSDict Doxygen::namespaceSDict(20);
-//MemberNameList Doxygen::memberNameList; // class member + related functions
-//MemberNameDict Doxygen::memberNameDict(10007);
MemberNameSDict Doxygen::memberNameSDict(10000);
-//MemberNameList Doxygen::functionNameList; // all global function/namespace members
-//MemberNameDict Doxygen::functionNameDict(10007);
MemberNameSDict Doxygen::functionNameSDict(10000);
FileNameList Doxygen::inputNameList; // all input files
@@ -129,21 +124,15 @@ void clearAll()
Doxygen::namespaceSDict.clear();
Doxygen::pageSDict->clear();
Doxygen::exampleSDict->clear();
- //Doxygen::memberNameList.clear();
- //Doxygen::functionNameList.clear();
Doxygen::inputNameList.clear();
- //Doxygen::groupList.clear();
Doxygen::formulaList.clear();
Doxygen::classSDict.clear();
- //Doxygen::memberNameDict.clear();
- //Doxygen::functionNameDict.clear();
Doxygen::sectionDict.clear();
Doxygen::inputNameDict->clear();
Doxygen::includeNameDict->clear();
Doxygen::exampleNameDict->clear();
Doxygen::imageNameDict->clear();
Doxygen::dotFileNameDict->clear();
- //Doxygen::groupDict.clear();
Doxygen::formulaDict.clear();
Doxygen::formulaNameDict.clear();
Doxygen::tagDestinationDict.clear();
@@ -163,20 +152,13 @@ void statistics()
Doxygen::imageNameDict->statistics();
fprintf(stderr,"--- dotFileNameDict stats ----\n");
Doxygen::dotFileNameDict->statistics();
- //fprintf(stderr,"--- memberNameDict stats ----\n");
- //Doxygen::memberNameDict.statistics();
- //fprintf(stderr,"--- functionNameDict stats ----\n");
- //Doxygen::functionNameDict.statistics();
fprintf(stderr,"--- excludeNameDict stats ----\n");
excludeNameDict.statistics();
fprintf(stderr,"--- aliasDict stats ----\n");
Doxygen::aliasDict.statistics();
fprintf(stderr,"--- typedefDict stats ----\n");
- //Doxygen::typedefDict.statistics();
fprintf(stderr,"--- namespaceAliasDict stats ----\n");
Doxygen::namespaceAliasDict.statistics();
- //fprintf(stderr,"--- groupDict stats ----\n");
- //Doxygen::groupDict.statistics();
fprintf(stderr,"--- formulaDict stats ----\n");
Doxygen::formulaDict.statistics();
fprintf(stderr,"--- formulaNameDict stats ----\n");
@@ -229,7 +211,7 @@ static void buildGroupList(Entry *root)
if ((gd=Doxygen::groupSDict[root->name]))
{
- if ( root->groupdoctype==Entry::GROUPDOC_NORMAL )
+ if ( root->groupDocType==Entry::GROUPDOC_NORMAL )
{
warn(root->fileName,root->startLine,
"Warning: group %s already documented. "
@@ -264,8 +246,6 @@ static void buildGroupList(Entry *root)
gd->setBriefDescription(root->brief);
gd->setDocumentation(root->doc);
gd->addSectionsToDefinition(root->anchors);
- //Doxygen::groupList.append(gd);
- //Doxygen::groupDict.insert(root->name,gd);
Doxygen::groupSDict.append(root->name,gd);
gd->setRefItems(root->todoId,root->testId,root->bugId);
}
@@ -1619,6 +1599,148 @@ nextMember:
// Searches the Entry tree for Function sections.
// If found they are stored in their class or in the global list.
+void addNewMemberToClass(Entry *root,ClassDef *cd,
+ const QCString &rname,const QCString &scope,bool isFriend)
+{
+ int l,i;
+ static QRegExp re("([a-z_A-Z0-9: ]*[ *]*[ ]*");
+
+ if (!root->type.isEmpty() && (i=re.match(root->type,0,&l))!=-1) // function variable
+ {
+ root->args+=root->type.right(root->type.length()-i-l);
+ root->type=root->type.left(i+l);
+ }
+
+ QCString name=removeRedundantWhiteSpace(rname);
+ if (name.left(2)=="::") name=name.right(name.length()-2);
+
+ MemberDef::MemberType mtype;
+ if (isFriend) mtype=MemberDef::Friend;
+ else if (root->mtype==Signal) mtype=MemberDef::Signal;
+ else if (root->mtype==Slot) mtype=MemberDef::Slot;
+ else if (root->mtype==DCOP) mtype=MemberDef::DCOP;
+ else mtype=MemberDef::Function;
+
+ // strip redundant template specifier for constructors
+ if ((i=name.find('<'))!=-1 && name.find('>')!=-1)
+ {
+ name=name.left(i);
+ }
+
+ MemberDef *md=new MemberDef(
+ root->fileName,root->startLine,
+ root->type,name,root->args,root->exception,
+ root->protection,root->virt,root->stat,!root->relates.isEmpty(),
+ mtype,root->tArgLists ? root->tArgLists->last() : 0,root->argList);
+ if (root->tagInfo)
+ {
+ md->setAnchor(root->tagInfo->anchor);
+ md->setReference(root->tagInfo->tagName);
+ }
+ md->setMemberClass(cd);
+ md->setDocumentation(root->doc);
+ md->setBriefDescription(root->brief);
+ md->setBodySegment(root->bodyLine,root->endBodyLine);
+ md->setMemberSpecifiers(root->memSpec);
+ md->setMemberGroupId(root->mGrpId);
+ bool ambig;
+ md->setBodyDef(findFileDef(Doxygen::inputNameDict,root->fileName,ambig));
+ //md->setScopeTemplateArguments(root->tArgList);
+ md->addSectionsToDefinition(root->anchors);
+ QCString def;
+ if (!root->relates.isEmpty() || isFriend || Config_getBool("HIDE_SCOPE_NAMES"))
+ {
+ if (!root->type.isEmpty())
+ {
+ if (root->argList)
+ {
+ def=root->type+" "+name;
+ }
+ else
+ {
+ def=root->type+" "+name+root->args;
+ }
+ }
+ else
+ {
+ if (root->argList)
+ {
+ def=name;
+ }
+ else
+ {
+ def=name+root->args;
+ }
+ }
+ }
+ else
+ {
+ QCString qualScope = cd->qualifiedNameWithTemplateParameters();
+ if (!root->type.isEmpty())
+ {
+ if (root->argList)
+ {
+ def=root->type+" "+qualScope+"::"+name;
+ }
+ else
+ {
+ def=root->type+" "+qualScope+"::"+name+root->args;
+ }
+ }
+ else
+ {
+ if (root->argList)
+ {
+ def=qualScope+"::"+name;
+ }
+ else
+ {
+ def=qualScope+"::"+name+root->args;
+ }
+ }
+ }
+ if (def.left(7)=="friend ") def=def.right(def.length()-7);
+ md->setDefinition(def);
+
+ Debug::print(Debug::Functions,0,
+ " Func Member:\n"
+ " `%s' `%s'::`%s' `%s' proto=%d\n"
+ " def=`%s'\n",
+ root->type.data(),
+ scope.data(),
+ rname.data(),
+ root->args.data(),
+ root->proto,
+ def.data()
+ );
+
+ // add member to the global list of all members
+ //printf("Adding member=%s class=%s\n",md->name().data(),cd->name().data());
+ MemberName *mn;
+ if ((mn=Doxygen::memberNameSDict[name]))
+ {
+ mn->append(md);
+ }
+ else
+ {
+ mn = new MemberName(name);
+ mn->append(md);
+ //Doxygen::memberNameDict.insert(name,mn);
+ //Doxygen::memberNameList.append(mn);
+ Doxygen::memberNameSDict.append(name,mn);
+ }
+
+ // add member to the class cd
+ cd->insertMember(md);
+ // add file to list of used files
+ cd->insertUsedFile(root->fileName);
+
+ addMemberToGroups(root,md);
+ root->section = Entry::EMPTY_SEC;
+ md->setRefItems(root->todoId,root->testId,root->bugId);
+}
+
+
static void buildFunctionList(Entry *root)
{
if (root->section==Entry::FUNCTION_SEC)
@@ -1649,7 +1771,7 @@ static void buildFunctionList(Entry *root)
ClassDef *cd=0;
// check if this function's parent is a class
- QRegExp re("([a-z_A-Z0-9: ]*[ *]*[ ]*");
+ static QRegExp re("([a-z_A-Z0-9: ]*[ *]*[ ]*");
//printf("root->parent=`%s' cd=%p root->type.find(re,0)=%d\n",
// root->parent->name.data(),getClass(root->parent->name),
// root->type.find(re,0));
@@ -1672,7 +1794,6 @@ static void buildFunctionList(Entry *root)
}
}
- int i;
if (root->parent &&
!root->parent->name.isEmpty() &&
(root->parent->section & Entry::COMPOUND_MASK) &&
@@ -1683,151 +1804,7 @@ static void buildFunctionList(Entry *root)
)
)
{
- int l;
- if (!root->type.isEmpty() && (i=re.match(root->type,0,&l))!=-1) // function variable
- {
- root->args+=root->type.right(root->type.length()-i-l);
- root->type=root->type.left(i+l);
- }
-
- QCString name=removeRedundantWhiteSpace(rname);
- if (name.left(2)=="::") name=name.right(name.length()-2);
-
- MemberDef::MemberType mtype;
- if (isFriend) mtype=MemberDef::Friend;
- else if (root->mtype==Signal) mtype=MemberDef::Signal;
- else if (root->mtype==Slot) mtype=MemberDef::Slot;
- else if (root->mtype==DCOP) mtype=MemberDef::DCOP;
- else mtype=MemberDef::Function;
-
- // strip redundant template specifier for constructors
- if ((i=name.find('<'))!=-1 && name.find('>')!=-1)
- {
- name=name.left(i);
- }
-
- //if (Config::instance()->get("") && !root->body.isEmpty())
- //{
- // printf("Function: %s\n-----------------\n%s\n------------------\n",
- // rname.data(),root->body.data());
- //}
-
- // new member function, signal or slot.
- //printf("new member: %s member template args=`%s'\n",
- // root->args.data(),
- // argListToString(root->mtArgList).data());
-
- MemberDef *md=new MemberDef(
- root->fileName,root->startLine,
- root->type,name,root->args,root->exception,
- root->protection,root->virt,root->stat,!root->relates.isEmpty(),
- mtype,root->tArgLists ? root->tArgLists->last() : 0,root->argList);
- if (root->tagInfo)
- {
- md->setAnchor(root->tagInfo->anchor);
- md->setReference(root->tagInfo->tagName);
- }
- md->setMemberClass(cd);
- md->setDocumentation(root->doc);
- md->setBriefDescription(root->brief);
- md->setBodySegment(root->bodyLine,root->endBodyLine);
- md->setMemberSpecifiers(root->memSpec);
- md->setMemberGroupId(root->mGrpId);
- bool ambig;
- md->setBodyDef(findFileDef(Doxygen::inputNameDict,root->fileName,ambig));
- //md->setScopeTemplateArguments(root->tArgList);
- md->addSectionsToDefinition(root->anchors);
- QCString def;
- if (!root->relates.isEmpty() || isFriend || Config_getBool("HIDE_SCOPE_NAMES"))
- {
- if (!root->type.isEmpty())
- {
- if (root->argList)
- {
- def=root->type+" "+name;
- }
- else
- {
- def=root->type+" "+name+root->args;
- }
- }
- else
- {
- if (root->argList)
- {
- def=name;
- }
- else
- {
- def=name+root->args;
- }
- }
- }
- else
- {
- QCString qualScope = cd->qualifiedNameWithTemplateParameters();
- if (!root->type.isEmpty())
- {
- if (root->argList)
- {
- def=root->type+" "+qualScope+"::"+name;
- }
- else
- {
- def=root->type+" "+qualScope+"::"+name+root->args;
- }
- }
- else
- {
- if (root->argList)
- {
- def=qualScope+"::"+name;
- }
- else
- {
- def=qualScope+"::"+name+root->args;
- }
- }
- }
- if (def.left(7)=="friend ") def=def.right(def.length()-7);
- md->setDefinition(def);
-
- Debug::print(Debug::Functions,0,
- " Func Member:\n"
- " `%s' `%s'::`%s' `%s' proto=%d\n"
- " def=`%s'\n",
- root->type.data(),
- scope.data(),
- rname.data(),
- root->args.data(),
- root->proto,
- def.data()
- );
-
- // add member to the global list of all members
- //printf("Adding member=%s class=%s\n",md->name().data(),cd->name().data());
- MemberName *mn;
- if ((mn=Doxygen::memberNameSDict[name]))
- {
- mn->append(md);
- }
- else
- {
- mn = new MemberName(name);
- mn->append(md);
- //Doxygen::memberNameDict.insert(name,mn);
- //Doxygen::memberNameList.append(mn);
- Doxygen::memberNameSDict.append(name,mn);
- }
-
- // add member to the class cd
- cd->insertMember(md);
- // add file to list of used files
- cd->insertUsedFile(root->fileName);
-
- addMemberToGroups(root,md);
- root->section = Entry::EMPTY_SEC;
- md->setRefItems(root->todoId,root->testId,root->bugId);
+ addNewMemberToClass(root,cd,rname,scope,isFriend);
}
else if (root->parent &&
!(root->parent->section & Entry::COMPOUND_MASK) &&
@@ -3077,74 +3054,6 @@ static void computeMemberReferences()
//----------------------------------------------------------------------
-#if 0
-static void addClassMemberTodoTestBugReferences(Definition *compound)
-{
- MemberNameSDict::Iterator mnli(Doxygen::memberNameSDict);
- MemberName *mn=0;
- for (mnli.toFirst();(mn=mnli.current());++mnli)
- {
- MemberNameIterator mni(*mn);
- MemberDef *md=0;
- for (mni.toFirst();(md=mni.current());++mni)
- {
- Definition *d=md->getClassDef();
- QCString scopeName;
- if (d) scopeName=d->name();
- if (d==0) d=md->getGroupDef();
- if (d==0) d=md->getFileDef();
- if (d!=0 && ((compound==0 && !md->visited) || compound==d))
- {
- QCString memLabel;
- md->visited=TRUE;
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- memLabel=theTranslator->trField(TRUE,TRUE);
- }
- else
- {
- memLabel=theTranslator->trMember(TRUE,TRUE);
- }
- addRefItem(md->todoId(),md->testId(),md->bugId(),memLabel,d->getOutputFileBase()+":"+md->anchor(),scopeName+"::"+md->name(),md->argsString());
- }
- }
- }
-}
-
-static void addFileMemberTodoTestBugReferences(Definition *compound)
-{
- MemberNameSDict::Iterator fnli(Doxygen::functionNameSDict);
- MemberName *mn=0;
- for (fnli.toFirst();(mn=fnli.current());++fnli)
- {
- MemberNameIterator mni(*mn);
- MemberDef *md=0;
- for (mni.toFirst();(md=mni.current());++mni)
- {
- Definition *d=md->getNamespaceDef();
- QCString scopeName;
- if (d) scopeName=d->name();
- if (d==0) d=md->getGroupDef();
- if (d==0) d=md->getFileDef();
- if (d!=0 && ((compound==0 && !md->visited) || compound==d))
- {
- QCString memLabel;
- md->visited=TRUE;
- if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
- memLabel=theTranslator->trGlobal(TRUE,TRUE);
- }
- else
- {
- memLabel=theTranslator->trMember(TRUE,TRUE);
- }
- addRefItem(md->todoId(),md->testId(),md->bugId(),memLabel,d->getOutputFileBase()+":"+md->anchor(),md->name(),md->argsString());
- }
- }
- }
-}
-#endif
-
static void addListReferences()
{
MemberNameSDict::Iterator mnli(Doxygen::memberNameSDict);
@@ -3292,33 +3201,33 @@ static void addMemberDocs(Entry *root,
//printf("overwrite!\n");
md->setBriefDescription(root->brief);
}
-
- if (md->initializer().isEmpty() && !root->initializer.isEmpty())
- {
- md->setInitializer(root->initializer);
- md->setMaxInitLines(root->initLines);
- }
-
- //if (md->bodyCode().isEmpty() && !root->body.isEmpty()) /* no body yet */
- //{
- // md->setBody(root->body);
- //}
- bool ambig;
- FileDef *fd=findFileDef(Doxygen::inputNameDict,root->fileName,ambig);
- if (fd)
- {
+ }
- if ((md->getStartBodyLine()==-1 && root->bodyLine!=-1) ||
- (md->isVariable() && !root->explicitExternal))
- {
- md->setBodySegment(root->bodyLine,root->endBodyLine);
- md->setBodyDef(fd);
- }
+ if (md->initializer().isEmpty() && !root->initializer.isEmpty())
+ {
+ md->setInitializer(root->initializer);
+ md->setMaxInitLines(root->initLines);
+ }
- md->setRefItems(root->todoId,root->testId,root->bugId);
+ //if (md->bodyCode().isEmpty() && !root->body.isEmpty()) /* no body yet */
+ //{
+ // md->setBody(root->body);
+ //}
+ bool ambig;
+ FileDef *fd=findFileDef(Doxygen::inputNameDict,root->fileName,ambig);
+ if (fd)
+ {
+
+ if ((md->getStartBodyLine()==-1 && root->bodyLine!=-1) ||
+ (md->isVariable() && !root->explicitExternal))
+ {
+ md->setBodySegment(root->bodyLine,root->endBodyLine);
+ md->setBodyDef(fd);
}
-
+
+ md->setRefItems(root->todoId,root->testId,root->bugId);
}
+
//md->setDefFile(root->fileName);
//md->setDefLine(root->startLine);
md->mergeMemberSpecifiers(root->memSpec);
@@ -3587,10 +3496,6 @@ static void substituteTemplatesInArgList(
/*! This function tries to find a member (in a documented class/file/namespace)
* that corresponds to the function/variable declaration given in \a funcDecl.
*
- * The \a related field may be used to specify a related class name.
- * It is only used if the class name cannot be extracted from the function
- * declaration.
- *
* The boolean \a overloaded is used to specify whether or not a standard
* overload documentation line should be generated.
*
@@ -3599,7 +3504,6 @@ static void substituteTemplatesInArgList(
*/
static void findMember(Entry *root,
QCString funcDecl,
- QCString related,
bool overloaded,
bool isFunc
)
@@ -3607,21 +3511,15 @@ static void findMember(Entry *root,
Debug::print(Debug::FindMembers,0,
"findMember(root=%p,funcDecl=`%s',related=`%s',overload=%d,"
"isFunc=%d mGrpId=%d tArgList=%p (#=%d) "
- "scopeSpec=%s memberSpec=%s memSpec=%d\n",
- root,funcDecl.data(),related.data(),overloaded,isFunc,root->mGrpId,
+ "memSpec=%d\n",
+ root,funcDecl.data(),root->relates.data(),overloaded,isFunc,root->mGrpId,
root->tArgLists,root->tArgLists ? root->tArgLists->count() : 0,
- root->scopeSpec.data(),root->memberSpec.data(),root->memSpec
+ root->memSpec
);
- //if (Config::instance()->get("") && !root->body.isEmpty())
- //{
- // //printf("Function: %s\n-----------------\n%s\n------------------\n",
- // //root->name.data(),root->body.data());
- //}
QCString scopeName;
QCString className;
QCString namespaceName;
- //QCString classTempList;
QCString funcType;
QCString funcName;
QCString funcArgs;
@@ -3711,16 +3609,16 @@ static void findMember(Entry *root,
// related field.
//printf("scopeName=`%s' className=`%s' namespaceName=`%s'\n",
// scopeName.data(),className.data(),namespaceName.data());
- if (!related.isEmpty() && !isRelated)
+ if (!root->relates.isEmpty())
{ // related member, prefix user specified scope
isRelated=TRUE;
- if (getClass(related)==0 && !scopeName.isEmpty())
- scopeName= mergeScopes(scopeName,related);
+ if (getClass(root->relates)==0 && !scopeName.isEmpty())
+ scopeName= mergeScopes(scopeName,root->relates);
else
- scopeName = related.copy();
+ scopeName = root->relates.copy();
}
- if (related.isEmpty() && root->parent &&
+ if (root->relates.isEmpty() && root->parent &&
(root->parent->section&Entry::SCOPE_MASK) &&
!root->parent->name.isEmpty())
{
@@ -3776,7 +3674,7 @@ static void findMember(Entry *root,
//printf("scopeName=`%s' className=`%s'\n",scopeName.data(),className.data());
// rebuild the function declaration (needed to get the scope right).
- if (!scopeName.isEmpty() && !isRelated && !isFriend && !Config_getBool("HIDE_SCOPE_NAMES"))
+ if (!scopeName.isEmpty() && /*!isRelated &&*/ !isFriend && !Config_getBool("HIDE_SCOPE_NAMES"))
{
if (!funcType.isEmpty())
{
@@ -3849,7 +3747,7 @@ static void findMember(Entry *root,
" isFunc=%d\n\n",
namespaceName.data(),className.data(),
funcType.data(),funcName.data(),funcArgs.data(),funcTempList.data(),
- funcDecl.data(),related.data(),exceptions.data(),isRelated,isFriend,
+ funcDecl.data(),root->relates.data(),exceptions.data(),isRelated,isFriend,
isFunc
);
@@ -4010,19 +3908,43 @@ static void findMember(Entry *root,
}
if (count==0 && !(isFriend && funcType=="class"))
{
- warn(root->fileName,root->startLine,
- "Warning: no matching class member found for \n %s",
- fullFuncDecl.data()
- );
int candidates=0;
if (mn->count()>0)
{
for (mni.toFirst();(md=mni.current());++mni)
{
ClassDef *cd=md->getClassDef();
- if (cd!=0 && cd->name()==className) candidates++;
+ if (cd!=0 && cd->name()==className)
+ {
+ if (root->tArgLists && md->templateArguments() &&
+ root->tArgLists->getLast()->count()<=md->templateArguments()->count())
+ { // assume we have found a template specialization
+ // for which there is only a definition, no declaration in
+ // the class. TODO: we should actually check whether
+ // the arguments match!
+ addNewMemberToClass(root,cd,md->name(),cd->name(),isFriend);
+ return;
+ }
+ candidates++;
+ }
}
}
+
+ warn(root->fileName,root->startLine,
+ "Warning: no matching class member found for"
+ );
+
+ if (root->tArgLists)
+ {
+ QListIterator<ArgumentList> alli(*root->tArgLists);
+ ArgumentList *al;
+ for (;(al=alli.current());++alli)
+ {
+ warn_cont(" template %s\n",tempArgListToString(al).data());
+ }
+ }
+ warn_cont(" %s\n",fullFuncDecl.data());
+
if (candidates>0)
{
warn_cont("Possible candidates:\n");
@@ -4031,7 +3953,13 @@ static void findMember(Entry *root,
ClassDef *cd=md->getClassDef();
if (cd!=0 && cd->name()==className)
{
- warn_cont(" %s\n",md->declaration());
+ if (md->templateArguments())
+ {
+ warn_cont(" template %s\n",tempArgListToString(md->templateArguments()).data());
+ }
+ warn_cont(" %s %s::%s%s\n",
+ md->typeString(),cd->name().data(),
+ md->name().data(),md->argsString());
}
}
}
@@ -4066,6 +3994,7 @@ static void findMember(Entry *root,
// new overloaded member function
ArgumentList *tArgList =
getTemplateArgumentsFromName(cd->name()+"::"+funcName,root->tArgLists);
+ //printf("new related member %s args=`%s'\n",md->name().data(),funcArgs.data());
MemberDef *md=new MemberDef(
root->fileName,root->startLine,
funcType,funcName,funcArgs,exceptions,
@@ -4107,9 +4036,10 @@ static void findMember(Entry *root,
}
}
}
- else if (isRelated && !related.isEmpty())
+ else if (isRelated && !root->relates.isEmpty())
{
- if (className.isEmpty()) className=related.copy();
+ Debug::print(Debug::FindMembers,0,"2. related function\n");
+ if (className.isEmpty()) className=root->relates.copy();
ClassDef *cd;
//printf("scopeName=`%s' className=`%s'\n",scopeName.data(),className.data());
if ((cd=getClass(scopeName)))
@@ -4147,9 +4077,12 @@ static void findMember(Entry *root,
mtype=MemberDef::Slot;
else if (root->mtype==DCOP)
mtype=MemberDef::DCOP;
- else
+ else
mtype=MemberDef::Function;
+ //printf("New related name `%s' `%d'\n",funcName.data(),
+ // root->argList ? (int)root->argList->count() : -1);
+
// new related (member) function
ArgumentList *tArgList =
getTemplateArgumentsFromName(scopeName+"::"+funcName,root->tArgLists);
@@ -4157,7 +4090,7 @@ static void findMember(Entry *root,
root->fileName,root->startLine,
funcType,funcName,funcArgs,exceptions,
root->protection,root->virt,root->stat,TRUE,
- mtype,tArgList,root->argList);
+ mtype,tArgList,funcArgs.isEmpty() ? 0 : root->argList);
if (root->tagInfo)
{
md->setAnchor(root->tagInfo->anchor);
@@ -4300,12 +4233,12 @@ static void findMemberDocumentation(Entry *root)
//printf("Documentation for inline member `%s' found args=`%s'\n",
// root->name.data(),root->args.data());
//if (root->relates.length()) printf(" Relates %s\n",root->relates.data());
- findMember(root,root->name+root->args+root->exception,root->relates,FALSE,isFunc);
+ findMember(root,root->name+root->args+root->exception,FALSE,isFunc);
}
else if (root->section==Entry::OVERLOADDOC_SEC)
{
//printf("Overloaded member %s found\n",root->name.data());
- findMember(root,root->name,root->relates,TRUE,isFunc);
+ findMember(root,root->name,TRUE,isFunc);
}
else if
((root->section==Entry::FUNCTION_SEC // function
@@ -4328,7 +4261,6 @@ static void findMemberDocumentation(Entry *root)
findMember(root,
root->type+" "+
root->name,
- root->relates,
FALSE,FALSE);
}
@@ -4340,7 +4272,6 @@ static void findMemberDocumentation(Entry *root)
root->name+
root->args+
root->exception,
- root->relates,
FALSE,isFunc);
}
else
@@ -4350,19 +4281,23 @@ static void findMemberDocumentation(Entry *root)
root->name+
root->args+
root->exception,
- root->relates,
FALSE,isFunc);
}
}
+ else if (root->section==Entry::DEFINE_SEC && !root->relates.isEmpty())
+ {
+ findMember(root,root->name+root->args,FALSE,!root->args.isEmpty());
+ }
else if (root->section==Entry::VARIABLEDOC_SEC)
{
//printf("Documentation for variable %s found\n",root->name.data());
//if (!root->relates.isEmpty()) printf(" Relates %s\n",root->relates.data());
- findMember(root,root->name,root->relates,FALSE,FALSE);
+ findMember(root,root->name,FALSE,FALSE);
}
else
{
// skip section
+ //printf("skip section\n");
}
EntryListIterator eli(*root->sublist);
Entry *e;
@@ -7247,5 +7182,10 @@ void generateOutput()
msg("Generating XML output...\n");
generateXML();
}
+ if (Config_getBool("GENERATE_AUTOGEN_DEF"))
+ {
+ msg("Generating AutoGen DEF output...\n");
+ generateDEF();
+ }
}
diff --git a/src/entry.cpp b/src/entry.cpp
index 44081c2..26113aa 100644
--- a/src/entry.cpp
+++ b/src/entry.cpp
@@ -41,7 +41,7 @@ Entry::Entry()
//mtArgList = 0;
mGrpId = -1;
tagInfo = 0;
- groupdoctype = GROUPDOC_NORMAL;
+ groupDocType = GROUPDOC_NORMAL;
reset();
}
@@ -93,7 +93,7 @@ Entry::Entry(const Entry &e)
//printf("Entry::Entry(copy) tArgList=0\n");
tArgLists = 0;
//mtArgList = 0;
- groupdoctype = e.groupdoctype;
+ groupDocType = e.groupDocType;
// deep copy of the child entry list
QListIterator<Entry> eli(*e.sublist);
@@ -210,8 +210,8 @@ void Entry::reset()
brief.resize(0);
inside.resize(0);
fileName.resize(0);
- scopeSpec.resize(0);
- memberSpec.resize(0);
+ //scopeSpec.resize(0);
+ //memberSpec.resize(0);
initializer.resize(0);
initLines = -1;
startLine = 1;
@@ -230,7 +230,7 @@ void Entry::reset()
memSpec = 0;
subGrouping = TRUE;
protection = Public;
- groupdoctype = GROUPDOC_NORMAL;
+ groupDocType = GROUPDOC_NORMAL;
sublist->clear();
extends->clear();
groups->clear();
diff --git a/src/entry.h b/src/entry.h
index 3646d40..08ed956 100644
--- a/src/entry.h
+++ b/src/entry.h
@@ -254,10 +254,8 @@ class Entry
QCString bitfields; //!< member's bit fields
ArgumentList *argList; //!< member arguments as a list
QList<ArgumentList> *tArgLists; //!< template argument declarations
- //ArgumentList *tArgList; //!< template argument lists (for each scope)
- //ArgumentList *mtArgList; //!< member template argument list
- QCString scopeSpec; //!< template specialization of the scope
- QCString memberSpec; //!< template specialization of the member
+ //QCString scopeSpec; //!< template specialization of the scope
+ //QCString memberSpec; //!< template specialization of the member
QCString program; //!< the program text
QCString initializer; //!< initial value (for variables)
QCString includeFile; //!< include file (2 arg of \class, must be unique)
@@ -281,32 +279,36 @@ class Entry
int bugId; //!< id of the bug list item of this entry
TagInfo *tagInfo; //!< tag file info
static int num; //!< counts the total number of entries
- enum {
- GROUPDOC_NORMAL, //<! @defgroup
- GROUPDOC_ADD, //<! @addgroup
- GROUPDOC_WEAK //<! @weakgroup
- } groupdoctype; //!< kind of group
+ enum
+ {
+ GROUPDOC_NORMAL, //<! defgroup
+ GROUPDOC_ADD, //<! addgroup
+ GROUPDOC_WEAK //<! weakgroup
+ } groupDocType; //!< kind of group
/// return the command name used to define GROUPDOC_SEC
- const char *groupdoccmd() const
+ const char *groupDocCmd() const
{
- switch( this->groupdoctype ) {
- case GROUPDOC_NORMAL: return "\\defgroup"; break;
- case GROUPDOC_ADD: return "\\addgroup"; break;
- case GROUPDOC_WEAK: return "\\weakgroup"; break;
- default: return "unknown group command";
- }
+ switch( groupDocType )
+ {
+ case GROUPDOC_NORMAL: return "\\defgroup"; break;
+ case GROUPDOC_ADD: return "\\addgroup"; break;
+ case GROUPDOC_WEAK: return "\\weakgroup"; break;
+ default: return "unknown group command";
+ }
}
- Grouping::GroupPri_t groupingpri() const
+ Grouping::GroupPri_t groupingPri() const
{
- if( this->section != GROUPDOC_SEC ) {
- return Grouping::GROUPING_LOWEST;
- }
- switch( this->groupdoctype ) {
- case GROUPDOC_NORMAL: return Grouping::GROUPING_AUTO_DEF; break;
- case GROUPDOC_ADD: return Grouping::GROUPING_AUTO_ADD; break;
- case GROUPDOC_WEAK: return Grouping::GROUPING_AUTO_WEAK; break;
- default: return Grouping::GROUPING_LOWEST;
- }
+ if( section != GROUPDOC_SEC )
+ {
+ return Grouping::GROUPING_LOWEST;
+ }
+ switch( groupDocType )
+ {
+ case GROUPDOC_NORMAL: return Grouping::GROUPING_AUTO_DEF; break;
+ case GROUPDOC_ADD: return Grouping::GROUPING_AUTO_ADD; break;
+ case GROUPDOC_WEAK: return Grouping::GROUPING_AUTO_WEAK; break;
+ default: return Grouping::GROUPING_LOWEST;
+ }
}
private:
Entry &operator=(const Entry &);
diff --git a/src/filedef.cpp b/src/filedef.cpp
index 32d14d0..620c8a9 100644
--- a/src/filedef.cpp
+++ b/src/filedef.cpp
@@ -51,8 +51,7 @@ FileDef::FileDef(const char *p,const char *nm,const char *lref)
includedByList = new QList<IncludeInfo>;
includedByList->setAutoDelete(TRUE);
includedByDict = new QDict<IncludeInfo>(61);
- namespaceList = new NamespaceList;
- namespaceDict = new NamespaceDict(7);
+ namespaceSDict = new NamespaceSDict;
srcDefDict = 0;
srcMemberDict = 0;
usingDirList = 0;
@@ -74,8 +73,7 @@ FileDef::~FileDef()
delete classSDict;
delete includeDict;
delete includeList;
- delete namespaceList;
- delete namespaceDict;
+ delete namespaceSDict;
delete srcDefDict;
delete srcMemberDict;
delete usingDirList;
@@ -267,11 +265,12 @@ void FileDef::writeDocumentation(OutputList &ol)
ol.startMemberSections();
- if (namespaceList->count()>0)
+ if (namespaceSDict->count()>0)
{
- NamespaceDef *nd=namespaceList->first();
+ NamespaceSDict::Iterator ndi(*namespaceSDict);
+ NamespaceDef *nd;
bool found=FALSE;
- while (nd)
+ for (ndi.toFirst();(nd=ndi.current());++ndi)
{
if (nd->name().find('@')==-1)
{
@@ -306,7 +305,6 @@ void FileDef::writeDocumentation(OutputList &ol)
}
ol.endMemberItem(FALSE);
}
- nd=namespaceList->next();
}
if (found) ol.endMemberList();
}
@@ -533,13 +531,12 @@ void FileDef::insertClass(ClassDef *cd)
/*! Adds namespace definition \a nd to the list of all compounds of this file */
void FileDef::insertNamespace(NamespaceDef *nd)
{
- if (!nd->name().isEmpty() && namespaceDict->find(nd->name())==0)
+ if (!nd->name().isEmpty() && namespaceSDict->find(nd->name())==0)
{
if (Config_getBool("SORT_MEMBER_DOCS"))
- namespaceList->inSort(nd);
+ namespaceSDict->inSort(nd->name(),nd);
else
- namespaceList->append(nd);
- namespaceDict->insert(nd->name(),nd);
+ namespaceSDict->append(nd->name(),nd);
}
}
diff --git a/src/filedef.h b/src/filedef.h
index 906e208..fc0bdb7 100644
--- a/src/filedef.h
+++ b/src/filedef.h
@@ -35,8 +35,7 @@ class ClassList;
class MemberDef;
class OutputList;
class NamespaceDef;
-class NamespaceList;
-class NamespaceDict;
+class NamespaceSDict;
class MemberGroupSDict;
class PackageDef;
@@ -171,15 +170,15 @@ class FileDef : public Definition
/* user defined member groups */
MemberGroupSDict *memberGroupSDict;
+ NamespaceSDict *namespaceSDict;
+ ClassSDict *classSDict;
+
private:
- ClassSDict *classSDict;
QDict<IncludeInfo> *includeDict;
QList<IncludeInfo> *includeList;
QDict<IncludeInfo> *includedByDict;
QList<IncludeInfo> *includedByList;
- NamespaceDict *namespaceDict;
- NamespaceList *namespaceList;
NamespaceList *usingDirList;
ClassList *usingDeclList;
//DefineList *defineList;
diff --git a/src/groupdef.cpp b/src/groupdef.cpp
index 50d846b..f879d60 100644
--- a/src/groupdef.cpp
+++ b/src/groupdef.cpp
@@ -309,10 +309,10 @@ bool GroupDef::containsGroup(const GroupDef *def)
void GroupDef::addGroup(const GroupDef *def)
{
- if (Config_getBool("SORT_MEMBER_DOCS"))
- groupList->inSort(def);
- else
- groupList->append(def);
+ //if (Config_getBool("SORT_MEMBER_DOCS"))
+ // groupList->inSort(def);
+ //else
+ groupList->append(def);
}
void GroupDef::addParentGroup(const GroupDef *def)
@@ -382,6 +382,8 @@ void GroupDef::writeDocumentation(OutputList &ol)
}
ol.startMemberSections();
+
+ // write list of files
if (fileList->count()>0)
{
ol.startMemberHeader();
@@ -411,6 +413,8 @@ void GroupDef::writeDocumentation(OutputList &ol)
}
ol.endMemberList();
}
+
+ // write list of namespaces
if (namespaceList->count()>0)
{
ol.startMemberHeader();
@@ -440,6 +444,8 @@ void GroupDef::writeDocumentation(OutputList &ol)
}
ol.endMemberList();
}
+
+ // write list of groups
if (groupList->count()>0)
{
ol.startMemberHeader();
@@ -469,8 +475,10 @@ void GroupDef::writeDocumentation(OutputList &ol)
ol.endMemberList();
}
+ // write list of classes
classSDict->writeDeclaration(ol);
+ // write list of members
if (allMemberList->count()>0)
{
/* write user defined member groups */
diff --git a/src/groupdef.h b/src/groupdef.h
index 8a0088f..d32f781 100644
--- a/src/groupdef.h
+++ b/src/groupdef.h
@@ -100,6 +100,12 @@ class GroupDef : public Definition
/* user defined member groups */
MemberGroupSDict *memberGroupSDict;
+
+ FileList * getFiles() const { return fileList; }
+ ClassSDict * getClasses() const { return classSDict; }
+ NamespaceList * getNamespaces() const { return namespaceList; }
+ GroupList * getSubGroups() const { return groupList; }
+ PageSDict * getPages() const { return pageDict; }
protected:
void addMemberListToGroup(MemberList *,bool (MemberDef::*)() const);
diff --git a/src/index.cpp b/src/index.cpp
index afcd154..cc1bc99 100644
--- a/src/index.cpp
+++ b/src/index.cpp
@@ -2338,14 +2338,14 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd,bool subLevel)
// write subgroups
if (hasSubGroups)
{
- ol.startItemList();
+ ol.startIndexList();
QListIterator<GroupDef> gli(*gd->groupList);
GroupDef *subgd = 0;
for (gli.toLast();(subgd=gli.current());--gli)
{
writeGroupTreeNode(ol,subgd,TRUE);
}
- ol.endItemList();
+ ol.endIndexList();
}
@@ -2544,14 +2544,14 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd,bool subLevel)
void writeGroupHierarchy(OutputList &ol)
{
- ol.startItemList();
+ ol.startIndexList();
GroupSDict::Iterator gli(Doxygen::groupSDict);
GroupDef *gd;
for (gli.toFirst();(gd=gli.current());++gli)
{
writeGroupTreeNode(ol,gd,FALSE);
}
- ol.endItemList();
+ ol.endIndexList();
}
//----------------------------------------------------------------------------
diff --git a/src/libdoxygen.pro.in b/src/libdoxygen.pro.in
index 1a6de48..6b73443 100644
--- a/src/libdoxygen.pro.in
+++ b/src/libdoxygen.pro.in
@@ -23,6 +23,7 @@ HEADERS = bufstr.h \
constexp.h \
cppvalue.h \
debug.h \
+ defgen.h \
doxygen.h \
scanner.h \
doc.h \
@@ -92,7 +93,7 @@ HEADERS = bufstr.h \
unistd.h \
util.h \
version.h \
- xmlgen.h
+ xmlgen.h
SOURCES = ce_lex.cpp \
ce_parse.cpp \
classdef.cpp \
@@ -100,6 +101,7 @@ SOURCES = ce_lex.cpp \
code.cpp \
cppvalue.cpp \
debug.cpp \
+ defgen.cpp \
declinfo.cpp \
defargs.cpp \
define.cpp \
@@ -143,7 +145,7 @@ SOURCES = ce_lex.cpp \
translator.cpp \
util.cpp \
version.cpp \
- xmlgen.cpp
+ xmlgen.cpp
win32:TMAKE_CXXFLAGS += -DQT_NODLL
win32-msvc:TMAKE_CXXFLAGS += -Zm200
diff --git a/src/memberdef.cpp b/src/memberdef.cpp
index 4253ce5..edcf1e7 100644
--- a/src/memberdef.cpp
+++ b/src/memberdef.cpp
@@ -73,6 +73,7 @@ static void writeDefArgumentList(OutputList &ol,ClassDef *cd,
const QCString &scopeName,MemberDef *md)
{
ArgumentList *argList=md->argumentList();
+ //printf("writeDefArgumentList `%s' %p\n",md->name().data(),argList);
if (argList==0) return; // member has no function like argument list
if (!md->isDefine()) ol.docify(" ");
@@ -442,28 +443,6 @@ QCString MemberDef::getOutputFileBase() const
return "dummy";
}
-//void MemberDef::setScopeDefTemplateArguments(ArgumentList *tal)
-//{
-// // copy function arguments (if any)
-// if (tal)
-// {
-// scopeTAL = new ArgumentList;
-// scopeTAL->setAutoDelete(TRUE);
-// copyArgumentList(tal,scopeTAL);
-// }
-//}
-//
-//void MemberDef::setMemberDefTemplateArguments(ArgumentList *tal)
-//{
-// // copy function arguments (if any)
-// if (tal)
-// {
-// membTAL = new ArgumentList;
-// membTAL->setAutoDelete(TRUE);
-// copyArgumentList(tal,membTAL);
-// }
-//}
-
void MemberDef::setDefinitionTemplateParameterLists(QList<ArgumentList> *lists)
{
if (lists)
@@ -962,6 +941,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
if (scopeName) doxyName.prepend((QCString)scopeName+"::");
QCString ldef = definition();
+ //printf("member `%s' def=`%s'\n",name().data(),ldef.data());
if (isEnumerate())
{
if (name().at(0)=='@')
@@ -1090,10 +1070,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
ol.startMemberDocName();
linkifyText(TextGeneratorOLImpl(ol),scopeName,name(),ldef);
writeDefArgumentList(ol,cd,scopeName,this);
- if (hasOneLineInitializer()
- //!init.isEmpty() && initLines==0 && // one line initializer
- // ((maxInitLines>0 && userInitLines==-1) || userInitLines>0) // enabled by default or explicitly
- ) // add initializer
+ if (hasOneLineInitializer()) // add initializer
{
if (!isDefine())
{
@@ -1566,19 +1543,6 @@ QCString MemberDef::getScopeString() const
return result;
}
-
-//Definition *MemberDef::getCompoundDef() const
-//{
-// NamespaceDef *nd=getNamespaceDef();
-// ClassDef *cd=getClassDef();
-// FileDef *fd=getFileDef();
-// GroupDef *gd=getGroupDef();
-// Definition *d = 0;
-// if (cd) d=cd; else if (nd) d=nd; else if (gd) d=gd; else d=fd;
-// ASSERT(d!=0);
-// return d;
-//}
-
QCString MemberDef::anchor() const
{
if (m_templateMaster) return m_templateMaster->anchor();
@@ -1649,7 +1613,7 @@ MemberDef *MemberDef::createTemplateInstanceMember(
);
imd->argList = actualArgList;
imd->def = substituteTemplateArgumentsInString(def,formalArgs,actualArgs);
- // TODO: init other member variables.
+ // TODO: init other member variables (if needed).
return imd;
}
@@ -1690,7 +1654,16 @@ void MemberDef::addListReference(Definition *d)
{
memLabel=theTranslator->trMember(TRUE,TRUE);
}
+ QCString memName = name();
+ if (!Config_getBool("HIDE_SCOPE_NAMES"))
+ {
+ Definition *pd=getOuterScope();
+ if (pd && pd!=Doxygen::globalScope)
+ {
+ memName.prepend(pd->name()+"::");
+ }
+ }
addRefItem(todoId(),testId(),bugId(),memLabel,
- d->getOutputFileBase()+":"+anchor(),name(),argsString());
+ d->getOutputFileBase()+":"+anchor(),memName,argsString());
}
diff --git a/src/memberdef.h b/src/memberdef.h
index a0d15b7..44fac2d 100644
--- a/src/memberdef.h
+++ b/src/memberdef.h
@@ -196,10 +196,6 @@ class MemberDef : public Definition
argList = al;
}
ArgumentList *templateArguments() const { return tArgList; }
- //void setScopeDefTemplateArguments(ArgumentList *t);
- //ArgumentList *scopeDefTemplateArguments() const { return scopeTAL; }
- //void setMemberDefTemplateArguments(ArgumentList *t);
- //ArgumentList *memberDefTemplateArguments() const { return membTAL; }
void setDefinitionTemplateParameterLists(QList<ArgumentList> *lists);
QList<ArgumentList> *definitionTemplateParameterLists() const
{ return m_defTmpArgLists; }
diff --git a/src/membergroup.h b/src/membergroup.h
index c67f960..b1dce56 100644
--- a/src/membergroup.h
+++ b/src/membergroup.h
@@ -91,13 +91,6 @@ class MemberGroupListIterator : public QListIterator<MemberGroup>
QListIterator<MemberGroup>(l) {}
};
-class MemberGroupDict : public QIntDict<MemberGroup>
-{
- public:
- MemberGroupDict(int size) : QIntDict<MemberGroup>(size) {}
- ~MemberGroupDict() {}
-};
-
class MemberGroupSDict : public SIntDict<MemberGroup>
{
public:
@@ -105,12 +98,19 @@ class MemberGroupSDict : public SIntDict<MemberGroup>
~MemberGroupSDict() {}
};
-class MemberGroupDictIterator : public QIntDictIterator<MemberGroup>
-{
- public:
- MemberGroupDictIterator(const MemberGroupDict &d) :
- QIntDictIterator<MemberGroup>(d) {}
- ~MemberGroupDictIterator() {}
-};
+//class MemberGroupDict : public QIntDict<MemberGroup>
+//{
+// public:
+// MemberGroupDict(int size) : QIntDict<MemberGroup>(size) {}
+// ~MemberGroupDict() {}
+//};
+
+//class MemberGroupDictIterator : public QIntDictIterator<MemberGroup>
+//{
+// public:
+// MemberGroupDictIterator(const MemberGroupDict &d) :
+// QIntDictIterator<MemberGroup>(d) {}
+// ~MemberGroupDictIterator() {}
+//};
#endif
diff --git a/src/namespacedef.h b/src/namespacedef.h
index 93ade90..0e3b510 100644
--- a/src/namespacedef.h
+++ b/src/namespacedef.h
@@ -147,7 +147,7 @@ class NamespaceDict : public QDict<NamespaceDef>
class NamespaceSDict : public SDict<NamespaceDef>
{
public:
- NamespaceSDict(int size) : SDict<NamespaceDef>(size) {}
+ NamespaceSDict(int size=17) : SDict<NamespaceDef>(size) {}
~NamespaceSDict() {}
int compareItems(GCI item1,GCI item2)
{
diff --git a/src/outputgen.h b/src/outputgen.h
index 1e8e509..1e061e6 100644
--- a/src/outputgen.h
+++ b/src/outputgen.h
@@ -272,7 +272,7 @@ class BaseOutputDocInterface
class OutputGenerator : public BaseOutputDocInterface
{
public:
- enum OutputType { Html, Latex, Man, RTF, XML };
+ enum OutputType { Html, Latex, Man, RTF, XML, DEF };
OutputGenerator();
virtual ~OutputGenerator();
diff --git a/src/pre.l b/src/pre.l
index 2ddb120..8586270 100644
--- a/src/pre.l
+++ b/src/pre.l
@@ -832,6 +832,8 @@ Define *newDefine()
void addDefine()
{
//printf("addDefine %s %s\n",g_defName.data(),g_defArgsStr.data());
+ //ArgumentList *al = new ArgumentList;
+ //stringToArgumentList(g_defArgsStr,al);
MemberDef *md=new MemberDef(
g_yyFileName,g_yyLineNr,
"#define",g_defName,g_defArgsStr,0,
diff --git a/src/scanner.l b/src/scanner.l
index 04bb08f..5615224 100644
--- a/src/scanner.l
+++ b/src/scanner.l
@@ -76,6 +76,7 @@ static int lastInitializerContext;
static int lastClassTemplSpecContext;
static int lastSkipHtmlCommentContext;
static int lastIfContext;
+static int lastInternalDocContext;
static int nextDefContext;
static int overloadContext;
static Protection protection;
@@ -135,7 +136,7 @@ static QCString *copyArgString;
static QCString fullArgString;
static ArgumentList *currentArgumentList;
-static QCString *currentTemplateSpec;
+//static QCString *currentTemplateSpec;
static char lastCopyArgChar;
static QCString *pCopyRoundString;
static QCString *pCopyCurlyString;
@@ -525,6 +526,8 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
%x ClassDocBrief
%x ClassDocOverload
%x ClassDefineArgs
+%x DocInternal
+%x DocInternalLine
%x DocBaseClass
%x CppQuote
%x EndCppQuote
@@ -1034,15 +1037,10 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
sharpCount=0;
lineCount();
addType( current );
- //if (current->mtArgList && current->tArgList==0)
- //{
- // current->tArgList=current->mtArgList;
- // current->mtArgList=0;
- //}
current->name=yytext;
current->name=current->name.stripWhiteSpace();
- current->scopeSpec.resize(0);
- currentTemplateSpec = &current->scopeSpec;
+ //current->scopeSpec.resize(0);
+ // currentTemplateSpec = &current->scopeSpec;
if (nameIsOperator(current->name))
BEGIN( Operator );
else
@@ -1052,8 +1050,8 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
sharpCount=0;
lineCount();
current->name+=((QCString)yytext).stripWhiteSpace();
- current->memberSpec.resize(0);
- currentTemplateSpec = &current->memberSpec;
+ //current->memberSpec.resize(0);
+ // currentTemplateSpec = &current->memberSpec;
if (nameIsOperator(current->name))
BEGIN( Operator );
else
@@ -1061,20 +1059,20 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
}
<EndTemplate>"<<" {
current->name+=yytext;
- *currentTemplateSpec+=yytext;
+ // *currentTemplateSpec+=yytext;
}
<EndTemplate>"<" {
current->name+='<';
- *currentTemplateSpec+='<';
+ // *currentTemplateSpec+='<';
sharpCount++;
}
<EndTemplate>">>" {
current->name+=yytext;
- *currentTemplateSpec+=yytext;
+ // *currentTemplateSpec+=yytext;
}
<EndTemplate>">" {
current->name+='>';
- *currentTemplateSpec+='>';
+ // *currentTemplateSpec+='>';
if (--sharpCount<=0)
{
//printf("Found %s\n",current->name.data());
@@ -1084,7 +1082,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
<EndTemplate>">"{BN}*"(" {
lineCount();
current->name+='>';
- *currentTemplateSpec+='>';
+ // *currentTemplateSpec+='>';
if (--sharpCount<=0)
{
current->args = "(";
@@ -1098,7 +1096,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
<EndTemplate>">"{BN}*/"::" {
lineCount();
current->name+='>';
- *currentTemplateSpec+='>';
+ // *currentTemplateSpec+='>';
if (--sharpCount<=0)
{
BEGIN(FindMemberName);
@@ -1106,7 +1104,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
}
<EndTemplate>. {
current->name+=*yytext;
- *currentTemplateSpec+=*yytext;
+ // *currentTemplateSpec+=*yytext;
}
<FindMembers,FindMemberName>{SCOPENAME} {
lineCount();
@@ -1203,11 +1201,17 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
<SkipCPP>[\r]*\n[\r]* { yyLineNr++ ;
BEGIN( lastCPPContext) ;
}
-<Define>{ID}/"(" {
- current->bodyLine = yyLineNr;
+<Define>{ID}{B}*"(" {
current->name = yytext;
- BEGIN( DefineArg );
+ current->name = current->name.left(current->name.length()-1).stripWhiteSpace();
+ current->args = "(";
+ current->bodyLine = yyLineNr;
+ currentArgumentContext = DefineEnd;
+ fullArgString=current->args.copy();
+ copyArgString=&current->args;
+ BEGIN( ReadFuncArgType ) ;
}
+ /*
<DefineArg>")" {
//printf("Define with args\n");
current->args += ')';
@@ -1216,6 +1220,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
<DefineArg>. {
current->args += *yytext;
}
+ */
<Define>{ID} {
//printf("Define `%s' without args\n",yytext);
current->bodyLine = yyLineNr;
@@ -2849,21 +2854,21 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
current->section = Entry::GROUPDOC_SEC;
current->fileName = yyFileName;
current->startLine = yyLineNr;
- current->groupdoctype = Entry::GROUPDOC_NORMAL;
+ current->groupDocType = Entry::GROUPDOC_NORMAL;
BEGIN( GroupDocArg1 );
}
<Doc,JavaDoc>{B}*{CMD}"addtogroup"{B}+ {
current->section = Entry::GROUPDOC_SEC;
current->fileName = yyFileName;
current->startLine = yyLineNr;
- current->groupdoctype = Entry::GROUPDOC_ADD;
+ current->groupDocType = Entry::GROUPDOC_ADD;
BEGIN( GroupDocArg1 );
}
<Doc,JavaDoc>{B}*{CMD}"weakgroup"{B}+ {
current->section = Entry::GROUPDOC_SEC;
current->fileName = yyFileName;
current->startLine = yyLineNr;
- current->groupdoctype = Entry::GROUPDOC_WEAK;
+ current->groupDocType = Entry::GROUPDOC_WEAK;
BEGIN( GroupDocArg1 );
}
<Doc,JavaDoc>{B}*{CMD}"namespace"{B}+ {
@@ -3139,7 +3144,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
<GroupDocArg1>{ID}(".html"?) {
current->name = yytext;
lastDefGroup.groupname = yytext;
- lastDefGroup.pri = current->groupingpri();
+ lastDefGroup.pri = current->groupingPri();
// the .html stuff is for Qt compatibility
if (current->name.right(5)==".html")
current->name=current->name.left(current->name.length()-5);
@@ -3149,7 +3154,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
<GroupDocArg1>"\n" {
warn(yyFileName,yyLineNr,
"Warning: missing group name after %s",
- current->groupdoccmd()
+ current->groupDocCmd()
);
yyLineNr++;
BEGIN( Doc );
@@ -3165,7 +3170,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
current->type = current->type.stripWhiteSpace();
}
<GroupDocArg2>"\n" {
- if( current->groupdoctype == Entry::GROUPDOC_NORMAL &&
+ if( current->groupDocType == Entry::GROUPDOC_NORMAL &&
current->type.length() == 0 )
warn(yyFileName,yyLineNr,
"Warning: missing title after "
@@ -3417,7 +3422,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
if (current->section==Entry::GROUPDOC_SEC )
{
autoGroupStack.push(new Grouping(current->name,
- current->groupingpri()
+ current->groupingPri()
));
}
else if (current->section == Entry::MEMBERGRP_SEC)
@@ -3899,12 +3904,42 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
BEGIN(lastAfterDocContext);
}
<AfterDocBrief>"."/{BN} { BEGIN(AfterDoc); }
-<LineDoc,AfterDocBrief,AfterDocLine>{CMD}"internal" {
- current->brief+="\\internal";
+<LineDoc,AfterDocLine>{CMD}"internal" {
+ if (!Config_getBool("INTERNAL_DOCS"))
+ {
+ lastInternalDocContext = YY_START;
+ BEGIN( DocInternalLine );
+ }
+ else
+ {
+ current->doc+="\\internal";
+ }
}
-<Doc,AfterDoc>{CMD}"internal" {
- current->doc+="\\internal";
+<Doc,JavaDoc,ExampleDoc,PageDoc,ClassDoc,AfterDoc>{CMD}"internal" {
+ if (!Config_getBool("INTERNAL_DOCS"))
+ {
+ lastInternalDocContext = YY_START;
+ BEGIN( DocInternal );
+ }
+ else
+ {
+ current->doc+="\\internal";
+ }
}
+<DocInternal>.
+<DocInternal>\n { yyLineNr++; }
+<DocInternal>"/*"|"//"
+<DocInternal>"*/" {
+ unput('/');
+ unput('*');
+ BEGIN( lastInternalDocContext );
+ }
+<DocInternalLine>.
+<DocInternalLine>\n {
+ yyLineNr++;
+ unput('\n');
+ BEGIN( lastInternalDocContext );
+ }
<AfterDoc>{CMD}"brief" { BEGIN(AfterDocBrief); }
<AfterDoc>"/*"|"//" { current->doc+=yytext; }
<AfterDoc>^{B}*"*"+/[^/]
diff --git a/src/translator_de.h b/src/translator_de.h
index aacd20e..8df6c33 100644
--- a/src/translator_de.h
+++ b/src/translator_de.h
@@ -27,7 +27,7 @@
// - changed trPageDocumentation() "Seitenbeschreibung" to
// "Zustzliche Informationen"
// - removed old trGeneratedFrom()
-// - changed "/*!" to "/*" (documentation is inherited from translator.h
+// - changed "/*!" to "/*" (documentation is inherited from translator_en.h
// (INHERIT_DOCS = YES), there's no need to make changes twice)
// - Update for "new since 1.2.4" version
//
@@ -52,20 +52,21 @@
// 2001/07/24 Jens Seidel (jensseidel@users.sourceforge.net)
// - trClassDocumentation() updated as in the English translator.
//
-// Todo:
+// 2001/11/30 Oliver Brandt (o.brandt@tu-bs.de) and
+// Jens Seidel (jensseidel@users.sourceforge.net)
+// - trReferences() implemented.
+// - trCompoundReference(), trLegendDocs() updated
+// - Removed some TODO's
+//
+// Todo:
// - translation of all Config_getBool("OPTIMIZE_OUTPUT_FOR_C")
// strings (see translator_en.h)
-// - translation of "compound"
// - see FIXME
-// - was ist richtig: "Liste aller dokumentierter Elemente" oder
-// "Liste aller dokumentierten Elemente" (aktuell)
-// (nach "aller" suchen)
-// "Mithilfe" oder "Mit Hilfe"
#ifndef TRANSLATOR_DE_H
#define TRANSLATOR_DE_H
-class TranslatorGerman : public TranslatorAdapter_1_2_11
+class TranslatorGerman : public Translator
{
public:
@@ -180,7 +181,16 @@ class TranslatorGerman : public TranslatorAdapter_1_2_11
/* This is put above each page as a link to the list of annotated classes */
virtual QCString trCompoundList()
- { return "bersicht"; }
+ {
+ if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
+ {
+ return "Datenstrukturen";
+ }
+ else
+ {
+ return "bersicht";
+ }
+ }
/* This is put above each page as a link to the list of documented files */
virtual QCString trFileList()
@@ -192,7 +202,16 @@ class TranslatorGerman : public TranslatorAdapter_1_2_11
/* This is put above each page as a link to all members of compounds. */
virtual QCString trCompoundMembers()
- { return "Elementbersicht"; }
+ {
+ if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
+ {
+ return "Datenstruktur-Elemente";
+ }
+ else
+ {
+ return "Datenstruktur-Elemente";
+ }
+ }
/* This is put above each page as a link to all members of files. */
virtual QCString trFileMembers()
@@ -232,8 +251,8 @@ class TranslatorGerman : public TranslatorAdapter_1_2_11
return "Hier folgt die Aufzhlung aller Datenstrukturen "
"mit einer Kurzbeschreibung:";
else
- return "Hier folgt die Aufzhlung aller Klassen, Strukturen "
- "und Varianten mit einer Kurzbeschreibung:"; // FIXME: "interfaces" = ??
+ return "Hier folgt die Aufzhlung aller Klassen, Strukturen, "
+ "Varianten und Schnittstellen mit einer Kurzbeschreibung:";
}
/* This is an introduction to the page with all class members. */
@@ -247,7 +266,7 @@ class TranslatorGerman : public TranslatorAdapter_1_2_11
result+="Klassenelemente mit Verweisen auf ";
if (extractAll) {
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- result+="die struct/union Dokumentation zu jedem Element:";
+ result+="die Dokumentation zu jedem Element:";
else
result+="die Klassendokumentation zu jedem Element:";
} else {
@@ -264,8 +283,15 @@ class TranslatorGerman : public TranslatorAdapter_1_2_11
{
QCString result="Hier folgt die Aufzhlung aller ";
if (!extractAll) result+="dokumentierten ";
- result+="Dateielemente mit Verweisen auf ";
- if (extractAll) result+="die Dateidokumentation zu jedem Element:";
+ if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
+ {
+ result+="Funktionen, Variablen, Makros, Aufzhlungen und Typendefinitionen mit Verweisen auf ";
+ }
+ else
+ {
+ result+="Dateielemente mit Verweisen auf ";
+ }
+ if (extractAll) result+="die Dokumentation zu jedem Element:";
else result+="die zugehrigen Dateien:";
return result;
}
@@ -314,11 +340,11 @@ class TranslatorGerman : public TranslatorAdapter_1_2_11
* annotated compound index.
*/
virtual QCString trCompoundIndex()
- {
+ {
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- return "Datenstruktur-Verzeichnis";
+ return "Datenstruktur-Verzeichnis";
else
- return "Datenstruktur-Verzeichnis"; // FIXME: war compound
+ return "Datenstruktur-Verzeichnis";
}
/* This is used in LaTeX as the title of the chapter with the
@@ -454,7 +480,16 @@ class TranslatorGerman : public TranslatorAdapter_1_2_11
* the list of links to documented compounds
*/
virtual QCString trCompounds()
- { return "bersicht"; }
+ {
+ if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
+ {
+ return "Datenstrukturen";
+ }
+ else
+ {
+ return "bersicht";
+ }
+ }
/* This is used in the standard footer of each page and indicates when
* the page was generated
@@ -565,16 +600,17 @@ class TranslatorGerman : public TranslatorAdapter_1_2_11
/* used as the title of the HTML page of a class/struct/union */
virtual QCString trCompoundReference(const char *clName,
ClassDef::CompoundType compType,
- bool /*isTemplate*/) // FIXME
+ bool isTemplate)
{
QCString result=(QCString)clName+" ";
+ if (isTemplate) result+="Template ";
switch(compType)
{
- case ClassDef::Class: result+=" Klassen"; break;
- case ClassDef::Struct: result+=" Strukturen"; break;
- case ClassDef::Union: result+=" Varianten"; break;
- case ClassDef::Interface: result+=" Interface"; break;
- case ClassDef::Exception: result+=" Exception"; break;
+ case ClassDef::Class: result+="Klassen"; break;
+ case ClassDef::Struct: result+="Struktur"; break;
+ case ClassDef::Union: result+="Varianten"; break;
+ case ClassDef::Interface: result+="Schnittstellen"; break;
+ case ClassDef::Exception: result+="Ausnahmen"; break;
}
result+="referenz";
return result;
@@ -742,7 +778,7 @@ class TranslatorGerman : public TranslatorAdapter_1_2_11
case ClassDef::Class: result+=" Klasse"; break;
case ClassDef::Struct: result+=" Struktur"; break;
case ClassDef::Union: result+=" Variante"; break;
- case ClassDef::Interface: result+="s Interface"; break;
+ case ClassDef::Interface: result+=" Schnittstelle"; break;
case ClassDef::Exception: result+=" Ausnahme"; break;
}
result+=" wurde erzeugt aufgrund der Datei";
@@ -904,7 +940,14 @@ class TranslatorGerman : public TranslatorAdapter_1_2_11
virtual QCString trPublicAttribs()
{
- return "ffentliche Attribute";
+ if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
+ {
+ return "Datenfelder";
+ }
+ else
+ {
+ return "ffentliche Attribute";
+ }
}
virtual QCString trStaticPublicAttribs()
@@ -1015,6 +1058,8 @@ class TranslatorGerman : public TranslatorAdapter_1_2_11
"class Undocumented { };\n\n"
"/*! Mithilfe ffentlicher Vererbung vererbte Klasse */\n"
"class PublicBase : public Truncated { };\n\n"
+ "/*! Eine Template Klasse */\n"
+ "template<class T> class Templ { };\n\n"
"/*! Mithilfe geschtzter Vererbung vererbte Klasse */\n"
"class ProtectedBase { };\n\n"
"/*! Mithilfe privater Vererbung vererbte Klasse */\n"
@@ -1026,13 +1071,14 @@ class TranslatorGerman : public TranslatorAdapter_1_2_11
" protected ProtectedBase,\n"
" private PrivateBase,\n"
" public Undocumented\n"
+ " public Templ<int>\n"
"{\n"
" private:\n"
" Used *m_usedClass;\n"
"};\n"
- "\\endcode\n"
+ "\\endcode\n\n"
"Setzen des Tags \\c MAX_DOT_GRAPH_HEIGHT in der Konfigurationsdatei "
- "auf 200 liefert den folgenden Graphen:"
+ "auf 240 liefert den folgenden Graphen:"
"<p><center><img src=\"graph_legend.gif\"></center>\n"
"<p>\n"
"Die Rechtecke in obigem Graphen bedeuten:\n"
@@ -1046,7 +1092,7 @@ class TranslatorGerman : public TranslatorAdapter_1_2_11
"<li>Ein Rechteck mit rotem Rahmen kennzeichnet eine dokumentierte "
"Struktur oder Klasse, fr die nicht alle Vererbungs-/"
"Enthaltenseinsbeziehungen dargestellt werden. Ein Graph wird gekrzt, "
- "wenn er nicht in die angegebenen Schranken passt."
+ "wenn er nicht in die angegebenen Schranken passt.\n"
"</ul>\n"
"Die Pfeile bedeuten:\n"
"<ul>\n"
@@ -1054,10 +1100,13 @@ class TranslatorGerman : public TranslatorAdapter_1_2_11
"zwischen zwei Klassen dar.\n"
"<li>Ein dunkelgrner Pfeil stellt geschtzte Vererbung dar.\n"
"<li>Ein dunkelroter Pfeil stellt private Vererbung dar.\n"
- "<li>Ein gestrichelter violetter Pfeil bedeutet, dass eine Klasse in einer "
- "anderen enthalten ist oder von einer anderen benutzt wird. Am Pfeil "
- "stehen die Variable(n), mit deren Hilfe auf die Struktur oder Klasse "
- "an der Pfeilspitze zugegriffen werden kann.\n"
+ "<li>Ein gestrichelter violetter Pfeil bedeutet, dass eine Klasse in "
+ "einer anderen enthalten ist oder von einer anderen benutzt wird. Am "
+ "Pfeil stehen die Variable(n), mit deren Hilfe auf die Struktur oder "
+ "Klasse an der Pfeilspitze zugegriffen werden kann.\n"
+ "<li>Ein gestrichelter gelber Pfeil kennzeichnet eine Verknpfung "
+ "zwischen einer Template Instanz und der Template Klasse von welcher "
+ "es abstammt. Neben dem Pfeil sind die Template Parameter aufgefhrt.\n"
"</ul>\n";
}
@@ -1171,13 +1220,13 @@ class TranslatorGerman : public TranslatorAdapter_1_2_11
/* Used as a marker that is put before a \bug item */
virtual QCString trBug()
{
- return "Bug";
+ return "Fehler";
}
/* Used as the header of the bug list */
virtual QCString trBugList()
{
- return "Bug Liste";
+ return "Liste der bekannten Fehler";
}
//////////////////////////////////////////////////////////////////////////
@@ -1280,7 +1329,7 @@ class TranslatorGerman : public TranslatorAdapter_1_2_11
*/
virtual QCString trField(bool, bool singular)
{
- QCString result("Feld"); // FIXME
+ QCString result("Feld");
if (!singular) result+="er";
return result;
}
@@ -1309,7 +1358,17 @@ class TranslatorGerman : public TranslatorAdapter_1_2_11
if (!singular) result+="en";
return result;
}
-
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.2.11
+//////////////////////////////////////////////////////////////////////////
+
+ /* This text is put before the list of members referenced by a member
+ */
+ virtual QCString trReferences()
+ {
+ return "Benutzt";
+ }
};
#endif
diff --git a/src/translator_pt.h b/src/translator_pt.h
index 4f3ffa8..05ade1a 100644
--- a/src/translator_pt.h
+++ b/src/translator_pt.h
@@ -18,6 +18,8 @@
*
* VERSION HISTORY
* ---------------
+ * 003 23 november 2001
+ * - Removed some obsolete methods (latexBabelPackage, trAuthor, trAuthors and trFiles)
* 002 19 november 2001
* ! Updated for doxygen v1.2.12
* 001 20 july 2001
@@ -61,10 +63,6 @@ class TranslatorPortuguese : public Translator
virtual QCString latexLanguageSupportCommand()
{ return "Portuguese"; }
- /*! returns the name of the package that is included by LaTeX */
- QCString latexBabelPackage()
- { return "portuguese"; }
-
/*! return the language charset. This will be used for the HTML output */
virtual QCString idLanguageCharset()
{ return "iso-8859-1"; }
@@ -449,10 +447,6 @@ class TranslatorPortuguese : public Translator
QCString trEnumerationValues()
{ return "Valores da enumerao"; }
- /*! This is used in man pages as the author section. */
- QCString trAuthor()
- { return "Autor"; }
-
/*! This is used in the documentation of a file before the list of
* documentation blocks for defines
*/
@@ -510,12 +504,6 @@ class TranslatorPortuguese : public Translator
}
}
- /*! This is used in the documentation of a group before the list of
- * links to documented files
- */
- QCString trFiles()
- { return "Ficheiros"; }
-
/*! This is used in the standard footer of each page and indicates when
* the page was generated
*/
@@ -564,10 +552,6 @@ class TranslatorPortuguese : public Translator
QCString trDate()
{ return "Data"; }
- /*! this text is generated when the \\author command is used. */
- QCString trAuthors()
- { return "Autor(es)"; }
-
/*! this text is generated when the \\return command is used. */
QCString trReturns()
{ return "Retorna"; }
diff --git a/src/util.cpp b/src/util.cpp
index 0baf3f7..4381c54 100644
--- a/src/util.cpp
+++ b/src/util.cpp
@@ -842,7 +842,7 @@ QCString argListToString(ArgumentList *al)
QCString tempArgListToString(ArgumentList *al)
{
QCString result;
- if (!al || al->count()==0) return result;
+ if (al==0) return result;
result="<";
Argument *a=al->first();
while (a)
diff --git a/src/xmlgen.cpp b/src/xmlgen.cpp
index 0c3a5da..9ab3e33 100644
--- a/src/xmlgen.cpp
+++ b/src/xmlgen.cpp
@@ -30,6 +30,8 @@
#include "doc.h"
#include "dot.h"
#include "code.h"
+#include "page.h"
+#include "filename.h"
#include <qdir.h>
#include <qfile.h>
@@ -164,6 +166,7 @@ template<class T> class ValStack
* Its methods are called when some XML text or markup
* needs to be written.
*/
+// TODO: htmlonly, latexonly
class XMLGenerator : public OutputDocInterface
{
public:
@@ -228,7 +231,8 @@ class XMLGenerator : public OutputDocInterface
void writeString(const char *text)
{
startParMode();
- m_t << text;
+ //m_t << text;
+ docify(text);
}
void startItemList()
{
@@ -823,6 +827,8 @@ static void generateXMLForMember(MemberDef *md,QTextStream &t,Definition *def)
// + source references
// + source referenced by
// - body code
+ // - template arguments
+ // (templateArguments(), definitionTemplateParameterLists())
if (md->memberType()==MemberDef::EnumValue) return;
@@ -1115,11 +1121,11 @@ static void generateXMLForClass(ClassDef *cd,QTextStream &t)
// + detailed description
// - template arguments
// - include file
- // - member groups
+ // + member groups
// + inheritance diagram
// + list of direct super classes
// + list of direct sub classes
- // - list of inner classes
+ // + list of inner classes
// + collaboration diagram
// - list of all members
// + user defined member sections
@@ -1188,6 +1194,17 @@ static void generateXMLForClass(ClassDef *cd,QTextStream &t)
}
}
+ ClassSDict *cl = cd->getInnerClasses();
+ if (cl)
+ {
+ ClassSDict::Iterator cli(*cl);
+ ClassDef *cd;
+ for (cli.toFirst();(cd=cli.current());++cli)
+ {
+ t << " <innerclass refid=\"" << cd->getOutputFileBase()
+ << "\">" << convertToXML(cd->name()) << "</innerclass>" << endl;
+ }
+ }
MemberGroupSDict::Iterator mgli(*cd->memberGroupSDict);
MemberGroup *mg;
for (;(mg=mgli.current());++mgli)
@@ -1247,9 +1264,9 @@ static void generateXMLForClass(ClassDef *cd,QTextStream &t)
static void generateXMLForNamespace(NamespaceDef *nd,QTextStream &t)
{
- // - contained class definitions
- // - contained namespace definitions
- // - member groups
+ // + contained class definitions
+ // + contained namespace definitions
+ // + member groups
// + normal members
// + brief desc
// + detailed desc
@@ -1263,6 +1280,28 @@ static void generateXMLForNamespace(NamespaceDef *nd,QTextStream &t)
writeXMLString(t,nd->name());
t << "</compoundname>" << endl;
+ ClassSDict *cl = nd->classSDict;
+ if (cl)
+ {
+ ClassSDict::Iterator cli(*cl);
+ ClassDef *cd;
+ for (cli.toFirst();(cd=cli.current());++cli)
+ {
+ t << " <innerclass refid=\"" << cd->getOutputFileBase()
+ << "\">" << convertToXML(cd->name()) << "</innerclass>" << endl;
+ }
+ }
+ NamespaceSDict *nl = nd->namespaceSDict;
+ if (nl)
+ {
+ NamespaceSDict::Iterator nli(*nl);
+ NamespaceDef *nd;
+ for (nli.toFirst();(nd=nli.current());++nli)
+ {
+ t << " <innernamespace refid=\"" << nd->getOutputFileBase()
+ << "\">" << convertToXML(nd->name()) << "</innernamespace>" << endl;
+ }
+ }
MemberGroupSDict::Iterator mgli(*nd->memberGroupSDict);
MemberGroup *mg;
for (;(mg=mgli.current());++mgli)
@@ -1295,9 +1334,9 @@ static void generateXMLForFile(FileDef *fd,QTextStream &t)
// + includedby files
// + include graph
// + included by graph
- // - contained class definitions
- // - contained namespace definitions
- // - member groups
+ // + contained class definitions
+ // + contained namespace definitions
+ // + member groups
// + normal members
// + brief desc
// + detailed desc
@@ -1356,6 +1395,29 @@ static void generateXMLForFile(FileDef *fd,QTextStream &t)
t << " </invincdepgraph>" << endl;
}
+ ClassSDict *cl = fd->classSDict;
+ if (cl)
+ {
+ ClassSDict::Iterator cli(*cl);
+ ClassDef *cd;
+ for (cli.toFirst();(cd=cli.current());++cli)
+ {
+ t << " <innerclass refid=\"" << cd->getOutputFileBase()
+ << "\">" << convertToXML(cd->name()) << "</innerclass>" << endl;
+ }
+ }
+ NamespaceSDict *nl = fd->namespaceSDict;
+ if (nl)
+ {
+ NamespaceSDict::Iterator nli(*nl);
+ NamespaceDef *nd;
+ for (nli.toFirst();(nd=nli.current());++nli)
+ {
+ t << " <innernamespace refid=\"" << nd->getOutputFileBase()
+ << "\">" << convertToXML(nd->name()) << "</innernamespace>" << endl;
+ }
+ }
+
MemberGroupSDict::Iterator mgli(*fd->memberGroupSDict);
MemberGroup *mg;
for (;(mg=mgli.current());++mgli)
@@ -1383,6 +1445,113 @@ static void generateXMLForFile(FileDef *fd,QTextStream &t)
t << " </compounddef>" << endl;
}
+static void generateXMLForGroup(GroupDef *gd,QTextStream &t)
+{
+ // + members
+ // + member groups
+ // + files
+ // + classes
+ // + namespaces
+ // - packages
+ // + pages
+ // + child groups
+ // - examples
+ // + brief description
+ // + detailed description
+
+ t << " <compounddef id=\""
+ << gd->getOutputFileBase() << "\" kind=\"group\">" << endl;
+ t << " <name>" << convertToXML(gd->name()) << "</name>" << endl;
+ t << " <title>" << convertToXML(gd->groupTitle()) << "</title>" << endl;
+
+ FileList *fl = gd->getFiles();
+ if (fl)
+ {
+ QListIterator<FileDef> fli(*fl);
+ FileDef *fd = fl->first();
+ for (fli.toFirst();(fd=fli.current());++fli)
+ {
+ t << " <innerfile refid=\"" << fd->getOutputFileBase()
+ << "\">" << convertToXML(fd->name()) << "</innerfile>" << endl;
+ }
+ }
+ ClassSDict *cl = gd->getClasses();
+ if (cl)
+ {
+ ClassSDict::Iterator cli(*cl);
+ ClassDef *cd;
+ for (cli.toFirst();(cd=cli.current());++cli)
+ {
+ t << " <innerclass refid=\"" << cd->getOutputFileBase()
+ << "\">" << convertToXML(cd->name()) << "</innerclass>" << endl;
+ }
+ }
+ NamespaceList *nl = gd->getNamespaces();
+ if (nl)
+ {
+ NamespaceListIterator nli(*nl);
+ NamespaceDef *nd;
+ for (nli.toFirst();(nd=nli.current());++nli)
+ {
+ t << " <innernamespace refid=\"" << nd->getOutputFileBase()
+ << "\">" << convertToXML(nd->name()) << "</innernamespace>" << endl;
+ }
+ }
+ PageSDict *pl = gd->getPages();
+ if (pl)
+ {
+ PageSDict::Iterator pli(*pl);
+ PageInfo *pi;
+ for (pli.toFirst();(pi=pli.current());++pli)
+ {
+ t << " <innerpage refid=\"" << pi->getOutputFileBase()
+ << "\"/>" << convertToXML(pi->title) << "</innerpage>" << endl;
+ }
+ }
+
+ MemberGroupSDict::Iterator mgli(*gd->memberGroupSDict);
+ MemberGroup *mg;
+ for (;(mg=mgli.current());++mgli)
+ {
+ generateXMLSection(gd,t,mg->members(),"user-defined",mg->header());
+ }
+
+ generateXMLSection(gd,t,&gd->decDefineMembers,"define");
+ generateXMLSection(gd,t,&gd->decProtoMembers,"prototype");
+ generateXMLSection(gd,t,&gd->decTypedefMembers,"typedef");
+ generateXMLSection(gd,t,&gd->decEnumMembers,"enum");
+ generateXMLSection(gd,t,&gd->decFuncMembers,"func");
+ generateXMLSection(gd,t,&gd->decVarMembers,"var");
+
+ t << " <briefdescription>" << endl;
+ writeXMLDocBlock(t,gd->getDefFileName(),gd->getDefLine(),0,0,gd->briefDescription());
+ t << " </briefdescription>" << endl;
+ t << " <detaileddescription>" << endl;
+ writeXMLDocBlock(t,gd->getDefFileName(),gd->getDefLine(),0,0,gd->documentation());
+ t << " </detaileddescription>" << endl;
+ t << " </compounddef>" << endl;
+}
+
+static void generateXMLForPage(PageInfo *pi,QTextStream &t)
+{
+ // + name
+ // + title
+ // + documentation
+
+ t << " <compounddef id=\"";
+ if (Config_getBool("CASE_SENSE_NAMES")) t << pi->name; else t << pi->name.lower();
+ t << "\">" << endl;
+ t << " <name>" << pi->name << "</name>" << endl;
+ SectionInfo *si = Doxygen::sectionDict.find(pi->name);
+ if (si)
+ {
+ t << " <title>" << si->title << "</title>" << endl;
+ }
+ t << " <detaileddescription>" << endl;
+ writeXMLDocBlock(t,pi->defFileName,pi->defLine,0,0,pi->doc);
+ t << " </detaileddescription>" << endl;
+ t << " </compounddef>" << endl;
+}
void generateXML()
{
@@ -1391,8 +1560,9 @@ void generateXML()
// + namespaces
// + files
// - packages
- // - groups
- // - related pages
+ // + groups
+ // + related pages
+ // - examples
QCString outputDirectory = Config_getString("OUTPUT_DIRECTORY");
if (outputDirectory.isEmpty())
@@ -1475,6 +1645,19 @@ void generateXML()
generateXMLForFile(fd,t);
}
}
+ GroupSDict::Iterator gli(Doxygen::groupSDict);
+ GroupDef *gd;
+ for (;(gd=gli.current());++gli)
+ {
+ generateXMLForGroup(gd,t);
+ }
+ PageSDict::Iterator pdi(*Doxygen::pageSDict);
+ PageInfo *pi=0;
+ for (pdi.toFirst();(pi=pdi.current());++pdi)
+ {
+ generateXMLForPage(pi,t);
+ }
+
//t << " </compoundlist>" << endl;
}
t << "</doxygen>" << endl;
 5 Ui88RcXV=(l2-RHR4Ph[(iP dA*r ( 7 3N.8r2 \ԍZ0+tH`" !Y.ŠYqRc&G[֌)Р1KpHTnC*R 0n!S mkN "X tP EΒeInH–ac[ ŷ-t1u#cZCMf24v̚mN0HA+,(*wv42 2ԁ@(qA!Hg34ddž7vs#,ޚ^N  ]-Dbaiœ~&@M!Cjκ(C:.m}P c$T\``Rl(PLUÉpA. S6]qzbf< .JJLCt܌.6 oX ;HU7Mè5vYF&%HGV2W'sǚ6<8ш\B=S %Аċgd0ÀTNG 0 0u36Ul>ws}߿H ,jJQakrBL\T̻ SǗD3nQpuD5,lDk@k]^G`pf  ɠ D1!֚ZR B ‚SCϐgJ:ҝJ=ju$O!iJ", Y!UXbI7>xa4T ]7G+!T2Nq@r #S7ShZ7/yqkW%z|4[rA|4PR&{/`kNG@ieQ D@%3kDZVu!ӅcEeF ]hiB42bWaR5)X$H:寉>r{QU\q/|Y62H!UwvEg",R%jiB=G-9~BY8sϣ% 7_aGU`C{ ?0~@mC>LB><: 36hMZ1֕{y4x((<;݆g`tшgH% ?/&["k̕rDcx $Şl{*"J K V!B\Wa gpl labb/H@*Y ֽ?f>US~ucuS|bb"H %ȟKs 00ðD&ᙘmvb I}߃Ink+؃܀Y|Z>+&\&.Α>oEr T+m)<?!Mr%[&;Ǎba\[tS.|T[W ѳQ ,Nɗ\s̜\̤kf8L!^ZU>}7hHX@)˭Spfu;f9zQ !e9S|4'2eZl 4kJ8`&i%V5ڙV%H V׮G8_}/\m,_C‚ԳECyt&,/so=; omEէ7ɄѠ2cERB{珏s!Y[(лF=%1{8)PY78KrOfa?۟չ[=6Pa2I߂l鯝Q|Df1YVjlTWDyyxzIjˌ޸5-kҶ?6V5D/Ps)ⳁHʓmp11tq[/ ,:ݶǻ @UP<+[Ry[F5:L2{eq EgɨTe4\ 4r0Iҍ+kƀ # e@fP,3uFR*ә6Hl3hͭ-]/JzzwmAzy㏶AP) <ș9$1TղfQ5mDžQӭ*Tt*_l:`80TYF`ɝÓȚ hJ7rr6SzMW)J1,,/nWA,B襁ڔ:# c^u5`Cڨ啮JLc`l|!k&4<<8сn3ы aLXQz Yb0D"\leoÏac.!&N<# 4+'bCkFch5 0pu3gaJ÷3ѤJ"UL3dGA4æFZlGtw }<8O"â9*Q`GUVwbZz# hOx1Cb&\v@߱ 5)"e:#=<. b\0= 8]J/4|0kCcn_4<6?7˕kӀa/NeCL3ʉcwF=1yG\M`LakOMҝHF0.Er*c7_?Srl~ޥ('pꮂeX&cQu!)sp i#KogGpSX`W\$ QggN+XwV@O%3+J`̙ND S$"cg #Aᘎ!y4ݶ<9neN6Ky c&8RV3޽=sij|p~Ky8,<'L*p}/51ُ{;<+I(HU*'o)4XˣZׂ:mi1W8zh-[fu:ƭGzYZ j ё0! # з140W@b.LU(V%$\f,+ӒxZ%DW eXP]af WMPnIP:jq^'JˋxiLѴRPETLyA.:=_:j-cJUUZlHooEvh&U^];[{@i l&ieջ׾nc>v#q2cR#.XBY@ΒGP+HԏӢaJVmf*e801G·HV,uQno7+$Df LMBy ؘ0VLX`F;<(}23UE응Tm∩GN 6 BߚzIֽ+#!+AB~OI#f-*t0zA]1pOstlEY^.޳1 FBw,rR\ |Ps^fQ 7RE!DiEUt> 2J$(@@[3Mxg:L&P9 dy`e40{oOjͦ?/^.APrKRw 6^4ޅ7ľ4~A\2gboYUO6gFjTpWvԯ ,dZP:4^`dio:B1 FҼjb7!)w]lz~Ec;F iikQi1nbWG= ɮp^N6PI n`Y+W?S ݹ1 3E][M =QjQȔ隓c˰4CӧDu\_X|x8 qq q-v%w^f1۽lwc;?/ў~yg}ॖI|0<:bvՔr ؖx eK,\ &MIUfeTeSguOSԑ߷U5[|ru<1*NvYK\&c(TEAd˭fIR3ppG+Oי18׭uJKM3 о)7WчUbe۝Ӭ(-It;k{/|ZB`L`@@ (Bt ]J!AY+dh7NZ[ qPzp!=+1t㢧`جfZm;^Q e%Lk0Ž}9oTL<' bspXH)00S頍e Qщhȩ'/-i%73;|bwlf+iъS8Yǿck^(qVBE VS@l#z笛sV=%U/UKٖĕwOD\m 8֣H짴ı1A4\Yz Ճc%Dh%vEa¨$ AhxHf^K 'FCB#6B2:ro%@Y6ɺ *%Kko3Jc(BeR)$cQA0 r]Z :ov^9fW, 5wNBƠ;NW'/g:/T?2X+807eܿ\Rc8ߥd 2v C*(Gq6:R(!xي Ik:eD[1bE?+8)gM Pr3'P$}Ѱ|[]c00ʮh b`s\mʶ\Hd_wm҄Q'Ȣ'"a ~FJl0-Om@d8QQ~2 }Mllh6$v#m@`d64QB`D1m0ufh db!A8;ITz)S7-Ev\Y9K8]zuE5k--3Cݤjɥg+fCg^:NUs>j'WLqp)p2z/%dluEs$no‡]s @Fh.`  뺋x!zvn,˶C$; RS!E/;.QRuc;&/id% Tqc+|k hltQLo1/ 0O i(>u:k gT QU|:s*H f0DT!IPN=Vb[߿9mY>/>8EvKwUzL6Ng^qUbHz=YPI@1ݿ9wef PMvNC]{4) 2ٍdN} D2Ia A ܄؆P?2x #h3XXe't"De|?<]@sp&FTV@`jljd+.\P8@t)1~k#0͒c4n"ˮsKgtS䲩Сc\ p+ RC Lӷa0 DHI P,L܄_xqS %T~"sB*p `|rфj6sI!4nC $5XNAK&kD4dYk\MEx$(1k:! 60!0#`x?9r=i=#m:*0!m]jLV,?-ѥ<P$+ub{p .8VۀY)J\k[Jߘn0~erscm'|?** m(qD3Nf''J$Wɠ:&ի< =HwǵI^A99Pn\0Ji_3KaAV R⚸C6p3B 8F k(PPiF&Kћٶ\RCQT 4Q Hmw-TEo@eҼA l @з^ΤL Pd(<3*@O՝|gNb0q H)թ\Y ߌ~kޑ_cʱ3|T&yf gd\_Bȃ5sSDhc5!=kTMSZ*Z]2 %d&RZl"[pHkkiK,8|wJNgxgVpo!M')) &)MrkIfSҮfhdur^emQJ@  bES4fm|cY:%JӈJo&lQ .-ࡱT]`lJyQGS,z) )B vs J+$ɯ9狢($[ YYfQMQC XbAz0sfcYK%Bk{[ ŽNJj&μfDL(.on@f2ch(aD\ÅQ%)Q0r0 jRɳ"`hitֹC8` Q% pi;3f`S"A l=;)"(JrAA7A'D_4sP6 ndl[!P=bs\:k܌ȯ T8 @# Ad#2+ެXBju1Si+0c(,(? ƫfė_>(6> n` !B%$5تu &b=H3O'voh{ʔJn5R+0U?|qJ%4`Sޖ>Z%gIFn{0WW.]i+kc_|e׷k\8z(eaȼV6ר5W4l,=u#\挺vT ^E[ZZgY0sfôsNM쌢*iPaIDK.z0#+4Z]sx93랬xox|ػ*W#X:2Ah(t )@ǔyj\ut4c 0E喹p+#39E^S>h_'۞iJ^ZyۿKls_p2>ms)vdou^J5L`49aݚq߈ =\aGISMNF~}Ǿ{H& ljNd(lz`*>WP%DEJ~ iy)vOUf1"%B AA R `t5!j0Eˆ"8DfIbyᐢ8(@P"EMQ zX2(rt( B 3%ߜ(HDr(@03 1Cc=\ &ZB0ۡA3J䉅I J5÷zWGn컻ejZK(.D>]چindX#+p`t qBe} %R#lW(cJJ2rztl"@@xiXD2$e"XRLL[fb2J332Tb)8RS 1 ʁ!030L̳30LS+%&d&6T55m#%$ @-HփPQ$ԄCXeT%**EzT <~S%!g=luW 0zS")^ $a+vוҼWt&K%rv6[u;:؇?E[EE*% 3#"I@(paE$BUD#FASd)5d /X@!rA H=n`A*3PbUd#8@jH (DDtNxc\^["ƬZI^ksUUN =90X&{A\ < 4%a;:G$;53Ef>/^Ҩ6ͥ*ˆp% !lbL xCiGvV Xea`FRi!ZRB@W=h? 8☣>cyw!V5As^ -Uj(* 5S.Y3ʭ@AlMHdD5+hDS6*e8]: }qancnRKKHFUOu7,VX#'/CE PJjƜnIa8ږRRBM@5";ZeXtܴccW oCEBL h h]b%!q$ )A]r6c3z$wkn\-@@*`8.Q!Ba) @Q,a(G 9+=N#8/BHh-(FsQMqj̴Wu[Dsi3G1PbG";G04.G'hJߘd>BW~oϣSJR $ArWʦ=(m'Gn6aFԑцBaj EbB 8@s ez2!& h-F 0;Cx!%*`$hmꜶ^*]=Pz)9d2 UJՖw]lL`(+Pm IEm!Px |lLPޘuY9R[a"B;k D4J-g$?URcEGFe,;J4tptU *]?vѤ- 'r i)Dj{5VteKKkh=[3b)bֶ: ѡ0y x^)T J`v `HG3{A[`h(`#~|@{n Pv" s&SJ1K] JFb*4n9/9xQ =;s]lFfno(02a2;fP::`qsZRĞbT HDeHGϒZ (?jx'3O86=u6;Cd A"$zs`5 0$`'Cb>sعuO Dbt['fjdB)! .Ld3HfȲ&ٳ 0+iCddDt"P)lN!A]66ن F"* Ŋf"շMBBgy.//n 46(2`e&6 >G2 G &@ѭ)⻠Դ;OpH;ZH:)~H]- h$)1Uq#C$T0+hKA@ڋ@$]`q;Gҳ@3=!DGహ>xG}}l7I_GĄJyߒh%NyDad+JLX2KɐBEoJg' ]i6j{7DE ;]E/qas痚Y]ݭ !mvμQj^#=w-C]]%ryܕniuHp[-vac%Wr jWO]ncFO?+m$"M0,(H[ _ Nyג*W+{z@û MBCf  b!,,<<"cH> hWkc s%GQF{ؒ5HWE9 НwwѴhHp,;Z*-S/~\~H|иI0"&@Ue+RZbqM``4Ǵ! 3E;N!ba+dp B 4 ;WeEE7C2D%gӴ/b~\-RD.wHK hP#Ga !4 b$"˓$l.֍`;Z X!0;le5r1 <,=G}_5?~~{{{SO?>}~|g~z>[~{/K>=O맑?jdpv_/G4ͳȌCH ?n#(1,A*4(DRW9t*DL4ҀЩZث1SEMUT+Z[f4Clh!L@22QF%Fk*lUU[W*XԕX[UsZQ䡖 q*1J?}D%$RXUg ,D2$3N!Ņx(^I[J)"JoJ("?%"2bC9@˘dVE? '؍ 29I 5BhJd8 M@FCI4!CB3tC!S52 8J /n ǒYUipnyQR{x gP@+ ("{^9 mdI!jZL&Y$iSYFJkSc2k*cF ˀ,P'wp#$J쑤C /=OLX@͛kLu QQ6FQB~xoU?›?(5VK T ]oռ{;PHBH#\ vՙH?ʌ~JOFifGj4j`妠1T633x@][H|X oYfP*pnFA ι ZDV:s z5bu^*@l]T(bi$C";&!H Dx!&<**)VaH"DJ$ǻEwE b)"[ڛ2; 23 sUjWC^'۽Q(i(3y0N[U"QzI[KrM%9#}SEi|z^N >|x:`U*G/?$)pc-bAqRĄB Z"&X,F>ݩ%=X[0pTDcp@ w iKh^kЂ 8T1jF95H*x6H_m{Wy~}o~z<%Ă@w\<H$ژw\<H$}h]q\<H$:t^Dx8xKwz\<H$ p<<%Ă@L;.$7־\ p"7!w+ _((7E>w2-B:nO0)6®j"llm"I1kQ4K5*5ah,&R1eMTfFjt6*2! HMSQmEhۥbZ*#41llՕ%,TͥTfҕFmf1F(j%d~ @>0x B:ө-"x0=2!h5 v`C ,&kV@O2ApOdY4h-e2U5FV&%l25ͶXjTRe6Vfi T4г`XhT B" &{ʼn!jBbPI$[Բm0RP9NbA.U3zBdéC"w t@;O'H9"r@>Q. $%2JSU6,SJڄa "fd 0eI J)IQѭǨ `,OGB/L0Hô dTCf* C hDOrX!^i ▴* '@#!nBab6 ̏Q M%`0X$(OxcE߇ӭ|b#Ț`>1< Ez*-H.//Cpvб c`!"9%'" kK]QGd^ЮBăo8I@{V (EMr@>[ fdWd#êM8L*'G0Mtb$m"lhc%SRvv2]"l@Ho<1np/p6 P>?N*zTB@O? l*y3sh H[;f#*EQ <0`1^WXRv0U+BJ&@,wyxEKQҶ@A5]BUeDW(6TV&Ƭi7$x^ `iQŶ7BmӮ t_"LmNM.&.? V롲PpCK[)FˆhQZ@GK84 VShlBE]K!IMݰl\hi?c04 qpqG,Y$4FT%&eXc݊6~ެ5,lϘMRʔW<" dj,ro];"U1(͟`ikLm \&Cى99O_fl@NӒ8ae\%؂6 tWb`2f&a% 3O\baaYr(`TH홭Jl$ @D4jPZFdcqjb 3liXl)6!D:(ŒI,}_lm/:5yKu;;bm\ˎ H] $| 3R*i{DR)$e'! o& c.n!% D\@&h :.4f`#A~F 8$L8& C"q P )xф)ʩst_( %+KB+ Ȱ!/ 3۠6&Z/g$S-(RmSK#ejH;\M+$GTg/(GsS扤q`?}tR99O ?JUaGV&KXfD$;)!TcEtZu^ <˪wmxJ.ct1J0 h1e'9I aK`p$5d2(]-COOɠ: +`JlY4vcҷq #H&CpA1b&[OB\Kbgj4g #k4aWP k &` 5,IU,ŊcVJBbhPa%6Tlֱ-CbcDq)EpA!YL Rٵu%hE4HB;0AkCBK`.TőukLB<i5a AD"ŁCB! F @D3b߲lhԾ_ pPX1OjDt%:`.EA" 0@>Ÿ%d9w$3+0MH] i_v B((&GC귄eFyMx܉L躼qOatc }PB wDiuM t YL@C! ]1$_l[C2&S,rcˊ ,]שRch@0 A-􊋆! })hﳧ|Ff.eӏC,k߫2Xk*h DG=edac,إ`?oy2);>)cLa=%b!=?@…ҪWkLĤ!Ȑu(J|gi!eSSc2DnRL?`&3Bdn$* %% ;ċ1 HeSo8 k7gv7sc-K*P)҈H6j&i(E,MmT ebT v[Euubi #q6ڿ"4m CLY9o aŁh","U'e'bj%E=b]VO͂tPqij28#9fr'a1􀟱 Cև@xvG!"3  'Y8|rB%,xux9J~ vщ9:xiipmJUPx퇱pSvQPblj48yqNUQ 2[iC UP=_@Y^[f]7Hrl.0X`?D:޶1bS`kdĻU;=ǂxI]uŹSvj_uּMDDh!%!ių[߀ȟzkHR@BPq_r(kr׉m!{;a:Εy7aB]TT"! 2S$#aabՉ)( ,`e5x)CHdďFiuFz$sɠJ'q}# P@"ES bCMANz}ɁOsKgX r;UCwAr=IȵP1=]pn—!TZsc1F6!`7j+XT: %ԡG1[Qc*-R5ЌA/QDzX=+KӷN̙.2A[-O:(n"\`&ѧ,-,Y.acBš*+"f M666\QQܤb7y)`QcI%hbUxtqt@eY΍Px@5;LН*1ˠiV͙ubC" tƗŒf!@(TAȕ3),dmצ?Pd6l4`al`Ж80{m4ES O `Hyӣj'/L2}I%UtuPv !P,ލQA-L ?<݂w_Rx1  p=8Tp$=5Ÿ P;>Jڵ#4PO" /y~;*/UgWQ< B* eH4l ( 6ŶJ& kKk I RDJ <А, x]B )`A0a~[?Hl{Ӱ: ՟US(t2f*eۢv(@axb"̈́j[#A%HG '3iL6ۤb8cC`h >9|x!^l33J.Am@qOz0^XBx0HJ8tS5)]Pel3BڃcAJ4|T*_H"[/ z ]B!8~|Ec36#Gqƫkdj*Dz>m6[^DG=$C]<0 U CjP(!ɋtwCFSQz P=vF0T%HYv8]1Z`۵,+x+nIUE\(P,iK44SQ9|t5/afy 9 t`uIϰ7\c i9{lcT$X>J; Ў 0  κ>/6|ҪI"0χdE<, [ZڕE0" 2D$ 4"dJ "R4[35Y*bZjUL֩J P%eHBb (P. D>wD3sk6M0Q`ҬB`déy.D (E4ϳlԁC!h[llNM:һ]֮Bj#0`’КJ),L!iBý=zG鿯;C5Qh< I`8=HOF !Onl|٭ @-~`Fx?Jz>өD$N:`\Ld}?.0J1y]"dPFLR$x@coslH{=A yڍ!i)O2wIBo $ EBM3j-dM=1vynvT{IFnJg07An-ĺ*%%IJ8 $SeRPD+&iF6,X(v°Cs WyJa#eJo|R!!cPZKAX @(%"!@ZSD L%L'<5*FE 6Mjb$b A+ arJ)Rcw#gv:MsG)T٨u/:-Ā̤A+cX Y ťU'QK˻^w.J]dKe(4As]2eM]]]sSFD  &8$oi]*H&"v\D *I(LJ6?|b5B VqH HO+ &M*AK uU%M Ux!6 A{:XɍS&j"H`(o(_̈́*B>'u, TJB{nDH2(;BjeI_h$ ^yU%LU0.] MPU*MFG*4F%XZI./="&&7{@;⸀7/,US146k;75s0am*)T#(u/MF@xliVKNɯV*xMb IDg;иĦ*qh֔"uv^$( 7&$6*Ys),D#qSme8$7QF`!㈗G>n/Q͑-z7e$!#qP5f)Y(Rq6ӘBb P /d:8޶FV8#,,)&͞ka'A۰IT@9mz +h:82O<$pF\! h@ J)B .@l;tb;OJE@1 H4"`@)QC^ =mQI@A4D%!~|ᡂ_kN}'G䋈3X|Azr D@}F G|"*xC$x~ҕbfanC/-hEayW`L)"UBU €T$HDB fÑ)Q a쯓B?dC xpI(Y}|2D!@JCAJ'~ 33HjD_ p H  a [߸a2". o("*v-RCoRщpS4"Ƿ@p A R88 `p6L&WGe&FVFB] L%ـtX`%G] ;o&*"sŔ0/E8FJtb0HLD8&CCTlD]l 7td ,VUn7%ruM4C '4?O2tY$.*d1r4BJLmFtQ(BB(Z_,"b&AUNGR 3r "H85qd)1!Mr_^Z2lcjEl&7 i 0A v_RF>r`4,HcJ ((~ Ћx:;?|g󪁤,sm ?5 4HQ sGIDB) DOi }2[P )y06Nw"c~4ho" %풥P&³X?6Z8vWޯ:ru=O,LމC'NNE gWLͳ:Z퓂P]AVp!L0adR8F9UrW%ՅLb6x; PQ?#B2PrtLf  qoAC59)~`J MMFXT$ҦHeQ*26*1+ - R) $P }uh=z/5֌(+0H)?O9)P/ i4}^ȊM g2"UiWhդ@AxB4A'bQo]$QUEL!#;ldgWl-EiQLG%T0r HU(2QP0!8 R+Br+ Qз.UFrJ*uU҇j fI;O%Exao:u_dN[= >N?, ]Inu9>t$AQ,с8F8I ;iM3.\YrڒT^y~@[sZvGlѬU/HW$ ncƱ#Tˡє$0,5|mI>|̰>!"VOd@ah9بu'ciHB7bdSc/c ?tĿID;qsW:E o /ߔ dSᎩKnc{Ql#?߀0HNE\(8ES))"?tG)e;$B8:Faa pN$) )&ф (cMXɤ9{>[ =G`!D4xQ o.HRPBRt ~z^Az)G8?y,9O^x6LxK2HḱH*<'h)CmR<4lq -S"[4Q"UoaC,n[\p #26nllF!kCFD"A*2 r, N[)@xDI1&1[z6AB$V˒ , :fs3+aőGmd !0E<&dyA H12[l]u]u^B,lH)5W u i(-iX1,GnJdhL3clɓM55fE5f!@do'M֗Jmv]#[%K 1%64;8b˶iT!VBNlԮf+X`5;jѷuF)'h˗%c KWff[x\Viz0s4AD5@k.ĶFSpj\/Y`8AkxF3riR\7%HBp`E 'y&Ҙp| R Ѐlq"lւQ}3m` b 1$@ĵzA(n*Sj}'Zj@C1aQ>xOَ@1bbag' >npP/Q0~82 f q`{54s*@- ~ ¬ph"YJ`R> W 1X šh}F-PQM8ՠ~xG݀~o'z<1 ~DWxM.5Qj8B0 HZr!;!ְjPmQ)`t)O.O=!"P2: "@Th'L> 4c^tP$P3cENX@d3Bd8J̸l.0P9a+DNvRKXy4CDa rO4- $ "n_ #R8h1p?/ij!20PWo߰oQ[~D2Ihi0uHSlҊ)(mXa+JʬJL (!+s HGkS5*d"ITE$I >>; (}|ίa_ ޢ?D{'I"J4*@Ww #(W'zfȴ$[1҆PDRCnW y|",2*CyMlЀʰ (0T@$-ICq1ִi!K1 8]/rדR{u={Z 0fN,χ\N%QL@D5F0BDӂ IKڟpw pK D}bC^P>;;/`112/q܆]M l{6e1IkXdN-Zuiԣ[j%l1&k5k #YXۮFZkae E$ g4h вLItUBjKqR~X<&~>ϓ>1Τz\ֻ3'TzjڧjL#<ד`R*MP߆^8hq@BVQf`7yM3E90v{TX奂{RI/L5FkfLG>1+W<vap6|# Q`"&OE9ĦW?1ŇPBX,O 1qfNxYG6ԟb>8cJW^ ^nS'c2™G+KxoqaMh㿃%_m+嚜>#'rAXN=* RD -DJ={~fr8k/G凖h[Y5e"V4_ga믁c &? ~+ODշ0z ҡ>1Ƴ[iZBvkZz1'1muMy)#;Ă0J_-;-6@񢡑QZBQ@7 QEagIC@m"l:wpzZ=r{Ab%9m_f=m&!>g+֧R J64REn,5S&VLYqDe46JT4QCFbi.$Ԗ;Wm.Li\]8֫㢨&Kѵy1l7c2¸+-$q_1k+u؎X`bD`ZM;`Rai588.4UXYy,V׊9%98!޽1e>0»5V;zнq헌}ч3_ QMUP ǟh`ڌ+k'ء7 !n 5U2vFƼdloKE5F僁ccjL2j>)tk1;fqZ,X]Uk.MݔkP~[=+ՄQȋG$ I*Ɏ;5]Հm qScژ=Rbkq eQx ƄpgibK0u"ȃaP@v 2"A,nIAoL3X,-7 Q 4f]ZQML܆'-9QD<`$kJd|=|pp XeUfxv^p^LILt"o v(St*^.g9(NrS%P߲1:A&xJ`W`6)Z*ZE@fdA i( pYHW3=rxȽF-QHa/ףcf# (h[$iaċ[ las$w"I{>PZy*S|QZ7}rHX -u5~/\c%lݘv MC/Gy##ҷaU;VޅG ˪w̋_Rs+ v4`ΊL\$}QS&ԊHXvZ2P' .Fjț&Ny!qʁU7- `d%X VkHFFy;RW@ce]y.*$_0w3rq !bfo"M;5`*G@<`<=U(!5(bJJkq=SNC8IZ%&cYpA*9Rȶ0bH#huS-(1#x)"ZOFK42jc hY`avc8;RS#lurJ$m ƁR&a1Y, m2ő2(R16K voLUUNv~iNrOUzDHoShH~O6?ڔ6ctXڥ#-.]5Bccģg8fFex;.O{yzHe#'&!"0G@Dgx"B]ə<+H'00켈Y+ d"БpL2 2RWƊd a.Hzn4h J0ccdad&8mN8C@ͥ͢+qfv@m`S:k7vra6{M#`I Dߏq~H9g{ЀQ;CPbc c>$ tI>q~#uc aOENwM xq:}Xn2}D& jd`eLf6}&y7|ҸĔ|c X`l77JKX٩AL0-AH̃bIv cMi A4jb-af*8`a)ETBϐOWVNx„~H{]PZƴF+sY(„"J # 8bR[;a`t12?FSՁ벇Z0HZ̷֨I--:.۴nKi W/^UxIi?Ml] Ս[)R&қJm)қJk*R H% RS0&Jm)қJm*RG#Om A UB RS4|>@xC{San_^óIPm8~saq+$Pb+IR)s;¿JF(@dH _Cz&)JόE02u!E/B-XGǧ D*!ch=8&6`֑kucj,Xh;ɵ}.AU`(< AnNkR$=B)EB>K*>[@wCM6 d10Ǽ,Td!lD<|s> AB&1J2DVfeR]jfUv-m[M%bE1!#څb\DׅH%Vlts6`ybqV0SC߮)a(x6M\mQ5 iM^ˁ0 *+ҺjO:[ FXļꈉH,!&Ɲ.T*[BP) ,!2 p wTZF(F,c@Xdd@Hb1 9o"pf]^JH%61H)MC1B%H?hа 6:$17Ҁ"d;bA*eIIE7B @ J n! * @RR/M4k&šS8*2`*୼`A6b4oVP>zFv2Dyܽ!(lPr j*"bg߫ T8dZș2mR\ )]f+ܜX Aeݔp-|HO7=&že` clF"D H\I];HN8 .E & VOנI sD)a0ȝ[ vFH^J(z(yZ[4zؙ%LqB`_=&Rb+ޥ( 5)My@P2 D폕N90$jyXy:OD)jʘQ sP *^E~g<D1H(M!Wb pBd/9ׁaR*l>|"90`f`2bˇdJ4Ù' HoU-%tqL#Z3="S}̬3.=a ? "RgK?ZіaNY@❕K7oK.G)qOXXgKwtYRtMuH7+nQ*[r/Rȝ[cXb|v=S'9{8Kڜѫعg=ж7B.RBw3QqεKB\ ZUVCTm=.2wL}(DO^M"# '=1in* a@i4m1rłerVYn8uuD[OM748DrDZc(5^Hfˣ&;6 BDԧ@"# *E1E锣J.<^nZE[Y[q*`L"(B~(FṴ6qyn*#EZNr6,Cp:#H7Ѣ"1Jk(j͐ŔPg;0T/wk@@'aZ:I,9+`6"CLs0t![gxBGQ?4k |b15pKq4w^C+t%xMwm1dք|%+ʼnA*ao[Ut>NN 9T)   ZTBcaI8p65qVBVJiW݁ffM:ESBS }qUՆb\,E[8'x9T7 awB ϥ2ue.]hd@c&xUu ܲxWxfg4]iVaarBAp:O(tx:z ΟF<37QNO\dZr $9j[$F,\>߃Ӽ@E6xE35NT*UƎCϼѫ8Eod1U+OԬguNkC`1",zfߢ$pdZX!lN@uݪ=-yPNB\!;ƬҢGY<ϓXQR`&t 3f߾` P,alPg}eeA 0U0jX/7)*,RթuVI 0f 𮂂p[2%~9K"b"xW^nyF8T S3w6E^NS:=y\À66@v uܓFb!u9KLpVs+a ֵVAIP4q|s(V`14Zف0H fyD &eXUdӕ =Ysv&aWI%,^<01HTiyQt3T,JOӴ1[N pqwZni$HP;6ts DRxWLLPc Z;Yɾ aӳ4S|"Jb) b4I7i]3^Kȳ*pVՇU(lZYe&w㴨s^Ms,[s-6M=-Eǎhᣐ<& T%zyx\?et5 :*8;S=ĵ'BUYV@JwYej 0/O0̥Xpm\};T4F_ll _=;V#5˦ֆXxU+7)>o:`>0 h ŭvMdL#D`J0XczHDiFP* *Zb3A @iL30aM][fFb2 0{ypF R'E0 jޛjj/.Ca2PLI Hv]ӧmw3٥LQ`Vn<{4FE Fff<#E؏f0kUIYyYZ@л%-SDDA"lăLF``:10(BÚg vFAH8Q2YhTP 4hrrC jD5A0 A0hmbnZ :[T[gWJI6ӉF͒7!:hMf/R"PCB[|Db%(vp "A81hA8‰.X GU @ bs8r,QqA1:*鹐b쐐i3K +S +L@'kjmH|Dq/CC Qt@\zҔER(`Sǐ7_ȅR 65p({k uA1>K݆Fg]Y֢&iĒU6Tđl: u jl,d3BbkY#hnh$1 7"]˛c@fm)[8Y 85뫞MrDxB &+Y6"%J0HPңj'#Ap9ΎDG6e2*\ l1hfSFbMsn\YSr:dwX4 h&R30ordHIͼZ1d?;#IRk6.~ԗe]БC<ªal2cA@BF%- %/!"Ҝ۱9bD)+(egJ2B]ubi;.ȋ7b f? 1˃R%0_DO E< m10#5wC!;D'.Q=P22 @ @ ,Ðd]Cz80$TMAH# `|1!}*UrUP%ܒI$I$U*`UJ5 F` QyꟃbJ{]u ~f4eDRÃ]f']`0%$6#JVw%T+H(L|JT~hޏ}PTP-]Kn$DBb$!hѥ ?B%2QE)CF T~H;slreD_K~i&>h 1-'MKoi0 )]7 ؋J\&_*};X>ۅJ4@ETT_?6`Cw)6c*#,yI^c8h^IC`06iTG',otu:{6t~>^a*6Y"١6M*/b,bP?O#&~أnzZ.%vR!tU{Wߛ.U`aƢb pmpiW(D @ANp&T@  d8pDPM(}r2A{f6L`R :_~2w}xWHV,q+`̅Yس9w#,Ȋ78ic(td&.^ Dj)PCёEQv[X[L PPmFIr(;@)̂0 ]44UsE7SrVR k Sd )&ݪ`2SU"ڳE7c~B)ߨC\nt6w}8 "DБ)∪tN]ﺡHpԄ:YN9+SO2JCVu,c5wwxT BhxA1L (a 0 FbEF9BbhӼ`&݈P݉H]=̃ABA+ hs .lXj1P^~i[vvu(t:# F4c9 "C K+K!0>eQ kN$O:z;1DaB(TtRLМgto> &Gb#x$bA }֠;/ܲ$aAJ!q9 H8 "t!xfR(lḬR' #Ē)#JK,P$.S@~7IE%1\~yR - wL-@ȽDIqDME?DC̤"J"h$d!LLZב;mɣ YyOUF/#?LD+*B,P>?CɾS[OL.jW$D6L1D>(\=dEƈ4\a&3OfvmӃL(H¥2a!?;@BV0luH\2FC}c !}z6.NKnac*#RUMJE mG oaI3 6ŃHhil"jF iC-A@$ԛ `FZhYwހ|`}&NՄ$N <y;,IBM0J?[*Q]SP$@P/#`u0YhkZ]T F5zt:pwWghpŽuqWo,xd]hóP|rGtt Jz)ktH()@H,!|Б:udX"!hӬ:'l <5A±pX3*Uel\q='Lϸ{ܕO@1aD8@⡎ 8tD_fQ'0"sNkF(xCSeP{gg?%I]:GBJm) `N*Id_/€Hq $3 pˮG@Exxs5S5SPN.[;$`e3H.>A$H^69g2_#AnAf{j} ae=T w/s8"S=ad)xkX͗CP }atxL!֭? pe IR{rΈb@7wtBPwTt~/~km>owxtw)BH` !QHVW/$I)ma|\4:08dQT! GP" iQA)Q(",DB?I\aLL;pNވqe3BEp).f0C9moؔm .C 2Q#CxVUڬ(ӖfZCT9bmo5&T+!N.ٴ[yV5HlT,m,*Εڃ[t"+HE$^sv5JOb7*-TjPQEHRɓʦb 2sFRYN.jæ,-rgfh~J(p*qeфkW9QКKwTx[x LPÙQɇ)ȅvf@Ön3Xm<Y4 I ~!V})ogY<ްDbJ@5O DP-[$ KLFYԍ5YYbѵd+3%B#0 02Zʐڢck*! K!(J@bwI.Q}@h$b >UMH8/ PhD(_F?&kƉdeO)VXii*hQRA(oy̨M.hE@"dT00sDSUS' /0U 6Cb DzJ V%kPHn?h |5֘,1QQ"fb60]Q{aQ6QyBݳj3Om':77, P_$TiK&$I bT?B H(?~m\"[鏫4HQ1o@ !|Gj!p_X\'0Oխ!4hfoXn6Ap Dݴ>z,i)Jh3K@W:>X FźjMʮbD!F3rSmxDmаsWшDW/n#@T픶QMF~b l4  3]A8O,1h|sY>?n7ūv2[ێ;vi {0KcH2BP't T |40 BHP;?3|:&ҕ9A~@ɉC6| ӳA_9C0C 4'"a~/p)qw"xBT&jίknIqJRt2'?Ihc/G CMPəAPϯO^`5}@$?kڿ&! 5H!>PVIFlR_Wھpw[s^Π&UR;u]auۻUCQ\I]!* AzF4 LP ෱ WF٠SXsQo[ \/;hw}qF&v=h ,3Tjn/Plsדp"K[ k֠ }ϡzjA%(;d"Jh(UPJ@h@@ ^|m76tn۝A]1In1ܱ.DQhVR(ұ@A +ӧlHڀ(46 6\ktU (o`Ӷ T " (i@ 4 h@b}ޯ]޷|یMC᷎-yvFQUDސ@} }=/ymsOzm>uuE-u}u_gA*}])7M'y>#zuts= 폩Ǽv nx$}-\ϥ+5uǽSnqі;; _{_Z31-Y﮽Ukz`}ux[ԻjZ5I={8Q iz&uQS]<*T@W۫+[m|VX{^ Tt5W GyΓ>-*C㝾HK ei&qx-&@$76`Mـ *=zT}vwncJv[l}(EpMcUأl!AET*Q0([`ӣ/jmMDi/mj$hb +ӶƋ4S:j zf(mBJEۮ}}TPB@(HP{/-ڔ* VSFN̉h\UG0R3c4Q@lл|/+73CP wwn8 kX෵幀rWmAԞjv89̩$ْ SBK]Kf}(#Şoxq|D lV}N K3xhn)!v՚[` [dn/ԫɲm5T+mU+zÀ:+$@H!C{vhl65R{A zv/vlf`BJҵ&P=ǡџfIBT@+Tͽw3(R@J(>s! KgAݻk<ޒAB= '-$0*V@I{਷WխKkix[5O;soq}v|By]x%{f'ON$(JR P @PHh@P((  @(( P @ P @@( (  P(( ($RHUHwX P x`iLPi&!h42hѠhhh  %4 ѠL 144hj=M5=20fLMjcm4̚2LiziM0CPI 4S #@4&$zh2iB`SF6I2m3Qi&L4$24M14И&CS< & LO=0&&jy#JlIeSiOh4O@ѥOe7ژДTJ"h L&#LMMLhɑb 4 Sh44&@ hj) ɵ~K굜Vw12)G/2۠ ̵c7v'׵-/- ayJۀNy"ڹ#-PVntG5%;/Givr% UDH+NCQB(9 EN]~͉idNWtE@zlK˺.w:<ׇ;+v| Y%@LпA) yz!yF&/O1Ƃ{}RpA::+!`F9;l#x}p}q#v5SQe9OEvvdvzveɽ Fmڟ {10 CqM`ͅYA3 WdZAދOLmhqH"nćT L\S˲qWo@%-O<(%s=(ů|HIFL[!!X I>ZA =c!!s|CG'vsUPH~>+E?sݿ094?d?(+QyO)>'2-aA='d7Hq=(0%q)Y=1w:%ecbk ;E9iq !$==E3* D >F-.{lz\ʖ2OWx>ʨZQ1t5wϔrgƆ8~栈E8c)WeW5`dî.c}?m_.&$.TYN8c(愧(ŐP'FFhh( AK)gJk vߝEzSr sGMK:Xno h(k0T=1[LFtW\w='vޟW]v:ފ?UA$9b`EؤbTh=VL1xKk=k'K[*^o?6o?ކ,jf]Q39"Qs '" Dun\}Z@?tj+- 7IeԨ{s̖2@lj0ŒJ*qS}3!ABf.Egh"g&Q:=н2l8&iUB"L.{{u< 9Kl f5Ey#L~*I]V0\Ťw|7*dAycI|N/{]G wZ3651p{!tSUSۨ\繞v,KP'Svbsy-aSOѢz"IGk7 Fo]-=o6<tuz<wP˂=E͟"gN[v_Q4,+ $tš!KR\EH06Ԓ-t8,$Q+88F8D܃gUBƿBU-J^rD@j&E0"w,hiinVh zJtpn:A!oIyt)'])BOjE : }P Rr `V-YxFB->qMU "wJZA0Aۺ&>phG\5هӑ9 #M?#Ƒh&*H"=Ώta'd yo|wDž6GbzyzOem;u=gBj>*>CyWe _uԼ7Oj~V?/gXXo!a=_Np_˩ #I\#OnQ"_PIb.< ʝKVR$"5{+$>F?W: 2tM{xh3%]TR+:Cueqj,oC^.maPJeJ@PHt]LS?ƈK}w5B o-'?,g3~9J4yu'n"E?E.lrN?tɥ a^o 9z*Qk*8 Ukk[`~a7n}7)#%2(fnE|3K ɼkt2WD }5Mc;OT2'j)J˸rnOhՆ >rM8`peD+cΆUNyv= "X5fvB@&dZR( dk Λ;=cO 2I?ҊǂiJ49 &$6Ί#brwKHYWzVe,v jx*C<r 5 (b23?şK&a1 |nab(|V͵O)QH/jڰortx" (p rs)ɘy.>U8 Cc ;Ks^1 .ZyS8 k jOXg\2mb_m>hu]zQ/8a8 *@e !~\ Ln":9Vbwܢr4uqvFS!FzϻbAM)~N -)0hMQk×ĀPg~ND pbW&:3O*c0}+29N5r94b.%"noZf88=NǼ?/[O1WBTcimz/tY4oX& `œ7ņQ-k^CxolbD/x^V.AM/l''(W !q բ(qm&뀁jH'9 ` 8O ,7Hb|Ř#~,3]kQ)@NHH2{R2(0NR cd)edHԚjPfxϔ| `6ZPFbUyZl&Z]'+pP;~Xzuԩ'Ohj69{QfCfyrc53|Uƞ_2d'x6.l(d=rƍxw(i:31㣳"jgkFZ΢աFK23C2>w/ Ib udoo3}3s-O m/Y 8¨1o b-ɋ>jL[m26eNwq3Jp1!:[? j{! պ*{ߡPIH*!X LۄPXP|5݂P C8ge PhU`FqF}M4-Mb4R-b 9M@Nh.RLIhRcFhC؅H9N + Bs|E (~Q #zK>S\0A!$Hc!-)CAA[%8* (/˜ԒO;9+jѐI?+jƅ( )' NO[Jt&bDU PI B ␤MD (W0VDDд-oX/GF ^ :- ŵh#lwP~M;u6=N|IfLW-e_cѽgkU֛݋o\c7b;ϻ'/l~&YgkkJl.%/WH@iR. cP$#T ȄPND, qW"ըH 8 ¹n0T$Sq X19P+Wq  7 4/uVwvڛ݁Iu=!uMݿyCwsL2}/_),Xݮ{,xe&PNMH]iN.PaJBA0EѶ< l{њR)` a !;csJ[U4+]Hp2fyV=%B1l$Ng{E3J6V|K##:#A" Pa AclSi2԰,OޞWu>C;c{TKc<+$ y y@i%^}y  ܄Lc5 l '_:n _Y}Ӛ)9:}ikrlG(d̷#-aCO3:dB_Ry AxL+vעtG=կD #fZG %.`Q ):T9OvhAUftᢈ6)V^dY @"P`D`:0Xm!Qg ޱffQԁ49A>}7~<SADzj(k vHyL5-ZЬnB뮳j$ m1Ys x(F PtkVZb#ezΠN75"jD*5+Q߫LT ` )>LWԅsǣ-~~Ӎy?1sZ&W ŕ!{86{vkU` 'B*sTw !z"y: ߊ?M0'x3E+o,H0Č_&TZFg8b=E_$Q9!T8  ^O!< x蘱|H{8i=?-KN)J !"WO~%sp nvzZ!ACH >spYzGNC޹Css2M<Ңg‰)e^O,|./IQSL| M ~,j-$HvMhSb=__I(xbe{ΗZ 3z'zXLNoPBsFpvg岈Gr91hwponUmre(l> c̓`C89ևuK'5Ke]A *y7cYX1N$i|8k%Zf'c[Z,~ZWS=hgSIA~DG=ֶQp#ZLk;a 4??,i$m}tdۗMHʻywnYvC䞗l^Ǜ[YucM=d:?@gQjijM+.e7laMz˛/'gGVΡ&r H:-P(lln믢=O7uD˂k'hy_e H"HxK@!]RsH h''G@ g!C:$>{|q9% !~҇vTVo`/Dz%P[AqǪ%E4ۓ^{~kH{{߭1p;pzT7?eUШԕP9x/O5iggn!`xٔȎRH9#@1 DL ξ/!|T-$`7-.{Ev3~J>lpn&7OI$I$2M5P;86SeiM<ɽQҰ0WZG=^ڊ2B&20 /G "y#y~ڀq!C$?=eڍz:z\.ԩU:-XT^Jz] s f QOM7z GSG9zP0;Dʼn86$ $y⁂ a) AQ3n<潜mol=yjq)wڧTPi#^ YK-wχgo %t_ejs+PCAp˞:߹B!B@0;'d}^AܱGJ'"hzt۳qZh41G;SS|9FAQɔ (ryʤVf֏1MBBBspGoK.0$?u >CYN屪:Y3 _˱84bP~duy _gs5='{:GLl83US]0Xn1C 9٢nkR:;89L@cn@{NtfWS3v]e=[ zԊ_nm8hR? wy{-@ Гڬϸ30nvI>Zcp]YTp86;:^}u2!!wa)Òpop2UgY࠙KJ˅Aɴj4tAP 0?Aa#qVlɭNQ,3ԐEJ#(_թvTb"jq*ц<9L@?P"NZ~xbA_0Z@ {O=~xƅߟD9DC:t~i*nE}tO?ʣb7b|(P> ~)r?x_|/UExE (0GDď퀼>\`<\IS|cjbt1tUSGE{뢽DsP|`zȡ(}ܽ1?uښ ? SDaD 2J>lSg'€z(PCrÞo[E )"'_t@A.PMCAOZzHb8bӳvwXLS0C6']MzoE8'oUC>Z*h<b(m=]8(c^\]oof3ÃAL|o~h?`r{\C-6t||Sr:A?B=οV/.HiR>עu /wQj &蘅Kns %Nqu|)+\7i( AVeW|m\! O=sP?Ňȅ# Y7\4F?;\gs{@j*Ȍ"zT[淎ʟ:AjߋZ" *:̓*JDS2X>t_{m_Pcz7x{oƊ *KRnSd1)Q0|y8pP?GJ`}yv"7D;)KԾm{NRizL`c'LIWoOsG*o̟^ -Z {"fDXG71ӑ201E/S7}H.ʿS5GjX=~9`,Bc`b)ndo陘#CԔ#)#KE3{q^?o19%qFiw1 ,Y+D}+4 sJ PO)kȜ+}XWpDz>#5l;8`QnSUeս)9Q3pg҈\J2ED"nۼWY,z[2w ލ]Xck e7;)NGУA[YH٥Ʀg<&<=*>d&"Ə8\k}(rJOt8uCR0y.W ) b * .9w@ ) ƝɁH#\xu)H $? }" <ԕDFThY,EFQV+VRЩmj5*ZRmIjW+`P @@5q+7C",nAͽB\}b(n7H|3ÁX"~*XN_(A!4pݝ#Oھ ߵ;_}6Fr~-([EԕMU#\l0W{5sr"Ӽfge}u?٪wL{G!d],-^i&$H!tb0}p吽6?5M%8lTCuuj|ڷbu.Hmru]@qM?8;8m}Ìa/Y^:O]buԵ*Ⱥ&Te^N2~wp^PuSOycnr@w\[u1@HD 1=ځB~8 [>GT\_H@B5F HBYA Pd4ぎ1hJs7pv#i`_as萳c(vx9/71!&<"U  HȶbBkj?7Lb+~#$Rmoǚ( Ϥrg;jd@yPZVm ͺa-bcǩ.9jMxNjXq6);A@# h䥸I^&Կ TIӀ9L4I'KKXܻvMR#KZ_c7w{ϪZ~LJTz-WCgbQZDD@ ~ڵgSeٹM(tp Cǩu7!h;wG5GM0xJ.5bcNj&PWHec=Hߑ-SL#ZY=܀E8#&&/N x EZ,Ÿѻ4^6ͫuTڗwŠCoC3D]>: ծ f`?-sMa@ _~ lScRDEhLsTÄyYKN @9]MB1K$ѓj:\p^j5?/(8 p`D Y=1KP&!d8kbNФ֣4;qdl5t.{ _nJ{d\ւ R)Yz1Fw6c'2_3a`;I xrXפcܞ#$Z{`ϐ(Ցn7*}^gE#01 ] 媦Xq3m62i!4VcU]jȬk5F].8.H2dL"SQFMg#{WTW9Lp.(dQFGjzb{.ExKRz_(ief)`8̿cg]WjP۩OJw}-{?-7bn爲I-OEkxæ$s/4ux,#5v7|Cqo}cyK~>ii'ҠpaqD1˹8Bc!!H (]IZ)Y9ύOMG qOkl!4xԮe<[c7%n V0;BzJ! <1hgQS"HoAL`@Hir̢~;793;OVe ]C+ !om~e8zz VNJ~j7II7*As ay<3ļHBOYteﵹ.B=g8V ֖6]9V” @Y{JR .kWr^fA,&r 0`Hի&i!2s@y(EG:8/2SUTbˉ,?qOv{^#i-B[gll3B4Qؖ6KI "hS)й' sqhQ"@0;Q8r%A n~YzK_S|8hQ^c[kU;YIƢmI}}}ܚ^ p XXq^„8>Ǫjf9oeSj-쯟TZ@HHtCKyz^cI ,kgcd(^sT Ԅܳ#$DC`P6ۃeBo `qՠw\}?WinRo?:ZV~$CJI%ξ$hKМէ%$GY֗Z`ëa0}Υ@u z2gSN@Ӄ[I% 5#T>9@JG4`zP$ȄlU`}:TZT  ؉"Igl:&5W$Lj1qT'0_sh&JqvMhyc%S(I~K>t.{X?i.Y.H!*̥jtB69O=<:P+?g?98Rxyɖf-"7b?4Gi9)Kggw{B(O?? "h5R%YŠu>GkYuq"ﮗw|C"%>d~YoeS/y[U7EK .6(M6;B'4<ADrAAFHSHxhL1ağ@oqhxɨ vmv@:ۛQ#0NACK.A:oc嗗lH6D<d>>j* &(Ύ7u֨Bه+h,1w-zOJGϤ9 uvWSUv]p6Y|XjtZ>Ԥ2|47!tWs;ƒAS" J`$K .M47 9Wg1}jk"` cx4mt{D^&'z~$5my7eRƐ/;Z]emЂЧz߷Mmfk't,^;O Ͽ O<15+E3Q 0sa/hZ3$;SL1 z&IQXb. N2K[ea#84:#NJTw<HdGHb8Sbn_xO̦Qf Z Dي"ak@ 1k??$' L:F{!1#ǚDSRUĒF2hO^ײӻSX 9 xx31PP =3oP 6Xs S[Q߯q(&o2g$r!}1Z?@Ji1':=<ꀜD k/ 6Kam@&u$D1k `b{}.> %ѥrޢh.qtj$fu׉pjHnoU މdh-]չA*6 XAh~Suu`'{Qjr|sZ3-S*=;{`==:ƺݗ~O+nڿػTPܽ9h!]={&wg>h,h1t,! A.|z_ gzr+6Q`ك<ubuI{åH "x?=O8Nq]H7Yj+!@AW@ @IZҢ%A\"A 8`-LpP 9/|O=7':O5Ĉz0ↅ/Ң_$nY|F/ؙT[E1%<*qhC!f^2 laE +ϩsSoU>0[Fk"l`by˾OаI[$Aq_-@ԑ9J "T psrb"nkqY:㫷c~˂ ^!sh)C%\OQ+ L$y>FLGH^k5>QVɦIiFIVXAMTw([{N[&4S?_A†f̡82Kҧ [YL>= 9'Ջz)g vM巏[=GbϦ\{ˋFGyƉr`"vA̱FwWgDnZѧcBF2g?<֧U3bvrhFRo/%  `cDA[vv~Yw¾"'1V9U>Q@TkQ'](V,5ǟyߢz_W}Ņk=(H rv$"i {@^?R&8'Gh;qqkݩ4j&\rp6?,)/UYY THF뒫羖{&].OJeGd>+J=TM/0~ ѐ6a`ݯ9ΦčPr{mGgi ~mj[aEi$/(" פ;k)M2BIxPoHl@(zRLQK~?_ gtLh.pXԿNzQ 4ʪA5/6X|}4=nb,p %]I90Dq AmT6f{CynPxBGL XI2EDws=T XlIl3f6]6} ~,vgmONj'_[x=Nju`w-Eւv&TO (fi>e^ItL8xrڝSRaՓ(m4{f(]Ouwb!hü hxU*=/CzL'$FB,X hQL:t\ENm>չ#<нZºPp!"Iv~vA U"AB:$2L8*>bRU yh<8F`rtLA\ v}Ͷi Xm1 y-8y^uZ9 8䊖 vۭo_e3Bn_.VxK(Y̜y+r'(K0&sqRg^zy? ѵd_e;W?58$3zC6 4 Ixsauy~[:4HR*1fCOOS^^^.˽/`=p4f$ňt!q`Vwv;2! ˕:Iq @lY~Õ B3dV<*Cwl{p7n44[-KO .0>äGūEE>/w>ԭXk߹H?/_gǧmtGs22N#]V~ <~}70Tn~Gcӑ'>iҝu|?^6Zǟxh.7ei.xeb83URɶ oMJ=|iWowuxWA¨I^m׃Ku3%Oou ޢ8?M^/YNO.9[n^!\<^drFn,/;S[/JoÄ[nB}~  nV4v>1{-G نM&;d5qy5<b0Zڼol*bq;!BFAd 7F\GȼR];ݪlvaw!ڏ8LNQHߩ״ ΢+#zu# q"|ȃWgƈscŋ o/ujy '_qǼ+kϛiŹ]Bh&JCA&jJ9 CwT7.HZR+ۊV#V |}[I:DUUVI$De]Mb=$bVۙd00ǃ f1F@}{xxr\u职ޒ_ҤL룼hԮ.u[]}:UFkFMN#12l=rfԣ!|&1Kѷ (q.q(Qx; 1:Lv7bbf9*J!ĹZ0x\kOeCqqa-jVqeO:(SY0P맲xj1pmlIB#&k-'O?r_W:OͻZeRYk|Τc 3bzn/}@ϓTǏ+Fz|VY]_ {Żk۸oFu2zn'_*˿o)d< 1n\ Ӫ"E6 xlG;_IޏԦ|YHʮQKXUy9h]/K|7d&0h Ɠp@(lPZR7ìT7o;6[)"Ly!f>(2%^XOZpWF}hl:H- &宫јa9)斀rDo,^ F E!  O" !U엊aJH01oכͶZk9CfBD[C.'=qВ;][q8T62;<7Dx}2iȀ /oF¥ 3Jm"^Kp[ \Ѫ&/؛yA1Q(;)rTJVpܧֶfkOm^|Ub(ֵ+Y_R:tuin*4oi RxIHN#iDΐL?;xSߧpқQ[:QA1W\Dd|]i3Qzd>3}3ʝYfo3I]}s/mj=G{tZt{+nĪ~B[mtҷ/ߙ֕Q|߃'}{mg[y7{7A$gmqֹрbF.VbˆG?Tj/lE yfB$XITY؈6:C}\pO Ue IP+$XazP9ؽoSH1ա XB0V8C%a dVĜ&9`R2~Wn()l35FF0)m&J)$TcR, `XH ,1"-ökCm NԖqޣDx5N6ImԠMMSL0T>~ɢ{3?b_/*گ囉*} + ^ߖKz3eTH4-'nɘ.]6rѡw%VIJsc7NNO* dqw.LH' 8@@1YJnum(P`VkX~$oEb>^Z?H>4v[Uom*8[?Sz?}(NUwo;ԣwo1hwsӻ Yebָc fCU9/qٙ9&*EJ,,Sj&י8$P#xg=O|gj[ӎ'w^ k:⫎/=}+>w kso2թrXV@h"(j*-oqqZju7G:Z{ @Pz0Se54MtxHK51;e1(>`5r]٪-9c|[:5S ;vbohﵿP8~Ki>w0Bm}>E92-\P͈klVV}LXc,%[#Uo>a $FLkzM;D6-G*p ~Ǹ0r6:F^2Zm;~o_lKM Avz{Nҋ@i;)ĺr, #󸊼5}x{DYMzZ\y7so՜vă#$4O=\Z6+Eljk."QBjA"bX׿֕ NN:C6듩fsjyMEG < ˗] gaA 3B up-ڕ8L+22ĘVJwgc}&}U>ApnVc' }+aUf'gLf D-oa9q廋\GGSlpoɗ"b!dC,H0R`DD:3%[mtѲ#Y{ .VBxמqSk+jd뮺\J~ ņ uŗI,}(K<`Ak2XթpIGurTv%bMmiL/ [*G8muZW f lsd M:\H4ّUe.j!0^(謬Z+ur3pAA+ֽ cUu \q:X~; 8! WIC 'XI՟@P!,߀JL",Fc4Z߰ٛżK]ag\ҵ ;.ƷlXnO9~}wJz/y+[(D@4!RGڭ6wA+| E<7 鸂l+Cۂ }n£eAj[w(%z}6$Z*!q˶kCяDwuqK< ћ+˯s-{l<5K nDh =(lV# & %c'R @l\7k8zxB pX9x.9\E ,ݬIo8 uCW5?!yMOڍkꁠP) f9&*~PrNu8zWCsiSݲKA4s?%,ZG[^I8wxxnIT#%S!ΩY|n> Wn%!NE!MOjP6U^ߎuD:gT VBԗ,vkMm[xy5E J$Ѡ d*sOr2~(T-n 0"`fA}h#Ё3k4eiq"U-6>6{T~m<=Ak#'Mg?] yvl k6sJvhҘ&׉t)з`i hGHmRg@\|1<D OD\]onYcWd:!޲ǐub@(sx|[Z6,N4sqaIAuAD 2~ތu&&| CܽCPm+BӑT׉Ϸx'0 jhFŪIiz4L4,;g}U\FQ1 :ǃy\` `~hP"""hvcLm#UIibSCyNT`n `|wo?Aj9iŀ+6zW,tdT"Q'H EjA}:BVҼz~I"r`y@B /G34BG" Ma+LuXAV75nƗV ~ z^WNXSQܯԳv߬~oʬMEeB\% iA܎=te7RF~@_ж^YL_͐liȃsĭMi'GXP˥6ud;ܶlgA:͟Q̈́82j?7dHe[PJh@^\JiIjt٣ 2 қpd:|e0ˋ[r^4z'i8㨴$42g Ms+]֟%wry"4 ^HBƌ{Ƨ1E#g}m-xQL:=YpDl iN9VS8[]~O2*0L4KĞQ?vkݜӤ.0ڽ,`kmșJ2[!s۲!>^$48eNԮ]2B}Q0+A4c $zgv@(LKgw|s]uR5B~6 x3wOFJxm6ny_S& @1އ;bIŋtiu,6Uld/?Qcoc{Ӻ] hvhsWPՎjeU9<^0,˯+0c^صh,DMy4=C):<8Ua>ae*|m{L%iL%_ b}ԄBGi n+0Sz?Rq݃6ޑQ~i?u#)HW,D=9=0Ci1[M@x%WW#iKl@tqgO3HwpLݺ ȥ%/q˝15-QO#:(6 9Ǎo/~0q!(u^gT꿔L oی7͇֬ BYgNn]{]h=2z36^ܧdN˾aH5j^ H+Ec'FX`8'9M[/ԧK:eV ik-5DEA ͳ) &D1X_hPq|^M/0z77H`PO%g&%'Zo=gֈ;=9|!1Fܿ9\0<d޳+ zd%_xU0r -MLز#I3pUsH/&$lM`XErBJ;餖0qh4JTUgagPwz5^ Ənv-v`:ann@`$BbQz /ϙ ^kx.}"[RF?l8P nò#)K27G8 G-jw&a[/5zjdFI߀~O #bipS{{Yňp$js(T\ /X M̓?7:kQ42٦{f(@11A::fNȏk(˅°,71Od`b#EA\Ap1ԇy6?$(VA5!`` b.Ǵܢ{겾csKEouxgnA}96.; qq I)_ȘuYf;>PBHČ}g':E3hcAaZzg2IWMaTV@ '#.qw>omj8]3 t[A*wc[ڟ={vnt|.yhl⟅+,.Jt 0dǻHVo]kXXԤwO[#-$ı^>q_aOfQBl^ U屰!5Y: Kpzdžb'AnbwM;F>ˇPRc%E1|ʴrK_ +;9소B4FT;45DFgX&2cۻ<vm*~EEdO!4}FDl~/ 3&Ъ× 9ly33. "F7A ܙ6A?}G)L|U-&?noǕyr,ЎZie^`KpK INH]@toFpU䅸 #E_ڡk@MtYK( s[AWyZ6FFL3ǟCA5"1Dz ?g O+<ϨEs7a%+#iWW:AO N˫6.je-/YmCAA8jx~Vjta1PIؖ@{4 eA {}r#2q\}.C{mfIڍ$#J.0[Pz18͂ ABkbܤY"1/zZvfhD|vBH)f BK*u:H&Ei?gW+lcjX.tҩ*'u /^;.@˜K>9:Tk_M(DmSQ&YBݼ[x@K X_ AAA̪ؿ9EY=5=+t=;zL;N;BBР ,f<ů%"^2*MccT s-;@y J'/ļw11! ZdVmzf)>U5ȝ͆-q'fzN_`C-` F1dme`UAIe?_5]NXEG]#~1W*G٧fN `˭&PZcYjw(\9 G]^byLTDk (1]'Dz)RG8~!NXBYE-H+w_o0s8E2~ZzL3"@CqJ {уܙ0H6X`f[2QR@&S%`q$+9o5r]uB.CL `gdۉ GXQLWbUic"p8k غ) /KA#5O0ijRv^=2 R^,Vı2>xC"= /sk ' :m3X.Y(S7&mZ@r0*< a scAg(QVd һt ؂f[eN߶h`o*wb-KX]G !=5=f^q̭̊ci],l+ҡM&K4 QH{6 Lt|*"<^[Iukrd*ο"ѼF*4D!2TkAr")83]ve\!{Jbo<M2u-#G`%0ǞK1iOǰM~n8z{YXp0 d %۞cJp PJPP#rD^%AOXnav(=T;!oEѨWJ @$wƲܒ2LV j4\SH<1!``ɜǖC.>Xӝ{7Y([eVAfޟ3l]p4/mUD"{h\7Iv=).K%/&LWR.Y-ǰo"?!L_6<Ӂ{:!YVO|1xl$ p)fc%\uow; MS9*#8d 7cя??Ra8)y\s"QB(n ܊JPȺ~?z20}6e+*,jOD.dP\n{ퟠcXJ_.(vI }pE( 8l:]9@@ 8u܍Cuޅ]}tMnyth\r뎹W]Nԓ&#4f:,VԒ&֘`E/Lx8*:b@COƖAk1{1c-L0?āQ3JvbT1V|+G*´'=22esz0s%8SvXLM'tظ9 y 6+s^:!iF3:n?7L[75fM Hw I3#曔6L{ p-/JOdu5Lj$2P?`~K*mjW^~>f #w6[QtƇsF[ H_RqSd|(XHCP2FDZ;c[n&L~᭽r(۳R?n ڙ*4qڮaEÍgN#ZC߼x}ST2}g;9eZat]!o"M_KW ],S0*ѿ;I6ˆ#ǹ@Kƭx '[xa$neyu+_[ѩL/=a./\DBŴצˠ Sj 4grWi#K nT ]8ݷU5&@;?U*Zx92g_OͰh1p;46[ e`kב,q-ao8L9[r IOĪ8`&X4Mx66f&?Q< kZu5;mIC^Mz-Z4eJBG_}dg= !'lfSpÈmc.uP׺,E@ҀY]r/vnoY!j̫ [Gʹ^NϰMEE qM W(E3WRK⭹hXXXidH RhxEڀ/B+p\҄>`&?+C`I"̼~.ҖE~g(*AUuE Q0ÕG$7ʓqbX6@xG@%r`o \6"CO=3A{lL,j(D*p gH&9Tﰹ:o۷c}}" $(~π)CSB!ctS3ْ]j6)OK-2d^K"CC"SG~1-`gͅ0TCe:C d4eđS̆)-Cxxarn.#w@<\ܟe&&c1g2wu./0,a0[^a̼RqӴW5 F߰Z7j˚$A G6gy A|dߣ`Vfbcr .82u .ajGNP%zI5^Y)H R5[R4Z@P? >^f Okg82 'kھ27]7dJwشpU2`0i߮?sJ)P} 771rk e3}\Xv=1(2T[=V-.kL' MC7;&'%g@($V+l]''ic?UWHf\E$s@$3?g,v{,!>Ga-Ȓŷ`Z=2 \zmi&`>JsdFSxi^b>*:s: mJD1eY!`<`/A^]٨-w>pENAXm!"(tFU}R7<^rKb]jk6N*u>ܪ? FaC6Å舱=BUDAevͭa% V:,-m^ k>^?MdA>~3<5G*1r-Ikr#*C*"7jaU0Y_k PluH*gm'$ݫ_/gifv߁6-xQjFIN[ZT=W|L5`͍swᶻ[:1!,fcAI/$ Q~f-aEE >1V3ib)zt ´uBB@]iybh1ymTZ;/(I$@s~_40v],* 120TO~J=r:7*ox=NY0dl  fiOmxnIk9j!$p|卑|AR V!V$W*uGY ~ Pf|]]D ]z΁{rfe3 xP+AB N֛a& |~eNU,ԝl#PQJYILg³ !)%|~ mL\*@r{~oU*!;GH|DYI CgjQ| -+i?j</C& s޻\;0_ n t&`g#i(\&㲤NV73!h,#n)u77@\$0-R,Zio#7Oj{|u:Gj m"0lEkus}Y1>-L1[V۟uwz_6a""w[:D dX_OE*!ojxbc(FxêT^sXz0 ׆> RQA$0AHF) C  0Bk/=K[‚@Os5mƀP_UM"I>|WEG΂4: +Ӕ H,n?| Su/M8f1 ֖Y|%G[x՗7O 86ɗŘT㪿eN5MzOy?cy+T5i{mLR\O&ׯR#ggG:ϥ s _Tj~7;D4tTb#˃@S?#/9P"hz!9 ACڧ5>vDj g'hw2uLixVb>/`+,8R2X 4P#PAw񕇗l*8[̽N`#fy,er,D ځ",":9m yb! aXH*urD*EB0u< xuq8H "$!# bmdEq7cVO9xa5H@.ůz0gYcjeNP_{41d1|~CX$UNj&SZP8nnd ~ #%Dr=: 3QUUL&v!FMD5X,`ަh.LSA3s]y}W\9D<ٳ~7ndǏ1Okh;vfnV۩p&7pdmYRn5*f54zeZtY=O XϿ_F P蚍੓Zܦ;vf\ UرYNs2 !m]M̎k7%[ghfms2snu|b\FĤJ==@ e ru2#=|rمl 3po!A;T] RȷZunu>}D_y`^( }HHxw]QT93LZ }#l╴LnC!"`VҘp<͎[>^x8T*،P:+=kݤ>Օ48vYk"eli[HFb(h&N ˰NR h3`2c-xL0r-運 ϴ+m1ڋaE@(\ e^ؼdH$K"A( yT<7*QJPNЍD8\4NUۼW5Ok''J H "j)d%S,6nC̎Bv-MR,}ص"d&l '0'AڑDvhs!6Sl!m@b XE6|1R#jHN8DQEdžzkD0]A2&\K!$U  Z"#x_\ d5)KF$i $ l+ x IT;B"M ;Hi!y)( AE =>O港MNQ݊)F4y.*:~imWڱ1=.!``a~dO-/p`6`S Y,3j_h4/NRʔy`U2`@r͚hx{>oچ vd *%\B(Moպ+=sBoDsU. g :k\X1rr6g]R D󿘆c?j%A 'E1SԱӇJӽ3Sm~lyhmVר Ĕ/AfWPј@ր`ϯnC31t_'~x61c1c1cUXc着/}P}>|N}}-0F\G)M)K`)He@/RMm|#NઉZUDfdyy,mAt6ʺ=bcw k;=+J^ q]E˫G_ UG61'Q"nLC~J:.fge3 6J(h3y)N%Ey~_^l]Nv7/o UѸ,AK0xB؅z:x'ֳ%}=}GԍZpȒV37x 3Lmɉ4B;DM.Ht\]7x&͎cH hn?P)r8LR3'Sn&ҌF e7}O\,$?ctGχ#lJQ73_pvG҇V WNކ1s<33.V)]_xQ;TH\fS61HdJv3liJ~Do=pK/>K|`ffк|̞K%;m8f>3ay#~OcG(˳M;n*et|\ r9zC;]EzqBA$H) R,YO<_@~Ž ɘs[x-#կT_l5m Qx@]HQ'js JܛAqΕQ CꦒI3Me 0Oӳ8= $Z>:dNY(SUSol._'jL)Qaoͤz.g7h4Rn# UO0p=餕eOOobm7qNeu$: P`_.DNuI$`L<0\~3zl,Ŵvk>(KsM:^j2#Ihu(3zQX X?fX}'[:MZ6gUL5QvW@whL%p'6b1rQgAl^ARK&Vѝ !59d۰Y~J7~J4{'k;9w_-_;ڄ؊)scFb!J=3.5bW"ß+ǝd=zp(ێjlhY%amnQ[!T:M5h(lݶLҟwU!Wq 8iz}YN f톒pd^LQg`?z[Y-qoq5ȠLHPe8V А [WwUyO4 :b9 tQ;umQGdg-?h_kHB2z:j~,s:]y٩Eh7@֦sbj0 `S S!xz8;Fcot^vm&݉VUDTJF# WB  @W1hjfh3#/bUjeBxB T:gVp݁di@qwtg֒gn?.i"iˁt]1Ah>{{_O\q忎մ*)9#gAEo!Хhj#c5UbT"CQۨku|U5jX#|V&~]] u-g{y:t`F1 aݵr2#}Q4.:9E)àm_DYWfn~Z1}Գا  "Yrvan? $u* 'h!|*wL|L2N _2'ʳx ~mW*}N-[Xa|=ud2,]ok{ZOϘ>=}o:K(OE.+-jJK EJxBǍ9e t2e9Y,E)7(rŬCG>wSm7h:,fLNȷu$Y6mT+g]"f8 :r~IBwj v9ɣ.zH>IO[Y/Q&YPth^vS׳}dPwwo WG__ xp/UQDQW{c%:sa«|?:ywT&:e}~f&Msg! >!2'^B;=)MN!weYD)CVHiҡT!$CX]jP.'F_|l;tFyS!rɝa}a+5~oS% &MpoxW zhpަq.Ѫ({ڥfQԬGȕx@<70(HC*G6J 3-R͆M.t%BbJ:*t-ɶq-ʾe7wĶϖ@SsP̛c }.Cf8syu2^ҽٝXys*I<*gavgGE_{li:;̆! $߰9#hZ7(l 33fNy3Ad_x [sg>_ Rj웘2222223_S"sC[O/.XX6Oi7Ÿjt H^' nO߻08I怐yykK˸U܇3h31}>}|==O^G L(?[k}Ugm_:S;槻ݮN3oR4xz 8Qzmk'Փ=/}N]bfZTӱĐs>k<4pzɁs{7_T-}W;ӫe_$`Lpks^\!7ϋu|y$hDm8FjuhsM+̝mX3Kɛr<uc6X@;G-|w8uChlBljmK9C[fg3imNjnΎ] Țyթx:*qxW-c)!2Aͧ"C"؞PrDHM0˧-x|.~ iSC1T[@`e_|7=ݒǩy>i~&gA~(f]zy>7-dyi8l;',X!.y>k37=Y ?3oݝMF ,u![5LnnIL8{ C0~29iÿ:V{,Cfжn y@$ [ dUXp:X k^Z2>!'{^Nv^'`.4ins{hoPϏCo|=!~{ XɆ 2a17_G<1(r xGh9X}MgN97|THNaKߖj]gMkK6Q.l@.bZ ŶUpV{TkTn{"}2jShSHa$Q_%1 E\n8c`ΈPQEQERN0% EC@"PSS7B*U%VM 1wױ 5偋zLt{-jwҰ}a&8APFvVgBI=xC5yb-^|iTò)Xj PjQL83ŧٚU^{1dB䣬MS%ڵ#ŦHU♔x% XoEReVe$SmeGw6θԋcK/$Ro>vMq&*PfFiM/IjYZ]*,7'ZPw2b̺Q6 3i}9k qiHNT+ T%,8Z#)8 #<0ɕ;J,׏~yOZ9$m4S~npοk5HKSWէ?5a{kվxRwB>? ^}1J#m FҎm3kIc!m(Ff+N<,oah= e6O_N.z)8^~\_><߫S6cn|IxT"@<\yio֯o -os)c<䧹沭}Lw^3GGeXOWc4wS+v=To<^+G_9(B[('z-dSI3~4ӥ^ hQ0b6 䬻N^x  {Ş{{ZU`ҕ2zfgMWo<.9\PvMZ{+" T7.(:QyDxr|{CZ W)ӊp> 0t*iMg'&K,ԊSgsD?atCLSCTBW:~-PE>$`=}:&_1kq>TRlmU1"|XBmVm_d dķm-*Av8?hk֏"8;x!N?kVd$Z(͑[7|PILZ=/+ iw#ޕT)W뼴]]?-iZl{tΦ/Ko;@C<(:ӾiBqj׀$E/^!r oܓr<"TB Q"s8h {nź䮺Y. MK![Tĝ|Z S6(to ED6/Ռ֒ۅ.hnAa/Grlx8߳f 8-Lz*Ïj$ŽT ]Bӹ>H+Ӓc(tW!3߄Sr΃Is0R(.yBaUZk8=Z~<7:u>CA9_KӦ0P8GlXTy,kV#ۺ oA_+3 .s6}{.1QOLov]<5]pnc r@8="y,;k 6:63`gD:{3gs{iˌT|Λ]KQ }L56nNߚ;9Stxq-LuM%Bfk0`Gե{u&_o>YС'~Ѓg(niQe&^37eG6^;'ʷ`3:9}\+{`_jj:u 1SMƻ'MTR\FiHr9XsrN7}e̚je.^lRzS] OxjBz6ƵǜAldžϓ}/G\jQ3zcX(:}qkIERKKxԮJe|gw_%'j=U"e=JܠCk$6}9{ɛv/]CzE<U{{3WM̞ͦz:Rw`=NN QF?7+w)祴CMb^ vݿYw>8eD [Î*zd#g<]XZӇ)ˇg>>2ҍ+r(u\L-L.^åZu`y˂䱉GʈNOk[%)h{pw>O3[<9tzZRh|GWs^sD-Ndn/ `DA5&zjS@^χĨ*>ų}ϧNU`(#.GGKxpco+$ x BM4?9Pw ).7VcLJj+ݚ'?ჾ t5w[JWޣ&Me1QN2*PY\$c$6VRKN˦tϵdZ~" {{s&YU1#~d6qGB4 IZ%%2kxa!dY.N:T^dҹ! :l\r㝌fJ/엂QxdҞf.|Zo[iMPw7;G8O)WzqUR}Ǡ/\T:^׊|\^8N0aXh¥v \'S \cժf4@85p͘EAZmqWԿ:UwNUSqCN$Zx›<9~73ZթR$dl@cׁ᧛<1гAI$cb8=:j0ɴ]xُZOocÅrTc2=ُ})Ԏ+yyH[DZesaFqEX5~\{,6!_qe:bq!B|*L%J֭SG̈&-=zfZ1T*8?bMF}ĵֈu5A9d"JUᨣx'iѷqH0Cly\92bޚ'jvffZ:F0'm/t6p{3r85M}7vS>º_!hiPunew񞽼w½yrL3v#5l}9e C33c[-JqlƏyI:bH 1OР/? X󔅺5(:^a@=tG%Xg^e>QSU:iz+P[*vmZPfaSR1A$3 ”m Rgu٭/};>񑪯\ք]07>JurӅD>lA;إﱤJvxٜI˃uH" Zj9';MȢݺ$stmjYWGխG9^)\kRE[5;Vz4*1rFhH).uEt淬1gE#OE{rfWù[޽969%caׇkqd[!Mi[ s[;n d~CX'໱ҌSX=HjPʠ8=yNv=ܷ'`&d wr6ބ<voHHJ3HqyI#A\f,x!O2f91B]%53M%u>57SΉ!gۯ]6|>6V,ooˇREdimI>3R^mo9!^N?%yv ,zC lfkoO#Vx/׵1brGMWCSR֯9b!Yd!DQg.>lo30z !kRfMٰofWPz d~~F)} [c˗nn oXx_^qu0YU(zu[xRoozۨ{bƵim6 \rY 6:`8tffS,;mF?(8MMWq%^"ύf~T(hT̼r|hПvyู tJ!iXw-KEV#6Gm>X| +Վ&`(*(c^f5p8"W-dj^gKИ4(`;Yp+%1LeT6w GNvvEkZZB㤞ˑjzO `GB|S0وMMy1͛Ê>As:i$[k x\:yȑuڮ8V7ԶT5rnZ-zQ\fS:˿ΚgY, xnr옦62nUUxZϮTK9sMŤ֝ {Oih}:Hӓ-&B>zdGu_DZ;Q/;>/DS ,cGjo"E~:'4,Yϊ^c&g{2<{;{˙33oj(P^Zj$!5; Y(9)1jcZU7M|S)I $u}ʿ 7oM]eĚ}bKm͡WM?l{gjCtgXys}MjxF.dإn^4Dφhs^\Ưw]H(o\WѽZ:[A-,PDx1F課Grjs.zp?SC>*xrnQHT4)DNbӷZƨ~LM |NaF[N:́͘}!ӆ\%)bYnќh3 5Sٞ *N-~=0MPC1 u/7GQ|vw>3b8~O_ȷ O;p7ɱzZ++XUJl 䫘A+,`_g<7kT`lhV׫ujZ4C':s}i#v4ԏMY[yեйc5Dr4ڢT3AJyz>ܥ\7wVȆ sD̉CVZw@c4aJC_G\o<L!ЄlXK 9n{H)bZ/Zۚ*z6> {quJIb"GbJ4oUgwP}sBǬ! Er{YU:{v 1%T&#bTU]jIRk-E9C[D4A!,P,MoÔpxyo&l-džxzk\5Y̡772K[mv uجxt^[Ap,=Nm "?qwu}^ևʕ{',m]ckU("mbe{S}">p걔ԤVV3轧\UBj&B:ԤڬI(&Zurbi"TwCYT֎@iE;"MaNVD1e; ⮓a:pҽ\ʅt]]\:^MTUVG-QKR:uC|^O";^+R%1 xiqw MQC}3WW/Wܜh H;EʭKJ=xosJIDne>GK]Ý~wugJÐWQo:^ok{ .3|zc*diS=֚D=WIeTEj^uOVxm6/M6F"^c?)k_ƥ(pwa^%☠/4iI| Sz$E11WίAbŤ8ھ ߠ*N.S:CB-ێS^ ,kBt0Ώ!t{I4mmjTr8D"VrJ7PGf6z&ӃeNj 5s_ONԏ/wKWjT=2ſ@ 燘ώ)[%mb^ug Ri\ȫLJo%CCCaAQjeuE[,LH8NtkjC˂@+.)H)Kt{]yfڜQ b8WKr[N-暮%+wk UU Z]Ŷfg姌s1֩hٸa)ش!.7bhUY*QR9^WdZ= 5PFGA\c.lp;7 ^3Y}[qcve$B{*Ί^qQ(hx 4ވ1dHFrPRbbf| ESqF DT Mp ]d"~2NS:2K 8Ui|' sU!&!:^u5=~Վ%X.8Gl:1:yPdzmDF]n9xIܪ/R'o]0t#Y9G3#ECK0].]SJ"V͢ɲ(96nj'63 ]`*Eh<{Mv+ ե}C__ <5w6!SG3NO<}T>:dEJ=b?` nPڋkHun$3~֏閞n^qƭ?]HLJAٚ`7EzLW4n" k*MkKۮ:i7h'+o ^V&KupXΙjE%. XJ|~K]nH3 m帯=TTOıG};N}ɂþY5Mp~jAkfO +?jrB Hθ6uE(KqOm_5> ',]U3!YygQ\'{E_y8Fj6>sA&s.5 Iu%]yM/H15CJЖ--s'nqa;6^ "yEX( :QC9gŜ ˨4{{YeÉqSB:CZ ;;8ڔCQcۣJa&PQ0/TOy]h~6Yy k tx!:P Rt UpxٵD}!bH*SX1V>g|拊i:P[yv_[LT^^wv.LMnj@vϭoԐڽ9qR֕r-Y0FwSj,? 1Wj #Ff  )Z\ N֥ =Z SEW"׫0KӨJbPYkRy0^V)NHwB#zTUtu65jIm^*jY =q냽3C+9Vfemʣ±D2$SHOGf%3ˎŬ}9j\/SO~6eƶI4Sgd kSkC5O._jT34LѨ}yYz6 ij>6"xN#8rbRhOeݯ Jպqȡ#ÇF/'I$`R vN>Wj#Й3.WցLf96rT}wpD﮻۸=m^/I׃]x'N'O Ǚܑq&BRmJJIzk-mzH^z4|h@2:I! $&ۘKiþkzߨax''Ƈ9ƴ89emYPeJ_="u-EtE=esr\I3r׵3+:\ʪEHA )ЛÍI(4M=Zl))[*ڀ670mi( eih Mb36fth`iw*݆\i%njS Nvik^ 7c֕C-EƁ|"VJrի^N1vX4d;_\eߎ)̓YwF~N_Ҟh~-’s7]:MۖxZk/1:K+=Aj&#^Iv5^'w",=8WwxU"觵E_%#~x٘f;`/Ű*RxҡB-Kuw^$]~?JiPΗf{Z!~^{ɩtz-ӡP./RTͥn6ŠRInFjU>RG5unJoZ1%aB(X(4ECۤi8腀sOcж3~:Q?b];wEXHmQ$m7OYߪII$3~mtIr7ײ̥էUNqE*-ü|E/ZvP,ޛ9;B;qM]n~H 8VviOgG ~"P#:*㐞Rf?? {ÓyWuseeztzQ"X~\K-:C>VFoEڊE'8P!ϗM~Zˤqǜ+/%:9VXIs; xy̷c@>û?|*ęojnÈfӇ})c]xbx  Dtg>'Bjul˥Ae5n+jM >5j=Kb @ ׎׉y9Bj߿p=$8 P4e<*FYR;"Ҕ1[4Hb#ƳmHɥj H7Q%C˸Ty!ܻh N^ yàe̬G'wb6jz'? F Ho%uP֌69ƫ}B/ArzIut-q냬9>5~k4`1qpԂ9h[Zx񟅧&۷l"jz7gJLJm$:m٫B HLJkfz-#}^)8TtZO;-˪E2%` GԪd3kX8Ʀz R*s QqglƏ&,;(ZT~+uw7VY__U2}Pv7ʐ"mc/SU$_}Zt {h3MޟϟȾt0ZS=flۗ.*U(@EB?Yp&T$ ylцÖIQ1bfG3ە};L~S1x`^X47fRb@uZgа\qsT`mK4*;`zf*&)Jݖ" X=0LK`u3:3 6颯We·1 &fkxޞCܧܷZۼ⒱r"wE*NͩL,na-e8o<-cP  ɭ>ՌdWny~`xVߐ.wq!og.Tg!bO㾔8BvZC6֓^W)}@)S`)pH/F s! GO8|& 9J)6T{TOR(FG_X+Rڂk냮g[vǜ!L\4nGkOj,)TrQaK9z/w z`zgd/eg{ qہM6j]F#tӟqvyŘn[8LV0u8LP(0H"(h?L1rؤ-P_la}#.|=2?cnA|C]'yjpҼ~=>/ow@Ԧv׾__[wbI#J7`;L$6l4kq"jeoll _>^ߘʉ wNjZ?FbV9Q!dn#;ŐVoB۝30r G\7 `\c@[|e D~C`f7JHHiz.o&闸, R>xB:%S$ѷ |(ryM&LjII$JQ ╭k ݎ)!͚ j`ZAD0Ԧ\զkCs…!p KPT#;^6Ά\*1cbT]Xއ}6xeCLkT!e#)$~M8m.5-1 bj\EJt~W]tI)KCĶj>AH@&A_ I {@J6jb4(Le}sgm,Cȿtn/Pp/uk " %#ù ^ねKN'%[br #8#?\C ?^ iyMtïz^u٠}7z `~{'V%88yh7W99(\2j?F/`yXP-_ & (PK#ֈp.(G%wF1K,$lC8a*$Jk2ͯP#[B#Ɩ&IFT~B :کĒּg%EZJPtA)|ݶ]n ʿ~@"`PL825u#xW` .EĦ1~3I:a4,Eќ[3EûogU3|u+v>Iom0"_?oC=ݿ~o_: !8py>g_2/NWU˼cd%RT 4"X2p&Ve`Ìb;E؏IPeI 1,--㗼qc6C; K*.^Ȭ$2oTի74.8JCnmXV^Ia0ݞw.ިͳ碪(vY/;seSfb[WqlU%>Koceg}],ۦ˷2_CO|{[h?V,3g^-঎QK$t2=A~"'~?܀!|NC$:)Y6@  Rנ۷7ܢxt ZWw,eԅ{%(ݲw5>R-V;?z-Nga_VIXX?¸@ '--w{[^kvdk1HZ-2}<W~% ^?FUF29SY8~Zפ1W5 DD@G!'#u�H?8fIXh@JFҽ:5`b(@kp>7pd>B/+JT@TE?BfQwOu !A ؔQMaQռ?ݾZK<(G޺w #p;BPQ"oPNH0NIـHY =?讼j'[cZF5L*INnN A鐈 )!d[J$">1RX$bF$bF$bF$bF$bF"(b) j?EQEQEMmmmj<ل}@ d (z4N RT2rF/)),!}D"bR)R @7-V6u{rHYKcX>Rr4% }?H[-$T(lf jGyPmp$̍C1 7*~W}4S۔=M>w|g9]hEtCv}f9 '7hhi}u BY1'_~~+?PŸ ?\2M0Rius , $p@kF""ŚX,6z1?E&3 {tg%ˤ'(q'E=oF,ARd )75NNmvO5V-2QPy%?d,SmuR) -1Bd&o m舀#s8CNVIRqװPB{F` Edb[\&Wq2’0 [In g1so|;br FxgCip2 DLRm@܁9fCWs,-9=A q8E"j_W_0EE2 h$RD*0( xܾlMD\!t"ekOw>uC}1{{6/ {}0եY_p(1Ӊj#vcԱg b}4X;R}[^wpQuSDĠH#(###GV?P6Mqr,YD<)RRvë+OaawPrRa]ǤIŨ=q(yܼtsᾂg-,C?leCp56g.Fq^L?1v f3/ڥwĊ1[ax#.~si"wYgRr䐂)<+&m)|sFsG:SUfj)HLEeKD& Vʍ@@Ԧ:slQ$L9[s\wO<8nWO[@Ϻ:~4|3k .DK:l$"]5h.<4w :a8?5]N~S:5ź"74`ԺT8[E%x:>Z߹S8Ƶl1.`F10d DI{zW`AWn{~a 7t`L`HQ&؈8"D"+@PAWrers+.]|r/ː|8dkK І:87le0I74{a^-K=jW&X>GEA}p|W_47dR_0Ņͅ^T Y@2LrH(H( <ПoQ\7Z i>Q>T_܋HH%BAdR`9[ M3r!-l+lW_X>m ca~M5^do֛}xf#C#3俫MdьV Z8)kQeFK$qΰ!Kx:M/_Z>o_v_r dt_gy#q?ݔvͿ3/&D먰PyTc~i J.ۤ=TkG5MϜ@%G=V] B]taANoT.$OJBH燼L6!׶G,AO,L&A3*<.B#쬚+m)r^X!^H$'#qY0p I2.ڥOV[[-[G[jz8L޴9W^'sGTY"$0p AGah$ !n*A}Ч׷G#/R>[yx}v?u,Om)yOG_}/?8)fT әACuY;: 5'/V$[[g9=S1 _ry5S ڔeOmTP}q40p`BH$?ghvSω]ycSrm:q_/\t޻[H !u^#y^S<|l<,R &l6]L)gFl]B^@\A7bwbT@ ەVͥ1M ,? ':x"bD{>@4YͬJ[]2)K mC_wvYI@}6^,BǤ'E N DCU9jM|up!kZ:Th }8 # Wнr-_8㈕SxcۨR`m 68)ƹߍ>Y]эn6o1aC,S;6Z%t鿮Gfǀ8v0?Ȋ5~`rfta؇m>XEim-V=T 쵊(t?J ]63q?\ch/'Ìz}Ƙ55)6Rr.)>.O3 sRt ,Ͱ{FD@D@D@DB)zY pۥ{K 7{^؝/_m:\zӷe76f\xƠ{',Pv@E5w53)~؉,l_+rv3tɨ2^ﴤvdU(>bY*E*D7/뫻Ӹ9S#D?ViΓ r!fG^c%hVP/P&d< ^24W~ UV(窼f1FDFӋ$9/oѧ0fuvsC5Öf~y|!Aڢ zP4VB@ԫEZiMV#yb(N>Δ[cݏ5=,7E/# M&Svq~/¯_jիT]]}8κuzJ|ԥocBi44Mڀ)>Ҷ1nV=XΚ]qUf=YA{vG-bS7aE2t짽7Hg6E˃ssHE&忔c1*\zyrE:o5;[""wxN9 c_0sm2kjoWc`>-{?>}}9s7[cWP ЃͯQC -Z뀻Wk'drvhl4mu@(8|TcӏTBav[.cXN<y@9\qQxg,3'~+Ay("f{lDv6<)~UD4i㮪a@h+m k;*EkМY3۲H5twE wB OQ+ʀԡVDnR&oRð:D$}?}y^Wż?g7N4c}?{~U8y>]p$n$30f;G>P 4FL3Hs1`ܬﷇ@ȽqE U"?o|/j> b@ )f6qy|y8pm9kxjg{ yi<ڴ>Lٙ$8dAhD:c۞RRبA:*^/)~ǻ1O5ٯСEڪy_FvlsGݮ zG8%mlpvlq`  sG>~ 6 ~ K!!5Oc4r-笿ۛϠ0Wϝ4?µkW,FlOc61%E1*\Q|e,OOQipZn@Zup& D D m@3T(~:?ʑ?# ^c c Td;/Ʃ`7\UJ T"o L5R7႗ ~0pnVY6~L sL|> PriTb$OGZj+j> ,%_x'Л\J]TRՔ(Lu(,Mh-n)P.q/DAF1c|X]&: :`STCs(ƛzC9QK7rB'A5(QAmpbPf\!1PY.UihbV#&KVYrQ%Cs4&0fca,bE@;]7v[{s7:Θ"y\ܞz"%<0cG 0XFD|>җz]. WO.Y+8x s|Ž"+ǁU=ϳ,.rJMi:~z ͏}:i-Z}hֱBtLT* c|V㒉{E˾iT]i|3^ѼHٝ,n{EUW-'P[qzmb\LScQY1LDxX(+h@ލhn#wƾ<{C۪ 񩉧x z'9)W_u)`ߐx nt;O;؛t)c%ج.oQ>>\2LbΗa r$V ^mk'𞷆ƙ)C>q8Z,GקcJ} Kud/)*LhVm*!4(HyND?yk&"׹l پMNMUwYsFK৫` y@70%KD&Dݾ ikYc-O]/5@'5&u]2k{S9cŤ{F_0.,@flɸhtAUx6=sA_C2·v樽#uE):9f1W)KNptb=}\6ɽɥF8$fJ0hު .oQAbNn~;gi ~ԺF(149ˁ3M/.N-(UJ Ϟ\ mvvhxcrcWyR̭u24U`7f{UA RlNĪCrΝepH|~1TYgJ&~N2So3q߮VCj_(젇3M†I]1/W-_l~__s=@my'Z~yP"OYzS1O<~>(^jiLƙAK`Ve@n[elpQA{~vx.sU߿9}꽎nrpogA3yJ;:nˊ'lR-85S}O=8C䟮eUUTb*րPi ']vdbt)wi>7_y_8x;͍qxpc8k?cpp2GUv%.+`:Bii炙P3䵶5sNmwOG:tm].Dy|.{3j~E4p[4Z7r߭G{jry_PrEf*& ar;(%=c^|ӻ [9S{P,}1(u.Wܥ3'w}<)跹& yߙmDǠtŴT<ي qhG^*Cq[>in}!CnkA*@hgO_N/@Ӽ6@j lϺsWV\=WZIܡLގLJ K9祢e|1^%hԾweZLLDYt }{Wk:3QV;mW`xth;8ttևr`4qKUb{C]>x`zzqާ3_s\2{qa]wCVCwV2]c:P> ILƃ#*g_DnqыUbM_ܩXw'Pж2cy!uø`e  r5j>=5,G$E 6KH+a }Y>l7^^RE-&2@&a3ִ@Z=(aI3CY3;,֐ J֏]h,:X|]'1a^&K9{ r3AT|:f((8! XIuʬep`g4\6f3sZ &&^Vwgw, ޱ[UŴVoNUUUUmt0S>6c:Y=FJU'fkHD釔KXٝ]0 CQ1 Rh jwt[Ð%U׃s C,]ṛwJVO1 =CY-KޔN(Pe!R+*"h/G.^T.3+X?3it\,t V'D.Cҗ~ Aa0ϟm z5mhwZ"]Umf3f*dX?3@g޴<Ku~{X4/wtkK6z,l zj J%#F1˛X.TY~uEB#wD#9_JFDHD@ ?Ւ{~z[jκ---(ZZZUqCe鵇9𷟵p]Ԇt LLC ׶Sl,9i0sL}KC^͊$[y ?M~hunLJ6 >}#g^#ir~}2^N0ً645l#ӧtD]v%3G,QL,/e$ƅOsNԂ5 U]oO?e:oO?aJ✱8Quۼ8uLRL `ۡg=8FՉ&ޅ^A*)T8lk(NNrK_bqrR]콳maKDT[ pˇG Gϭs])AO?!]@L@,@ێl: ppf$hCŎ4?3"֒ RH^0*LzG?>",,\ /Р Ik>5,ۗ m0@>+ x;_+r!0C`@>ᲁkZ'LFHDڇMU'a;F %SO9 af °Ȯ\?#3 Xb:@kUA6:oA2P0 ^x,:>op~W =H/%HN*vnnchk6%EŰRda* `,2tWvE(dwCR!92"\HJ@;l@չȧJ?ch 63 &2?W `{˽ni </Rܴl#1+YZĈ;`)CpFnb,Ћ%߅E+Cnw 0 1pNWynG@*aLiN |GV* |IJG>t;1; try}9ȅ*C #3K *\ppa!0[r|լ?7_}|aWkUU*HIw7m$ (6p^MƵ.s`z:$B_QD[c5ISgO(K:7lH C͓PoJ*$.gstja(U\oUPgm~̌_X$`A0p[]Yvx` 0` 0oj !颈1cD *S1s% >0!h!p SlSe)+gO1]iuz%y!3bs臻O9[dWg.Vo[01(& +c=]j fs7Զ V*ɰ=@`8[A9 ?OQOѬ։O#7~>SFrY.񥹓]WN\#?YwY`D×)ܹqc8;AT:31{垞f&XHu;цǎ2WRUJ_\YӃzBm0TƪgH|(u'̲$vC-%Tc!f+8L(䂒=CXQhN)M˒kV}JOY/&XsZN:,Xf")A|$)+! ?mw,qO 76`q̅Y 3e?`漿yED&ds"g! 28||ցե@4o݅F x֖J|dҲĄcyAu6LMw{}n33|;K>JիKJUXw]i3+R3~b|iIWMEV-|}c~."+k&֜Mohuin'L;A=>G\s{h륿7c*k瞈N͞SQvרS=!KutOO{S_A&{ߔei6*y:/ITnmsmF7=tmC^3q;of0҆S?$ φ@:΂fI4BT<>Ҫ[Vgx vߵ,125}dpLXG!ݹxc=z_1-dbquC׿VQ\ېn8BAN~c~ݵSn]ܓ;kaCnwwT3(8o3advfN9.Z̽svЮ{#ߍpaUdԂ㖈ri4&iy BT!{S28&{=bF)Hk$]gCI9 irI&oW݀VQ2{' iN+a(CO]{}B[G%1IꔤQh$hH5X$!!<9ۇtMu!4`6W"]KI^ q~;c Eo"_ڍgԝ--mYAiӁA,m s ^5ATqvzE}/06ǒ,bł(XLU~L+\mSx@TS?=d_F0zMM?.M+=>!{QiVnfan(=GOgIQg*g8)zB岛KSJX Hy;&%S7|YYó0|#_9 v jE20zKS)ievB t3 xOgrIl&POOɆ?};CACR 23^Z;_Ipwsv= N(;)"  sc!{[fo-g` 7Tj~GWd c}P:ԦGrEZJưh26lh:"Ѽpkݗ+sT |199UzX!7?*ϸ p]0^nu\-Ah~?,;fdG44TG<7AfY.NWj,]%01> ^ `rj,^ ۅ}}׻\cz0fzBRM4j-xL9zDIhGJ+Y<0<.. (2Fʆ3tFbh lK\xa}"P"m @irQpm*E%3Fk9 @ASK^0\3l`qߦezX˟mhdn3!>,2 Emٻ/m-.f PnHC77_ ~%}kXC*YH,"x4`#J ܒI{l?APT zq&E52CTJh>j`d}!*C" &fH.:7Vg@\Ou3zz<馒h-/~ Vu Qu}Rӝ^묆[ip>ٙ\K<:"^EC3K6z|PJ`@phc3h묹UBʣv~>c\_‚~x/ZҾ ;߻ubMXhC#ю+{f<a rjS/yh$g҅!n X?Ax ( fxŅAtEʢcws ux', a8m v=GxXj !+ nF㌾ ޱuCaP34qVU2BqyǦ#jrDӉSq6=N/yL@Қ.Y%4Zk\.378=U ip9glCBѸr Q'ºΕ]l4\GbAE5+A}[/Wq2K/"o+N}|^J[mkCX>bta i_P!M"rjP3Fմk\)sb)`a_<v7XA}MtJ,!NsbE;I/ēE&^`-1WvyW6E}9\[D$4 $k>'E3Ud!߫?ޕZ(JșİM ~1"IÙ_MC8(f3i{[_[֙#,!0/^ioF܃6 SvYnTXJ`wpȆԍZӒI KA@vxt>~\BMK$??K<)7!Z{whފaOB! nUmV}`!zx%K\H)`Vvܟ_G;>ש46']G{'J(C$ DF `_w*NL7-)$` Dce{(]iTy7q7]+I"l3KM:%7U;MtI6 `&m|tt]/Iٜѱ bN={i.2`3cfv`?idg2'v`I#23hl RL{#R Qb]-,l+iLr? |-Wx1:DnYdꜘL9,'B"mu71=.ӡp_K8J 5Ybc*W20DC'٬ÎBsߪ@t6ydM$_t7fe= ,ŋ`rtjsZ] N;Kܹ뵪nͺаLhl ζN$:Q#5EB z+t_~ @ispJgw3Yϖ,[{]@0tR+J^(s.sd%i -bQS'Bl6b=>"-ZJ53Jx\5KTB^d`ttO.!Wz+qbyǓFϙ:z3iڶc}.7>kԺs;Dyߒ+` 1*m-']R/`hGH+ |?a99֊6ivf9 SI!׾"IQO,Uo{뽼~|F=Ill'Xo7__㠤e\^쌒U'GYђ21r{,24tvή&s0fؙeB*o!2t)UW 7P,{G5Ÿ+ZS])[ R||lz@w'ږ q69]FW[g I $h8N4+4I 0鱾UAH{2F 3TcdV}탹{}a^\u>qk:^o /Z0ٷڿV1aM;0J1Z%MzdseuL xKcdX 7 yjf{FI9P2T_,ͪ +sAU>7>X0(Va/2&.1J#ÑCWe_yx7% (=M^/P=;j`(0 \.9L(K]p܀ji'M)rGYrڿO;Fbӯ@%KC.1ŶϚnD$eNu @p.ܜ4H^j֬o]sa6|Z˕W@j Eؘͺ8.T:պN6ݕ׆ F6TIqXv#&[dr`&[KQe݋"ֶ;+p$pQ?S&['9wuu2jqQb1W$ 4xɛ|0  kxSٌP`cBj;` ?)DL~^I_`>^|7C$LYvSgeLDu#&f D0/=^x[EÃpwX0uFӿ3!gy:DV0*ukM"X]uaaj60Tn`Tqqs̠XZH UA7Ԡ][jу4ߴI$Ĥ78i/Tafךo36ޕ5~ntOʁtV[PkqT?XHIId|;.Ks.2&oJV.xpF2tqȲ>[s v"NPm5lJU掇PʓSg] f "Cɶ; R7u/ZE.LmSQ. /b8bT,kܑQ5/|ڭybt-][E1ԮN` e1_7.fhߕ:|.7`-F"Y@<`!6OyS=: ^=off?kE&#%ojK4<AMu4TB + {SƓxYSɲ\uLWtx׃-WQ}lnı]]2utbp(pۄ"Ѻ=QH?ʚ,D`r"z&D. ? b۱8%9rrWlb;o5=MpQ,Zxw5.,se>ZsKx;? ݎmzR3l"b7z)j%/]p.@qg `;{4HSs2b"|PXWN2}M<Ojtc e,i"v1n%|.|]v+a R됤"j~f{Wy>]̦9p2K_*Cl֬RW/*T44k{צjهO"8Q[M[ ':8uin;~K/0 ߅IV=n{(vIgbG_ClIɏEͪ4mC׎Ե/%\;"ݵ`֝' lƐ(s6Zӽ棻PZro#h!rKlˊ[bs4:ݕZOt6SwY8K_lIs r!YR-vk#V+..Æъ&Y]CߖAݴC+x#G :yR|(- 3DGUwuR.t`..0 䜳VǼgB;A.q+2}斔7W0-iHS;^X ҎTĴk1/2 `zǃ7`J_x; 47g*5`s쟲'RLHzO7fR. !7! y?n ޠ8 4 $}y 7QQrJk:0F5LPn?I tBO|߰>۾[إy~1w; C[Oa8,cRZl 2 &' Ț"P2Cz?ʩ0cr9wo 7q? ?zD@br!j5MTCl>z̈́\bs i} L@bF˭BfpcM#3b]喰Rp:,n$B_Cb [8.PNۉ0#)`uI% ,1գ{V s Ly#g6L7킿&MGh4~M׏FH "; (DF"ڌ B/œ'>&w?X];yXo;QS養}&&O`v)_Reg Rdui"X9@08,/zކs&OGy Z^;:&:LKi䴽\³beQNޖHwM4Ėb-i#U2 P 9?&=3+%dzLu-=W݃Wxu+nQ+#fI\x^ėn/NW iw?2G>}`'1 XmD:AVmkQ1l?d4Pz0˱qVi6 km. Iz`n3#k뜯 =,:lzBA!J/q-2րYv'ﯕC2*kr8a8`*ﺏKNsa `Z~/oGc/9+s;aw櫏nޖA#Ixbs+sxgjp=o!yr}/,wOs@f ,CGsR Bc|~,MCxő: @ްT>̗j168|ywӷW%Y["bW& 3ȏݞg6!"FBn4ȼ?m|!gMv( 9C}_MEULK$-vNf/q_;Js_qq;VϷ" O}=)v ?|\쯮 aD/HG >!QmFƞg-|\ &o{nRsJm5{WQ~cf= ξ*ۊ˚sIwA1U{tI msFྩ9" <]+[1km" j`UB^HH7ܒ̈́\D6;+E0bUa측>5ݻV~~x ʩmyo-o.dT?ح"-wP8}e]i0A8&Xр4OoG&]oYYC:ƴ9  I~BoWp?^}|^Ȟ~YCٲ^}юK^;;lm4F9ՋyVr,e׀1=X;2LPIBN$$=d+ ugo0v3mMC.ܗ.w_|y5m~1떫 Pc$1*": (0^ԥڵ/팅(mTV1md nj`P Z*cM\ |]-z>=/޸=JGYj* 7d7mTMBK>B*@9ﱜp.]a/>~fk wgakN oz{۟cmtZ_оIӛ3Y&>{X9c<8keWyV/V uS5(n %lJԮ`}>9< f/8Wo6=Ԙ!ca Ln~RX.L5|vY9PRD!eҮ8kZtkdkQƯΒ^5þ7r<m8_{n&swXaףK/Y+_nYө%k"¢eP)YsW©ձc^_7@;`8[<ǮoH  !c-#xĬsYGDH&Frk_;7,3DQe\w[%j}ql2R:1@-ss@SDKd&ح§ܯyL{L.dLq/9W5=W0ʈ idl%ϋm0?1R0t7( Ev|Bz\IO.QT URztul˭f*+!g{u^ػQf"sQY+B1kНMsF- ӰQ,M{4T;aŰ`hC?Vc V ˨aɂ8w1d9#e7?@\VҤ=AIb t1=bF'2 ((spGwN&P?R)'A2fRl8IdꪌF@5L=Kt*͏d&a*_[{-}#/駣oZP4ٚ4I2'{Nk!;_L':0@ ,l^^wA'(:̻VCo1$V*`>K3n{#_汵ZddgYu Lg Nat Vç/r!sW pif\$j3V& 7oa"Y0BT7'״,}:4 7IKZzUyP1ߞ+* -`(]ͷF °gY%_T jD'bF"@"lX N׾v"w:MuqKE$C5:=wpQy5\ZO Xm]Sx^h{DGΏ_xvt\3[=D9!I0|xӡhoͳ4Qj(έ21wTN4j@Iڂ2>Q!R-?[P+@R'y4uoRhz1fyd0#1V D6* `U h1`/N@?7jYxʊuDʱ i"LuZe0b[-ϠV\n1`9Q_CP ?l#2r|: :xV/oX!=_{)^׵mٴ|^a |EYI"c<gEuMoQl؈Q@}Ҽ(Y-P/B0{5Ѡn囯}ZkC?pYh ɆL2a#$*PcU"U‮1A8C4mUB>iOUUXT"UUR-QTT(-oK An$,C$gV8 @+ Vda#kxnʏTS<#:Ȗb6C>$Ã`⠄_'oR!5paܓK'1A2ͳ0'Sn7 tMWz]č#"Qm /c0QB$uK~ѧʗ!{M/Њ1;㗌60׺dpT'Ox>x.`mO[_cCjhH M`/) n{Q[;6.v烍Gwɰ\rAz~>eO7c't?#LO>|*ipdŧDm_-wIõe~\BEjc'ln)Q[?]W'V'53.B&V 1>"A;%]SKޙP؈@ZP{> }gnjq6$2; Eq1N .Tg`fX&6 &h^>;,|Ue78wB))<,Cޠvus\JU;SFH-eRDT4DP[0ccaK5T,6t`(Xj+&[r_&ƪY6u(q@㭨#j>p@/ATƢBaSJNd# VwJ.V}[{2 k?,٨-_tx$oLaWh 6o 0 }r\uG(hERJQewlĊoPTiPx<|&nN$ Q+l%kxB>'N;I @H}i+RK+ E^lk&^ۈܱ2] j q  ð(1JV+`uP  Wiល #QJTA]OjDmA7zߏyFzvY؈Bj-e*R͑ow,mu[zD2G 1 0u.Oqx0xsb \%x)c%F*!4odb@yǯ~z,Y.2r.f\Wk*1pCɂnMb|Ij~5/ky-OMtӎ6߳;]rG.ݥx 3X욦_5M$vD^8@E2)X =y$>E9t.g9pgA H×A{$[W˝5s?ۍmYa|7.ydS!&aMzPO|.da3Hta9 -a=}boLHJt u\0O-dͧ; [mM>El7TPh!9nd8N$SlL?fca]sk\j"tvRDB,FOb?4&4ya(_pL&)-ЛV^9z8,XGbZ)$sm3yYG #1ۏN|rZГa-mub!@z'JhT1{sGh3C@O"Na^rEfVRu ;@Πl0.{'`@)ņ@Jwe]6kY3mg?|5v@Q<h%hL=(b,gmf73sTBbrZI8Z]HƬK'B nLrR3Rx?TmUK}°Oc:(7h_KJJn]>:9a %/i=SVcTs<ǶTU(ha1z[?D_G&'>FG( A鞿(IxySD!Kwnyg&kś0Wnpy8Ns< 7 :ԥv]SYN)&xMkE C۞E .Te(NG9i7:Mk@T&^3 w Ohjz)S}ٿ޾=Z VCw4Mj s?el\W,Q^AG%6Oy"&]HhK5&D{-C8Q_)yqrd] O9~\=؞90%0Wl3y h@@H $F@ ^:AFBBH1py<;r||X[ 1r:aZ[Л  DFcaLL@H‚%Ӡrߎ?įC#[{-oIvݟ(PS_m罒t^׫}=C2=~ |(cCmpؓ HzيWd-(J!R cG|yk#YBLVzۄV͂9%>zz$z]ll?<|޷W`&9h-vFn)Wm՚DD2(EN _ ┌RJZ)"diJ)oBKz{X RQXXʵNՑOd׀HP  IBD!ZQBF(aQ/1:.l|:D@) "=)A Bu- s.Qѭ!A&L@[ DА5CMa.bANMf-HCu`vQtd*p8a8Cm t55ptjk -@>q! FR!DbDPdld0J/B${+Z҃ oB$i1Gp7X6dNx ez=OJbAsЌMHƟ!0(d J!%ҫb0`NKhrzMnOe]PtFHe`ysZg"X) "bIB"E B&$@1X}Rjg2d/?o뾒;_FP}'Ikͅ Jm$<)qI^[kG!'&z_ lĘqP 0b& J׋)BG璁!O.#ӷCJq8%fʡRp@k|'tA_:,"/P.j1W_mA,]P%C"b7o>1KPAlP}ÿlWMB!+k%^A].#IJmR|#6 8!f.㿫'-UT"y[-B(E ~K zc5tlg f_wn~@lMH`qi$ Il>L7'Ia8^f;={п+Mg}?O/cbBH)U(H1K I |@{Par$QHEI:OeR-*c֧H'ۥ *$B B p`مc9)'n&r`$-UFu!f:V/WV*TPr[E 8=28 @:N(BeEfw0g, 0XF߁nكwC }J6wΏт7mR,rU'~nnk1(߲ufn~'Y[e}]Nܺˈi ʺSod3#}yB~M],/eVc[_^R MS}j;_lqSƀw9Q[: }CCF͛\Jܕ`^&(|JF-.Bܑ> $(tKv L(Da)HUCUF}> 8gK M2r D}ε)b ¡ _% ȷ y(, zYm~*z U캿m@=Ot݀)@P ~ָ8ccpFt&襊C'*Z;e(R#;~/;Mw/16PḅdXV" 8o'/k~A`^,uY@c[Þ~֓]Nh0~ȮlqeDYpN;[׃?⍿^fvjpwcbr=qz p3Rm[QX(hLLa&8Le\a_9=v;oY;qȑXqØ͎q'; N+l*lER?LshTIάA|*ܪ,u9AL{6g&I6ay>oyd#'eN xQæi楄~6c# ]afMyOJj3kP $]dD3ȭ@h7Ͽ \,r_`ݶp54Tasߴve=0io(E<,\.B'`B]ZXZS.xt¨C30?ynx"Zs5 8$eb; ۀdLi׷cBAV!;'F#1Şȸ%Og w᝻$KQswKP,*е)Zl30rۍݚ=oMGq6^Y8ڦ[[hiO  (aAp/g<7'X`AH MV„#i}|Mw/dO=t;0 A$U jAhЌ9/ǷǡVC5'!fZ/xD"O,rC۝ptȆ;5\/2pW1oXW_W( PPi-&u(S3IP`;|F)VaWRJcY/oEl.2i aD8PtRa*ޓjOZ|/|O`(y2g{zIbC .Z2ȋ1fPfq)h+֎t{Q̷E ʁT$GLcw/TG3|Ydb}e.]SV ![yN  `OψMՏ?́p;Wu>j z}l nkI@f7Ȱ5A Xߌ1d->rUSPfOVd*ɥSVF"ADhrP )LR8y\pV7L%rrytNt$<(7qnͯ)nBSI"P1 +*+܅F玍JF"man:rHx-}fI}3zR2{&}ZX?F6 ihعzժ_ZfVkF{!;KK~Tb/}ʟz}r&5"m^yC$Il"sǐf;Tyվ\ I&:p }bvja '}Rq1d*`CYHgOKT_oX'^YJ&#BєY+pO-ɚw1; L$Cǎ~EĿs`1*`TP?K>$w{Nm+C+Y>>-`twS4xKM 7h`An;[.f?o6@B8-efv:@!_F?S "sed\ A9QX~7 π`F>Yr=BUt(SXb?u b+bDXH%UG 궅]_^>3NHLM;)Oq -6 HgS9S,hSߨO vHHFe$?r! 0㵡98B=*(xyN# 7b3!ђ&BqpL}`!}UG5껶#UWm;C|l~[G%t!)Z}^2k'JՕ~heb>ZI/]Xglm #8PkN@&-ՠnVsM4Xm=C^ ]}!G䰯V0|:{CgEVX4N?Kbw{cyRVmT[%YY1 {mu SIp~yPQ\kF'jtWʽx`.t8 1R ! ͻ{@QlY}_Ʉ[ӽ1d;ث8]4!@XvQҖ-1cBHy-0 E a! !Kg@mZdMp5k)7,C|@PMe>^G mrZX_8%0S'%ֵ[Lq,p"碮qє~(j\vKH)|u>m7:қkQ mI3D⃍9uc#K%<-PKo] 8 ^iӗ?Xx+=lgiz47(U6fד~Iۼ¿1~(Rq_|sc*=-bonӅ a>#Q:C~נ4=ľ^ 2.sIo߻UtESh{³XJP eQcL'R"F6^цX)e(ޠ+!TQY]256>HM.Bu דٸ' \HݩҚ\ ӟ^n]K>N^Masi?Yb$u2R4R SQG?02<$#3{=aU?Rս7秆JRT;\WIXĢE4!C_MȎb)/YV ABEQEQLN6L2(q\XF,Z.0LTj\?yΉFb^45lr,8l [2EL mk+I s`g( kQ[|i='iA/WS6.("0H=`N`~ 9I^ځ81u$dShB6 @1RIzLqL捉Nw!ּ_cdȗ AP4Pb!_f]/6 c4RI D'W*R=N5ˊ\]yF-*oyk/ CYI"B p;ƔiAe+UB] h|m"␺~7] 3X"zϘj<^(Wa3/NJ{px{?嘰1H1> .01j?/n[:wǛҶhJ+!!,' k*rO Gc$6%:<qB3h9,?;Ҙq4(}iz9 P xUyޙFT[~_eU+L21``̖ʿ`}=B\&(eO %jL(?ig(cl$dS=\_?;y^▩@)05/NkAyz?)~BgPiBIѺ𶼃Ck~ lWԠRõHOY+޶l-=TcA?X" $J쓠w ~beuVkbL?J*.Uڒr oxfasH>nV!~w)[$$b ]s"k "c{׉,p%9:g~=8Xg51ғ`R*O=OQf c"2H 3scy 3 1ᾰi, Ll̃_AyZ t/7Wi_!Yꓱ߱%d%-{l߾Vød.C0$@`**"[,X ia@Un Q* :pASTt>3޿̞z}@rT~0#b* q^;-]boqzM G8P{  _\1uHv~cw5 Upv:"hUp j)2̰@LL\?j;Uc2oϽT5Cp@ vWiub53S⽟_樈\6#yx(;!oA- (b1 h`8 Qd[_PQGMAm/'F4RyU:9uPq"F:&4 lI#uݤj?xDYL6fu}tgν`|?xld‡ 'Np"mPZ}agܴG0 &25CB>dCKx (\7RGRo-ĝsaF;|+:(|uxpknz ~yi/0 $IvoڅYzOşq"ۗf8d#!w4GnSA )%Wc?sGd h37[B>/ j h洂h@ҒVyFr^KHݬծ8?fpKU{0џ;kQ}9>ZAl5B ( g2ܖ>q!$4E?C9=;8䘵& Ӏp@)ٺKް4I`qa Q1zXv0I=) ,Ro[ z\VWma6%8>HDF) hClX[$E=ok}!&y_|Q;`hqe1 RRڇŋ !MDZe!Y^O7 2ޚlJ+g1aߞ?6oGMݵ6׭ $H! ur+˿ʃ^8t('66&!|00;!PANAKǨYEa!85txɰͼ`ļZb=.s’J/Ј@I  da$'6 ~G~x+Cn{dIP89YHA ¨$` 9|. 9?Ou:VINa|LqF w/tQ7T Akc:i5*6f5nļ9p Q71OH0?'Iv*EUH8_z͒d]iW96EWaTB`ѱuIp2rv W3h4Qek F_D:¶ #[)^EOۆ {%wz!L:Ѷ?DjScPA#P- ͐+/`08M:zAfD=BլVϹԍ+)TXٜ.2F}N&EAhA؎ o9;T\ I 20F\[FsBC:#(G{ǬS 1 a >ݰx_501%٧1Dt^Vvaa@  1pVG_) nY!Z },VtC R(! $L$?-S,[i#}IjQ>I->~!=tO ̯<_5sjX%I5`¶dV/~_\(<@SfǍ~Ykxy+g|"Nmi !Q}BuyK26OBؘ({OцNaPK l˥.8.k&wgz_l@1J 2 |"M 7 HvEI @vsx# -A"ŗAaɱc|Z%\C ._fCTS p>_2܃t1!H<_َi5&p{h(x#g @Umlpawýn. 9^z(%&D5HV{2˨!S虔U_hK*kч*bgpa[^6㴧-T\7%q s6\# 9X( bdќ.A 0"/;հP`D̸+q_)]C)k @JILd|*"z0-l0op U%UEHҷmhNR(X[ej ZuLi )~^D.Y7dف2{fM2B6`_/ 1Q?9sE!r'㐆Cd(ẃ/)h`@7r8Fx8 Jr,`~@_D:n`i "ԕW8AL!H6p+ᶮqI^ZpS= dŹcImt[x/I1qbL,EUeAB7Q}rSHG"/7%)ehE:>յw\]rKxZbigيDb 0)D-ek-HaiJzPyB|g-J<ض,-0Xaan5+5vż7&6|6v?I5b ɨ nz=䅳;ߟK_U~k/oΜV54_U{xz  9񴟕:j-\yќVv:f/t[6b ̼kT7Pp;e˷:73.>~Zb)BX˒X5 eOJF(PCľa8 t~t|0!QNx C8l0` "<_'㯷|h8:wq2hiw 2@`~Y'7шx{@[h!,M@QO/# ss]a;D ">$ApD ^(7.k &]+x?KjS޳} hLp(@M@5VCQ>;@7B!eܘ2k"}#@ըjߺFX0}Ԥ 3u&H{/˞\n<$7)xhzO Sۦ48& d),WY@0S+t?0R7WsrZ.s$,ݼ.n#~s1|)0H"ZZ"t M ||cm7*YgJ%y42 ~>Oԯ9F, meG'F2v Rg[TożbKJ-M'vPi5%R01*ȧT™" bh7j2U?o-յZ,`>`3Dzd,%]#:и-hQPPM @G@^N1!S/!Miv[q*hW(P8CpD}9 fOsԪX_OŽ=1 D* {dq,7Kڙq̑`S@̑1N|Qݾv_L})X.VSHrg ?SN̍%vWEAwOf``ػ0!E Vj;:_2B)q1ʞE(ixϋ kF)`R#A!Y>%D;zt5'pF A@I:f@1!8x8i4n`V<-jFҪE2x5f%e"R6<*)J*(I1⑜XXZYl3)l萞 V,~lbP@5km!P"ձXu@ͦ4U:[b-l[ROAYb}vߛ6?E!5ꕬp% 5ԭZ"MW8{C?ᕌ uY!$I iX c! P32v u=ݦ=Y<$`M h`S8狎-[ _1 Hy.b ̀h 3&fi\=dDRkE2q}䟤6ڱۙncpԿx1 AvI ZqXj r(gLHHG#(^z|g_ξb?fP6 plJ wٟ3|:_c |=3328Vh`\LFKT[~#FCa,K~>YZsk0YYMz1 )1z71y:&m?gJ&^`]ޭ] U++uXZcFݤj2#/cu^}i?88}v*ԋ/3c]A IVL3 |Is3RHյ(ⰻv澷OHܪіۚ4Ip_R Uh?zűajHq{[lH,;N;?Ml 0PRW|$v{*yc4G!QWdU;uYYgѢzbv:D|AgL 0 "c pb 71\#viZd3m- x 7{ a'E{-%xs>Vslϛ~=M7֣5 !l1 'U ԐV^B&غj*A[PZ$$ ,@8[yj\N8` kަ@nۗX82wd=('$5;(b q=b1X:E~>68\3>U>s9(}rȚpB(h+C`$`P\@7䣞~s}5 mܭ lÀ>HRA5E"M{B_v >{ᙅ[K~ S̽p:ν?׽2,brh"H H0wm)@z?gn%~hԵ4 :Osio 5zb뷋cOچ\C.%!vgGPNw`p«'lI ?PO_b.PR/^ T [q?q7+~ 7>.H9p$A۠fWg+"\@P77_4chrr+oG~4ׯ6Hi, i޽իo NGa4!xS>%!((9UhuzwǧQ _?=2i0Ȏ&៝AGIfgM)b/ܷ,:aN% iT菞PdP}9ɌweW<_*gr"0 ÌP|DŽY T]~T^p\S Rc=V@cX=FMˎqyd6ؘd;m`0& B #LZya-Jk<2~&v"9Y>EVFiJFJDeB{L+LnhԑK(@wŭ!򺡭 x^&([x ])F!WClP[XROiv1?1YJI`$+)m!L9U_PBӏ[`K X|8 ⊀yeJ7ЀH(%!f qxZbDeȬQ54D0'ģ.ZZ۴ YG|lTJ?5)*Ȝ} .kyCQ`,dHK6fpQB̋rq*Epr4v~LLsl7 O2YDpߺ4J3~̒;t"<,5h^ ?Yr'JsCmF4vm .fCQ}P=[uDF9 xkm?]݀/%ڐ4NƘ.6 /h%$1n@ ~siA}Mq/@I86S${}f6^OsAbވ!W/D}1̅>z fsLaY˼k~][FzC333{J GO71 LCL&I/;}Ѹfh:~ĕ=e~n@`0!ݖH |E/zɭSc!1_=-_u`o $Zv}Jem" Ew+S냝r!6秐v=u!EO\53_SI>w 0tXV y'=iY $r9~7~_ܽ34S2ljAlD^mchʦ?-/C#2! I!ˎ!S!Ƽ|0PV<|aZ1fdΒoZ-H>@6 =>UT43)S{_1ceI@YJ%a;̹0g%QY:|òJaUtȖ2l`6KnbD&MD8H'ӍEgSMjE 9!ـdYrPn8P3ϵPCе׷o15i8E0Q=}/?M/)ܼ])|ZK+`skgO Er2:U 7` *FH;7BOJ8pmW_B$101(9=@ ѷY=MHX1tRۈn)͟)WHt]c̉u3l&7MΛ`6_w6; sN]UX[~R~9P a =tMSā$k4vkWDPG? >Vхvdzɽ8yy`}rKǯ12. E%~}t=gg0xһ 8-؛B:3v`zY֙ʓ)[Y3z>^!0"D$u٠O)+7o<-z@Q'@ 8c23/HWľ񁶪>- z;mG神RsGaSO7jfQ*IʩKiZmR{,V>FA8&U`6~ Oϔa< u W7aS+xGL -% .5~4.k$\N;jacnxpH o^ۘm'toCTXA\A3ђti0I{.׈ve88c6aH~ַhzTv\=.)(#’XpZSlsf' Ƀb4Lx:ېdy [-T|HYxlqs&Ҏfb5P+4O#ΟZU;b^!\65=lk.&sz #L64V,4,>{OW婭 !Y֥a "f;U1@o5~A/Uby CT<lX}.OBd:CGmYvv~}t:B|HW(MIT'(~(EW2@NPp )j|S+ #` f#/Th@zd(ZWDfaCr qPz5|D⠡H1$mm|~=FjnyVcYđb ȇCv<6FrԨ` D"5l09N‡%AQ2gFjlP)ѻL:OIl b}D5|sUR .CFS$~V 4 Ca%~s.i%/i%sy ##/5{Ad]Lz!@),O#Y-ñzUx)l"%9[U;4[Ig΂|z(< `ٺ(A4)AWr[h<&"aҦ htw^FiCwU=[[<7ᎫT!P9|E9 LJauOk%1m1($Rs1"@Uw<abJ2rX.Ey` ?ae(&)x>ր"]=@KMA?.vP fOt6C26hin;_#4AE1B*"z{X6)XhQ)@Lq@␀MG-9/a:BTO3ZTT!B4 P~o;a"pN1LDЌ+@ {qy6om?׳\69c=X&"ϊ_{ȄxL-G8@uۭg pJP9{(WgNNz>d,R!Jէ{fTͧE (Lr[e_wF> e5~vfnjp+{T2$xސw]5ޔ+?g=q-z[ DJ\cն'IVdsӕJ8`+ӼYPK1TZTzDU9\܅!!8H1ݞ,(0>hEmuD[KG6h-&G8__";m It霿z."͍[!aR%O:3i* |^/-P&Z; r X8à)其5f.$8\b-'YKWSt[MiT_8Yi x1A#I0-i!!{T["Х!BJR1'GϨ1)0Uz~ŗ էnv]RUIʮQ WȒI$i(.!!+6 n21&{շG7a%;/߆H&F8u'Bj&PnAϓ|ng_Ϲ'_>fTD:X[t% )8kdwAf6F1D0:m=bSb%ax pd6ȉ.q:;' !M_84z+˼NuA/; q[^9Voߝ &J^§/bq+!檆-,5/K"@j^Sʆ&h`|:̓j ~B P.DaO3`omˊo)*Qw~_ma~n8@ C%B o~qڿVFÿ[ZY*4́,/NAayR'?t)VyKF X.!ܺ'_rz\ױmW܉1ؾp}ϗ>Qd?Y>6N-쯳hA}cj@X`;0VT=ouhˇj"fDeֱ[*RG}P͔"aABjHsPچn뭗G.uskEJ/RFX}=D_il ļ#0PWJW&;w 8WĨlPr}}^w7E xG.3!=gO3 ]8qFa`Ƌ>CLʽ2z$ w[O[m%i`c`@hJŌ*WS-"tAޔ˧y];ɇ92C4"i=" 7L n{z&ŋUJQuXA<Өvrx}_{qۀ_lLhL"+4&>UQ+9x NX(0a?$E}Gfġd 8p%PDvthKc5Dydw`]L1.ԣzf0bpN+sA;Ha/Ο~LDeq|XCm$7KDCȗ@6d-ŗѠd }9o8oOWc54i>[zƺBHbCR3hSGw~r1MXc[[w5Sy^H>6&ܚc2-Bq1[Kl~4~AGz@ɡu }&ItT9auAuS,/3XYf*LH&^5paU@`"Vk8OcJ3x(sG&|T t\V]Vdv%)!7ciå ` -lm< F-"DMj$\ V p)Bʂe@ⳍ{T У\VuXx _|h Ud@e5"F,?e"._q7M"/Rq»{2(cx^Jfԫtn_tc8J"tۈNjX;ʈI"2ER^ WF0n+O Y^ktQBpeRVlFCYZL/$0{?y,@za ILxD[`?9G6:=[SʁC h(s+ĥIf,ڊM#Ü[Q@Ss?L]X`ǃwˋЀIP;GrD&$MSwT~ !.a%|o+~pӨ]%PNǪS2e|3/n/wDe/\j8M9s *۔!8d V+bV;l=>Q?{@@-Ol3jEt]7UE;/54a/nZ-udo8Bz=E`K1 ]"@Ӡn4 Nb5moSWʾ Q} 1$꼬>+f̠/7AiI9tƪBޒo9&#tY~8|&wsY::ݩA^c"g cLM.Zbhu13CZ;!"ɭM \HBjҰ~Qԛ9%H_,$ʙ29?KDuϛ/5G/?h ئzWJ/X$l10CCL.[g`Ōܶi?}yAЛi*_R+# LU݊FݍA;'gQAe1j$@_KiW3+%2E2X G"¯`]FZanuOVHl ^ʰ#s-ڑW h$[XEϗ&WTvi'A /Xt}Add oexq\ik}] \T99ks> &58ySa;~.DSˍ˄9B:뎈"9'QxS%+"9I]~z̕Nv˹joވ`keߡSY~xm " I{{K:B9!x^ Y,q2'_u9+Úmg\qqcV>P|aCP#GMaV7?~s?%Áϕب$Cfj/-{ aCÎ@B(@Ư??CaÙ9FwFD`l)މXA/AO_Nv\r.`h@F\:s)B\ilƆaj i wHE "4S(2twgb{z4Vkk܈єU2,Z)a^ R% /m(;XS5;ofV>%=}&2?{3ͻ݇c4(̩`6H+. {MuMP}>! Ou|['dsLk!e*dwMְ!VBnP#V*e=-B=@Lo'}Fw1G?n$O #HXD6jgmPcocF!|*T_"bsN$7/䍎Pn|Wh z[&8  Ϯka{3 KxDX2 -8s% :gWtZmЌ,mdR1}MO4eJg@`~x7o KQD(atGz{_#o`gKv}F~8k5n~@ "@:?3)%* B7x W _g\:)-N`7 52Q?춱-z~? {J.l| K=‡*ϺBpB`BGA:U*#d"_,5!H›Et{P eYhvm[k!@9ArQ" H_Co$I1Rmᝫm T/b5I.bU˯I#@"DCc(28d H'L4­!2BQH$SWrDXԹ7y-8̉H4Y{j8?,^B$ e w۲է eLb/]@@A01.9"<| aעro;'o0 T NԬȜo6B I0! ?{eծGuyݟ'e`\`a ?/?Lo}C[oQR$Z%į3X,/y 4 ¶XԬhWHa/LP=8}1_2޷K84XR C!l`0 Pz(C%o%] `ΡnD,~LgD B9}\G- =DzH*_6)n M=NMF}ݫzL/t &oW,5|,Qmb@kx:&z$ShcMe` c@1>=l\/#E3mEp{tz%f01tĄtVו.ivkT UFMŬ8OGc*)9}) &-_ꋣ_-S/^|tlAv$D.8"[M'Y ,quKbt1 }v>:og5z ɄgW={;L15)f6 <^ pM4DcfF@Kjkz?}/9{7l-)jn(UqkF/Y *~ZDl9Н硺qkETG:'hp5ÁF*"&:am1Z6_gD|/ wБTH ?=mM(>do2څ-{ȥ s PmS/R;q!B4Tկj$l2/Yo$3\Qz~8!E4ΰoUGȂێ6hd.7p.(ǥRLN±"b ^GBr]4!щt9SV "G_ nk@XQy5y@jA~T_JJΝ)SF\k.֘y"d=]:lNgBmgR1KuǼR4Mn?}xHm\Yt]] ~ܠA@XbeJ(e6%żfrڲ5-.0/8[9Xqm6xZb7(E's>mWk0 Ix 3)k)$@;G"``` *x_.QcRpqzHWFq;vN 9p4@ wb@n3,u a7cϞf&O%C6[ڒM>{M"1JA#%Z9Q  Co]{nV=j9KRŁJ88kc iHWjԗGK"7>B0OvK[}ѕ *DLlևX!d]*09$J⠫40+#l.[ Ȥ0Z fS[]FD*A[* lJ'*ؖ?rBhc9ErG~2]/UxnhځBMQw.V=7cpL9{ȳ;2blF΢[j4̱>E_lKk- eQ9BU@!P18Bb8[8"dfFqdو4NaՖa Y;+WV 5qW2ʨv!Wo"C rg!P=wY{6tA3?'OĊ7` ,0 v9+GsnjC}ڿ{W,O4 uGAסӇR}`W1x>2b]^0p1e(">6 7xG=}Y,n"̱1ۍiZݖv=>p8OǧawWd-l<*I1cmi@yd`¡''Y y%?3\Ky4(I$ 1^r-s0=]*@{xwm@I޳9;3<Ny|S">x>`sí 4 o:&QLv)Xޤ'혒_spUCXF1 >?RʘD D#L<10no/.@^wQ{^5k_yג|_<-NW|3rNOJpf[u_fcP݊=aޔ<*]l9L1_,");ox+n4;-s x k%WUmh7bGUnUk*l4n;RL߿Wb64T0) xgxs'Xv- v(W=H8K6ڎ6zb|_v|`G&WY5}mL'>k-Im"H{/T.d5T~{^?M{kVXx%7X87* Si=1 ,KZooC}yz/97f\mCtI6W߽/:D6?;j^z x[? MV,фiUBc~Ip"w:og60VwRR*0y/5_'u5ǚæVsBP @bl& Y@Wm`c#qh"$ ,`FcxB_bDлQXن]q'ĮJgO#̨^1z{l?Ɩz㡳Z._PEy^ᢔi");d"6f¾fvԊȍSx%eM܀@`@P3PY'$D;ǀBA Ʌl9wycbbU%s& Uz61yRj3<dj)0ȿܾdO ؆)##JB*0\ Hsokmz˛.NV_9q)9z#~xlm c+!þq&Xz8JjWws NN/.gkR(%vWW,[eQ̷Ucl}%$C2M4-5/'kI=y_8#!p3:r#KVv3e֎*GJݨGRe!눴q` )R5%> ָ ΀ڵ۲k\㌹㴲=@#Ԉe&Ƹ w߬^ {aY?.OgGc֗脖N2FAXypf-Cƻxႌ ߄S7; ,+*%7ϕ ǫ9+h>/ 96rx8@QXՠAŃi9c.2וYIT gU\ӗi*`^ .AHEά4#KL)z A8 }ީy:.[cw3_lx`@^A>*yE8Thfj-`+nzGRwxNt>Ъ~dBv"]܅SE@:oOUDo{_O+pJp LW J:@kBoA X1lxz=;oIyOs^o9,\`i6[ۆ9;E|%,r=2!gC-&G@0#nmB 3g;]` ؗ[-]7wBvSD7Q&Es$GrN]bvpMK M3DU# .1Φ5|0Pu(ɂ`=g<² CXz%lYb*lFwICe-b͸fhJ^BP;6y ~G! 1;P@@H׺uAq+,rl9SXH!whLӡe󐅳Y.Q æ_`ކI04_Nsɉ2Ҍ: n.07޿;"9q#>?6SgAۭ:SխD{W4AeȮVrhdQcUvAnǏ^+uk$4H91w S/gt&5?gjI,?4GzP'pȷůۺk 謋&t ӭ&x8aEP$ 5F3*OْVV@csԂ7߳-a?7[aIKn}Ɓb^f*7u:D@/ D@ccL/ 2&]Eޯ )>@hbj1u8?AvoUZ*70`ڎu.H H,H$~ oS}2X uo ^,Qxsȼt!q;7CU)Ӳsg=x=5s@/Ssis?fyj%48SuژwpE}1e##!J\<3)jbD zk _vԡ l8H,9sUǔ(rLWg`>YYPz5 oՀRx+Ft*0kn`*  C3w10<xHhZ}C .`I\ N:鹍=JC_NS(>)eDrDQM`w5{0,~Iβ6I^ io#-?!Ж<>9N[$/qf$@eJcq X_mFiۚC?W{Mg4xIqSeZH}v=.{H @ 7u%jkG]2UT2q 9K5{;*ZBfF ϣfX[CA@CPB) FE D! 0͛20۵ݸѹ|.2qTh @Ś))~Ec3BѺ|I/\<7{`e]H7!뻻uBz<a\tیSSbcXI3ӵ -ğ49 YivH9/b}!Hb}Av ^j[51ۣ;Z=oed[glag}/uv4m&3}NMuU@^~bjUqP Kb !30q!]{MpUa*0X "1I$(s R(4P@[)FF2~ܫ7XBX 9H!$kK 8{5D=۴:쎩҂GlvI1䙮F2)ov0:eF# {U a 'F_71_8À(CJ;0B=GxF0B="v1ʑ/6Y\2 Yif <" {|'nE8vfcC?30qh6|iJ5nX+I$c:[>եK۪i xܷ*$l9siƀv`@.cmtxJQ/`cHB1c1cd,s0.WLl\l@$i0d<\J܍@dh 1C'\2L |¨Z 2P*A.FBC(8#.L?,[0_AL#q  <QX,CeJ ,–pJLjp*DRJ;H%P<_V n`DӁkv0`@YNXIP$-dA@d # @a=G"^!XKKU=U65@0e" uM!S q;ż/ll@vAaQfsgŶHTA-QC3Fƚe%LL3> rmȈ@" 3;v*z_bGtd!$!mDzwg**  a#WŚwHA5Hz,,c%<':|.ĦaLUD`g2Q{q5M)a wSW_po!1S(IXYDz/ލ"cͳe1% '%`+&,XHiQ+R LIJ&IN |EÓ'Sf ŁCsIڗ͊fffffaq/½r'MpL.1L.1L .1L.1L.1L bYiqaq?' Ckv.˦7v)\bKXD+@n/,ոwV-@*Ae[D 6j$dg'***** N!=$< =v+>;l8o1"yR / ÂRy~=כ@u-Іg2n0#M͑CK-ip2];0[%-}U!U Qc}VZm+[a+dHo;gxsjbH0yK njP5h þj]f%FI8Ų͸KkĀzı3Qgv51";(nH^9j )$DڈYR-TVtC[gif-Nѡnάd)"FYXKb4DY.JQSo[$C8H:r>@[fFFGkzX7,RN@,+ !,%GUaSP2N& 02d2d2d2d2d2d2d2d2d2də33&fd́&L2dɄ 0af`e,X[,Ylee-[,32ffLə33&fd̙32fa\QMҲi"7 0DQ"E#/FF)@)POX,RJ@ )jCg[ǙJShg fk \CDApH"YH$Jj"X#z)CdGjhP(b,PR( -2+2$1*LXb,2TYAH)T$,DFY-E# OVH(DHhy|,$T5 !_S_hI<kl-ڋø޳t32.^ϗq!P b_ Spݬ9Tn^2CHJ4Yqp)q7l Gi~S TA TBJDwIDS-?9QilȘ&!sr)]2)Slղ}"ڒu"PG٢~H +=Oa IatEVA|H A0'X@a"AX E,,:IjE@-2x0]_oDӁ@vT*'eB`Bϣ"]>k7Fk! (i_Ăbrʀd(+u VNd㬒 Vc+fsq4ȓfΙ4=Cq+!yLUATJc3xjE4Ьf @,VЄXpk 0l!!l (t$) UH* DX( H;#^ 1鍄lEDː<?$ zO8?O"%ZjJ$*,_LXk%?f5P˛BB ߂ I@z<5y!XCHN>{/\mkX(%|Id/0XV&Hoeս@1ădXAD +,i%TF$dpPşmHDR%cD@dY&G-F,Q, E"TA$  1kPN#[QӞ9Exg;ɱHILN &0?L RC!tD+' ` 6ACL֤*1r|z>uˮuaX<&@457 {% [D T&C^`CIzOWס|lI `@m 2f&ONMΌE15@5 0蓄Xm;4$`T$8`R*VLF'DAa0wH?!T#ψ5-fO"Qn'+jɕG!\k@0Ĩ(/qLe 3;H A+j@yJդ-PH,ld lt-HNYl7 JFP2X&Y@UZ|BD a= dBc#ak/P6 Ay];20":}ܸYe=|I8`ƵnI d>Q` 9ӿ7seyl2% B(lN<(O2 Vdɤ&$ !1 7l.P Uw=/ H U=u(B\78QP7HE8F03BG\=ɇQո1̜nP F.₏d53BkmB y%RRsPHhܤ+Hi 4 I!E $$H`_sz0 Oq@ ,`jJHy`jUV3I{BQfeA,١UPZX"0H*h(uRBBÄ$22DQYA;`2ad&OOGހd$W2BY[d`b9K-,<ۖX2EG 7|ϵio_Wa S@h5D"ł@l-:v87(rߚILz}`8ĆgJAVAUUUUUUUUUUUUUUUUUUUUUTDEUUUUUUUUUU_/P2^;uELh7$ b/)N bQ DH&L5a'D*,4" I b d>Յ #4lߛDؚݷPSF~_}D@"H$XQH"(+Y!, `, "c@F E#B)GB{>riK:`wՂ&0QgvCO8 nY ч/sZ35Ld;wkg0e(&GuDb\rjg)&t1w2rr'8aa j`(Q^\#RTV3asVpq£PY䬸٣S vfouMǯLChi=^3baI3f"ufFmab@I}-xֻn:p 4<, ibH#rH\0Ӎ0(҇2VSNM[޵ˡ82;f_@oUYiP:eAvu6&e:dŅT:~,aVFT&|L!dPT SvUM0@Hi6C=J3c֝N;|=͍d̀!ҪX*4UK m#;DG{97 5D+0$$$ 0`ܐ)(TNDRНD 2,# X*HiX,!.nRЍRH5v9HH)E%Kh/Q5\hG(? Z SƗ[{t%. G) 7E8e4{]/ن=\zY7[G%+G^Ҋ"TM>|h" ѥiB"eςEDbC wOU4Rp1V12JȀ2n8C!0=Obuƣy%Gu8o}wV MZsV]_1rD"+v(PQDQD!6GZ{՜G/lxڒWWԉK{Z-$dAՃ)!I+R$BJI,A!1Tɀ1dbB)dX#nb*VeTۀ 0|ínGb)9M9x힞c<)?xtț HE71I y!8!!"$ 1=?zG65nCz"+E*X*A(+U- Pd  K!HzMY7eڑ܁|mM958H|wڠ 4zFD]+:"% 6U}twA|A`")fb #3ML%@`NnWٔT,^WyF8>2$($baJ=-#FӺ,ƊIx;SAR zq&ڠ%w;| ~ $$P$) rn@MpW{뎞~yZ#ոݾܰ>4b 1*r$A.e_CWm*Z;<ǝ:C?g|M5mHVGiYr G>TESV1fsfVKmC87c3CVnfr+i\>dtV 6ۧX~k%kmPh:",مbS&bag =Yv iP켳@qմgw>al =\]_/R0;Ij3Q">3_[uJ;y#4(130#rGt9>>o3bYKcoشe7 6IUeoCJ<px9%PAI8P)PhRaura!20*L 3ZٮU/𑾍T%Q"4+Q0h }7}C%Ҵ2㰱 ju Y # a[&UծwW݌^F @<4Yv<@;Qi[\F<ՂDTXq*~Ά80 F,tKg'i۬h>_"8JAK-P]uβ7D$ 60|I,=rȷOyDI'Y?EPe3D0޽ICĖ& ݖN"mkAse϶v~x{2w!,@*AJ"x1Q,K,TUbxLr47Q@PBNc$>7 ,$ڃ""4DӀZ߼>(E"Br@?$[ -bv h1G1l+IɯH, o1lCЕ("H[l@vL dC]<T$HdVI*󫕖$"0JZRҖ-)iKJIB(`O?z흘B2@AX RL`EdAA`0@QTQXgERH"a>̗uRRO1~7-ܠe**L$PKOk/, k}4 "C c͝K$!=]qH>*`D$ZݣRTb1"A(P#ILJ2[bTEYdL(PQdNPtDbPdL tL Tł *(F*#j҆  ,I-)"H#" *]ibUVw DG!k&>XA2#!$W^NX >y<>}a.2- O,,k[ע,bb]Aΰ @E'2$`I @Dqq I XYD?3x;ܖ[`0 .32@*!Fd1[$I e-mE#34hhlO0iNXFE8 ܑ"r fCuc XJRǵa3@AvR ŌQF#+ "-cUVҌc1c1bUUQUT/o eb@HaJ-0BzYyIa%A`RHYT22j)17wح(7h ZDQԌ DJ- XX B$$-*Q_N;0b(|ᐦSZS$I?'кTj$ U?}yϏf.EJ=V+2(:pރB:i4A|q&̚3/Lx-눡` AK穿` $BE#M l{6mdS LGO% X@0.#"0DV_-bK'CNAPDD7a Ѡ |wc!':I|SFVO<'@D$ QMiX] upȭ5,ERb@g3)ˍˎe2v>W~cQ@Ҕd }4@AZ^,EW=2$"(B"EPu)*)zGz##kwoN2]"J,QZ2XE!Ҟ+px3rdxQ `vj(xhD*h$Q J 1VV2,$FD bŁhR,f`46UI rb()i, 6&`Q -5A"Db"0FD.jDȈ }f$ċ#DDQdTUT"DVA[°IJDXw>ʘKe `.oZ;}*@cy,j{sh@!*x$ A[vfb1/K 블Ol4\XKԮN̪Vj/ѺtBA$O(|^e&n ԖS9Hn0֪`\Ί!?*K=P>_4īSxIg gC&莊΂YCn)ߐb+8i'bc6kc}Dxg;{{?1>N5M͙ǞI PUM1%[Vpd5)N  IYQ5j-9↲Jn T#(1RoP〲~`LlHg[J}D*ߗ{~f3>ǽf|^é )i(:\K @E%pWz&$g4 r w ydC(~î%TH, ,s*TƱE1QP(hB T|0H21Y f 2R7pBjR,)]qNv :XV, JAMIVe)"ZGI)"$R@hm,\WIԘHR ycV;%GvIzX 9vQrhX0tH$( Vd-̲H #dsSD_*EᄒMH3M2Nc1tJARvbIAEB,g]"1fFTY!(bIc+dqoJnR(/ت,c$$6F!ۼ \h!kBh(+ATX/gN4N%Dgn)nbQ1--zj&ə۝I`e޿ دF6E"\ITp`]/Bwzo>/= &psnۇ^=!S4 m6iƋQ( ")0Ű8|"ai;A sPP)! %K{"FDNCvnS9T օm`De}tQ!U4i1\Ff'@?rC @0O떻tķZC+?{,ip) Z!S(EH@MҲ ôMXf$ dH @F$Y"H(CgZCB,+5`SRR*)z@;-][Z_ˊI_Q:H,J0SCeQ " xA!ĈG})5j8!JF , hFBT͗1m-2.U2baFL@ˬ@bR"?.$;swa>oK>O2 L̠.TaцDul[)L>zv0H@hM&hH ilLׅtmO:/ It" "/쨇d<쬊hӭ&*Adh~C G[`MAc5cXB{BYI|s SL"aAYl6 +A`-R ȨBFHPP&'*bo_Ak-H! ubd;MNZ`Ģ E4{jqEQ5:)_5>@2{,(NYJ "*~&: K77nL}QVڱ}\aq2>7Mk7[g8e悆+A]te*g_$qԠ~j6R*(R2 ds|y砰d F)Dec0bUzs׷} l'Dj{R xt{ 'y"jA־s?k:!$`^$!@㔻Htɞ,25("³>ՓB/qmmBA"EQ1d2 3~wRČR P(h>We$5kZkZֵ>Mn,<,V@X,!hԁZlE TXhtr(kjq$Kt?g>`G`(ɠDǿ7:Xro1ÇL/f1X&D!;A@khx TQU'h5zI'a Ӂl+z;M!džP`v}ge@Asmf8oƳG}B7h^55qzMȉE#6Frх@S!W0S7ۢ(¯ufBy2Hqp38Kp}eוi8(UKhab]/}.86fdA .SPT1S|j5-EqlY~pdOZ (8j:aӿ5"v硾qrO=l&խ(Tِ]I:€}obgq-w{aa|֛ث0BF`l8iseA6bDJ)|5D2-wқY+I%$gg5ZA&AW9wROD5[ҲgCk\b!u53kF Ȗ6I;6J'!Ƥ$9M\)AٙpÌ#}$a/K͉P ‡f]"6WKTPNEH,f9ەlԥ+df'FIj/D+Lg.@ Ȅbtĩw%i!SYK$Ņ6Ym??_yF'hr d@^){ǺT%aE"jy٭ޯ}'XBA2Ld$vͱ=3ONPYrx:<3lsM&݋b&BS}'r65yMnN vڔ5PA F*noYUN϶ܷ| 23] &j!$gmKɁ+aA:<>ʣ֯C(M ukŨg5WYOdۃt85\Ka1otgxL( DyW2G#dIebɖZPۆ:kW7rL6$L2eceD Xo\{7T(%TܬeBgrM#&Vِ*蛕787x4]= e ֐8`M&v\i'-v軀 L!ɯAif^Q㭸Ђ7-+FE N 0N- xL2Qf6AXщHJ3.C>ڐL BQ1渜u >* ;(,ZVaK9b!#J0*ZpE]Kݙf3IJCFњ#H|VRx"b,8ke*mC J"K7M3aviBxU掵cJ{Nz h1ECmnfeh3,0I|<ìMD@gg>qlC"+)kV-4M*oq=ឳgiz.eZ]$Utlp{Q#\{=#! 'Zg"ý`pzpX*bmZ[k^tfJZbΒE'<;;"pv 0@__GkՍrӟ>{KV\! {[kܯjґ+bm.'lR^*h`k,CLlf.T\qŹU%%*9Mq0zL6 ;1Xb0IByP8$:.Y!0ȍ=&dtpu|VyμI9(3qBZHy *!Km!E -ZRcPoWgM `>k{~OM7̻Y6& aQV^W{8Z#J9tP[! ո2E~pLiwIxV/hL5d#L Xbm1FufǽHֱЦ첛5RHOg$4V5.HK'/ e&o5\W︦%:f4e5MO~w5:"!L,'&Ҳ{>mB ^zkeֿc2l?kKFNШoy&A[&:\FAܙNDɜwx0A3{r`N`qW([*[SyٲU]]SA -?a9ͅwv!%P*MZ[f$u2A`p<e[ +!Bb[)l:X3UA uga`%Pn{) \k.\@Ȭ +"fj xR0$R7P<يd Lڏ,@m}` Ob{ k>W4JBB~r@@V#PYDel@K[!I*R#Q }EZH\\[1 át%f -‚P}AbB(p)MI{t"n@\ H8BV:Q*~PLfmHeWCscU[ D":BEQ\^hQ+'U{pAIz"1VpTN1yY%X0#Zu nS)6ʹ{cDNmZy+{qUDUvT`! &ftV4զ#R41aЃ8f20Jə cXfh[3Z9Zk.,A%Uq{m5k(KҒf%6UmkT1jZVcRuzDܷ(PfsP80%Gj4ƕzĆA I|t+$I0|xhN{IQ:@hRX`VȌ-Ul# 2=ʁH(|C Y2Š!(!(b ;S/эM"D FJNT" QdU"o+Ӄ}g@X hѬYF  BȊPZ! KS=|@]60.nᄼ9:Ñ\zwwa Ì `%! iҒm{K<;\ IV, 0RTq.8ɉ n[=8ŚwlI|O*+vh4ݯx );d yd.'zJcgL&]PV{XL5F wd㹛3yPȁAA)!b"צT{ΛiwjUVR!i%Ɨf". .֠DI-J3Y;]+Sqbf;8aX&JFwHCa NH55/ad A+ FPt-1iŠپmsGa)ܪH҉0֥ mZ8m5Hv]^]$'3xIp @,PK7k;J]1xj4iկ$h8͖Eߊu+ҕWIu#SgNLN[ѿAt_Y@c_ӈK]X揞W1˯W$^}L5$lMQ)hvy>ˠv*(.FvrsGݥ9 ɠb W&6}7S PZ @s| ̲Cշoit\epMTa)@haMTiNH(H<pEE`D9Jõ9\= hfSenPzJ9Vm(ҩa4dQE*Vwޠ(Me Y:@BBHs$1ʐS;&'a z…HKC q@-吱&@薲KB֖MP%zYŠI ,PPؤ (6¤kE+YR + ²XUkф(RhIdP Hm'l|0/BI On3zgB@d?KsBxgZ%3.\RLm ׾pbj ӄ ]&qsևחihQ/YŹZcCF?j&aX4͋?cYLboEnNbNDΜW."/(Ꮕ-#Vb]@v`-!_Km?tO8Oұ4L!}Bnnˉ= s @(A3A X"@AqPH Sp8@d<m#Ր7ĈI@JBAH PBCaZ.S =V1~rBD.a[pC5@i圧jy&$)J*b0AL$%I"dE"()d2Nh(o.tA2bc1Ļ'z%⇟#t{rrrs\VF@F\%*(RL$>#U<50BH@HógO RN9KBaRDr9,`+&Ot] ڴ61cϲtd'f', 9=R m%H 2xDH 2BlSwO @$TcfO#eA<%2Θl@la9f? $YRE*`_/lq0\%D$ `rR F(Č(^x_ΎM pGgQ!vμwȮl5 yn'=3vIv^9y0> ݂iTaP >@EQdJǟpI"E1$",bVBbQ"J O@@`( ()L$amV&"Jf{rC!|E O֗AF(Y iM@ %J[m8V,T7ݰ#8|~mHi˽r of*iP@8"+'o"O͉jHX |j0"31)0@Пa'#ݴhrͻzsa+P Yg=%)ӪPy 5ʊDJi?SfDcED"UM ,,H~T0?ا@҆lBGҷ.Ƥ.#+E8-S3:; ?sO@Y[ rYiy $LRIʐCB;Q!a|L4Ƅ"Ƅ"Ƅ34}c/`1F2 06<}#x'By?`Y81~o/w+?W$Q\J{sXeǗ0 ,+pLjȰJ*"'0EU0XҌ{=U9j3)0{.>m*C Ι:0B-uƨZy]6KΣ.[3\/^İp1_B :?d|UQz3qog\go7ص(ĿFd(`~jxrґ$ yw.`}``tvJlwa4q+^t\ <=!IM6DgVſQ(Gq4^ܖ2gAw$6D\qu÷|+Bd>gDTe_qq< j_ [ P_#t=; qF6i0~Fm(lnu77O3ތac6#_B`HA[@i´Ĭd(JȲ !Z%"*̀leFHݒd#,HH`:.feT`.%D4\d MFSi`G-mtb" hAWHTZs 5j! ̩ (,b eISvaqˉ0raci/߷ߗ$\Sԯyd:)Ӆ2!齩׌KA"]ټZ*^9V-?#{ pRIZBmGo^dPs৯ x.v"P㠬"׎'# 1)". ,2SB+sq@p ʦhE~zh m,T) (EbɃv RDT>BvpԓAs}.L@ɜDx͉7; ;_߆ޥ+,וvۀ]^J%w@ `>BA}"(JaY++ HBkg YDPjX,X"PPEhʑ$QHAV1A XUX "X2DBZ`dQdH  + UHFAb( ,PA+%ő$F `$Uh(B(0TY"YKFI+RTH1XQk"R 0DYV( EPPa# AH* dX*0H-BdA`AH"Q`BEH$" Ub" Ő*R*Ab *$AB+XܰB T݈J-HXGE5FZ!,"AE!?DHE#1c"Q$AY-!xDfn@ U+DH@,`cmB*ň6(,gR+S aqd>fԄ!` Jer[Y3fCL%j :‡Ck4a HA1ł pzI5!{^>JU(PM9<*aBSmh&" )?'97/8]ktP#ŬqCVI*I Y ,p`YEd`AEE"F (T AAAdYAQ*ȉU+L+oUN!!Ls7**>]UM)`M119K~O/b> <ƐBD<]!#"E{;+;q$Gk!b.3 ld>4:zlBoG]!P9") "_^EiR۵2BEbE$dFH ๤S|-wǑCU9؎)&t43&{]]@: Gc+-ozX8FFuw >~rc& `wH'!%9tݿ] H]bxWciwɾgQR㥬cB)fiL@n>:z'y f\|;r}M񉹣`iQwk4 #Br`v  >aW {h)[؞ݓlT*Uy:u:?lyТޗa:6ikO_7hHCav*p@lAA?D*@`2J=cOQ5~}칾^ LA0گh)Q%ݽ3ib_򴼎ob!|I3=īfˌA=~9 ɘ_hI~nѮ{sk&`vmFC&ָ!HLDD瘥78ŔBH#CHD# cPoQ_\qX1kry&yu^.}}Wx;[m-v^w3G.0?cH /wH\RH"U-"d,>*܂o0dH#xX/"@ =F^,]٭64]51ލl֦ nt83N@alHAAX,H*EAA@E<~ 0FPTT 1Y&c=w/C,=7mp&|TF qQձDdX UIVC"q@7E@,Q;k rDvsmw(RTHMFB, Qpw6y&>a}/ aܕ1Mq }@so[d= `T1J$R F|D7#RX0֦LbL}bEьIA1ܕk U",R1!$RH G0" 8l,hSX~ȥ'yz9)q0; H^ %) AI!h"&)"5x_p}(^UQWB @h4b"d\G<rɤKP365$wTd(c1 A%EmQd0%`T:MN 5Dq¬Uw`>tRA4@Eps,hI@[ZdHH>KӢT=Ax.@E$bKΤ #"$D@t|?MӫEnZ:MX b'qLA,)|Vё"AATI HT*2, H,%T!,hD - Pj( P)XcH RB4XP $thTU`=@-!O$%! A$<ɩT@Bay 8@va21v؃f7 ȢFA`,PD<84X)bcy fr V$!:AQb'l>V8I-aPȢz El'!j{2J¸E~WQ0R*>4\A HN* @Ć Yq}P'xC@ zߺ=pYh-I-A`> gCBe='q;EE+ǀb f87Kt2=G0^'l7"@aRiGOd$$@1tđ6VYN'{@1G  e8eYHZ9}C`$ˡD i^֒ LM 12࢚-d$ t~GҺ2 @cKNs6gϵd4ʂ!ф`Tf0h9I4H\&j(0f6b "UnW!?\9]E\Xȼ2 #6v3UoyvٟK˴v0/LJ_x! 0[MԩFlYݛT Br͜Jv]Q4κUb妎^U\VE.@ֲmpQ.6[\HuY % JCbBx)cM   RT!=k` HΖk5+gD_{/ e%}+]J3/R4*B(恵71hmdhl<)?٩3mXaZA&"&r::kQR>>Rހ p|k=^fgTIL;6ɳ!@j⨌ mls]?D@ۂ@(.&ļ 6af%d}d1'm8 3.$]u]wN|>7I?1̵΅jqUUUUUUDҸ1qhSUTUUUFWUUUUUTJUU*rW⪪U0VC^e"2iGߪW&Ro]@Ó1Ơ<9!GH4x FJjXBĈ^ ؇:pDDQIHOX "(,JPDF" *A ň""E"*,Q`#" "#"BU`#UX*A#H "J$E"-,X*))"Q(B$bAHD`PQQUA$dPR @XPXE 0QHEdDA`1F  *ETU őAB( ,ՔPE VQ "@X"$DC **}W`:nJVG9+07 !1"qt pΡRDYΪ%U "Xp#X)P@dX=#HD({QOUPRPcpMI4B).ډ  $ >P + 2,@Q`#b$ !> mĂwf bX1%P " b0)DRw)YހW~!{B́%r'Ł79QĘ%)xxADjm)3(Jd"DD C/NJd/JWB-杕69}M(vcHgX@G>P2 ~*}LH!7 3^g9 DYd;U(p@D.,Y/6l}.]$UHG"'}/I nt/ c-%ڏQVb(fA @*ޱTstTd_֌F)E2soPf:;Q&"G%sgs0H ?5 Ys! Ā1*O} aOPk$%X( D-v쫙?::*63jX+ ҄X2R)V-#:;U" bIjђZ,x3 ! ) `tZVCEe;~FxmQu3O%7ٟ<~ (-|lqH5T& {lw,fH@]3EM> p8l \P$e0 #&G~8\J<4ՙ m_ɵNA>R>m^&h}H5Ab}6ҒѢP(|Cvc8'-)$TICE7H@Ume=d#m剁?`X$-NeCi7>:+#@fnŽGtX8wQ}8=n(9 Ii xT>#&" 401 UEP_ygm}gź?#RD{9[nV`|E盵 SU+4^ ;ƗO] cTT޴kwfmtZ|һQƄ˙L6XI #iSùpZDҐ[څ`4Aa kbQ{@e*vPaޮ : THN$YH[ u84]B"u]оXzͿs~G~rC/+7#Z֪*GR@+Pt.?>?`C)ew? ݉ }Ok)UR  ,)23LTd-]j B5o?^؅Dy/>?sl&?Я>pD%`]/|fq;2;4hn¸E5;M1 9vIw_N6j l3T_.D8Mz9'5̍gI`( S:ɲӆ̉'IZ[+R|+)bڞ-6Kh%{ \rvNmۊ>VZ V̘(+1-yNNK: ںR&iTY끭!UFoTF(B"@ Dj ?6^Un~'ސ|`[Eul)CEiJ*|x,!_ !R؊՟_jsW9h=@-q 0WQ?UI3.4L=^>]> p )y@ RRXوt1F0I`ݧ5e* C…TbPMP˧Uz޺܄С ``0al٘8˜\ ,u55B+p9MaUлN"Ό5'2FfePGs-­;p)pG5unF 3R#M[.d^ZxsNZf-"F`jA4iˁVDV{g @Le-4bs 6z|9Ba~4*yEKuWyapxo##ĀJt1ggKx9-U\W\Z.(JlI٧ 'F2 $E`emY*nfy7yj]_ۈqx:睅Q- -`7}|3 X 4z %&gJ|# yj?/g/Pߘ%FB):*f^u8dr(6v}c*%!4URJ!"j))ׇ |`B*^gcRcV(+%q~Cy $e?Pf2?<"dI!IV d/#A{np4Qͭ,p/w@~ l12&0-adeKCbPb  i. 'u>x07XW$ғNO[ 0 t4`DDPEG?e X! RPKP f)>Gub 8jOsMh P75-q'DyR)YJTI6)(dEW[u\vqC)LH-EM8(QD-4 Jbޡt1兊IB^[4H^&ҽPE'-X[a"F!RR"D d^`n6H q8GYUÝ@J(A9"!:;: "  Edmj0>SEu*,U$$IJmz!BYhEhP(P {FF Ѭ3<Z "Ps\aYus(]FVqJN=rdb!ba5$j*Y"5MIULXSv` AaU.i =V 쭏tX!"f3˟}_@p3=dC.BCc'dj!n0I9!Hƀ7Ucad)JeTFi֥&{,W-`5W !Ѽ*I6a l`, ̈zdrzNYH,E!QD`}wZv%\0Hj h)gA)yZiA 8/*dDr%o& >J6u dNQ2w:d.B.M1vnj5yAPP4EݿJ 2 bn[F^)a4$H{нhШ|黾wpa&q{hva&&R sb`ctj^4wAguص89yzuٜU!\=tviuƷ4H)؄4^d ɑ H*#2uxd[KՋxa^bQ:-r!zd _9|u{"fm[z' 5umia\K?qHIy*lCwhՍaT䍋kVĒ\FS<G(9`T5^֏#9zmghj{* NbnFaЂ:ܳSBDѿCGw΅9Olfm5B!x&$$C63|s%ވ@6qxߡ3ok\ᇽ\ili56d'_kUpKYD#Z B9^tuݡLӶ)v@"8" ")dd 2Q9 ο+{}Wp `Y>c$D ._=73<): U1r^x4I=i-*ow9mXIGo / bL2{/N =^ku>Fb"y)%Q؍dG9ɟ4*4_{LNAшa$48BXaH[lp;+kIKtD_eKV{Bl]\8j4qFdk RC1l#!D`" )%FZS±dAv#H]꿗^kf5h\6 VKlH.fn$ֿ1lRhK[}6V'.(?&  el*5 c/mVѾh"/pbb<^aג]oz2Ԟؽzy١PYP \x WtG oP=hliF%q"a&1=f WĈ!MTܸ:AIv'gνcT_48 U $A_MO*h˖T= &~iWcWvn"6UU:vy#RSghv?ӜYl{ߐJiZ\*.ϤBXZrZfS@jׇ?u&f`Թ3{<.ByR̈`usm:VOInbzL{:d?4m+=b}1~j}dNHBV лD!ط8j˾sXOtj9q Y)T%]b2U*pHoy>GV)~y/$ ؐv h91imY FHQ?F3aRmfQ BH(dT`jfn'NC5M ::22d6mK`ai"zT:%U!8 &ifHu4mЁ2#<$'4)4żwM!IF=Bd&m$&N;:RbP!M ,k1K(NH[ mMC25d[`fXeK 0P"Dz1̙Ұ7 bS Q`LBu)d4t18lp5p$XrE6CWI4tl=VHƝ5ALn.UX—1s[K Rñ,rK*vŎ4ANM ΗqMb\-EЩ!J˦ȑCR&nBF1b3,9`Rֵ؎iO)vṷ$1$!1V)IGfsZ+p̋e 0ȓHL3yVΙGBեL9B3*" t:/* 2epGГLhe dPBa$ަQw 4i(cb`ckH%*LaMD&Hj2F3FlnuE-y5ݼÿXVGWRS> $w"]#VdmEܲ{뵸^y/Tc0- F Om2"?NSBruj@GbXZFɀI$BDG,oeOC>%˧%yBJ5Qn΁^{'!&^kR`#s􋊱9|V"R1XőU5WB[6?>\oHSsmg=<>ܷKAGqlq\/[ċf9pcG!%"-툟B@)Nc =Y*hT2T* ҊKb*s@bFPE xW#b|k༖!%/S`4PE ?2VxO>h|6;O8X$u"cRc{aB?yb,IbC A꿯ׄ1Xa%lȈ)K*("KE 0e $QE@5a)"DBTP&XR{eoB@Lp"cיL̠CkG+ @D vܿ3g9e fR!T2B @SkY&&&T²EI JIH]683t4a*IqkВa J+n4j Z(&r "XX"4̥KCT%EZONFA.\׸BPP&J1 ɈA(;),KL$є…2?\ aRD$ $d#_cBDtlQE-P:$UDT "ڌXdGєB$c{YH#Rk]f a@F&3"-$XO!I0Nr vRy 8@$J5XɀU5>&HƵt/Xz߃Nf,B(Z"9b2B0I36"0T>-PE]P+a"dX, ,HȀ`dP * ! H`ಥEXJP)D91$٢ci.#ٙLC>Ё2U5ceǥ01Cu2gY%Hē;Td!IL/ptV[€ Ѳ**#B eBA}RVH"&2PFEČU޺";/‡=j 8o%d D~wQ#Ä#3t=fLe?bIDr1~D?M} ?XM2KB#t_ΡJ/BXA~O2|O^mcu~40^i-f؍.vbxG@&BnEФ[!laeZ.@)rnH*zQڸ hP4L:4k"K&*1TGt3JyY+ dd0{ AdShpyOE-?lAbn:\_,$Rn.ђ4 gmX׋FCcLY9L (R,yy.cc}4 jjkSv89"1BCY%`y |Svxd:\Q( X[gR2Bl 'C٬osXhU գP %DLJ8*x!߲{ٺyw0&lZ'.7(U_,'@Bc@uo!HLJ$~,z-"U`vqukwUuwf7[Q RGLASPR0!T59Y(H]hGx_f:;-i'~/<'4Nh:M8Tk\q#0#?pS}AޟGeqa2 ϴDMtD0b- VrGm6bbR D`# *!ګz!1b,$".oZ~g"E m&BV9rėJ\HCI1c&mgOaݺ~K%*.|Lȩ Db" D$+ AC _T} 0I4$$P!rL@!~a:};,D X@,0y$/(j@6^fؼw!Edn}{>Oy'n*?ZB )>$g)([Ľ2Z;͉êI AI!=D:H0gb*\0Ƌ"L!:éT},lRzDP6NȰP/CPEEQ$@X BEd0y@!d2$At("A 9 (=h"\ A* $XDT, *22BVVT"$A,#R(+, p0+&@V2,RME]:2yF'=z=f:ad=Q5j# )HW=y;R@#T3)Gq=Kཷ2r$E}8z:{3C7o WqAPXNƕ>EX(H" E$ETNdF I0%qlȀdȈ*n (L P F$b#t $ '`䠐XES! UPlDrY|/o3m_z}'.-Oi,`oE$~e~gHk6&PH9/D"yXïB`}aF I,Huvfb)KEQ%tecX,&~h)(yzfdFHӦ]u,gGq֨"f]jo D?(fٶs$JBa 5)B "6J΃F 1P7B!62I ~{]O<wN띐3T& jz-1+ r!Yu@ , ǎ4 l?@lW\&!($ ZEN0}+9*t !J+"1OD,](;P'"jRm0FILN⡦cAMb3"ϞGj`1w1X{R$!\@|* x#EJSb HY!><<|NHg|RP !DO]Ρ#`SHATDF,~?פ=d--@ ֑eRUJXi7=/>.lHdP!a@₇w}P7<@ d䈕BAPs{[ʖ bJhM[ Ih(1Zzqn"b")*Fϕ!Hs||Đ Nq5z? Rd\pKǝlpTIJȌUU6YdmU(V "֫HPRҍ%H|񔅨XV{O)b2HUq0b( eM]<EC(q2s@$u()X0=heպQ([K[$r r3_?Rw:%XT \Tt=((K={"B? ߪ?^ly^& kSypmh & Rb|hDJJtO<%B["Gxdss1(v+wz \$_Ny0o׸Т6E^\irZn2 b7ќ%lQ@~\"ǏHbzd 5`R! /3;zG~ayg ,7"N[!eĦ˱xyiVC0BE P⪠#?B0RK|Ȫzl尔<ȼ^aQ:(U+RCBiTd׹2bN|U_5Oբݶ@ջ`'O>juf8J|łsǁ}"$@AJX~#+7g 0i!@@0&Jjeܔ{v@1|ܻDcMq1}/sޞyhm9wzԓLC!{P Ke@jӖGWb]x6&qGٲ48N6fj 431j bRI5BXX*^yds}xb 8 f`<]6v_z/wu3"rC ڮ_S*-BZs`X_Cy9y)9h6hpf&0uʰ̗Oؠ8\\<G/mUvyK AEY3Ws]8{`a1`%b*Aa iƙ)N͋c$֔G@lOnƳz^=<N@("  "@5 E y>D@P̑$aeh~m(kWuظT&pI](3ZMyTSEjլ#V^L3aI=vBwgt&5hǒ@ p)xP@Ri^_tW:@uNcS4cֆ4"S88Y$$@!9-H"bK .JA}$PuÕf H ª1gFYr]&ތՄH$w NtWDxew:k@pba,vs<޿mM [o}<(=b&ARf\jJՠ4`s>.5v3u"$O^т``p`{)E"F"E`@&nmH`gUKCy!}P:[kϞ(8EOpB{_̒)ҩy׳<@! ̛kZ] PĂ]*)M"Cciz%\J 3M#,5۵_t5,?X~\^ *Qs@E F & |5;X v-Dp8%`A#A hJݹ%Pиl@ 1U1d<h) DvJ~/blO;S54Khk񅩫D>G"J6Q.Őuc|刢qS$D$FAE1VE pȖ9HHV=Ra΀ÛY G" ]Jù?` -Kg-.f沝 {X-VsٿYl5C<0ACā͂"E wZ7 `)s[E9nS 9رF6!ynHIK [cTh SDAib,l]T+Lvu WS t=lxx(D{q>mA2wA%J(R3Cݧ/c8 ,o3u,| _bqUxmmOʝ~ ǣBt8(7|/f2!XN5H>61RgG.#{F;`ivܲ"(#kd-_7|%&v޾tDd{FLT@qlI5 Cc'bj>ݞȌxXҞT{V!PB"A>% alzp/O8s9)TdPeaDĝ3 &LW1HRijU`eWϊӊyY7ӝz40iX:̫CE AG`wFVJp=:u2ճ$Po AovdFۙd- )}gN!ZG@8R2繴@||ٱoOxnj.{_> o݈j(hi ~3z G%|!h;cY4ǐ Gf*ӆ̉,?<*txVQڎWwo%Nlu$ˢml[2ܕkաO( ixǒJzb$"!B֠;CR3sbuAFg @g59iwo1~qcgٿ O"& i+Hg~!{h+~p[\P;3E&jԨ ]PGapS kZT? c?LG;^\"$;5"a~Z9)zB_gTlSO(XBB4&tj t*a)+-!*TUߑ_??"۲ іf+y}|ZOZ39گ7ؓ. `n9%Dl~sEV WU "@kL$/2 M( !&!aRbZX#Q^Ւ(-R D s(XFr*OI% L-mjU"+dU40  M"F4"$EEEDd[ VE$d'`0PaVH,h*K#I)@ 0M0EEMPF",+)AJ 1"I"J mJ&!5@bD$Bēne@,dDQbR `Dծ+!4_k("PbAdDAR0HBZhZE!gE9 1E+LJň)PI=7 Dpԑ0UF!)pqQ|=yǼ/m?G 9B0B$zL#^&VYL"hj^m4/{ [2\ı;o߬:a 6ů>K`_F@$Y'}@dQ]BCv y@3N0M" PR }^:1eחhB0 H# wd$9J gjG)Hލ;(t "!) FɂH:W5(P"!De`h+&WA$ɣ!r@ 0J )@b@I%@,&I L2 hdy=O:~ߖM5}8@Xژ3"ϐ7{Kae@I[6CϾ/OwVD7 `XcH/a} \B1"Hp@s<1ž$CsZD6p*.6!Yʧt x̖F_hUTXK=KL CJ7AB@K~ W0 RhQBTw{ӬȁP`&f~ ԅdX0`,  ~H5P\H.^ˀ'ss؁"TI` $_sNV tDkHE[(]njwX6R$(i*EF|ɝtI!`P-ɾ\tk3Vh\ mJ9)hTSi4hFn';4BЬbRAGaA"l(XBQ~!>-U,3C>61bA !R@Khd`R$KHWapׂu*"b\X*H*E$XX"1s\1T3ЧMNAIY$Y`\I&AF{2ڱtH+( R1P,XD#$XHXd1-PQv aYXQAB` 0hMPdFe`$34fFI0mauN12JShBF",b* Q)hAX!OAd Z[%J%lde,e(DPmꊮ4avD((Gu3ωC:?Ea$ZFZmJOH7q7baI3 㐣Q2Eeq(Gm&&%*.LpawMi+B DRQEQX(3$7 T[T_m0x`hwVjIz98͐[X]~|ٿx3jlʙk Ă_˖=%~Ck8j@~ zoDOvq[suy*"x0FqUF-ę>%c.j9M߰iG%c4=*\쌣Y$pVl{9j/[ڠ3nOH&ޠ0iSH0 \W1TiѢ_/EI֯/xwL债(9Z'w(_˼Pó&YCRtvNPهr^0$2yWMjZ2MAĠ}ӵ̰M- B"[C9(j&C6i&XG9qębY<3h@F_ϱ8Bg//+=PbV6-]ᨥ?"룺WiD'9%T뮵:%o~/F]es40Y6,T}V (Gin'(mBnh5Xc[+D<K#Lk-u4-#1m+58zt.7Uk1$ipJ6AF0e J3Vί=+ gv̸qB16ʇ|n‰x35{gO+]tt$+!ttS8uYkJ!3K=浫ԊbGR yS^w|P( wfz NCuݞ.i;^CTd6ssE0rrk(^u#i~C}[RP x' euJMNz1(ۓӝȍmqm[b^a^(9OzR*QG U{:].uSߙjۖ11g::(SrhMg~)i)$p朦ckBl2] 3vf^y ^s-sZumf3ц-5\fw)[5$d 7׆IZGAi#Rbt~=^)GYQrKR[&n1n(Ig~K}EJ&"nK94f'|KKqda3,dA<ʐ S&ɸ8AgK3;3ZSWP{ʡ ߸RWq\BCq0=+f#rЕWA-Qa&IHg~nM P$ʀKRʅEЙQ1Al)lTAGgξ;+g,2;:{8G9~c??ӁmsݼԬq wKW#X.CP>V%Pw;/,}< =mͰ30ß?o(*N0֔M%$mRL@GwJ1/*Q]FXYJW&=,8=Ur%V )XNRcq@FH{М֭ͨP#A=%ЄTwY7\)gMd8m)*i20EF 3vW,Y‰Z9Na8mFmׇg2U93O6JRenׅSk7YwLUOyF3-bKg34_q*P8 !)H]JP.N3P|`q`}O4`{U}^q\1qs %vn9c`g@ZròCQil4^n??Y+%?\RţJ]K#bZ5&jT^c5Wo ?! !P}i؆E Z6V?ӳ6Ҳ)f" /k[ū#ZZj ~Y[?iy~Ns;o2Y!;ϝѴxf2-_Werkh|& #"S^tE?n@ @bJ@<ldHH 6MbXAPR61 `\Y. a/(@" hO a(cm(DAP@C\'ϑMbc"x3 A@Q?%ߍj7p'V &_R1z4+!^H$l)h|,g]TW9 >V U`D !9_$$نFycΔQ̱gV?jg÷>}&3VI( )=IFC1t$DJdQJ0,#wQ# c%~0H9#,C`(P`(j&H,!L!F f 3nY!W+D,R[J; ̓l}VXK|p CVTB \RkbL5|hсouI8cmP 5cm.Lfov\ᓎyۈA3ZZFlqBoy \qt80ވ[fIN-Rb HH7[ZQiUD,_4 :#/"`% B -/@  ׉'[%ޝIP7(/7 R;IQi@I7 Al!h2DܢfoDU,&b,8N,vH X/݈m@چj" F u| tߣX!N%ժpΦqGqX$R,j$:"i 3.!Τ$HQF$I Bn]k?׃xw'LUJWtvāRAB5M "=,+\Q_kL%ymrvBC]\)s\Z5 6Ոĩ4lҮsD^C'.\pX!&sA]f6y{?.35 0Zܾͮ+mƈߖY'wq0:`ac]Y4rZdBBdyx͞/j$Q:|w͝v"I)雍AP`JbDDCD7 UG )̀M Kiݟ$RVjzx9{:q{)ܲqFU @À;R1$"B EH@2)JZ Ŧ{ltE3b7J3R%HM%Aa51"oӈu 9d$ @z `Ɓ XI;dPY&4r71=sxQEPNK|M݃#Tohf/cn F|p0<1JtHrNN8Ī[H{Xi*!aꠛ 9 "m>"%TqhkZP+w島tz.RpF' 6EhnH*뎓Сx je YD  ._:AbOQu6n9`͂2jXn֍'q+~xF1jEh ޅk:T5"!A 4儊Ȁud`jumD/҆U )PBAz¤vq}MaAG0LBm, TbF> N\i[T 봞dziO8t)&%݃5J+d+s 5]i5PG.j[TU2Un1G% hq<OO ,R m0P(QE)&EK vKY@U 1Hn)HlW^d)m@vlc$8!!DըO!gֻLiX_(,&:2,|B,ڶ Qň,}U}DS$$4qUJKDAxU_B7B(EPRb7RI( h"?im A $6L !XLN$Xl `M!$Y*HIXH)+c 1 m$HIE(m XpAD;+RAQ)|#QAOʡsx"DErH4=j1, +ĚLd*24+[SIxpI!kԊCAOG)W'NN2\ &}T=dB&EeAѿ0\qKΩPI0NOdJv3h hHr7dQLlík ӛhE -]]j?sjL@0su^!ڎ}c:^]|;qًkEJۣCZX^ њj0V }[[øT^]N89w%ZYrHԝ]QTX *+* Y%4 +N鬨)4bcARGFDEYVmx֋" /lֵ7DxC`J$ H*풠HU.K h4`l%@ ULs.ZVcs3#-Ք1M9$Bie`b]P b(6hѴ]%m,A*K`#aV#2Pre%Dd,ykZu-b,#RXrJ̸.:[ Iܓa0;@:ZQPY{RTR(H9}Wu_$LSqJ<l$#,qʮdlF0{QҢ=iP(@dX ܥE!E8IRTH#!1(pvac T HadX@( $RCeP@RA,;`SϦC٥FC<a$* ';ˍkZ֥JJt,d@q5n6" ٓ{^tv[ E$Q"X ``jn/F]SmݡΚap~Og PРcTF 8/F(yQ;FD:Yg6K,dOf%`$&I@Mlhs@@1' 5]g8BH@CN5;kqb0H,HPaĬH>1JH f>!{ kQ Bn7Xj=ԅsUi?Ek`d I!YHG}pYRR2dPlj˫u63l>֍leΘBSڳ]M]L)zsA(mn[|4:h6L^.HhCE u5ݶ"w\u1 egD6`n5.*t&Ҫknw˫LER~s%FSԃ̼wXw_XPY,UKP7IEHDXk BAY # Ha,#E$!B C>gH0D=ٱ;`4"0B-~ѐ%eD~,QDrbNp"mK:EDߕLpt#\=R0gSV{ q1I4&ˇTrI!.tRxL^]zW{OiEvOMĝD9W)q5X-|-+~`?%ڏC_o]R$,?)4Â(şV54h^+IgaJ̨>=ݯ#AId,E#-`ԶZe`H0fs_H1EšK[.h@k9!x }]ΩhDHLCSOaf;?<3Ync$7!f6⇹_Axa66-@ub&7o[{łrU/z~H4}amh{s ԇͤfX#26jaȣ2ZJmytR͚Yvfٚ6_㾜 yzg0 a Ԅn 6SZO'd, Ǟ@=Jz!V@$ T ~aS*TTֿ8H(DBE$ o2^jDT3"# @ƁyT(2,͛I+2I0O!蜤1]( PP_T.EQ{78],}i"xH*UL>g @BIE*|'GZw.Iu_ Y"Xdce_P|;ZryziA.'$BMh"pPlH+ , yLD`# p%J *X2ʣ@M<1V-|ENieR "aQ!F2!!F]C5 (8g'#Ԥ*%@>T0S7= "., tY?,RTspgր剉9qۭ/zY D&ɦnݱ97r{H4 D!'s njSRrwJ)X4 ~laɈc #" ^9R,;>\HcɱŝĮ$ I qb u {/aalDRWpD-Yhx9lC2%yˊ@ V;Pe BF!5eOysz0 DPf>\$ =T eJ5@#4\H|085C,&L$$62I]4SLހ  Cd'Rb"1cZUUTXi`E5!ل4X>3W:CCMjE@EgCPbvbTb$I"@VlC.z?#k;A! o (2D5*̲[PdKJ%aG).O/ BT1mRph*[drFCqQˡD-W'`?!ׅԚul"lH&bg@'GW]aI;Acw)43ʎcxҿhe%>ӴMKBG ^@[/GP^ VSUK (#oW7¾5+^`ńz\ }#ns-lA؄)Aar.(Gz-9|f.󦔾;HS΢^W۹x?dtݧTw[0 }RDuAH#%@KZP$)ߏ$sbe"J1> fP90(z!1d$GUK- @) Sm=/o6|'2,EHaX (05tR 4 mojM"1eAk@lCh&RHǠ!@HC0"vg1~0B^s-m(!aQD%K B1 )yǻ#':$4դ0F2AHfd"ǩ#wMIbjHs i?cwj/qh9H>|Ж-y(-riU% Mqf;}vCchQG͌ ?3#>6$g \?}7s]ϣkw㘸56D5SK=SUo ]˽O J M߫UXu|0 (Wt0*`jc}ܫ8r Vw <'6"CoS5uyn1pToȀq6s0>~{^AVJ ?'MH=7#',YߩPXYj+ҹ‡MTDD&kmY,Fi-7崣{/<;[ 7b^8[;kcl߹V"T[SJZ"%ePoJB(VF"`)?DL"$BB!$cwoU-o{-{]xq !-:VV!sS? @uO z ng9 ߏs4p?H6B؋~W޷~GE.פDzen(@&^Wpɕ#uFs1 io ú dhM;Dv$x zOE.i`Ea Asٽ&JS ün >`R?_2 p4vw][_OCvykcgxbu_z:$HC M %q=WxGdiD!S}}]CH=G =k;pV1$!0ZoyЗa!D -goB=uW_ tt$"$@ RC-:)!r]E/AOqy{{΋t|_[0̇=Sm/xIP# !"H"@[,|)> >#F0%Nג|6yo4fjh[U"21G8V$9oEÀ-HAW1yr%t|Ai&crtp-|0D76 8^ -aTEAОQ2kDfTޯ0 L'7̫վ*ve,Bĩ0+z l(il!i?`.:!3we64)6[N܄z71%jI޹ߢ?`6n0xG#ԉ]7bk꟬"b1uzR e Mn9|r+PEwGη&N1hS_w? L`09B!IA:@da o9FXJp{s}QgmPF3nYן@В,2G"4Ya@;V~N-Н*Rjf@}CW.,VJRuJoU I"\ZS{ahDVrMk[hȅXy\dtנq@336,^2Ɇwp4>64tc'|)%?$, mexwI!LZ"(4)Tdc@Fۖ`VdP$߅ 9~̂1 /+sod DvM fjAs¹?2ʈ7 (I` H""4Pthzݹ~{ wU;͗gWR7!ɸ ~zaB'q:;^!=1tn?䁕&4 gxP@/EVO @00^fTQ>kG]Z@L x5\1V ֫,~e?ۇv*&i2-$ٶ_NG>ϸA6\p-왉^-gi a @ DDvPh11F`ﺋY,/ޏcygr_H̠fD2sݫz>Oo ˈB|򳸮Z*DH ޗ?W]/⽏=?KMr]:!>Ǵ; pR?! CO f407,^8* T7D-G>]s0qLzq+Ludͳ,Ï[0.;> QzrK`gaLNU⾑71;{ja8A9 ?nU\li&q]+y2݄krْ9r3±qQly;>>M+o{~ 8=K.{)wYa6$ 4KN7-M5脤.)uH=fm݌yk,|U46(qC gVğ)-eB7O}OP-(\֬)0ocESD'L[IHl4a&œɚCN=чԐR(#ՖL;{+eĎlӆ\%mRIе8OV06< zym0_L<,o/; %8qTb2Z!8[Jf o Pi'K S+TՋ7/ݑ՘n1&lFb7 HxZ+̹]'` y4^p+qQ왢y?AIM9iO 9(Ynm26N9e;nPe<%~TpO[K# h)L?^lcә l$}^^K P٪nGJvdÎDt_a9LhOJ!Y 8=몥{ fe).O{s(|y0-SQ2X['W u?;5 ?Q$ƥIA(yauYME3 a`}gzm!ŎWr0Ÿ@TxlLM|'u( v-M/\ڲT3,+ ͭ 0Pxt|c&` 5c|&Wu4SUE(PtwHٿti)౽=6sЕ  'ɕ77LƛnMGN.7M7gJmC|#zb$$b.*4=±NUx/kfF@"^H-]Q[8j_@ҢUCsfxrnMg:}QӸY۽< rYFA'YR~GtX/cRY$?yO}䀱yaD|..){s(Ik ZEcp ƥk<֥f٢1Dl@@'|J: v9wI5bUJ ;յ,8GPﲵE%Jmk+pDeKNU \Z_X訿THV$QC׍,+O؏lݠ$DiM. ? NjnF&JܟQ=XYR%?UtP)"/u#83r<?(]lI(/$Ј$k,$މv\~`,5]w7QKg~Iz~dqJId* ߕvȪ.{z;P:RoIhJ̖WT`vr}G"*|j=êcxG0}JaV65Vc꿘&x8_ۀ|[s b NhV?UeA .GGTj 3S7RM2k=[ cy׳7v08.%@@@A5QETl3xhCcx%1Gd$F)Wt4 #f)a4oh[br@lcX `rμ ( y49$ :/3%[kV"Z82 Z.PIv^pp8pnR[1EN2YߘMs0h \Z |,gAn'qhD&:.(Z 7q%/2i-wcD,ϰDI'#,~[wE#]Xjp 'lرE1oo?`&oMo̜GJ.`JLٻK+@>0r4,,ĻEyIEb%8 iûXHhMzy"˪qNҌZ3s*( WҬ!TWjg]]H `9ѩ)EY%Y^T&4=#ɗ&SO{ [}T| )M]*5ôda2{fаЂ@gҸ!k!uc-1tΡ:$}#sN0:ٻ庾ڸ·!1զ&4۰3rGYgZ!4fP%%16EkD dDEL/]Z uM98+r4mm2ᦪܵڑ"h{}Hb%>*[b:4N46/b=%󑠸.z3 \p,/JuW$QOE,?7REek Mk²Xp`7[wmeܩ+XwGʤȎc_I4Ij~!ޕ,be1d~]Y(`r^gn82R!GЭ|=Y pYڍ(_g}pr,{'Bh?m?k!ߤf}`(rTJo L&O ;.[ZSkyVs&!'•)/in:}ԡi^tDX`W@LxP|r}9%,K{^Ȼ\i!g˿cwfBƘ誤ˈd7t\5-MLd;Bkk k".Af$ t/!K(q%49ׄ,G]SэkvOYxRQ_-4) @@IqR倯J0#1xC Ǻ~aWZ"}$| {͚՚ b' ,E|j'<"x 1@*.l#J!\Mn/ЬYwsb>!kB>bICž!#2mrE@^6vJ&ČjVg6)7f6ufN\m>L\{Ѻ D;$Q)_voEf;jKW?io*B3rjܹCQ?}!#RgSLB{ˢ`ht*޴Z[ld"?\ [q8T|+;rf~v=qjƠF! bhuN@Ae4 \_ ,6FyR6BE䋔fpoNL:wv2}h[NM>]nQ )LBU}PΝF_@$Q] v:LS2k{ 8\RW4T3ZW &9@7dYzG62r*hz9Q'ams+1d MF.WR,FNף ?=#ef !q=۟Ӝ[NZ*Ee-SlRi[sհ4mdKf|xZĜʁR,7Cf%cna7U^3~ߴ #ӎ+h\7.f7X HE^UwZ'~2M2VvrsbLgmgt:xvT$t 0J*֖!q"IdsJ 3nG =e_ƍ5@} !L 9AUJL4;MD!Bc=Pf6f6CZ48%$ MgC{PY!>2&i6ʜcWe]QuWN˼oK oj(˰~59 p2:7&JQҪz"na'?k3Z꧲ϮS@4gsj}&5نN9VW+/ =^R'@H*uJ;$:Cv#7@SPdj54TTPjZ6{bsJ8ӶT'ZBsI'P{:1w >iO-Һd 3q_spZi-[S%OГ.S9̵]I-}ONgʅLE)))F)M< wݮq%ޡљc_0CxQvvEgXx WOm4谣@wx%԰y 8ʹ>}Wː)\ZDQ$ [R;(P2NXh h ::[KNK`:3]{*M2rLqxV-L*ㄡ= kP{Y"xBՁQ]#W)2Nֆf/1\8NC_O/,rz<];'N`P?=Fb[>V\qNC0lUFXؿ%zg/b q":|F\{ؼ+6!#hCs-ooE/r_rp;;LX1>ʌ[ ="jg6(ϝaܸzksN0m8Գ:6/%G͸=?lg49~wh+*P(IQ% ,pKTǭLaZ4oavxxbWɫ6XZeLvE\,Ҭx :Dx(B_ЋdJI2%UJ?*;֬詮K  5*׍ˆo҆.Ti}CN?$$mHlk (p\S4,P\$g^Mu %@bo;α xFc6.:9Z9eml\7nma?RAÎ: ~M"TfҝMvFμF4x{<0:{jp8Sh@jBa gҊShGG cUH,}NJ̶V'c5;Td C߰0h]ʴ@VPxًJlN6$6M )59rVs1w-]-ǠpJh}cGiZN<}%_\yDǼDe_Os#N8˼-_ uܟ^$nN!z~ Ʉw雅 ##q6o1{ 1'_ǡ#Y io;~J (Ѷ,]};z\$|ȟ]jBS=[hkmu3FIWcϫyH^"턲13"Cy8•Y .@PV3y/EW?yBJ1]n萼=b~r#66] hqQQva@$:vfُAា,BFwI L62<9|*A`P^=5(6H47TZ 2clc8 `s$.y, ]@B\?2,B-DVfcQ:-?S4͞@5Kx0״. mMeF;}N mMj E_ˈioPxGI(e]ڱ&P\iY2ؕoȿ* SV7=gAF뿤:S@2FR5`?r)׊<ǃ͙q;T 4N+cOBC݀pt^ՠ=o] W; y< KjWo_3SQ~.V,]9B2%՞$FeSxN2ߛ4>q3&-;chhù֞HT[AnJ`ZL`t W^bJ<$2?nNRN1 /~eH22B}I7ɸ!A4{M _t ,-Įq;X82 ) *I`J9ㆥ7!铪! &?2g!W F:8<.*FsfwU=9,ŜaMK||j^~b^SWu2:#!;FK~p<\C&edҨ($ lFK/ ہnn8HK:*ĥ#qh7j_PEqa{0_ęE\(do|64Ò6#oT{ k#gEP+ $JriYN^ApzxbV9D"/G3 [Esct 8;un4"]m?_6OLx mͺ-e#OP. c06 v˰q_6C%sVj#i]ШGA?1YDϏfOݨHHM}LW?=cDnqRLH< ZqeӇuݑH˺VZDk!;;)B=t5\rESZ8r#Kg~ \_VHg+m'?eCŏ.YJ؃Pg`mF⊯h:4U\lN)oho*iBpht|Xrlix_m+^*i-a"HYYXUHZTa kɦUȃok-~8BZ*ig5H6BD!6, RVjEpf6%ST8yK"5i]ǦzPIBk?/^ Pw[tV 8YXŇArE_6]!f1-pSbuIw3ei`Ԯ[VHlDֳ۟"by5CO]@S(|_vW'Dxx恐]'A'B `B N[V?7"l:X)R6e17@&)p$a }aŹROw,iO\>,{mR.Z< z_ct'2yE^ 4|nksU/)mtN`H@G*F3,Bh?&qa`P<;8B`" <6YH+Q@"}GE`ގ=BN7b Ĩ2&"!/=)Yhrj}V0` ꟿ{+9 ^#P3!ILD_s[ }3к>KPʭE%`2KT* Ԫ9H+AV{j$ ٵ¦RSeU0̧g>DF2}]M&}v7[~aC(ܖKThӼ&zo X#~[E9v0V:qlVsT:M!I+W[,a]s/1!l:h>9a:rlḁݡo;+ܻrt.+El:g#/cY IӸ^D\\o[_?`S샄,?](mEKOO!'B!NgX~v nQq:O (׻,=,٬5Z=Huf=]eiܴi Վw!2SE{.(J`Hxɦ!aMg/LRqˋGؿpgO>Z=@qUL=h-~BdYz!<<@z4,_=\iE)PUܪ'5̈65r)BX'J7=*PhQ߄O0TWXc,aԪ[61iVbG^ t& @ZzF \@ae:4Oa0TkQbjUȔCr*jP%Xի.3Lm{Np5 @htqr4<(BO FQLQv9[n}71V*R+_*I0݌vL~c Cm8H` :cI9G' K=qf~qׄLfi;&c+.ul 3_Kmuͅ%eg7{"aOzHթ9il&,4 dkP)?k,IW -atW}}+jN7vڥdn<8}ޖo IKhXGl{L}?(A[)}{i$~jQxN?~tG&42qy-q2$U8onv8< xb7L;VR U8KӍy$cK%@TڡN0;.&f- 꼫1STGDI7[1sF\ۃ#u/6=i KVDӍyZe[e Q_8VLiJ$LVœ\H~Š hU힣n ш5j||]FFMWKWP_Uu,X/`@<T U˟~ }ףOrڿwೡATmDGBҁXv;w "'PfbY;QA2KiR@ -d e $4⇗Es  z5ꯒ$t\x: 4b5j`݃#0%ѢuV~= Cr$=jcrxJ^u^0['uq_ySUE <''^6[aE,#јBBD&? *Bj ksc51R&4:9.-c@ij671v.tE됕T͏epk=smcLr?,!y*!Y ߛ`T }T7PJ}֠Vnvk+ j˞M_+Kko隸3o=A{|5?@i=ʀC-m` o%&mL}蠀s՞5y5AY"`v>|MW8yy9OaAjnU5+Ha&DZDu[U~ьJj Krrwdw;Z*FwXax񌈟N~+\ֈnoȒo9-aGUtd8H:o ҷH׈DHV ̙tY S% cq:}=P;Hc+t]Cr*0Y;7M?u?n==J-Q6`4@F+l$i1ѱ" <#a<ԣ ೅qV QBav(8)T5-b d)ņ;O:xP6DۙMzu.b'i@4r~U6Y{!k$Lzq~_G/샱-sSv:q5A;nM*PШupC1'/.Aavmdm{B4L IW3ɞu.Iv89 ##?gC̻st /0A#8DجtRHoN9qF*;J׮?Br8 Z;Fw叨E(rH,@`AEr/x>T#sڃB'o`"t`EoHU 1_c}yi - XgSae㦽d~$yW#:i|~ v(9:bp`Bm`ql:f!7 u1Z·a_4)-%.}TtW.R3:Q?Їs2$^]a(߫0=t*D%T_Xf`e dpoymz.llOHN=*]|[8(uŽEQ{L!r5PB;GLna!3j$6@W+c]⑧p:v(3԰ ~?8P]j˱oNoFbz1TxNGČ AHcyp7D FxhNżprس\tWsCi%駯Na^;)߷^(|S/ڪ6WK/[x~mzZ@ ]Ldb 9v?Mio+N`l)9UbBl..@{!ӽ!]hB#w8]q2'X7tZO&`tȻVa$7VӔJGHT`\T- >UrPٟsVO|kb~3TmlH<!rf4U#pX~ ܊7bTOͷPL^qsDEd=h7< MX+Q2dbvwL|&["bߙbh+Kƭ~ xh]l}%M*6| H V.h\s/ YyrTk((A0 v⸨`E[RE?4U7sXS8V(>Sؔ2 cH>ĉ =d;fy^]k(}$N:1.09|yw5lOo3띻bp%Hw[d ZZ%2 2dn`x Kٖ= BŅy g`͜MrVpA"2t 8a^~Dm8u]h>Q]|)rStg^-kKj0 3B%98UPSCV*ո#r]/v?[\1E~n阶O7p 0Eطaakׂo,u!珽1  |댠g9XLGs!3k8A$^IlF4U~l2$\ӣ/nu:L #X:ͱ@5k)zx(;4Qķ~2rlB {\.h/bt}5h?LXC=-p zH)fR9MU7J[|aH E ]n)BHݰay}/)G&UlTѳ3Lvprn Tgg/H]fܷC ql3_ZܘJ J=EO3muc{s0#+8*h_iKKء-Pe6ӬmGa@AXs 4s$ 70#p<wcd[W}gi- e =؅BK@ >Rx $ݬݲ-,3s\ UT+#_qv2_R}N?|\r#M7eѫۢ@7}=џ]4Pae L'c^y/UZvc ]خSdrw`6S FfЃ`ߡ3'pLJ ~<0Yr{͡ӟ[;3z\ae='C;.3!9dJfR4j=x$_Q#ÔPi4c$ !h4n@[?L}-řӖ:Q&۷k 6K(4&[uZxtNX}0p&$wJIo["o 9 =gJV(I73ޙt39!a~Hj8_p ŴyG+DʏYiv~CKx㎥y؈幇>Ա"AY׋"0).ߵLs/UΥ/|],DReL Tq=~:m`Y35O=`8kFss]{03 UI Pѣk(# r. >WȦv-* Ipg=3ދ}_>!E,29jnS1']'mva#328ag﵁!G)IieSf8W+u{bZ'.I5@C\APp[*U!m6"|HVG^:˳[&sY{s{yfݧngAEڴ3hfj{\"dUUǝP;s#^ꋲwZyW<~oe}U˶۞i|-p79]MmƠoM(B"M5WZUQSDa'Īz#PGn<]nX\6YEJ縡9o 3D.o4ca&W3a$qۻc{R핚 b4fWa8Pluh"ݑ'q09,*f288I'#uUT4{Bjc,\6' k % 4ƴr~2.Ƈmυ6- 4h(799Ual'%]l &pX7O^6i 88\!V}>Ŋ_&d[du92hf;Xk[CƋ*yE»a9ӫ ! %^iKvqK-1#H*Ao3$1;R|8|CH7E=H+hj_Ii#irS&Օyi{u 2[KgM*I6˄sXuk\Rz}ϿѹM>?,u.1Ӿ./9̜;=(8Ը/܅706jgNW|t/:ş+++Wnn~׽YLfޙ^a2,ƹ# nTD[O ~`ߴIIM^ =$$gr֛aV*Ȅ.j\$qL@LMmv~y`*q Abدaol^ZmG򖁘m?hY&~iLë.%Y&\|ķ-x$#*T@%ҁzW^RJCu ii7^J4q1n q$Ů*O;ҷsT@{!W̚V#fpZK[AB:6OGϺ# `eĬ!6>g)g3 / N`mqOPfWHIn}Mۊ!qz#k8^Dtl',iPK>Ibqqw.yKQQ'X2'w+ZeIhrť@))\0N);"6aAw:Ò"yFjb ݡuRiJi*Ufg<Y$yxdT1s!5&T\@Lh[IǤ! uK /xM<َÓul !{ K3H{%1(1TGI *b7f'!ΎnOKPN,aÿ?2P< wai&z|_~KO<0Nİ̚uZA#DVe(<7T~e5:Az-\i :̔s;TH.:ڙ :*&'Kpˊ.`R ̋)H%0Jh!|&Cl"!aqVĽ14ZKZ"BlE': Mwڰå740l5Fme1bcm 1`$U"slRm3**%Y 6=^~pB۝[V*wIZނRU|^ejo:4RFI(ehA |kdiJIQSuHMmRxfw9k5nƞ%46X~gYd "!&>Dlޭ453GAD1>jeI ?Z,$$KrGиH>O v9($vЅB³rʋXi$ ŮceKWN*u 8Ш=R #fi/on8QC 9|ވE}l &x6[~ȶL\H,VZʄ [)~DgQȘ֩,-<,A^=Hl!FFo/ҁ^rٚڣ#Y!Bg7j]' p!ᔖE\c dzػ+eԳ52n0(-[@4( ny'N"l1^~8VI "F|+;V7UB0lf G&?N.C^EX.AM!ꛈy7;~8NT_R0jD$2Ʀdi]]e0㭴|ZiW_`RkOSƝ,i2TV9S.V N%~K.^:$NzFxFMCwi"_6c: U]@@x> o"XjmNDm>-X}!%"'fo?7z ݙϾXL.2!uveIbp_Uo!=ĉؼp ^iIuN apywGTbp]6:J&  "b9<[·v~2o~>0q4I2H|JPY1]4௱cj*vȌ68=X4H`DDPbBǟ`rLzn:ѹ>J+fOZ2d#C6>T7}zwȳ1¬V8:LR&Qb:î;ZT y,~cƸv(u% O+ 2v{VzâBTG}d#]KM$(Plp<EeQX1Qz Sa iru{嶤j_J^ј[UPSc~8zkyH+WoS)X҈ܿ?voe}w8 ~Wk?r 0#2gur8{:+ջik[yoպþG>[XNNc3ԇf+^SoluZP`-I$\|=OKl4hCY7$ǣ%)Ix.jL#@~6iāP4Y2;eO"h`RoS5ֲyЋ}gotPayLr1D0!ޝQ /հcSmV;݆ɮ# z1}PVNNuČF4+ˍC'xg6m%HkRPh3e=¬t;Hf6,C|\ $23nM"|:h!K 2mǑx="ɭtT8K)FDoi~8P_E)[h*T2SkZij|P: << F #`#ɉpN;9|t"I{oO>]riJ D kgw!>KʖsV4<,@27 `aoR`F-5d:WS>m3|ej?78UD@(||BA5}z3a]y8xYG~Eͷy'Sp8 h6^Wt/@](OH;Dip/$n~6<%n&U흲P dq!=H^BifǤ S4Km4\TQk]]kB3uuO;'o*ztA&[:~ED2 jNh;{di$~0G4s\ &> у#KjqJ`A p?A8ۍKRǕcPXBʐ !~Cp:#(?B^'c?!sK?s_YM@) ]~: 1$bM5{EXK!x!{V斘h8~f{S.(79翓~aeM<%L1\{I3cF+Q1g-\(%!O<[)V 7(dt=zGtv ;i Z->$q uXn̫AâF݉ iu,7 h8MaWh6$n'_`dmB\g=5vdl_LכdO-po޿Oo1/yO Ži00UMgfRޛ t7 gI/KAԮ6[3hR/k^\kMDc*SB<9XS`n(|Q`n7~e՜`>-vupտw`T[$ngSaKw/ sarØtj 9ݣ2Sd 1G"~YSm=?ľ[xURiF!0|ObBJ2w(  >0ö{8h+5!y/.8Hcw-LB\>1 \r b>((4lnwFUOzcCu/R;5oWOvo[f{&YHœ]i}oXW#U1#QUM/A'.a݄iO]P,[7Yw|RߗY+ jBV6\o1o_r(t(J$H\ǜJ ,hI)i`ND_ ?r) dTi][4˯M/2EtO.:ZJ\~OL&v>r: 7fDl#9oۅ=< :LǂBHR|Ջ :ohpMYrezr"O#9i#g =׻]nьaeuee!+)fzgyO?Bc'Q*FR(ʚwUl$"ِlwt#Vj!T t"FMY4Бq} H0GyUЕ}\0꿁62A P [bݐwU| -w#k6mGQrxL~1 b.ߞp5'_bo},il|Ō"Q 萰%wwy2r‡pWl|+-d2\W|O1^r'PH% m/e8O,0\kboe0ODƋc3E/{7,m58]i!Ɔ |ۇmt-~u{IA}!ab;C U᠏o%cTIB ONljVvo3!6ݴBȾ{CRa6CZQ6Cks/RǙ9lÿ8~ŷH%?Q T[_Njx%ASMj;o1L ;~}2J @C_qV1eeMi`dr Pa; -2P=k&š%/T[Ua]aƁ@k1cq"@ 8ʵ?c?ctbV[a9g qιJ89J -05 B3nLL'`9Ggꃓ?#I"KlJ0 V1yY`MEhs;>`7 y8mi3* pIo;_RP@68HWG(mtP&0e͂:O-mN i|C#!uMQچab`\ V%MXvvhx|~߻3<ꗦ|δ G݂+bhB* µɘ^/:f7;~H٦-O }̈|Z{h T%qW]L%x:NP0HɘRҩ4"/y,̺si\h)B܃ONF5"-ֈdzbҩפL  5_q9ױ9(T$VПRt#y`^];Ϝ6)K|>H{@p T'%| r;7#"Q<,&+wz mNc:/IQЀ!x~nB( zUE=ޖ\B?w&^ w!f9F6Mpr=kصI~DrKֈzRwg،#]zþo:IafHrÍQ19o. n &/nٔ+{ȇj‚vD uiICfƍB@ UתM땄.?;6w'®INĒ_ku6!$y ƽ< _ \o,?fsz!yn,nٌYjVt+~  $`*ŝC)E.W]JM1U]Ș:5I ad@ qO 뭷2JkD/$[Q׆ln 'H(B4Hevŧ/_^}cr<2Na>V7<3baR̄!Pꪼ q?chqbq8430plQP=.K{T@f4}uh9s׹83dv Q!6 Tz_[f{%ќ~GMFRO20a:8Э7\L N`NYUv?u$R#Lm̶ӖboRvq)WE'}J;7 o.epH#dOTiǦNf3eXYye{T_Wҏ+qd| |o:.GB&t Pf w;mUKW+IM@o,0kↁ Ct@gB7Rw1:ey1-Ƹ쌣V7s_=ܔoRhI AE>x D!u ;[Ė>s+xv,5󆗼*2*0NY(!j;l'_\̳}OC|uՅO/p/uxUfb*ba XKoTs~n?ʚE2<~Ֆ2tyD8XWSۓL3LWx &>g-|0 & .x&7LSDp-%:`Ғ HGneJRU4u^ + D81& 11f(BFJRׇQ«#SZ$ujDS8EO?eݜݤ pk8DZrp8+AC-^|3qU ": ]<%PC4o4"rQ״Q#LEר1?\`дZ 4"@Sn+F(cvV4Ƃ66j|ۑdG-Q]V&ErOhe>͑9dTTCOrEW.SVd`aln1Il{-8k"g YFV~Q 5>&mx8:T{"}Sן{BPӉ>gx~QVh35t[.𚡹H#&Z0i Pz6?e#x:&>wVN4AS˫:LIDƉ3x0)6;Ye7!ԍ jqoF죛 OԺM-/493LMtN^w#Ⴘ;e.,e)Xl'hMV5RWeHTθHs МjEL-Ń$+t;&>gOY 1. )J|@mZw[KXFj4 NkAcxGd_. ~y/^}wTCs"VncbRJPXg1d:}|+˩ۣ^(lr1AxI G8^Ckz\5O; U6ݜH`u*ݬB['52\8cSƀ~E{݋q'k<紷y㝬;yH?М[U~3zd1+_ݺwh#qqe {leSyԝ.W.z`TSyBʽœCұ{j54wHU#CrBeuhrftٗ#IHK6`oZÉK0Gaյ^ oxK ?A+# vHE;2\Dمxdv^GUyUT':L{ضϪq z㮦RI68T;Ȏ le? {q7ޗK۞Eiz҅Cs@Fx^!Y:fU+zNbQY_uW+maJ)g7)L->Ui{},[stɬ޿Yuõum49bөv~zI ~:nX*.:Vð(hDd|@̍Jd3@`h2C$LJȓiՌ{& d|aLOd'Vakm{]司3⮒Q8&MJ.SN, uj1)(Lj5hijȸL%qHkdeiBQdtp4J-L`-gkٵ$jF ۫˴hLgϭ M-["I)qho?L_(gAۨ a[/Io-+7k0մ0!ʝ,U&tgXzB3I2S<)IK2~Od'a!nogs D`Qyxsd+ֲY%B#[ 4-DOp1,Lj<dTWM\KB&/@FbY>>0t\4B&l2u{E,y47>ީA33(ZB   QΣn"ߴkSF%GtoG_[&{xsh2B91튬7s5MZِ|GGz s;#j1 /0/X2\J 6>Jk4c;Ѹ`?_b1z_`L@nHH PW?4оeĭRЁ0)Feqԋx|S%<`vօid1 f*+mZ̝uIvG}XT@8npRڭ%%} Ɏ*w^;Wf7 F%FǕ1WݍpZ1_l4d_Se;7NĆUI)X ߡۦ]id!7wSu}i_,JpX|lζN|S2,0{NhJXRSu)e>Ci1:`YW{nȟpMf/mg./hvFΛ 4I=4{G[lDTg/IJ,Uvb2ҋE$ҋ{DjIta7g)x)Ȩ$wn.w%aߖa,K"sU%m wuҽٗ[a4/`5RyzROMN 2 XkJh٫3g9n}ž/C1^z:bJC]j&3 [vcjͿPɗȴN[Zj,JXb]?%3"o16=BWd5\B9WK,Y,|i3vvYNQZn YIEFGVp{NS!#Pi@`Bn"Lr.*Pe!lɔrHi"k2F{l2Q'9z}@nf׺XrKШJJ'-E+%]$:FGm߈1XA9 k9W`HLEEڐ֝`roxF^\h]O IɔlX{0=ZhB.)#Fz*]տǖ(@ٺEӃ1oӹP@˅;#U6R\Yr"F{%9 \W'&7w%&9^kbűK%hSu1ђ6T.3S0j=P]Z"1Y XB&qiM3nwܿqbzT $c[H.6k][M}7Qתq%!{R\l3&l0!h~l:2Kw EXG*43zDqȭ|]I#糆 |V\`+Q}p)-Ւ]5ה) N0NK6MYp B Mn,~نA6`֤BCOѾT !tYNO +2͞ [LG{aovd--JtRk'`9Gs퀮"ID*i:CPfUdIs|8{w]3*.[ ֮~-+YhCM7-W6 {RAGrD֘0"qA $Br|=ux3LsS%,Y$ō${M]i%aQ]*oG41+z/=.Ѥ)4PmYLw*u X`M?)NyY8],9a0l|_r،sIyJx87eYΨ~:"_gϚ {胿 bbw6<gUha8\N)=ȇgr_><%T,ء)&K#C!N<ŢD!n"vc 4n۰3-04-u/ȚIMwpo1|=fM1`P@@r-E hݧf/j5{b զD TAX^IGF#%R[⼬>$%U_k0:ZOTX0 `8XcyD+CQd%H w?}6JFѴ{Wr#.=:% ϟNh6R׷IcLl!t?\Чr$_Ŕj;c>/l4xZqAQ9jN/dBĮQ:rX%b̅6UnQ|+c`sKMk#=|L/v\p:&| 4 k7_ӯ_{FwwR+l:#= 2pfjՎxF*C-Rl:6n8ucd:ιʜPne9@ dpx[U<)>6'yȣae< Q6s&RXO/[ Q欪kM˕'v+˔4$n$#GhՙtΔZ6|F'TH@U]E%|;o7l9S,%&u0_0.AsS?h{HJNLa#D b2Í}r2`BGĨyd\?6x^lfH.rQ&iHO[d^iwpL)Aw#a:K SS!E / 0@u8 +Bls Lfn45U~׻0rJl奨 3ҧ 2c ,C &aA,`1~H !ᯔB)$)ׁ}txVZ%>JNzl%9BY$dajnsp<.hH. ߪ3ahvk(!kkVjMRN0$^%547ogKlëNν\sXE[o#;E 7隼ޖb5P돋tY5TYo FDϲC=]#$nn狠&M9Xk:W}.A` ޓ^D2~ )t" Ft-Dr7,GHgM;\3tK]@-lrZ).0'lc ]ޒ'=! leOv37k`Fc"dyYU֩~F2{ ݠo4r4ok sjOyc)mH=Aސ0!tv"LovTǛ7Y \Q tFyj:aQoFO1 S\ow4EsA̕!e@F*%f z<`_L,$/]-`S'iI!(<,뷰%®Xܢlx)V5R a\e݄wUȝwcT{ǤSn!;L;$skDv@ >)daA!8 Dy4^`l<ᵎs} ƫBxY T.xLSƎb y GH)>a0.| VfqM!*ԵW w!@{_%ޕ]3X{ L(Ŭ1E)9ZYEV "v!ȟSX1;,jcg5:;ڄֲqu]Z#!SB>Ƒ\B}9!DȬj;.L x bhNo_c J\ǠevtDTt6<@ 5K͑ q J'B"1I!^‚E!CӔ>2/ YZO$_\==]^O/;S)JIu ?i23C=;w.MBE{`TɧP1+de(l=eY ii^\N M~ "FA뱤 R Q=wߕÚ:(-s?ccW 22]6M|# [xcb^f5#,Sw[’' MrzCa6Zm}WZڹCgG[aY?(}AD ]rw'oWݒCgNiwF*=90 *zhsYǚD6X|9+M!$Fkzvs,K,/joE[IFܐz(jZ5`@52mDk/P;|Kq62gP^> )5m@m]Xd; 0uFϻpPx) zQ !\؏/e}Fu1)pTmDk1A swFQ8g>{]^@[ЬjPYB: ɨL~>s##]YNσ^&ޓu1S6ZG&aQlZl Hܨ.4@"RL8866ӗgz>x(|/4 iQ:6ؾ\* X-fqm_!  #.}q,IG T XObrON<[4$bUօ^N8@\`%?*aC`H:$N'7~7N揕 eMkWaGj2D.=e.AV Hqm>!,dU/~~:XP:#^Ń%? f8 #_ WvBGQ88g[F5f24^8R+cCeR VF qøe[E-̧!SCK3iݝ h4jKeJNIk]UdeB/r޴z)ZlCKKՅwuT]/l玬 FbE3=2;Lg9i ߷5:}Z#;ȪXI3@יh?t6jW4YNV,mʛTB83"HK0ȱFA0 X 9?_q!x,@U/P9a-!/ZA_?tlݿؿr< 1c2lFp,,C! f.V;Ƈ  A m4Nnxk{^;+.1|VT0ȨPR")l6ewL]7P!Ld'|]& $i Jķdx# L7\gf\< #*a,byBQPc=S`BubEK $ì %؝Img ոq^rO=Fw6_x?c9p%9s$(8Q'LT~.uf"̚{ŵƷ]댩AٸDWu{?J  K"4+)SXU;Z7y IlFpS r7RZ{dO48'uȇE^,PЭc ,ab~ő±*ugSƻw|PIM].ĭq d*564%c?uFŰ4t~kѥR}QƮF1ze6f[2 Um[E^qA'lVL@H8T"&Rr l i[HHlvǺX_|CP6V^*a4%j E׉jQla{Ғ" Oņj&ߖNŢ@>}['D@ˆ2yWRz՜& ?} ώ-{o%$ *(/r&4S^ =Tq`L wٮ)$~9$M?`}_|uк.JwWWt(BE V A߾YFL,.Z2#l󸅎ߘ`bXiPI A\^. pu擕b\4BEҍ@W($}y@Z []E]ġ-.UI}kiv)X*~Ԣp /""À{, }_HC OURp?E{kڴA`v畃D|^ ~x*V3i;)b sDw1ݬ&Ei3:l O?UE 1`m0b SJ@ty 9/*;9{ (k"~Һ>u@R]48c SCqo\6.eq xCB!-V(J2n pݺ&j0SiB:E̓ˉ.>ڕO:(6YMWO2{(W_B޵K_ Ter{1 i@\yx q&=6{[$~ՌԤ 0ΜjR/wE!LW,g'GdRm!b0|LCdAEiv!)VB7kJDWl:X!=wZߩ-(B5[,^cR461aupc Q @zʂ8xn)SŒ\e.:6_@P@y y/H[[k ~DW6:I2:Fz=c%9Eo gˈc5b{ 6"$:c4^I)7N^ҭG /kqvs[ǢGJ<5zJV}$|v?䌋 b[F J)>vv*@ AB0T,yiM.,sBޢۃS~g=rm*-?o@Ub@G2h]%@c) jݞenJE? B'*GMuР:sMB6oa3FM4@'}uO[Q(Eh]}7̜yog$~e ',OHñS 0V67y0lKpi$G: 2"ߕ  Sn u7x-Z,'ZX)p RSHs XhM[)9<"qJ.a-#;8$bOf\a Ci)~6OdpfClnrbo1VV),E5^0W/H]ŠKYy=i2G>3L`#bEaTDJ c3@TZQz^n+*c1.9ſvE[DtE,SE{K+p4Nt|GRN0઄t)؆2RQ́SRfU/چd0s+$:qs]?] +( .>`iIø(-!4׊-~OsE6.g:։>Ncw$Nݱ@wI>W;Xܚ2^ꖗ^n҄I{bG=ɎZBO?ΗyGڵaJ3TL?>FZ,K%!*iێ j:A=RWKT';G o9\aEM88ڇΒ! mAM^3D/%PmH;Nr:..ט7/"-~*VqQa<~XUlEK`5m G j~FQyvo$ V\ +LnDLNog71EUd\#<¸ =CI<e)}$،ND1Ǡm"[ȮӕqGy7 NzG庄Z坕l(TFGxiN+By7mHkrHūSZB~#fte@aQ+gD/M{:2SK4HnҎZas~cBѨ#L` ި#/oKL 5o,71 Ad$?G+XzIy~ƫsƦR2+\8Ҹ]HllQc`ϓ:ǡ[Ok|o]yoԮPm6G* !""rD/P:3;+K^""+N*Hbv1ZQhw,t@¼Wm fuưXT\4p5Rsj[ɢY7l!LD4EٔE;a/] Ava ts2;xjch/Yaz mOg7w7mjqLë m T2H-(tPz5al/4H#R)>uQ1bW++ 9 ,m{iK .h 2{Q6{% $R&sA^'@MR9"HY?( fAtvX h&i6?!|GFz!F|шi^Y]!uA`^!9>#b7L: E8QY(~barKX0O4|*A=dBPQE.6+}$5p75ؙ;L1u8O_AkMO+UEJ[il uJgG Fڂd[hPP~R-db#URJ3Z/&4U_XBnn]٦3.# ?qW@pXXB xQ+?Ύ.|6.=R{a0U_+"OX35XBD0<_XWxDB1i,uZ饻e{Q`vG ^K+s.*„Cb~S#TL%۫"*O_~8H|`:R;܇SzH`JILI[ʣ b)~n7AOtȠʥeu8/)ۗb_ 6oT#4q`ޫABl|]l^~{ zG.jL޾0pgIϏſg'P_fP˻i'xl>6= ֕Hk~:󊅼~(\k'~ yFR B3%#2lo~= בNRG!JLyuo>1 Dxs{µp[]yi'@/#ǵ3ya`q&%e"79sDW/$!-⏁ MwR7q SfɱmV+n4^ڪ‹MgeŐ!.v7iF#^eYJ7܊G#vhdm&(19j9JKȄ cwr~IoPQx;]6We7r7#m8wfE !<_riH"-MMdv`^"'=cݪ'%5m>s >˶|Ӈ-N gE/Hw% ᴗ7̏@adW‰^ۆ^ui+B)q3;GJAr~9IQogb9LK1N#1\F=\ SGcڭ$zs,eYARa۵gl>~ײQl0UzH7<Ç]"J7 sap2+]>8zj{s ,;][=8AFvXH:6  !,br{-1[&D`_a{=GmuMEۓp7_ mQo2z#oU =vu]qGv|Ywi+r툻Tcxc\иſbBfJ{SWsՖ<}]w59d:1%> W?ELdL%= ;v$`#"֓whhl[!EO6f!Uڱjh",?!l&?nW#%ʧ-N [ӄ.~75a#PcZHs:wڏûXi6h6 C:dnQ,X\O3 ޳BILvď}~HD;Nb92Rw|Z*$9j_ڌʜwf` :cDo" tM=z-Zـ&Lm~UJ4e7k{ =|Vw6 |Pv-Ax>& 13^zIJ+x[AYAWdK nbV^ `\ZWAVQTgܪʅ!RdlFGAsaT5g>t bڟp3q.M]w"`Au1e<7HY'axU {HWi8KS 2[LPWR-ߟ.K jxQ9!N8\>j'IM{'$r#B(mQ+ɿ97'8IyN%7ovǻ-ny}/P)x*cYwmn>s4_sy)b ,. ;IQ99dH",1U ?[SuK#d8Pez3 ^SLY2ѱAD,V /e&swy${*G >]l2@h@dStE0L1pm_Ai× v=a94m84|/k26F^΅EWFǨ7J@ `"ZwZmƘ߾PKJ:CFg1TSSZ~[̿rk9j(=22)܏N\. a2d)ڸ8GG)LXRv7"CTA1Cs(4K>k(zMH̒#spmV8yAT(y@֬߼ޘɋwE^1lq23W!.U;_CT(x֖`.m|9өb!eLv>$A #_& 2!kC'e6XC(6S`·(ST l,z9vM"}#j 3G=;%HntҞ,^:mZ;9s:g pb*MdN+ |d`i0h!Yxw5D,)r %a.A7vIo֨(,NVq@ F4IP§UkH^zxcBr=8E=>+%&|‡/! 6C>c=-(HOy?<'J[xdz'/SQ% ),Mw/RY_ $Tғ 1YV^In1qm.? *4B8ܻ&`o)Zi6)%k#}zܙ&3(Z ;Ò&{`~ -L *Vw/9tv[-jFhZh,cHPwVZ[y FU6ٵe_J̓IR҂:*w>>ۃhi5&ñU3w#IEajr%7T1d8="u\%aGebHl]oG8|VBn]k νa,Ȧ5%wMvCJCBt5GQ2E0zxwpvr c| zM~aSdiGQ~UލEbˏMU@ 0kyce޲z|` *Rt@;0[FG1h6R7l<|BS f{TX~3oF*IH F"D=CA7@+Vab@j54=_8@% t (X"Oo]EVIc7P hk  r7$q)3]-L)XA6+s9x Gz\{Ёs>c]oOͬ M`/&#Y[fLo~׃A.[H`YVFk8,mW:\߈dH5pQLx.26iD#p&(PjD~zJU_\ZpSd67JҮ}^NOGq҅1*@hTtq#t:9rFQDȌçDF@?kddtj͘ۂՅU&.YF!O͝*;-z. "oN$Qu} 17!ݗ4E:טm6 %TdX?TU_#U") VacNd?omvxK~+6?'uFg@tO7kp L Licғty΋Tco\hI> e9V݃SVR-5g|9R hzCڠU/q~*͐T]q@ &{@Qп&sbNCM%sZ|^pS +:LP766J]y  ^{i# X -j;i3ru G6UcDvG9 ZO+xFH0I M9*{仇!eS4!ʿ Il탟f>J/ CQkk:^ϤjՇ->ߑQңQHF. - @WGɠ#Dw}(O!Ljj6̝ϐEKES[6;ct!I%K+8spLf9^QXbO+$3 ZSNEÒTcNQr0] xY2Sֽ{3?g#KЊ捄Bf*ם!#J@n`G@>^⌘tQK{b@k erGr C>;Tk\3Rwzzl^l.& 0fՅ癀"F wD xmHSʹ1U1U \d">ekyJHzBbHF(9"\G3vz@,3t{߈f+vB0bh ,KN4ƍ]īouVBve~>e\٨Ǣ?/6T0G]Me?hˢD~Bp?&Hmxɉr#KдU0`- >JU8Ek"jCV hZTg&M81x[x_.0~~nϪPzN) @ܑ]&-. ҙ`ΫT&JGb]Z5H& j M8jY&A[KA ?CVip%yK)6 pR0 5*~DzK͌6㈤jg?&:LV7Qy[x=iUӢCR|*ӔƮh'u1f!Tbo0u/;h &=!e~32OSڊL#0e5"0>5ڲ`J^U^3v> Iq S+00 ӹ_ ȩ; 4W Q$ͭS. LF&N;?/w {%0o3wn"x53Q/D2[VTέg}+yZMMqL3KToB'y47=zD1K7`aSg(. $D>GӅ R :QT,ih]Oj x똬谬y{6c 0p안Pܹ(.N8uIpRɿJDGd!\w"\ղn-KE2t_B>ꍷSm _/¥%m)> SlwNbLB3)U=M~z -J:v ȓH{E ZgnԌ|]$lQ+ }o[ mx/k2C9\YYF1X)^Z%% [Io>;) çȯe\j tzS$[b} y3ϣ}fRGCiq*R5k{vASbp4?;e Eqd[ У4d@AU~L.5qBeۯ+VM%A-79s8/h F@Qͦ.^͟lI0 +FpG y}rit=I $k= S(q0JnNbq<(VQ2 Q5AP,owrf\O&_C v׏Pg'~|#nv/).tkτKSPfgsɽRSOyF ,48^.-m`;(~Sk;6A#1F,}VgUBFgxjƒ&N{2ňKo?<`(BS' ~H|%#[#- jiT{6^*0FOzAØz [Z?Ë?YFOtoHX,P-XI]}w`"+MV u|+\<[}mv!Kb}XZ0ƙW\Xy6}e8& H -*9=ߵV`ZfT Wՙ)*f/. _flK͕?~"\\ѫ:'P??jcI!LZDc+p5pZ6lxAAj fdp:'Ι<̯m,8#5C9OY ׾M"˚/0'J*urC7t4pO@*DP29\3ISQ0G.TGz1 B|؅Lx\ (hHgB&:zdt*E.$[=3UC3wǔ̊LJ9:?P?ibCc\BB S?61& Kzۨ>+$s2?V\T-:PKhX_T-5P5kMHO]dJ$i%kFaDBQڅ3KA(vSkX5CqدSJZ$|'FI ',S9AՒ#6s 1S]'g'2P&6PpY }Q'1F3#NN4K}y2,) p%Iz_*w6jTl@*2=r.ó㮈o+ح2}Fi0HdMC`P4pZ"?@MRq᧜}Pw Ǵ/ Wא|Pp3dF~As526$:iU^j&@% Zá&_r jcjǦcZ4ۨ7- cr ) ʃGڨNg ?M0.bjv^W9NpR ?c\;T;wmRwʘ>^l EG^U*:Y2]@dc}m61!@3ȏm'LwW@ۃZ)",M&T I Y WH]0+)&*u@pLb1}N,$ op!.]N[[cUp՟떫;S_/v!,bݣ$L:#eZeҟ\,O5sĮ_-5l ̲})l~z9SZ~<.qQ xi9 sn^ĒsN ֆgOlxj5K[g BߋEƓ$񙃡κ5n%wy ;I=8X (Ǵ  I Ȕ)PxT8_*N:G( ҩrc]&(`k9-U̕~w鞲@o11Lek\P>ZFzh_ dkEP]IAm+\yivEje9;4b Dz*5ތn;?D+Zpiњ  m~!ֳk(w.>i}Jvyzi[zx9Xg0EpА^;X-P]E.2ZVʜ݇ZE,4 (v3ҕpbk);#PNFi+CWۭ9}{Ń_#ܿS-?$Oxl*>fN)N}0s;ުƿƢ7lJ펧d1[mo1A@izOXQcQKmeR$v+NM.;H(~%9 GЛ5[C5=B~̟Owc·* /"Pk WxΊ9A-& /k:rqYIhik-ps2agGߩsv-35>Ѫx`^bNy[b1Hh{[POwU (qΗk=H/xFÅyUNo;|yɔjB|f}O5gj6=+2^]iF Wt5kxTl=|'{KiX{aĥxi|(닊תىLs\ɰo o?F.l05:Jq_=!d煈]),HB(l-~ }vo}9,f=Yr3qdIH"֛[yq"cO#ӃAm".Mˌqol߫0<$ 3i1ͻ9D5k;+|;-!:΢ޜ3gھu`ܩ=>]}7}BŻٿIp@qs^cSxq{e_I\4ܴiPq60xpqp>%tƐHENT a.dYo  LȼJo끏du&fwu'R$Нſ ՘O_2|2~aD T bӶiNs'֪Q(M`ؼ uyD?u U.v6^q4NѬ8t$:vT3񫠩l<'K0Pk 8'3XV#71]ZGGö9{@&w,?[ObD!ʛ]n"xJqKDrE kI6xKC.]TɏnǢqHQk5a6 BXd,KGbE n"e2iW_K 8D4t!~Im`mfWnFCA`Z]lhBr$Ԕ41Lҟ&yIKi,[=nVxnyxC/ƲYb'2dhR]hGA= [Ti09l@>~Bn+% 1-J+}H=p!*mm:sGov>B 8Uz AĨӳ>C 'N*`ayU3x7t3x /?DKl ѮEACN[;+=I^E<&#hoNJ˝Zў&Fr)Je>n=/%3syӥDz=Z"W|ht@p,|ui*dk$i?/60_ZjpFP=Xn"G"vT5Ï[2@(K~X_1H0}nqo1tLt&)y0I~1Fk3"/ !13Zvdm6̾e`T]M#L9gT'":3z2ЃcPq?r`tb> *zgaor$w>Mia&GXAUNL߄"w㲍씊6uvurPOٔÃhtWн'z΃/ H~Qa8ɮ2⊿w \Ԛ- v! Â%D\QR=uo>~F1&uPo)?nqSr)Rpnٕ JjWԒZo)˜u2yX) 䓷ic3 FqWDdv-rV|FH"e %=y%qqAS7F/-,m:tM$*Zw[!曤rR2JJ4iH%dAd[c Â6- kֈw҃D @d_ӈxl5+vޔY {O2|&ޟ)]ftQX}0;w;1vnj+pYj򣃃5j|6%zʻyYy ,0e 384+lcUWXd'$-UkOQ5HUKMh+v:>"\7T+7np_Qܺiv$*EZm'H {_DRf~/-3D]<ɗ#NXX͙6Wc Kh"m>b%-|(Q O.̐`5fݒg[ eO"i]z2[alyfu>.ּeҚO/$C'uɿJ"I# [='?oo?jȔRaY.9J$0iqX1 Q^LÜ2+A͝GYSKהWE~鏛3j8)üB+lui?EOKV[Z.Zd!~mi_$ɳeECIs\rZ1~ ݾ?:#Y' ldVT7Cr4nPf`~`BxfP )HETx6_H8wY:ՅKYVM^^Ku/h ][Bd[+ZDHsli QϐV9CǗ{ &R.Yv3E1i*g{J/C¯T4Jmr<C T`Tc"]X,J,ߟs!A9mbp?r쳌{'ѧ8șo7]\~ *E7F U"&/hыm4 8oHI|ww >ܾ?إkb6յ G;ꅾOMG&*p˖aO’?,Xq|f28Լ)ưwG1{FOf;]|l$/eϛ'TDK*G+v"PRUD#yMpZ*D~BhPAAj[EwՋFQOr'@iA8AҢc^>/eϸam*xQevF_tX> >Mu3Axѩ3 N"j~5X2&_&N1IF"%Ǝ+X.2gGYMŢbZApP#u!nB -uC)s04M)z8>fʀZ幉YլRzu&7H}$'DGZZGiib - 9 #F!H}!'`e'ި^@nF`Tt#6fI f4JĈG%tk4/ugeV&Epҙ2!^4M q&m[ n>Ӛ\ *mC*ĭ3{|%8.1>' 5w[?lz)eP ^ug,A7ټjP)_c_9̷kĩsۆ&~P+}˝w^f*]#3hL*:3um g\M NV+a=&2?^H?=@P(]r5ɕ{1mukSP8%9tAg/QOkDaTUVlaIE^;tAW] 3^w^Y>m"+%*qMti1K*mnKQ[%]cAW?ώ{w:1Pmҕn}ktYS$8o KLgRjۏdH~˫ sQrIѣ`U  _ޟi8x*G0>[ӧT7e7{j6{HãM+fU-PӼ_ Q׾:soZkH#m?W ; U.K LCſk do rЋDl+},bF t] n=;0xse‰65b+Z@ %H37)$[0 NO̍%e#"t- ͗z‘9$M`@.Qii\xҝ;_mMבDyd҃q#|k.ޠYd|h@t}k"h䄆 oF%5_vJ. _6CDHS=+| { MQ@X`8 vV5t)@ς Q-bOq#*|1S8?OixBROgjODoݢz$4I>}|}hl/i`: B( mubsF)ͪBʚS['ZO$(2ԑ!2& ~gvROmGw"Rq EzcDyA@ľ\|~Ԟtdoתs8怑YGIx\yn"GA%ȤO9Kl^DǶGBە|CT2Y:7mqP-k ]p^qUQħl7ZO^K 5w-7Qsz^@RSV㧮! 9 e85݄q3>pm8llAROeÆu^XVu)yYrί9wt gG>MR7MI7 $"st@?CŦtᬣj.#%^"`ՙYr-V:b2a%9`$JSyDbֱ>}Z{p0>LCy9F 1niں&ZNw vL !4kg$_E|=l´ Vf ׈(T5D~W8P .0›P+἟BbwklX\8T6q," /ۍ<˞sc Št5^r@=7>" JXM[ |q2II=3C?:bgd FL9o`Wi*Sh*WF&ss;=Xl!G<܀t7I,IȞ6f_i!f5Z 4H33NѾ1,U$c Zݩ,XǖYhEWa@kc$cy^T'lFn҄ߦb _xf=W0?'&rI*q""3}}ٴr;sA˰@,D< \|0>/d!ax#$r5 ]m!@[^`F给`PPP3PLb֖~(z/zkNr m?~x;;Ի\){,s)AվށCon[gBj<$ ߀B/xmHt_4|3ibme\4$ʧ㹾A s)PڇlhW8 }]獽XJDDv_r۟zeד{a ʝ7C'n9> 4?NR{,=KRx\inÙ³ ڕW/`Z m:NG ,`}uN"W[$U,tOz lYպzΩ[P 2>O/{EaYqlQO߇'U"z\@)g֛*ex8EFlFɪj9j@P_`8(fv9 ۻI͓!<\uq0]}s: jh,6pψDTL#M5$rLPEPtv5?~Na.vCr<Y4-uェk}WDstODQK޲o_1ׄ#y&+PlĊ+YN_)Z:|K8NB.L|].RW(ɠSu^?o/"E@ {8J8i^y,pr%/FlPSw8K{,^:wg h QFi(@Ux o8:"NeBKh3@؉N@W&)6V|\VˌMzd+g}$xx%֗v4^"ӴAy)! gqvf~] FoՅpiXhF6ary3s_aqK~ښT u@j܀.F[fb E_&JrLW=<'~ⵞ93ʜ8v<ԈDhT s" ?5ИW)%XG1[3trwձ6n^Cf&"iC] ",tcr"SO|MAި97=Mz~ں &;_bLuW ?Np`7 Y[[`RfNE7`#h< = h>i$kd+~fdh*_]njw8iqHeg“O˛"TH=n-I,T܌:%OY“q)B<s=rD ѿ)!~l d'ΏKKWz8i7lv.MA2|Ni|Q5N6O%yS%N[V v: 2vZïif$X כ}g_!1J<y;C4zlyD]?ml2аY{sʅN+7VZH1[&g>f=vt϶j^~a?6\P,AMݺ#~_7b`8PwQkm@mV6U|';p r{B`DU}2B'~ ]{D vzՇV0J=cGTb K+}B/ukQ7pw-&~N@k hhGeMO9VTde]O*Bk&iizUЍ|i x"KBz805%o+np78ڝwn| n8Vļд/c%BdJGR> H:A dޝpy>&_A]1ˑ`M dIr\w= juM`pl? UNPA{o01(N$F$qg]OܭZ70 ~g#Oƅr,g>KJ]lw:ۆV|Gn(c@cvd(b~h3 ŪʾJepcPCs4en}/8)A؃ť7#;!YhU7&0!x+li* ˱bY _ a`sՋ]¯:«%vp'-XZ؁6 tr`i Wnt T:[Qvyݢ]A#hdx!TqTX&g'q\U-MF?_t-Җħzb/3z2U2=yfU #v-1KF:sΧ6y)x}Mk[+.&ټ8D5rf72s1<EWxT|iA.\_Zb UJE@}֜ '{JnJ#ҩAiJ0G@z?zwr/ 5+$Dns4wz= uI^/`љ~(aJ Sv<ϚKy%K09)j# e @#?rsqkA#ڔb"^_ـYK NgiUs=xT-N4Z 0E'K7^f-0Gv1_f+^T1 ɤZG96pY>^y-v7- .̵ZDտ[8X`l0EpH# :2(]>u6pT;yG2Yu 36_@uC`RIc$ss=hNĽW_͏k%JNb5U '&*/CK[.mݔS]U l2!t='<~ Tgb^ H@f"j6׸IC_'Øy B` Hnwu A gtkΖ1 @|9̫anН>2޲-J˱&5FڴC ÄMs6gb}F FBgD)1@kutl3l#QD7 G ̰}-h]Î,UE<]/'* ksGo2ʬYԦz0rnD‚An95Y_߭lx 0RT&ۦ+Պ., %90Śo}ZYaŶ̄σuFvt$m,`ex8ya'K8GwX 4}=?3i}q)1aW;-lhb?(8s5kAvx ɜWtK$q|ZEN8$ mʼۭUۺQv݈4,g 1FYPy,65 Sߣz17:(d-X@y@}o]A9?Ξ"afc QS39'X%֤^_ҒQ402_;L;ݕ۱r= T_U1]Hſnl}=:R7[>Όaj %GlDLñU`qTX<42ga'-k]FWt0jCJ',wabˆd/F7g}lj?r$(HAHTPRȌ L(5 E RTx?ϙ;ţڸ-Qzn-ؾ_"q[!ԉEFVq.yPyp>H:H! M9s7b@@$1B^Pk\Ӗf0=ˈ0a!5eKRmyz8)]4 :1虴9s$,D#[X\U1EϦH3Tj\1wb _cTvC+ s,'|"# *P@ZF;1+]%fŚ7=b2VSKVhPU릪5@ғbddbGSJ[7 Vb"BlZvPd]):J+QD0ã+:8RVI 74U*Yylσ(Z5 )3~4L{ |CޚWV*v'a̬3ef:S6C(|eI֍١CH S`ĀpsFy'['@Ȏy--=G:O9 Ra[Tq8]gF7]guJ^ `aDoaV/CQ{ɩCOD[ta.tIQ5ͶQ0e%nK][V7~JurPYGn^d,)k1" \ U2$'l!J]T{/yPf2w2sJOz d̕a!r]{c}f9fLY:<(uBA;o+n֒*)zQZsXGE3uL8Ksg>YZɂK7En~6>y ^uvw w-z5RX"**ƅ%GkR(p Fw[?eN:\/LjG/fA7͖wD-T @y5{6t_ÈIGȼZ.()c7p?,o)p\+0Sd7:o A6y|Nxp ^+z,KE-Dn3u C + Fscx($7=A2B $w ?gJ ďF_"|1( : /Ŗ:vVxPrx"y (D¶𞳊WhSQk2Sd)NOcvueePސCÒZz?Ǭڟ~̒gʽ~ WH-O(N[fO¤nN6:ס)t Hp?[)T0J绪 \ݗʍ[|`bY|_OI͞g?!cuԠ6 !uwQ ~f@6H3٨<1oAB0W` |։ _<5?6vP,dR:O2*TN=*t"1#zGG̋q d]q޽݀WI0~.XƊ ʼn)7 &K\0ς@gAn(4WDB:iM]0:e\Qrqjh]U2BYm j~.Vokmm][ԭ2qnQc@)0*%B1 ~3Ũ@&>V3PKuW| WÇzZMk7׳WqȡX 9~]":Aܙ7̶j.f-\_,HPg@P(=5"OOu*/[̻lEulh:ү[" (?mΟv "Qb*JJ@14ts{"s|T^y "9y/lnr_~=1,\[=CJBn.uUĝ:֤o D*j|Gm$ [xmxy|ڵ 9̗ԩ\hZE*~ȏ>eXšg<ev?,ѓ*!=g EH:6yKɿ8_7#n&uuZKDGp2%6]>=X}۞V1 h 9@ +/iPl-HD%`k/ 5V UjoR&'vt2߼e+n[ 2 L^ f\tH 28vwhyv*_IKodvܴѳ_@bPқsP4Q5<_ !pE_?17JN(s#ࡂP࿫\yUW 83R "gyxKzra;baaċK]Nc{;YvsK6=0qҰhz?X+ݡ/C?z~Nq޳[I.KSx.z9nMeB`b1msaEx 2փF߫]eȼKKA㰶Dc gCY=Hzq]n}."hu" 9[/ .qŊ вuf-٣CnrS ';C̔4F=#,д<9i^QV@](&A ⑧K_I?)A^?D$Ԥs$佂khV`>oNk`>*rSpM g|kny_*"Mg(9 i퇕V;ţ(<뻋WPUQoӾ*eCF?Z!e %?8+#N .(>t>vS,zdCFcLdnI^/+=AJWpҮdWэqC=`ȡ8OJqIBH+WxIJe \\30=T0 {`p9h6q !0%F~Q0Ek<%"bRr`U